node_api_system/
lib.rs

1#![allow(non_camel_case_types, improper_ctypes)]
2
3use std::os::raw::{c_char, c_int, c_uint, c_void};
4type size_t = usize;
5type char16_t = u16;
6
7#[derive(Debug, Copy, Clone)]
8pub struct napi_env__ {
9	_unused: [u8; 0],
10}
11
12pub type napi_env = *mut napi_env__;
13
14#[repr(C)]
15#[derive(Debug, Copy, Clone)]
16pub struct napi_value__ {
17	_unused: [u8; 0],
18}
19
20pub type napi_value = *mut napi_value__;
21
22#[repr(C)]
23#[derive(Debug, Copy, Clone)]
24pub struct napi_ref__ {
25	_unused: [u8; 0],
26}
27
28pub type napi_ref = *mut napi_ref__;
29
30#[repr(C)]
31#[derive(Debug, Copy, Clone)]
32pub struct napi_handle_scope__ {
33	_unused: [u8; 0],
34}
35
36pub type napi_handle_scope = *mut napi_handle_scope__;
37
38#[repr(C)]
39#[derive(Debug, Copy, Clone)]
40pub struct napi_escapable_handle_scope__ {
41	_unused: [u8; 0],
42}
43
44pub type napi_escapable_handle_scope = *mut napi_escapable_handle_scope__;
45
46#[repr(C)]
47#[derive(Debug, Copy, Clone)]
48pub struct napi_callback_scope__ {
49	_unused: [u8; 0],
50}
51
52pub type napi_callback_scope = *mut napi_callback_scope__;
53
54#[repr(C)]
55#[derive(Debug, Copy, Clone)]
56pub struct napi_callback_info__ {
57	_unused: [u8; 0],
58}
59
60pub type napi_callback_info = *mut napi_callback_info__;
61
62#[repr(C)]
63#[derive(Debug, Copy, Clone)]
64pub struct napi_async_context__ {
65	_unused: [u8; 0],
66}
67
68pub type napi_async_context = *mut napi_async_context__;
69
70#[repr(C)]
71#[derive(Debug, Copy, Clone)]
72pub struct napi_async_work__ {
73	_unused: [u8; 0],
74}
75
76pub type napi_async_work = *mut napi_async_work__;
77
78#[repr(C)]
79#[derive(Debug, Copy, Clone)]
80pub struct napi_deferred__ {
81	_unused: [u8; 0],
82}
83
84pub type napi_deferred = *mut napi_deferred__;
85
86#[repr(C)]
87#[derive(Debug, Copy, Clone)]
88pub struct napi_threadsafe_function__ {
89	_unused: [u8; 0],
90}
91
92pub type napi_threadsafe_function = *mut napi_threadsafe_function__;
93
94#[repr(u32)]
95#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
96pub enum napi_property_attributes {
97	napi_default = 0,
98	napi_writable = 1,
99	napi_enumerable = 2,
100	napi_configurable = 4,
101	napi_static = 1024,
102}
103
104#[repr(u32)]
105#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
106pub enum napi_valuetype {
107	napi_undefined = 0,
108	napi_null = 1,
109	napi_boolean = 2,
110	napi_number = 3,
111	napi_string = 4,
112	napi_symbol = 5,
113	napi_object = 6,
114	napi_function = 7,
115	napi_external = 8,
116	napi_bigint = 9,
117}
118
119#[repr(u32)]
120#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
121pub enum napi_typedarray_type {
122	napi_int8_array = 0,
123	napi_uint8_array = 1,
124	napi_uint8_clamped_array = 2,
125	napi_int16_array = 3,
126	napi_uint16_array = 4,
127	napi_int32_array = 5,
128	napi_uint32_array = 6,
129	napi_float32_array = 7,
130	napi_float64_array = 8,
131	napi_bigint64_array = 9,
132	napi_biguint64_array = 10,
133}
134
135#[repr(u32)]
136#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
137pub enum napi_status {
138	napi_ok = 0,
139	napi_invalid_arg = 1,
140	napi_object_expected = 2,
141	napi_string_expected = 3,
142	napi_name_expected = 4,
143	napi_function_expected = 5,
144	napi_number_expected = 6,
145	napi_boolean_expected = 7,
146	napi_array_expected = 8,
147	napi_generic_failure = 9,
148	napi_pending_exception = 10,
149	napi_cancelled = 11,
150	napi_escape_called_twice = 12,
151	napi_handle_scope_mismatch = 13,
152	napi_callback_scope_mismatch = 14,
153	napi_queue_full = 15,
154	napi_closing = 16,
155	napi_bigint_expected = 17,
156	napi_date_expected = 18,
157	napi_arraybuffer_expected = 19,
158	napi_detachable_arraybuffer_expected = 20,
159}
160
161#[repr(u32)]
162#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
163pub enum napi_threadsafe_function_release_mode {
164	napi_tsfn_release = 0,
165	napi_tsfn_abort = 1,
166}
167
168#[repr(u32)]
169#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
170pub enum napi_threadsafe_function_call_mode {
171	napi_tsfn_nonblocking = 0,
172	napi_tsfn_blocking = 1,
173}
174
175pub type napi_callback =
176	Option<unsafe extern "C" fn(env: napi_env, info: napi_callback_info) -> napi_value>;
177
178pub type napi_finalize = Option<
179	unsafe extern "C" fn(env: napi_env, finalize_data: *mut c_void, finalize_hint: *mut c_void),
180>;
181
182pub type napi_async_execute_callback =
183	Option<unsafe extern "C" fn(env: napi_env, data: *mut c_void)>;
184
185pub type napi_async_complete_callback =
186	Option<unsafe extern "C" fn(env: napi_env, status: napi_status, data: *mut c_void)>;
187
188pub type napi_threadsafe_function_call_js = Option<
189	unsafe extern "C" fn(
190		env: napi_env,
191		js_callback: napi_value,
192		context: *mut c_void,
193		data: *mut c_void,
194	),
195>;
196
197#[repr(C)]
198#[derive(Debug, Copy, Clone)]
199pub struct napi_property_descriptor {
200	pub utf8name: *const c_char,
201	pub name: napi_value,
202	pub method: napi_callback,
203	pub getter: napi_callback,
204	pub setter: napi_callback,
205	pub value: napi_value,
206	pub attributes: napi_property_attributes,
207	pub data: *mut c_void,
208}
209
210#[repr(C)]
211#[derive(Debug, Copy, Clone)]
212pub struct napi_extended_error_info {
213	pub error_message: *const c_char,
214	pub engine_reserved: *mut c_void,
215	pub engine_error_code: u32,
216	pub error_code: napi_status,
217}
218
219#[repr(C)]
220#[derive(Debug, Copy, Clone)]
221pub struct napi_node_version {
222	pub major: u32,
223	pub minor: u32,
224	pub patch: u32,
225	pub release: *const c_char,
226}
227
228#[repr(u32)]
229#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
230pub enum napi_key_collection_mode {
231	napi_key_include_prototypes = 0,
232	napi_key_own_only = 1,
233}
234
235#[repr(u32)]
236#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
237pub enum napi_key_filter {
238	napi_key_all_properties = 0,
239	napi_key_writable = 1,
240	napi_key_enumerable = 2,
241	napi_key_configurable = 4,
242	napi_key_skip_strings = 8,
243	napi_key_skip_symbols = 16,
244}
245
246#[repr(u32)]
247#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
248pub enum napi_key_conversion {
249	napi_key_keep_numbers = 0,
250	napi_key_numbers_to_strings = 1,
251}
252
253#[repr(C)]
254#[derive(Debug, Copy, Clone)]
255pub struct uv_loop_s {
256	_unused: [u8; 0],
257}
258
259pub type napi_addon_register_func =
260	Option<unsafe extern "C" fn(env: napi_env, exports: napi_value) -> napi_value>;
261
262#[repr(C)]
263#[derive(Debug, Copy, Clone)]
264pub struct napi_module {
265	pub nm_version: c_int,
266	pub nm_flags: c_uint,
267	pub nm_filename: *const c_char,
268	pub nm_register_func: napi_addon_register_func,
269	pub nm_modname: *const c_char,
270	pub nm_priv: *mut c_void,
271	pub reserved: [*mut c_void; 4usize],
272}
273
274#[cfg(feature = "v1")]
275extern "C" {
276	pub fn napi_module_register(mod_: *mut napi_module);
277	pub fn napi_get_last_error_info(
278		env: napi_env,
279		result: *mut *const napi_extended_error_info,
280	) -> napi_status;
281	pub fn napi_fatal_error(
282		location: *const c_char,
283		location_len: size_t,
284		message: *const c_char,
285		message_len: size_t,
286	);
287	pub fn napi_get_undefined(env: napi_env, result: *mut napi_value) -> napi_status;
288	pub fn napi_get_null(env: napi_env, result: *mut napi_value) -> napi_status;
289	pub fn napi_get_global(env: napi_env, result: *mut napi_value) -> napi_status;
290	pub fn napi_get_boolean(env: napi_env, value: bool, result: *mut napi_value) -> napi_status;
291	pub fn napi_create_object(env: napi_env, result: *mut napi_value) -> napi_status;
292	pub fn napi_create_array(env: napi_env, result: *mut napi_value) -> napi_status;
293	pub fn napi_create_array_with_length(
294		env: napi_env,
295		length: size_t,
296		result: *mut napi_value,
297	) -> napi_status;
298	pub fn napi_create_double(env: napi_env, value: f64, result: *mut napi_value) -> napi_status;
299	pub fn napi_create_int32(env: napi_env, value: i32, result: *mut napi_value) -> napi_status;
300	pub fn napi_create_uint32(env: napi_env, value: u32, result: *mut napi_value) -> napi_status;
301	pub fn napi_create_int64(env: napi_env, value: i64, result: *mut napi_value) -> napi_status;
302	pub fn napi_create_string_latin1(
303		env: napi_env,
304		str_: *const c_char,
305		length: size_t,
306		result: *mut napi_value,
307	) -> napi_status;
308	pub fn napi_create_string_utf8(
309		env: napi_env,
310		str_: *const c_char,
311		length: size_t,
312		result: *mut napi_value,
313	) -> napi_status;
314	pub fn napi_create_string_utf16(
315		env: napi_env,
316		str_: *const char16_t,
317		length: size_t,
318		result: *mut napi_value,
319	) -> napi_status;
320	pub fn napi_create_symbol(
321		env: napi_env,
322		description: napi_value,
323		result: *mut napi_value,
324	) -> napi_status;
325	pub fn napi_create_function(
326		env: napi_env,
327		utf8name: *const c_char,
328		length: size_t,
329		cb: napi_callback,
330		data: *mut c_void,
331		result: *mut napi_value,
332	) -> napi_status;
333	pub fn napi_create_error(
334		env: napi_env,
335		code: napi_value,
336		msg: napi_value,
337		result: *mut napi_value,
338	) -> napi_status;
339	pub fn napi_create_type_error(
340		env: napi_env,
341		code: napi_value,
342		msg: napi_value,
343		result: *mut napi_value,
344	) -> napi_status;
345	pub fn napi_create_range_error(
346		env: napi_env,
347		code: napi_value,
348		msg: napi_value,
349		result: *mut napi_value,
350	) -> napi_status;
351	pub fn napi_typeof(
352		env: napi_env,
353		value: napi_value,
354		result: *mut napi_valuetype,
355	) -> napi_status;
356	pub fn napi_get_value_double(env: napi_env, value: napi_value, result: *mut f64)
357		-> napi_status;
358	pub fn napi_get_value_int32(env: napi_env, value: napi_value, result: *mut i32) -> napi_status;
359	pub fn napi_get_value_uint32(env: napi_env, value: napi_value, result: *mut u32)
360		-> napi_status;
361	pub fn napi_get_value_int64(env: napi_env, value: napi_value, result: *mut i64) -> napi_status;
362	pub fn napi_get_value_bool(env: napi_env, value: napi_value, result: *mut bool) -> napi_status;
363	pub fn napi_get_value_string_latin1(
364		env: napi_env,
365		value: napi_value,
366		buf: *mut c_char,
367		bufsize: size_t,
368		result: *mut size_t,
369	) -> napi_status;
370	pub fn napi_get_value_string_utf8(
371		env: napi_env,
372		value: napi_value,
373		buf: *mut c_char,
374		bufsize: size_t,
375		result: *mut size_t,
376	) -> napi_status;
377	pub fn napi_get_value_string_utf16(
378		env: napi_env,
379		value: napi_value,
380		buf: *mut char16_t,
381		bufsize: size_t,
382		result: *mut size_t,
383	) -> napi_status;
384	pub fn napi_coerce_to_bool(
385		env: napi_env,
386		value: napi_value,
387		result: *mut napi_value,
388	) -> napi_status;
389	pub fn napi_coerce_to_number(
390		env: napi_env,
391		value: napi_value,
392		result: *mut napi_value,
393	) -> napi_status;
394	pub fn napi_coerce_to_object(
395		env: napi_env,
396		value: napi_value,
397		result: *mut napi_value,
398	) -> napi_status;
399	pub fn napi_coerce_to_string(
400		env: napi_env,
401		value: napi_value,
402		result: *mut napi_value,
403	) -> napi_status;
404	pub fn napi_get_prototype(
405		env: napi_env,
406		object: napi_value,
407		result: *mut napi_value,
408	) -> napi_status;
409	pub fn napi_get_property_names(
410		env: napi_env,
411		object: napi_value,
412		result: *mut napi_value,
413	) -> napi_status;
414	pub fn napi_set_property(
415		env: napi_env,
416		object: napi_value,
417		key: napi_value,
418		value: napi_value,
419	) -> napi_status;
420	pub fn napi_has_property(
421		env: napi_env,
422		object: napi_value,
423		key: napi_value,
424		result: *mut bool,
425	) -> napi_status;
426	pub fn napi_get_property(
427		env: napi_env,
428		object: napi_value,
429		key: napi_value,
430		result: *mut napi_value,
431	) -> napi_status;
432	pub fn napi_delete_property(
433		env: napi_env,
434		object: napi_value,
435		key: napi_value,
436		result: *mut bool,
437	) -> napi_status;
438	pub fn napi_has_own_property(
439		env: napi_env,
440		object: napi_value,
441		key: napi_value,
442		result: *mut bool,
443	) -> napi_status;
444	pub fn napi_set_named_property(
445		env: napi_env,
446		object: napi_value,
447		utf8name: *const c_char,
448		value: napi_value,
449	) -> napi_status;
450	pub fn napi_has_named_property(
451		env: napi_env,
452		object: napi_value,
453		utf8name: *const c_char,
454		result: *mut bool,
455	) -> napi_status;
456	pub fn napi_get_named_property(
457		env: napi_env,
458		object: napi_value,
459		utf8name: *const c_char,
460		result: *mut napi_value,
461	) -> napi_status;
462	pub fn napi_set_element(
463		env: napi_env,
464		object: napi_value,
465		index: u32,
466		value: napi_value,
467	) -> napi_status;
468	pub fn napi_has_element(
469		env: napi_env,
470		object: napi_value,
471		index: u32,
472		result: *mut bool,
473	) -> napi_status;
474	pub fn napi_get_element(
475		env: napi_env,
476		object: napi_value,
477		index: u32,
478		result: *mut napi_value,
479	) -> napi_status;
480	pub fn napi_delete_element(
481		env: napi_env,
482		object: napi_value,
483		index: u32,
484		result: *mut bool,
485	) -> napi_status;
486	pub fn napi_define_properties(
487		env: napi_env,
488		object: napi_value,
489		property_count: size_t,
490		properties: *const napi_property_descriptor,
491	) -> napi_status;
492	pub fn napi_is_array(env: napi_env, value: napi_value, result: *mut bool) -> napi_status;
493	pub fn napi_get_array_length(env: napi_env, value: napi_value, result: *mut u32)
494		-> napi_status;
495	pub fn napi_strict_equals(
496		env: napi_env,
497		lhs: napi_value,
498		rhs: napi_value,
499		result: *mut bool,
500	) -> napi_status;
501	pub fn napi_call_function(
502		env: napi_env,
503		recv: napi_value,
504		func: napi_value,
505		argc: size_t,
506		argv: *const napi_value,
507		result: *mut napi_value,
508	) -> napi_status;
509	pub fn napi_new_instance(
510		env: napi_env,
511		constructor: napi_value,
512		argc: size_t,
513		argv: *const napi_value,
514		result: *mut napi_value,
515	) -> napi_status;
516	pub fn napi_instanceof(
517		env: napi_env,
518		object: napi_value,
519		constructor: napi_value,
520		result: *mut bool,
521	) -> napi_status;
522	pub fn napi_get_cb_info(
523		env: napi_env,
524		cbinfo: napi_callback_info,
525		argc: *mut size_t,
526		argv: *mut napi_value,
527		this_arg: *mut napi_value,
528		data: *mut *mut c_void,
529	) -> napi_status;
530	pub fn napi_get_new_target(
531		env: napi_env,
532		cbinfo: napi_callback_info,
533		result: *mut napi_value,
534	) -> napi_status;
535	pub fn napi_define_class(
536		env: napi_env,
537		utf8name: *const c_char,
538		length: size_t,
539		constructor: napi_callback,
540		data: *mut c_void,
541		property_count: size_t,
542		properties: *const napi_property_descriptor,
543		result: *mut napi_value,
544	) -> napi_status;
545	pub fn napi_wrap(
546		env: napi_env,
547		js_object: napi_value,
548		native_object: *mut c_void,
549		finalize_cb: napi_finalize,
550		finalize_hint: *mut c_void,
551		result: *mut napi_ref,
552	) -> napi_status;
553	pub fn napi_unwrap(
554		env: napi_env,
555		js_object: napi_value,
556		result: *mut *mut c_void,
557	) -> napi_status;
558	pub fn napi_remove_wrap(
559		env: napi_env,
560		js_object: napi_value,
561		result: *mut *mut c_void,
562	) -> napi_status;
563	pub fn napi_create_external(
564		env: napi_env,
565		data: *mut c_void,
566		finalize_cb: napi_finalize,
567		finalize_hint: *mut c_void,
568		result: *mut napi_value,
569	) -> napi_status;
570	pub fn napi_get_value_external(
571		env: napi_env,
572		value: napi_value,
573		result: *mut *mut c_void,
574	) -> napi_status;
575	pub fn napi_create_reference(
576		env: napi_env,
577		value: napi_value,
578		initial_refcount: u32,
579		result: *mut napi_ref,
580	) -> napi_status;
581	pub fn napi_delete_reference(env: napi_env, ref_: napi_ref) -> napi_status;
582	pub fn napi_reference_ref(env: napi_env, ref_: napi_ref, result: *mut u32) -> napi_status;
583	pub fn napi_reference_unref(env: napi_env, ref_: napi_ref, result: *mut u32) -> napi_status;
584	pub fn napi_get_reference_value(
585		env: napi_env,
586		ref_: napi_ref,
587		result: *mut napi_value,
588	) -> napi_status;
589	pub fn napi_open_handle_scope(env: napi_env, result: *mut napi_handle_scope) -> napi_status;
590	pub fn napi_close_handle_scope(env: napi_env, scope: napi_handle_scope) -> napi_status;
591	pub fn napi_open_escapable_handle_scope(
592		env: napi_env,
593		result: *mut napi_escapable_handle_scope,
594	) -> napi_status;
595	pub fn napi_close_escapable_handle_scope(
596		env: napi_env,
597		scope: napi_escapable_handle_scope,
598	) -> napi_status;
599	pub fn napi_escape_handle(
600		env: napi_env,
601		scope: napi_escapable_handle_scope,
602		escapee: napi_value,
603		result: *mut napi_value,
604	) -> napi_status;
605	pub fn napi_throw(env: napi_env, error: napi_value) -> napi_status;
606	pub fn napi_throw_error(env: napi_env, code: *const c_char, msg: *const c_char) -> napi_status;
607	pub fn napi_throw_type_error(
608		env: napi_env,
609		code: *const c_char,
610		msg: *const c_char,
611	) -> napi_status;
612	pub fn napi_throw_range_error(
613		env: napi_env,
614		code: *const c_char,
615		msg: *const c_char,
616	) -> napi_status;
617	pub fn napi_is_error(env: napi_env, value: napi_value, result: *mut bool) -> napi_status;
618	pub fn napi_is_exception_pending(env: napi_env, result: *mut bool) -> napi_status;
619	pub fn napi_get_and_clear_last_exception(env: napi_env, result: *mut napi_value)
620		-> napi_status;
621	pub fn napi_create_buffer(
622		env: napi_env,
623		length: size_t,
624		data: *mut *mut c_void,
625		result: *mut napi_value,
626	) -> napi_status;
627	pub fn napi_create_external_buffer(
628		env: napi_env,
629		length: size_t,
630		data: *mut c_void,
631		finalize_cb: napi_finalize,
632		finalize_hint: *mut c_void,
633		result: *mut napi_value,
634	) -> napi_status;
635	pub fn napi_create_buffer_copy(
636		env: napi_env,
637		length: size_t,
638		data: *const c_void,
639		result_data: *mut *mut c_void,
640		result: *mut napi_value,
641	) -> napi_status;
642	pub fn napi_is_buffer(env: napi_env, value: napi_value, result: *mut bool) -> napi_status;
643	pub fn napi_get_buffer_info(
644		env: napi_env,
645		value: napi_value,
646		data: *mut *mut c_void,
647		length: *mut size_t,
648	) -> napi_status;
649	pub fn napi_is_arraybuffer(env: napi_env, value: napi_value, result: *mut bool) -> napi_status;
650	pub fn napi_create_arraybuffer(
651		env: napi_env,
652		byte_length: size_t,
653		data: *mut *mut c_void,
654		result: *mut napi_value,
655	) -> napi_status;
656	pub fn napi_create_external_arraybuffer(
657		env: napi_env,
658		external_data: *mut c_void,
659		byte_length: size_t,
660		finalize_cb: napi_finalize,
661		finalize_hint: *mut c_void,
662		result: *mut napi_value,
663	) -> napi_status;
664	pub fn napi_get_arraybuffer_info(
665		env: napi_env,
666		arraybuffer: napi_value,
667		data: *mut *mut c_void,
668		byte_length: *mut size_t,
669	) -> napi_status;
670	pub fn napi_is_typedarray(env: napi_env, value: napi_value, result: *mut bool) -> napi_status;
671	pub fn napi_create_typedarray(
672		env: napi_env,
673		type_: napi_typedarray_type,
674		length: size_t,
675		arraybuffer: napi_value,
676		byte_offset: size_t,
677		result: *mut napi_value,
678	) -> napi_status;
679	pub fn napi_get_typedarray_info(
680		env: napi_env,
681		typedarray: napi_value,
682		type_: *mut napi_typedarray_type,
683		length: *mut size_t,
684		data: *mut *mut c_void,
685		arraybuffer: *mut napi_value,
686		byte_offset: *mut size_t,
687	) -> napi_status;
688	pub fn napi_create_dataview(
689		env: napi_env,
690		length: size_t,
691		arraybuffer: napi_value,
692		byte_offset: size_t,
693		result: *mut napi_value,
694	) -> napi_status;
695	pub fn napi_is_dataview(env: napi_env, value: napi_value, result: *mut bool) -> napi_status;
696	pub fn napi_get_dataview_info(
697		env: napi_env,
698		dataview: napi_value,
699		bytelength: *mut size_t,
700		data: *mut *mut c_void,
701		arraybuffer: *mut napi_value,
702		byte_offset: *mut size_t,
703	) -> napi_status;
704	pub fn napi_create_async_work(
705		env: napi_env,
706		async_resource: napi_value,
707		async_resource_name: napi_value,
708		execute: napi_async_execute_callback,
709		complete: napi_async_complete_callback,
710		data: *mut c_void,
711		result: *mut napi_async_work,
712	) -> napi_status;
713	pub fn napi_delete_async_work(env: napi_env, work: napi_async_work) -> napi_status;
714	pub fn napi_queue_async_work(env: napi_env, work: napi_async_work) -> napi_status;
715	pub fn napi_cancel_async_work(env: napi_env, work: napi_async_work) -> napi_status;
716	pub fn napi_async_init(
717		env: napi_env,
718		async_resource: napi_value,
719		async_resource_name: napi_value,
720		result: *mut napi_async_context,
721	) -> napi_status;
722	pub fn napi_async_destroy(env: napi_env, async_context: napi_async_context) -> napi_status;
723	pub fn napi_make_callback(
724		env: napi_env,
725		async_context: napi_async_context,
726		recv: napi_value,
727		func: napi_value,
728		argc: size_t,
729		argv: *const napi_value,
730		result: *mut napi_value,
731	) -> napi_status;
732	pub fn napi_get_version(env: napi_env, result: *mut u32) -> napi_status;
733	pub fn napi_get_node_version(
734		env: napi_env,
735		version: *mut *const napi_node_version,
736	) -> napi_status;
737	pub fn napi_create_promise(
738		env: napi_env,
739		deferred: *mut napi_deferred,
740		promise: *mut napi_value,
741	) -> napi_status;
742	pub fn napi_resolve_deferred(
743		env: napi_env,
744		deferred: napi_deferred,
745		resolution: napi_value,
746	) -> napi_status;
747	pub fn napi_reject_deferred(
748		env: napi_env,
749		deferred: napi_deferred,
750		rejection: napi_value,
751	) -> napi_status;
752	pub fn napi_is_promise(
753		env: napi_env,
754		promise: napi_value,
755		is_promise: *mut bool,
756	) -> napi_status;
757	pub fn napi_adjust_external_memory(
758		env: napi_env,
759		change_in_bytes: i64,
760		adjusted_value: *mut i64,
761	) -> napi_status;
762	pub fn napi_run_script(
763		env: napi_env,
764		script: napi_value,
765		result: *mut napi_value,
766	) -> napi_status;
767}
768
769#[cfg(feature = "v2")]
770extern "C" {
771	pub fn napi_get_uv_event_loop(env: napi_env, loop_: *mut *mut uv_loop_s) -> napi_status;
772}
773
774#[cfg(feature = "v3")]
775extern "C" {
776	pub fn napi_open_callback_scope(
777		env: napi_env,
778		resource_object: napi_value,
779		context: napi_async_context,
780		result: *mut napi_callback_scope,
781	) -> napi_status;
782	pub fn napi_close_callback_scope(env: napi_env, scope: napi_callback_scope) -> napi_status;
783	pub fn napi_fatal_exception(env: napi_env, err: napi_value) -> napi_status;
784	pub fn napi_add_env_cleanup_hook(
785		env: napi_env,
786		fun: Option<unsafe extern "C" fn(arg: *mut c_void)>,
787		arg: *mut c_void,
788	) -> napi_status;
789	pub fn napi_remove_env_cleanup_hook(
790		env: napi_env,
791		fun: Option<unsafe extern "C" fn(arg: *mut c_void)>,
792		arg: *mut c_void,
793	) -> napi_status;
794}
795
796#[cfg(feature = "v4")]
797extern "C" {
798	pub fn napi_create_threadsafe_function(
799		env: napi_env,
800		func: napi_value,
801		async_resource: napi_value,
802		async_resource_name: napi_value,
803		max_queue_size: size_t,
804		initial_thread_count: size_t,
805		thread_finalize_data: *mut c_void,
806		thread_finalize_cb: napi_finalize,
807		context: *mut c_void,
808		call_js_cb: napi_threadsafe_function_call_js,
809		result: *mut napi_threadsafe_function,
810	) -> napi_status;
811	pub fn napi_get_threadsafe_function_context(
812		func: napi_threadsafe_function,
813		result: *mut *mut c_void,
814	) -> napi_status;
815	pub fn napi_call_threadsafe_function(
816		func: napi_threadsafe_function,
817		data: *mut c_void,
818		is_blocking: napi_threadsafe_function_call_mode,
819	) -> napi_status;
820	pub fn napi_acquire_threadsafe_function(func: napi_threadsafe_function) -> napi_status;
821	pub fn napi_release_threadsafe_function(
822		func: napi_threadsafe_function,
823		mode: napi_threadsafe_function_release_mode,
824	) -> napi_status;
825	pub fn napi_unref_threadsafe_function(
826		env: napi_env,
827		func: napi_threadsafe_function,
828	) -> napi_status;
829	pub fn napi_ref_threadsafe_function(
830		env: napi_env,
831		func: napi_threadsafe_function,
832	) -> napi_status;
833}
834
835#[cfg(feature = "v5")]
836extern "C" {
837	pub fn napi_create_date(env: napi_env, time: f64, result: *mut napi_value) -> napi_status;
838	pub fn napi_is_date(env: napi_env, value: napi_value, is_date: *mut bool) -> napi_status;
839	pub fn napi_get_date_value(env: napi_env, value: napi_value, result: *mut f64) -> napi_status;
840	pub fn napi_add_finalizer(
841		env: napi_env,
842		js_object: napi_value,
843		native_object: *mut c_void,
844		finalize_cb: napi_finalize,
845		finalize_hint: *mut c_void,
846		result: *mut napi_ref,
847	) -> napi_status;
848}
849
850#[cfg(feature = "v6")]
851extern "C" {
852	pub fn napi_create_bigint_int64(
853		env: napi_env,
854		value: i64,
855		result: *mut napi_value,
856	) -> napi_status;
857	pub fn napi_create_bigint_uint64(
858		env: napi_env,
859		value: u64,
860		result: *mut napi_value,
861	) -> napi_status;
862	pub fn napi_create_bigint_words(
863		env: napi_env,
864		sign_bit: c_int,
865		word_count: size_t,
866		words: *const u64,
867		result: *mut napi_value,
868	) -> napi_status;
869	pub fn napi_get_value_bigint_int64(
870		env: napi_env,
871		value: napi_value,
872		result: *mut i64,
873		lossless: *mut bool,
874	) -> napi_status;
875	pub fn napi_get_value_bigint_uint64(
876		env: napi_env,
877		value: napi_value,
878		result: *mut u64,
879		lossless: *mut bool,
880	) -> napi_status;
881	pub fn napi_get_value_bigint_words(
882		env: napi_env,
883		value: napi_value,
884		sign_bit: *mut c_int,
885		word_count: *mut size_t,
886		words: *mut u64,
887	) -> napi_status;
888	pub fn napi_set_instance_data(
889		env: napi_env,
890		data: *mut c_void,
891		finalize_cb: napi_finalize,
892		finalize_hint: *mut c_void,
893	) -> napi_status;
894	pub fn napi_get_instance_data(env: napi_env, data: *mut *mut c_void) -> napi_status;
895	pub fn napi_get_all_property_names(
896		env: napi_env,
897		object: napi_value,
898		key_mode: napi_key_collection_mode,
899		key_filter: napi_key_filter,
900		key_conversion: napi_key_conversion,
901		result: *mut napi_value,
902	) -> napi_status;
903}
904
905#[cfg(feature = "v7")]
906extern "C" {
907	pub fn napi_detach_arraybuffer(env: napi_env, arraybuffer: napi_value) -> napi_status;
908	pub fn napi_is_detached_arraybuffer(
909		env: napi_env,
910		value: napi_value,
911		result: *mut bool,
912	) -> napi_status;
913}