Commit graph

367 commits

Author SHA1 Message Date
LongYinan
ec9349bb3b
Release independent packages
napi@2.11.1
2023-02-09 23:22:29 +08:00
LongYinan
8e3eb6204b
fix(napi): support custom status in Error (#1486) 2023-02-09 23:18:57 +08:00
LongYinan
8e5ed4c7a0
Release independent packages
napi@2.11.0

napi-derive@2.11.0
2023-02-08 22:33:55 +08:00
Hana
90cc0a6abe
feat(napi): convert ToNapiValue tuple to variadic tsfn (#1475)
* refactor: convert ToNapiValue tuple to variadic tsfn

* chore: resolve conflicts

* fix: typo

* chore: use into instead of to

* chore: syntax compat
2023-02-08 22:30:43 +08:00
m1212e
a7dcf2a838
fix(napi): convert u64 to u32 in serialization (#1478)
https://github.com/napi-rs/napi-rs/issues/1470
serde_json::Value parses positive integers to u64 types by default. When converting serde_json::Value to a js value, those numbers are converted to BigInts, even if they are within the bounds of the number primitive. The added checks converts an u64 to an u32 if possible to prevent this behavior.

Co-authored-by: m1212e <->
2023-02-08 22:25:03 +08:00
LongYinan
80ec3dd2d9
Release independent packages
napi@2.10.17
2023-02-08 17:34:08 +08:00
LongYinan
c34ccc9131
fix(napi): impl Send Sync to External 2023-02-08 17:33:27 +08:00
LongYinan
f24c9e6e83
Release independent packages
napi@2.10.16
2023-02-07 16:17:04 +08:00
Hana
31015652b8
fix(napi): dropping Error should not call napi-sys if feature is set to noop (#1477) 2023-02-07 15:45:56 +08:00
LongYinan
c70c76d8f3
Release independent packages
napi@2.10.15
2023-02-06 00:59:55 +08:00
LongYinan
7613d669fb
chore(napi): enhance the error messages while converting types failed (#1473) 2023-02-06 00:52:59 +08:00
LongYinan
dc372d9153
Release independent packages
napi@2.10.14

napi-derive@2.10.1
2023-01-31 20:41:12 +08:00
LongYinan
3bd2bf40b1
fix(napi): run_script return type (#1467) 2023-01-31 20:36:59 +08:00
LongYinan
47a0d1af3b
Release independent packages
napi@2.10.13
2023-01-28 21:59:31 +08:00
LongYinan
e9de5681be
fix(napi): also apply electron external data fallback to lowlevel APIs (#1458)
* fix(napi): also apply electron external data fallback to lowlevel APIs

* chore: allow uninlined_format_args in tests
2023-01-28 21:31:57 +08:00
LongYinan
fde2d649ee
Release independent packages
napi@2.10.12
2023-01-28 14:55:40 +08:00
LongYinan
adb2508fdf
fix(napi): add missing NoExternalBuffersAllowed (#1457) 2023-01-28 14:53:31 +08:00
LongYinan
134eb8e19b
Release independent packages
napi@2.10.11
2023-01-25 09:57:25 +08:00
LongYinan
548f288722
fix(napi): fallback to copy arraybuffer if zero copy is not allowed (#1455) 2023-01-24 22:39:46 +08:00
LongYinan
b42410182e
Release independent packages
napi@2.10.10

napi-derive@2.10.0
2023-01-24 21:59:53 +08:00
LongYinan
e3adf5dac4
fix(napi): unhandled promise rejection while using EitherN<Promise<..>> (#1452) 2023-01-24 19:07:33 +08:00
LongYinan
54dd120880
fix(napi): add UnknownReturnValue to use in call_async scenario (#1451) 2023-01-24 17:41:36 +08:00
LongYinan
694f761fd9
fix(napi): throw fatal error if cast return value failed (#1450) 2023-01-24 16:32:40 +08:00
LongYinan
02daa90058
chore(napi): implement FromNapiValue for ThreadsafeFunction (#1447) 2023-01-24 12:16:24 +08:00
LongYinan
c51d657224
Release independent packages
- napi@2.10.9
- napi-sys@2.2.3
2023-01-19 17:30:12 +08:00
LongYinan
fda0aa0eec
fix(napi): fallback to copy buffer if zero copy is not allowed (#1445) 2023-01-19 17:26:59 +08:00
LongYinan
0848746534
Release independent packages
napi@2.10.8
2023-01-18 11:21:22 +08:00
LongYinan
6739ddda20
fix(napi): remove useless aquire while creating ThreadsafeFunction (#1442) 2023-01-18 11:20:47 +08:00
LongYinan
3db49adcdc
Release independent packages
napi@2.10.7
2023-01-17 00:06:43 +08:00
LongYinan
46f08ee6dd
fix(napi): missing From implementation for Bigint (#1440) 2023-01-17 00:05:19 +08:00
LongYinan
38390dbef9
Release independent packages
napi@2.10.6
2023-01-11 22:02:19 +08:00
HeYunfei
d06bd23351
fix(napi): should correctly return while dropping Buffer (#1434) 2023-01-11 20:09:39 +08:00
LongYinan
dc3a4c9f25
feat(napi): refactor ThreadsafeFunction to allow get return value of it (#1427) 2023-01-11 18:54:45 +08:00
LongYinan
5492a0b9e9
fix(napi): delete reference should be after global custom gc (#1433) 2023-01-11 17:31:03 +08:00
LongYinan
3d3fa533d9
Release independent packages
napi@2.10.5
2023-01-09 17:21:54 +08:00
LongYinan
ad3ac5abc7
fix(napi): array buffer drop notify never be called in cloned buffer (#1424) 2023-01-09 16:58:26 +08:00
overlookmotel
ce2a29fca7
fix(napi): arraybuffer memory leak (#1420) 2023-01-09 14:47:36 +08:00
LongYinan
76a16be0eb
Release independent packages
napi@2.10.4
2022-12-29 16:00:09 +08:00
LongYinan
877d631d99
fix(napi): only delete reference in custom gc 2022-12-29 14:48:00 +08:00
LongYinan
d2a492a2d0
fix(napi): require higher version of once_cell 2022-12-29 14:27:33 +08:00
Xiaopeng Li
ce4c28412a
fix(napi): promise leak (#1403)
Co-authored-by: Xiaopeng Li <lixiaopeng.jetspark@bytedance.com>
2022-12-29 00:15:55 +08:00
LongYinan
1bcb3a3628
Release independent packages
napi@2.10.3
2022-12-19 19:49:11 +08:00
LongYinan
ef5dffca80
fix(napi): add back custom gc for Send Buffer (#1399) 2022-12-19 19:11:53 +08:00
LongYinan
328b84eb8f
style: run format 2022-12-17 00:14:05 +08:00
LongYinan
f8d1dcee5b
Merge pull request #1395 from napi-rs/tweaks-code
chore(napi): reduce Mutex usage while loading addon
2022-12-16 23:13:36 +08:00
LongYinan
e370dee545
chore(napi): remove useless de_init 2022-12-16 21:50:49 +08:00
LongYinan
6e4b16fe5d
style: clippy fix 2022-12-16 20:19:39 +08:00
LongYinan
968d9e10b1
chore(napi): fix tokio destroy logic 2022-12-16 20:07:22 +08:00
F001
d2531352aa
feat(napi): add "run_script" for "Env" (#1393)
* add "run_script" for "Env"

* Apply suggestions from code review

use `AsRef<str>` instead of `&str`

Co-authored-by: LongYinan <lynweklm@gmail.com>

* use `AsRef<str>` instead of `&str`

Co-authored-by: LongYinan <lynweklm@gmail.com>
2022-12-16 15:56:36 +08:00
LongYinan
e88fbcc404
chore(napi): remove more thread_local usage 2022-12-16 15:54:29 +08:00
LongYinan
5bd6c78b5a
chore(napi): expose tokio runtime 2022-12-16 14:35:30 +08:00
LongYinan
c01bcecb2b
chore(napi): reduce the complex about destroying tokio runtime 2022-12-16 14:32:32 +08:00
Patrick Pilch
486ce35c82
fix(napi): napi_create_async_work incorrect argument (napi-rs#1392) (#1396)
The third argument to `napi_create_async_work` (async_resource_name)
should be a `napi_value` that corresponds to a null-terminated utf-8
string.

This resolves errors running Next.js with GraalVM.

oracle/graal#5582
oracle/graal#5581
2022-12-16 13:59:15 +08:00
LongYinan
a9f9dbb232
chore(napi): reduce Mutex usage while loading addon 2022-12-16 13:41:16 +08:00
LongYinan
25fb299ac6
Release independent packages
napi@2.10.2
napi-derive@2.9.2
2022-12-09 00:41:03 +08:00
nihohit
1cf32631bf
fix(napi): typed arrays ref shouldn't use offset. (#1376)
Notice from the n-api docs that the data returned from
`napi_get_typedarray_info` is already adjusted by the byte offset.
https://nodejs.org/api/n-api.html#napi_get_typedarray_info

This means that when `as_ref`/`as_mut` apply the byte offset, the
offset is in practice applied twice.
This wasn't caught in tests because no test tried to modify a typed
array with a byte offset, and the test didn't us the typed array
structs, only `JsTypedArray`. If you want, I can modify the rest of the
functions in examples/napi-compt-mode/src/arraybuffers.rs
and the matching tests, to test all typed arrays.

IMO the `byte_offset` field can be removed entirely from the struct,
but I wanted to submit a minimal PR.
2022-11-30 20:54:13 +08:00
Simon Laux
035def0600
fix(napi): return the join handle when spawning a tokio task. (#1351)
we need this to be able to safely drop an struct,
that makes use of an async task.
the drop function needs to be able to call `.abort()`
on the join handle to avoid memory corruption and undefined bahviour.
2022-11-15 11:50:25 +08:00
Simon Laux
b0c248ad7e
chore(napi): expose tokio runtime's block_on function (#1352) 2022-11-15 11:49:46 +08:00
LongYinan
9816a77729
Release independent packages
napi@2.10.1
2022-11-12 13:39:04 +08:00
LongYinan
3dde26bcef
chore(napi): including type message in error message (#1350) 2022-10-24 00:16:30 +08:00
Wodann
77060adb3d
fix(napi): BigInt::get_u64 lossless check (#1348) 2022-10-22 11:16:08 +08:00
LongYinan
a12bdc4359
Release independent packages
- napi@2.10.0
2022-10-04 17:17:13 +08:00
Devon Govett
5541d650a9
feat(napi): add threadsafe deferred values (#1306) 2022-10-03 13:00:48 +08:00
LongYinan
a5a04a4e54
fix(napi): make Buffer/ArrayBuffer truely Send/Sync safe 2022-10-03 11:34:46 +08:00
LongYinan
47de6301ee
fix(napi): should also delete the reference while dropping the Buffer 2022-10-02 10:14:25 +08:00
user.tax
e54c37a0b1
feat(napi): add support for Vec<(std::string::String, u16)> and some other small change (#1320) 2022-09-20 12:13:07 +08:00
user.tax
0d49b45ea9
feat(napi): add impl<T: Into<Vec<u8>>> From<T> for Uint8Array (#1317)
Co-authored-by: any <any@user.tax>
2022-09-16 23:15:29 +08:00
LongYinan
ea18170779
fix(napi): propagation error in function call (#1315) 2022-09-14 19:30:43 +08:00
Devon Govett
5ba70b0e1a
fix(napi): improve error propagation (#1303) 2022-09-14 17:03:11 +08:00
LongYinan
f3c203d46e
Release independent packages
napi@2.9.1
napi-derive@2.9.1
2022-09-08 17:27:35 +08:00
Dennis Duda
fc63ba8b52
fix(napi): some of the unsoundness in Buffer (#1294)
* fix leaked napi refcount in `Buffer` when cloning

Cloning unconditionally increased the refcount in `Buffer::clone`, but only called `napi_reference_unref` on dropping the last Buffer (the one with `strong_count == 1`). This means that the refcount will never drop back to zero after cloning, leaking the Buffer.

This commit changes it to also unconditionally unref the buffer.

* fix multiple sources of UB in `Buffer`

- `slice::from_raw_parts` may never be created with a null pointer, but `napi_get_buffer_info` was not sufficiently checked → UB when passing an empty Buffer
- `&'static mut [u8],` is invalid, as it certainly doesn't live for `'static`

Switching to `NonNull<u8>` and a `len` field fixes both of these.

- I also don't really understand how the `impl ToNapiValue for &mut Buffer` could have been sound. It creates an entirely new `Arc`, but reuses the same `Vec` allocation, leading to... a double free of the `Vec` on drop? I have replaced it with a simple call to `clone` instead.

* remove overcomplicated bool and drop impl

As far as I can tell, by just removing the bool and letting the drop code do its thing we clean up correctly in all cases. Because `napi_create_external_buffer` gets an owned `Buffer` attached to it via the Box, we can rely on `from_raw` retrieving it in the `drop_buffer` function.
2022-09-05 13:04:43 +08:00
LongYinan
525d881590
fix(napi): remove previous reference if value_ref existed
Usually happens while using ZST
2022-08-25 21:51:06 +08:00
LongYinan
767c040d94
Release independent packages
- napi@2.9.0
- napi-derive@2.9.0
2022-08-23 22:27:53 +08:00
LongYinan
4153c03a9f
Merge pull request #1286 from napi-rs/f32-to-napi-value
feat(napi): implement ToNapiValue for f32
2022-08-23 17:03:01 +08:00
LongYinan
f7c00c9a90
feat(napi): implement as_unknown and validate for Either types (#1285) 2022-08-23 17:02:51 +08:00
LongYinan
49ec8917df
feat(napi): implement as_object and validate for ClassInstance (#1284) 2022-08-23 17:02:41 +08:00
LongYinan
36275438ad
chore(napi): misc cleanup 2022-08-23 16:18:08 +08:00
LongYinan
03e80361d9
feat(napi): implement ToNapiValue for f32 2022-08-23 16:18:08 +08:00
messense
99e17c7294
fix(napi): segfault when ThreadsafeFunction's callback closure captures data (#1281) 2022-08-20 22:40:26 +08:00
LongYinan
b7a3103f0c
feat(napi-derive): catch_unwind attribute (#1280) 2022-08-19 23:36:36 +08:00
LongYinan
5ba603459b
Release independent packages
napi@2.8.0
napi-derive@2.8.0
2022-08-17 23:12:05 +08:00
iuser
13996c1864
feat(napi): error_anyhow feature 2022-08-17 22:50:52 +08:00
LongYinan
1cd4fda01e
feat(napi): add get and get_mut method on WeakReference 2022-08-17 21:29:03 +08:00
LongYinan
0ef482c6ca
feat(napi-derive): support inject This<Value> into raw function 2022-08-17 18:16:00 +08:00
LongYinan
2385b52a72
feat(napi): allow implement custom finalize logic for Class 2022-08-17 13:24:40 +08:00
huzz
fd191a4586
feat(napi): support rust array to js array 2022-08-12 17:53:36 +08:00
LongYinan
4412c28c6d
chore(napi): enhance error message when unwrap failed from JsObject (#1259) 2022-08-07 23:05:49 +08:00
LongYinan
a0c7176693
Release independent packages
- napi@2.7.0
- napi-derive@2.7.0
2022-08-07 12:51:15 +08:00
LongYinan
cb9239d8dc
fix(napi): either for #[napi(object)] types (#1258) 2022-08-07 01:16:28 +08:00
LongYinan
0f14799776
feat(napi-derive): support set property attribute in napi macro (#1257) 2022-08-06 21:54:58 +08:00
Jacob Kiesel
94e8e54b38
feat(napi): call sync functions within tokio runtime (#1242) 2022-08-04 00:12:35 +08:00
Dennis Duda
a9a62f225e
feat(napi): add derived traits to ThreadsafeFunctionCallMode (#1243)
This makes it possible to reuse the same value, e.g. when writing utility/helper functions.
2022-07-31 15:29:26 +08:00
Jacob Kiesel
1040c41760
feat(napi): add some useful derived traits for the Null type (#1241) 2022-07-22 23:45:02 +08:00
LongYinan
5b2bff79d4
Release independent packages
napi@2.6.3
2022-07-11 21:54:02 +08:00
LongYinan
16ec32b68e
fix(napi): memory leak in Buffer/ArrayBuffer 2022-07-11 21:34:27 +08:00
LongYinan
552ec43fae
fix(napi): use Mutex instead of Atomic in ThreadSafeFunction 2022-07-10 00:07:56 +08:00
LongYinan
a4448d3e24
Revert "fix(napi): memory leak in ThreadsafeFunction"
This reverts commit 4dfc770c2a.
2022-07-09 15:48:46 +08:00
LongYinan
3eccf45439
Release independent packages
napi@2.6.2
2022-07-08 13:50:37 +08:00
LongYinan
4dfc770c2a
fix(napi): memory leak in ThreadsafeFunction 2022-07-08 00:09:14 +08:00
Ivan Enderlin
1259ce1ba4 fix(napi) undefined is recognized as a valid None for Option<T>. 2022-07-07 15:50:55 +02:00
LongYinan
087b3ed594
Release independent packages
napi@2.6.1
2022-07-07 00:17:02 +08:00
LongYinan
bffc49f11a
fix(napi): drop buffer inner data only when Reference count is 0 2022-07-07 00:01:16 +08:00
LongYinan
661b418eb6
Release independent packages
napi@2.6.0
napi-derive@2.6.0
2022-07-06 23:33:50 +08:00
LongYinan
1a7cff167e
feat(napi): clone reference for TypedArray/Buffer 2022-07-06 19:15:16 +08:00
LongYinan
cc3086d804
fix(napi): validate fn for Option<T> 2022-07-06 14:01:32 +08:00
LongYinan
87fd74cbb6
feat(napi-derive): allow injecting this in class method 2022-07-05 23:09:40 +08:00
LongYinan
53cab27bc4
refactor(napi): Either now perform ValidateNapiValue::validate rather than type_of 2022-07-05 17:01:21 +08:00
Ivan Enderlin
81b07ce5a6
feat(napi) implement Either3 to Either26.
This patch introduces a new macro: `either_n!` that generates the types
`Either{n}` where $3 \leq n \leq 26$. Manual implementations for
`Either3`, `Either4` and `Either5` are removed by this patch too.

The `either_n!` macro is quite classical. There is no particular
trick, except `count_idents!` which simply turns, e.g. `A, B, C` into
`3`. This macro is used by `either_n!` to implement the
`debug_assert!` inside `from_napi_value`.
2022-07-05 17:01:12 +08:00
Jonas Platte
7cf87eaf20
chore(napi): replace lazy_static with once_cell (#1213) 2022-06-25 11:19:45 +08:00
LongYinan
2e7f3affe1
Release independent packages
napi@2.5.0
napi-derive@2.5.0
napi-build@2.0.1
2022-06-10 15:37:27 +08:00
LongYinan
c1e07b3c12
feat(napi): support into_instance in class struct 2022-06-04 01:07:47 +08:00
Ivan Enderlin
94e95e87e7 feat(napi) Extend #1195 to Vec<T>.
This patch is the sequel of
https://github.com/napi-rs/napi-rs/pull/1195 where `ToNapiValue` and
`FromNapiValue` are implemented for all `Vec<T>` where `T` is a 8 or
16 bits number.
2022-05-30 16:29:44 +02:00
Sunli
5cdfc8cb7e feat(napi) implement From<Infallible> for napi::Error 2022-05-30 21:44:03 +08:00
Ivan Enderlin
56e71a76d3 feat(napi) Return an error instead of panicking. 2022-05-25 14:43:23 +08:00
Ivan Enderlin
cb2a407228 feat(napi) Implement ToNapiValue for 8 and 16-bits numbers.
`napi` only supports numbers in 16 and 32-bits. To support Rust
numbers with 8 and 16-bits, we can cast them to 32-bits. To convert
from 8 and 16-bits to 32-bits, we use their `Into` implementation. To
convert from 32-bits to 8 and 16-bits, we use their `TryInto`, we
should theorically not fail, but in case of, an `except` message is
appended.

The code has also been re-indented as it was containing a mix of 2
spaces, 4 spaces and tabs identation.
2022-05-25 14:43:23 +08:00
messense
5cbeac59dc
Add rust-version field to Cargo.tomls (#1190) 2022-05-20 16:23:10 +08:00
LongYinan
822f4af1cc
Release independent packages
- napi@2.4.3
2022-05-12 16:59:33 +08:00
LongYinan
a5c19ce1da
fix(napi): type constraint for either types 2022-05-12 15:12:32 +08:00
LongYinan
fb8d8b97d6
Release independent packages
napi@2.4.2
napi-derive@2.4.2
napi-sys@2.2.2
2022-05-10 22:32:06 +08:00
LongYinan
47fcc8501a
fix(napi): missing iterator implementation from class factory 2022-05-10 21:50:20 +08:00
Devon Govett
27402aee81
feat(napi): add support for weak references 2022-05-10 21:09:45 +08:00
LongYinan
65b4b34f40
test(napi): add electron tests 2022-05-10 18:39:37 +08:00
LongYinan
788a962137
fix(napi): drop all thread_local! usage 2022-05-10 18:39:36 +08:00
LongYinan
79d7453713
Release independent packages 2022-05-07 20:23:01 +08:00
LongYinan
e551bd7c1a
fix(napi): load Node-API symbols manually on Windows 2022-05-07 18:54:37 +08:00
LongYinan
daf5f1f9e9
Release independent packages
- napi@2.4.0
- napi-derive@2.4.0
- napi-sys@2.2.0
- napi-build@2.0.0
2022-05-07 15:51:22 +08:00
LongYinan
1bf072ad7d
refactor(napi): use libloading on Windows 2022-05-06 22:27:09 +08:00
LongYinan
a3356264f2
feat(napi): experimental iterator support 2022-05-06 18:03:04 +08:00
LongYinan
b074608582
docs: broken example in README.md
Fix https://github.com/napi-rs/napi-rs/issues/1158
2022-05-06 17:46:20 +08:00
LongYinan
4b06121c5e
docs: broken links for Prisma and Next.js 2022-05-05 11:59:06 +08:00
Devon Govett
91c62c4616
fix(napi): handle the referenced object is finalized before Reference::drop 2022-05-03 21:59:42 +08:00
Ben Noordhuis
f301581445 feat(napi): make Error::from_reason() generic 2022-05-01 17:00:24 +02:00
LongYinan
2fecc109ef
Release independent packages
napi@2.3.3
napi-derive@2.3.2
2022-04-27 14:14:04 +08:00
LongYinan
66a107a4b9
chore(napi): upgrade windows crate 2022-04-27 13:59:56 +08:00
LongYinan
2e96297e1a
chore: drop node 17, add node 18 2022-04-27 13:17:39 +08:00
LongYinan
cf6b2c9241
chore: upgrade dependencies 2022-04-27 00:57:57 +08:00
LongYinan
878b843f29
feat(napi): support return Reference on class instance 2022-04-26 18:21:55 +08:00
LongYinan
5aa61c2142 fix(napi): use create_buffer/arrary_buffer if provided data is empty 2022-04-26 16:53:13 +08:00
LongYinan
a41cc07f21
Release independent packages
napi@2.3.2
napi-derive@2.3.1
2022-04-25 16:09:57 +08:00
Niklas Mischkulnig
39e55a39c9
fix(napi): use null pointer for empty buffers 2022-04-23 12:27:44 +02:00
Gabriel Francisco
581e3bbb87
chore(napi): add u64 to BigInt conversion through From trait (#1143)
* Add u64 to BigInt conversion through From trait

* Fix lint
2022-04-23 00:29:18 +08:00
LongYinan
e81e3dbb2e
Release independent packages
napi@2.3.1
2022-04-15 21:41:14 +08:00
Chanakya
09d7fd671a fix cannot find trait ToNapiValue error 2022-04-15 21:02:40 +08:00
LongYinan
ce308a3b54
Release independent packages
napi@2.3.0
napi-derive@2.3.0
2022-04-14 17:27:21 +08:00
LongYinan
c553dcd4e0 feat(napi): relax the value type on ThreadSafeFunction 2022-04-14 14:24:47 +08:00
LongYinan
f05ced0782 feat(napi): add from_unknown method on FromNapiValue 2022-04-14 14:24:47 +08:00
Walt Seymour
73882337cc unrwap -> unwrap 2022-04-14 14:24:32 +08:00
LongYinan
c605911cdf chore(napi): show tips if create different buffers with same data 2022-04-13 13:24:53 +08:00
LongYinan
1d1c1706d5 Release independent packages
napi@2.3.0-alpha.1
napi-derive@2.3.0-alpha.1
2022-04-13 13:24:53 +08:00
LongYinan
63a557f6cc test(napi): add memory tests for Reference 2022-04-13 13:24:53 +08:00