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