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_EXTERN napi_status napi_fatal_exception(napi_env env, napi_value err); 45 46 47 NAPI_EXTERN napi_status napi_create_string_utf16(napi_env env, 48 const char16_t* str, 49 size_t length, 50 napi_value* result); 51 52 NAPI_EXTERN napi_status napi_get_value_string_utf16(napi_env env, 53 napi_value value, 54 char16_t* buf, 55 size_t bufsize, 56 size_t* result); 57 58 NAPI_EXTERN napi_status napi_type_tag_object(napi_env env, 59 napi_value value, 60 const napi_type_tag* type_tag); 61 62 NAPI_EXTERN napi_status napi_check_object_type_tag(napi_env env, 63 napi_value value, 64 const napi_type_tag* type_tag, 65 bool* result); 66 67 68 NAPI_INNER_EXTERN napi_status napi_adjust_external_memory(napi_env env, 69 int64_t change_in_bytes, 70 int64_t* adjusted_value); 71 72 #ifdef __cplusplus 73 extern "C" { 74 #endif 75 76 typedef void* (*napi_native_binding_detach_callback)(napi_env env, void* native_object, void* hint); 77 typedef napi_value (*napi_native_binding_attach_callback)(napi_env env, void* native_object, void* hint); 78 typedef void (*napi_detach_finalize_callback)(void* detachedObject, void* finalizeHint); 79 80 NAPI_EXTERN napi_status node_api_get_module_file_name(napi_env env, const char** result); 81 NAPI_EXTERN napi_status napi_run_script_path(napi_env env, const char* path, napi_value* result); 82 NAPI_EXTERN napi_status napi_queue_async_work_with_qos(napi_env env, napi_async_work work, napi_qos_t qos); 83 NAPI_EXTERN napi_status napi_load_module(napi_env env, const char* path, napi_value* result); 84 NAPI_EXTERN napi_status napi_load_module_with_info(napi_env env, 85 const char* path, 86 const char* module_info, 87 napi_value* result); 88 NAPI_EXTERN napi_status napi_create_object_with_properties(napi_env env, 89 napi_value* result, 90 size_t property_count, 91 const napi_property_descriptor* properties); 92 NAPI_EXTERN napi_status napi_create_object_with_named_properties(napi_env env, 93 napi_value* result, 94 size_t property_count, 95 const char** keys, 96 const napi_value* values); 97 NAPI_EXTERN napi_status napi_coerce_to_native_binding_object(napi_env env, 98 napi_value js_object, 99 napi_native_binding_detach_callback detach_cb, 100 napi_native_binding_attach_callback attach_cb, 101 void* native_object, 102 void* hint); 103 NAPI_EXTERN napi_status napi_add_detached_finalizer(napi_env env, 104 napi_value native_binding_object, 105 napi_detach_finalize_callback detach_finalize_cb, 106 void* finalize_hint); 107 NAPI_EXTERN napi_status napi_run_event_loop(napi_env env, napi_event_mode mode); 108 NAPI_EXTERN napi_status napi_stop_event_loop(napi_env env); 109 NAPI_EXTERN napi_status napi_create_ark_runtime(napi_env *env); 110 NAPI_EXTERN napi_status napi_destroy_ark_runtime(napi_env *env); 111 112 NAPI_EXTERN napi_status napi_serialize(napi_env env, 113 napi_value object, 114 napi_value transfer_list, 115 napi_value clone_list, 116 void** result); 117 NAPI_EXTERN napi_status napi_deserialize(napi_env env, void* buffer, napi_value* object); 118 NAPI_EXTERN napi_status napi_delete_serialization_data(napi_env env, void* buffer); 119 NAPI_EXTERN napi_status napi_is_concurrent_function(napi_env env, napi_value value, bool* result); 120 121 122 NAPI_EXTERN napi_status napi_call_threadsafe_function_with_priority(napi_threadsafe_function func, 123 void *data, 124 napi_task_priority priority, 125 bool isTail); 126 NAPI_EXTERN napi_status napi_create_map(napi_env env, napi_value* result); 127 NAPI_EXTERN napi_status napi_map_set_property(napi_env env, napi_value map, napi_value key, napi_value value); 128 NAPI_EXTERN napi_status napi_map_set_named_property(napi_env env, 129 napi_value map, 130 const char* utf8name, 131 napi_value value); 132 NAPI_EXTERN napi_status napi_map_get_property(napi_env env, napi_value map, napi_value key, napi_value* result); 133 NAPI_EXTERN napi_status napi_map_get_named_property(napi_env env, 134 napi_value map, 135 const char* utf8name, 136 napi_value* result); 137 NAPI_EXTERN napi_status napi_map_has_property(napi_env env, napi_value map, napi_value key, bool* result); 138 NAPI_EXTERN napi_status napi_map_has_named_property(napi_env env, napi_value map, const char* utf8name, bool* result); 139 NAPI_EXTERN napi_status napi_map_delete_property(napi_env env, napi_value map, napi_value key); 140 NAPI_EXTERN napi_status napi_map_clear(napi_env env, napi_value map); 141 NAPI_EXTERN napi_status napi_map_get_size(napi_env env, napi_value map, uint32_t* result); 142 NAPI_EXTERN napi_status napi_map_get_entries(napi_env env, napi_value map, napi_value* result); 143 NAPI_EXTERN napi_status napi_map_get_keys(napi_env env, napi_value map, napi_value* result); 144 NAPI_EXTERN napi_status napi_map_get_values(napi_env env, napi_value map, napi_value* result); 145 NAPI_EXTERN napi_status napi_map_iterator_get_next(napi_env env, napi_value iterator, napi_value* result); 146 NAPI_EXTERN napi_status napi_wrap_enhance(napi_env env, 147 napi_value js_object, 148 void* native_object, 149 napi_finalize finalize_cb, 150 bool async_finalizer, 151 void* finalize_hint, 152 size_t native_binding_size, 153 napi_ref* result); 154 155 // ======================================= sendable api begin ======================================= // 156 NAPI_EXTERN napi_status napi_define_sendable_class(napi_env env, 157 const char* utf8name, 158 size_t length, 159 napi_callback constructor, 160 void* data, 161 size_t property_count, 162 const napi_property_descriptor* properties, 163 napi_value parent, 164 napi_value* result); 165 NAPI_EXTERN napi_status napi_create_sendable_object_with_properties(napi_env env, 166 size_t property_count, 167 const napi_property_descriptor* properties, 168 napi_value* result); 169 NAPI_EXTERN napi_status napi_create_sendable_array(napi_env env, napi_value* result); 170 NAPI_EXTERN napi_status napi_create_sendable_array_with_length(napi_env env, size_t length, napi_value* result); 171 NAPI_EXTERN napi_status napi_create_sendable_arraybuffer(napi_env env, size_t byte_length, 172 void** data, napi_value* result); 173 NAPI_EXTERN napi_status napi_create_sendable_typedarray(napi_env env, 174 napi_typedarray_type type, 175 size_t length, 176 napi_value arraybuffer, 177 size_t byte_offset, 178 napi_value* result); 179 NAPI_EXTERN napi_status napi_create_sendable_map(napi_env env, napi_value* result); 180 /* 181 * Determine whether it can be held by a sendable object, including the sendable object and primitive type. 182 */ 183 NAPI_EXTERN napi_status napi_is_sendable(napi_env env, napi_value value, bool* result); 184 NAPI_EXTERN napi_status napi_wrap_sendable(napi_env env, 185 napi_value js_object, 186 void* native_object, 187 napi_finalize finalize_cb, 188 void* finalize_hint); 189 NAPI_EXTERN napi_status napi_wrap_sendable_with_size(napi_env env, 190 napi_value js_object, 191 void* native_object, 192 napi_finalize finalize_cb, 193 void* finalize_hint, 194 size_t native_binding_size); 195 NAPI_EXTERN napi_status napi_unwrap_sendable(napi_env env, napi_value js_object, void** result); 196 NAPI_EXTERN napi_status napi_remove_wrap_sendable(napi_env env, napi_value js_object, void** result); 197 // ======================================== sendable api end ======================================== // 198 #ifdef __cplusplus 199 } 200 #endif 201 #endif /* FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_NATIVE_API_H */ 202