• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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_HYBRID_API_H
17 #define FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_NATIVE_NODE_HYBRID_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 napi_value (*proxy_object_attach_cb)(napi_env env, void* data);
29 
30 typedef enum {
31     NAPI_APP_STATE_FOREGROUND = 0,
32     NAPI_APP_STATE_BACKGROUND = 1,
33     NAPI_APP_STATE_SENSITIVE_START = 2,
34     NAPI_APP_STATE_SENSITIVE_END = 3,
35     NAPI_APP_STATE_COLD_START_FINISHED = 4,
36     NAPI_APP_STATE_WARM_START = 5,
37 } NapiAppState;
38 
39 typedef enum {
40     NAPI_DIRECTION_INVALID = 0,
41     NAPI_DIRECTION_DYNAMIC_TO_STATIC = 1, // JS object references the STS object
42     NAPI_DIRECTION_STATIC_TO_DYNAMIC = 2, // STS object references the JS object
43     NAPI_DIRECTION_HYBRID = 3,            // STS object and the JS object references each other
44 } NapiXRefDirection;
45 
46 typedef struct NapiStackInfo {
47     size_t stackStart;
48     size_t stackSize;
49 } NapiStackInfo;
50 
51 using NapiAppStateCallback = void (*)(int state, int64_t timestamp);
52 
53 NAPI_EXTERN napi_status napi_load_module_with_info_hybrid(napi_env env,
54                                                           const char* path,
55                                                           const char* module_info,
56                                                           napi_value* result);
57 NAPI_EXTERN napi_status napi_load_module_with_module_request(napi_env env,
58                                                              const char* request_name,
59                                                              napi_value* result);
60 NAPI_EXTERN napi_status napi_set_stackinfo(napi_env env, NapiStackInfo* napi_info);
61 NAPI_EXTERN napi_status napi_get_stackinfo(napi_env env, NapiStackInfo* result);
62 
63 // XGC specific internal API
64 #ifdef PANDA_JS_ETS_HYBRID_MODE
65 NAPI_EXTERN napi_status napi_xref_wrap(napi_env env,
66                                        napi_value js_object,
67                                        void* native_object,
68                                        napi_finalize finalize_cb,
69                                        NapiXRefDirection ref_direction,
70                                        napi_ref* result);
71 
72 NAPI_EXTERN napi_status napi_xref_unwrap(napi_env env, napi_value js_object, void** result);
73 
74 NAPI_EXTERN napi_status napi_mark_from_object(napi_env env, napi_ref ref);
75 
76 NAPI_EXTERN napi_status napi_create_xref(napi_env env,
77                                          napi_value value,
78                                          uint32_t initial_refcount,
79                                          napi_ref* result);
80 
81 NAPI_EXTERN napi_status napi_vm_handshake(napi_env env, void* inputIface, void** outputIface);
82 
83 NAPI_EXTERN napi_status napi_mark_attach_with_xref(napi_env env,
84                                                    napi_value js_object,
85                                                    void* attach_data,
86                                                    proxy_object_attach_cb attach_cb);
87 
88 NAPI_EXTERN napi_status napi_is_alive_object(napi_env env, napi_ref ref, bool* result);
89 NAPI_EXTERN napi_status napi_is_contain_object(napi_env env, napi_ref ref, bool* result);
90 NAPI_EXTERN napi_status napi_is_xref_type(napi_env env, napi_value js_object, bool* result);
91 NAPI_EXTERN napi_status napi_get_ets_implements(napi_env env, napi_value value, napi_value* result);
92 NAPI_EXTERN napi_status napi_deserialize_hybrid(napi_env env, void* buffer, napi_value* object);
93 NAPI_EXTERN napi_status napi_setup_hybrid_environment(napi_env env);
94 
95 NAPI_EXTERN napi_status napi_serialize_hybrid(napi_env env,
96                                               napi_value object,
97                                               napi_value transfer_list,
98                                               napi_value clone_list, void** result);
99  NAPI_EXTERN napi_status napi_wrap_with_xref(napi_env env,
100                                             napi_value js_object,
101                                             void* native_object,
102                                             napi_finalize finalize_cb,
103                                             napi_ref* result);
104 #endif // PANDA_JS_ETS_HYBRID_MODE
105 NAPI_EXTERN napi_status napi_register_appstate_callback(napi_env env, NapiAppStateCallback callback);
106 
107 #endif /* FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_NATIVE_NODE_HYBRID_API_H */