node-addon-api
Advanced tools
Comparing version 2.0.0 to 3.0.0
106
CHANGELOG.md
# node-addon-api Changelog | ||
## 2020-04-30 Version 3.0.0, @NickNaso | ||
### Notable changes: | ||
#### API | ||
- `Napi::Object` added templated property descriptors. | ||
- `Napi::ObjectWrap` added templated methods. | ||
- `Napi::ObjectWrap` the wrap is removed only on failure. | ||
- `Napi::ObjectWrap` the constructor's exceptions are gracefully handled. | ||
- `Napi::Function` added templated factory functions. | ||
- Added `Env::RunScript` method to run JavaScript code contained in a string. | ||
- Added templated version of `Napi::Function`. | ||
- Added benchmarking framework. | ||
- Added support for natove addon instance data. | ||
- Added `Napi::AsyncProgressQueueWorker` api. | ||
- Changed the guards to `NAPI_VERSION > 5`. | ||
- Removed N-API implementation (v6.x and v8.x support). | ||
- `Napi::AsyncWorker::OnWorkComplete` and `Napi::AsyncWorker::OnExecute` methods | ||
are override-able. | ||
- Removed erroneous finalizer cleanup in `Napi::ThreadSafeFunction`. | ||
- Disabled cahcing in `Napi::ArrayBuffer`. | ||
- Explicitly disallow assign and copy operator. | ||
- Some minor corrections and improvements. | ||
#### Documentation | ||
- Updated documentation for `Napi::Object`. | ||
- Updated documentation for `Napi::Function`. | ||
- Updated documentation for `Napi::ObjectWrap`. | ||
- Added documentation on how to add benchmark. | ||
- Added documentation for `Napi::AsyncProgressQueueWorker`. | ||
- Added suggestion about tags to use on NPM. | ||
- Added reference to N-API badges. | ||
- Some minor corrections all over the documentation. | ||
#### TEST | ||
- Updated test cases for `Napi::Object`. | ||
- Updated test cases for `Napi::Function`. | ||
- Updated test cases for `Napi::ObjectWrap`. | ||
- Updated test cases for `Napi::Env`. | ||
- Added test cases for `Napi::AsyncProgressQueueWorker`. | ||
- Some minor corrections all over the test suite. | ||
### Commits | ||
* [[`187318e37f`](https://github.com/nodejs/node-addon-api/commit/187318e37f)] - **doc**: Removed references to Node.js lower than 10.x. (#709) (Nicola Del Gobbo) | ||
* [[`9c9accfbbe`](https://github.com/nodejs/node-addon-api/commit/9c9accfbbe)] - **src**: add support for addon instance data (Gabriel Schulhof) [#663](https://github.com/nodejs/node-addon-api/pull/663) | ||
* [[`82a96502a4`](https://github.com/nodejs/node-addon-api/commit/82a96502a4)] - **src**: change guards to NAPI\_VERSION \> 5 (Gabriel Schulhof) [#697](https://github.com/nodejs/node-addon-api/pull/697) | ||
* [[`a64e8a5641`](https://github.com/nodejs/node-addon-api/commit/a64e8a5641)] - **ci**: move travis from 13 to 14 (#707) (Gabriel Schulhof) | ||
* [[`4de23c9d6b`](https://github.com/nodejs/node-addon-api/commit/4de23c9d6b)] - **doc**: fix support bigint64/biguint64 guards (Yulong Wang) [#705](https://github.com/nodejs/node-addon-api/pull/705) | ||
* [[`fedc8195e3`](https://github.com/nodejs/node-addon-api/commit/fedc8195e3)] - **doc**: fix semicolon missing in async\_worker.md (Azlan Mukhtar) [#701](https://github.com/nodejs/node-addon-api/pull/701) | ||
* [[`cdb662506c`](https://github.com/nodejs/node-addon-api/commit/cdb662506c)] - **doc**: fix typo in bigint.md (#700) (Kelvin) | ||
* [[`e1a827ae29`](https://github.com/nodejs/node-addon-api/commit/e1a827ae29)] - **src**: fix AsyncProgressQueueWorker compilation (#696) (Gabriel Schulhof) [#696](https://github.com/nodejs/node-addon-api/pull/696) | ||
* [[`2c3d5df463`](https://github.com/nodejs/node-addon-api/commit/2c3d5df463)] - Merge pull request #692 from kelvinhammond/patch-1 (Nicola Del Gobbo) | ||
* [[`623e876949`](https://github.com/nodejs/node-addon-api/commit/623e876949)] - Merge pull request #688 from NickNaso/badges (Nicola Del Gobbo) | ||
* [[`6c97913d1f`](https://github.com/nodejs/node-addon-api/commit/6c97913d1f)] - Fix minor typo in object\_lifetime\_management.md (Kelvin) | ||
* [[`6b8dd47c55`](https://github.com/nodejs/node-addon-api/commit/6b8dd47c55)] - Added badge section to documentation. (NickNaso) | ||
* [[`89e62a9154`](https://github.com/nodejs/node-addon-api/commit/89e62a9154)] - **doc**: recommend tags of addon helpers (legendecas) [#683](https://github.com/nodejs/node-addon-api/pull/683) | ||
* [[`ab018444ae`](https://github.com/nodejs/node-addon-api/commit/ab018444ae)] - **src**: implement AsyncProgressQueueWorker (legendecas) [#585](https://github.com/nodejs/node-addon-api/pull/585) | ||
* [[`d43da6ac2b`](https://github.com/nodejs/node-addon-api/commit/d43da6ac2b)] - **doc**: add @legendecas to active member list (legendecas) | ||
* [[`cb498bbe7f`](https://github.com/nodejs/node-addon-api/commit/cb498bbe7f)] - **doc**: Add Napi::BigInt::New() overload for uint64\_t (ikokostya) | ||
* [[`baaaa8452c`](https://github.com/nodejs/node-addon-api/commit/baaaa8452c)] - **doc**: link threadsafe function from JS function (legendecas) | ||
* [[`7f56a78ff7`](https://github.com/nodejs/node-addon-api/commit/7f56a78ff7)] - **objectwrap**: remove wrap only on failure (Gabriel Schulhof) | ||
* [[`4d816183da`](https://github.com/nodejs/node-addon-api/commit/4d816183da)] - **doc**: fix example code (András Timár, Dr) [#657](https://github.com/nodejs/node-addon-api/pull/657) | ||
* [[`7ac6e21801`](https://github.com/nodejs/node-addon-api/commit/7ac6e21801)] - **gyp**: fix gypfile name in index.js (Anna Henningsen) [#658](https://github.com/nodejs/node-addon-api/pull/658) | ||
* [[`46484202ca`](https://github.com/nodejs/node-addon-api/commit/46484202ca)] - **test**: user data in function property descriptor (Kevin Eady) [#652](https://github.com/nodejs/node-addon-api/pull/652) | ||
* [[`0f8d730483`](https://github.com/nodejs/node-addon-api/commit/0f8d730483)] - **doc**: fix syntax error in example (András Timár, Dr) [#650](https://github.com/nodejs/node-addon-api/pull/650) | ||
* [[`4e885069f1`](https://github.com/nodejs/node-addon-api/commit/4e885069f1)] - **src**: call `napi\_remove\_wrap()` in `ObjectWrap` dtor (Anna Henningsen) [#475](https://github.com/nodejs/node-addon-api/pull/475) | ||
* [[`2fde5c3ca3`](https://github.com/nodejs/node-addon-api/commit/2fde5c3ca3)] - **test**: update BigInt test for recent change in core (Michael Dawson) [#649](https://github.com/nodejs/node-addon-api/pull/649) | ||
* [[`e8935bd8d9`](https://github.com/nodejs/node-addon-api/commit/e8935bd8d9)] - **test**: add test for own properties on ObjectWrap (Guenter Sandner) [#645](https://github.com/nodejs/node-addon-api/pull/645) | ||
* [[`23ff7f0b24`](https://github.com/nodejs/node-addon-api/commit/23ff7f0b24)] - **src**: make OnWorkComplete and OnExecute override-able (legendecas) [#589](https://github.com/nodejs/node-addon-api/pull/589) | ||
* [[`86384f94d3`](https://github.com/nodejs/node-addon-api/commit/86384f94d3)] - **objectwrap**: gracefully handle constructor exceptions (Gabriel Schulhof) | ||
* [[`9af69da01f`](https://github.com/nodejs/node-addon-api/commit/9af69da01f)] - remove N-API implementation, v6.x and v8.x support (Gabriel Schulhof) [#643](https://github.com/nodejs/node-addon-api/pull/643) | ||
* [[`920d544779`](https://github.com/nodejs/node-addon-api/commit/920d544779)] - **benchmark**: add templated version of Function (Gabriel Schulhof) [#637](https://github.com/nodejs/node-addon-api/pull/637) | ||
* [[`03759f7759`](https://github.com/nodejs/node-addon-api/commit/03759f7759)] - ignore benchmark built archives (legendecas) [#631](https://github.com/nodejs/node-addon-api/pull/631) | ||
* [[`5eeabb0214`](https://github.com/nodejs/node-addon-api/commit/5eeabb0214)] - **tsfn**: Remove erroneous finalizer cleanup (Kevin Eady) [#636](https://github.com/nodejs/node-addon-api/pull/636) | ||
* [[`9e0e0f31e4`](https://github.com/nodejs/node-addon-api/commit/9e0e0f31e4)] - **src**: remove unnecessary forward declarations (Gabriel Schulhof) [#633](https://github.com/nodejs/node-addon-api/pull/633) | ||
* [[`79deefb6f3`](https://github.com/nodejs/node-addon-api/commit/79deefb6f3)] - **src**: explicitly disallow assign and copy (legendecas) [#590](https://github.com/nodejs/node-addon-api/pull/590) | ||
* [[`af50ac281b`](https://github.com/nodejs/node-addon-api/commit/af50ac281b)] - **error**: do not replace pending exception (Gabriel Schulhof) [#629](https://github.com/nodejs/node-addon-api/pull/629) | ||
* [[`b72f1d6978`](https://github.com/nodejs/node-addon-api/commit/b72f1d6978)] - Disable caching in ArrayBuffer (Tobias Nießen) [#611](https://github.com/nodejs/node-addon-api/pull/611) | ||
* [[`0e7483eb7b`](https://github.com/nodejs/node-addon-api/commit/0e7483eb7b)] - Fix code format in tests (Tobias Nießen) [#617](https://github.com/nodejs/node-addon-api/pull/617) | ||
* [[`6a0646356d`](https://github.com/nodejs/node-addon-api/commit/6a0646356d)] - add benchmarking framework (Gabriel Schulhof) [#623](https://github.com/nodejs/node-addon-api/pull/623) | ||
* [[`ffc71edd54`](https://github.com/nodejs/node-addon-api/commit/ffc71edd54)] - Add Env::RunScript (Tobias Nießen) [#616](https://github.com/nodejs/node-addon-api/pull/616) | ||
* [[`a1b106066e`](https://github.com/nodejs/node-addon-api/commit/a1b106066e)] - **src**: add templated function factories (Gabriel Schulhof) [#608](https://github.com/nodejs/node-addon-api/pull/608) | ||
* [[`c584343217`](https://github.com/nodejs/node-addon-api/commit/c584343217)] - Add GetPropertyNames, HasOwnProperty, Delete (#615) (Tobias Nießen) [#615](https://github.com/nodejs/node-addon-api/pull/615) | ||
* [[`3acc4b32f5`](https://github.com/nodejs/node-addon-api/commit/3acc4b32f5)] - Fix std::string encoding (#619) (Tobias Nießen) [#619](https://github.com/nodejs/node-addon-api/pull/619) | ||
* [[`e71d0eadcc`](https://github.com/nodejs/node-addon-api/commit/e71d0eadcc)] - \[doc\] Fixed links to array documentation (#613) (Nicola Del Gobbo) | ||
* [[`3dfb1f0591`](https://github.com/nodejs/node-addon-api/commit/3dfb1f0591)] - Change "WG" to "team" (Tobias Nießen) | ||
* [[`ce91e14860`](https://github.com/nodejs/node-addon-api/commit/ce91e14860)] - **objectwrap**: add template methods (Dmitry Ashkadov) [#604](https://github.com/nodejs/node-addon-api/pull/604) | ||
* [[`cfa71b60f7`](https://github.com/nodejs/node-addon-api/commit/cfa71b60f7)] - **object**: add templated property descriptors (Gabriel Schulhof) [#610](https://github.com/nodejs/node-addon-api/pull/610) | ||
* [[`734725e971`](https://github.com/nodejs/node-addon-api/commit/734725e971)] - Correctly define copy assignment operators. (Rolf Timmermans) | ||
## 2019-11-21 Version 2.0.0, @NickNaso | ||
@@ -33,3 +127,3 @@ | ||
### Commmits | ||
### Commits | ||
@@ -75,3 +169,3 @@ * [[`c881168d49`](https://github.com/nodejs/node-addon-api/commit/c881168d49)] - **tsfn**: add error checking on GetContext (#583) (Kevin Eady) [#583](https://github.com/nodejs/node-addon-api/pull/583) | ||
### Commmits | ||
### Commits | ||
@@ -104,3 +198,3 @@ * [[`c20bcbd069`](https://github.com/nodejs/node-addon-api/commit/c20bcbd069)] - Merge pull request #518 from NickNaso/master (Nicola Del Gobbo) | ||
### Commmits | ||
### Commits | ||
@@ -142,3 +236,3 @@ * [[`717c9ab163`](https://github.com/nodejs/node-addon-api/commit/717c9ab163)] - **AsyncWorker**: add GetResult() method (Kevin Eady) [#512](https://github.com/nodejs/node-addon-api/pull/512) | ||
### Commmits | ||
### Commits | ||
@@ -192,3 +286,3 @@ * [[`83b41c2fe4`](https://github.com/nodejs/node-addon-api/commit/83b41c2fe4)] - Document adding -fvisibility=hidden flag for macOS users (Nicola Del Gobbo) [#460](https://github.com/nodejs/node-addon-api/pull/460) | ||
### Commmits | ||
### Commits | ||
@@ -218,3 +312,3 @@ * [[`e7cd292a74`](https://github.com/nodejs/node-addon-api/commit/e7cd292a74)] - **src**: remove unused CallbackScope member (Gabriel Schulhof) [#391](https://github.com/nodejs/node-addon-api/pull/391) | ||
### Commmits | ||
### Commits | ||
@@ -221,0 +315,0 @@ * [[`8ce605c657`](https://github.com/nodejs/node-addon-api/commit/8ce605c657)] - **build**: avoid using package-lock.json (Jaeseok Yoon) [#359](https://github.com/nodejs/node-addon-api/pull/359) |
@@ -139,2 +139,31 @@ # AsyncWorker | ||
### OnWorkComplete | ||
This method is invoked after the work has completed on JavaScript thread. | ||
The default implementation of this method checks the status of the work and | ||
tries to dispatch the result to `Napi::AsyncWorker::OnOk` or `Napi::AsyncWorker::Error` | ||
if the work has committed an error. If the work was cancelled, neither | ||
`Napi::AsyncWorker::OnOk` nor `Napi::AsyncWorker::Error` will be invoked. | ||
After the result is dispatched, the default implementation will call into | ||
`Napi::AsyncWorker::Destroy` if `SuppressDestruct()` was not called. | ||
```cpp | ||
virtual void OnWorkComplete(Napi::Env env, napi_status status); | ||
``` | ||
### OnExecute | ||
This method is invoked immediately on the work thread when scheduled. | ||
The default implementation of this method just calls the `Napi::AsyncWorker::Execute` | ||
and handles exceptions if cpp exceptions were enabled. | ||
The `OnExecute` method receives an `napi_env` argument. However, the `napi_env` | ||
must NOT be used within this method, as it does not run on the JavaScript | ||
thread and must not run any method that would cause JavaScript to run. In | ||
practice, this means that almost any use of `napi_env` will be incorrect. | ||
```cpp | ||
virtual void OnExecute(Napi::Env env); | ||
``` | ||
### Destroy | ||
@@ -346,3 +375,3 @@ | ||
use namespace Napi; | ||
using namespace Napi; | ||
@@ -356,3 +385,3 @@ class EchoWorker : public AsyncWorker { | ||
// This code will be executed on the worker thread | ||
void Execute() { | ||
void Execute() override { | ||
// Need to simulate cpu heavy task | ||
@@ -362,3 +391,3 @@ std::this_thread::sleep_for(std::chrono::seconds(1)); | ||
void OnOK() { | ||
void OnOK() override { | ||
HandleScope scope(Env()); | ||
@@ -387,3 +416,3 @@ Callback().Call({Env().Null(), String::New(Env(), echo)}); | ||
use namespace Napi; | ||
using namespace Napi; | ||
@@ -390,0 +419,0 @@ Value Echo(const CallbackInfo& info) { |
@@ -11,2 +11,3 @@ # BigInt | ||
static Napi::BigInt Napi::BigInt::New(Napi::Env env, int64_t value); | ||
static Napi::BigInt Napi::BigInt::New(Napi::Env env, uint64_t value); | ||
``` | ||
@@ -51,3 +52,3 @@ | ||
```cpp | ||
int64_t Napi::BitInt::Int64Value(bool* lossless) const; | ||
int64_t Napi::BigInt::Int64Value(bool* lossless) const; | ||
``` | ||
@@ -54,0 +55,0 @@ |
@@ -29,5 +29,5 @@ # Class property and descriptor | ||
// Register a class instance accessor with getter and setter functions. | ||
InstanceAccessor("value", &Example::GetValue, &Example::SetValue), | ||
// We can also register a readonly accessor by passing nullptr as the setter. | ||
InstanceAccessor("readOnlyProp", &Example::GetValue, nullptr) | ||
InstanceAccessor<&Example::GetValue, &Example::SetValue>("value"), | ||
// We can also register a readonly accessor by omitting the setter. | ||
InstanceAccessor<&Example::GetValue>("readOnlyProp") | ||
}); | ||
@@ -34,0 +34,0 @@ |
@@ -16,3 +16,3 @@ # Creating a release | ||
If not please follow the instruction reported in the tool's documentation to | ||
If not please follow the instruction reported in the tool's documentation to | ||
install it. | ||
@@ -31,3 +31,3 @@ | ||
* Update the [README.md](https://github.com/nodejs/node-addon-api/blob/master/README.md) | ||
* Update the [README.md](https://github.com/nodejs/node-addon-api/blob/master/README.md) | ||
to show the new version as the latest. | ||
@@ -38,3 +38,3 @@ | ||
```bash | ||
```bash | ||
> changelog-maker | ||
@@ -49,4 +49,4 @@ ``` | ||
* Use **[CI](https://ci.nodejs.org/view/x%20-%20Abi%20stable%20module%20API/job/node-test-node-addon-api/)** | ||
to validate tests pass for latest 11, 10, 8, 6 releases (note there are still some issues on SmartOS and | ||
* Use **[CI](https://ci.nodejs.org/view/x%20-%20Abi%20stable%20module%20API/job/node-test-node-addon-api-new/)** | ||
to validate tests pass (note there are still some issues on SmartOS and | ||
Windows in the testing). | ||
@@ -53,0 +53,0 @@ |
@@ -64,1 +64,15 @@ # Env | ||
Returns an `Napi::Error` object representing the environment's pending exception, if any. | ||
### RunScript | ||
```cpp | ||
Napi::Value Napi::Env::RunScript(____ script); | ||
``` | ||
- `[in] script`: A string containing JavaScript code to execute. | ||
Runs JavaScript code contained in a string and returns its result. | ||
The `script` can be any of the following types: | ||
- [`Napi::String`](string.md) | ||
- `const char *` | ||
- `const std::string &` |
@@ -14,2 +14,6 @@ # Function | ||
> For callbacks that will be called with asynchronous events from a | ||
> non-JavaScript thread, please refer to [`Napi::ThreadSafeFunction`][] for more | ||
> examples. | ||
## Example | ||
@@ -29,3 +33,3 @@ | ||
Object Init(Env env, Object exports) { | ||
exports.Set(String::New(env, "fn"), Function::New(env, Fn)); | ||
exports.Set(String::New(env, "fn"), Function::New<Fn>(env)); | ||
} | ||
@@ -52,2 +56,23 @@ | ||
## Type definitions | ||
### Napi::Function::VoidCallback | ||
This is the type describing a callback returning `void` that will be invoked | ||
from JavaScript. | ||
```cpp | ||
typedef void (*VoidCallback)(const Napi::CallbackInfo& info); | ||
``` | ||
### Napi::Function::Callback | ||
This is the type describing a callback returning a value that will be invoked | ||
from JavaScript. | ||
```cpp | ||
typedef Value (*Callback)(const Napi::CallbackInfo& info); | ||
``` | ||
## Methods | ||
@@ -81,2 +106,82 @@ | ||
```cpp | ||
template <Napi::VoidCallback cb> | ||
static Napi::Function New(napi_env env, | ||
const char* utf8name = nullptr, | ||
void* data = nullptr); | ||
``` | ||
- `[template] cb`: The native function to invoke when the JavaScript function is | ||
invoked. | ||
- `[in] env`: The `napi_env` environment in which to construct the `Napi::Function` object. | ||
- `[in] utf8name`: Null-terminated string to be used as the name of the function. | ||
- `[in] data`: User-provided data context. This will be passed back into the | ||
function when invoked later. | ||
Returns an instance of a `Napi::Function` object. | ||
### New | ||
Creates an instance of a `Napi::Function` object. | ||
```cpp | ||
template <Napi::Callback cb> | ||
static Napi::Function New(napi_env env, | ||
const char* utf8name = nullptr, | ||
void* data = nullptr); | ||
``` | ||
- `[template] cb`: The native function to invoke when the JavaScript function is | ||
invoked. | ||
- `[in] env`: The `napi_env` environment in which to construct the `Napi::Function` object. | ||
- `[in] utf8name`: Null-terminated string to be used as the name of the function. | ||
- `[in] data`: User-provided data context. This will be passed back into the | ||
function when invoked later. | ||
Returns an instance of a `Napi::Function` object. | ||
### New | ||
Creates an instance of a `Napi::Function` object. | ||
```cpp | ||
template <Napi::VoidCallback cb> | ||
static Napi::Function New(napi_env env, | ||
const std::string& utf8name, | ||
void* data = nullptr); | ||
``` | ||
- `[template] cb`: The native function to invoke when the JavaScript function is | ||
invoked. | ||
- `[in] env`: The `napi_env` environment in which to construct the `Napi::Function` object. | ||
- `[in] utf8name`: String to be used as the name of the function. | ||
- `[in] data`: User-provided data context. This will be passed back into the | ||
function when invoked later. | ||
Returns an instance of a `Napi::Function` object. | ||
### New | ||
Creates an instance of a `Napi::Function` object. | ||
```cpp | ||
template <Napi::Callback cb> | ||
static Napi::Function New(napi_env env, | ||
const std::string& utf8name, | ||
void* data = nullptr); | ||
``` | ||
- `[template] cb`: The native function to invoke when the JavaScript function is | ||
invoked. | ||
- `[in] env`: The `napi_env` environment in which to construct the `Napi::Function` object. | ||
- `[in] utf8name`: String to be used as the name of the function. | ||
- `[in] data`: User-provided data context. This will be passed back into the | ||
function when invoked later. | ||
Returns an instance of a `Napi::Function` object. | ||
### New | ||
Creates an instance of a `Napi::Function` object. | ||
```cpp | ||
template <typename Callable> | ||
@@ -299,1 +404,3 @@ static Napi::Function Napi::Function::New(napi_env env, Callable cb, const char* utf8name = nullptr, void* data = nullptr); | ||
Returns a `Napi::Value` representing the JavaScript value returned by the function. | ||
[`Napi::ThreadSafeFunction`]: ./threadsafe_function.md |
@@ -72,3 +72,3 @@ # Object lifetime management | ||
Napi::Value newValue = Napi::String::New(info.Env(), name.c_str()); | ||
// do something with neValue | ||
// do something with newValue | ||
}; | ||
@@ -75,0 +75,0 @@ ``` |
@@ -37,4 +37,4 @@ # Object Wrap | ||
Napi::Function func = DefineClass(env, "Example", { | ||
InstanceMethod("GetValue", &Example::GetValue), | ||
InstanceMethod("SetValue", &Example::SetValue) | ||
InstanceMethod<&Example::GetValue>("GetValue"), | ||
InstanceMethod<&Example::SetValue>("SetValue") | ||
}); | ||
@@ -293,2 +293,89 @@ | ||
### StaticMethod | ||
Creates property descriptor that represents a static method of a JavaScript class. | ||
```cpp | ||
template <StaticVoidMethodCallback method> | ||
static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(const char* utf8name, | ||
napi_property_attributes attributes = napi_default, | ||
void* data = nullptr); | ||
``` | ||
- `[in] method`: The native function that represents a static method of a | ||
JavaScript class. This function returns nothing. | ||
- `[in] utf8name`: Null-terminated string that represents the name of a static | ||
method for the class. | ||
- `[in] attributes`: The attributes associated with a particular property. | ||
One or more of `napi_property_attributes`. | ||
- `[in] data`: User-provided data passed into method when it is invoked. | ||
Returns `Napi::PropertyDescriptor` object that represents the static method of a | ||
JavaScript class. | ||
### StaticMethod | ||
Creates property descriptor that represents a static method of a JavaScript class. | ||
```cpp | ||
template <StaticMethodCallback method> | ||
static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(const char* utf8name, | ||
napi_property_attributes attributes = napi_default, | ||
void* data = nullptr); | ||
``` | ||
- `[in] method`: The native function that represents a static method of a | ||
JavaScript class. | ||
- `[in] utf8name`: Null-terminated string that represents the name of a static | ||
method for the class. | ||
- `[in] attributes`: The attributes associated with a particular property. | ||
One or more of `napi_property_attributes`. | ||
- `[in] data`: User-provided data passed into method when it is invoked. | ||
Returns `Napi::PropertyDescriptor` object that represents a static method of a | ||
JavaScript class. | ||
### StaticMethod | ||
Creates property descriptor that represents a static method of a JavaScript class. | ||
```cpp | ||
template <StaticVoidMethodCallback method> | ||
static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(Symbol name, | ||
napi_property_attributes attributes = napi_default, | ||
void* data = nullptr); | ||
``` | ||
- `[in] method`: The native function that represents a static method of a | ||
JavaScript class. | ||
- `[in] name`: Napi:Symbol that represents the name of a static | ||
method for the class. | ||
- `[in] attributes`: The attributes associated with a particular property. | ||
One or more of `napi_property_attributes`. | ||
- `[in] data`: User-provided data passed into method when it is invoked. | ||
Returns `Napi::PropertyDescriptor` object that represents the static method of a | ||
JavaScript class. | ||
### StaticMethod | ||
Creates property descriptor that represents a static method of a JavaScript class. | ||
```cpp | ||
template <StaticMethodCallback method> | ||
static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(Symbol name, | ||
napi_property_attributes attributes = napi_default, | ||
void* data = nullptr); | ||
``` | ||
- `[in] method`: The native function that represents a static method of a | ||
JavaScript class. | ||
- `[in] name`: Napi:Symbol that represents the name of a static. | ||
- `[in] attributes`: The attributes associated with a particular property. | ||
One or more of `napi_property_attributes`. | ||
- `[in] data`: User-provided data passed into method when it is invoked. | ||
Returns `Napi::PropertyDescriptor` object that represents a static method of a | ||
JavaScript class. | ||
### StaticAccessor | ||
@@ -347,2 +434,53 @@ | ||
### StaticAccessor | ||
Creates property descriptor that represents a static accessor property of a | ||
JavaScript class. | ||
```cpp | ||
template <StaticGetterCallback getter, StaticSetterCallback setter=nullptr> | ||
static Napi::PropertyDescriptor Napi::ObjectWrap::StaticAccessor(const char* utf8name, | ||
napi_property_attributes attributes = napi_default, | ||
void* data = nullptr); | ||
``` | ||
- `[in] getter`: The native function to call when a get access to the property of | ||
a JavaScript class is performed. | ||
- `[in] setter`: The native function to call when a set access to the property of | ||
a JavaScript class is performed. | ||
- `[in] utf8name`: Null-terminated string that represents the name of a static | ||
accessor property for the class. | ||
- `[in] attributes`: The attributes associated with a particular property. | ||
One or more of `napi_property_attributes`. | ||
- `[in] data`: User-provided data passed into getter or setter when | ||
is invoked. | ||
Returns `Napi::PropertyDescriptor` object that represents a static accessor | ||
property of a JavaScript class. | ||
### StaticAccessor | ||
Creates property descriptor that represents a static accessor property of a | ||
JavaScript class. | ||
```cpp | ||
template <StaticGetterCallback getter, StaticSetterCallback setter=nullptr> | ||
static Napi::PropertyDescriptor Napi::ObjectWrap::StaticAccessor(Symbol name, | ||
napi_property_attributes attributes = napi_default, | ||
void* data = nullptr); | ||
``` | ||
- `[in] getter`: The native function to call when a get access to the property of | ||
a JavaScript class is performed. | ||
- `[in] setter`: The native function to call when a set access to the property of | ||
a JavaScript class is performed. | ||
- `[in] name`: Napi:Symbol that represents the name of a static accessor. | ||
- `[in] attributes`: The attributes associated with a particular property. | ||
One or more of `napi_property_attributes`. | ||
- `[in] data`: User-provided data passed into getter or setter when | ||
is invoked. | ||
Returns `Napi::PropertyDescriptor` object that represents a static accessor | ||
property of a JavaScript class. | ||
### InstanceMethod | ||
@@ -436,2 +574,90 @@ | ||
### InstanceMethod | ||
Creates property descriptor that represents an instance method of a JavaScript class. | ||
```cpp | ||
template <InstanceVoidMethodCallback method> | ||
static Napi::PropertyDescriptor Napi::ObjectWrap::InstanceMethod(const char* utf8name, | ||
napi_property_attributes attributes = napi_default, | ||
void* data = nullptr); | ||
``` | ||
- `[in] method`: The native function that represents an instance method of a | ||
JavaScript class. | ||
- `[in] utf8name`: Null-terminated string that represents the name of an instance | ||
method for the class. | ||
- `[in] attributes`: The attributes associated with a particular property. | ||
One or more of `napi_property_attributes`. | ||
- `[in] data`: User-provided data passed into method when it is invoked. | ||
Returns `Napi::PropertyDescriptor` object that represents an instance method of a | ||
JavaScript class. | ||
### InstanceMethod | ||
Creates property descriptor that represents an instance method of a JavaScript class. | ||
```cpp | ||
template <InstanceMethodCallback method> | ||
static Napi::PropertyDescriptor Napi::ObjectWrap::InstanceMethod(const char* utf8name, | ||
napi_property_attributes attributes = napi_default, | ||
void* data = nullptr); | ||
``` | ||
- `[in] method`: The native function that represents an instance method of a | ||
JavaScript class. | ||
- `[in] utf8name`: Null-terminated string that represents the name of an instance | ||
method for the class. | ||
- `[in] attributes`: The attributes associated with a particular property. | ||
One or more of `napi_property_attributes`. | ||
- `[in] data`: User-provided data passed into method when it is invoked. | ||
Returns `Napi::PropertyDescriptor` object that represents an instance method of a | ||
JavaScript class. | ||
### InstanceMethod | ||
Creates property descriptor that represents an instance method of a JavaScript class. | ||
```cpp | ||
template <InstanceVoidMethodCallback method> | ||
static Napi::PropertyDescriptor Napi::ObjectWrap::InstanceMethod(Napi::Symbol name, | ||
napi_property_attributes attributes = napi_default, | ||
void* data = nullptr); | ||
``` | ||
- `[in] method`: The native function that represents an instance method of a | ||
JavaScript class. | ||
- `[in] name`: The `Napi::Symbol` object whose value is used to identify the | ||
instance method for the class. | ||
- `[in] attributes`: The attributes associated with a particular property. | ||
One or more of `napi_property_attributes`. | ||
- `[in] data`: User-provided data passed into method when it is invoked. | ||
Returns `Napi::PropertyDescriptor` object that represents an instance method of a | ||
JavaScript class. | ||
### InstanceMethod | ||
Creates property descriptor that represents an instance method of a JavaScript class. | ||
```cpp | ||
template <InstanceMethodCallback method> | ||
static Napi::PropertyDescriptor Napi::ObjectWrap::InstanceMethod(Napi::Symbol name, | ||
napi_property_attributes attributes = napi_default, | ||
void* data = nullptr); | ||
``` | ||
- `[in] method`: The native function that represents an instance method of a | ||
JavaScript class. | ||
- `[in] name`: The `Napi::Symbol` object whose value is used to identify the | ||
instance method for the class. | ||
- `[in] attributes`: The attributes associated with a particular property. | ||
One or more of `napi_property_attributes`. | ||
- `[in] data`: User-provided data passed into method when it is invoked. | ||
Returns `Napi::PropertyDescriptor` object that represents an instance method of a | ||
JavaScript class. | ||
### InstanceAccessor | ||
@@ -489,2 +715,52 @@ | ||
### InstanceAccessor | ||
Creates property descriptor that represents an instance accessor property of a | ||
JavaScript class. | ||
```cpp | ||
template <InstanceGetterCallback getter, InstanceSetterCallback setter=nullptr> | ||
static Napi::PropertyDescriptor Napi::ObjectWrap::InstanceAccessor(const char* utf8name, | ||
napi_property_attributes attributes = napi_default, | ||
void* data = nullptr); | ||
``` | ||
- `[in] getter`: The native function to call when a get access to the property of | ||
a JavaScript class is performed. | ||
- `[in] setter`: The native function to call when a set access to the property of | ||
a JavaScript class is performed. | ||
- `[in] utf8name`: Null-terminated string that represents the name of an instance | ||
accessor property for the class. | ||
- `[in] attributes`: The attributes associated with the particular property. | ||
One or more of `napi_property_attributes`. | ||
- `[in] data`: User-provided data passed into getter or setter when this is invoked. | ||
Returns `Napi::PropertyDescriptor` object that represents an instance accessor | ||
property of a JavaScript class. | ||
### InstanceAccessor | ||
Creates property descriptor that represents an instance accessor property of a | ||
JavaScript class. | ||
```cpp | ||
template <InstanceGetterCallback getter, InstanceSetterCallback setter=nullptr> | ||
static Napi::PropertyDescriptor Napi::ObjectWrap::InstanceAccessor(Symbol name, | ||
napi_property_attributes attributes = napi_default, | ||
void* data = nullptr); | ||
``` | ||
- `[in] getter`: The native function to call when a get access to the property of | ||
a JavaScript class is performed. | ||
- `[in] setter`: The native function to call when a set access to the property of | ||
a JavaScript class is performed. | ||
- `[in] name`: The `Napi::Symbol` object whose value is used to identify the | ||
instance accessor. | ||
- `[in] attributes`: The attributes associated with the particular property. | ||
One or more of `napi_property_attributes`. | ||
- `[in] data`: User-provided data passed into getter or setter when this is invoked. | ||
Returns `Napi::PropertyDescriptor` object that represents an instance accessor | ||
property of a JavaScript class. | ||
### StaticValue | ||
@@ -491,0 +767,0 @@ |
@@ -5,3 +5,3 @@ # Object | ||
- [`Napi::Value`](value.md) and extends [`Napi::Array`](array.md) | ||
- [`Napi::Value`](value.md) which is extended by [`Napi::Array`](basic_types.md#array) | ||
- [`Napi::ArrayBuffer`](array_buffer.md) | ||
@@ -105,2 +105,18 @@ - [`Napi::Buffer<T>`](buffer.md) | ||
### Delete() | ||
```cpp | ||
bool Napi::Object::Delete(____ key); | ||
``` | ||
- `[in] key`: The name of the property to delete. | ||
Deletes the property associated with the given key. Returns `true` if the property was deleted. | ||
The `key` can be any of the following types: | ||
- `napi_value` | ||
- [`Napi::Value`](value.md) | ||
- `const char *` | ||
- `const std::string &` | ||
- `uint32_t` | ||
### Get() | ||
@@ -176,2 +192,25 @@ | ||
### GetPropertyNames() | ||
```cpp | ||
Napi::Array Napi::Object::GetPropertyNames() const; | ||
``` | ||
Returns the names of the enumerable properties of the object as a [`Napi::Array`](basic_types.md#array) of strings. | ||
The properties whose key is a `Symbol` will not be included. | ||
### HasOwnProperty() | ||
```cpp | ||
bool Napi::Object::HasOwnProperty(____ key); const | ||
``` | ||
- `[in] key` The name of the property to check. | ||
Returns a `bool` that is *true* if the object has an own property named `key` and *false* otherwise. | ||
The key can be any of the following types: | ||
- `napi_value` | ||
- [`Napi::Value`](value.md) | ||
- `const char*` | ||
- `const std::string&` | ||
- `uint32_t` | ||
### DefineProperty() | ||
@@ -178,0 +217,0 @@ |
@@ -29,11 +29,5 @@ # Property Descriptor | ||
// Accessor | ||
PropertyDescriptor pd1 = PropertyDescriptor::Accessor(env, | ||
obj, | ||
"pd1", | ||
TestGetter); | ||
PropertyDescriptor pd2 = PropertyDescriptor::Accessor(env, | ||
obj, | ||
"pd2", | ||
TestGetter, | ||
TestSetter); | ||
PropertyDescriptor pd1 = PropertyDescriptor::Accessor<TestGetter>("pd1"); | ||
PropertyDescriptor pd2 = | ||
PropertyDescriptor::Accessor<TestGetter, TestSetter>("pd2"); | ||
// Function | ||
@@ -55,2 +49,22 @@ PropertyDescriptor pd3 = PropertyDescriptor::Function(env, | ||
## Types | ||
### PropertyDescriptor::GetterCallback | ||
```cpp | ||
typedef Napi::Value (*GetterCallback)(const Napi::CallbackInfo& info); | ||
``` | ||
This is the signature of a getter function to be passed as a template parameter | ||
to `PropertyDescriptor::Accessor`. | ||
### PropertyDescriptor::SetterCallback | ||
```cpp | ||
typedef void (*SetterCallback)(const Napi::CallbackInfo& info); | ||
``` | ||
This is the signature of a setter function to be passed as a template parameter | ||
to `PropertyDescriptor::Accessor`. | ||
## Methods | ||
@@ -69,3 +83,44 @@ | ||
```cpp | ||
template <Napi::PropertyDescriptor::GetterCallback Getter> | ||
static Napi::PropertyDescriptor Napi::PropertyDescriptor::Accessor (___ name, | ||
napi_property_attributes attributes = napi_default, | ||
void* data = nullptr); | ||
``` | ||
* `[template] Getter`: A getter function. | ||
* `[in] attributes`: Potential attributes for the getter function. | ||
* `[in] data`: A pointer to data of any type, default is a null pointer. | ||
Returns a PropertyDescriptor that contains a read-only property. | ||
The name of the property can be any of the following types: | ||
- `const char*` | ||
- `const std::string &` | ||
- `napi_value value` | ||
- `Napi::Name` | ||
```cpp | ||
template < | ||
Napi::PropertyDescriptor::GetterCallback Getter, | ||
Napi::PropertyDescriptor::SetterCallback Setter> | ||
static Napi::PropertyDescriptor Napi::PropertyDescriptor::Accessor (___ name, | ||
napi_property_attributes attributes = napi_default, | ||
void* data = nullptr); | ||
``` | ||
* `[template] Getter`: A getter function. | ||
* `[template] Setter`: A setter function. | ||
* `[in] attributes`: Potential attributes for the getter function. | ||
* `[in] data`: A pointer to data of any type, default is a null pointer. | ||
Returns a PropertyDescriptor that contains a read-write property. | ||
The name of the property can be any of the following types: | ||
- `const char*` | ||
- `const std::string &` | ||
- `napi_value value` | ||
- `Napi::Name` | ||
```cpp | ||
static Napi::PropertyDescriptor Napi::PropertyDescriptor::Accessor (___ name, | ||
Getter getter, | ||
@@ -72,0 +127,0 @@ napi_property_attributes attributes = napi_default, |
@@ -30,3 +30,2 @@ # Setup | ||
'include_dirs': ["<!@(node -p \"require('node-addon-api').include\")"], | ||
'dependencies': ["<!(node -p \"require('node-addon-api').gyp\")"], | ||
``` | ||
@@ -33,0 +32,0 @@ |
@@ -65,3 +65,3 @@ # String | ||
- `[in] value`: The C++ primitive from which to instantiate the `Napi::Value`. `value` may be any of: | ||
- `std::string&` - represents an ANSI string. | ||
- `std::string&` - represents a UTF8 string. | ||
- `std::u16string&` - represents a UTF16-LE string. | ||
@@ -68,0 +68,0 @@ - `const char*` - represents a UTF8 string. |
@@ -26,3 +26,3 @@ # Symbol | ||
`description` may be any of: | ||
- `std::string&` - ANSI string description. | ||
- `std::string&` - UTF8 string description. | ||
- `const char*` - represents a UTF8 string description. | ||
@@ -29,0 +29,0 @@ - `String` - Node addon API String description. |
@@ -9,3 +9,3 @@ # Value | ||
- [`Napi::Array`](array.md) | ||
- [`Napi::Array`](basic_types.md#array) | ||
- [`Napi::ArrayBuffer`](array_buffer.md) | ||
@@ -12,0 +12,0 @@ - [`Napi::Boolean`](boolean.md) |
47
index.js
@@ -1,45 +0,8 @@ | ||
var path = require('path'); | ||
const path = require('path'); | ||
var versionArray = process.version | ||
.substr(1) | ||
.replace(/-.*$/, '') | ||
.split('.') | ||
.map(function(item) { | ||
return +item; | ||
}); | ||
// TODO: Check if the main node semantic version is within multiple ranges, | ||
// or detect presence of built-in N-API by some other mechanism TBD. | ||
// We know which version of Node.js first shipped the incarnation of the API | ||
// available in *this* package. So, if we find that the Node.js version is below | ||
// that, we indicate that the API is missing from Node.js. | ||
var isNodeApiBuiltin = ( | ||
versionArray[0] > 8 || | ||
(versionArray[0] == 8 && versionArray[1] >= 6) || | ||
(versionArray[0] == 6 && versionArray[1] >= 15) || | ||
(versionArray[0] == 6 && versionArray[1] >= 14 && versionArray[2] >= 2)); | ||
// The flag is not needed when the Node version is not 8, nor if the API is | ||
// built-in, because we removed the flag at the same time as creating the final | ||
// incarnation of the built-in API. | ||
var needsFlag = (!isNodeApiBuiltin && versionArray[0] == 8); | ||
var include = [__dirname]; | ||
var gyp = path.join(__dirname, 'src', 'node_api.gyp'); | ||
if (isNodeApiBuiltin) { | ||
gyp += ':nothing'; | ||
} else { | ||
gyp += ':node-api'; | ||
include.unshift(path.join(__dirname, 'external-napi')); | ||
} | ||
module.exports = { | ||
include: include.map(function(item) { | ||
return '"' + item + '"'; | ||
}).join(' '), | ||
gyp: gyp, | ||
isNodeApiBuiltin: isNodeApiBuiltin, | ||
needsFlag: needsFlag | ||
include: `"${__dirname}"`, | ||
gyp: path.join(__dirname, 'node_api.gyp:nothing'), | ||
isNodeApiBuiltin: true, | ||
needsFlag: false | ||
}; |
@@ -15,2 +15,6 @@ { | ||
{ | ||
"name": "András Timár, Dr", | ||
"url": "https://github.com/timarandras" | ||
}, | ||
{ | ||
"name": "Andrew Petersen", | ||
@@ -36,2 +40,6 @@ "url": "https://github.com/kirbysayshi" | ||
{ | ||
"name": "Azlan Mukhtar", | ||
"url": "https://github.com/azlan" | ||
}, | ||
{ | ||
"name": "Ben Berman", | ||
@@ -61,2 +69,6 @@ "url": "https://github.com/rivertam" | ||
{ | ||
"name": "Dmitry Ashkadov", | ||
"url": "https://github.com/dmitryash" | ||
}, | ||
{ | ||
"name": "Dongjin Na", | ||
@@ -74,2 +86,6 @@ "url": "https://github.com/nadongguri" | ||
{ | ||
"name": "Guenter Sandner", | ||
"url": "https://github.com/gms1" | ||
}, | ||
{ | ||
"name": "Gus Caplan", | ||
@@ -83,2 +99,6 @@ "url": "https://github.com/devsnek" | ||
{ | ||
"name": "ikokostya", | ||
"url": "https://github.com/ikokostya" | ||
}, | ||
{ | ||
"name": "Jake Barnes", | ||
@@ -108,2 +128,6 @@ "url": "https://github.com/DuBistKomisch" | ||
{ | ||
"name": "Kelvin", | ||
"url": "https://github.com/kelvinhammond" | ||
}, | ||
{ | ||
"name": "Kevin Eady", | ||
@@ -211,2 +235,6 @@ "url": "https://github.com/KevinEady" | ||
"url": "https://github.com/morokosi" | ||
}, | ||
{ | ||
"name": "Yulong Wang", | ||
"url": "https://github.com/fs-eire" | ||
} | ||
@@ -217,5 +245,7 @@ ], | ||
"devDependencies": { | ||
"benchmark": "^2.1.4", | ||
"safe-buffer": "^5.1.1" | ||
}, | ||
"directories": {}, | ||
"gypfile": false, | ||
"homepage": "https://github.com/nodejs/node-addon-api", | ||
@@ -243,2 +273,4 @@ "keywords": [ | ||
"scripts": { | ||
"prebenchmark": "node-gyp rebuild -C benchmark", | ||
"benchmark": "node benchmark", | ||
"pretest": "node-gyp rebuild -C test", | ||
@@ -252,3 +284,3 @@ "test": "node test", | ||
}, | ||
"version": "2.0.0" | ||
"version": "3.0.0" | ||
} |
@@ -24,3 +24,3 @@ # **node-addon-api module** | ||
exclusively and build against a version of Node.js that includes an | ||
implementation of N-API (meaning a version of Node.js newer than 6.14.2) in | ||
implementation of N-API (meaning an active LTS version of Node.js) in | ||
order to benefit from ABI stability across Node.js major versions. Node.js | ||
@@ -46,2 +46,3 @@ provides an [ABI stability guide][] containing a detailed explanation of ABI | ||
- **[More resource and info about native Addons](#resources)** | ||
- **[Badges](#badges)** | ||
- **[Code of Conduct](CODE_OF_CONDUCT.md)** | ||
@@ -51,3 +52,3 @@ - **[Contributors](#contributors)** | ||
## **Current version: 2.0.0** | ||
## **Current version: 3.0.0** | ||
@@ -60,2 +61,9 @@ (See [CHANGELOG.md](CHANGELOG.md) for complete Changelog) | ||
node-addon-api is based on [N-API](https://nodejs.org/api/n-api.html) and supports using different N-API versions. | ||
This allows addons built with it to run with Node.js versions which support the targeted N-API version. | ||
**However** the node-addon-api support model is to support only the active LTS Node.js versions. This means that | ||
every year there will be a new major which drops support for the Node.js LTS version which has gone out of service. | ||
The oldest Node.js version supported by the current version of node-addon-api is Node.js 10.x. | ||
## Setup | ||
@@ -167,9 +175,14 @@ - [Installation and usage](doc/setup.md) | ||
<a name="resources"></a> | ||
### **Benchmarks** | ||
## **Contributing** | ||
You can run the available benchmarks using the following command: | ||
We love contributions from the community to **node-addon-api**. | ||
See [CONTRIBUTING.md](CONTRIBUTING.md) for more details on our philosophy around extending this module. | ||
``` | ||
npm run-script benchmark | ||
``` | ||
See [benchmark/README.md](benchmark/README.md) for more details about running and adding benchmarks. | ||
<a name="resources"></a> | ||
### **More resource and info about native Addons** | ||
@@ -180,5 +193,36 @@ - **[C++ Addons](https://nodejs.org/dist/latest/docs/api/addons.html)** | ||
As node-addon-api's core mission is to expose the plain C N-API as C++ | ||
wrappers, tools that facilitate n-api/node-addon-api providing more | ||
convenient patterns on developing a Node.js add-ons with n-api/node-addon-api | ||
can be published to NPM as standalone packages. It is also recommended to tag | ||
such packages with `node-addon-api` to provide more visibility to the community. | ||
Quick links to NPM searches: [keywords:node-addon-api](https://www.npmjs.com/search?q=keywords%3Anode-addon-api). | ||
<a name="badges"></a> | ||
### **Badges** | ||
The use of badges is recommended to indicate the minimum version of N-API | ||
required for the module. This helps to determine which Node.js major versions are | ||
supported. Addon maintainers can consult the [N-API support matrix][] to determine | ||
which Node.js versions provide a given N-API version. The following badges are | ||
available: | ||
![N-API v1 Badge](https://github.com/nodejs/abi-stable-node/blob/doc/assets/N-API%20v1%20Badge.svg) | ||
![N-API v2 Badge](https://github.com/nodejs/abi-stable-node/blob/doc/assets/N-API%20v2%20Badge.svg) | ||
![N-API v3 Badge](https://github.com/nodejs/abi-stable-node/blob/doc/assets/N-API%20v3%20Badge.svg) | ||
![N-API v4 Badge](https://github.com/nodejs/abi-stable-node/blob/doc/assets/N-API%20v4%20Badge.svg) | ||
![N-API v5 Badge](https://github.com/nodejs/abi-stable-node/blob/doc/assets/N-API%20v5%20Badge.svg) | ||
![N-API v6 Badge](https://github.com/nodejs/abi-stable-node/blob/doc/assets/N-API%20v6%20Badge.svg) | ||
![N-API Experimental Version Badge](https://github.com/nodejs/abi-stable-node/blob/doc/assets/N-API%20Experimental%20Version%20Badge.svg) | ||
## **Contributing** | ||
We love contributions from the community to **node-addon-api**! | ||
See [CONTRIBUTING.md](CONTRIBUTING.md) for more details on our philosophy around extending this module. | ||
<a name="contributors"></a> | ||
## WG Members / Collaborators | ||
## Team members | ||
@@ -189,2 +233,3 @@ ### Active | ||
| Anna Henningsen | [addaleax](https://github.com/addaleax) | | ||
| Chengzhong Wu | [legendecas](https://github.com/legendecas) | | ||
| Gabriel Schulhof | [gabrielschulhof](https://github.com/gabrielschulhof) | | ||
@@ -211,1 +256,2 @@ | Hitesh Kanwathirtha | [digitalinfinity](https://github.com/digitalinfinity) | | ||
[ABI stability guide]: https://nodejs.org/en/docs/guides/abi-stability/ | ||
[N-API support matrix]: https://nodejs.org/dist/latest/docs/api/n-api.html#n_api_n_api_version_matrix |
@@ -27,4 +27,2 @@ #! /usr/bin/env node | ||
[ /([ ]*)"include_dirs": \[/g, '$1"include_dirs": [\n$1 "<!@(node -p \\"require(\'node-addon-api\').include\\")",' ], | ||
[ /([ ]*)'dependencies': \[/g, '$1\'dependencies\': [\n$1 \'<!(node -p "require(\\\'node-addon-api\\\').gyp")\','], | ||
[ /([ ]*)"dependencies": \[/g, '$1"dependencies": [\n$1 "<!(node -p \'require(\\\"node-addon-api\\\").gyp\')",'], | ||
[ /[ ]*("|')<!\(node -e ("|'|\\"|\\')require\(("|'|\\"|\\')nan("|'|\\"|\\')\)("|'|\\"|\\')\)("|')(,|)[\r\n]/g, '' ], | ||
@@ -43,4 +41,2 @@ [ /([ ]*)("|')target_name("|'): ("|')(.+?)("|'),/g, '$1$2target_name$2: $4$5$6,\n $2cflags!$2: [ $2-fno-exceptions$2 ],\n $2cflags_cc!$2: [ $2-fno-exceptions$2 ],\n $2xcode_settings$2: { $2GCC_ENABLE_CPP_EXCEPTIONS$2: $2YES$2,\n $2CLANG_CXX_LIBRARY$2: $2libc++$2,\n $2MACOSX_DEPLOYMENT_TARGET$2: $210.7$2,\n },\n $2msvs_settings$2: {\n $2VCCLCompilerTool$2: { $2ExceptionHandling$2: 1 },\n },' ], | ||
[ /([ ]*)"include_dirs": \[/g, '$1"include_dirs": [\n$1 "<!@(node -p \'require(\\\"node-addon-api\\\").include\')",' ], | ||
[ /([ ]*)'dependencies': \[/g, '$1\'dependencies\': [\n$1 \'<!(node -p "require(\\\'node-addon-api\\\').gyp")\','], | ||
[ /([ ]*)"dependencies": \[/g, '$1"dependencies": [\n$1 "<!(node -p \'require(\\\"node-addon-api\\\").gyp\')",'], | ||
[ /[ ]*("|')<!\(node -e ("|'|\\"|\\')require\(("|'|\\"|\\')nan("|'|\\"|\\')\)("|'|\\"|\\')\)("|')(,|)[\r\n]/g, '' ], | ||
@@ -47,0 +43,0 @@ [ /([ ]*)("|')target_name("|'): ("|')(.+?)("|'),/g, '$1$2target_name$2: $4$5$6,\n $2cflags!$2: [ $2-fno-exceptions$2 ],\n $2cflags_cc!$2: [ $2-fno-exceptions$2 ],\n $2defines$2: [ $2NAPI_DISABLE_CPP_EXCEPTIONS$2 ],\n $2conditions$2: [\n [\'OS==\"win\"\', { $2defines$2: [ $2_HAS_EXCEPTIONS=1$2 ] }]\n ]' ], |
@@ -52,6 +52,6 @@ # Migration Script | ||
Napi::Function ctor = DefineClass(env, "Canvas", { | ||
InstanceMethod("Func1", &[ClassName]::Func1), | ||
InstanceMethod("Func2", &[ClassName]::Func2), | ||
InstanceAccessor("Value", &[ClassName]::ValueGetter), | ||
StaticMethod("MethodName", &[ClassName]::StaticMethod), | ||
InstanceMethod<&[ClassName]::Func1>("Func1"), | ||
InstanceMethod<&[ClassName]::Func2>("Func2"), | ||
InstanceAccessor<&[ClassName]::ValueGetter>("Value"), | ||
StaticMethod<&[ClassName]::StaticMethod>("MethodName"), | ||
InstanceValue("Value", Napi::[Type]::New(env, value)), | ||
@@ -58,0 +58,0 @@ }); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Native code
Supply chain riskContains native code (e.g., compiled binaries or shared libraries). Including native code can obscure malicious behavior.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
78
448
250
713271
2
7
3