45 Commits

Author SHA1 Message Date
LongYinan
9de545e7a2
refactor!(napi): add lifetime to Object (#2619) 2025-05-11 19:51:29 +08:00
LongYinan
65fe29c854
refactor!(napi): add lifetime to JsString (#2614) 2025-05-08 13:20:09 +08:00
LongYinan
813c51e16a
refactor!(napi): move depracated types behind compat-mode feature flag (#2612) 2025-05-07 22:34:26 +08:00
LongYinan
23e9de2caa
refactor!(napi): add lifetime to Unkonwn (#2611)
Remove JsUnknown
2025-05-07 22:32:24 +08:00
LongYinan
a456fcdbc7
refactor!(napi): add lifetime for JsNumber (#2609) 2025-05-07 20:11:33 +08:00
LongYinan
95832ff168
refactor!(napi): introduce JsValue and JsObjectValue trait (#2606)
Add lifetime for JsGlobal JsTimeout and JSON
2025-05-06 23:45:37 +08:00
LongYinan
ebcf0ea88e
fix(napi-derive): make_ref with Vec<&S> cases (#2589)
- Close https://github.com/napi-rs/napi-rs/issues/2571
2025-05-02 23:13:46 +08:00
LongYinan
98cb7671d3
feat(napi): impl ReadableStream and AsyncGenerator (#2418)
* feat(napi): impl ReadableStream and AsyncGenerator

* clippy fix

* Into<Vec<u8>> trait

* Skip node18 stream test due to Node.js bug

* Cleanup

* Also skip wasi test

* Merge test

* Skip wasi

* Useless expect-error
2025-01-03 17:09:42 +08:00
Stanisław Czech
b4b74d6f1f
refactor!(napi): arguments tuple behavior (#2401)
* Implement FromNapiValue trait as macro

Code behavior should remain the same, with much less copy-pasting of the same code.
Additionally, this commit adds a unit tests for test for FromNapiValue
for tuple trait which appears to be currently missing.

* Simplify macro arr_get

Rewrite the macro to reduce the size of expanded code of the macro
(from 4088 to 2429 lines). Although this is a minor change,
this may help reduce the size of compiled library.

* Refactor typegen Type::Path

Removes the need for keeping mutable variable, as its only assigned once.

* [API BREAKING] Update api for calling functions.

This commit introduces new type FnArgs,
that is created with the goal of distinguishing between
calling JS function from rust with tuple as argument
and calling with multiple arguments.

Currently there is no possibility to add ToNapiValue value,
as tuple is used to call callback functions with more than one
argument from rust.

With this change, callbacks with multiple arguments,
should be called, with converting tuple of argument
into FnArgs struct, either by calling into() on such
tuple, or by creating FnArgs struct directly.

* Add support for FnArgs when generating TS types

Updated the macro for generating typescript types,
to correctly handle FnArgs struct. This is now treated
as passthrough type and generates the output from the
type inside of FnArgs struct.

* Implement ToNapiValue trait for tuple

With the changes to callback calling API, it's now possible
to safely add this change. This change allows to pass tuple
from rust code to JS to match the existing FromNapiValue trait
currently existing in the library.
2025-01-02 16:58:58 +08:00
Stanisław Czech
272334c69f
fix(napi): update logic for handling signed integers (#2356)
* Fix from functions for BigInt

Allow proper parsing of negative integers in those functions.

Fixes the pannic when calling:
BigInt::from(i128::MIN);

* Fix get_i128 and get_i64 for BigInt

Update the getter logic to take sign into account.

for get_i128 and get_u128 make lossless value consistent with the documentation
(documentation described different behavior then the code logic)

* Extend tests for BigInt types

Add more test cases for negative i64 and i128 to test the created changes

* Simplify the to napiValue logic for 128 bit types

Update the logic to handle negative values properly

Refactor to_napi_value and create_bigint_from_*128 to use the same logic
instead of copping mostly the same code 4 times

* Fix specification for deserialize object test

For unknown reason the binary specification was holding different value than spec file
2024-11-18 23:12:11 +08:00
Richer
48b3b238de
feat(napi): allow us to create nest function from closure (#2360) 2024-11-18 21:28:47 +08:00
LongYinan
79cbb9170e
fix!(sys): Node-API accpet NAPI_AUTO_LENGTH parameter type should be isize rather than usize (#2331) 2024-10-28 23:45:32 +08:00
LongYinan
72afae3736
refactor!(napi): Ref::unref accept &mut self instead of self (#2308) 2024-10-14 11:14:25 +08:00
LongYinan
afd081d003
feat(napi,napi-derive): allow lifetime in Class (#2298) 2024-10-10 05:59:14 +02:00
LongYinan
724673225a
refactor!(napi): remove clone fn on ThreadsafeFunction (#2291) 2024-10-07 19:23:11 +02:00
LongYinan
a4a8d31a42
chore(napi): remove once_cell (#2271) 2024-09-23 16:57:14 +08:00
Richer
fec8ff4704
chore(example): use BufferSlice to replace JsBuffer (#2269)
* chore(example): use BufferSlice to replace JsBuffer

* chore: use BufferSlice to replace env method
2024-09-22 22:53:15 +08:00
LongYinan
bf8f568788
refactor!(napi): Ref should not hold the value ptr (#2243)
It's unsafe
2024-09-12 23:25:09 +08:00
LongYinan
bc9e931a4e
feat(napi): provide PromiseRaw for non-await scenario (#2168) 2024-07-06 19:09:16 +08:00
LongYinan
ea623903d8
chore: clippy fix (#2144) 2024-06-18 13:20:43 +08:00
Ranger
80d9d87ef9
chore(example): remove JsFunction from example (#2123)
* chore(example): remove jsfunction

* feat(napi): implement ToNapiValue for Ref as required by TSFN

* fix(test): tsfn test build failed

* chore: lint code

* fix(test): fix tsfn unit test
2024-05-26 21:07:01 +08:00
Ranger
a3b01870a3
feat(napi): support External for compact mode and add JsExternal as deprecated (#2125) 2024-05-26 14:43:33 +08:00
LongYinan
4572ede9f5
refactor(napi): split T and CallJsBackArgs generic type (#2091) 2024-05-06 18:25:40 +08:00
LongYinan
0550c56fcf
fix(napi): External should impl FromNapiRef rather than FromNapiValue (#2013)
- Close https://github.com/napi-rs/napi-rs/issues/1994
2024-03-25 15:11:11 +08:00
LongYinan
4719caa643
feat(napi): support Return generic of ThreadsafeFunction (#1997)
* feat(napi): support to use tuple with either (#1993)

`Either` uses `ValidateNapiValue` + `TypeName` to validate and report error on value not being matched. So there's no way to remove these super traits from it. So I implemented these types to `Tuple` types.

* feat(napi): support `Return` generic of ThreadsafeFunction

* depracate JsFunction

* CalleeHandled tsfn should handle Result in callback

* Pass env to call_with_return_value callback

* Fix compile

* clippy fix

* Fix electron test

* Function args

---------

Co-authored-by: Hana <andywangsy@gmail.com>
2024-03-20 21:37:08 +08: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
05b4be4d80
style: clippy fix (#1711) 2023-08-30 16:41:13 +08:00
Victor Teo
aee742f185
feat(napi): property getter and setter with closure (#1526)
* getter with closure with segment fault

* fix getter closure pointer

* add setter

* Cleanup API

* Add test for `create_function_from_closure`

* Fix compile error

* Fix flaky test title

---------

Co-authored-by: LongYinan <lynweklm@gmail.com>
2023-03-21 11:22:07 +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
dc3a4c9f25
feat(napi): refactor ThreadsafeFunction to allow get return value of it (#1427) 2023-01-11 18:54:45 +08:00
LongYinan
6e4b16fe5d
style: clippy fix 2022-12-16 20:19:39 +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
Devon Govett
5541d650a9
feat(napi): add threadsafe deferred values (#1306) 2022-10-03 13:00:48 +08:00
Devon Govett
5ba70b0e1a
fix(napi): improve error propagation (#1303) 2022-09-14 17:03:11 +08:00
Ben Noordhuis
f301581445 feat(napi): make Error::from_reason() generic 2022-05-01 17:00:24 +02:00
Niklas Mischkulnig
0bdb722097
test(napi): add test for multiple empty buffers 2022-04-23 12:27:47 +02:00
LongYinan
89893cdca3
style: apply clippy suggestion 2022-02-06 10:49:16 +08:00
LongYinan
49a0139f81
style: clippy fix 2021-12-03 16:49:25 +08:00
LongYinan
4aa56a148c
fix(napi): missing coerce_to_bool on JsValue 2021-11-21 23:10:29 +08:00
LongYinan
3386bb9867
feat(napi): support JsGlobal in Env 2021-11-15 22:41:01 +08:00
LongYinan
30031f09ed
feat(napi): create ThreadsafeFunction from JsFunction 2021-11-12 17:22:57 +08:00
LongYinan
0424a08c06
feat(napi): BigInt codegen support 2021-11-11 16:18:25 +08:00
LongYinan
e0671fe071
feat(napi): implement Env::throw to throw any JsValue 2021-11-06 23:33:58 +08:00
LongYinan
e74fe2fb94
feat(napi): implement AsyncTask with AbortSignal support 2021-11-06 13:51:54 +08:00
forehalo
2467b7139b
Introduce #[napi] procedural macro to automation development boilerplate (#696)
* napi procedural macro for basic rust/JavaScript types
* introduce the `compat-mode` for `napi` and `napi-derive` crates for backward compatible
* remove #[inline] and let compiler to decide the inline behavior
* cli now can produce the `.d.ts` file for native binding
* many tests and example for the new procedural macro

Co-authored-by: LongYinan <lynweklm@gmail.com>
2021-09-23 01:29:09 +08:00