koffi 0.9.3 → 0.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CMakeLists.txt +63 -60
- package/README.md +162 -153
- package/package.json +19 -18
- package/src/call.hh +27 -27
- package/src/call_arm32.cc +514 -0
- package/src/call_arm32_fwd.S +108 -0
- package/src/call_arm64.cc +497 -482
- package/src/call_arm64_fwd.S +110 -115
- package/src/call_x64_sysv.cc +477 -477
- package/src/call_x64_sysv_fwd.S +131 -131
- package/src/call_x64_win.cc +243 -243
- package/src/call_x64_win_fwd.asm +105 -105
- package/src/call_x86.cc +259 -259
- package/src/call_x86_fwd.S +48 -48
- package/src/call_x86_fwd.asm +50 -50
- package/src/ffi.cc +504 -504
- package/src/ffi.hh +136 -135
- package/src/util.cc +297 -296
- package/src/util.hh +80 -80
- package/vendor/dragonbox/CMakeLists.txt +122 -122
- package/vendor/dragonbox/LICENSE-Apache2-LLVM +218 -218
- package/vendor/dragonbox/LICENSE-Boost +23 -23
- package/vendor/dragonbox/README.md +277 -277
- package/vendor/dragonbox/cmake/dragonboxConfig.cmake +1 -1
- package/vendor/dragonbox/include/dragonbox/dragonbox.h +2674 -2670
- package/vendor/dragonbox/include/dragonbox/dragonbox_to_chars.h +108 -108
- package/vendor/dragonbox/other_files/Dragonbox.pdf +0 -0
- package/vendor/dragonbox/other_files/unknown_win64_vc2019.html +539 -539
- package/vendor/dragonbox/source/dragonbox_to_chars.cpp +303 -303
- package/vendor/dragonbox/subproject/3rdparty/grisu_exact/CMakeLists.txt +23 -23
- package/vendor/dragonbox/subproject/3rdparty/grisu_exact/fp_to_chars.cpp +238 -238
- package/vendor/dragonbox/subproject/3rdparty/grisu_exact/fp_to_chars.h +95 -95
- package/vendor/dragonbox/subproject/3rdparty/grisu_exact/grisu_exact.h +2666 -2666
- package/vendor/dragonbox/subproject/3rdparty/ryu/CMakeLists.txt +16 -16
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/common.h +114 -114
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s.c +509 -509
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s_full_table.h +367 -367
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s_intrinsics.h +357 -357
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/digit_table.h +35 -35
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s.c +345 -345
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s_full_table.h +55 -55
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s_intrinsics.h +128 -128
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/ryu.h +46 -46
- package/vendor/dragonbox/subproject/3rdparty/schubfach/CMakeLists.txt +21 -21
- package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_32.cc +699 -699
- package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_32.h +31 -31
- package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_64.cc +1354 -1354
- package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_64.h +31 -31
- package/vendor/dragonbox/subproject/3rdparty/shaded_plots/example_shaded_plots.m +68 -68
- package/vendor/dragonbox/subproject/3rdparty/shaded_plots/license.txt +25 -25
- package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_distribution.m +92 -92
- package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_distribution_prctile.m +121 -121
- package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_histogram_shaded.m +99 -99
- package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_shaded.m +93 -93
- package/vendor/dragonbox/subproject/benchmark/CMakeLists.txt +64 -64
- package/vendor/dragonbox/subproject/benchmark/include/benchmark.h +40 -40
- package/vendor/dragonbox/subproject/benchmark/matlab/plot_benchmarks.m +21 -21
- package/vendor/dragonbox/subproject/benchmark/matlab/plot_digit_benchmark.m +78 -78
- package/vendor/dragonbox/subproject/benchmark/matlab/plot_uniform_benchmark.m +95 -95
- package/vendor/dragonbox/subproject/benchmark/source/benchmark.cpp +237 -237
- package/vendor/dragonbox/subproject/benchmark/source/dragonbox.cpp +30 -30
- package/vendor/dragonbox/subproject/benchmark/source/grisu_exact.cpp +36 -36
- package/vendor/dragonbox/subproject/benchmark/source/ryu.cpp +27 -27
- package/vendor/dragonbox/subproject/benchmark/source/schubfach.cpp +31 -31
- package/vendor/dragonbox/subproject/common/CMakeLists.txt +41 -41
- package/vendor/dragonbox/subproject/common/include/best_rational_approx.h +96 -96
- package/vendor/dragonbox/subproject/common/include/big_uint.h +217 -217
- package/vendor/dragonbox/subproject/common/include/continued_fractions.h +173 -173
- package/vendor/dragonbox/subproject/common/include/good_rational_approx.h +266 -266
- package/vendor/dragonbox/subproject/common/include/random_float.h +182 -182
- package/vendor/dragonbox/subproject/common/include/rational_continued_fractions.h +56 -56
- package/vendor/dragonbox/subproject/common/source/big_uint.cpp +601 -601
- package/vendor/dragonbox/subproject/meta/CMakeLists.txt +40 -40
- package/vendor/dragonbox/subproject/meta/results/binary32_generated_cache.txt +81 -81
- package/vendor/dragonbox/subproject/meta/results/binary64_compressed_cache_error_table.txt +9 -9
- package/vendor/dragonbox/subproject/meta/results/binary64_generated_cache.txt +622 -622
- package/vendor/dragonbox/subproject/meta/source/generate_cache.cpp +126 -126
- package/vendor/dragonbox/subproject/meta/source/live_test.cpp +81 -81
- package/vendor/dragonbox/subproject/meta/source/perf_test.cpp +104 -104
- package/vendor/dragonbox/subproject/meta/source/sandbox.cpp +20 -20
- package/vendor/dragonbox/subproject/test/CMakeLists.txt +69 -69
- package/vendor/dragonbox/subproject/test/results/binary32.csv +255 -255
- package/vendor/dragonbox/subproject/test/results/binary64.csv +2047 -2047
- package/vendor/dragonbox/subproject/test/results/plot_required_bits.m +17 -17
- package/vendor/dragonbox/subproject/test/source/test_all_shorter_interval_cases.cpp +88 -88
- package/vendor/dragonbox/subproject/test/source/uniform_random_test.cpp +95 -95
- package/vendor/dragonbox/subproject/test/source/verify_cache_precision.cpp +337 -337
- package/vendor/dragonbox/subproject/test/source/verify_compressed_cache.cpp +154 -154
- package/vendor/dragonbox/subproject/test/source/verify_fast_multiplication.cpp +168 -168
- package/vendor/dragonbox/subproject/test/source/verify_log_computation.cpp +251 -251
- package/vendor/dragonbox/subproject/test/source/verify_magic_division.cpp +113 -113
- package/vendor/libcc/libcc.cc +7651 -7651
- package/vendor/libcc/libcc.hh +4312 -4312
- package/vendor/node-addon-api/CHANGELOG.md +859 -859
- package/vendor/node-addon-api/CODE_OF_CONDUCT.md +4 -4
- package/vendor/node-addon-api/CONTRIBUTING.md +93 -93
- package/vendor/node-addon-api/LICENSE.md +12 -12
- package/vendor/node-addon-api/README.md +293 -293
- package/vendor/node-addon-api/appveyor.yml +37 -37
- package/vendor/node-addon-api/benchmark/README.md +47 -47
- package/vendor/node-addon-api/benchmark/binding.gyp +25 -25
- package/vendor/node-addon-api/benchmark/function_args.cc +217 -217
- package/vendor/node-addon-api/benchmark/function_args.js +60 -60
- package/vendor/node-addon-api/benchmark/index.js +34 -34
- package/vendor/node-addon-api/benchmark/property_descriptor.cc +91 -91
- package/vendor/node-addon-api/benchmark/property_descriptor.js +37 -37
- package/vendor/node-addon-api/common.gypi +21 -21
- package/vendor/node-addon-api/doc/addon.md +163 -163
- package/vendor/node-addon-api/doc/array.md +81 -81
- package/vendor/node-addon-api/doc/array_buffer.md +155 -155
- package/vendor/node-addon-api/doc/async_context.md +86 -86
- package/vendor/node-addon-api/doc/async_operations.md +31 -31
- package/vendor/node-addon-api/doc/async_worker.md +427 -427
- package/vendor/node-addon-api/doc/async_worker_variants.md +557 -557
- package/vendor/node-addon-api/doc/bigint.md +97 -97
- package/vendor/node-addon-api/doc/boolean.md +68 -68
- package/vendor/node-addon-api/doc/buffer.md +150 -150
- package/vendor/node-addon-api/doc/callback_scope.md +54 -54
- package/vendor/node-addon-api/doc/callbackinfo.md +97 -97
- package/vendor/node-addon-api/doc/checker-tool.md +32 -32
- package/vendor/node-addon-api/doc/class_property_descriptor.md +115 -115
- package/vendor/node-addon-api/doc/cmake-js.md +68 -68
- package/vendor/node-addon-api/doc/conversion-tool.md +27 -27
- package/vendor/node-addon-api/doc/creating_a_release.md +62 -62
- package/vendor/node-addon-api/doc/dataview.md +248 -248
- package/vendor/node-addon-api/doc/date.md +68 -68
- package/vendor/node-addon-api/doc/env.md +196 -196
- package/vendor/node-addon-api/doc/error.md +120 -120
- package/vendor/node-addon-api/doc/error_handling.md +254 -254
- package/vendor/node-addon-api/doc/escapable_handle_scope.md +80 -80
- package/vendor/node-addon-api/doc/external.md +63 -63
- package/vendor/node-addon-api/doc/function.md +402 -402
- package/vendor/node-addon-api/doc/function_reference.md +238 -238
- package/vendor/node-addon-api/doc/generator.md +13 -13
- package/vendor/node-addon-api/doc/handle_scope.md +63 -63
- package/vendor/node-addon-api/doc/hierarchy.md +91 -91
- package/vendor/node-addon-api/doc/instance_wrap.md +408 -408
- package/vendor/node-addon-api/doc/maybe.md +76 -76
- package/vendor/node-addon-api/doc/memory_management.md +27 -27
- package/vendor/node-addon-api/doc/name.md +29 -29
- package/vendor/node-addon-api/doc/node-gyp.md +82 -82
- package/vendor/node-addon-api/doc/number.md +163 -163
- package/vendor/node-addon-api/doc/object.md +432 -432
- package/vendor/node-addon-api/doc/object_lifetime_management.md +83 -83
- package/vendor/node-addon-api/doc/object_reference.md +117 -117
- package/vendor/node-addon-api/doc/object_wrap.md +561 -561
- package/vendor/node-addon-api/doc/prebuild_tools.md +16 -16
- package/vendor/node-addon-api/doc/promises.md +79 -79
- package/vendor/node-addon-api/doc/property_descriptor.md +286 -286
- package/vendor/node-addon-api/doc/propertylvalue.md +50 -50
- package/vendor/node-addon-api/doc/range_error.md +59 -59
- package/vendor/node-addon-api/doc/reference.md +113 -113
- package/vendor/node-addon-api/doc/setup.md +110 -110
- package/vendor/node-addon-api/doc/string.md +93 -93
- package/vendor/node-addon-api/doc/symbol.md +60 -60
- package/vendor/node-addon-api/doc/threadsafe.md +121 -121
- package/vendor/node-addon-api/doc/threadsafe_function.md +290 -290
- package/vendor/node-addon-api/doc/type_error.md +59 -59
- package/vendor/node-addon-api/doc/typed_array.md +78 -78
- package/vendor/node-addon-api/doc/typed_array_of.md +137 -137
- package/vendor/node-addon-api/doc/typed_threadsafe_function.md +306 -306
- package/vendor/node-addon-api/doc/value.md +340 -340
- package/vendor/node-addon-api/doc/version_management.md +43 -43
- package/vendor/node-addon-api/except.gypi +25 -25
- package/vendor/node-addon-api/index.js +11 -11
- package/vendor/node-addon-api/napi-inl.deprecated.h +192 -192
- package/vendor/node-addon-api/napi-inl.h +6209 -6209
- package/vendor/node-addon-api/napi.h +2983 -2983
- package/vendor/node-addon-api/node_api.gyp +9 -9
- package/vendor/node-addon-api/noexcept.gypi +26 -26
- package/vendor/node-addon-api/package-support.json +21 -21
- package/vendor/node-addon-api/package.json +399 -399
- package/vendor/node-addon-api/test/README.md +91 -91
- package/vendor/node-addon-api/test/addon.cc +36 -36
- package/vendor/node-addon-api/test/addon.js +11 -11
- package/vendor/node-addon-api/test/addon_build/index.js +49 -49
- package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +17 -17
- package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +62 -62
- package/vendor/node-addon-api/test/addon_build/tpl/index.js +9 -9
- package/vendor/node-addon-api/test/addon_build/tpl/package.json +11 -11
- package/vendor/node-addon-api/test/addon_data.cc +99 -99
- package/vendor/node-addon-api/test/addon_data.js +46 -46
- package/vendor/node-addon-api/test/array_buffer.cc +243 -243
- package/vendor/node-addon-api/test/array_buffer.js +69 -69
- package/vendor/node-addon-api/test/async_context.cc +21 -21
- package/vendor/node-addon-api/test/async_context.js +86 -86
- package/vendor/node-addon-api/test/async_progress_queue_worker.cc +83 -83
- package/vendor/node-addon-api/test/async_progress_queue_worker.js +46 -46
- package/vendor/node-addon-api/test/async_progress_worker.cc +134 -134
- package/vendor/node-addon-api/test/async_progress_worker.js +61 -61
- package/vendor/node-addon-api/test/async_worker.cc +106 -106
- package/vendor/node-addon-api/test/async_worker.js +179 -179
- package/vendor/node-addon-api/test/async_worker_nocallback.js +13 -13
- package/vendor/node-addon-api/test/async_worker_persistent.cc +63 -63
- package/vendor/node-addon-api/test/async_worker_persistent.js +24 -24
- package/vendor/node-addon-api/test/basic_types/array.cc +40 -40
- package/vendor/node-addon-api/test/basic_types/array.js +35 -35
- package/vendor/node-addon-api/test/basic_types/boolean.cc +38 -38
- package/vendor/node-addon-api/test/basic_types/boolean.js +35 -35
- package/vendor/node-addon-api/test/basic_types/number.cc +99 -99
- package/vendor/node-addon-api/test/basic_types/number.js +114 -114
- package/vendor/node-addon-api/test/basic_types/value.cc +120 -120
- package/vendor/node-addon-api/test/basic_types/value.js +133 -133
- package/vendor/node-addon-api/test/bigint.cc +91 -91
- package/vendor/node-addon-api/test/bigint.js +53 -53
- package/vendor/node-addon-api/test/binding-swallowexcept.cc +12 -12
- package/vendor/node-addon-api/test/binding.cc +171 -171
- package/vendor/node-addon-api/test/binding.gyp +117 -117
- package/vendor/node-addon-api/test/buffer.cc +183 -183
- package/vendor/node-addon-api/test/buffer.js +69 -69
- package/vendor/node-addon-api/test/callbackscope.cc +22 -22
- package/vendor/node-addon-api/test/callbackscope.js +49 -49
- package/vendor/node-addon-api/test/common/index.js +113 -113
- package/vendor/node-addon-api/test/common/test_helper.h +61 -61
- package/vendor/node-addon-api/test/dataview/dataview.cc +48 -48
- package/vendor/node-addon-api/test/dataview/dataview.js +35 -35
- package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +115 -115
- package/vendor/node-addon-api/test/dataview/dataview_read_write.js +90 -90
- package/vendor/node-addon-api/test/date.cc +44 -44
- package/vendor/node-addon-api/test/date.js +18 -18
- package/vendor/node-addon-api/test/env_cleanup.cc +88 -88
- package/vendor/node-addon-api/test/env_cleanup.js +56 -56
- package/vendor/node-addon-api/test/error.cc +287 -287
- package/vendor/node-addon-api/test/error.js +81 -81
- package/vendor/node-addon-api/test/error_handling_for_primitives.cc +13 -13
- package/vendor/node-addon-api/test/error_handling_for_primitives.js +29 -29
- package/vendor/node-addon-api/test/error_terminating_environment.js +94 -94
- package/vendor/node-addon-api/test/external.cc +81 -81
- package/vendor/node-addon-api/test/external.js +88 -88
- package/vendor/node-addon-api/test/function.cc +295 -295
- package/vendor/node-addon-api/test/function.js +121 -121
- package/vendor/node-addon-api/test/function_reference.cc +202 -202
- package/vendor/node-addon-api/test/function_reference.js +157 -157
- package/vendor/node-addon-api/test/globalObject/global_object.cc +61 -61
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +31 -31
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +61 -61
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +40 -40
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +57 -57
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +28 -28
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +48 -48
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +30 -30
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +58 -58
- package/vendor/node-addon-api/test/handlescope.cc +60 -60
- package/vendor/node-addon-api/test/handlescope.js +14 -14
- package/vendor/node-addon-api/test/index.js +136 -136
- package/vendor/node-addon-api/test/maybe/check.cc +23 -23
- package/vendor/node-addon-api/test/maybe/index.js +38 -38
- package/vendor/node-addon-api/test/memory_management.cc +17 -17
- package/vendor/node-addon-api/test/memory_management.js +9 -9
- package/vendor/node-addon-api/test/movable_callbacks.cc +23 -23
- package/vendor/node-addon-api/test/movable_callbacks.js +21 -21
- package/vendor/node-addon-api/test/name.cc +108 -108
- package/vendor/node-addon-api/test/name.js +59 -59
- package/vendor/node-addon-api/test/napi_child.js +14 -14
- package/vendor/node-addon-api/test/object/delete_property.cc +38 -38
- package/vendor/node-addon-api/test/object/delete_property.js +41 -41
- package/vendor/node-addon-api/test/object/finalizer.cc +29 -29
- package/vendor/node-addon-api/test/object/finalizer.js +28 -28
- package/vendor/node-addon-api/test/object/get_property.cc +34 -34
- package/vendor/node-addon-api/test/object/get_property.js +40 -40
- package/vendor/node-addon-api/test/object/has_own_property.cc +34 -34
- package/vendor/node-addon-api/test/object/has_own_property.js +34 -34
- package/vendor/node-addon-api/test/object/has_property.cc +38 -38
- package/vendor/node-addon-api/test/object/has_property.js +37 -37
- package/vendor/node-addon-api/test/object/object.cc +348 -348
- package/vendor/node-addon-api/test/object/object.js +217 -217
- package/vendor/node-addon-api/test/object/object_deprecated.cc +66 -66
- package/vendor/node-addon-api/test/object/object_deprecated.js +47 -47
- package/vendor/node-addon-api/test/object/object_freeze_seal.cc +25 -25
- package/vendor/node-addon-api/test/object/object_freeze_seal.js +61 -61
- package/vendor/node-addon-api/test/object/set_property.cc +37 -37
- package/vendor/node-addon-api/test/object/set_property.js +29 -29
- package/vendor/node-addon-api/test/object/subscript_operator.cc +42 -42
- package/vendor/node-addon-api/test/object/subscript_operator.js +17 -17
- package/vendor/node-addon-api/test/object_reference.cc +219 -219
- package/vendor/node-addon-api/test/object_reference.js +259 -259
- package/vendor/node-addon-api/test/objectwrap.cc +268 -268
- package/vendor/node-addon-api/test/objectwrap.js +284 -284
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +26 -26
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +18 -18
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +30 -30
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +13 -13
- package/vendor/node-addon-api/test/objectwrap_removewrap.cc +45 -45
- package/vendor/node-addon-api/test/objectwrap_removewrap.js +40 -40
- package/vendor/node-addon-api/test/objectwrap_worker_thread.js +19 -19
- package/vendor/node-addon-api/test/promise.cc +29 -29
- package/vendor/node-addon-api/test/promise.js +18 -18
- package/vendor/node-addon-api/test/reference.cc +24 -24
- package/vendor/node-addon-api/test/reference.js +14 -14
- package/vendor/node-addon-api/test/run_script.cc +56 -56
- package/vendor/node-addon-api/test/run_script.js +45 -45
- package/vendor/node-addon-api/test/symbol.cc +79 -79
- package/vendor/node-addon-api/test/symbol.js +73 -73
- package/vendor/node-addon-api/test/testUtil.js +54 -54
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +195 -195
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +188 -188
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +63 -63
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +12 -12
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +115 -115
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +14 -14
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +26 -26
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +7 -7
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +225 -225
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +59 -59
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +42 -42
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +53 -53
- package/vendor/node-addon-api/test/thunking_manual.cc +140 -140
- package/vendor/node-addon-api/test/thunking_manual.js +17 -17
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +215 -215
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +188 -188
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +68 -68
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +12 -12
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +127 -127
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +14 -14
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +28 -28
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +7 -7
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +237 -237
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +59 -59
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +53 -53
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +53 -53
- package/vendor/node-addon-api/test/typedarray-bigint.js +58 -58
- package/vendor/node-addon-api/test/typedarray.cc +216 -216
- package/vendor/node-addon-api/test/typedarray.js +69 -69
- package/vendor/node-addon-api/test/version_management.cc +27 -27
- package/vendor/node-addon-api/test/version_management.js +31 -31
- package/vendor/node-addon-api/tools/README.md +73 -73
- package/vendor/node-addon-api/tools/check-napi.js +100 -100
- package/vendor/node-addon-api/tools/clang-format.js +68 -68
- package/vendor/node-addon-api/tools/conversion.js +309 -309
- package/vendor/node-addon-api/tools/eslint-format.js +71 -71
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
# RangeError
|
|
2
|
-
|
|
3
|
-
The `Napi::RangeError` class is a representation of the JavaScript `RangeError` that is
|
|
4
|
-
thrown when trying to pass a value as an argument to a function that does not allow
|
|
5
|
-
a range that includes the value.
|
|
6
|
-
|
|
7
|
-
The `Napi::RangeError` class inherits its behaviors from the `Napi::Error` class (for
|
|
8
|
-
more info see: [`Napi::Error`](error.md)).
|
|
9
|
-
|
|
10
|
-
For more details about error handling refer to the section titled [Error handling](error_handling.md).
|
|
11
|
-
|
|
12
|
-
## Methods
|
|
13
|
-
|
|
14
|
-
### New
|
|
15
|
-
|
|
16
|
-
Creates a new instance of a `Napi::RangeError` object.
|
|
17
|
-
|
|
18
|
-
```cpp
|
|
19
|
-
Napi::RangeError::New(Napi::Env env, const char* message);
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
- `[in] Env`: The environment in which to construct the `Napi::RangeError` object.
|
|
23
|
-
- `[in] message`: Null-terminated string to be used as the message for the `Napi::RangeError`.
|
|
24
|
-
|
|
25
|
-
Returns an instance of a `Napi::RangeError` object.
|
|
26
|
-
|
|
27
|
-
### New
|
|
28
|
-
|
|
29
|
-
Creates a new instance of a `Napi::RangeError` object.
|
|
30
|
-
|
|
31
|
-
```cpp
|
|
32
|
-
Napi::RangeError::New(Napi::Env env, const std::string& message);
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
- `[in] Env`: The environment in which to construct the `Napi::RangeError` object.
|
|
36
|
-
- `[in] message`: Reference string to be used as the message for the `Napi::RangeError`.
|
|
37
|
-
|
|
38
|
-
Returns an instance of a `Napi::RangeError` object.
|
|
39
|
-
|
|
40
|
-
### Constructor
|
|
41
|
-
|
|
42
|
-
Creates a new empty instance of a `Napi::RangeError`.
|
|
43
|
-
|
|
44
|
-
```cpp
|
|
45
|
-
Napi::RangeError::RangeError();
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Constructor
|
|
49
|
-
|
|
50
|
-
Initializes a `Napi::RangeError` instance from an existing Javascript error object.
|
|
51
|
-
|
|
52
|
-
```cpp
|
|
53
|
-
Napi::RangeError::RangeError(napi_env env, napi_value value);
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
- `[in] Env`: The environment in which to construct the `Napi::RangeError` object.
|
|
57
|
-
- `[in] value`: The `Napi::Error` reference to wrap.
|
|
58
|
-
|
|
59
|
-
Returns an instance of a `Napi::RangeError` object.
|
|
1
|
+
# RangeError
|
|
2
|
+
|
|
3
|
+
The `Napi::RangeError` class is a representation of the JavaScript `RangeError` that is
|
|
4
|
+
thrown when trying to pass a value as an argument to a function that does not allow
|
|
5
|
+
a range that includes the value.
|
|
6
|
+
|
|
7
|
+
The `Napi::RangeError` class inherits its behaviors from the `Napi::Error` class (for
|
|
8
|
+
more info see: [`Napi::Error`](error.md)).
|
|
9
|
+
|
|
10
|
+
For more details about error handling refer to the section titled [Error handling](error_handling.md).
|
|
11
|
+
|
|
12
|
+
## Methods
|
|
13
|
+
|
|
14
|
+
### New
|
|
15
|
+
|
|
16
|
+
Creates a new instance of a `Napi::RangeError` object.
|
|
17
|
+
|
|
18
|
+
```cpp
|
|
19
|
+
Napi::RangeError::New(Napi::Env env, const char* message);
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
- `[in] Env`: The environment in which to construct the `Napi::RangeError` object.
|
|
23
|
+
- `[in] message`: Null-terminated string to be used as the message for the `Napi::RangeError`.
|
|
24
|
+
|
|
25
|
+
Returns an instance of a `Napi::RangeError` object.
|
|
26
|
+
|
|
27
|
+
### New
|
|
28
|
+
|
|
29
|
+
Creates a new instance of a `Napi::RangeError` object.
|
|
30
|
+
|
|
31
|
+
```cpp
|
|
32
|
+
Napi::RangeError::New(Napi::Env env, const std::string& message);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
- `[in] Env`: The environment in which to construct the `Napi::RangeError` object.
|
|
36
|
+
- `[in] message`: Reference string to be used as the message for the `Napi::RangeError`.
|
|
37
|
+
|
|
38
|
+
Returns an instance of a `Napi::RangeError` object.
|
|
39
|
+
|
|
40
|
+
### Constructor
|
|
41
|
+
|
|
42
|
+
Creates a new empty instance of a `Napi::RangeError`.
|
|
43
|
+
|
|
44
|
+
```cpp
|
|
45
|
+
Napi::RangeError::RangeError();
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Constructor
|
|
49
|
+
|
|
50
|
+
Initializes a `Napi::RangeError` instance from an existing Javascript error object.
|
|
51
|
+
|
|
52
|
+
```cpp
|
|
53
|
+
Napi::RangeError::RangeError(napi_env env, napi_value value);
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
- `[in] Env`: The environment in which to construct the `Napi::RangeError` object.
|
|
57
|
+
- `[in] value`: The `Napi::Error` reference to wrap.
|
|
58
|
+
|
|
59
|
+
Returns an instance of a `Napi::RangeError` object.
|
|
@@ -1,113 +1,113 @@
|
|
|
1
|
-
# Reference (template)
|
|
2
|
-
|
|
3
|
-
Holds a counted reference to a [`Napi::Value`](value.md) object; initially a weak reference unless otherwise specified, may be changed to/from a strong reference by adjusting the refcount.
|
|
4
|
-
|
|
5
|
-
The referenced `Napi::Value` is not immediately destroyed when the reference count is zero; it is merely then eligible for garbage-collection if there are no other references to the `Napi::Value`.
|
|
6
|
-
|
|
7
|
-
`Napi::Reference` objects allocated in static space, such as a global static instance, must call the `SuppressDestruct` method to prevent its destructor, running at program shutdown time, from attempting to reset the reference when the environment is no longer valid. Avoid using this if at all possible.
|
|
8
|
-
|
|
9
|
-
The following classes inherit, either directly or indirectly, from `Napi::Reference`:
|
|
10
|
-
|
|
11
|
-
* [`Napi::ObjectWrap`](object_wrap.md)
|
|
12
|
-
* [`Napi::ObjectReference`](object_reference.md)
|
|
13
|
-
* [`Napi::FunctionReference`](function_reference.md)
|
|
14
|
-
|
|
15
|
-
## Methods
|
|
16
|
-
|
|
17
|
-
### Factory Method
|
|
18
|
-
|
|
19
|
-
```cpp
|
|
20
|
-
static Napi::Reference<T> Napi::Reference::New(const T& value, uint32_t initialRefcount = 0);
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
* `[in] value`: The value which is to be referenced.
|
|
24
|
-
|
|
25
|
-
* `[in] initialRefcount`: The initial reference count.
|
|
26
|
-
|
|
27
|
-
### Empty Constructor
|
|
28
|
-
|
|
29
|
-
```cpp
|
|
30
|
-
Napi::Reference::Reference();
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Creates a new _empty_ `Napi::Reference` instance.
|
|
34
|
-
|
|
35
|
-
### Constructor
|
|
36
|
-
|
|
37
|
-
```cpp
|
|
38
|
-
Napi::Reference::Reference(napi_env env, napi_value value);
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
* `[in] env`: The `napi_env` environment in which to construct the `Napi::Reference` object.
|
|
42
|
-
|
|
43
|
-
* `[in] value`: The Node-API primitive value to be held by the `Napi::Reference`.
|
|
44
|
-
|
|
45
|
-
### Env
|
|
46
|
-
|
|
47
|
-
```cpp
|
|
48
|
-
Napi::Env Napi::Reference::Env() const;
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Returns the `Napi::Env` value in which the `Napi::Reference` was instantiated.
|
|
52
|
-
|
|
53
|
-
### IsEmpty
|
|
54
|
-
|
|
55
|
-
```cpp
|
|
56
|
-
bool Napi::Reference::IsEmpty() const;
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
Determines whether the value held by the `Napi::Reference` is empty.
|
|
60
|
-
|
|
61
|
-
### Value
|
|
62
|
-
|
|
63
|
-
```cpp
|
|
64
|
-
T Napi::Reference::Value() const;
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
Returns the value held by the `Napi::Reference`.
|
|
68
|
-
|
|
69
|
-
### Ref
|
|
70
|
-
|
|
71
|
-
```cpp
|
|
72
|
-
uint32_t Napi::Reference::Ref();
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
Increments the reference count for the `Napi::Reference` and returns the resulting reference count. Throws an error if the increment fails.
|
|
76
|
-
|
|
77
|
-
### Unref
|
|
78
|
-
|
|
79
|
-
```cpp
|
|
80
|
-
uint32_t Napi::Reference::Unref();
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
Decrements the reference count for the `Napi::Reference` and returns the resulting reference count. Throws an error if the decrement fails.
|
|
84
|
-
|
|
85
|
-
### Reset (Empty)
|
|
86
|
-
|
|
87
|
-
```cpp
|
|
88
|
-
void Napi::Reference::Reset();
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
Sets the value held by the `Napi::Reference` to be empty.
|
|
92
|
-
|
|
93
|
-
### Reset
|
|
94
|
-
|
|
95
|
-
```cpp
|
|
96
|
-
void Napi::Reference::Reset(const T& value, uint32_t refcount = 0);
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
* `[in] value`: The value which is to be referenced.
|
|
100
|
-
|
|
101
|
-
* `[in] initialRefcount`: The initial reference count.
|
|
102
|
-
|
|
103
|
-
Sets the value held by the `Napi::Reference`.
|
|
104
|
-
|
|
105
|
-
### SuppressDestruct
|
|
106
|
-
|
|
107
|
-
```cpp
|
|
108
|
-
void Napi::Reference::SuppressDestruct();
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
Call this method on a `Napi::Reference` that is declared as static data to prevent its destructor, running at program shutdown time, from attempting to reset the reference when the environment is no longer valid.
|
|
112
|
-
|
|
113
|
-
Avoid using this if at all possible. If you do need to use static data, **MAKE SURE** to warn your users that your addon is **NOT** threadsafe.
|
|
1
|
+
# Reference (template)
|
|
2
|
+
|
|
3
|
+
Holds a counted reference to a [`Napi::Value`](value.md) object; initially a weak reference unless otherwise specified, may be changed to/from a strong reference by adjusting the refcount.
|
|
4
|
+
|
|
5
|
+
The referenced `Napi::Value` is not immediately destroyed when the reference count is zero; it is merely then eligible for garbage-collection if there are no other references to the `Napi::Value`.
|
|
6
|
+
|
|
7
|
+
`Napi::Reference` objects allocated in static space, such as a global static instance, must call the `SuppressDestruct` method to prevent its destructor, running at program shutdown time, from attempting to reset the reference when the environment is no longer valid. Avoid using this if at all possible.
|
|
8
|
+
|
|
9
|
+
The following classes inherit, either directly or indirectly, from `Napi::Reference`:
|
|
10
|
+
|
|
11
|
+
* [`Napi::ObjectWrap`](object_wrap.md)
|
|
12
|
+
* [`Napi::ObjectReference`](object_reference.md)
|
|
13
|
+
* [`Napi::FunctionReference`](function_reference.md)
|
|
14
|
+
|
|
15
|
+
## Methods
|
|
16
|
+
|
|
17
|
+
### Factory Method
|
|
18
|
+
|
|
19
|
+
```cpp
|
|
20
|
+
static Napi::Reference<T> Napi::Reference::New(const T& value, uint32_t initialRefcount = 0);
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
* `[in] value`: The value which is to be referenced.
|
|
24
|
+
|
|
25
|
+
* `[in] initialRefcount`: The initial reference count.
|
|
26
|
+
|
|
27
|
+
### Empty Constructor
|
|
28
|
+
|
|
29
|
+
```cpp
|
|
30
|
+
Napi::Reference::Reference();
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Creates a new _empty_ `Napi::Reference` instance.
|
|
34
|
+
|
|
35
|
+
### Constructor
|
|
36
|
+
|
|
37
|
+
```cpp
|
|
38
|
+
Napi::Reference::Reference(napi_env env, napi_value value);
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
* `[in] env`: The `napi_env` environment in which to construct the `Napi::Reference` object.
|
|
42
|
+
|
|
43
|
+
* `[in] value`: The Node-API primitive value to be held by the `Napi::Reference`.
|
|
44
|
+
|
|
45
|
+
### Env
|
|
46
|
+
|
|
47
|
+
```cpp
|
|
48
|
+
Napi::Env Napi::Reference::Env() const;
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Returns the `Napi::Env` value in which the `Napi::Reference` was instantiated.
|
|
52
|
+
|
|
53
|
+
### IsEmpty
|
|
54
|
+
|
|
55
|
+
```cpp
|
|
56
|
+
bool Napi::Reference::IsEmpty() const;
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Determines whether the value held by the `Napi::Reference` is empty.
|
|
60
|
+
|
|
61
|
+
### Value
|
|
62
|
+
|
|
63
|
+
```cpp
|
|
64
|
+
T Napi::Reference::Value() const;
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Returns the value held by the `Napi::Reference`.
|
|
68
|
+
|
|
69
|
+
### Ref
|
|
70
|
+
|
|
71
|
+
```cpp
|
|
72
|
+
uint32_t Napi::Reference::Ref();
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Increments the reference count for the `Napi::Reference` and returns the resulting reference count. Throws an error if the increment fails.
|
|
76
|
+
|
|
77
|
+
### Unref
|
|
78
|
+
|
|
79
|
+
```cpp
|
|
80
|
+
uint32_t Napi::Reference::Unref();
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Decrements the reference count for the `Napi::Reference` and returns the resulting reference count. Throws an error if the decrement fails.
|
|
84
|
+
|
|
85
|
+
### Reset (Empty)
|
|
86
|
+
|
|
87
|
+
```cpp
|
|
88
|
+
void Napi::Reference::Reset();
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Sets the value held by the `Napi::Reference` to be empty.
|
|
92
|
+
|
|
93
|
+
### Reset
|
|
94
|
+
|
|
95
|
+
```cpp
|
|
96
|
+
void Napi::Reference::Reset(const T& value, uint32_t refcount = 0);
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
* `[in] value`: The value which is to be referenced.
|
|
100
|
+
|
|
101
|
+
* `[in] initialRefcount`: The initial reference count.
|
|
102
|
+
|
|
103
|
+
Sets the value held by the `Napi::Reference`.
|
|
104
|
+
|
|
105
|
+
### SuppressDestruct
|
|
106
|
+
|
|
107
|
+
```cpp
|
|
108
|
+
void Napi::Reference::SuppressDestruct();
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Call this method on a `Napi::Reference` that is declared as static data to prevent its destructor, running at program shutdown time, from attempting to reset the reference when the environment is no longer valid.
|
|
112
|
+
|
|
113
|
+
Avoid using this if at all possible. If you do need to use static data, **MAKE SURE** to warn your users that your addon is **NOT** threadsafe.
|
|
@@ -1,110 +1,110 @@
|
|
|
1
|
-
# Setup
|
|
2
|
-
|
|
3
|
-
## Prerequisites
|
|
4
|
-
|
|
5
|
-
Before starting to use **Node-API** you need to assure you have the following
|
|
6
|
-
prerequisites:
|
|
7
|
-
|
|
8
|
-
* **Node.JS** see: [Installing Node.js](https://nodejs.org/)
|
|
9
|
-
|
|
10
|
-
* **Node.js native addon build tool**
|
|
11
|
-
|
|
12
|
-
- **[node-gyp](node-gyp.md)**
|
|
13
|
-
|
|
14
|
-
## Installation and usage
|
|
15
|
-
|
|
16
|
-
To use **Node-API** in a native module:
|
|
17
|
-
|
|
18
|
-
1. Add a dependency on this package to `package.json`:
|
|
19
|
-
|
|
20
|
-
```json
|
|
21
|
-
"dependencies": {
|
|
22
|
-
"node-addon-api": "*",
|
|
23
|
-
}
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
2. Reference this package's include directory and gyp file in `binding.gyp`:
|
|
27
|
-
|
|
28
|
-
```gyp
|
|
29
|
-
'include_dirs': ["<!(node -p \"require('node-addon-api').include_dir\")"],
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
3. Decide whether the package will enable C++ exceptions in the Node-API wrapper.
|
|
33
|
-
The base ABI-stable C APIs do not throw or handle C++ exceptions, but the
|
|
34
|
-
Node-API C++ wrapper classes may _optionally_
|
|
35
|
-
[integrate C++ and JavaScript exception-handling
|
|
36
|
-
](https://github.com/nodejs/node-addon-api/blob/HEAD/doc/error_handling.md).
|
|
37
|
-
To enable that capability, C++ exceptions must be enabled in `binding.gyp`:
|
|
38
|
-
|
|
39
|
-
```gyp
|
|
40
|
-
'cflags!': [ '-fno-exceptions' ],
|
|
41
|
-
'cflags_cc!': [ '-fno-exceptions' ],
|
|
42
|
-
'conditions': [
|
|
43
|
-
["OS=='win'", {
|
|
44
|
-
"defines": [
|
|
45
|
-
"_HAS_EXCEPTIONS=1"
|
|
46
|
-
],
|
|
47
|
-
"msvs_settings": {
|
|
48
|
-
"VCCLCompilerTool": {
|
|
49
|
-
"ExceptionHandling": 1
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
}],
|
|
53
|
-
["OS=='mac'", {
|
|
54
|
-
'xcode_settings': {
|
|
55
|
-
'GCC_ENABLE_CPP_EXCEPTIONS': 'YES',
|
|
56
|
-
'CLANG_CXX_LIBRARY': 'libc++',
|
|
57
|
-
'MACOSX_DEPLOYMENT_TARGET': '10.7',
|
|
58
|
-
},
|
|
59
|
-
}],
|
|
60
|
-
],
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Alternatively, disable use of C++ exceptions in Node-API:
|
|
64
|
-
|
|
65
|
-
```gyp
|
|
66
|
-
'defines': [ 'NAPI_DISABLE_CPP_EXCEPTIONS' ],
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
If you decide to use node-addon-api without C++ exceptions enabled, please
|
|
70
|
-
consider enabling node-addon-api safe API type guards to ensure the proper
|
|
71
|
-
exception handling pattern:
|
|
72
|
-
|
|
73
|
-
```gyp
|
|
74
|
-
'defines': [ 'NODE_ADDON_API_ENABLE_MAYBE' ],
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
4. If you would like your native addon to support OSX, please also add the
|
|
78
|
-
following settings in the `binding.gyp` file:
|
|
79
|
-
|
|
80
|
-
```gyp
|
|
81
|
-
'conditions': [
|
|
82
|
-
['OS=="mac"', {
|
|
83
|
-
'cflags+': ['-fvisibility=hidden'],
|
|
84
|
-
'xcode_settings': {
|
|
85
|
-
'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES', # -fvisibility=hidden
|
|
86
|
-
}
|
|
87
|
-
}]
|
|
88
|
-
]
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
5. Include `napi.h` in the native module code.
|
|
92
|
-
To ensure only ABI-stable APIs are used, DO NOT include
|
|
93
|
-
`node.h`, `nan.h`, or `v8.h`.
|
|
94
|
-
|
|
95
|
-
```C++
|
|
96
|
-
#include "napi.h"
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
At build time, the Node-API back-compat library code will be used only when the
|
|
100
|
-
targeted node version *does not* have Node-API built-in.
|
|
101
|
-
|
|
102
|
-
The preprocessor directive `NODE_ADDON_API_DISABLE_DEPRECATED` can be defined at
|
|
103
|
-
compile time before including `napi.h` to skip the definition of deprecated APIs.
|
|
104
|
-
|
|
105
|
-
By default, throwing an exception on a terminating environment (eg. worker
|
|
106
|
-
threads) will cause a fatal exception, terminating the Node process. This is to
|
|
107
|
-
provide feedback to the user of the runtime error, as it is impossible to pass
|
|
108
|
-
the error to JavaScript when the environment is terminating. In order to bypass
|
|
109
|
-
this behavior such that the Node process will not terminate, define the
|
|
110
|
-
preprocessor directive `NODE_API_SWALLOW_UNTHROWABLE_EXCEPTIONS`.
|
|
1
|
+
# Setup
|
|
2
|
+
|
|
3
|
+
## Prerequisites
|
|
4
|
+
|
|
5
|
+
Before starting to use **Node-API** you need to assure you have the following
|
|
6
|
+
prerequisites:
|
|
7
|
+
|
|
8
|
+
* **Node.JS** see: [Installing Node.js](https://nodejs.org/)
|
|
9
|
+
|
|
10
|
+
* **Node.js native addon build tool**
|
|
11
|
+
|
|
12
|
+
- **[node-gyp](node-gyp.md)**
|
|
13
|
+
|
|
14
|
+
## Installation and usage
|
|
15
|
+
|
|
16
|
+
To use **Node-API** in a native module:
|
|
17
|
+
|
|
18
|
+
1. Add a dependency on this package to `package.json`:
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"node-addon-api": "*",
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
2. Reference this package's include directory and gyp file in `binding.gyp`:
|
|
27
|
+
|
|
28
|
+
```gyp
|
|
29
|
+
'include_dirs': ["<!(node -p \"require('node-addon-api').include_dir\")"],
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
3. Decide whether the package will enable C++ exceptions in the Node-API wrapper.
|
|
33
|
+
The base ABI-stable C APIs do not throw or handle C++ exceptions, but the
|
|
34
|
+
Node-API C++ wrapper classes may _optionally_
|
|
35
|
+
[integrate C++ and JavaScript exception-handling
|
|
36
|
+
](https://github.com/nodejs/node-addon-api/blob/HEAD/doc/error_handling.md).
|
|
37
|
+
To enable that capability, C++ exceptions must be enabled in `binding.gyp`:
|
|
38
|
+
|
|
39
|
+
```gyp
|
|
40
|
+
'cflags!': [ '-fno-exceptions' ],
|
|
41
|
+
'cflags_cc!': [ '-fno-exceptions' ],
|
|
42
|
+
'conditions': [
|
|
43
|
+
["OS=='win'", {
|
|
44
|
+
"defines": [
|
|
45
|
+
"_HAS_EXCEPTIONS=1"
|
|
46
|
+
],
|
|
47
|
+
"msvs_settings": {
|
|
48
|
+
"VCCLCompilerTool": {
|
|
49
|
+
"ExceptionHandling": 1
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
}],
|
|
53
|
+
["OS=='mac'", {
|
|
54
|
+
'xcode_settings': {
|
|
55
|
+
'GCC_ENABLE_CPP_EXCEPTIONS': 'YES',
|
|
56
|
+
'CLANG_CXX_LIBRARY': 'libc++',
|
|
57
|
+
'MACOSX_DEPLOYMENT_TARGET': '10.7',
|
|
58
|
+
},
|
|
59
|
+
}],
|
|
60
|
+
],
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Alternatively, disable use of C++ exceptions in Node-API:
|
|
64
|
+
|
|
65
|
+
```gyp
|
|
66
|
+
'defines': [ 'NAPI_DISABLE_CPP_EXCEPTIONS' ],
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
If you decide to use node-addon-api without C++ exceptions enabled, please
|
|
70
|
+
consider enabling node-addon-api safe API type guards to ensure the proper
|
|
71
|
+
exception handling pattern:
|
|
72
|
+
|
|
73
|
+
```gyp
|
|
74
|
+
'defines': [ 'NODE_ADDON_API_ENABLE_MAYBE' ],
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
4. If you would like your native addon to support OSX, please also add the
|
|
78
|
+
following settings in the `binding.gyp` file:
|
|
79
|
+
|
|
80
|
+
```gyp
|
|
81
|
+
'conditions': [
|
|
82
|
+
['OS=="mac"', {
|
|
83
|
+
'cflags+': ['-fvisibility=hidden'],
|
|
84
|
+
'xcode_settings': {
|
|
85
|
+
'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES', # -fvisibility=hidden
|
|
86
|
+
}
|
|
87
|
+
}]
|
|
88
|
+
]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
5. Include `napi.h` in the native module code.
|
|
92
|
+
To ensure only ABI-stable APIs are used, DO NOT include
|
|
93
|
+
`node.h`, `nan.h`, or `v8.h`.
|
|
94
|
+
|
|
95
|
+
```C++
|
|
96
|
+
#include "napi.h"
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
At build time, the Node-API back-compat library code will be used only when the
|
|
100
|
+
targeted node version *does not* have Node-API built-in.
|
|
101
|
+
|
|
102
|
+
The preprocessor directive `NODE_ADDON_API_DISABLE_DEPRECATED` can be defined at
|
|
103
|
+
compile time before including `napi.h` to skip the definition of deprecated APIs.
|
|
104
|
+
|
|
105
|
+
By default, throwing an exception on a terminating environment (eg. worker
|
|
106
|
+
threads) will cause a fatal exception, terminating the Node process. This is to
|
|
107
|
+
provide feedback to the user of the runtime error, as it is impossible to pass
|
|
108
|
+
the error to JavaScript when the environment is terminating. In order to bypass
|
|
109
|
+
this behavior such that the Node process will not terminate, define the
|
|
110
|
+
preprocessor directive `NODE_API_SWALLOW_UNTHROWABLE_EXCEPTIONS`.
|