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 79 NAPI_EXTERN napi_status node_api_get_module_file_name(napi_env env, const char** result); 80 NAPI_EXTERN napi_status napi_run_script_path(napi_env env, const char* path, napi_value* result); 81 NAPI_EXTERN napi_status napi_queue_async_work_with_qos(napi_env env, napi_async_work work, napi_qos_t qos); 82 NAPI_EXTERN napi_status napi_load_module(napi_env env, const char* path, napi_value* result); 83 NAPI_EXTERN napi_status napi_load_module_with_info(napi_env env, 84 const char* path, 85 const char* module_info, 86 napi_value* result); 87 NAPI_EXTERN napi_status napi_create_object_with_properties(napi_env env, 88 napi_value* result, 89 size_t property_count, 90 const napi_property_descriptor* properties); 91 NAPI_EXTERN napi_status napi_create_object_with_named_properties(napi_env env, 92 napi_value* result, 93 size_t property_count, 94 const char** keys, 95 const napi_value* values); 96 NAPI_EXTERN napi_status napi_coerce_to_native_binding_object(napi_env env, 97 napi_value js_object, 98 napi_native_binding_detach_callback detach_cb, 99 napi_native_binding_attach_callback attach_cb, 100 void* native_object, 101 void* hint); 102 NAPI_EXTERN napi_status napi_run_event_loop(napi_env env, napi_event_mode mode); 103 NAPI_EXTERN napi_status napi_stop_event_loop(napi_env env); 104 NAPI_EXTERN napi_status napi_create_ark_runtime(napi_env *env); 105 NAPI_EXTERN napi_status napi_destroy_ark_runtime(napi_env *env); 106 107 NAPI_EXTERN napi_status napi_serialize(napi_env env, 108 napi_value object, 109 napi_value transfer_list, 110 napi_value clone_list, 111 void** result); 112 NAPI_EXTERN napi_status napi_deserialize(napi_env env, void* buffer, napi_value* object); 113 NAPI_EXTERN napi_status napi_delete_serialization_data(napi_env env, void* buffer); 114 NAPI_EXTERN napi_status napi_is_concurrent_function(napi_env env, napi_value value, bool* result); 115 116 117 NAPI_EXTERN napi_status napi_call_threadsafe_function_with_priority(napi_threadsafe_function func, 118 void *data, 119 napi_task_priority priority, 120 bool isTail); 121 NAPI_EXTERN napi_status napi_create_map(napi_env env, napi_value* result); 122 NAPI_EXTERN napi_status napi_map_set_property(napi_env env, napi_value map, napi_value key, napi_value value); 123 NAPI_EXTERN napi_status napi_map_set_named_property(napi_env env, 124 napi_value map, 125 const char* utf8name, 126 napi_value value); 127 NAPI_EXTERN napi_status napi_map_get_property(napi_env env, napi_value map, napi_value key, napi_value* result); 128 NAPI_EXTERN napi_status napi_map_get_named_property(napi_env env, 129 napi_value map, 130 const char* utf8name, 131 napi_value* result); 132 NAPI_EXTERN napi_status napi_map_has_property(napi_env env, napi_value map, napi_value key, bool* result); 133 NAPI_EXTERN napi_status napi_map_has_named_property(napi_env env, napi_value map, const char* utf8name, bool* result); 134 NAPI_EXTERN napi_status napi_map_delete_property(napi_env env, napi_value map, napi_value key); 135 NAPI_EXTERN napi_status napi_map_clear(napi_env env, napi_value map); 136 NAPI_EXTERN napi_status napi_map_get_size(napi_env env, napi_value map, uint32_t* result); 137 NAPI_EXTERN napi_status napi_map_get_entries(napi_env env, napi_value map, napi_value* result); 138 NAPI_EXTERN napi_status napi_map_get_keys(napi_env env, napi_value map, napi_value* result); 139 NAPI_EXTERN napi_status napi_map_get_values(napi_env env, napi_value map, napi_value* result); 140 NAPI_EXTERN napi_status napi_map_iterator_get_next(napi_env env, napi_value iterator, napi_value* result); 141 142 // ======================================= sendable api begin ======================================= // 143 NAPI_EXTERN napi_status napi_define_sendable_class(napi_env env, 144 const char* utf8name, 145 size_t length, 146 napi_callback constructor, 147 void* data, 148 size_t property_count, 149 const napi_property_descriptor* properties, 150 napi_value parent, 151 napi_value* result); 152 NAPI_EXTERN napi_status napi_create_sendable_object_with_properties(napi_env env, 153 size_t property_count, 154 const napi_property_descriptor* properties, 155 napi_value* result); 156 NAPI_EXTERN napi_status napi_create_sendable_array(napi_env env, napi_value* result); 157 NAPI_EXTERN napi_status napi_create_sendable_array_with_length(napi_env env, size_t length, napi_value* result); 158 NAPI_EXTERN napi_status napi_create_sendable_arraybuffer(napi_env env, size_t byte_length, 159 void** data, napi_value* result); 160 NAPI_EXTERN napi_status napi_create_sendable_typedarray(napi_env env, 161 napi_typedarray_type type, 162 size_t length, 163 napi_value arraybuffer, 164 size_t byte_offset, 165 napi_value* result); 166 NAPI_EXTERN napi_status napi_create_sendable_map(napi_env env, napi_value* result); 167 /* 168 * Determine whether it can be held by a sendable object, including the sendable object and primitive type. 169 */ 170 NAPI_EXTERN napi_status napi_is_sendable(napi_env env, napi_value value, bool* result); 171 NAPI_EXTERN napi_status napi_wrap_sendable(napi_env env, 172 napi_value js_object, 173 void* native_object, 174 napi_finalize finalize_cb, 175 void* finalize_hint); 176 NAPI_EXTERN napi_status napi_wrap_sendable_with_size(napi_env env, 177 napi_value js_object, 178 void* native_object, 179 napi_finalize finalize_cb, 180 void* finalize_hint, 181 size_t native_binding_size); 182 NAPI_EXTERN napi_status napi_unwrap_sendable(napi_env env, napi_value js_object, void** result); 183 NAPI_EXTERN napi_status napi_remove_wrap_sendable(napi_env env, napi_value js_object, void** result); 184 // ======================================== sendable api end ======================================== // 185 #ifdef __cplusplus 186 } 187 #endif 188 #endif /* FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_NATIVE_API_H */ 189