You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

186 lines
5.2 KiB

n-api: add support for abi stable module API Add support for abi stable module API (N-API) as "Experimental feature". The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag "--napi-modules". Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in "src/node_api.h" and "src/node_api_types.h". This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra <arunesh.chandra@microsoft.com> Author: Gabriel Schulhof <gabriel.schulhof@intel.com> Author: Hitesh Kanwathirtha <hiteshk@microsoft.com> Author: Ian Halliday <ianhall@microsoft.com> Author: Jason Ginchereau <jasongin@microsoft.com> Author: Michael Dawson <michael_dawson@ca.ibm.com> Author: Sampson Gao <sampsong@ca.ibm.com> Author: Taylor Woll <taylor.woll@microsoft.com> PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
8 years ago
#include <node_api.h>
#include <string.h>
#include "../common.h"
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
napi_value TestGetElement(napi_env env, napi_callback_info info) {
size_t argc = 2;
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
napi_value args[2];
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
NAPI_ASSERT(env, argc >= 2, "Wrong number of arguments");
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
napi_valuetype valuetype0;
NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
NAPI_ASSERT(env, valuetype0 == napi_object,
"Wrong type of arguments. Expects an array as first argument.");
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
napi_valuetype valuetype1;
NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1));
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
NAPI_ASSERT(env, valuetype1 == napi_number,
"Wrong type of arguments. Expects an integer as second argument.");
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
napi_value array = args[0];
int32_t index;
NAPI_CALL(env, napi_get_value_int32(env, args[1], &index));
NAPI_ASSERT(env, index >= 0, "Invalid index. Expects a positive integer.");
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
bool isarray;
NAPI_CALL(env, napi_is_array(env, array, &isarray));
if (!isarray) {
return NULL;
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
}
uint32_t length;
NAPI_CALL(env, napi_get_array_length(env, array, &length));
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
NAPI_ASSERT(env, ((uint32_t)index < length), "Index out of bounds!");
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
napi_value ret;
NAPI_CALL(env, napi_get_element(env, array, index, &ret));
return ret;
}
napi_value TestHasElement(napi_env env, napi_callback_info info) {
size_t argc = 2;
napi_value args[2];
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
NAPI_ASSERT(env, argc >= 2, "Wrong number of arguments");
napi_valuetype valuetype0;
NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
NAPI_ASSERT(env, valuetype0 == napi_object,
"Wrong type of arguments. Expects an array as first argument.");
napi_valuetype valuetype1;
NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1));
NAPI_ASSERT(env, valuetype1 == napi_number,
"Wrong type of arguments. Expects an integer as second argument.");
napi_value array = args[0];
int32_t index;
NAPI_CALL(env, napi_get_value_int32(env, args[1], &index));
bool isarray;
NAPI_CALL(env, napi_is_array(env, array, &isarray));
if (!isarray) {
return NULL;
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
}
bool has_element;
NAPI_CALL(env, napi_has_element(env, array, index, &has_element));
napi_value ret;
NAPI_CALL(env, napi_get_boolean(env, has_element, &ret));
return ret;
}
napi_value TestDeleteElement(napi_env env, napi_callback_info info) {
size_t argc = 2;
napi_value args[2];
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
NAPI_ASSERT(env, argc == 2, "Wrong number of arguments");
napi_valuetype valuetype0;
NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
NAPI_ASSERT(env, valuetype0 == napi_object,
"Wrong type of arguments. Expects an array as first argument.");
napi_valuetype valuetype1;
NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1));
NAPI_ASSERT(env, valuetype1 == napi_number,
"Wrong type of arguments. Expects an integer as second argument.");
napi_value array = args[0];
int32_t index;
bool result;
napi_value ret;
NAPI_CALL(env, napi_get_value_int32(env, args[1], &index));
NAPI_CALL(env, napi_is_array(env, array, &result));
if (!result) {
return NULL;
}
NAPI_CALL(env, napi_delete_element(env, array, index, &result));
NAPI_CALL(env, napi_get_boolean(env, result, &ret));
return ret;
}
napi_value New(napi_env env, napi_callback_info info) {
size_t argc = 1;
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
napi_value args[1];
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
napi_valuetype valuetype0;
NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
NAPI_ASSERT(env, valuetype0 == napi_object,
"Wrong type of arguments. Expects an array as first argument.");
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
napi_value ret;
NAPI_CALL(env, napi_create_array(env, &ret));
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
uint32_t i, length;
NAPI_CALL(env, napi_get_array_length(env, args[0], &length));
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
for (i = 0; i < length; i++) {
napi_value e;
NAPI_CALL(env, napi_get_element(env, args[0], i, &e));
NAPI_CALL(env, napi_set_element(env, ret, i, e));
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
}
return ret;
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
}
napi_value NewWithLength(napi_env env, napi_callback_info info) {
size_t argc = 1;
napi_value args[1];
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
napi_valuetype valuetype0;
NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
NAPI_ASSERT(env, valuetype0 == napi_number,
"Wrong type of arguments. Expects an integer the first argument.");
int32_t array_length;
NAPI_CALL(env, napi_get_value_int32(env, args[0], &array_length));
napi_value ret;
NAPI_CALL(env, napi_create_array_with_length(env, array_length, &ret));
return ret;
}
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
void Init(napi_env env, napi_value exports, napi_value module, void* priv) {
napi_property_descriptor descriptors[] = {
DECLARE_NAPI_PROPERTY("TestGetElement", TestGetElement),
DECLARE_NAPI_PROPERTY("TestHasElement", TestHasElement),
DECLARE_NAPI_PROPERTY("TestDeleteElement", TestDeleteElement),
DECLARE_NAPI_PROPERTY("New", New),
DECLARE_NAPI_PROPERTY("NewWithLength", NewWithLength),
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
};
NAPI_CALL_RETURN_VOID(env, napi_define_properties(
env, exports, sizeof(descriptors) / sizeof(*descriptors), descriptors));
n-api: add support for abi stable module API Add support for abi stable module API (N-API) as &#34;Experimental feature&#34;. The goal of this API is to provide a stable Node API for native module developers. N-API aims to provide ABI compatibility guarantees across different Node versions and also across different Node VMs - allowing N-API enabled native modules to just work across different versions and flavors of Node.js without recompilation. A more detailed introduction is provided in: https://github.com/nodejs/node-eps/blob/master/005-ABI-Stable-Module-API.md and https://github.com/nodejs/abi-stable-node/blob/doc/VM%20Summit.pdf. The feature, during its experimental state, will be guarded by a runtime flag &#34;--napi-modules&#34;. Only when this flag is added to the command line will N-API modules along with regular non N-API modules be supported. The API is defined by the methods in &#34;src/node_api.h&#34; and &#34;src/node_api_types.h&#34;. This is the best starting point to review the API surface. More documentation will follow. In addition to the implementation of the API using V8, which is included in this PR, the API has also been validated against chakracore and that port is available in https://github.com/nodejs/abi-stable-node/tree/api-prototype-chakracore-8.x. The current plan is to provide N-API support in versions 8.X and 6.X directly. For older versions, such as 4.X or pre N-API versions of 6.X, we plan to create an external npm module to provide a migration path that will allow modules targeting older Node.js versions to use the API, albeit without getting the advantage of not having to recompile. In addition, we also plan an external npm package with C++ sugar to simplify the use of the API. The sugar will be in-line only and will only use the exported N-API methods but is not part of the N-API itself. The current version is in: https://github.com/nodejs/node-api. This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the api-prototype-8.x branch with the following contributors in alphabetical order: Author: Arunesh Chandra &lt;arunesh.chandra@microsoft.com&gt; Author: Gabriel Schulhof &lt;gabriel.schulhof@intel.com&gt; Author: Hitesh Kanwathirtha &lt;hiteshk@microsoft.com&gt; Author: Ian Halliday &lt;ianhall@microsoft.com&gt; Author: Jason Ginchereau &lt;jasongin@microsoft.com&gt; Author: Michael Dawson &lt;michael_dawson@ca.ibm.com&gt; Author: Sampson Gao &lt;sampsong@ca.ibm.com&gt; Author: Taylor Woll &lt;taylor.woll@microsoft.com&gt; PR-URL: https://github.com/nodejs/node/pull/11975 Reviewed-By: Anna Henningsen &lt;anna@addaleax.net&gt; Reviewed-By: James M Snell &lt;jasnell@gmail.com&gt;
8 years ago
}
NAPI_MODULE(addon, Init)