koffi 2.16.0-beta.2 → 2.16.0

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.
Files changed (425) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/build/koffi/darwin_arm64/koffi.node +0 -0
  3. package/build/koffi/darwin_x64/koffi.node +0 -0
  4. package/build/koffi/freebsd_arm64/koffi.node +0 -0
  5. package/build/koffi/freebsd_ia32/koffi.node +0 -0
  6. package/build/koffi/freebsd_x64/koffi.node +0 -0
  7. package/build/koffi/linux_arm64/koffi.node +0 -0
  8. package/build/koffi/linux_armhf/koffi.node +0 -0
  9. package/build/koffi/linux_ia32/koffi.node +0 -0
  10. package/build/koffi/linux_loong64/koffi.node +0 -0
  11. package/build/koffi/linux_riscv64d/koffi.node +0 -0
  12. package/build/koffi/linux_x64/koffi.node +0 -0
  13. package/build/koffi/musl_arm64/koffi.node +0 -0
  14. package/build/koffi/musl_x64/koffi.node +0 -0
  15. package/build/koffi/openbsd_ia32/koffi.node +0 -0
  16. package/build/koffi/openbsd_x64/koffi.node +0 -0
  17. package/build/koffi/win32_arm64/koffi.exp +0 -0
  18. package/build/koffi/win32_arm64/koffi.lib +0 -0
  19. package/build/koffi/win32_arm64/koffi.node +0 -0
  20. package/build/koffi/win32_ia32/koffi.exp +0 -0
  21. package/build/koffi/win32_ia32/koffi.lib +0 -0
  22. package/build/koffi/win32_ia32/koffi.node +0 -0
  23. package/build/koffi/win32_x64/koffi.exp +0 -0
  24. package/build/koffi/win32_x64/koffi.lib +0 -0
  25. package/build/koffi/win32_x64/koffi.node +0 -0
  26. package/index.d.ts +9 -11
  27. package/index.js +6 -9
  28. package/indirect.js +6 -9
  29. package/lib/native/base/base.cc +1 -6
  30. package/package.json +3 -3
  31. package/src/cnoke/assets/FindCNoke.cmake +27 -16
  32. package/src/cnoke/assets/toolchains.json +126 -0
  33. package/src/cnoke/cnoke.js +27 -33
  34. package/src/cnoke/src/builder.js +124 -63
  35. package/src/cnoke/src/tools.js +1 -5
  36. package/src/koffi/CMakeLists.txt +32 -21
  37. package/src/koffi/src/{abi/arm32.cc → abi_arm32.cc} +235 -238
  38. package/src/koffi/src/{abi/arm32_asm.S → abi_arm32_asm.S} +19 -15
  39. package/src/koffi/src/{abi/arm64.cc → abi_arm64.cc} +253 -274
  40. package/src/koffi/src/{abi/arm64_asm.S → abi_arm64_asm.S} +16 -10
  41. package/src/koffi/src/{abi/arm64_asm.asm → abi_arm64_asm.asm} +17 -10
  42. package/src/koffi/src/{abi/loong64_asm.S → abi_loong64_asm.S} +16 -10
  43. package/src/koffi/src/{abi/riscv64.cc → abi_riscv64.cc} +233 -236
  44. package/src/koffi/src/{abi/riscv64_asm.S → abi_riscv64_asm.S} +16 -10
  45. package/src/koffi/src/{abi/x64_sysv.cc → abi_x64_sysv.cc} +208 -212
  46. package/src/koffi/src/{abi/x64_sysv_asm.S → abi_x64_sysv_asm.S} +17 -10
  47. package/src/koffi/src/{abi/x64_win.cc → abi_x64_win.cc} +175 -206
  48. package/src/koffi/src/{abi/x64_win_asm.S → abi_x64_win_asm.S} +49 -27
  49. package/src/koffi/src/{abi/x64_win_asm.asm → abi_x64_win_asm.asm} +54 -27
  50. package/src/koffi/src/{abi/x86.cc → abi_x86.cc} +187 -226
  51. package/src/koffi/src/{abi/x86_asm.S → abi_x86_asm.S} +36 -21
  52. package/src/koffi/src/{abi/x86_asm.asm → abi_x86_asm.asm} +31 -16
  53. package/src/koffi/src/call.cc +473 -287
  54. package/src/koffi/src/call.hh +15 -18
  55. package/src/koffi/src/ffi.cc +167 -183
  56. package/src/koffi/src/ffi.hh +59 -13
  57. package/src/koffi/src/init.js +1 -0
  58. package/src/koffi/src/util.cc +113 -159
  59. package/src/koffi/src/util.hh +23 -74
  60. package/src/koffi/src/win32.cc +13 -0
  61. package/src/koffi/src/win32.hh +7 -0
  62. package/src/koffi/tools/write_trampolines.js +77 -0
  63. package/doc/README.md +0 -27
  64. package/doc/assets.ini +0 -24
  65. package/doc/build.sh +0 -9
  66. package/doc/develop.sh +0 -15
  67. package/doc/pages/404.md +0 -17
  68. package/doc/pages.ini +0 -86
  69. package/doc/static/highlight.js +0 -8
  70. package/doc/static/koffi.css +0 -11
  71. package/doc/static/koffi.png +0 -0
  72. package/doc/static/logo.webp +0 -0
  73. package/doc/static/perf_linux.png +0 -0
  74. package/doc/static/perf_windows.png +0 -0
  75. package/doc/static/print.css +0 -10
  76. package/doc/templates/code.html +0 -48
  77. package/doc/templates/page.html +0 -47
  78. package/src/koffi/cmake/raylib.cmake +0 -85
  79. package/src/koffi/cmake/sqlite3.cmake +0 -9
  80. package/src/koffi/examples/electron-builder/README.md +0 -11
  81. package/src/koffi/examples/electron-builder/package.json +0 -21
  82. package/src/koffi/examples/electron-builder/src/app.js +0 -20
  83. package/src/koffi/examples/electron-builder/src/index.html +0 -143
  84. package/src/koffi/examples/electron-builder/src/preload.js +0 -5
  85. package/src/koffi/examples/electron-forge/README.md +0 -25
  86. package/src/koffi/examples/electron-forge/forge.config.js +0 -63
  87. package/src/koffi/examples/electron-forge/package.json +0 -39
  88. package/src/koffi/examples/electron-forge/src/index.css +0 -7
  89. package/src/koffi/examples/electron-forge/src/index.html +0 -143
  90. package/src/koffi/examples/electron-forge/src/main.js +0 -52
  91. package/src/koffi/examples/electron-forge/src/preload.js +0 -5
  92. package/src/koffi/examples/electron-forge/src/renderer.js +0 -31
  93. package/src/koffi/examples/electron-forge/webpack.main.config.js +0 -11
  94. package/src/koffi/examples/electron-forge/webpack.renderer.config.js +0 -13
  95. package/src/koffi/examples/electron-forge/webpack.rules.js +0 -35
  96. package/src/koffi/examples/node-esbuild/README.md +0 -19
  97. package/src/koffi/examples/node-esbuild/index.js +0 -2
  98. package/src/koffi/examples/node-esbuild/package.json +0 -16
  99. package/src/koffi/examples/nwjs/README.md +0 -20
  100. package/src/koffi/examples/nwjs/package.json +0 -11
  101. package/src/koffi/examples/nwjs/src/index.html +0 -145
  102. package/src/koffi/examples/nwjs/src/package.json +0 -10
  103. package/src/koffi/examples/yao-pkg/README.md +0 -17
  104. package/src/koffi/examples/yao-pkg/index.js +0 -2
  105. package/src/koffi/examples/yao-pkg/package.json +0 -22
  106. package/src/koffi/src/primitives.inc +0 -39
  107. package/src/koffi/src/trampolines/armasm.inc +0 -32771
  108. package/src/koffi/src/trampolines/gnu.inc +0 -24577
  109. package/src/koffi/src/trampolines/masm32.inc +0 -32769
  110. package/src/koffi/src/trampolines/masm64.inc +0 -32769
  111. package/src/koffi/src/trampolines/prototypes.inc +0 -16388
  112. package/vendor/node-addon-api/CHANGELOG.md +0 -1272
  113. package/vendor/node-addon-api/CODE_OF_CONDUCT.md +0 -4
  114. package/vendor/node-addon-api/CONTRIBUTING.md +0 -203
  115. package/vendor/node-addon-api/appveyor.yml +0 -37
  116. package/vendor/node-addon-api/benchmark/README.md +0 -47
  117. package/vendor/node-addon-api/benchmark/binding.gyp +0 -25
  118. package/vendor/node-addon-api/benchmark/function_args.cc +0 -250
  119. package/vendor/node-addon-api/benchmark/function_args.js +0 -60
  120. package/vendor/node-addon-api/benchmark/index.js +0 -34
  121. package/vendor/node-addon-api/benchmark/property_descriptor.cc +0 -84
  122. package/vendor/node-addon-api/benchmark/property_descriptor.js +0 -38
  123. package/vendor/node-addon-api/common.gypi +0 -21
  124. package/vendor/node-addon-api/doc/README.md +0 -145
  125. package/vendor/node-addon-api/doc/addon.md +0 -163
  126. package/vendor/node-addon-api/doc/array.md +0 -81
  127. package/vendor/node-addon-api/doc/array_buffer.md +0 -165
  128. package/vendor/node-addon-api/doc/async_context.md +0 -86
  129. package/vendor/node-addon-api/doc/async_operations.md +0 -31
  130. package/vendor/node-addon-api/doc/async_worker.md +0 -428
  131. package/vendor/node-addon-api/doc/async_worker_variants.md +0 -578
  132. package/vendor/node-addon-api/doc/basic_env.md +0 -200
  133. package/vendor/node-addon-api/doc/bigint.md +0 -97
  134. package/vendor/node-addon-api/doc/boolean.md +0 -68
  135. package/vendor/node-addon-api/doc/buffer.md +0 -245
  136. package/vendor/node-addon-api/doc/callback_scope.md +0 -54
  137. package/vendor/node-addon-api/doc/callbackinfo.md +0 -97
  138. package/vendor/node-addon-api/doc/checker-tool.md +0 -32
  139. package/vendor/node-addon-api/doc/class_property_descriptor.md +0 -123
  140. package/vendor/node-addon-api/doc/cmake-js.md +0 -87
  141. package/vendor/node-addon-api/doc/contributing/creating_a_release.md +0 -95
  142. package/vendor/node-addon-api/doc/conversion-tool.md +0 -28
  143. package/vendor/node-addon-api/doc/dataview.md +0 -248
  144. package/vendor/node-addon-api/doc/date.md +0 -68
  145. package/vendor/node-addon-api/doc/env.md +0 -87
  146. package/vendor/node-addon-api/doc/error.md +0 -120
  147. package/vendor/node-addon-api/doc/error_handling.md +0 -266
  148. package/vendor/node-addon-api/doc/escapable_handle_scope.md +0 -80
  149. package/vendor/node-addon-api/doc/external.md +0 -79
  150. package/vendor/node-addon-api/doc/external_buffer.md +0 -18
  151. package/vendor/node-addon-api/doc/finalization.md +0 -153
  152. package/vendor/node-addon-api/doc/function.md +0 -402
  153. package/vendor/node-addon-api/doc/function_reference.md +0 -238
  154. package/vendor/node-addon-api/doc/generator.md +0 -13
  155. package/vendor/node-addon-api/doc/handle_scope.md +0 -77
  156. package/vendor/node-addon-api/doc/hierarchy.md +0 -95
  157. package/vendor/node-addon-api/doc/instance_wrap.md +0 -408
  158. package/vendor/node-addon-api/doc/maybe.md +0 -76
  159. package/vendor/node-addon-api/doc/memory_management.md +0 -27
  160. package/vendor/node-addon-api/doc/name.md +0 -29
  161. package/vendor/node-addon-api/doc/node-gyp.md +0 -82
  162. package/vendor/node-addon-api/doc/number.md +0 -163
  163. package/vendor/node-addon-api/doc/object.md +0 -411
  164. package/vendor/node-addon-api/doc/object_lifetime_management.md +0 -83
  165. package/vendor/node-addon-api/doc/object_reference.md +0 -117
  166. package/vendor/node-addon-api/doc/object_wrap.md +0 -604
  167. package/vendor/node-addon-api/doc/prebuild_tools.md +0 -16
  168. package/vendor/node-addon-api/doc/promises.md +0 -130
  169. package/vendor/node-addon-api/doc/property_descriptor.md +0 -286
  170. package/vendor/node-addon-api/doc/propertylvalue.md +0 -50
  171. package/vendor/node-addon-api/doc/range_error.md +0 -59
  172. package/vendor/node-addon-api/doc/reference.md +0 -113
  173. package/vendor/node-addon-api/doc/setup.md +0 -115
  174. package/vendor/node-addon-api/doc/string.md +0 -93
  175. package/vendor/node-addon-api/doc/symbol.md +0 -61
  176. package/vendor/node-addon-api/doc/syntax_error.md +0 -66
  177. package/vendor/node-addon-api/doc/threadsafe.md +0 -121
  178. package/vendor/node-addon-api/doc/threadsafe_function.md +0 -290
  179. package/vendor/node-addon-api/doc/type_error.md +0 -59
  180. package/vendor/node-addon-api/doc/type_taggable.md +0 -40
  181. package/vendor/node-addon-api/doc/typed_array.md +0 -78
  182. package/vendor/node-addon-api/doc/typed_array_of.md +0 -137
  183. package/vendor/node-addon-api/doc/typed_threadsafe_function.md +0 -306
  184. package/vendor/node-addon-api/doc/value.md +0 -368
  185. package/vendor/node-addon-api/doc/version_management.md +0 -43
  186. package/vendor/node-addon-api/eslint.config.js +0 -5
  187. package/vendor/node-addon-api/except.gypi +0 -25
  188. package/vendor/node-addon-api/index.js +0 -14
  189. package/vendor/node-addon-api/node_addon_api.gyp +0 -42
  190. package/vendor/node-addon-api/node_api.gyp +0 -9
  191. package/vendor/node-addon-api/noexcept.gypi +0 -26
  192. package/vendor/node-addon-api/nothing.c +0 -0
  193. package/vendor/node-addon-api/package-support.json +0 -21
  194. package/vendor/node-addon-api/package.json +0 -480
  195. package/vendor/node-addon-api/release-please-config.json +0 -15
  196. package/vendor/node-addon-api/test/README.md +0 -91
  197. package/vendor/node-addon-api/test/addon.cc +0 -44
  198. package/vendor/node-addon-api/test/addon.js +0 -7
  199. package/vendor/node-addon-api/test/addon_build/index.js +0 -49
  200. package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +0 -18
  201. package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +0 -63
  202. package/vendor/node-addon-api/test/addon_build/tpl/index.js +0 -9
  203. package/vendor/node-addon-api/test/addon_build/tpl/package.json +0 -11
  204. package/vendor/node-addon-api/test/addon_data.cc +0 -98
  205. package/vendor/node-addon-api/test/addon_data.js +0 -24
  206. package/vendor/node-addon-api/test/array_buffer.cc +0 -243
  207. package/vendor/node-addon-api/test/array_buffer.js +0 -70
  208. package/vendor/node-addon-api/test/async_context.cc +0 -36
  209. package/vendor/node-addon-api/test/async_context.js +0 -122
  210. package/vendor/node-addon-api/test/async_progress_queue_worker.cc +0 -248
  211. package/vendor/node-addon-api/test/async_progress_queue_worker.js +0 -180
  212. package/vendor/node-addon-api/test/async_progress_worker.cc +0 -357
  213. package/vendor/node-addon-api/test/async_progress_worker.js +0 -200
  214. package/vendor/node-addon-api/test/async_worker.cc +0 -341
  215. package/vendor/node-addon-api/test/async_worker.js +0 -264
  216. package/vendor/node-addon-api/test/async_worker_nocallback.js +0 -19
  217. package/vendor/node-addon-api/test/async_worker_persistent.cc +0 -63
  218. package/vendor/node-addon-api/test/async_worker_persistent.js +0 -24
  219. package/vendor/node-addon-api/test/basic_types/array.cc +0 -40
  220. package/vendor/node-addon-api/test/basic_types/array.js +0 -34
  221. package/vendor/node-addon-api/test/basic_types/boolean.cc +0 -40
  222. package/vendor/node-addon-api/test/basic_types/boolean.js +0 -34
  223. package/vendor/node-addon-api/test/basic_types/number.cc +0 -105
  224. package/vendor/node-addon-api/test/basic_types/number.js +0 -115
  225. package/vendor/node-addon-api/test/basic_types/value.cc +0 -177
  226. package/vendor/node-addon-api/test/basic_types/value.js +0 -173
  227. package/vendor/node-addon-api/test/bigint.cc +0 -91
  228. package/vendor/node-addon-api/test/bigint.js +0 -53
  229. package/vendor/node-addon-api/test/binding-swallowexcept.cc +0 -12
  230. package/vendor/node-addon-api/test/binding.cc +0 -200
  231. package/vendor/node-addon-api/test/binding.gyp +0 -160
  232. package/vendor/node-addon-api/test/buffer.cc +0 -185
  233. package/vendor/node-addon-api/test/buffer.h +0 -26
  234. package/vendor/node-addon-api/test/buffer.js +0 -150
  235. package/vendor/node-addon-api/test/buffer_new_or_copy-inl.h +0 -68
  236. package/vendor/node-addon-api/test/buffer_no_external.cc +0 -24
  237. package/vendor/node-addon-api/test/callbackInfo.cc +0 -27
  238. package/vendor/node-addon-api/test/callbackInfo.js +0 -9
  239. package/vendor/node-addon-api/test/callbackscope.cc +0 -39
  240. package/vendor/node-addon-api/test/callbackscope.js +0 -49
  241. package/vendor/node-addon-api/test/child_processes/addon.js +0 -11
  242. package/vendor/node-addon-api/test/child_processes/addon_data.js +0 -24
  243. package/vendor/node-addon-api/test/child_processes/objectwrap_function.js +0 -22
  244. package/vendor/node-addon-api/test/child_processes/threadsafe_function_exception.js +0 -33
  245. package/vendor/node-addon-api/test/child_processes/typed_threadsafe_function_exception.js +0 -19
  246. package/vendor/node-addon-api/test/common/index.js +0 -246
  247. package/vendor/node-addon-api/test/common/test_helper.h +0 -71
  248. package/vendor/node-addon-api/test/dataview/dataview.cc +0 -48
  249. package/vendor/node-addon-api/test/dataview/dataview.js +0 -35
  250. package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +0 -115
  251. package/vendor/node-addon-api/test/dataview/dataview_read_write.js +0 -92
  252. package/vendor/node-addon-api/test/date.cc +0 -45
  253. package/vendor/node-addon-api/test/date.js +0 -18
  254. package/vendor/node-addon-api/test/env_cleanup.cc +0 -100
  255. package/vendor/node-addon-api/test/env_cleanup.js +0 -55
  256. package/vendor/node-addon-api/test/env_misc.cc +0 -25
  257. package/vendor/node-addon-api/test/env_misc.js +0 -12
  258. package/vendor/node-addon-api/test/error.cc +0 -436
  259. package/vendor/node-addon-api/test/error.js +0 -111
  260. package/vendor/node-addon-api/test/error_handling_for_primitives.cc +0 -13
  261. package/vendor/node-addon-api/test/error_handling_for_primitives.js +0 -29
  262. package/vendor/node-addon-api/test/error_terminating_environment.js +0 -99
  263. package/vendor/node-addon-api/test/except_all.cc +0 -22
  264. package/vendor/node-addon-api/test/except_all.js +0 -14
  265. package/vendor/node-addon-api/test/exports.js +0 -19
  266. package/vendor/node-addon-api/test/external.cc +0 -85
  267. package/vendor/node-addon-api/test/external.js +0 -85
  268. package/vendor/node-addon-api/test/finalizer_order.cc +0 -152
  269. package/vendor/node-addon-api/test/finalizer_order.js +0 -98
  270. package/vendor/node-addon-api/test/function.cc +0 -338
  271. package/vendor/node-addon-api/test/function.js +0 -137
  272. package/vendor/node-addon-api/test/function_reference.cc +0 -204
  273. package/vendor/node-addon-api/test/function_reference.js +0 -157
  274. package/vendor/node-addon-api/test/globalObject/global_object.cc +0 -61
  275. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +0 -31
  276. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +0 -58
  277. package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +0 -40
  278. package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +0 -56
  279. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +0 -28
  280. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +0 -46
  281. package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +0 -31
  282. package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +0 -56
  283. package/vendor/node-addon-api/test/handlescope.cc +0 -86
  284. package/vendor/node-addon-api/test/handlescope.js +0 -16
  285. package/vendor/node-addon-api/test/index.js +0 -160
  286. package/vendor/node-addon-api/test/maybe/check.cc +0 -69
  287. package/vendor/node-addon-api/test/maybe/index.js +0 -50
  288. package/vendor/node-addon-api/test/memory_management.cc +0 -18
  289. package/vendor/node-addon-api/test/memory_management.js +0 -9
  290. package/vendor/node-addon-api/test/movable_callbacks.cc +0 -23
  291. package/vendor/node-addon-api/test/movable_callbacks.js +0 -21
  292. package/vendor/node-addon-api/test/name.cc +0 -110
  293. package/vendor/node-addon-api/test/name.js +0 -59
  294. package/vendor/node-addon-api/test/napi_child.js +0 -14
  295. package/vendor/node-addon-api/test/object/delete_property.cc +0 -38
  296. package/vendor/node-addon-api/test/object/delete_property.js +0 -41
  297. package/vendor/node-addon-api/test/object/finalizer.cc +0 -30
  298. package/vendor/node-addon-api/test/object/finalizer.js +0 -28
  299. package/vendor/node-addon-api/test/object/get_property.cc +0 -34
  300. package/vendor/node-addon-api/test/object/get_property.js +0 -40
  301. package/vendor/node-addon-api/test/object/has_own_property.cc +0 -34
  302. package/vendor/node-addon-api/test/object/has_own_property.js +0 -34
  303. package/vendor/node-addon-api/test/object/has_property.cc +0 -38
  304. package/vendor/node-addon-api/test/object/has_property.js +0 -37
  305. package/vendor/node-addon-api/test/object/object.cc +0 -430
  306. package/vendor/node-addon-api/test/object/object.js +0 -218
  307. package/vendor/node-addon-api/test/object/object_deprecated.cc +0 -70
  308. package/vendor/node-addon-api/test/object/object_deprecated.js +0 -42
  309. package/vendor/node-addon-api/test/object/object_freeze_seal.cc +0 -25
  310. package/vendor/node-addon-api/test/object/object_freeze_seal.js +0 -61
  311. package/vendor/node-addon-api/test/object/set_property.cc +0 -45
  312. package/vendor/node-addon-api/test/object/set_property.js +0 -30
  313. package/vendor/node-addon-api/test/object/subscript_operator.cc +0 -58
  314. package/vendor/node-addon-api/test/object/subscript_operator.js +0 -17
  315. package/vendor/node-addon-api/test/object_reference.cc +0 -417
  316. package/vendor/node-addon-api/test/object_reference.js +0 -262
  317. package/vendor/node-addon-api/test/objectwrap.cc +0 -295
  318. package/vendor/node-addon-api/test/objectwrap.js +0 -309
  319. package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +0 -26
  320. package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +0 -18
  321. package/vendor/node-addon-api/test/objectwrap_function.cc +0 -43
  322. package/vendor/node-addon-api/test/objectwrap_function.js +0 -6
  323. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +0 -30
  324. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +0 -13
  325. package/vendor/node-addon-api/test/objectwrap_removewrap.cc +0 -45
  326. package/vendor/node-addon-api/test/objectwrap_removewrap.js +0 -32
  327. package/vendor/node-addon-api/test/objectwrap_worker_thread.js +0 -20
  328. package/vendor/node-addon-api/test/promise.cc +0 -111
  329. package/vendor/node-addon-api/test/promise.js +0 -43
  330. package/vendor/node-addon-api/test/reference.cc +0 -78
  331. package/vendor/node-addon-api/test/reference.js +0 -20
  332. package/vendor/node-addon-api/test/require_basic_finalizers/index.js +0 -38
  333. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/addon.cc +0 -12
  334. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/binding.gyp +0 -48
  335. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/index.js +0 -3
  336. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/package.json +0 -11
  337. package/vendor/node-addon-api/test/run_script.cc +0 -56
  338. package/vendor/node-addon-api/test/run_script.js +0 -45
  339. package/vendor/node-addon-api/test/symbol.cc +0 -79
  340. package/vendor/node-addon-api/test/symbol.js +0 -66
  341. package/vendor/node-addon-api/test/testUtil.js +0 -54
  342. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +0 -230
  343. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +0 -225
  344. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +0 -155
  345. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +0 -13
  346. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.cc +0 -50
  347. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.js +0 -20
  348. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +0 -125
  349. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +0 -14
  350. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +0 -27
  351. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +0 -7
  352. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +0 -240
  353. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +0 -59
  354. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +0 -55
  355. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +0 -98
  356. package/vendor/node-addon-api/test/thunking_manual.cc +0 -127
  357. package/vendor/node-addon-api/test/thunking_manual.js +0 -16
  358. package/vendor/node-addon-api/test/type_taggable.cc +0 -66
  359. package/vendor/node-addon-api/test/type_taggable.js +0 -59
  360. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +0 -215
  361. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +0 -188
  362. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +0 -120
  363. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +0 -14
  364. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.cc +0 -39
  365. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.js +0 -13
  366. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +0 -127
  367. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +0 -14
  368. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +0 -32
  369. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +0 -8
  370. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +0 -237
  371. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +0 -59
  372. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +0 -67
  373. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +0 -98
  374. package/vendor/node-addon-api/test/typedarray-bigint.js +0 -58
  375. package/vendor/node-addon-api/test/typedarray.cc +0 -413
  376. package/vendor/node-addon-api/test/typedarray.js +0 -103
  377. package/vendor/node-addon-api/test/value_type_cast.cc +0 -60
  378. package/vendor/node-addon-api/test/value_type_cast.js +0 -106
  379. package/vendor/node-addon-api/test/version_management.cc +0 -28
  380. package/vendor/node-addon-api/test/version_management.js +0 -29
  381. package/vendor/node-addon-api/tools/README.md +0 -73
  382. package/vendor/node-addon-api/tools/check-napi.js +0 -99
  383. package/vendor/node-addon-api/tools/clang-format.js +0 -71
  384. package/vendor/node-addon-api/tools/conversion.js +0 -301
  385. package/vendor/node-addon-api/unit-test/README.md +0 -28
  386. package/vendor/node-addon-api/unit-test/binding-file-template.js +0 -39
  387. package/vendor/node-addon-api/unit-test/binding.gyp +0 -72
  388. package/vendor/node-addon-api/unit-test/exceptions.js +0 -32
  389. package/vendor/node-addon-api/unit-test/generate-binding-cc.js +0 -61
  390. package/vendor/node-addon-api/unit-test/injectTestParams.js +0 -101
  391. package/vendor/node-addon-api/unit-test/listOfTestModules.js +0 -88
  392. package/vendor/node-addon-api/unit-test/matchModules.js +0 -65
  393. package/vendor/node-addon-api/unit-test/setup.js +0 -13
  394. package/vendor/node-addon-api/unit-test/spawnTask.js +0 -26
  395. package/vendor/node-addon-api/unit-test/test.js +0 -30
  396. package/vendor/node-api-headers/CHANGELOG.md +0 -130
  397. package/vendor/node-api-headers/CODE_OF_CONDUCT.md +0 -4
  398. package/vendor/node-api-headers/CONTRIBUTING.md +0 -32
  399. package/vendor/node-api-headers/CREATING_A_RELEASE.md +0 -68
  400. package/vendor/node-api-headers/index.js +0 -17
  401. package/vendor/node-api-headers/lib/clang-utils.js +0 -50
  402. package/vendor/node-api-headers/lib/parse-utils.js +0 -92
  403. package/vendor/node-api-headers/package.json +0 -59
  404. package/vendor/node-api-headers/release-please-config.json +0 -12
  405. package/vendor/node-api-headers/scripts/update-headers.js +0 -246
  406. package/vendor/node-api-headers/scripts/write-symbols.js +0 -154
  407. package/vendor/node-api-headers/scripts/write-win32-def.js +0 -52
  408. package/vendor/node-api-headers/symbols.js +0 -257
  409. package/vendor/node-api-headers/test/parse-utils.js +0 -21
  410. /package/doc/{pages/benchmarks.md → benchmarks.md} +0 -0
  411. /package/doc/{pages/callbacks.md → callbacks.md} +0 -0
  412. /package/doc/{pages/contribute.md → contribute.md} +0 -0
  413. /package/doc/{pages/functions.md → functions.md} +0 -0
  414. /package/doc/{pages/index.md → index.md} +0 -0
  415. /package/doc/{pages/input.md → input.md} +0 -0
  416. /package/doc/{pages/migration.md → migration.md} +0 -0
  417. /package/doc/{pages/misc.md → misc.md} +0 -0
  418. /package/doc/{pages/output.md → output.md} +0 -0
  419. /package/doc/{pages/packaging.md → packaging.md} +0 -0
  420. /package/doc/{pages/platforms.md → platforms.md} +0 -0
  421. /package/doc/{pages/pointers.md → pointers.md} +0 -0
  422. /package/doc/{pages/start.md → start.md} +0 -0
  423. /package/doc/{pages/unions.md → unions.md} +0 -0
  424. /package/doc/{pages/variables.md → variables.md} +0 -0
  425. /package/src/koffi/src/{abi/loong64.cc → abi_loong64.cc} +0 -0
@@ -1,59 +0,0 @@
1
- 'use strict';
2
- const assert = require('assert');
3
-
4
- /**
5
- *
6
- * ThreadSafeFunction Tests: Thread Id Sums
7
- *
8
- * Every native C++ function that utilizes the TSFN will call the registered
9
- * callback with the thread id. Passing Array.prototype.push with a bound array
10
- * will push the thread id to the array. Therefore, starting `N` threads, we
11
- * will expect the sum of all elements in the array to be `(N-1) * (N) / 2` (as
12
- * thread IDs are 0-based)
13
- *
14
- * We check different methods of passing a ThreadSafeFunction around multiple
15
- * threads:
16
- * - `testWithTSFN`: The main thread creates the TSFN. Then, it creates
17
- * threads, passing the TSFN at thread construction. The number of threads is
18
- * static (known at TSFN creation).
19
- * - `testDelayedTSFN`: The main thread creates threads, passing a promise to a
20
- * TSFN at construction. Then, it creates the TSFN, and resolves each
21
- * threads' promise. The number of threads is static.
22
- * - `testAcquire`: The native binding returns a function to start a new. A
23
- * call to this function will return `false` once `N` calls have been made.
24
- * Each thread will acquire its own use of the TSFN, call it, and then
25
- * release.
26
- */
27
-
28
- const THREAD_COUNT = 5;
29
- const EXPECTED_SUM = (THREAD_COUNT - 1) * (THREAD_COUNT) / 2;
30
-
31
- module.exports = require('../common').runTest(test);
32
-
33
- /** @param {number[]} N */
34
- const sum = (N) => N.reduce((sum, n) => sum + n, 0);
35
-
36
- function test (binding) {
37
- async function check (bindingFunction) {
38
- const calls = [];
39
- const result = await bindingFunction(THREAD_COUNT, Array.prototype.push.bind(calls));
40
- assert.ok(result);
41
- assert.equal(sum(calls), EXPECTED_SUM);
42
- }
43
-
44
- async function checkAcquire () {
45
- const calls = [];
46
- const { promise, createThread, stopThreads } = binding.threadsafe_function_sum.testAcquire(Array.prototype.push.bind(calls));
47
- for (let i = 0; i < THREAD_COUNT; i++) {
48
- createThread();
49
- }
50
- stopThreads();
51
- const result = await promise;
52
- assert.ok(result);
53
- assert.equal(sum(calls), EXPECTED_SUM);
54
- }
55
-
56
- return check(binding.threadsafe_function_sum.testDelayedTSFN)
57
- .then(() => check(binding.threadsafe_function_sum.testWithTSFN))
58
- .then(() => checkAcquire());
59
- }
@@ -1,55 +0,0 @@
1
- #include "napi.h"
2
- #include "test_helper.h"
3
-
4
- #if (NAPI_VERSION > 3)
5
-
6
- using namespace Napi;
7
-
8
- namespace {
9
-
10
- static Value TestUnref(const CallbackInfo& info) {
11
- Napi::Env env = info.Env();
12
- Object global = env.Global();
13
- Object resource = info[0].As<Object>();
14
- Function cb = info[1].As<Function>();
15
- Function setTimeout = MaybeUnwrap(global.Get("setTimeout")).As<Function>();
16
- ThreadSafeFunction* tsfn = new ThreadSafeFunction;
17
-
18
- *tsfn = ThreadSafeFunction::New(
19
- info.Env(), cb, resource, "Test", 1, 1, [tsfn](Napi::Env /* env */) {
20
- delete tsfn;
21
- });
22
-
23
- tsfn->BlockingCall();
24
-
25
- setTimeout.Call(
26
- global,
27
- {Function::New(
28
- env, [tsfn](const CallbackInfo& info) { tsfn->Unref(info.Env()); }),
29
- Number::New(env, 100)});
30
-
31
- return info.Env().Undefined();
32
- }
33
-
34
- static Value TestRef(const CallbackInfo& info) {
35
- Function cb = info[1].As<Function>();
36
-
37
- auto tsfn = ThreadSafeFunction::New(info.Env(), cb, "testRes", 1, 1);
38
-
39
- tsfn.BlockingCall();
40
- tsfn.Unref(info.Env());
41
- tsfn.Ref(info.Env());
42
-
43
- return info.Env().Undefined();
44
- }
45
-
46
- } // namespace
47
-
48
- Object InitThreadSafeFunctionUnref(Env env) {
49
- Object exports = Object::New(env);
50
- exports["testUnref"] = Function::New(env, TestUnref);
51
- exports["testRef"] = Function::New(env, TestRef);
52
- return exports;
53
- }
54
-
55
- #endif
@@ -1,98 +0,0 @@
1
- 'use strict';
2
-
3
- const assert = require('assert');
4
-
5
- const isMainProcess = process.argv[1] !== __filename;
6
-
7
- /**
8
- * In order to test that the event loop exits even with an active TSFN, we need
9
- * to spawn a new process for the test.
10
- * - Main process: spawns new node instance, executing this script
11
- * - Child process: creates TSFN. Native module Unref's via setTimeout after some time but does NOT call Release.
12
- *
13
- * Main process should expect child process to exit.
14
- *
15
- * We also added a new test case for `Ref`. The idea being, if a TSFN is active, the event loop that it belongs to should not exit
16
- * Our setup is similar to the test for the `Unref` case, with the difference being now we are expecting the child process to hang
17
- */
18
-
19
- if (isMainProcess) {
20
- module.exports = require('../common').runTestWithBindingPath(test);
21
- } else {
22
- const isTestingRef = (process.argv[3] === 'true');
23
-
24
- if (isTestingRef) {
25
- execTSFNRefTest(process.argv[2]);
26
- } else {
27
- execTSFNUnrefTest(process.argv[2]);
28
- }
29
- }
30
-
31
- function testUnRefCallback (resolve, reject, bindingFile) {
32
- const child = require('../napi_child').spawn(process.argv[0], [
33
- '--expose-gc', __filename, bindingFile, false
34
- ], { stdio: 'inherit' });
35
-
36
- let timeout = setTimeout(function () {
37
- child.kill();
38
- timeout = 0;
39
- reject(new Error('Expected child to die'));
40
- }, 5000);
41
-
42
- child.on('error', (err) => {
43
- clearTimeout(timeout);
44
- timeout = 0;
45
- reject(new Error(err));
46
- });
47
-
48
- child.on('close', (code) => {
49
- if (timeout) clearTimeout(timeout);
50
- assert.strictEqual(code, 0, 'Expected return value 0');
51
- resolve();
52
- });
53
- }
54
-
55
- function testRefCallback (resolve, reject, bindingFile) {
56
- const child = require('../napi_child').spawn(process.argv[0], [
57
- '--expose-gc', __filename, bindingFile, true
58
- ], { stdio: 'inherit' });
59
-
60
- let timeout = setTimeout(function () {
61
- child.kill();
62
- timeout = 0;
63
- resolve();
64
- }, 1000);
65
-
66
- child.on('error', (err) => {
67
- clearTimeout(timeout);
68
- timeout = 0;
69
- reject(new Error(err));
70
- });
71
-
72
- child.on('close', (code) => {
73
- if (timeout) clearTimeout(timeout);
74
-
75
- reject(new Error('We expected Child to hang'));
76
- });
77
- }
78
-
79
- function test (bindingFile) {
80
- // Main process
81
- return new Promise((resolve, reject) => {
82
- testUnRefCallback(resolve, reject, bindingFile);
83
- }).then(() => {
84
- return new Promise((resolve, reject) => {
85
- testRefCallback(resolve, reject, bindingFile);
86
- });
87
- });
88
- }
89
-
90
- function execTSFNUnrefTest (bindingFile) {
91
- const binding = require(bindingFile);
92
- binding.threadsafe_function_unref.testUnref({}, () => { });
93
- }
94
-
95
- function execTSFNRefTest (bindingFile) {
96
- const binding = require(bindingFile);
97
- binding.threadsafe_function_unref.testRef({}, () => { });
98
- }
@@ -1,127 +0,0 @@
1
- #include <napi.h>
2
-
3
- // The formulaic comment below should accompany any code that results in an
4
- // internal piece of heap data getting created, because each such piece of heap
5
- // data must be attached to an object by way of a deleter which gets called when
6
- // the object gets garbage-collected.
7
- //
8
- // At the very least, you can add a fprintf(stderr, ...) to the deleter in
9
- // napi-inl.h and then count the number of times the deleter prints by running
10
- // node --expose-gc test/thunking_manual.js and counting the number of prints
11
- // between the two rows of dashes. That number should coincide with the number
12
- // of formulaic comments below.
13
- //
14
- // Note that currently this result can only be achieved with node-chakracore,
15
- // because V8 does not garbage-collect classes.
16
-
17
- static Napi::Value TestMethod(const Napi::CallbackInfo& /*info*/) {
18
- return Napi::Value();
19
- }
20
-
21
- static Napi::Value TestGetter(const Napi::CallbackInfo& /*info*/) {
22
- return Napi::Value();
23
- }
24
-
25
- static void TestSetter(const Napi::CallbackInfo& /*info*/) {}
26
-
27
- class TestClass : public Napi::ObjectWrap<TestClass> {
28
- public:
29
- TestClass(const Napi::CallbackInfo& info) : ObjectWrap<TestClass>(info) {}
30
- static Napi::Value TestClassStaticMethod(const Napi::CallbackInfo& info) {
31
- return Napi::Number::New(info.Env(), 42);
32
- }
33
-
34
- static void TestClassStaticVoidMethod(const Napi::CallbackInfo& /*info*/) {}
35
-
36
- Napi::Value TestClassInstanceMethod(const Napi::CallbackInfo& info) {
37
- return Napi::Number::New(info.Env(), 42);
38
- }
39
-
40
- void TestClassInstanceVoidMethod(const Napi::CallbackInfo& /*info*/) {}
41
-
42
- Napi::Value TestClassInstanceGetter(const Napi::CallbackInfo& info) {
43
- return Napi::Number::New(info.Env(), 42);
44
- }
45
-
46
- void TestClassInstanceSetter(const Napi::CallbackInfo& /*info*/,
47
- const Napi::Value& /*new_value*/) {}
48
-
49
- static Napi::Function NewClass(Napi::Env env) {
50
- return DefineClass(
51
- env,
52
- "TestClass",
53
- {// Make sure to check that the deleter gets called.
54
- StaticMethod("staticMethod", TestClassStaticMethod),
55
- // Make sure to check that the deleter gets called.
56
- StaticMethod("staticVoidMethod", TestClassStaticVoidMethod),
57
- // Make sure to check that the deleter gets called.
58
- StaticMethod(Napi::Symbol::New(env, "staticMethod"),
59
- TestClassStaticMethod),
60
- // Make sure to check that the deleter gets called.
61
- StaticMethod(Napi::Symbol::New(env, "staticVoidMethod"),
62
- TestClassStaticVoidMethod),
63
- // Make sure to check that the deleter gets called.
64
- InstanceMethod("instanceMethod", &TestClass::TestClassInstanceMethod),
65
- // Make sure to check that the deleter gets called.
66
- InstanceMethod("instanceVoidMethod",
67
- &TestClass::TestClassInstanceVoidMethod),
68
- // Make sure to check that the deleter gets called.
69
- InstanceMethod(Napi::Symbol::New(env, "instanceMethod"),
70
- &TestClass::TestClassInstanceMethod),
71
- // Make sure to check that the deleter gets called.
72
- InstanceMethod(Napi::Symbol::New(env, "instanceVoidMethod"),
73
- &TestClass::TestClassInstanceVoidMethod),
74
- // Make sure to check that the deleter gets called.
75
- InstanceAccessor("instanceAccessor",
76
- &TestClass::TestClassInstanceGetter,
77
- &TestClass::TestClassInstanceSetter)});
78
- }
79
- };
80
-
81
- static Napi::Value CreateTestObject(const Napi::CallbackInfo& info) {
82
- Napi::Env env = info.Env();
83
- Napi::Object item = Napi::Object::New(env);
84
-
85
- // Make sure to check that the deleter gets called.
86
- item["testMethod"] = Napi::Function::New(env, TestMethod, "testMethod");
87
-
88
- item.DefineProperties({
89
- // Make sure to check that the deleter gets called.
90
- Napi::PropertyDescriptor::Accessor(env, item, "accessor_1", TestGetter),
91
- // Make sure to check that the deleter gets called.
92
- Napi::PropertyDescriptor::Accessor(
93
- env, item, std::string("accessor_1_std_string"), TestGetter),
94
- // Make sure to check that the deleter gets called.
95
- Napi::PropertyDescriptor::Accessor(
96
- env,
97
- item,
98
- Napi::String::New(info.Env(), "accessor_1_js_string"),
99
- TestGetter),
100
- // Make sure to check that the deleter gets called.
101
- Napi::PropertyDescriptor::Accessor(
102
- env, item, "accessor_2", TestGetter, TestSetter),
103
- // Make sure to check that the deleter gets called.
104
- Napi::PropertyDescriptor::Accessor(env,
105
- item,
106
- std::string("accessor_2_std_string"),
107
- TestGetter,
108
- TestSetter),
109
- // Make sure to check that the deleter gets called.
110
- Napi::PropertyDescriptor::Accessor(
111
- env,
112
- item,
113
- Napi::String::New(env, "accessor_2_js_string"),
114
- TestGetter,
115
- TestSetter),
116
- Napi::PropertyDescriptor::Value("TestClass", TestClass::NewClass(env)),
117
- });
118
-
119
- return item;
120
- }
121
-
122
- Napi::Object InitThunkingManual(Napi::Env env) {
123
- Napi::Object exports = Napi::Object::New(env);
124
- exports["createTestObject"] =
125
- Napi::Function::New(env, CreateTestObject, "createTestObject");
126
- return exports;
127
- }
@@ -1,16 +0,0 @@
1
- // Flags: --expose-gc
2
- 'use strict';
3
-
4
- module.exports = require('./common').runTest(test);
5
-
6
- function test (binding) {
7
- console.log('Thunking: Performing initial GC');
8
- global.gc();
9
- console.log('Thunking: Creating test object');
10
- let object = binding.thunking_manual.createTestObject();
11
- // eslint-disable-next-line no-unused-vars
12
- object = null;
13
- console.log('Thunking: About to GC\n--------');
14
- global.gc();
15
- console.log('--------\nThunking: GC complete');
16
- }
@@ -1,66 +0,0 @@
1
- #include "napi.h"
2
-
3
- #if (NAPI_VERSION > 7)
4
-
5
- using namespace Napi;
6
-
7
- static const napi_type_tag type_tags[5] = {
8
- {0xdaf987b3cc62481a, 0xb745b0497f299531},
9
- {0xbb7936c374084d9b, 0xa9548d0762eeedb9},
10
- {0xa5ed9ce2e4c00c38, 0},
11
- {0, 0},
12
- {0xa5ed9ce2e4c00c38, 0xdaf987b3cc62481a},
13
- };
14
-
15
- template <TypeTaggable Factory(Env), typename NodeApiClass>
16
- class TestTypeTaggable {
17
- public:
18
- static Value TypeTaggedInstance(const CallbackInfo& info) {
19
- TypeTaggable instance = Factory(info.Env());
20
- uint32_t type_index = info[0].As<Number>().Int32Value();
21
-
22
- instance.TypeTag(&type_tags[type_index]);
23
-
24
- return instance;
25
- }
26
-
27
- static Value CheckTypeTag(const CallbackInfo& info) {
28
- uint32_t type_index = info[0].As<Number>().Int32Value();
29
- TypeTaggable instance = info[1].UnsafeAs<NodeApiClass>();
30
-
31
- return Boolean::New(info.Env(),
32
- instance.CheckTypeTag(&type_tags[type_index]));
33
- }
34
- };
35
-
36
- TypeTaggable ObjectFactory(Env env) {
37
- return Object::New(env);
38
- }
39
-
40
- TypeTaggable ExternalFactory(Env env) {
41
- // External does not accept a nullptr for its data.
42
- return External<void>::New(env, reinterpret_cast<void*>(0x1));
43
- }
44
-
45
- using TestObject = TestTypeTaggable<ObjectFactory, Object>;
46
- using TestExternal = TestTypeTaggable<ExternalFactory, External<void>>;
47
-
48
- Object InitTypeTaggable(Env env) {
49
- Object exports = Object::New(env);
50
-
51
- Object external = Object::New(env);
52
- exports["external"] = external;
53
- external["checkTypeTag"] = Function::New(env, &TestExternal::CheckTypeTag);
54
- external["typeTaggedInstance"] =
55
- Function::New(env, &TestExternal::TypeTaggedInstance);
56
-
57
- Object object = Object::New(env);
58
- exports["object"] = object;
59
- object["checkTypeTag"] = Function::New(env, &TestObject::CheckTypeTag);
60
- object["typeTaggedInstance"] =
61
- Function::New(env, &TestObject::TypeTaggedInstance);
62
-
63
- return exports;
64
- }
65
-
66
- #endif
@@ -1,59 +0,0 @@
1
- 'use strict';
2
-
3
- const assert = require('assert');
4
-
5
- module.exports = require('./common').runTest(test);
6
-
7
- function testTypeTaggable ({ typeTaggedInstance, checkTypeTag }) {
8
- const obj1 = typeTaggedInstance(0);
9
- const obj2 = typeTaggedInstance(1);
10
-
11
- // Verify that type tags are correctly accepted.
12
- assert.strictEqual(checkTypeTag(0, obj1), true);
13
- assert.strictEqual(checkTypeTag(1, obj2), true);
14
-
15
- // Verify that wrongly tagged objects are rejected.
16
- assert.strictEqual(checkTypeTag(0, obj2), false);
17
- assert.strictEqual(checkTypeTag(1, obj1), false);
18
-
19
- // Verify that untagged objects are rejected.
20
- assert.strictEqual(checkTypeTag(0, {}), false);
21
- assert.strictEqual(checkTypeTag(1, {}), false);
22
-
23
- // Node v14 and v16 have an issue checking type tags if the `upper` in
24
- // `napi_type_tag` is 0, so these tests can only be performed on Node version
25
- // >=18. See:
26
- // - https://github.com/nodejs/node/issues/43786
27
- // - https://github.com/nodejs/node/pull/43788
28
- const nodeVersion = parseInt(process.versions.node.split('.')[0]);
29
- if (nodeVersion < 18) {
30
- return;
31
- }
32
-
33
- const obj3 = typeTaggedInstance(2);
34
- const obj4 = typeTaggedInstance(3);
35
-
36
- // Verify that untagged objects are rejected.
37
- assert.strictEqual(checkTypeTag(0, {}), false);
38
- assert.strictEqual(checkTypeTag(1, {}), false);
39
-
40
- // Verify that type tags are correctly accepted.
41
- assert.strictEqual(checkTypeTag(0, obj1), true);
42
- assert.strictEqual(checkTypeTag(1, obj2), true);
43
- assert.strictEqual(checkTypeTag(2, obj3), true);
44
- assert.strictEqual(checkTypeTag(3, obj4), true);
45
-
46
- // Verify that wrongly tagged objects are rejected.
47
- assert.strictEqual(checkTypeTag(0, obj2), false);
48
- assert.strictEqual(checkTypeTag(1, obj1), false);
49
- assert.strictEqual(checkTypeTag(0, obj3), false);
50
- assert.strictEqual(checkTypeTag(1, obj4), false);
51
- assert.strictEqual(checkTypeTag(2, obj4), false);
52
- assert.strictEqual(checkTypeTag(3, obj3), false);
53
- assert.strictEqual(checkTypeTag(4, obj3), false);
54
- }
55
-
56
- function test (binding) {
57
- testTypeTaggable(binding.type_taggable.external);
58
- testTypeTaggable(binding.type_taggable.object);
59
- }
@@ -1,215 +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
-
16
- static struct ThreadSafeFunctionInfo {
17
- enum CallType { DEFAULT, BLOCKING, NON_BLOCKING } type;
18
- bool abort;
19
- bool startSecondary;
20
- FunctionReference jsFinalizeCallback;
21
- uint32_t maxQueueSize;
22
- bool closeCalledFromJs;
23
- std::mutex protect;
24
- std::condition_variable signal;
25
- } tsfnInfo;
26
-
27
- static void TSFNCallJS(Env env,
28
- Function jsCallback,
29
- ThreadSafeFunctionInfo* /* context */,
30
- int* data) {
31
- // A null environment signifies the threadsafe function has been finalized.
32
- if (!(env == nullptr || jsCallback == nullptr)) {
33
- // If called with no data
34
- if (data == nullptr) {
35
- jsCallback.Call({});
36
- } else {
37
- jsCallback.Call({Number::New(env, *data)});
38
- }
39
- }
40
- }
41
-
42
- using TSFN = TypedThreadSafeFunction<ThreadSafeFunctionInfo, int, TSFNCallJS>;
43
- static TSFN s_tsfn;
44
-
45
- // Thread data to transmit to JS
46
- static int ints[ARRAY_LENGTH];
47
-
48
- static void SecondaryThread() {
49
- if (s_tsfn.Release() != napi_ok) {
50
- Error::Fatal("TypedSecondaryThread", "ThreadSafeFunction.Release() failed");
51
- }
52
- }
53
-
54
- // Source thread producing the data
55
- static void DataSourceThread() {
56
- ThreadSafeFunctionInfo* info = s_tsfn.GetContext();
57
-
58
- if (info->startSecondary) {
59
- if (s_tsfn.Acquire() != napi_ok) {
60
- Error::Fatal("TypedDataSourceThread",
61
- "ThreadSafeFunction.Acquire() failed");
62
- }
63
-
64
- threads[1] = std::thread(SecondaryThread);
65
- }
66
-
67
- bool queueWasFull = false;
68
- bool queueWasClosing = false;
69
- for (int index = ARRAY_LENGTH - 1; index > -1 && !queueWasClosing; index--) {
70
- napi_status status = napi_generic_failure;
71
-
72
- switch (info->type) {
73
- case ThreadSafeFunctionInfo::DEFAULT:
74
- status = s_tsfn.BlockingCall();
75
- break;
76
- case ThreadSafeFunctionInfo::BLOCKING:
77
- status = s_tsfn.BlockingCall(&ints[index]);
78
- break;
79
- case ThreadSafeFunctionInfo::NON_BLOCKING:
80
- status = s_tsfn.NonBlockingCall(&ints[index]);
81
- break;
82
- }
83
-
84
- if (info->abort && info->type != ThreadSafeFunctionInfo::NON_BLOCKING) {
85
- // Let's make this thread really busy to give the main thread a chance to
86
- // abort / close.
87
- std::unique_lock<std::mutex> lk(info->protect);
88
- while (!info->closeCalledFromJs) {
89
- info->signal.wait(lk);
90
- }
91
- }
92
-
93
- switch (status) {
94
- case napi_queue_full:
95
- queueWasFull = true;
96
- index++;
97
- // fall through
98
-
99
- case napi_ok:
100
- continue;
101
-
102
- case napi_closing:
103
- queueWasClosing = true;
104
- break;
105
-
106
- default:
107
- Error::Fatal("TypedDataSourceThread",
108
- "ThreadSafeFunction.*Call() failed");
109
- }
110
- }
111
-
112
- if (info->type == ThreadSafeFunctionInfo::NON_BLOCKING && !queueWasFull) {
113
- Error::Fatal("TypedDataSourceThread", "Queue was never full");
114
- }
115
-
116
- if (info->abort && !queueWasClosing) {
117
- Error::Fatal("TypedDataSourceThread", "Queue was never closing");
118
- }
119
-
120
- if (!queueWasClosing && s_tsfn.Release() != napi_ok) {
121
- Error::Fatal("TypedDataSourceThread",
122
- "ThreadSafeFunction.Release() failed");
123
- }
124
- }
125
-
126
- static Value StopThread(const CallbackInfo& info) {
127
- tsfnInfo.jsFinalizeCallback = Napi::Persistent(info[0].As<Function>());
128
- bool abort = info[1].As<Boolean>();
129
- if (abort) {
130
- s_tsfn.Abort();
131
- } else {
132
- s_tsfn.Release();
133
- }
134
- {
135
- std::lock_guard<std::mutex> _(tsfnInfo.protect);
136
- tsfnInfo.closeCalledFromJs = true;
137
- tsfnInfo.signal.notify_one();
138
- }
139
- return Value();
140
- }
141
-
142
- // Join the thread and inform JS that we're done.
143
- static void JoinTheThreads(Env /* env */,
144
- std::thread* theThreads,
145
- ThreadSafeFunctionInfo* info) {
146
- theThreads[0].join();
147
- if (info->startSecondary) {
148
- theThreads[1].join();
149
- }
150
-
151
- info->jsFinalizeCallback.Call({});
152
- info->jsFinalizeCallback.Reset();
153
- }
154
-
155
- static Value StartThreadInternal(const CallbackInfo& info,
156
- ThreadSafeFunctionInfo::CallType type) {
157
- tsfnInfo.type = type;
158
- tsfnInfo.abort = info[1].As<Boolean>();
159
- tsfnInfo.startSecondary = info[2].As<Boolean>();
160
- tsfnInfo.maxQueueSize = info[3].As<Number>().Uint32Value();
161
- tsfnInfo.closeCalledFromJs = false;
162
-
163
- s_tsfn = TSFN::New(info.Env(),
164
- info[0].As<Function>(),
165
- Object::New(info.Env()),
166
- "Test",
167
- tsfnInfo.maxQueueSize,
168
- 2,
169
- &tsfnInfo,
170
- JoinTheThreads,
171
- threads);
172
-
173
- threads[0] = std::thread(DataSourceThread);
174
-
175
- return Value();
176
- }
177
-
178
- static Value Release(const CallbackInfo& /* info */) {
179
- if (s_tsfn.Release() != napi_ok) {
180
- Error::Fatal("Release", "TypedThreadSafeFunction.Release() failed");
181
- }
182
- return Value();
183
- }
184
-
185
- static Value StartThread(const CallbackInfo& info) {
186
- return StartThreadInternal(info, ThreadSafeFunctionInfo::BLOCKING);
187
- }
188
-
189
- static Value StartThreadNonblocking(const CallbackInfo& info) {
190
- return StartThreadInternal(info, ThreadSafeFunctionInfo::NON_BLOCKING);
191
- }
192
-
193
- static Value StartThreadNoNative(const CallbackInfo& info) {
194
- return StartThreadInternal(info, ThreadSafeFunctionInfo::DEFAULT);
195
- }
196
-
197
- Object InitTypedThreadSafeFunction(Env env) {
198
- for (size_t index = 0; index < ARRAY_LENGTH; index++) {
199
- ints[index] = index;
200
- }
201
-
202
- Object exports = Object::New(env);
203
- exports["ARRAY_LENGTH"] = Number::New(env, ARRAY_LENGTH);
204
- exports["MAX_QUEUE_SIZE"] = Number::New(env, MAX_QUEUE_SIZE);
205
- exports["startThread"] = Function::New(env, StartThread);
206
- exports["startThreadNoNative"] = Function::New(env, StartThreadNoNative);
207
- exports["startThreadNonblocking"] =
208
- Function::New(env, StartThreadNonblocking);
209
- exports["stopThread"] = Function::New(env, StopThread);
210
- exports["release"] = Function::New(env, Release);
211
-
212
- return exports;
213
- }
214
-
215
- #endif