Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion crates/nodex-api/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ v5 = ["v1", "v2", "v3", "v4"]
v6 = ["v1", "v2", "v3", "v4", "v5"]
v7 = ["v1", "v2", "v3", "v4", "v5", "v6"]
v8 = ["v1", "v2", "v3", "v4", "v5", "v6", "v7"]
v9 = ["v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8"]
v10 = ["v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9"]

[package.metadata.docs.rs]
features = ["v8"]
features = ["v10"]
4 changes: 4 additions & 0 deletions crates/nodex-api/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ pub fn main() {

#[cfg(feature = "gen-api")]
fn api_version<'a>() -> &'a [&'a str] {
#[cfg(feature = "v10")]
return &["-DNAPI_VERSION=10"];
#[cfg(all(feature = "v9", not(feature = "v10")))]
return &["-DNAPI_VERSION=9"];
#[cfg(feature = "v8")]
return &["-DNAPI_VERSION=8"];
#[cfg(feature = "v7")]
Expand Down
109 changes: 109 additions & 0 deletions crates/nodex-api/src/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ pub struct napi_env__ {
_unused: [u8; 0],
}
pub type napi_env = *mut napi_env__;
#[cfg(any(feature = "v9", feature = "v10"))]
pub type node_api_nogc_env = *mut napi_env__;
#[cfg(any(feature = "v9", feature = "v10"))]
pub type node_api_basic_env = node_api_nogc_env;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct napi_value__ {
Expand Down Expand Up @@ -82,6 +86,8 @@ pub const napi_typedarray_type_napi_float32_array: napi_typedarray_type = 7;
pub const napi_typedarray_type_napi_float64_array: napi_typedarray_type = 8;
pub const napi_typedarray_type_napi_bigint64_array: napi_typedarray_type = 9;
pub const napi_typedarray_type_napi_biguint64_array: napi_typedarray_type = 10;
#[cfg(feature = "v10")]
pub const napi_typedarray_type_napi_float16_array: napi_typedarray_type = 11;
pub type napi_typedarray_type = ::std::os::raw::c_uint;
pub const napi_status_napi_ok: napi_status = 0;
pub const napi_status_napi_invalid_arg: napi_status = 1;
Expand All @@ -105,6 +111,10 @@ pub const napi_status_napi_date_expected: napi_status = 18;
pub const napi_status_napi_arraybuffer_expected: napi_status = 19;
pub const napi_status_napi_detachable_arraybuffer_expected: napi_status = 20;
pub const napi_status_napi_would_deadlock: napi_status = 21;
#[cfg(feature = "v10")]
pub const napi_status_napi_no_external_buffers_allowed: napi_status = 22;
#[cfg(feature = "v10")]
pub const napi_status_napi_cannot_run_js: napi_status = 23;
pub type napi_status = ::std::os::raw::c_uint;
pub type napi_callback = ::std::option::Option<
unsafe extern "C" fn(env: NapiEnv, info: napi_callback_info) -> napi_value,
Expand All @@ -116,6 +126,10 @@ pub type napi_finalize = ::std::option::Option<
finalize_hint: *mut ::std::os::raw::c_void,
),
>;
#[cfg(feature = "v10")]
pub type node_api_nogc_finalize = napi_finalize;
#[cfg(feature = "v10")]
pub type node_api_basic_finalize = node_api_nogc_finalize;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct napi_property_descriptor {
Expand Down Expand Up @@ -222,13 +236,73 @@ extern "C" {
result: *mut napi_value,
) -> NapiStatus;
}
#[cfg(feature = "v10")]
extern "C" {
pub fn node_api_create_external_string_latin1(
env: NapiEnv,
str_: *mut ::std::os::raw::c_char,
length: size_t,
finalize_callback: node_api_basic_finalize,
finalize_hint: *mut ::std::os::raw::c_void,
result: *mut napi_value,
copied: *mut bool,
) -> NapiStatus;
}
#[cfg(feature = "v10")]
extern "C" {
pub fn node_api_create_external_string_utf16(
env: NapiEnv,
str_: *mut char16_t,
length: size_t,
finalize_callback: node_api_basic_finalize,
finalize_hint: *mut ::std::os::raw::c_void,
result: *mut napi_value,
copied: *mut bool,
) -> NapiStatus;
}
#[cfg(feature = "v10")]
extern "C" {
pub fn node_api_create_property_key_latin1(
env: NapiEnv,
str_: *const ::std::os::raw::c_char,
length: size_t,
result: *mut napi_value,
) -> NapiStatus;
}
#[cfg(feature = "v10")]
extern "C" {
pub fn node_api_create_property_key_utf8(
env: NapiEnv,
str_: *const ::std::os::raw::c_char,
length: size_t,
result: *mut napi_value,
) -> NapiStatus;
}
#[cfg(feature = "v10")]
extern "C" {
pub fn node_api_create_property_key_utf16(
env: NapiEnv,
str_: *const char16_t,
length: size_t,
result: *mut napi_value,
) -> NapiStatus;
}
extern "C" {
pub fn napi_create_symbol(
env: NapiEnv,
description: napi_value,
result: *mut napi_value,
) -> NapiStatus;
}
#[cfg(any(feature = "v9", feature = "v10"))]
extern "C" {
pub fn node_api_symbol_for(
env: NapiEnv,
utf8description: *const ::std::os::raw::c_char,
length: size_t,
result: *mut napi_value,
) -> NapiStatus;
}
extern "C" {
pub fn napi_create_function(
env: NapiEnv,
Expand Down Expand Up @@ -263,6 +337,15 @@ extern "C" {
result: *mut napi_value,
) -> NapiStatus;
}
#[cfg(any(feature = "v9", feature = "v10"))]
extern "C" {
pub fn node_api_create_syntax_error(
env: NapiEnv,
code: napi_value,
msg: napi_value,
result: *mut napi_value,
) -> NapiStatus;
}
extern "C" {
pub fn napi_typeof(env: NapiEnv, value: napi_value, result: *mut NapiValuetype) -> NapiStatus;
}
Expand Down Expand Up @@ -638,6 +721,14 @@ extern "C" {
msg: *const ::std::os::raw::c_char,
) -> NapiStatus;
}
#[cfg(any(feature = "v9", feature = "v10"))]
extern "C" {
pub fn node_api_throw_syntax_error(
env: NapiEnv,
code: *const ::std::os::raw::c_char,
msg: *const ::std::os::raw::c_char,
) -> NapiStatus;
}
extern "C" {
pub fn napi_is_error(env: NapiEnv, value: napi_value, result: *mut bool) -> NapiStatus;
}
Expand Down Expand Up @@ -1066,6 +1157,17 @@ extern "C" {
result: *mut napi_value,
) -> NapiStatus;
}
#[cfg(feature = "v10")]
extern "C" {
pub fn node_api_create_buffer_from_arraybuffer(
env: NapiEnv,
arraybuffer: napi_value,
byte_offset: size_t,
byte_length: size_t,
result_data: *mut *mut ::std::os::raw::c_void,
Comment thread
uuhan marked this conversation as resolved.
result: *mut napi_value,
) -> NapiStatus;
}
extern "C" {
pub fn napi_is_buffer(env: NapiEnv, value: napi_value, result: *mut bool) -> NapiStatus;
}
Expand Down Expand Up @@ -1103,6 +1205,13 @@ extern "C" {
version: *mut *const napi_node_version,
) -> NapiStatus;
}
#[cfg(any(feature = "v9", feature = "v10"))]
extern "C" {
pub fn node_api_get_module_file_name(
env: node_api_basic_env,
result: *mut *const ::std::os::raw::c_char,
) -> NapiStatus;
}

#[cfg(feature = "v2")]
extern "C" {
Expand Down
6 changes: 6 additions & 0 deletions crates/nodex-api/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@ pub enum NapiStatus {
DetachableArraybufferExpected = api::napi_status_napi_detachable_arraybuffer_expected,
#[error("napi error: would deadlock")]
WouldDeadlock = api::napi_status_napi_would_deadlock,
#[cfg(feature = "v10")]
#[error("napi error: no external buffers allowed")]
NoExternalBuffersAllowed = api::napi_status_napi_no_external_buffers_allowed,
#[cfg(feature = "v10")]
#[error("napi error: cannot run js")]
CannotRunJs = api::napi_status_napi_cannot_run_js,
}

impl NapiStatus {
Expand Down
20 changes: 20 additions & 0 deletions crates/nodex-api/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ pub enum NapiTypedarrayType {
Float64Array = api::napi_typedarray_type_napi_float64_array,
Bigint64Array = api::napi_typedarray_type_napi_bigint64_array,
Biguint64Array = api::napi_typedarray_type_napi_biguint64_array,
#[cfg(feature = "v10")]
Float16Array = api::napi_typedarray_type_napi_float16_array,
}

/// napi_key_collection_mode
Expand Down Expand Up @@ -155,6 +157,14 @@ pub mod prelude {
pub use api::napi_async_cleanup_hook_handle;
#[cfg(feature = "v4")]
pub use api::napi_threadsafe_function;
#[cfg(feature = "v10")]
pub use api::node_api_basic_env;
#[cfg(feature = "v10")]
pub use api::node_api_basic_finalize;
#[cfg(feature = "v10")]
pub use api::node_api_nogc_env;
#[cfg(feature = "v10")]
pub use api::node_api_nogc_finalize;
pub use api::{
napi_async_context, napi_async_work, napi_callback, napi_callback_info,
napi_callback_scope, napi_deferred, napi_env, napi_escapable_handle_scope, napi_finalize,
Expand All @@ -167,6 +177,10 @@ pub mod prelude {
}

pub const fn napi_version_guard() -> u32 {
#[cfg(feature = "v10")]
return 10;
#[cfg(all(feature = "v9", not(feature = "v10")))]
return 9;
#[cfg(feature = "v8")]
return 8;
#[cfg(feature = "v7")]
Expand Down Expand Up @@ -208,4 +222,10 @@ pub fn fatal_error(msg: impl AsRef<str>, loc: Option<impl AsRef<str>>) {
#[cfg(test)]
mod tests {
use super::*;

#[cfg(all(feature = "v9", feature = "v10"))]
#[test]
fn napi_version_guard_prefers_v10_when_v9_and_v10_are_enabled() {
assert_eq!(napi_version_guard(), 10);
}
}
Loading