• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2025 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_NODE_API_H
17 #define FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_NATIVE_NODE_API_H
18 
19 #include <functional>
20 #include <iostream>
21 #include <string>
22 #include <vector>
23 
24 #include "js_native_api.h"
25 #include "native_common.h"
26 #include "node_api.h"
27 
28 typedef void (*NAPIGetJSCode)(const char** buf, int* bufLen);
29 typedef void (*NapiNativeFinalize)(napi_env env, void* data, void* hint);
30 typedef void* (*NapiDetachCallback)(napi_env env, void* nativeObject, void* hint); // hint: detach params
31 typedef napi_value (*NapiAttachCallback)(napi_env env, void* nativeObject, void* hint); // hint: attach params
32 typedef bool (*napi_module_validate_callback)(const char* moduleName);
33 typedef struct napi_fast_native_scope__* napi_fast_native_scope;
34 
35 typedef struct napi_module_with_js {
36     int nm_version = 0;
37     unsigned int nm_flags = 0;
38     const char* nm_filename = nullptr;
39     napi_addon_register_func nm_register_func = nullptr;
40     const char* nm_modname = nullptr;
41     void* nm_priv = nullptr;
42     NAPIGetJSCode nm_get_abc_code = nullptr;
43     NAPIGetJSCode nm_get_js_code = nullptr;
44 } napi_module_with_js;
45 
46 typedef enum {
47     napi_eprio_vip = 0,
48     napi_eprio_immediate = 1,
49     napi_eprio_high = 2,
50     napi_eprio_low = 3,
51     napi_eprio_idle = 4,
52 } napi_event_priority;
53 
54 NAPI_EXTERN napi_status napi_create_limit_runtime(napi_env env, napi_env* result_env);
55 NAPI_EXTERN void napi_module_with_js_register(napi_module_with_js* mod);
56 NAPI_EXTERN napi_status napi_is_callable(napi_env env, napi_value value, bool* result);
57 NAPI_EXTERN napi_status napi_create_runtime(napi_env env, napi_env* result_env);
58 NAPI_EXTERN napi_status napi_serialize_inner(napi_env env,
59                                              napi_value object,
60                                              napi_value transfer_list,
61                                              napi_value clone_list,
62                                              bool defaultTransfer,
63                                              bool defaultCloneSendable,
64                                              void** result);
65 NAPI_EXTERN napi_status napi_serialize_inner_with_error(napi_env env,
66                                                         napi_value object,
67                                                         napi_value transfer_list,
68                                                         napi_value clone_list,
69                                                         bool defaultTransfer,
70                                                         bool defaultCloneSendable,
71                                                         void** result,
72                                                         std::string& error);
73 NAPI_EXTERN napi_status napi_run_actor(napi_env env,
74                                        const char* path,
75                                        char* entryPoint,
76                                        napi_value* result);
77 NAPI_EXTERN napi_status napi_wrap_with_size(napi_env env,
78                                             napi_value js_object,
79                                             void* native_object,
80                                             napi_finalize finalize_cb,
81                                             void* finalize_hint,
82                                             napi_ref* result,
83                                             size_t native_binding_size);
84 NAPI_EXTERN napi_status napi_wrap_async_finalizer(napi_env env,
85                                                   napi_value js_object,
86                                                   void* native_object,
87                                                   napi_finalize finalize_cb,
88                                                   void* finalize_hint,
89                                                   napi_ref* result,
90                                                   size_t native_binding_size);
91 NAPI_EXTERN napi_status napi_create_external_with_size(napi_env env,
92                                                        void* data,
93                                                        napi_finalize finalize_cb,
94                                                        void* finalize_hint,
95                                                        napi_value* result,
96                                                        size_t native_binding_size);
97 NAPI_EXTERN napi_status napi_set_promise_rejection_callback(napi_env env, napi_ref ref, napi_ref checkRef);
98 
99 NAPI_EXTERN napi_status napi_is_arguments_object(napi_env env, napi_value value, bool* result);
100 NAPI_EXTERN napi_status napi_is_async_function(napi_env env, napi_value value, bool* result);
101 NAPI_EXTERN napi_status napi_is_boolean_object(napi_env env, napi_value value, bool* result);
102 NAPI_EXTERN napi_status napi_is_generator_function(napi_env env, napi_value value, bool* result);
103 NAPI_EXTERN napi_status napi_is_date(napi_env env, napi_value value, bool* result);
104 
105 NAPI_EXTERN napi_status napi_is_map_iterator(napi_env env, napi_value value, bool* result);
106 NAPI_EXTERN napi_status napi_is_set_iterator(napi_env env, napi_value value, bool* result);
107 NAPI_EXTERN napi_status napi_is_generator_object(napi_env env, napi_value value, bool* result);
108 NAPI_EXTERN napi_status napi_is_module_namespace_object(napi_env env, napi_value value, bool* result);
109 NAPI_EXTERN napi_status napi_is_proxy(napi_env env, napi_value value, bool* result);
110 NAPI_EXTERN napi_status napi_is_reg_exp(napi_env env, napi_value value, bool* result);
111 NAPI_EXTERN napi_status napi_is_number_object(napi_env env, napi_value value, bool* result);
112 NAPI_EXTERN napi_status napi_is_map(napi_env env, napi_value value, bool* result);
113 NAPI_EXTERN napi_status napi_is_set(napi_env env, napi_value value, bool* result);
114 
115 NAPI_EXTERN napi_status napi_is_string_object(napi_env env, napi_value value, bool* result);
116 NAPI_EXTERN napi_status napi_is_symbol_object(napi_env env, napi_value value, bool* result);
117 NAPI_EXTERN napi_status napi_is_weak_map(napi_env env, napi_value value, bool* result);
118 NAPI_EXTERN napi_status napi_is_weak_set(napi_env env, napi_value value, bool* result);
119 
120 NAPI_EXTERN napi_status napi_is_big_int64_array(napi_env env, napi_value value, bool* result);
121 NAPI_EXTERN napi_status napi_is_big_uint64_array(napi_env env, napi_value value, bool* result);
122 NAPI_EXTERN napi_status napi_is_shared_array_buffer(napi_env env, napi_value value, bool* result);
123 NAPI_EXTERN napi_status napi_get_stack_trace(napi_env env, std::string& stack);
124 NAPI_EXTERN napi_status napi_get_hybrid_stack_trace(napi_env env, std::string& stack);
125 NAPI_EXTERN napi_status napi_get_own_property_descriptor(napi_env env,
126                                                          napi_value object,
127                                                          const char* utf8name,
128                                                          napi_value* result);
129 NAPI_EXTERN napi_status napi_object_get_keys(napi_env env, napi_value data, napi_value* result);
130 NAPI_EXTERN napi_status napi_get_print_string(napi_env env,
131                                               napi_value value,
132                                               std::string& result);
133 /*
134  * @brief Send a task to the JS Thread
135  *
136  * @param env The native engine.
137  * @param cb CallBack in JS Thread
138  * @param priority Task priority
139  *
140  * @return napi_status Return send event status
141  */
142 NAPI_EXTERN napi_status napi_send_event(napi_env env,
143                                         const std::function<void()>& cb,
144                                         napi_event_priority priority,
145                                         const char* name = nullptr);
146 /*
147  * @brief Send a task to the JS Thread
148  *
149  * @param env The native engine.
150  * @param cb CallBack in JS Thread.
151  * @param data Input parameter of callback.
152  * @param priority Task priority.
153  * @param handleId Handle to cancel a task.
154  * @param name Task name, Use the task name and handleId as the tag of task.
155  *
156  * @return napi_status Return send event status
157  */
158 NAPI_EXTERN napi_status napi_send_cancelable_event(napi_env env,
159                                                    const std::function<void(void*)>& cb,
160                                                    void* data,
161                                                    napi_event_priority priority,
162                                                    uint64_t* handleId,
163                                                    const char* name);
164 /*
165  * @brief Send a task to the JS Thread
166  *
167  * @param env The native engine.
168  * @param handleId Handle to cancel a task, But sometimes it do not work when used alone.
169  * @param name Task name, The name must be the same as the name of the task send.
170  *
171  * @return napi_status Return cancel event status
172  */
173 NAPI_EXTERN napi_status napi_cancel_event(napi_env env, uint64_t handleId, const char* name);
174 NAPI_EXTERN napi_status napi_open_fast_native_scope(napi_env env, napi_fast_native_scope* scope);
175 NAPI_EXTERN napi_status napi_close_fast_native_scope(napi_env env, napi_fast_native_scope scope);
176 NAPI_EXTERN napi_status napi_get_shared_array_buffer_info(napi_env env,
177                                                           napi_value arraybuffer,
178                                                           void** data,
179                                                           size_t* byte_length);
180 NAPI_EXTERN napi_status napi_encode(napi_env env, napi_value src, napi_value* result);
181 NAPI_EXTERN napi_status napi_is_bitvector(napi_env env, napi_value value, bool* result);
182 NAPI_EXTERN napi_status napi_add_cleanup_finalizer(napi_env env, void (*fun)(void* arg), void* arg);
183 NAPI_EXTERN napi_status napi_remove_cleanup_finalizer(napi_env env, void (*fun)(void* arg), void* arg);
184 /**
185  * Sets a callback to validate modules when they are loaded by the context engine.
186  *
187  * This function is thread-safe.
188  *
189  * @param check_callback The callback used to determine whether a module can be imported.
190  *                       The callback should return true if the module name is allowed.
191  *
192  * @return napi_status The status of the operation. Returns napi_ok if successful.
193  */
194 NAPI_EXTERN napi_status napi_set_module_validate_callback(napi_module_validate_callback check_callback);
195 NAPI_EXTERN napi_status napi_load_module_with_path(napi_env env, const char* path,
196                                                    napi_value* result);
197 NAPI_EXTERN napi_status napi_throw_jsvalue(napi_env env, napi_value error);
198 
199 #endif /* FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_NATIVE_NODE_API_H */