• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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