Commit graph

546 commits

Author SHA1 Message Date
LongYinan
5ac153388f
feat(napi): accept slice as TypedArray (#1951) 2024-02-15 23:40:45 +08:00
LongYinan
d7dc4dc5a2
feat(napi): extends the Map types interoperability (#1950) 2024-02-15 15:43:21 +08:00
LongYinan
b6adf8ae5c
Release independent packages
napi-derive@2.15.1
2024-02-08 20:41:49 +08:00
LongYinan
adbd34c0b9
fix(napi-derive): serde Number typing (#1941) 2024-02-08 18:20:46 +08:00
LongYinan
5b66467e09
Release independent packages
- napi@2.15.1
2024-02-01 22:16:22 +08:00
jkomyno
a5f3b2e78c fix(napi): in "Object::get", return null values wrapped in a "Some" 2024-01-31 15:50:58 +01:00
Janrupf
ac3626a023
fix(napi): Fix buffer corruption and soundness issues (#1923)
* fix(napi): Fix buffer corruption and soundness issues

* test: fix tests to conform to buffer API
2024-01-29 18:32:28 +08:00
LongYinan
a6aaa94e7d
Release independent packages
- napi@2.15.0
- napi-derive@2.15.0
2024-01-26 14:32:24 +08:00
LongYinan
f625328868
fix(napi): move JsValuesTupleIntoVec trait to function.rs 2024-01-26 14:32:24 +08:00
LongYinan
f69771e2d4
fix(napi-derive): JsArrayBuffer generated type 2024-01-26 14:32:24 +08:00
LongYinan
b9ba7c9d68
fix(napi): memory issue while creating external buffer on electron 2024-01-26 14:32:24 +08:00
LongYinan
aff95d0271
chore(napi): remove napi_val on Ref because it is unused 2024-01-26 03:29:52 +00:00
LongYinan
12503a8061
chore(napi): delete unwrap_from_ref API because it was never work 2024-01-26 02:58:53 +00:00
LongYinan
fecd0d8049
Update crates/napi/src/bindgen_runtime/js_values/function.rs 2024-01-26 02:27:46 +00:00
LongYinan
5be7ab0f6b
feat(napi): new Function/FunctionRef API 2024-01-26 02:27:46 +00:00
LongYinan
134707ef1d
fix(napi): callback in execute_tokio_future does not need to be Send (#1917)
The resolver does not need to be `Send` or `Sync`, because it's assumed to be called from the same thread that the JavaScript thread is running on.
2024-01-26 10:27:17 +08:00
LongYinan
69d2a75384
Release independent packages
- napi@2.14.4
2024-01-24 17:20:46 +08:00
LongYinan
e332270698
fix(napi): future in block_on do not need to be send 2024-01-24 17:20:31 +08:00
LongYinan
3cbae4e8c1
Release independent packages
- napi@2.14.3
2024-01-24 17:16:41 +08:00
LongYinan
38568c2693
chore(napi): expose spawn_blocking on tokio runtime (#1912) 2024-01-24 17:15:36 +08:00
LongYinan
b4345d1375
fix(napi): block_on type (#1911) 2024-01-24 17:13:42 +08:00
Ranger
4d82737efe
chore: fix async_work status typo (#1883) 2024-01-02 13:23:45 +08:00
LongYinan
03eb476cef
Release independent packages
- napi@2.14.2
2023-12-31 22:08:11 +08:00
LongYinan
65273a4631
chore(napi): add status to error messages in AsyncWork (#1880) 2023-12-30 11:56:36 +08:00
LongYinan
43a080d52b
fix(napi): apply clippy suggestions (#1878) 2023-12-29 23:08:56 +08:00
LongYinan
5825dcc3a6
Release independent packages
- napi-derive@2.14.6
2023-12-27 22:10:41 +08:00
LongYinan
84f3092d70
fix(napi-derive): proc-macro crash on enum (#1870) 2023-12-27 21:18:02 +08:00
LongYinan
85807ad790
Release independent packages
- napi-derive@2.14.5
2023-12-27 12:53:10 +08:00
LongYinan
02dd4c3fd3
fix(napi-derive): catch_unwind on constructor (#1869)
- Close https://github.com/napi-rs/napi-rs/issues/1852
2023-12-27 12:49:10 +08:00
liuyi
6f40f94d09
fix(napi-derive): more accurate napi expanding error (#1854) 2023-12-13 15:23:00 +08:00
LongYinan
af248435ac
Release independent packages
- napi-derive@2.14.4
2023-12-13 13:27:53 +08:00
liuyi
e32c105a26
fix(napi-derive): upgrade syn (#1849) 2023-12-13 12:40:01 +08:00
LongYinan
1dda26e6cd
Release independent packages
napi-derive@2.14.3
2023-12-11 10:52:55 +08:00
LongYinan
dab4ce7fe0
fix(napi-derive,cli): register function cross crates (#1848) 2023-12-11 00:36:26 +08:00
renovate[bot]
8d3d60c356
fix(deps): update rust crate once_cell to 1.19 (#1845)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-07 22:23:43 +08:00
LongYinan
e4ac44e560
Release independent packages
- napi@2.14.1
- napi-derive@2.14.2
2023-11-20 17:18:35 +08:00
LongYinan
8a9c42a985
fix(napi): compile error for wasm32-unknown-unknown target
- Close https://github.com/napi-rs/napi-rs/issues/1816
2023-11-20 17:10:58 +08:00
LongYinan
7dced934a7
fix(napi): cargo doc build
- Close https://github.com/napi-rs/napi-rs/issues/1800
2023-11-20 16:22:21 +08:00
LongYinan
7c3f8b514e
fix(napi-derive): compile warning (#1820) 2023-11-20 14:20:25 +08:00
LongYinan
6a1943ba54
style(napi): clippy fix (#1815) 2023-11-17 20:42:53 +08:00
LongYinan
529317b5ef
Release independent packages
- napi-derive@2.14.1
2023-11-08 20:58:25 +08:00
LongYinan
e930a6aab3
fix(napi-derive): async task optional output type (#1796) 2023-11-08 20:06:27 +08:00
LongYinan
938f4df83d
fix(napi-derive): async task void output type (#1795) 2023-11-08 20:05:09 +08:00
LongYinan
688ee04247
Release independent packages
- napi-build@2.1.0
- napi-derive@2.14.0
- napi@2.14.0
- napi-sys@2.3.0
2023-11-07 14:18:36 +08:00
LongYinan
36581336c6
feat(napi): pass the rest of async tests (#1792)
Pass the rest of async tests, including await the JavaScript Promise in the Rust side, and the worker_threads tests.
2023-11-07 01:46:43 +08:00
LongYinan
b03b3ee4dc
fix(build): rerun if cli version changed (#1789)
- Close https://github.com/napi-rs/napi-rs/issues/1719
2023-11-06 14:03:34 +08:00
LongYinan
3deae16442
fix(napi): add tokio cleanup hook for more platforms (#1790) 2023-11-06 13:59:54 +08:00
LongYinan
65f57918fb
style(napi): as ptr => ptr::cast (#1786) 2023-11-06 11:22:30 +08:00
LongYinan
1e5c32ca60
style(napi): fix compile warning (#1785) 2023-11-06 11:21:26 +08:00
LongYinan
feabcd7f16
test(napi): add tests for napi9 features (#1784) 2023-11-06 11:03:44 +08:00
LongYinan
4e4d891ad8
feat: add experimental Env::get_module_file_name method (#1783) 2023-11-06 11:01:27 +08:00
LongYinan
2b0ddf4a21
feat(napi,sys): sync to napi9 (#1781)
- Close https://github.com/napi-rs/napi-rs/issues/1600
2023-11-06 11:00:27 +08:00
LongYinan
cec062bd4b
fix(napi-sys): missing napi9 load on Windows (#1780) 2023-11-06 10:59:28 +08:00
LongYinan
546b108a5b
feat(napi): support async class factory (#1779)
- Close https://github.com/napi-rs/napi-rs/issues/1777
2023-11-06 10:58:23 +08:00
LongYinan
0dc1ef738b fix(napi): asan caught memory safety issue 2023-11-04 15:26:07 +08:00
Jez
afd3395bb4
fix(napi-derive): import FromNapiValue and ToNapiValue from napi::bindgen_prelude when generating enum (#1713) 2023-11-02 23:05:16 +08:00
Özgür Akkurt
2c410b238d
feat(napi): impl Default for Buffer (#1734) 2023-11-02 22:32:13 +08:00
stefan-gorules
afdd4060ab
fix(napi): js promise error messages (#1672) 2023-11-02 17:32:20 +08:00
kuzeyardabulut
3a1a280d5f
fix(napi): potential double free issue (#1679)
* Update module_register.rs

* Run fmt

---------

Co-authored-by: LongYinan <lynweklm@gmail.com>
2023-11-02 17:19:35 +08:00
LongYinan
13d0ce075e
feat: integrate with emnapi (#1669)
* Integrate with emnapi

* resolve conflict

* ignore wasm

* generate wasi file

* Add wasi test to workflow

* Fix wasi template

* emnapi new initialize api

* Finish test

* Purne tsconfig

* Generate wasi worker

* Fix electron test

* Finalize check

* Noop adjust_external_memory

* Apply cr suggestions
2023-11-02 12:57:11 +08:00
LongYinan
9db4581d7f
feat: bump msrv to 1.65 (#1755) 2023-10-17 20:18:29 +08:00
Markus
9b4beb83e9
chore(napi): make napi_register_module_v1 pub (#1747)
* feat(napi): make napi_register_module_v1 pub

* docs: add safety section

* chore: format doc comment
2023-10-09 11:18:34 +08:00
Tom Sherman
3418fd3e8f
feat(napi,sys): implement Symbol.for (#1721)
Co-authored-by: LongYinan <lynweklm@gmail.com>
2023-09-13 15:45:14 -07:00
LongYinan
05b4be4d80
style: clippy fix (#1711) 2023-08-30 16:41:13 +08:00
yoogo
4259e85e0e fix(backend): attribute of a struct marked as #[napi(constructor)] contain Rust keywords, causing to throw is not a valid identifier when generating getters and setters 2023-08-17 20:48:54 +08:00
LongYinan
b1dd613243
Release independent packages
napi@2.13.3
2023-08-16 15:24:33 +08:00
plodsoft
8bf32be7d4
feat(napi): impl FromNapiValue for HashMap with custom hasher (#1682) 2023-08-11 11:05:04 +08:00
LongYinan
07d03c9435
chore: MSRV 1.63.0 2023-08-10 10:44:55 +08:00
LongYinan
a7eeb0c31c
fix(napi): promise resolve error (#1664) 2023-07-24 00:36:24 +08:00
LongYinan
4fdce25a17
docs: update CI badge 2023-07-19 10:40:42 +08:00
LongYinan
6d62b3f714
chore: upgrade dependencies (#1657) 2023-07-17 14:56:02 +08:00
Markus
73a704a19e
feat(napi): keep stack traces in a deferred context (#1637)
* feat(napi): keep stack traces in deferred context

* chore: reformat code

Signed-off-by: Markus <28785953+MarkusJx@users.noreply.github.com>

* chore: use napi wrappers

Signed-off-by: Markus <28785953+MarkusJx@users.noreply.github.com>

* test(napi): add test for deferred trace

Signed-off-by: Markus <28785953+MarkusJx@users.noreply.github.com>

* chore: fix format

Signed-off-by: Markus <28785953+MarkusJx@users.noreply.github.com>

---------

Signed-off-by: Markus <28785953+MarkusJx@users.noreply.github.com>
2023-07-15 12:07:14 +08:00
LongYinan
16f49a764f
ci: fix FreeBSD and macOS arm64 CI (#1648) 2023-07-10 16:29:43 +08:00
LongYinan
8ec367e6c5
Release independent packages
napi@2.13.2
2023-06-14 15:51:34 +08:00
LongYinan
53cd1bc904
fix(napi): impl send + sync for ThreadsafeFunction (#1622) 2023-06-14 15:24:01 +08:00
Alexey Orlenko
1fd469a7fc
chore: remove extra #[cfg] attribute (#1616)
This was accidentally added in 2d1e4144b3.
The second cfg attribute is essentially a no-op since the first one is
still valid and has more conditions, but we don't need it.
2023-06-07 09:30:18 +08:00
Levi Zim
dc6caf7d8e
docs(README): update platform support status (#1607)
Document riscv64 linux support status.
BTW add the missing node20 column.
2023-05-27 17:38:41 +08:00
LongYinan
17bd8718ee
Release independent packages
napi@2.13.1
2023-05-27 14:30:06 +08:00
LongYinan
5a2cd93708
fix(napi): missing ValidateNapiValue for JsObject (#1606) 2023-05-27 13:33:42 +08:00
LongYinan
433e5b13bf
Release independent packages
napi@2.13.0

napi-derive@2.13.0
2023-05-27 12:28:43 +08:00
LongYinan
c6258cf633
feat(napi): support chrono::NaiveDateTime (#1601) 2023-05-26 18:28:34 +08:00
LongYinan
e5163f7fc0
Release independent packages
napi@2.12.7
2023-05-20 10:56:29 +08:00
Jānis Gailis
d1fe0f0eb1
feat(napi): Bigint deserialization (#1592)
* Handle little endianness;
* Make sure get_<u/i>128 methods don't panic when words.len() < 2;
* Make sure BigInt deserialization takes into account word length and
  sign;

Signed-off-by: Janis Gailis <JanisGailis@users.noreply.github.com>
Co-authored-by: Janis Gailis <>
2023-05-19 17:27:29 +08:00
LongYinan
1f0edfa6f2
Release independent packages
napi-derive@2.12.5
2023-04-26 15:19:52 +08:00
LongYinan
d184d503d5
fix(napi-derive): increase initial ref count in async fn (#1577) 2023-04-26 15:18:00 +08:00
LongYinan
9a220bd1c2
Release independent packages
napi@2.12.6

napi-derive@2.12.4
2023-04-25 13:27:53 +08:00
Maël Nison
2f00e79873
chore(napi): adds support for Rc<T> / Arc<T> / Mutex<T> (#1573)
* Adds support for Rc/Arc/Mutex<T>

* Fixes codegen

* Fixes lint

* Fix clippy

---------

Co-authored-by: LongYinan <lynweklm@gmail.com>
2023-04-25 11:14:06 +08:00
liuyi
5a1f229dba
feat: clean napi-derive noop feature code path (#1571) 2023-04-18 10:15:29 +08:00
LongYinan
cd8888aa23
Release independent packages
napi@2.12.5
2023-04-17 00:00:06 +08:00
LongYinan
d9ff0b4ddf
fix(napi): do nothing in deferred if thread is destroyed (#1568) 2023-04-15 18:58:53 +08:00
LongYinan
d14fdca242
fix(napi): thread safe issue while creating class instance (#1561) 2023-04-15 15:37:01 +08:00
renovate[bot]
77f53a8cc9
fix(deps): update rust crate libloading to 0.8 (#1563)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-15 06:40:31 +00:00
LongYinan
b60dbc5760
Release independent packages
napi@2.12.4
2023-04-11 11:44:32 +08:00
LongYinan
070230079d
fix(napi): noop feature 2023-04-11 11:44:10 +08:00
LongYinan
f4d9e09917
Release independent packages
napi@2.12.3

napi-derive@2.12.3
2023-04-11 11:21:48 +08:00
gaoquanzero
7fdcd7a8ae
chore(napi): add noop feature in napi crate (#1546) 2023-04-10 18:47:34 +08:00
LongYinan
66ef64bdc7
style(napi): use cast() instread as 2023-04-10 17:14:27 +08:00
LongYinan
752ffea1d9
fix(napi): revert Promise changes because of the flaky test 2023-04-10 17:14:26 +08:00
LongYinan
88773a7a8e
fix(napi): re-throw error in ThreadsafeFunction callback if we could 2023-04-10 17:02:13 +08:00
Alexey Orlenko
2d1e4144b3
fix: prevent crashing when napi_register_module_v1 is called twice (#1554)
* fix: prevent crashing when napi_register_module_v1 is called twice

Currently napi-rs addons can lead to the Node.js process aborting with
the following error when initialising the addon on Windows:

```
c:\ws\src\cleanup_queue-inl.h:32: Assertion `(insertion_info.second)
== (true)' failed.
```

This happens because `napi_add_env_cleanup_hook` must not be called
with the same arguments multiple times unless the previously scheduled
cleanup hook with the same arguments was already executed. However,
the cleanup hook added by `napi_register_module_v1` in napi-rs on
Windows was always created with `ptr::null_mut()` as an argument.

One case where this causes a problem is when using the addon from
multiple contexts (e.g. Node.js worker threads) at the same
time. However, Node.js doesn't provide any guarantees that the N-API
addon initialisation code will run only once even per thread and
context. In fact, it's totally valid to run `process.dlopen()`
multiple times from JavaScript land in Node.js, and this will lead to
the initialisation code being run multiple times as different
`exports` objects may need to be populated. This may happen in
numerous cases, e.g.:

- When it's not possible or not desirable to use `require()` and users
  must resort to using `process.dlopen()` (one use case is passing
  non-default flags to `dlopen(3)`, another is ES modules). Caching
  the results of `process.dlopen()` to avoid running it more than once
  may not always be possible reliably in all cases (for example,
  because of Jest sandbox).

- When the `require` cache is cleared.

- On Windows: `require("./addon.node")` and then
  `require(path.toNamespacedPath("./addon.node"))`.

Another issue is fixed inside `napi::tokio_runtime::drop_runtime`:
there's no need to call `napi_remove_env_cleanup_hook` (it's only
useful to cancel the hooks that haven't been executed yet). Null
pointer retrieved from `arg` was being passed as the `env` argument of
that function, so it didn't do anything and just returned
`napi_invalid_arg`.

This patch makes `napi_register_module_v1` use a counter as the
cleanup hook argument, so that the value is always different. An
alternative might have been to use a higher-level abstraction around
`sys::napi_env_cleanup_hook` that would take ownership of a boxed
closure, if there is something like this in the API already. Another
alternative could have been to heap-allocate a value so that we would
have a unique valid memory address.

The patch also contains a minor code cleanup related to
`RT_REFERENCE_COUNT` along the way: the counter is encapsulated inside
its module and `ensure_runtime` takes care of incrementing it, and
less strict memory ordering is now used as there's no need for
`SeqCst` here. If desired, it can be further optimised to
`Ordering::Release` and a separate acquire fence inside the if
statement in `drop_runtime`, as `AcqRel` for every decrement is also a
bit stricter than necessary (although simpler). These changes are not
necessary to fix the issue and can be extracted to a separate patch.

At first it was tempting to use the loaded value of
`RT_REFERENCE_COUNT` as the argument for the cleanup hook but it would
have been wrong: a simple counterexample is the following sequence:

1. init in the first context (queue: 0)
2. init in the second context (queue: 0, 1)
3. destroy the first context (queue: 1)
4. init in the third context (queue: 1, 1)

* test(napi): unload test was excluded unexpected

---------

Co-authored-by: LongYinan <lynweklm@gmail.com>
2023-04-08 23:08:48 +08:00