1 /*
2  * Copyright (c) 2021-2022 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 "node_api.h"
26 #include "native_common.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 struct napi_fast_native_scope__* napi_fast_native_scope;
33 
34 typedef struct napi_module_with_js {
35     int nm_version = 0;
36     unsigned int nm_flags = 0;
37     const char* nm_filename = nullptr;
38     napi_addon_register_func nm_register_func = nullptr;
39     const char* nm_modname = nullptr;
40     void* nm_priv = nullptr;
41     NAPIGetJSCode nm_get_abc_code = nullptr;
42     NAPIGetJSCode nm_get_js_code = nullptr;
43 } napi_module_with_js;
44 
45 typedef enum {
46     napi_eprio_vip = 0,
47     napi_eprio_immediate = 1,
48     napi_eprio_high = 2,
49     napi_eprio_low = 3,
50     napi_eprio_idle = 4,
51 } napi_event_priority;
52 
53 NAPI_EXTERN napi_status napi_create_limit_runtime(napi_env env, napi_env* result_env);
54 NAPI_EXTERN void napi_module_with_js_register(napi_module_with_js* mod);
55 NAPI_EXTERN napi_status napi_is_callable(napi_env env, napi_value value, bool* result);
56 NAPI_EXTERN napi_status napi_create_runtime(napi_env env, napi_env* result_env);
57 NAPI_EXTERN napi_status napi_serialize_inner(napi_env env, napi_value object, napi_value transfer_list,
58                                              napi_value clone_list, bool defaultTransfer, bool defaultCloneSendable,
59                                              void** result);
60 NAPI_EXTERN napi_status napi_run_actor(napi_env env, uint8_t* buffer, size_t bufferSize,
61                                        const char* descriptor, napi_value* result, char* entryPoint = nullptr);
62 NAPI_EXTERN napi_status napi_wrap_with_size(napi_env env,
63                                             napi_value js_object,
64                                             void* native_object,
65                                             napi_finalize finalize_cb,
66                                             void* finalize_hint,
67                                             napi_ref* result,
68                                             size_t native_binding_size);
69 NAPI_EXTERN napi_status napi_wrap_async_finalizer(napi_env env,
70                                                   napi_value js_object,
71                                                   void* native_object,
72                                                   napi_finalize finalize_cb,
73                                                   void* finalize_hint,
74                                                   napi_ref* result,
75                                                   size_t native_binding_size);
76 NAPI_EXTERN napi_status napi_create_external_with_size(napi_env env,
77                                                        void* data,
78                                                        napi_finalize finalize_cb,
79                                                        void* finalize_hint,
80                                                        napi_value* result,
81                                                        size_t native_binding_size);
82 NAPI_EXTERN napi_status napi_set_promise_rejection_callback(napi_env env, napi_ref ref, napi_ref checkRef);
83 
84 NAPI_EXTERN napi_status napi_is_arguments_object(napi_env env, napi_value value, bool* result);
85 NAPI_EXTERN napi_status napi_is_async_function(napi_env env, napi_value value, bool* result);
86 NAPI_EXTERN napi_status napi_is_boolean_object(napi_env env, napi_value value, bool* result);
87 NAPI_EXTERN napi_status napi_is_generator_function(napi_env env, napi_value value, bool* result);
88 NAPI_EXTERN napi_status napi_is_date(napi_env env, napi_value value, bool* result);
89 
90 NAPI_EXTERN napi_status napi_is_map_iterator(napi_env env, napi_value value, bool* result);
91 NAPI_EXTERN napi_status napi_is_set_iterator(napi_env env, napi_value value, bool* result);
92 NAPI_EXTERN napi_status napi_is_generator_object(napi_env env, napi_value value, bool* result);
93 NAPI_EXTERN napi_status napi_is_module_namespace_object(napi_env env, napi_value value, bool* result);
94 NAPI_EXTERN napi_status napi_is_proxy(napi_env env, napi_value value, bool* result);
95 NAPI_EXTERN napi_status napi_is_reg_exp(napi_env env, napi_value value, bool* result);
96 NAPI_EXTERN napi_status napi_is_number_object(napi_env env, napi_value value, bool* result);
97 NAPI_EXTERN napi_status napi_is_map(napi_env env, napi_value value, bool* result);
98 NAPI_EXTERN napi_status napi_is_set(napi_env env, napi_value value, bool* result);
99 
100 NAPI_EXTERN napi_status napi_is_string_object(napi_env env, napi_value value, bool* result);
101 NAPI_EXTERN napi_status napi_is_symbol_object(napi_env env, napi_value value, bool* result);
102 NAPI_EXTERN napi_status napi_is_weak_map(napi_env env, napi_value value, bool* result);
103 NAPI_EXTERN napi_status napi_is_weak_set(napi_env env, napi_value value, bool* result);
104 
105 NAPI_EXTERN napi_status napi_is_big_int64_array(napi_env env, napi_value value, bool* result);
106 NAPI_EXTERN napi_status napi_is_big_uint64_array(napi_env env, napi_value value, bool* result);
107 NAPI_EXTERN napi_status napi_is_shared_array_buffer(napi_env env, napi_value value, bool* result);
108 NAPI_EXTERN napi_status napi_get_stack_trace(napi_env env, std::string& stack);
109 NAPI_EXTERN napi_status napi_get_hybrid_stack_trace(napi_env env, std::string& stack);
110 NAPI_EXTERN napi_status napi_get_own_property_descriptor(napi_env env,
111                                                          napi_value object,
112                                                          const char* utf8name,
113                                                          napi_value* result);
114 NAPI_EXTERN napi_status napi_object_get_keys(napi_env env, napi_value data, napi_value* result);
115 NAPI_EXTERN napi_status napi_get_print_string(napi_env env,
116                                               napi_value value,
117                                               std::string& result);
118 NAPI_EXTERN napi_status napi_send_event(napi_env env, const std::function<void()> cb, napi_event_priority priority);
119 NAPI_EXTERN napi_status napi_open_fast_native_scope(napi_env env, napi_fast_native_scope* scope);
120 NAPI_EXTERN napi_status napi_close_fast_native_scope(napi_env env, napi_fast_native_scope scope);
121 NAPI_EXTERN napi_status napi_get_shared_array_buffer_info(napi_env env,
122                                                           napi_value arraybuffer,
123                                                           void** data,
124                                                           size_t* byte_length);
125 NAPI_EXTERN napi_status napi_is_bitvector(napi_env env, napi_value value, bool* result);
126 #endif /* FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_NATIVE_NODE_API_H */
127