mirror of
https://github.com/napi-rs/napi-rs.git
synced 2025-12-08 19:56:07 +00:00
feat(sys): sync Node-API version changes (#2661)
* feat(sys): sync Node-API version changes * upgrade electron * move node_api_create_buffer_from_arraybuffer to experimental
This commit is contained in:
parent
9cccc46790
commit
3a720f09cf
@ -25,11 +25,18 @@ async = ["tokio_rt"]
|
||||
chrono_date = ["chrono", "napi5"]
|
||||
# Enable deprecated types and traits for compatibility
|
||||
compat-mode = []
|
||||
default = ["napi4"] # for most Node.js users
|
||||
default = ["napi4"] # for most Node.js users
|
||||
deferred_trace = ["napi4"]
|
||||
error_anyhow = ["anyhow"]
|
||||
experimental = ["napi-sys/experimental"]
|
||||
full = ["latin1", "napi9", "async", "serde-json", "experimental", "chrono_date"]
|
||||
full = [
|
||||
"latin1",
|
||||
"napi10",
|
||||
"async",
|
||||
"serde-json",
|
||||
"experimental",
|
||||
"chrono_date",
|
||||
]
|
||||
object_indexmap = ["indexmap"]
|
||||
latin1 = ["encoding_rs"]
|
||||
napi1 = []
|
||||
@ -41,6 +48,7 @@ napi6 = ["napi5", "napi-sys/napi6"]
|
||||
napi7 = ["napi6", "napi-sys/napi7"]
|
||||
napi8 = ["napi7", "napi-sys/napi8"]
|
||||
napi9 = ["napi8", "napi-sys/napi9"]
|
||||
napi10 = ["napi9", "napi-sys/napi10"]
|
||||
web_stream = ["futures-core", "tokio-stream", "napi4", "tokio_rt"]
|
||||
noop = []
|
||||
serde-json = ["serde", "serde_json"]
|
||||
|
||||
@ -263,52 +263,61 @@ impl<
|
||||
let mut async_resource_name = ptr::null_mut();
|
||||
static THREAD_SAFE_FUNCTION_ASYNC_RESOURCE_NAME: &str = "napi_rs_threadsafe_function";
|
||||
|
||||
#[cfg(feature = "experimental")]
|
||||
#[cfg(feature = "napi10")]
|
||||
{
|
||||
check_status!(unsafe {
|
||||
let mut copied = false;
|
||||
sys::node_api_create_external_string_latin1(
|
||||
env,
|
||||
THREAD_SAFE_FUNCTION_ASYNC_RESOURCE_NAME.as_ptr().cast(),
|
||||
27,
|
||||
None,
|
||||
ptr::null_mut(),
|
||||
&mut async_resource_name,
|
||||
&mut copied,
|
||||
)
|
||||
})?;
|
||||
let mut copied = false;
|
||||
check_status!(
|
||||
unsafe {
|
||||
sys::node_api_create_external_string_latin1(
|
||||
env,
|
||||
THREAD_SAFE_FUNCTION_ASYNC_RESOURCE_NAME.as_ptr().cast(),
|
||||
27,
|
||||
None,
|
||||
ptr::null_mut(),
|
||||
&mut async_resource_name,
|
||||
&mut copied,
|
||||
)
|
||||
},
|
||||
"Create external string latin1 in ThreadsafeFunction::create failed"
|
||||
)?;
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "experimental"))]
|
||||
#[cfg(not(feature = "napi10"))]
|
||||
{
|
||||
check_status!(unsafe {
|
||||
sys::napi_create_string_utf8(
|
||||
env,
|
||||
THREAD_SAFE_FUNCTION_ASYNC_RESOURCE_NAME.as_ptr().cast(),
|
||||
27,
|
||||
&mut async_resource_name,
|
||||
)
|
||||
})?;
|
||||
check_status!(
|
||||
unsafe {
|
||||
sys::napi_create_string_utf8(
|
||||
env,
|
||||
THREAD_SAFE_FUNCTION_ASYNC_RESOURCE_NAME.as_ptr().cast(),
|
||||
27,
|
||||
&mut async_resource_name,
|
||||
)
|
||||
},
|
||||
"Create string utf8 in ThreadsafeFunction::create failed"
|
||||
)?;
|
||||
}
|
||||
|
||||
let mut raw_tsfn = ptr::null_mut();
|
||||
let callback_ptr = Box::into_raw(Box::new(callback));
|
||||
let handle = ThreadsafeFunctionHandle::null();
|
||||
check_status!(unsafe {
|
||||
sys::napi_create_threadsafe_function(
|
||||
env,
|
||||
func,
|
||||
ptr::null_mut(),
|
||||
async_resource_name,
|
||||
MaxQueueSize,
|
||||
1,
|
||||
Arc::downgrade(&handle).into_raw().cast_mut().cast(), // pass handler to thread_finalize_cb
|
||||
Some(thread_finalize_cb::<T, NewArgs, R>),
|
||||
callback_ptr.cast(),
|
||||
Some(call_js_cb::<T, Return, NewArgs, R, CalleeHandled>),
|
||||
&mut raw_tsfn,
|
||||
)
|
||||
})?;
|
||||
check_status!(
|
||||
unsafe {
|
||||
sys::napi_create_threadsafe_function(
|
||||
env,
|
||||
func,
|
||||
ptr::null_mut(),
|
||||
async_resource_name,
|
||||
MaxQueueSize,
|
||||
1,
|
||||
Arc::downgrade(&handle).into_raw().cast_mut().cast(), // pass handler to thread_finalize_cb
|
||||
Some(thread_finalize_cb::<T, NewArgs, R>),
|
||||
callback_ptr.cast(),
|
||||
Some(call_js_cb::<T, Return, NewArgs, R, CalleeHandled>),
|
||||
&mut raw_tsfn,
|
||||
)
|
||||
},
|
||||
"Create threadsafe function in ThreadsafeFunction::create failed"
|
||||
)?;
|
||||
handle.set_raw(raw_tsfn);
|
||||
|
||||
// Weak ThreadsafeFunction will not prevent the event loop from exiting
|
||||
|
||||
@ -23,6 +23,7 @@ napi6 = ["napi5"]
|
||||
napi7 = ["napi6"]
|
||||
napi8 = ["napi7"]
|
||||
napi9 = ["napi8"]
|
||||
napi10 = ["napi9"]
|
||||
|
||||
[package.metadata.workspaces]
|
||||
independent = true
|
||||
|
||||
@ -728,8 +728,8 @@ mod napi9 {
|
||||
);
|
||||
}
|
||||
|
||||
#[cfg(feature = "experimental")]
|
||||
mod experimental {
|
||||
#[cfg(feature = "napi10")]
|
||||
mod napi10 {
|
||||
use std::os::raw::{c_char, c_void};
|
||||
|
||||
use super::super::types::*;
|
||||
@ -756,14 +756,6 @@ mod experimental {
|
||||
copied: *mut bool,
|
||||
) -> napi_status;
|
||||
|
||||
fn node_api_create_buffer_from_arraybuffer(
|
||||
env: napi_env,
|
||||
arraybuffer: napi_value,
|
||||
byte_offset: usize,
|
||||
byte_length: usize,
|
||||
result: *mut napi_value,
|
||||
) -> napi_status;
|
||||
|
||||
fn node_api_create_property_key_utf16(
|
||||
env: napi_env,
|
||||
str_: *const u16,
|
||||
@ -784,6 +776,25 @@ mod experimental {
|
||||
length: isize,
|
||||
result: *mut napi_value,
|
||||
) -> napi_status;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
#[cfg(feature = "experimental")]
|
||||
mod experimental {
|
||||
use std::os::raw::c_void;
|
||||
|
||||
use super::super::types::*;
|
||||
|
||||
generate!(
|
||||
extern "C" {
|
||||
fn node_api_create_buffer_from_arraybuffer(
|
||||
env: napi_env,
|
||||
arraybuffer: napi_value,
|
||||
byte_offset: usize,
|
||||
byte_length: usize,
|
||||
result: *mut napi_value,
|
||||
) -> napi_status;
|
||||
|
||||
fn node_api_post_finalizer(
|
||||
env: node_api_basic_env,
|
||||
@ -799,6 +810,8 @@ mod experimental {
|
||||
pub use experimental::*;
|
||||
|
||||
pub use napi1::*;
|
||||
#[cfg(feature = "napi10")]
|
||||
pub use napi10::*;
|
||||
#[cfg(feature = "napi2")]
|
||||
pub use napi2::*;
|
||||
#[cfg(feature = "napi3")]
|
||||
@ -882,6 +895,8 @@ pub(super) unsafe fn load_all() -> Result<libloading::Library, libloading::Error
|
||||
napi8::load(&host)?;
|
||||
#[cfg(feature = "napi9")]
|
||||
napi9::load(&host)?;
|
||||
#[cfg(feature = "napi10")]
|
||||
napi10::load(&host)?;
|
||||
#[cfg(feature = "experimental")]
|
||||
experimental::load(&host)?;
|
||||
Ok(host)
|
||||
|
||||
@ -4,6 +4,23 @@
|
||||
|
||||
#[cfg(any(target_env = "msvc", feature = "dyn-symbols"))]
|
||||
macro_rules! generate {
|
||||
(@stub_fn $name:ident($($param:ident: $ptype:ty,)*) -> napi_status) => {
|
||||
unsafe extern "C" fn $name($(_: $ptype,)*) -> napi_status {
|
||||
eprintln!("Node-API symbol {} has not been loaded", stringify!($name));
|
||||
1
|
||||
}
|
||||
};
|
||||
(@stub_fn $name:ident($($param:ident: $ptype:ty,)*) -> $rtype:ty) => {
|
||||
unsafe extern "C" fn $name($(_: $ptype,)*) -> $rtype {
|
||||
eprintln!("Node-API symbol {} has not been loaded", stringify!($name));
|
||||
unsafe { std::mem::zeroed() }
|
||||
}
|
||||
};
|
||||
(@stub_fn $name:ident($($param:ident: $ptype:ty,)*)) => {
|
||||
unsafe extern "C" fn $name($(_: $ptype,)*) {
|
||||
eprintln!("Node-API symbol {} has not been loaded", stringify!($name));
|
||||
}
|
||||
};
|
||||
(extern "C" {
|
||||
$(fn $name:ident($($param:ident: $ptype:ty$(,)?)*)$( -> $rtype:ty)?;)+
|
||||
}) => {
|
||||
@ -15,16 +32,9 @@ macro_rules! generate {
|
||||
)*
|
||||
}
|
||||
|
||||
#[inline(never)]
|
||||
fn panic_load<T>() -> T {
|
||||
panic!("Node-API symbol has not been loaded")
|
||||
}
|
||||
|
||||
static mut NAPI: Napi = {
|
||||
$(
|
||||
unsafe extern "C" fn $name($(_: $ptype,)*)$( -> $rtype)* {
|
||||
panic_load()
|
||||
}
|
||||
generate!(@stub_fn $name($($param: $ptype,)*) $( -> $rtype)?);
|
||||
)*
|
||||
|
||||
Napi {
|
||||
|
||||
@ -31,7 +31,7 @@ rustc-hash = "2"
|
||||
tokio-stream = "0.1"
|
||||
tokio-util = { version = "0.7", features = ["io"] }
|
||||
napi = { path = "../../crates/napi", default-features = false, features = [
|
||||
"napi9",
|
||||
"napi10",
|
||||
"serde-json",
|
||||
"experimental",
|
||||
"latin1",
|
||||
|
||||
@ -37,7 +37,7 @@
|
||||
"ava": "^6.2.0",
|
||||
"buffer": "^6.0.3",
|
||||
"cross-env": "7.0.3",
|
||||
"electron": "^36.0.0",
|
||||
"electron": "^36.3.1",
|
||||
"lodash": "^4.17.21",
|
||||
"playwright": "^1.51.1",
|
||||
"rxjs": "^7.8.2",
|
||||
|
||||
@ -86,7 +86,6 @@ pub fn get_bigint_json_value(bigint_json_value: Value) {
|
||||
}
|
||||
Value::String(s) => {
|
||||
assert_eq!(s, "18446744073709551620");
|
||||
return;
|
||||
}
|
||||
_ => {
|
||||
unreachable!("should not happen");
|
||||
|
||||
@ -75,7 +75,7 @@
|
||||
"bun-types": "^1.2.8",
|
||||
"c8": "^10.1.3",
|
||||
"cross-env": "^7.0.3",
|
||||
"electron": "^36.0.0",
|
||||
"electron": "^36.3.1",
|
||||
"esbuild": "^0.25.2",
|
||||
"husky": "^9.1.7",
|
||||
"lerna": "^8.2.1",
|
||||
|
||||
12
yarn.lock
12
yarn.lock
@ -301,7 +301,7 @@ __metadata:
|
||||
ava: "npm:^6.2.0"
|
||||
buffer: "npm:^6.0.3"
|
||||
cross-env: "npm:7.0.3"
|
||||
electron: "npm:^36.0.0"
|
||||
electron: "npm:^36.3.1"
|
||||
lodash: "npm:^4.17.21"
|
||||
playwright: "npm:^1.51.1"
|
||||
rxjs: "npm:^7.8.2"
|
||||
@ -5611,16 +5611,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"electron@npm:^36.0.0":
|
||||
version: 36.1.0
|
||||
resolution: "electron@npm:36.1.0"
|
||||
"electron@npm:^36.3.1":
|
||||
version: 36.3.1
|
||||
resolution: "electron@npm:36.3.1"
|
||||
dependencies:
|
||||
"@electron/get": "npm:^2.0.0"
|
||||
"@types/node": "npm:^22.7.7"
|
||||
extract-zip: "npm:^2.0.1"
|
||||
bin:
|
||||
electron: cli.js
|
||||
checksum: 10c0/850e7ee65a86e66290bdf9e99902d8d862d568e805ac2749e599f582ba48e384d834559b6ee0bafd845416438a335f8b23fbd55043739d8782434b21fc69d963
|
||||
checksum: 10c0/12f8856d555019d86a7e4f95ff6ca468a777ff2297b27f51a98b0cd227e08a2866220586b9984a3ae3624fee9286cb8ab2db3eb78906fa980b35a5bdb92070e7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@ -8835,7 +8835,7 @@ __metadata:
|
||||
bun-types: "npm:^1.2.8"
|
||||
c8: "npm:^10.1.3"
|
||||
cross-env: "npm:^7.0.3"
|
||||
electron: "npm:^36.0.0"
|
||||
electron: "npm:^36.3.1"
|
||||
esbuild: "npm:^0.25.2"
|
||||
husky: "npm:^9.1.7"
|
||||
lerna: "npm:^8.2.1"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user