1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_NATIVE_API_H 17 #define FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_NATIVE_API_H 18 19 #ifndef NAPI_VERSION 20 #define NAPI_VERSION 8 21 #endif 22 23 #ifndef NAPI_EXPERIMENTAL 24 #define NAPI_EXPERIMENTAL 25 #endif 26 27 #include "common.h" 28 #include "node_api.h" 29 30 #ifdef NAPI_TEST 31 #ifdef _WIN32 32 #define NAPI_INNER_EXTERN __declspec(dllexport) 33 #else 34 #define NAPI_INNER_EXTERN __attribute__((visibility("default"))) 35 #endif 36 #else 37 #ifdef _WIN32 38 #define NAPI_INNER_EXTERN __declspec(deprecated) 39 #else 40 #define NAPI_INNER_EXTERN __attribute__((__deprecated__)) 41 #endif 42 #endif 43 44 NAPI_INNER_EXTERN napi_status napi_fatal_exception(napi_env env, napi_value err); 45 46 NAPI_EXTERN napi_status napi_create_string_utf16(napi_env env, 47 const char16_t* str, 48 size_t length, 49 napi_value* result); 50 51 NAPI_EXTERN napi_status napi_get_value_string_utf16(napi_env env, 52 napi_value value, 53 char16_t* buf, 54 size_t bufsize, 55 size_t* result); 56 57 NAPI_EXTERN napi_status napi_type_tag_object(napi_env env, 58 napi_value value, 59 const napi_type_tag* type_tag); 60 61 NAPI_EXTERN napi_status napi_check_object_type_tag(napi_env env, 62 napi_value value, 63 const napi_type_tag* type_tag, 64 bool* result); 65 66 NAPI_INNER_EXTERN napi_status napi_adjust_external_memory(napi_env env, 67 int64_t change_in_bytes, 68 int64_t* adjusted_value); 69 70 71 #ifdef __cplusplus 72 extern "C" { 73 #endif 74 75 typedef void* (*napi_native_binding_detach_callback)(napi_env env, void* native_object, void* hint); 76 typedef napi_value (*napi_native_binding_attach_callback)(napi_env env, void* native_object, void* hint); 77 78 NAPI_EXTERN napi_status napi_run_script_path(napi_env env, const char* path, napi_value* result); 79 NAPI_EXTERN napi_status napi_queue_async_work_with_qos(napi_env env, napi_async_work work, napi_qos_t qos); 80 NAPI_EXTERN napi_status napi_load_module(napi_env env, const char* path, napi_value* result); 81 NAPI_EXTERN napi_status napi_get_instance_data(napi_env env, void** data); 82 NAPI_EXTERN napi_status napi_set_instance_data(napi_env env, 83 void* data, 84 napi_finalize finalize_cb, 85 void* finalize_hint); 86 NAPI_EXTERN napi_status napi_remove_env_cleanup_hook(napi_env env, void (*fun)(void* arg), void* arg); 87 NAPI_EXTERN napi_status napi_add_env_cleanup_hook(napi_env env, void (*fun)(void* arg), void* arg); 88 NAPI_EXTERN napi_status napi_remove_async_cleanup_hook(napi_async_cleanup_hook_handle remove_handle); 89 NAPI_EXTERN napi_status napi_add_async_cleanup_hook(napi_env env, 90 napi_async_cleanup_hook hook, 91 void* arg, 92 napi_async_cleanup_hook_handle* remove_handle); 93 NAPI_EXTERN napi_status napi_async_destroy(napi_env env, 94 napi_async_context async_context); 95 NAPI_EXTERN napi_status napi_async_init(napi_env env, 96 napi_value async_resource, 97 napi_value async_resource_name, 98 napi_async_context* result); 99 NAPI_EXTERN napi_status napi_close_callback_scope(napi_env env, napi_callback_scope scope); 100 NAPI_EXTERN napi_status napi_open_callback_scope(napi_env env, 101 napi_value resource_object, 102 napi_async_context context, 103 napi_callback_scope* result); 104 NAPI_EXTERN napi_status node_api_get_module_file_name(napi_env env, const char** result); 105 // Create JSObject with initial properties given by descriptors, note that property key must be String, 106 // and must can not convert to element_index, also all keys must not duplicate. 107 NAPI_EXTERN napi_status napi_create_object_with_properties(napi_env env, 108 napi_value* result, 109 size_t property_count, 110 const napi_property_descriptor* properties); 111 // Create JSObject with initial properties given by keys and values, note that property key must be String, 112 // and must can not convert to element_index, also all keys must not duplicate. 113 NAPI_EXTERN napi_status napi_create_object_with_named_properties(napi_env env, 114 napi_value* result, 115 size_t property_count, 116 const char** keys, 117 const napi_value* values); 118 NAPI_EXTERN napi_status napi_coerce_to_native_binding_object(napi_env env, 119 napi_value js_object, 120 napi_native_binding_detach_callback detach_cb, 121 napi_native_binding_attach_callback attach_cb, 122 void* native_object, 123 void* hint); 124 NAPI_EXTERN napi_status napi_add_finalizer(napi_env env, 125 napi_value js_object, 126 void* native_object, 127 napi_finalize finalize_cb, 128 void* finalize_hint, 129 napi_ref* result); 130 131 #ifdef __cplusplus 132 } 133 #endif 134 #endif /* FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_NATIVE_API_H */ 135