Where Online Learning is simpler!
The C and C++ Include Header Files
cat -n /usr/include/node/node_api.h
1 #ifndef SRC_NODE_API_H_ 2 #define SRC_NODE_API_H_ 3 4 #if defined(BUILDING_NODE_EXTENSION) && !defined(NAPI_EXTERN) 5 #ifdef _WIN32 6 // Building native addon against node 7 #define NAPI_EXTERN __declspec(dllimport) 8 #elif defined(__wasm__) 9 #define NAPI_EXTERN __attribute__((__import_module__("napi"))) 10 #endif 11 #endif 12 #include "js_native_api.h" 13 #include "node_api_types.h" 14 15 struct uv_loop_s; // Forward declaration. 16 17 #ifdef _WIN32 18 #define NAPI_MODULE_EXPORT __declspec(dllexport) 19 #else 20 #ifdef __EMSCRIPTEN__ 21 #define NAPI_MODULE_EXPORT \ 22 __attribute__((visibility("default"))) __attribute__((used)) 23 #else 24 #define NAPI_MODULE_EXPORT __attribute__((visibility("default"))) 25 #endif 26 #endif 27 28 #if defined(__GNUC__) 29 #define NAPI_NO_RETURN __attribute__((noreturn)) 30 #elif defined(_WIN32) 31 #define NAPI_NO_RETURN __declspec(noreturn) 32 #else 33 #define NAPI_NO_RETURN 34 #endif 35 36 // Used by deprecated registration method napi_module_register. 37 typedef struct napi_module { 38 int nm_version; 39 unsigned int nm_flags; 40 const char* nm_filename; 41 napi_addon_register_func nm_register_func; 42 const char* nm_modname; 43 void* nm_priv; 44 void* reserved[4]; 45 } napi_module; 46 47 #define NAPI_MODULE_VERSION 1 48 49 #define NAPI_MODULE_INITIALIZER_X(base, version) \ 50 NAPI_MODULE_INITIALIZER_X_HELPER(base, version) 51 #define NAPI_MODULE_INITIALIZER_X_HELPER(base, version) base##version 52 53 #ifdef __wasm__ 54 #define NAPI_MODULE_INITIALIZER_BASE napi_register_wasm_v 55 #else 56 #define NAPI_MODULE_INITIALIZER_BASE napi_register_module_v 57 #endif 58 59 #define NODE_API_MODULE_GET_API_VERSION_BASE node_api_module_get_api_version_v 60 61 #define NAPI_MODULE_INITIALIZER \ 62 NAPI_MODULE_INITIALIZER_X(NAPI_MODULE_INITIALIZER_BASE, NAPI_MODULE_VERSION) 63 64 #define NODE_API_MODULE_GET_API_VERSION \ 65 NAPI_MODULE_INITIALIZER_X(NODE_API_MODULE_GET_API_VERSION_BASE, \ 66 NAPI_MODULE_VERSION) 67 68 #define NAPI_MODULE_INIT() \ 69 EXTERN_C_START \ 70 NAPI_MODULE_EXPORT int32_t NODE_API_MODULE_GET_API_VERSION(void) { \ 71 return NAPI_VERSION; \ 72 } \ 73 NAPI_MODULE_EXPORT napi_value NAPI_MODULE_INITIALIZER(napi_env env, \ 74 napi_value exports); \ 75 EXTERN_C_END \ 76 napi_value NAPI_MODULE_INITIALIZER(napi_env env, napi_value exports) 77 78 #define NAPI_MODULE(modname, regfunc) \ 79 NAPI_MODULE_INIT() { return regfunc(env, exports); } 80 81 // Deprecated. Use NAPI_MODULE. 82 #define NAPI_MODULE_X(modname, regfunc, priv, flags) \ 83 NAPI_MODULE(modname, regfunc) 84 85 EXTERN_C_START 86 87 // Deprecated. Replaced by symbol-based registration defined by NAPI_MODULE 88 // and NAPI_MODULE_INIT macros. 89 NAPI_EXTERN void NAPI_CDECL 90 napi_module_register(napi_module* mod); 91 92 NAPI_EXTERN NAPI_NO_RETURN void NAPI_CDECL 93 napi_fatal_error(const char* location, 94 size_t location_len, 95 const char* message, 96 size_t message_len); 97 98 // Methods for custom handling of async operations 99 NAPI_EXTERN napi_status NAPI_CDECL 100 napi_async_init(napi_env env, 101 napi_value async_resource, 102 napi_value async_resource_name, 103 napi_async_context* result); 104 105 NAPI_EXTERN napi_status NAPI_CDECL 106 napi_async_destroy(napi_env env, napi_async_context async_context); 107 108 NAPI_EXTERN napi_status NAPI_CDECL 109 napi_make_callback(napi_env env, 110 napi_async_context async_context, 111 napi_value recv, 112 napi_value func, 113 size_t argc, 114 const napi_value* argv, 115 napi_value* result); 116 117 // Methods to provide node::Buffer functionality with napi types 118 NAPI_EXTERN napi_status NAPI_CDECL napi_create_buffer(napi_env env, 119 size_t length, 120 void** data, 121 napi_value* result); 122 #ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED 123 NAPI_EXTERN napi_status NAPI_CDECL 124 napi_create_external_buffer(napi_env env, 125 size_t length, 126 void* data, 127 node_api_basic_finalize finalize_cb, 128 void* finalize_hint, 129 napi_value* result); 130 #endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED 131 132 #if NAPI_VERSION >= 10 133 134 NAPI_EXTERN napi_status NAPI_CDECL 135 node_api_create_buffer_from_arraybuffer(napi_env env, 136 napi_value arraybuffer, 137 size_t byte_offset, 138 size_t byte_length, 139 napi_value* result); 140 #endif // NAPI_VERSION >= 10 141 142 NAPI_EXTERN napi_status NAPI_CDECL napi_create_buffer_copy(napi_env env, 143 size_t length, 144 const void* data, 145 void** result_data, 146 napi_value* result); 147 NAPI_EXTERN napi_status NAPI_CDECL napi_is_buffer(napi_env env, 148 napi_value value, 149 bool* result); 150 NAPI_EXTERN napi_status NAPI_CDECL napi_get_buffer_info(napi_env env, 151 napi_value value, 152 void** data, 153 size_t* length); 154 155 // Methods to manage simple async operations 156 NAPI_EXTERN napi_status NAPI_CDECL 157 napi_create_async_work(napi_env env, 158 napi_value async_resource, 159 napi_value async_resource_name, 160 napi_async_execute_callback execute, 161 napi_async_complete_callback complete, 162 void* data, 163 napi_async_work* result); 164 NAPI_EXTERN napi_status NAPI_CDECL napi_delete_async_work(napi_env env, 165 napi_async_work work); 166 NAPI_EXTERN napi_status NAPI_CDECL napi_queue_async_work(node_api_basic_env env, 167 napi_async_work work); 168 NAPI_EXTERN napi_status NAPI_CDECL 169 napi_cancel_async_work(node_api_basic_env env, napi_async_work work); 170 171 // version management 172 NAPI_EXTERN napi_status NAPI_CDECL napi_get_node_version( 173 node_api_basic_env env, const napi_node_version** version); 174 175 #if NAPI_VERSION >= 2 176 177 // Return the current libuv event loop for a given environment 178 NAPI_EXTERN napi_status NAPI_CDECL 179 napi_get_uv_event_loop(node_api_basic_env env, struct uv_loop_s** loop); 180 181 #endif // NAPI_VERSION >= 2 182 183 #if NAPI_VERSION >= 3 184 185 NAPI_EXTERN napi_status NAPI_CDECL napi_fatal_exception(napi_env env, 186 napi_value err); 187 188 NAPI_EXTERN napi_status NAPI_CDECL napi_add_env_cleanup_hook( 189 node_api_basic_env env, napi_cleanup_hook fun, void* arg); 190 191 NAPI_EXTERN napi_status NAPI_CDECL napi_remove_env_cleanup_hook( 192 node_api_basic_env env, napi_cleanup_hook fun, void* arg); 193 194 NAPI_EXTERN napi_status NAPI_CDECL 195 napi_open_callback_scope(napi_env env, 196 napi_value resource_object, 197 napi_async_context context, 198 napi_callback_scope* result); 199 200 NAPI_EXTERN napi_status NAPI_CDECL 201 napi_close_callback_scope(napi_env env, napi_callback_scope scope); 202 203 #endif // NAPI_VERSION >= 3 204 205 #if NAPI_VERSION >= 4 206 207 // Calling into JS from other threads 208 NAPI_EXTERN napi_status NAPI_CDECL 209 napi_create_threadsafe_function(napi_env env, 210 napi_value func, 211 napi_value async_resource, 212 napi_value async_resource_name, 213 size_t max_queue_size, 214 size_t initial_thread_count, 215 void* thread_finalize_data, 216 napi_finalize thread_finalize_cb, 217 void* context, 218 napi_threadsafe_function_call_js call_js_cb, 219 napi_threadsafe_function* result); 220 221 NAPI_EXTERN napi_status NAPI_CDECL napi_get_threadsafe_function_context( 222 napi_threadsafe_function func, void** result); 223 224 NAPI_EXTERN napi_status NAPI_CDECL 225 napi_call_threadsafe_function(napi_threadsafe_function func, 226 void* data, 227 napi_threadsafe_function_call_mode is_blocking); 228 229 NAPI_EXTERN napi_status NAPI_CDECL 230 napi_acquire_threadsafe_function(napi_threadsafe_function func); 231 232 NAPI_EXTERN napi_status NAPI_CDECL napi_release_threadsafe_function( 233 napi_threadsafe_function func, napi_threadsafe_function_release_mode mode); 234 235 NAPI_EXTERN napi_status NAPI_CDECL napi_unref_threadsafe_function( 236 node_api_basic_env env, napi_threadsafe_function func); 237 238 NAPI_EXTERN napi_status NAPI_CDECL napi_ref_threadsafe_function( 239 node_api_basic_env env, napi_threadsafe_function func); 240 241 #endif // NAPI_VERSION >= 4 242 243 #if NAPI_VERSION >= 8 244 245 NAPI_EXTERN napi_status NAPI_CDECL 246 napi_add_async_cleanup_hook(node_api_basic_env env, 247 napi_async_cleanup_hook hook, 248 void* arg, 249 napi_async_cleanup_hook_handle* remove_handle); 250 251 NAPI_EXTERN napi_status NAPI_CDECL 252 napi_remove_async_cleanup_hook(napi_async_cleanup_hook_handle remove_handle); 253 254 #endif // NAPI_VERSION >= 8 255 256 #if NAPI_VERSION >= 9 257 258 NAPI_EXTERN napi_status NAPI_CDECL 259 node_api_get_module_file_name(node_api_basic_env env, const char** result); 260 261 #endif // NAPI_VERSION >= 9 262 263 EXTERN_C_END 264 265 #endif // SRC_NODE_API_H_