koffi 2.16.0-beta.2 → 2.16.1
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/CHANGELOG.md +66 -0
- package/build/koffi/darwin_arm64/koffi.node +0 -0
- package/build/koffi/darwin_x64/koffi.node +0 -0
- package/build/koffi/freebsd_arm64/koffi.node +0 -0
- package/build/koffi/freebsd_ia32/koffi.node +0 -0
- package/build/koffi/freebsd_x64/koffi.node +0 -0
- package/build/koffi/linux_arm64/koffi.node +0 -0
- package/build/koffi/linux_armhf/koffi.node +0 -0
- package/build/koffi/linux_ia32/koffi.node +0 -0
- package/build/koffi/linux_loong64/koffi.node +0 -0
- package/build/koffi/linux_riscv64d/koffi.node +0 -0
- package/build/koffi/linux_x64/koffi.node +0 -0
- package/build/koffi/musl_arm64/koffi.node +0 -0
- package/build/koffi/musl_x64/koffi.node +0 -0
- package/build/koffi/openbsd_ia32/koffi.node +0 -0
- package/build/koffi/openbsd_x64/koffi.node +0 -0
- package/build/koffi/win32_arm64/koffi.exp +0 -0
- package/build/koffi/win32_arm64/koffi.lib +0 -0
- package/build/koffi/win32_arm64/koffi.node +0 -0
- package/build/koffi/win32_ia32/koffi.exp +0 -0
- package/build/koffi/win32_ia32/koffi.lib +0 -0
- package/build/koffi/win32_ia32/koffi.node +0 -0
- package/build/koffi/win32_x64/koffi.exp +0 -0
- package/build/koffi/win32_x64/koffi.lib +0 -0
- package/build/koffi/win32_x64/koffi.node +0 -0
- package/index.d.ts +9 -11
- package/index.js +6 -9
- package/indirect.js +6 -9
- package/lib/native/base/base.cc +1 -6
- package/package.json +3 -3
- package/src/cnoke/assets/FindCNoke.cmake +27 -16
- package/src/cnoke/assets/toolchains.json +126 -0
- package/src/cnoke/cnoke.js +27 -33
- package/src/cnoke/src/builder.js +124 -63
- package/src/cnoke/src/tools.js +1 -5
- package/src/koffi/CMakeLists.txt +32 -21
- package/src/koffi/src/{abi/arm32.cc → abi_arm32.cc} +235 -246
- package/src/koffi/src/{abi/arm32_asm.S → abi_arm32_asm.S} +19 -15
- package/src/koffi/src/{abi/arm64.cc → abi_arm64.cc} +253 -300
- package/src/koffi/src/{abi/arm64_asm.S → abi_arm64_asm.S} +16 -10
- package/src/koffi/src/{abi/arm64_asm.asm → abi_arm64_asm.asm} +17 -10
- package/src/koffi/src/{abi/loong64_asm.S → abi_loong64_asm.S} +16 -10
- package/src/koffi/src/{abi/riscv64.cc → abi_riscv64.cc} +233 -244
- package/src/koffi/src/{abi/riscv64_asm.S → abi_riscv64_asm.S} +16 -10
- package/src/koffi/src/{abi/x64_sysv.cc → abi_x64_sysv.cc} +208 -220
- package/src/koffi/src/{abi/x64_sysv_asm.S → abi_x64_sysv_asm.S} +17 -10
- package/src/koffi/src/{abi/x64_win.cc → abi_x64_win.cc} +175 -230
- package/src/koffi/src/{abi/x64_win_asm.S → abi_x64_win_asm.S} +49 -27
- package/src/koffi/src/{abi/x64_win_asm.asm → abi_x64_win_asm.asm} +54 -27
- package/src/koffi/src/{abi/x86.cc → abi_x86.cc} +187 -252
- package/src/koffi/src/{abi/x86_asm.S → abi_x86_asm.S} +38 -21
- package/src/koffi/src/{abi/x86_asm.asm → abi_x86_asm.asm} +33 -16
- package/src/koffi/src/call.cc +475 -290
- package/src/koffi/src/call.hh +15 -18
- package/src/koffi/src/ffi.cc +195 -184
- package/src/koffi/src/ffi.hh +60 -16
- package/src/koffi/src/init.js +1 -0
- package/src/koffi/src/util.cc +113 -159
- package/src/koffi/src/util.hh +23 -74
- package/src/koffi/src/win32.cc +13 -0
- package/src/koffi/src/win32.hh +7 -0
- package/src/koffi/tools/write_trampolines.js +77 -0
- package/doc/README.md +0 -27
- package/doc/assets.ini +0 -24
- package/doc/build.sh +0 -9
- package/doc/develop.sh +0 -15
- package/doc/pages/404.md +0 -17
- package/doc/pages.ini +0 -86
- package/doc/static/highlight.js +0 -8
- package/doc/static/koffi.css +0 -11
- package/doc/static/koffi.png +0 -0
- package/doc/static/logo.webp +0 -0
- package/doc/static/perf_linux.png +0 -0
- package/doc/static/perf_windows.png +0 -0
- package/doc/static/print.css +0 -10
- package/doc/templates/code.html +0 -48
- package/doc/templates/page.html +0 -47
- package/src/koffi/cmake/raylib.cmake +0 -85
- package/src/koffi/cmake/sqlite3.cmake +0 -9
- package/src/koffi/examples/electron-builder/README.md +0 -11
- package/src/koffi/examples/electron-builder/package.json +0 -21
- package/src/koffi/examples/electron-builder/src/app.js +0 -20
- package/src/koffi/examples/electron-builder/src/index.html +0 -143
- package/src/koffi/examples/electron-builder/src/preload.js +0 -5
- package/src/koffi/examples/electron-forge/README.md +0 -25
- package/src/koffi/examples/electron-forge/forge.config.js +0 -63
- package/src/koffi/examples/electron-forge/package.json +0 -39
- package/src/koffi/examples/electron-forge/src/index.css +0 -7
- package/src/koffi/examples/electron-forge/src/index.html +0 -143
- package/src/koffi/examples/electron-forge/src/main.js +0 -52
- package/src/koffi/examples/electron-forge/src/preload.js +0 -5
- package/src/koffi/examples/electron-forge/src/renderer.js +0 -31
- package/src/koffi/examples/electron-forge/webpack.main.config.js +0 -11
- package/src/koffi/examples/electron-forge/webpack.renderer.config.js +0 -13
- package/src/koffi/examples/electron-forge/webpack.rules.js +0 -35
- package/src/koffi/examples/node-esbuild/README.md +0 -19
- package/src/koffi/examples/node-esbuild/index.js +0 -2
- package/src/koffi/examples/node-esbuild/package.json +0 -16
- package/src/koffi/examples/nwjs/README.md +0 -20
- package/src/koffi/examples/nwjs/package.json +0 -11
- package/src/koffi/examples/nwjs/src/index.html +0 -145
- package/src/koffi/examples/nwjs/src/package.json +0 -10
- package/src/koffi/examples/yao-pkg/README.md +0 -17
- package/src/koffi/examples/yao-pkg/index.js +0 -2
- package/src/koffi/examples/yao-pkg/package.json +0 -22
- package/src/koffi/src/primitives.inc +0 -39
- package/src/koffi/src/trampolines/armasm.inc +0 -32771
- package/src/koffi/src/trampolines/gnu.inc +0 -24577
- package/src/koffi/src/trampolines/masm32.inc +0 -32769
- package/src/koffi/src/trampolines/masm64.inc +0 -32769
- package/src/koffi/src/trampolines/prototypes.inc +0 -16388
- package/vendor/node-addon-api/CHANGELOG.md +0 -1272
- package/vendor/node-addon-api/CODE_OF_CONDUCT.md +0 -4
- package/vendor/node-addon-api/CONTRIBUTING.md +0 -203
- package/vendor/node-addon-api/appveyor.yml +0 -37
- package/vendor/node-addon-api/benchmark/README.md +0 -47
- package/vendor/node-addon-api/benchmark/binding.gyp +0 -25
- package/vendor/node-addon-api/benchmark/function_args.cc +0 -250
- package/vendor/node-addon-api/benchmark/function_args.js +0 -60
- package/vendor/node-addon-api/benchmark/index.js +0 -34
- package/vendor/node-addon-api/benchmark/property_descriptor.cc +0 -84
- package/vendor/node-addon-api/benchmark/property_descriptor.js +0 -38
- package/vendor/node-addon-api/common.gypi +0 -21
- package/vendor/node-addon-api/doc/README.md +0 -145
- package/vendor/node-addon-api/doc/addon.md +0 -163
- package/vendor/node-addon-api/doc/array.md +0 -81
- package/vendor/node-addon-api/doc/array_buffer.md +0 -165
- package/vendor/node-addon-api/doc/async_context.md +0 -86
- package/vendor/node-addon-api/doc/async_operations.md +0 -31
- package/vendor/node-addon-api/doc/async_worker.md +0 -428
- package/vendor/node-addon-api/doc/async_worker_variants.md +0 -578
- package/vendor/node-addon-api/doc/basic_env.md +0 -200
- package/vendor/node-addon-api/doc/bigint.md +0 -97
- package/vendor/node-addon-api/doc/boolean.md +0 -68
- package/vendor/node-addon-api/doc/buffer.md +0 -245
- package/vendor/node-addon-api/doc/callback_scope.md +0 -54
- package/vendor/node-addon-api/doc/callbackinfo.md +0 -97
- package/vendor/node-addon-api/doc/checker-tool.md +0 -32
- package/vendor/node-addon-api/doc/class_property_descriptor.md +0 -123
- package/vendor/node-addon-api/doc/cmake-js.md +0 -87
- package/vendor/node-addon-api/doc/contributing/creating_a_release.md +0 -95
- package/vendor/node-addon-api/doc/conversion-tool.md +0 -28
- package/vendor/node-addon-api/doc/dataview.md +0 -248
- package/vendor/node-addon-api/doc/date.md +0 -68
- package/vendor/node-addon-api/doc/env.md +0 -87
- package/vendor/node-addon-api/doc/error.md +0 -120
- package/vendor/node-addon-api/doc/error_handling.md +0 -266
- package/vendor/node-addon-api/doc/escapable_handle_scope.md +0 -80
- package/vendor/node-addon-api/doc/external.md +0 -79
- package/vendor/node-addon-api/doc/external_buffer.md +0 -18
- package/vendor/node-addon-api/doc/finalization.md +0 -153
- package/vendor/node-addon-api/doc/function.md +0 -402
- package/vendor/node-addon-api/doc/function_reference.md +0 -238
- package/vendor/node-addon-api/doc/generator.md +0 -13
- package/vendor/node-addon-api/doc/handle_scope.md +0 -77
- package/vendor/node-addon-api/doc/hierarchy.md +0 -95
- package/vendor/node-addon-api/doc/instance_wrap.md +0 -408
- package/vendor/node-addon-api/doc/maybe.md +0 -76
- package/vendor/node-addon-api/doc/memory_management.md +0 -27
- package/vendor/node-addon-api/doc/name.md +0 -29
- package/vendor/node-addon-api/doc/node-gyp.md +0 -82
- package/vendor/node-addon-api/doc/number.md +0 -163
- package/vendor/node-addon-api/doc/object.md +0 -411
- package/vendor/node-addon-api/doc/object_lifetime_management.md +0 -83
- package/vendor/node-addon-api/doc/object_reference.md +0 -117
- package/vendor/node-addon-api/doc/object_wrap.md +0 -604
- package/vendor/node-addon-api/doc/prebuild_tools.md +0 -16
- package/vendor/node-addon-api/doc/promises.md +0 -130
- package/vendor/node-addon-api/doc/property_descriptor.md +0 -286
- package/vendor/node-addon-api/doc/propertylvalue.md +0 -50
- package/vendor/node-addon-api/doc/range_error.md +0 -59
- package/vendor/node-addon-api/doc/reference.md +0 -113
- package/vendor/node-addon-api/doc/setup.md +0 -115
- package/vendor/node-addon-api/doc/string.md +0 -93
- package/vendor/node-addon-api/doc/symbol.md +0 -61
- package/vendor/node-addon-api/doc/syntax_error.md +0 -66
- package/vendor/node-addon-api/doc/threadsafe.md +0 -121
- package/vendor/node-addon-api/doc/threadsafe_function.md +0 -290
- package/vendor/node-addon-api/doc/type_error.md +0 -59
- package/vendor/node-addon-api/doc/type_taggable.md +0 -40
- package/vendor/node-addon-api/doc/typed_array.md +0 -78
- package/vendor/node-addon-api/doc/typed_array_of.md +0 -137
- package/vendor/node-addon-api/doc/typed_threadsafe_function.md +0 -306
- package/vendor/node-addon-api/doc/value.md +0 -368
- package/vendor/node-addon-api/doc/version_management.md +0 -43
- package/vendor/node-addon-api/eslint.config.js +0 -5
- package/vendor/node-addon-api/except.gypi +0 -25
- package/vendor/node-addon-api/index.js +0 -14
- package/vendor/node-addon-api/node_addon_api.gyp +0 -42
- package/vendor/node-addon-api/node_api.gyp +0 -9
- package/vendor/node-addon-api/noexcept.gypi +0 -26
- package/vendor/node-addon-api/nothing.c +0 -0
- package/vendor/node-addon-api/package-support.json +0 -21
- package/vendor/node-addon-api/package.json +0 -480
- package/vendor/node-addon-api/release-please-config.json +0 -15
- package/vendor/node-addon-api/test/README.md +0 -91
- package/vendor/node-addon-api/test/addon.cc +0 -44
- package/vendor/node-addon-api/test/addon.js +0 -7
- package/vendor/node-addon-api/test/addon_build/index.js +0 -49
- package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +0 -18
- package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +0 -63
- package/vendor/node-addon-api/test/addon_build/tpl/index.js +0 -9
- package/vendor/node-addon-api/test/addon_build/tpl/package.json +0 -11
- package/vendor/node-addon-api/test/addon_data.cc +0 -98
- package/vendor/node-addon-api/test/addon_data.js +0 -24
- package/vendor/node-addon-api/test/array_buffer.cc +0 -243
- package/vendor/node-addon-api/test/array_buffer.js +0 -70
- package/vendor/node-addon-api/test/async_context.cc +0 -36
- package/vendor/node-addon-api/test/async_context.js +0 -122
- package/vendor/node-addon-api/test/async_progress_queue_worker.cc +0 -248
- package/vendor/node-addon-api/test/async_progress_queue_worker.js +0 -180
- package/vendor/node-addon-api/test/async_progress_worker.cc +0 -357
- package/vendor/node-addon-api/test/async_progress_worker.js +0 -200
- package/vendor/node-addon-api/test/async_worker.cc +0 -341
- package/vendor/node-addon-api/test/async_worker.js +0 -264
- package/vendor/node-addon-api/test/async_worker_nocallback.js +0 -19
- package/vendor/node-addon-api/test/async_worker_persistent.cc +0 -63
- package/vendor/node-addon-api/test/async_worker_persistent.js +0 -24
- package/vendor/node-addon-api/test/basic_types/array.cc +0 -40
- package/vendor/node-addon-api/test/basic_types/array.js +0 -34
- package/vendor/node-addon-api/test/basic_types/boolean.cc +0 -40
- package/vendor/node-addon-api/test/basic_types/boolean.js +0 -34
- package/vendor/node-addon-api/test/basic_types/number.cc +0 -105
- package/vendor/node-addon-api/test/basic_types/number.js +0 -115
- package/vendor/node-addon-api/test/basic_types/value.cc +0 -177
- package/vendor/node-addon-api/test/basic_types/value.js +0 -173
- package/vendor/node-addon-api/test/bigint.cc +0 -91
- package/vendor/node-addon-api/test/bigint.js +0 -53
- package/vendor/node-addon-api/test/binding-swallowexcept.cc +0 -12
- package/vendor/node-addon-api/test/binding.cc +0 -200
- package/vendor/node-addon-api/test/binding.gyp +0 -160
- package/vendor/node-addon-api/test/buffer.cc +0 -185
- package/vendor/node-addon-api/test/buffer.h +0 -26
- package/vendor/node-addon-api/test/buffer.js +0 -150
- package/vendor/node-addon-api/test/buffer_new_or_copy-inl.h +0 -68
- package/vendor/node-addon-api/test/buffer_no_external.cc +0 -24
- package/vendor/node-addon-api/test/callbackInfo.cc +0 -27
- package/vendor/node-addon-api/test/callbackInfo.js +0 -9
- package/vendor/node-addon-api/test/callbackscope.cc +0 -39
- package/vendor/node-addon-api/test/callbackscope.js +0 -49
- package/vendor/node-addon-api/test/child_processes/addon.js +0 -11
- package/vendor/node-addon-api/test/child_processes/addon_data.js +0 -24
- package/vendor/node-addon-api/test/child_processes/objectwrap_function.js +0 -22
- package/vendor/node-addon-api/test/child_processes/threadsafe_function_exception.js +0 -33
- package/vendor/node-addon-api/test/child_processes/typed_threadsafe_function_exception.js +0 -19
- package/vendor/node-addon-api/test/common/index.js +0 -246
- package/vendor/node-addon-api/test/common/test_helper.h +0 -71
- package/vendor/node-addon-api/test/dataview/dataview.cc +0 -48
- package/vendor/node-addon-api/test/dataview/dataview.js +0 -35
- package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +0 -115
- package/vendor/node-addon-api/test/dataview/dataview_read_write.js +0 -92
- package/vendor/node-addon-api/test/date.cc +0 -45
- package/vendor/node-addon-api/test/date.js +0 -18
- package/vendor/node-addon-api/test/env_cleanup.cc +0 -100
- package/vendor/node-addon-api/test/env_cleanup.js +0 -55
- package/vendor/node-addon-api/test/env_misc.cc +0 -25
- package/vendor/node-addon-api/test/env_misc.js +0 -12
- package/vendor/node-addon-api/test/error.cc +0 -436
- package/vendor/node-addon-api/test/error.js +0 -111
- package/vendor/node-addon-api/test/error_handling_for_primitives.cc +0 -13
- package/vendor/node-addon-api/test/error_handling_for_primitives.js +0 -29
- package/vendor/node-addon-api/test/error_terminating_environment.js +0 -99
- package/vendor/node-addon-api/test/except_all.cc +0 -22
- package/vendor/node-addon-api/test/except_all.js +0 -14
- package/vendor/node-addon-api/test/exports.js +0 -19
- package/vendor/node-addon-api/test/external.cc +0 -85
- package/vendor/node-addon-api/test/external.js +0 -85
- package/vendor/node-addon-api/test/finalizer_order.cc +0 -152
- package/vendor/node-addon-api/test/finalizer_order.js +0 -98
- package/vendor/node-addon-api/test/function.cc +0 -338
- package/vendor/node-addon-api/test/function.js +0 -137
- package/vendor/node-addon-api/test/function_reference.cc +0 -204
- package/vendor/node-addon-api/test/function_reference.js +0 -157
- package/vendor/node-addon-api/test/globalObject/global_object.cc +0 -61
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +0 -31
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +0 -58
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +0 -40
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +0 -56
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +0 -28
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +0 -46
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +0 -31
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +0 -56
- package/vendor/node-addon-api/test/handlescope.cc +0 -86
- package/vendor/node-addon-api/test/handlescope.js +0 -16
- package/vendor/node-addon-api/test/index.js +0 -160
- package/vendor/node-addon-api/test/maybe/check.cc +0 -69
- package/vendor/node-addon-api/test/maybe/index.js +0 -50
- package/vendor/node-addon-api/test/memory_management.cc +0 -18
- package/vendor/node-addon-api/test/memory_management.js +0 -9
- package/vendor/node-addon-api/test/movable_callbacks.cc +0 -23
- package/vendor/node-addon-api/test/movable_callbacks.js +0 -21
- package/vendor/node-addon-api/test/name.cc +0 -110
- package/vendor/node-addon-api/test/name.js +0 -59
- package/vendor/node-addon-api/test/napi_child.js +0 -14
- package/vendor/node-addon-api/test/object/delete_property.cc +0 -38
- package/vendor/node-addon-api/test/object/delete_property.js +0 -41
- package/vendor/node-addon-api/test/object/finalizer.cc +0 -30
- package/vendor/node-addon-api/test/object/finalizer.js +0 -28
- package/vendor/node-addon-api/test/object/get_property.cc +0 -34
- package/vendor/node-addon-api/test/object/get_property.js +0 -40
- package/vendor/node-addon-api/test/object/has_own_property.cc +0 -34
- package/vendor/node-addon-api/test/object/has_own_property.js +0 -34
- package/vendor/node-addon-api/test/object/has_property.cc +0 -38
- package/vendor/node-addon-api/test/object/has_property.js +0 -37
- package/vendor/node-addon-api/test/object/object.cc +0 -430
- package/vendor/node-addon-api/test/object/object.js +0 -218
- package/vendor/node-addon-api/test/object/object_deprecated.cc +0 -70
- package/vendor/node-addon-api/test/object/object_deprecated.js +0 -42
- package/vendor/node-addon-api/test/object/object_freeze_seal.cc +0 -25
- package/vendor/node-addon-api/test/object/object_freeze_seal.js +0 -61
- package/vendor/node-addon-api/test/object/set_property.cc +0 -45
- package/vendor/node-addon-api/test/object/set_property.js +0 -30
- package/vendor/node-addon-api/test/object/subscript_operator.cc +0 -58
- package/vendor/node-addon-api/test/object/subscript_operator.js +0 -17
- package/vendor/node-addon-api/test/object_reference.cc +0 -417
- package/vendor/node-addon-api/test/object_reference.js +0 -262
- package/vendor/node-addon-api/test/objectwrap.cc +0 -295
- package/vendor/node-addon-api/test/objectwrap.js +0 -309
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +0 -26
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +0 -18
- package/vendor/node-addon-api/test/objectwrap_function.cc +0 -43
- package/vendor/node-addon-api/test/objectwrap_function.js +0 -6
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +0 -30
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +0 -13
- package/vendor/node-addon-api/test/objectwrap_removewrap.cc +0 -45
- package/vendor/node-addon-api/test/objectwrap_removewrap.js +0 -32
- package/vendor/node-addon-api/test/objectwrap_worker_thread.js +0 -20
- package/vendor/node-addon-api/test/promise.cc +0 -111
- package/vendor/node-addon-api/test/promise.js +0 -43
- package/vendor/node-addon-api/test/reference.cc +0 -78
- package/vendor/node-addon-api/test/reference.js +0 -20
- package/vendor/node-addon-api/test/require_basic_finalizers/index.js +0 -38
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/addon.cc +0 -12
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/binding.gyp +0 -48
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/index.js +0 -3
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/package.json +0 -11
- package/vendor/node-addon-api/test/run_script.cc +0 -56
- package/vendor/node-addon-api/test/run_script.js +0 -45
- package/vendor/node-addon-api/test/symbol.cc +0 -79
- package/vendor/node-addon-api/test/symbol.js +0 -66
- package/vendor/node-addon-api/test/testUtil.js +0 -54
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +0 -230
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +0 -225
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +0 -155
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +0 -13
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.cc +0 -50
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.js +0 -20
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +0 -125
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +0 -14
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +0 -27
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +0 -7
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +0 -240
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +0 -59
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +0 -55
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +0 -98
- package/vendor/node-addon-api/test/thunking_manual.cc +0 -127
- package/vendor/node-addon-api/test/thunking_manual.js +0 -16
- package/vendor/node-addon-api/test/type_taggable.cc +0 -66
- package/vendor/node-addon-api/test/type_taggable.js +0 -59
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +0 -215
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +0 -188
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +0 -120
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +0 -14
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.cc +0 -39
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.js +0 -13
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +0 -127
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +0 -14
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +0 -32
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +0 -8
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +0 -237
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +0 -59
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +0 -67
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +0 -98
- package/vendor/node-addon-api/test/typedarray-bigint.js +0 -58
- package/vendor/node-addon-api/test/typedarray.cc +0 -413
- package/vendor/node-addon-api/test/typedarray.js +0 -103
- package/vendor/node-addon-api/test/value_type_cast.cc +0 -60
- package/vendor/node-addon-api/test/value_type_cast.js +0 -106
- package/vendor/node-addon-api/test/version_management.cc +0 -28
- package/vendor/node-addon-api/test/version_management.js +0 -29
- package/vendor/node-addon-api/tools/README.md +0 -73
- package/vendor/node-addon-api/tools/check-napi.js +0 -99
- package/vendor/node-addon-api/tools/clang-format.js +0 -71
- package/vendor/node-addon-api/tools/conversion.js +0 -301
- package/vendor/node-addon-api/unit-test/README.md +0 -28
- package/vendor/node-addon-api/unit-test/binding-file-template.js +0 -39
- package/vendor/node-addon-api/unit-test/binding.gyp +0 -72
- package/vendor/node-addon-api/unit-test/exceptions.js +0 -32
- package/vendor/node-addon-api/unit-test/generate-binding-cc.js +0 -61
- package/vendor/node-addon-api/unit-test/injectTestParams.js +0 -101
- package/vendor/node-addon-api/unit-test/listOfTestModules.js +0 -88
- package/vendor/node-addon-api/unit-test/matchModules.js +0 -65
- package/vendor/node-addon-api/unit-test/setup.js +0 -13
- package/vendor/node-addon-api/unit-test/spawnTask.js +0 -26
- package/vendor/node-addon-api/unit-test/test.js +0 -30
- package/vendor/node-api-headers/CHANGELOG.md +0 -130
- package/vendor/node-api-headers/CODE_OF_CONDUCT.md +0 -4
- package/vendor/node-api-headers/CONTRIBUTING.md +0 -32
- package/vendor/node-api-headers/CREATING_A_RELEASE.md +0 -68
- package/vendor/node-api-headers/index.js +0 -17
- package/vendor/node-api-headers/lib/clang-utils.js +0 -50
- package/vendor/node-api-headers/lib/parse-utils.js +0 -92
- package/vendor/node-api-headers/package.json +0 -59
- package/vendor/node-api-headers/release-please-config.json +0 -12
- package/vendor/node-api-headers/scripts/update-headers.js +0 -246
- package/vendor/node-api-headers/scripts/write-symbols.js +0 -154
- package/vendor/node-api-headers/scripts/write-win32-def.js +0 -52
- package/vendor/node-api-headers/symbols.js +0 -257
- package/vendor/node-api-headers/test/parse-utils.js +0 -21
- /package/doc/{pages/benchmarks.md → benchmarks.md} +0 -0
- /package/doc/{pages/callbacks.md → callbacks.md} +0 -0
- /package/doc/{pages/contribute.md → contribute.md} +0 -0
- /package/doc/{pages/functions.md → functions.md} +0 -0
- /package/doc/{pages/index.md → index.md} +0 -0
- /package/doc/{pages/input.md → input.md} +0 -0
- /package/doc/{pages/migration.md → migration.md} +0 -0
- /package/doc/{pages/misc.md → misc.md} +0 -0
- /package/doc/{pages/output.md → output.md} +0 -0
- /package/doc/{pages/packaging.md → packaging.md} +0 -0
- /package/doc/{pages/platforms.md → platforms.md} +0 -0
- /package/doc/{pages/pointers.md → pointers.md} +0 -0
- /package/doc/{pages/start.md → start.md} +0 -0
- /package/doc/{pages/unions.md → unions.md} +0 -0
- /package/doc/{pages/variables.md → variables.md} +0 -0
- /package/src/koffi/src/{abi/loong64.cc → abi_loong64.cc} +0 -0
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
#include <napi.h>
|
|
2
|
-
#include "test_helper.h"
|
|
3
|
-
using namespace Napi;
|
|
4
|
-
|
|
5
|
-
Symbol CreateNewSymbolWithNoArgs(const Napi::CallbackInfo&) {
|
|
6
|
-
return Napi::Symbol();
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
Symbol CreateNewSymbolWithCppStrDesc(const Napi::CallbackInfo& info) {
|
|
10
|
-
String cppStrKey = info[0].As<String>();
|
|
11
|
-
return Napi::Symbol::New(info.Env(), cppStrKey.Utf8Value());
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
Symbol CreateNewSymbolWithCStrDesc(const Napi::CallbackInfo& info) {
|
|
15
|
-
String cStrKey = info[0].As<String>();
|
|
16
|
-
return Napi::Symbol::New(info.Env(), cStrKey.Utf8Value().c_str());
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
Symbol CreateNewSymbolWithNapiString(const Napi::CallbackInfo& info) {
|
|
20
|
-
String strKey = info[0].As<String>();
|
|
21
|
-
return Napi::Symbol::New(info.Env(), strKey);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
Symbol GetWellknownSymbol(const Napi::CallbackInfo& info) {
|
|
25
|
-
String registrySymbol = info[0].As<String>();
|
|
26
|
-
return MaybeUnwrap(
|
|
27
|
-
Napi::Symbol::WellKnown(info.Env(), registrySymbol.Utf8Value().c_str()));
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
Symbol FetchSymbolFromGlobalRegistry(const Napi::CallbackInfo& info) {
|
|
31
|
-
String registrySymbol = info[0].As<String>();
|
|
32
|
-
return MaybeUnwrap(Napi::Symbol::For(info.Env(), registrySymbol));
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
Symbol FetchSymbolFromGlobalRegistryWithCppKey(const Napi::CallbackInfo& info) {
|
|
36
|
-
String cppStringKey = info[0].As<String>();
|
|
37
|
-
return MaybeUnwrap(Napi::Symbol::For(info.Env(), cppStringKey.Utf8Value()));
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
Symbol FetchSymbolFromGlobalRegistryWithCKey(const Napi::CallbackInfo& info) {
|
|
41
|
-
String cppStringKey = info[0].As<String>();
|
|
42
|
-
return MaybeUnwrap(
|
|
43
|
-
Napi::Symbol::For(info.Env(), cppStringKey.Utf8Value().c_str()));
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
Symbol TestUndefinedSymbolsCanBeCreated(const Napi::CallbackInfo& info) {
|
|
47
|
-
Napi::Env env = info.Env();
|
|
48
|
-
return MaybeUnwrap(Napi::Symbol::For(env, env.Undefined()));
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
Symbol TestNullSymbolsCanBeCreated(const Napi::CallbackInfo& info) {
|
|
52
|
-
Napi::Env env = info.Env();
|
|
53
|
-
return MaybeUnwrap(Napi::Symbol::For(env, env.Null()));
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
Object InitSymbol(Env env) {
|
|
57
|
-
Object exports = Object::New(env);
|
|
58
|
-
|
|
59
|
-
exports["createNewSymbolWithNoArgs"] =
|
|
60
|
-
Function::New(env, CreateNewSymbolWithNoArgs);
|
|
61
|
-
exports["createNewSymbolWithCppStr"] =
|
|
62
|
-
Function::New(env, CreateNewSymbolWithCppStrDesc);
|
|
63
|
-
exports["createNewSymbolWithCStr"] =
|
|
64
|
-
Function::New(env, CreateNewSymbolWithCStrDesc);
|
|
65
|
-
exports["createNewSymbolWithNapi"] =
|
|
66
|
-
Function::New(env, CreateNewSymbolWithNapiString);
|
|
67
|
-
exports["getWellKnownSymbol"] = Function::New(env, GetWellknownSymbol);
|
|
68
|
-
exports["getSymbolFromGlobalRegistry"] =
|
|
69
|
-
Function::New(env, FetchSymbolFromGlobalRegistry);
|
|
70
|
-
exports["getSymbolFromGlobalRegistryWithCKey"] =
|
|
71
|
-
Function::New(env, FetchSymbolFromGlobalRegistryWithCKey);
|
|
72
|
-
exports["getSymbolFromGlobalRegistryWithCppKey"] =
|
|
73
|
-
Function::New(env, FetchSymbolFromGlobalRegistryWithCppKey);
|
|
74
|
-
exports["testUndefinedSymbolCanBeCreated"] =
|
|
75
|
-
Function::New(env, TestUndefinedSymbolsCanBeCreated);
|
|
76
|
-
exports["testNullSymbolCanBeCreated"] =
|
|
77
|
-
Function::New(env, TestNullSymbolsCanBeCreated);
|
|
78
|
-
return exports;
|
|
79
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const assert = require('assert');
|
|
4
|
-
|
|
5
|
-
module.exports = require('./common').runTest(test);
|
|
6
|
-
|
|
7
|
-
function test (binding) {
|
|
8
|
-
const majorNodeVersion = process.versions.node.split('.')[0];
|
|
9
|
-
|
|
10
|
-
const wellKnownSymbolFunctions = ['asyncIterator', 'hasInstance', 'isConcatSpreadable', 'iterator', 'match', 'replace', 'search', 'split', 'species', 'toPrimitive', 'toStringTag', 'unscopables'];
|
|
11
|
-
if (majorNodeVersion >= 12) {
|
|
12
|
-
wellKnownSymbolFunctions.push('matchAll');
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
function assertCanCreateSymbol (symbol) {
|
|
16
|
-
assert(binding.symbol.createNewSymbolWithCppStr(symbol) !== null);
|
|
17
|
-
assert(binding.symbol.createNewSymbolWithCStr(symbol) !== null);
|
|
18
|
-
assert(binding.symbol.createNewSymbolWithNapi(symbol) !== null);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function assertSymbolAreUnique (symbol) {
|
|
22
|
-
const symbolOne = binding.symbol.createNewSymbolWithCppStr(symbol);
|
|
23
|
-
const symbolTwo = binding.symbol.createNewSymbolWithCppStr(symbol);
|
|
24
|
-
|
|
25
|
-
assert(symbolOne !== symbolTwo);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function assertSymbolIsWellknown (symbol) {
|
|
29
|
-
const symbOne = binding.symbol.getWellKnownSymbol(symbol);
|
|
30
|
-
const symbTwo = binding.symbol.getWellKnownSymbol(symbol);
|
|
31
|
-
assert(symbOne && symbTwo);
|
|
32
|
-
assert(symbOne === symbTwo);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function assertSymbolIsNotWellknown (symbol) {
|
|
36
|
-
const symbolTest = binding.symbol.getWellKnownSymbol(symbol);
|
|
37
|
-
assert(symbolTest === undefined);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function assertCanCreateOrFetchGlobalSymbols (symbol, fetchFunction) {
|
|
41
|
-
const symbOne = fetchFunction(symbol);
|
|
42
|
-
const symbTwo = fetchFunction(symbol);
|
|
43
|
-
assert(symbOne && symbTwo);
|
|
44
|
-
assert(symbOne === symbTwo);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
assertCanCreateSymbol('testing');
|
|
48
|
-
assertSymbolAreUnique('symbol');
|
|
49
|
-
assertSymbolIsNotWellknown('testing');
|
|
50
|
-
|
|
51
|
-
for (const wellknownProperty of wellKnownSymbolFunctions) {
|
|
52
|
-
assertSymbolIsWellknown(wellknownProperty);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
assertCanCreateOrFetchGlobalSymbols('data', binding.symbol.getSymbolFromGlobalRegistry);
|
|
56
|
-
assertCanCreateOrFetchGlobalSymbols('CppKey', binding.symbol.getSymbolFromGlobalRegistryWithCppKey);
|
|
57
|
-
assertCanCreateOrFetchGlobalSymbols('CKey', binding.symbol.getSymbolFromGlobalRegistryWithCKey);
|
|
58
|
-
|
|
59
|
-
assert(binding.symbol.createNewSymbolWithNoArgs() === undefined);
|
|
60
|
-
|
|
61
|
-
// eslint-disable-next-line no-self-compare
|
|
62
|
-
assert(binding.symbol.testNullSymbolCanBeCreated() === binding.symbol.testNullSymbolCanBeCreated());
|
|
63
|
-
// eslint-disable-next-line no-self-compare
|
|
64
|
-
assert(binding.symbol.testUndefinedSymbolCanBeCreated() === binding.symbol.testUndefinedSymbolCanBeCreated());
|
|
65
|
-
assert(binding.symbol.testUndefinedSymbolCanBeCreated() !== binding.symbol.testNullSymbolCanBeCreated());
|
|
66
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
// Run each test function in sequence,
|
|
2
|
-
// with an async delay and GC call between each.
|
|
3
|
-
|
|
4
|
-
function tick (x) {
|
|
5
|
-
return new Promise((resolve) => {
|
|
6
|
-
setImmediate(function ontick () {
|
|
7
|
-
if (--x === 0) {
|
|
8
|
-
resolve();
|
|
9
|
-
} else {
|
|
10
|
-
setImmediate(ontick);
|
|
11
|
-
}
|
|
12
|
-
});
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
async function runGCTests (tests) {
|
|
17
|
-
// Break up test list into a list of lists of the form
|
|
18
|
-
// [ [ 'test name', function() {}, ... ], ..., ].
|
|
19
|
-
const testList = [];
|
|
20
|
-
let currentTest;
|
|
21
|
-
for (const item of tests) {
|
|
22
|
-
if (typeof item === 'string') {
|
|
23
|
-
currentTest = [];
|
|
24
|
-
testList.push(currentTest);
|
|
25
|
-
}
|
|
26
|
-
currentTest.push(item);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
for (const test of testList) {
|
|
30
|
-
await (async function (test) {
|
|
31
|
-
let title;
|
|
32
|
-
for (let i = 0; i < test.length; i++) {
|
|
33
|
-
if (i === 0) {
|
|
34
|
-
title = test[i];
|
|
35
|
-
} else {
|
|
36
|
-
try {
|
|
37
|
-
test[i]();
|
|
38
|
-
} catch (e) {
|
|
39
|
-
console.error('Test failed: ' + title);
|
|
40
|
-
throw e;
|
|
41
|
-
}
|
|
42
|
-
if (i < tests.length - 1) {
|
|
43
|
-
global.gc();
|
|
44
|
-
await tick(10);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
})(test);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
module.exports = {
|
|
53
|
-
runGCTests
|
|
54
|
-
};
|
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
#include <chrono>
|
|
2
|
-
#include <condition_variable>
|
|
3
|
-
#include <mutex>
|
|
4
|
-
#include <thread>
|
|
5
|
-
#include "napi.h"
|
|
6
|
-
|
|
7
|
-
#if (NAPI_VERSION > 3)
|
|
8
|
-
|
|
9
|
-
using namespace Napi;
|
|
10
|
-
|
|
11
|
-
constexpr size_t ARRAY_LENGTH = 10;
|
|
12
|
-
constexpr size_t MAX_QUEUE_SIZE = 2;
|
|
13
|
-
|
|
14
|
-
static std::thread threads[2];
|
|
15
|
-
static ThreadSafeFunction s_tsfn;
|
|
16
|
-
|
|
17
|
-
struct ThreadSafeFunctionInfo {
|
|
18
|
-
enum CallType {
|
|
19
|
-
DEFAULT,
|
|
20
|
-
BLOCKING,
|
|
21
|
-
NON_BLOCKING,
|
|
22
|
-
NON_BLOCKING_DEFAULT,
|
|
23
|
-
NON_BLOCKING_SINGLE_ARG
|
|
24
|
-
} type;
|
|
25
|
-
bool abort;
|
|
26
|
-
bool startSecondary;
|
|
27
|
-
FunctionReference jsFinalizeCallback;
|
|
28
|
-
uint32_t maxQueueSize;
|
|
29
|
-
bool closeCalledFromJs;
|
|
30
|
-
std::mutex protect;
|
|
31
|
-
std::condition_variable signal;
|
|
32
|
-
} tsfnInfo;
|
|
33
|
-
|
|
34
|
-
// Thread data to transmit to JS
|
|
35
|
-
static int ints[ARRAY_LENGTH];
|
|
36
|
-
|
|
37
|
-
static void SecondaryThread() {
|
|
38
|
-
if (s_tsfn.Release() != napi_ok) {
|
|
39
|
-
Error::Fatal("SecondaryThread", "ThreadSafeFunction.Release() failed");
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Source thread producing the data
|
|
44
|
-
static void DataSourceThread() {
|
|
45
|
-
ThreadSafeFunctionInfo* info = s_tsfn.GetContext();
|
|
46
|
-
|
|
47
|
-
if (info->startSecondary) {
|
|
48
|
-
if (s_tsfn.Acquire() != napi_ok) {
|
|
49
|
-
Error::Fatal("DataSourceThread", "ThreadSafeFunction.Acquire() failed");
|
|
50
|
-
}
|
|
51
|
-
threads[1] = std::thread(SecondaryThread);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
bool queueWasFull = false;
|
|
55
|
-
bool queueWasClosing = false;
|
|
56
|
-
|
|
57
|
-
for (int index = ARRAY_LENGTH - 1; index > -1 && !queueWasClosing; index--) {
|
|
58
|
-
napi_status status = napi_generic_failure;
|
|
59
|
-
|
|
60
|
-
auto callback = [](Env env, Function jsCallback, int* data) {
|
|
61
|
-
jsCallback.Call({Number::New(env, *data)});
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
auto noArgCallback = [](Env env, Function jsCallback) {
|
|
65
|
-
jsCallback.Call({Number::New(env, 42)});
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
switch (info->type) {
|
|
69
|
-
case ThreadSafeFunctionInfo::DEFAULT:
|
|
70
|
-
status = s_tsfn.BlockingCall();
|
|
71
|
-
break;
|
|
72
|
-
case ThreadSafeFunctionInfo::BLOCKING:
|
|
73
|
-
status = s_tsfn.BlockingCall(&ints[index], callback);
|
|
74
|
-
break;
|
|
75
|
-
case ThreadSafeFunctionInfo::NON_BLOCKING:
|
|
76
|
-
status = s_tsfn.NonBlockingCall(&ints[index], callback);
|
|
77
|
-
break;
|
|
78
|
-
case ThreadSafeFunctionInfo::NON_BLOCKING_DEFAULT:
|
|
79
|
-
status = s_tsfn.NonBlockingCall();
|
|
80
|
-
break;
|
|
81
|
-
|
|
82
|
-
case ThreadSafeFunctionInfo::NON_BLOCKING_SINGLE_ARG:
|
|
83
|
-
status = s_tsfn.NonBlockingCall(noArgCallback);
|
|
84
|
-
break;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
if (info->abort && (info->type == ThreadSafeFunctionInfo::BLOCKING ||
|
|
88
|
-
info->type == ThreadSafeFunctionInfo::DEFAULT)) {
|
|
89
|
-
// Let's make this thread really busy to give the main thread a chance to
|
|
90
|
-
// abort / close.
|
|
91
|
-
std::unique_lock<std::mutex> lk(info->protect);
|
|
92
|
-
while (!info->closeCalledFromJs) {
|
|
93
|
-
info->signal.wait(lk);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
switch (status) {
|
|
98
|
-
case napi_queue_full:
|
|
99
|
-
queueWasFull = true;
|
|
100
|
-
index++;
|
|
101
|
-
// fall through
|
|
102
|
-
|
|
103
|
-
case napi_ok:
|
|
104
|
-
continue;
|
|
105
|
-
|
|
106
|
-
case napi_closing:
|
|
107
|
-
queueWasClosing = true;
|
|
108
|
-
break;
|
|
109
|
-
|
|
110
|
-
default:
|
|
111
|
-
Error::Fatal("DataSourceThread", "ThreadSafeFunction.*Call() failed");
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
if (info->type == ThreadSafeFunctionInfo::NON_BLOCKING && !queueWasFull) {
|
|
116
|
-
Error::Fatal("DataSourceThread", "Queue was never full");
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
if (info->abort && !queueWasClosing) {
|
|
120
|
-
Error::Fatal("DataSourceThread", "Queue was never closing");
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
if (!queueWasClosing && s_tsfn.Release() != napi_ok) {
|
|
124
|
-
Error::Fatal("DataSourceThread", "ThreadSafeFunction.Release() failed");
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
static Value StopThread(const CallbackInfo& info) {
|
|
129
|
-
tsfnInfo.jsFinalizeCallback = Napi::Persistent(info[0].As<Function>());
|
|
130
|
-
bool abort = info[1].As<Boolean>();
|
|
131
|
-
if (abort) {
|
|
132
|
-
s_tsfn.Abort();
|
|
133
|
-
} else {
|
|
134
|
-
s_tsfn.Release();
|
|
135
|
-
}
|
|
136
|
-
{
|
|
137
|
-
std::lock_guard<std::mutex> _(tsfnInfo.protect);
|
|
138
|
-
tsfnInfo.closeCalledFromJs = true;
|
|
139
|
-
tsfnInfo.signal.notify_one();
|
|
140
|
-
}
|
|
141
|
-
return Value();
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// Join the thread and inform JS that we're done.
|
|
145
|
-
static void JoinTheThreads(Env /* env */,
|
|
146
|
-
std::thread* theThreads,
|
|
147
|
-
ThreadSafeFunctionInfo* info) {
|
|
148
|
-
theThreads[0].join();
|
|
149
|
-
if (info->startSecondary) {
|
|
150
|
-
theThreads[1].join();
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
info->jsFinalizeCallback.Call({});
|
|
154
|
-
info->jsFinalizeCallback.Reset();
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
static Value StartThreadInternal(const CallbackInfo& info,
|
|
158
|
-
ThreadSafeFunctionInfo::CallType type) {
|
|
159
|
-
tsfnInfo.type = type;
|
|
160
|
-
tsfnInfo.abort = info[1].As<Boolean>();
|
|
161
|
-
tsfnInfo.startSecondary = info[2].As<Boolean>();
|
|
162
|
-
tsfnInfo.maxQueueSize = info[3].As<Number>().Uint32Value();
|
|
163
|
-
tsfnInfo.closeCalledFromJs = false;
|
|
164
|
-
|
|
165
|
-
s_tsfn = ThreadSafeFunction::New(info.Env(),
|
|
166
|
-
info[0].As<Function>(),
|
|
167
|
-
"Test",
|
|
168
|
-
tsfnInfo.maxQueueSize,
|
|
169
|
-
2,
|
|
170
|
-
&tsfnInfo,
|
|
171
|
-
JoinTheThreads,
|
|
172
|
-
threads);
|
|
173
|
-
|
|
174
|
-
threads[0] = std::thread(DataSourceThread);
|
|
175
|
-
|
|
176
|
-
return Value();
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
static Value Release(const CallbackInfo& /* info */) {
|
|
180
|
-
if (s_tsfn.Release() != napi_ok) {
|
|
181
|
-
Error::Fatal("Release", "ThreadSafeFunction.Release() failed");
|
|
182
|
-
}
|
|
183
|
-
return Value();
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
static Value StartThread(const CallbackInfo& info) {
|
|
187
|
-
return StartThreadInternal(info, ThreadSafeFunctionInfo::BLOCKING);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
static Value StartThreadNonblocking(const CallbackInfo& info) {
|
|
191
|
-
return StartThreadInternal(info, ThreadSafeFunctionInfo::NON_BLOCKING);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
static Value StartThreadNoNative(const CallbackInfo& info) {
|
|
195
|
-
return StartThreadInternal(info, ThreadSafeFunctionInfo::DEFAULT);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
static Value StartThreadNonblockingNoNative(const CallbackInfo& info) {
|
|
199
|
-
return StartThreadInternal(info,
|
|
200
|
-
ThreadSafeFunctionInfo::NON_BLOCKING_DEFAULT);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
static Value StartThreadNonBlockingSingleArg(const CallbackInfo& info) {
|
|
204
|
-
return StartThreadInternal(info,
|
|
205
|
-
ThreadSafeFunctionInfo::NON_BLOCKING_SINGLE_ARG);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
Object InitThreadSafeFunction(Env env) {
|
|
209
|
-
for (size_t index = 0; index < ARRAY_LENGTH; index++) {
|
|
210
|
-
ints[index] = index;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
Object exports = Object::New(env);
|
|
214
|
-
exports["ARRAY_LENGTH"] = Number::New(env, ARRAY_LENGTH);
|
|
215
|
-
exports["MAX_QUEUE_SIZE"] = Number::New(env, MAX_QUEUE_SIZE);
|
|
216
|
-
exports["startThread"] = Function::New(env, StartThread);
|
|
217
|
-
exports["startThreadNoNative"] = Function::New(env, StartThreadNoNative);
|
|
218
|
-
exports["startThreadNonblockingNoNative"] =
|
|
219
|
-
Function::New(env, StartThreadNonblockingNoNative);
|
|
220
|
-
exports["startThreadNonblocking"] =
|
|
221
|
-
Function::New(env, StartThreadNonblocking);
|
|
222
|
-
exports["startThreadNonblockSingleArg"] =
|
|
223
|
-
Function::New(env, StartThreadNonBlockingSingleArg);
|
|
224
|
-
exports["stopThread"] = Function::New(env, StopThread);
|
|
225
|
-
exports["release"] = Function::New(env, Release);
|
|
226
|
-
|
|
227
|
-
return exports;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
#endif
|
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const assert = require('assert');
|
|
4
|
-
const common = require('../common');
|
|
5
|
-
|
|
6
|
-
module.exports = common.runTest(test);
|
|
7
|
-
|
|
8
|
-
// Main test body
|
|
9
|
-
async function test (binding) {
|
|
10
|
-
const expectedArray = (function (arrayLength) {
|
|
11
|
-
const result = [];
|
|
12
|
-
for (let index = 0; index < arrayLength; index++) {
|
|
13
|
-
result.push(arrayLength - 1 - index);
|
|
14
|
-
}
|
|
15
|
-
return result;
|
|
16
|
-
})(binding.threadsafe_function.ARRAY_LENGTH);
|
|
17
|
-
|
|
18
|
-
const expectedDefaultArray = Array.from({ length: binding.threadsafe_function.ARRAY_LENGTH }, (_, i) => 42);
|
|
19
|
-
|
|
20
|
-
function testWithJSMarshaller ({
|
|
21
|
-
threadStarter,
|
|
22
|
-
quitAfter,
|
|
23
|
-
abort,
|
|
24
|
-
maxQueueSize,
|
|
25
|
-
launchSecondary
|
|
26
|
-
}) {
|
|
27
|
-
return new Promise((resolve) => {
|
|
28
|
-
const array = [];
|
|
29
|
-
binding.threadsafe_function[threadStarter](function testCallback (value) {
|
|
30
|
-
array.push(value);
|
|
31
|
-
if (array.length === quitAfter) {
|
|
32
|
-
binding.threadsafe_function.stopThread(common.mustCall(() => {
|
|
33
|
-
resolve(array);
|
|
34
|
-
}), !!abort);
|
|
35
|
-
}
|
|
36
|
-
}, !!abort, !!launchSecondary, maxQueueSize);
|
|
37
|
-
if ((threadStarter === 'startThreadNonblocking' || threadStarter === 'startThreadNonblockSingleArg')) {
|
|
38
|
-
// Let's make this thread really busy for a short while to ensure that
|
|
39
|
-
// the queue fills and the thread receives a napi_queue_full.
|
|
40
|
-
const start = Date.now();
|
|
41
|
-
while (Date.now() - start < 200);
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function testWithoutJSMarshallers (nativeFunction) {
|
|
47
|
-
return new Promise((resolve) => {
|
|
48
|
-
let callCount = 0;
|
|
49
|
-
nativeFunction(function testCallback () {
|
|
50
|
-
callCount++;
|
|
51
|
-
|
|
52
|
-
// The default call-into-JS implementation passes no arguments.
|
|
53
|
-
assert.strictEqual(arguments.length, 0);
|
|
54
|
-
if (callCount === binding.threadsafe_function.ARRAY_LENGTH) {
|
|
55
|
-
setImmediate(() => {
|
|
56
|
-
binding.threadsafe_function.stopThread(common.mustCall(() => {
|
|
57
|
-
resolve();
|
|
58
|
-
}), false);
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
}, false /* abort */, false /* launchSecondary */,
|
|
62
|
-
binding.threadsafe_function.MAX_QUEUE_SIZE);
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
await testWithoutJSMarshallers(binding.threadsafe_function.startThreadNoNative);
|
|
67
|
-
await testWithoutJSMarshallers(binding.threadsafe_function.startThreadNonblockingNoNative);
|
|
68
|
-
|
|
69
|
-
// Start the thread in blocking mode, and assert that all values are passed.
|
|
70
|
-
// Quit after it's done.
|
|
71
|
-
assert.deepStrictEqual(
|
|
72
|
-
await testWithJSMarshaller({
|
|
73
|
-
threadStarter: 'startThread',
|
|
74
|
-
maxQueueSize: binding.threadsafe_function.MAX_QUEUE_SIZE,
|
|
75
|
-
quitAfter: binding.threadsafe_function.ARRAY_LENGTH
|
|
76
|
-
}),
|
|
77
|
-
expectedArray
|
|
78
|
-
);
|
|
79
|
-
|
|
80
|
-
// Start the thread in blocking mode with an infinite queue, and assert that
|
|
81
|
-
// all values are passed. Quit after it's done.
|
|
82
|
-
assert.deepStrictEqual(
|
|
83
|
-
await testWithJSMarshaller({
|
|
84
|
-
threadStarter: 'startThread',
|
|
85
|
-
maxQueueSize: 0,
|
|
86
|
-
quitAfter: binding.threadsafe_function.ARRAY_LENGTH
|
|
87
|
-
}),
|
|
88
|
-
expectedArray
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
// Start the thread in non-blocking mode, and assert that all values are
|
|
92
|
-
// passed. Quit after it's done.
|
|
93
|
-
assert.deepStrictEqual(
|
|
94
|
-
await testWithJSMarshaller({
|
|
95
|
-
threadStarter: 'startThreadNonblocking',
|
|
96
|
-
maxQueueSize: binding.threadsafe_function.MAX_QUEUE_SIZE,
|
|
97
|
-
quitAfter: binding.threadsafe_function.ARRAY_LENGTH
|
|
98
|
-
}),
|
|
99
|
-
expectedArray
|
|
100
|
-
);
|
|
101
|
-
|
|
102
|
-
// Start the thread in blocking mode, and assert that all values are passed.
|
|
103
|
-
// Quit early, but let the thread finish.
|
|
104
|
-
assert.deepStrictEqual(
|
|
105
|
-
await testWithJSMarshaller({
|
|
106
|
-
threadStarter: 'startThread',
|
|
107
|
-
maxQueueSize: binding.threadsafe_function.MAX_QUEUE_SIZE,
|
|
108
|
-
quitAfter: 1
|
|
109
|
-
}),
|
|
110
|
-
expectedArray
|
|
111
|
-
);
|
|
112
|
-
|
|
113
|
-
// Start the thread in blocking mode with an infinite queue, and assert that
|
|
114
|
-
// all values are passed. Quit early, but let the thread finish.
|
|
115
|
-
assert.deepStrictEqual(
|
|
116
|
-
await testWithJSMarshaller({
|
|
117
|
-
threadStarter: 'startThread',
|
|
118
|
-
maxQueueSize: 0,
|
|
119
|
-
quitAfter: 1
|
|
120
|
-
}),
|
|
121
|
-
expectedArray
|
|
122
|
-
);
|
|
123
|
-
|
|
124
|
-
// Start the thread in non-blocking mode, and assert that all values are
|
|
125
|
-
// passed. Quit early, but let the thread finish.
|
|
126
|
-
assert.deepStrictEqual(
|
|
127
|
-
await testWithJSMarshaller({
|
|
128
|
-
threadStarter: 'startThreadNonblocking',
|
|
129
|
-
maxQueueSize: binding.threadsafe_function.MAX_QUEUE_SIZE,
|
|
130
|
-
quitAfter: 1
|
|
131
|
-
}),
|
|
132
|
-
expectedArray
|
|
133
|
-
);
|
|
134
|
-
|
|
135
|
-
assert.deepStrictEqual(
|
|
136
|
-
await testWithJSMarshaller({
|
|
137
|
-
threadStarter: 'startThreadNonblockSingleArg',
|
|
138
|
-
maxQueueSize: binding.threadsafe_function.MAX_QUEUE_SIZE,
|
|
139
|
-
quitAfter: 1
|
|
140
|
-
}),
|
|
141
|
-
expectedDefaultArray
|
|
142
|
-
);
|
|
143
|
-
|
|
144
|
-
// Start the thread in blocking mode, and assert that all values are passed.
|
|
145
|
-
// Quit early, but let the thread finish. Launch a secondary thread to test
|
|
146
|
-
// the reference counter incrementing functionality.
|
|
147
|
-
assert.deepStrictEqual(
|
|
148
|
-
await testWithJSMarshaller({
|
|
149
|
-
threadStarter: 'startThread',
|
|
150
|
-
quitAfter: 1,
|
|
151
|
-
maxQueueSize: binding.threadsafe_function.MAX_QUEUE_SIZE,
|
|
152
|
-
launchSecondary: true
|
|
153
|
-
}),
|
|
154
|
-
expectedArray
|
|
155
|
-
);
|
|
156
|
-
|
|
157
|
-
// Start the thread in non-blocking mode, and assert that all values are
|
|
158
|
-
// passed. Quit early, but let the thread finish. Launch a secondary thread
|
|
159
|
-
// to test the reference counter incrementing functionality.
|
|
160
|
-
assert.deepStrictEqual(
|
|
161
|
-
await testWithJSMarshaller({
|
|
162
|
-
threadStarter: 'startThreadNonblocking',
|
|
163
|
-
quitAfter: 1,
|
|
164
|
-
maxQueueSize: binding.threadsafe_function.MAX_QUEUE_SIZE,
|
|
165
|
-
launchSecondary: true
|
|
166
|
-
}),
|
|
167
|
-
expectedArray
|
|
168
|
-
);
|
|
169
|
-
|
|
170
|
-
assert.deepStrictEqual(
|
|
171
|
-
await testWithJSMarshaller({
|
|
172
|
-
threadStarter: 'startThreadNonblockSingleArg',
|
|
173
|
-
maxQueueSize: binding.threadsafe_function.MAX_QUEUE_SIZE,
|
|
174
|
-
quitAfter: 1,
|
|
175
|
-
launchSecondary: true
|
|
176
|
-
}),
|
|
177
|
-
expectedDefaultArray
|
|
178
|
-
);
|
|
179
|
-
|
|
180
|
-
// Start the thread in blocking mode, and assert that it could not finish.
|
|
181
|
-
// Quit early by aborting.
|
|
182
|
-
assert.strictEqual(
|
|
183
|
-
(await testWithJSMarshaller({
|
|
184
|
-
threadStarter: 'startThread',
|
|
185
|
-
quitAfter: 1,
|
|
186
|
-
maxQueueSize: binding.threadsafe_function.MAX_QUEUE_SIZE,
|
|
187
|
-
abort: true
|
|
188
|
-
})).indexOf(0),
|
|
189
|
-
-1
|
|
190
|
-
);
|
|
191
|
-
|
|
192
|
-
// Start the thread in blocking mode with an infinite queue, and assert that
|
|
193
|
-
// it could not finish. Quit early by aborting.
|
|
194
|
-
assert.strictEqual(
|
|
195
|
-
(await testWithJSMarshaller({
|
|
196
|
-
threadStarter: 'startThread',
|
|
197
|
-
quitAfter: 1,
|
|
198
|
-
maxQueueSize: 0,
|
|
199
|
-
abort: true
|
|
200
|
-
})).indexOf(0),
|
|
201
|
-
-1
|
|
202
|
-
);
|
|
203
|
-
|
|
204
|
-
// Start the thread in non-blocking mode, and assert that it could not finish.
|
|
205
|
-
// Quit early and aborting.
|
|
206
|
-
assert.strictEqual(
|
|
207
|
-
(await testWithJSMarshaller({
|
|
208
|
-
threadStarter: 'startThreadNonblocking',
|
|
209
|
-
quitAfter: 1,
|
|
210
|
-
maxQueueSize: binding.threadsafe_function.MAX_QUEUE_SIZE,
|
|
211
|
-
abort: true
|
|
212
|
-
})).indexOf(0),
|
|
213
|
-
-1
|
|
214
|
-
);
|
|
215
|
-
|
|
216
|
-
assert.strictEqual(
|
|
217
|
-
(await testWithJSMarshaller({
|
|
218
|
-
threadStarter: 'startThreadNonblockSingleArg',
|
|
219
|
-
quitAfter: 1,
|
|
220
|
-
maxQueueSize: binding.threadsafe_function.MAX_QUEUE_SIZE,
|
|
221
|
-
abort: true
|
|
222
|
-
})).indexOf(0),
|
|
223
|
-
-1
|
|
224
|
-
);
|
|
225
|
-
}
|