Commit graph

111 commits

Author SHA1 Message Date
LongYinan
752ffea1d9
fix(napi): revert Promise changes because of the flaky test 2023-04-10 17:14:26 +08:00
LongYinan
0a6b214505
fix(napi): free buffer in current thread if env is available (#1549) 2023-03-30 12:55:54 +08:00
LongYinan
a0b6e2b263
fix(napi): use ptr::copy to create TypedArray in electron fallback mode (#1548) 2023-03-29 14:03:32 +08:00
Gabriel Francisco
3983be23f5
fix(napi): big numbers losing precision on serde_json::Value (#1538)
* fix(napi): big numbers losing precision on serde_json::Value

* fix(napi): add feature flags for bigint on number conversion

* chore(napi): change MAX_SAFE_INT to constant and convert big numbers to string when bigint is not available

* chore(napi): change how the check for safe integer range is made
2023-03-23 13:34:34 +08:00
LongYinan
550ef7c3cc
feat: export registers in wasm32 target (#1529) 2023-03-20 18:42:27 +08:00
Alberto Pose
ffc4980d52
fix(napi): panic when Promise callbacks trigger after Promise is dropped (#1469) (#1516)
Co-authored-by: Alberto Pose <albepose@amazon.com>
2023-03-14 15:32:17 +08:00
LongYinan
c34ccc9131
fix(napi): impl Send Sync to External 2023-02-08 17:33:27 +08:00
LongYinan
7613d669fb
chore(napi): enhance the error messages while converting types failed (#1473) 2023-02-06 00:52:59 +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
e3adf5dac4
fix(napi): unhandled promise rejection while using EitherN<Promise<..>> (#1452) 2023-01-24 19:07:33 +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
46f08ee6dd
fix(napi): missing From implementation for Bigint (#1440) 2023-01-17 00:05:19 +08:00
HeYunfei
d06bd23351
fix(napi): should correctly return while dropping Buffer (#1434) 2023-01-11 20:09:39 +08:00
LongYinan
5492a0b9e9
fix(napi): delete reference should be after global custom gc (#1433) 2023-01-11 17:31:03 +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
ef5dffca80
fix(napi): add back custom gc for Send Buffer (#1399) 2022-12-19 19:11:53 +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
a9f9dbb232
chore(napi): reduce Mutex usage while loading addon 2022-12-16 13:41:16 +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
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
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
Devon Govett
5ba70b0e1a
fix(napi): improve error propagation (#1303) 2022-09-14 17:03:11 +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
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
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
huzz
fd191a4586
feat(napi): support rust array to js array 2022-08-12 17:53:36 +08:00
LongYinan
cb9239d8dc
fix(napi): either for #[napi(object)] types (#1258) 2022-08-07 01:16:28 +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
16ec32b68e
fix(napi): memory leak in Buffer/ArrayBuffer 2022-07-11 21:34:27 +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
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
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