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,155 +0,0 @@
1
- #include <assert.h>
2
- #include "napi.h"
3
-
4
- #if (NAPI_VERSION > 3)
5
-
6
- using namespace Napi;
7
-
8
- namespace {
9
-
10
- class TSFNWrap : public ObjectWrap<TSFNWrap> {
11
- public:
12
- static Function Init(Napi::Env env);
13
- TSFNWrap(const CallbackInfo& info);
14
-
15
- Napi::Value GetContext(const CallbackInfo& /*info*/) {
16
- Reference<Napi::Value>* ctx = _tsfn.GetContext();
17
- return ctx->Value();
18
- };
19
-
20
- Napi::Value Release(const CallbackInfo& info) {
21
- Napi::Env env = info.Env();
22
- _deferred = std::unique_ptr<Promise::Deferred>(new Promise::Deferred(env));
23
- _tsfn.Release();
24
- return _deferred->Promise();
25
- };
26
-
27
- private:
28
- ThreadSafeFunction _tsfn;
29
- std::unique_ptr<Promise::Deferred> _deferred;
30
- };
31
-
32
- Function TSFNWrap::Init(Napi::Env env) {
33
- Function func =
34
- DefineClass(env,
35
- "TSFNWrap",
36
- {InstanceMethod("getContext", &TSFNWrap::GetContext),
37
- InstanceMethod("release", &TSFNWrap::Release)});
38
- return func;
39
- }
40
-
41
- TSFNWrap::TSFNWrap(const CallbackInfo& info) : ObjectWrap<TSFNWrap>(info) {
42
- Napi::Env env = info.Env();
43
-
44
- Reference<Napi::Value>* _ctx = new Reference<Napi::Value>;
45
- *_ctx = Persistent(info[0]);
46
-
47
- _tsfn = ThreadSafeFunction::New(
48
- info.Env(),
49
- Function::New(env, [](const CallbackInfo& /*info*/) {}),
50
- Object::New(env),
51
- "Test",
52
- 1,
53
- 1,
54
- _ctx,
55
- [this](Napi::Env env, Reference<Napi::Value>* ctx) {
56
- _deferred->Resolve(env.Undefined());
57
- ctx->Reset();
58
- delete ctx;
59
- });
60
- }
61
- struct SimpleTestContext {
62
- SimpleTestContext(int val) : _val(val) {}
63
- int _val = -1;
64
- };
65
-
66
- void AssertGetContextFromVariousTSOverloads(const CallbackInfo& info) {
67
- Env env = info.Env();
68
- Function emptyFunc;
69
-
70
- SimpleTestContext* ctx = new SimpleTestContext(42);
71
- ThreadSafeFunction fn =
72
- ThreadSafeFunction::New(env, emptyFunc, "testResource", 1, 1, ctx);
73
-
74
- assert(fn.GetContext() == ctx);
75
- delete ctx;
76
- fn.Release();
77
-
78
- fn = ThreadSafeFunction::New(env, emptyFunc, "testRes", 1, 1, [](Env) {});
79
- fn.Release();
80
-
81
- ctx = new SimpleTestContext(42);
82
- fn = ThreadSafeFunction::New(env,
83
- emptyFunc,
84
- Object::New(env),
85
- "resStrObj",
86
- 1,
87
- 1,
88
- ctx,
89
- [](Env, SimpleTestContext*) {});
90
- assert(fn.GetContext() == ctx);
91
- delete ctx;
92
- fn.Release();
93
-
94
- fn = ThreadSafeFunction::New(
95
- env, emptyFunc, Object::New(env), "resStrObj", 1, 1);
96
- fn.Release();
97
-
98
- ctx = new SimpleTestContext(42);
99
- fn = ThreadSafeFunction::New(
100
- env, emptyFunc, Object::New(env), "resStrObj", 1, 1, ctx);
101
- assert(fn.GetContext() == ctx);
102
- delete ctx;
103
- fn.Release();
104
-
105
- using FinalizerDataType = int;
106
- FinalizerDataType* finalizerData = new int(42);
107
- fn = ThreadSafeFunction::New(
108
- env,
109
- emptyFunc,
110
- Object::New(env),
111
- "resObject",
112
- 1,
113
- 1,
114
- [](Env, FinalizerDataType* data) {
115
- assert(*data == 42);
116
- delete data;
117
- },
118
- finalizerData);
119
- fn.Release();
120
-
121
- ctx = new SimpleTestContext(42);
122
- FinalizerDataType* finalizerDataB = new int(42);
123
-
124
- fn = ThreadSafeFunction::New(
125
- env,
126
- emptyFunc,
127
- Object::New(env),
128
- "resObject",
129
- 1,
130
- 1,
131
- ctx,
132
- [](Env, FinalizerDataType* _data, SimpleTestContext* _ctx) {
133
- assert(*_data == 42);
134
- assert(_ctx->_val == 42);
135
- delete _data;
136
- delete _ctx;
137
- },
138
- finalizerDataB);
139
- assert(fn.GetContext() == ctx);
140
- fn.Release();
141
- }
142
-
143
- } // namespace
144
-
145
- Object InitThreadSafeFunctionCtx(Env env) {
146
- Object exports = Object::New(env);
147
- Function tsfnWrap = TSFNWrap::Init(env);
148
- exports.Set("TSFNWrap", tsfnWrap);
149
- exports.Set("AssertFnReturnCorrectCxt",
150
- Function::New(env, AssertGetContextFromVariousTSOverloads));
151
-
152
- return exports;
153
- }
154
-
155
- #endif
@@ -1,13 +0,0 @@
1
- 'use strict';
2
-
3
- const assert = require('assert');
4
-
5
- module.exports = require('../common').runTest(test);
6
-
7
- async function test (binding) {
8
- const ctx = { };
9
- const tsfn = new binding.threadsafe_function_ctx.TSFNWrap(ctx);
10
- assert(tsfn.getContext() === ctx);
11
- await tsfn.release();
12
- binding.threadsafe_function_ctx.AssertFnReturnCorrectCxt();
13
- }
@@ -1,50 +0,0 @@
1
- #include <cstdlib>
2
- #include "napi.h"
3
- #include "test_helper.h"
4
-
5
- #if (NAPI_VERSION > 3)
6
-
7
- using namespace Napi;
8
-
9
- namespace {
10
-
11
- void CallJS(napi_env env, napi_value /* callback */, void* /*data*/) {
12
- Napi::Error error = Napi::Error::New(env, "test-from-native");
13
- NAPI_THROW_VOID(error);
14
- }
15
-
16
- void TestCall(const CallbackInfo& info) {
17
- Napi::Env env = info.Env();
18
-
19
- ThreadSafeFunction wrapped =
20
- ThreadSafeFunction::New(env,
21
- info[0].As<Napi::Function>(),
22
- Object::New(env),
23
- String::New(env, "Test"),
24
- 0,
25
- 1);
26
- wrapped.BlockingCall(static_cast<void*>(nullptr));
27
- wrapped.Release();
28
- }
29
-
30
- void TestCallWithNativeCallback(const CallbackInfo& info) {
31
- Napi::Env env = info.Env();
32
-
33
- ThreadSafeFunction wrapped = ThreadSafeFunction::New(
34
- env, Napi::Function(), Object::New(env), String::New(env, "Test"), 0, 1);
35
- wrapped.BlockingCall(static_cast<void*>(nullptr), CallJS);
36
- wrapped.Release();
37
- }
38
-
39
- } // namespace
40
-
41
- Object InitThreadSafeFunctionException(Env env) {
42
- Object exports = Object::New(env);
43
- exports["testCall"] = Function::New(env, TestCall);
44
- exports["testCallWithNativeCallback"] =
45
- Function::New(env, TestCallWithNativeCallback);
46
-
47
- return exports;
48
- }
49
-
50
- #endif
@@ -1,20 +0,0 @@
1
- 'use strict';
2
-
3
- const common = require('../common');
4
-
5
- module.exports = common.runTest(test);
6
-
7
- const execArgv = ['--force-node-api-uncaught-exceptions-policy=true'];
8
- async function test () {
9
- await common.runTestInChildProcess({
10
- suite: 'threadsafe_function_exception',
11
- testName: 'testCall',
12
- execArgv
13
- });
14
-
15
- await common.runTestInChildProcess({
16
- suite: 'threadsafe_function_exception',
17
- testName: 'testCallWithNativeCallback',
18
- execArgv
19
- });
20
- }
@@ -1,125 +0,0 @@
1
- #include <cstdlib>
2
- #include "napi.h"
3
- #include "test_helper.h"
4
-
5
- #if (NAPI_VERSION > 3)
6
-
7
- using namespace Napi;
8
-
9
- namespace {
10
-
11
- struct TestContext {
12
- TestContext(Promise::Deferred&& deferred)
13
- : deferred(std::move(deferred)), callData(nullptr){};
14
-
15
- napi_threadsafe_function tsfn;
16
- Promise::Deferred deferred;
17
- double* callData;
18
-
19
- ~TestContext() {
20
- if (callData != nullptr) delete callData;
21
- };
22
- };
23
-
24
- void FinalizeCB(napi_env env, void* /*finalizeData */, void* context) {
25
- TestContext* testContext = static_cast<TestContext*>(context);
26
- if (testContext->callData != nullptr) {
27
- testContext->deferred.Resolve(Number::New(env, *testContext->callData));
28
- } else {
29
- testContext->deferred.Resolve(Napi::Env(env).Undefined());
30
- }
31
- delete testContext;
32
- }
33
-
34
- void CallJSWithData(napi_env env,
35
- napi_value /* callback */,
36
- void* context,
37
- void* data) {
38
- TestContext* testContext = static_cast<TestContext*>(context);
39
- testContext->callData = static_cast<double*>(data);
40
-
41
- napi_status status =
42
- napi_release_threadsafe_function(testContext->tsfn, napi_tsfn_release);
43
-
44
- NAPI_THROW_IF_FAILED_VOID(env, status);
45
- }
46
-
47
- void CallJSNoData(napi_env env,
48
- napi_value /* callback */,
49
- void* context,
50
- void* /*data*/) {
51
- TestContext* testContext = static_cast<TestContext*>(context);
52
- testContext->callData = nullptr;
53
-
54
- napi_status status =
55
- napi_release_threadsafe_function(testContext->tsfn, napi_tsfn_release);
56
-
57
- NAPI_THROW_IF_FAILED_VOID(env, status);
58
- }
59
-
60
- static Value TestCall(const CallbackInfo& info) {
61
- Napi::Env env = info.Env();
62
- bool isBlocking = false;
63
- bool hasData = false;
64
- if (info.Length() > 0) {
65
- Object opts = info[0].As<Object>();
66
- bool hasProperty = MaybeUnwrap(opts.Has("blocking"));
67
- if (hasProperty) {
68
- isBlocking = MaybeUnwrap(MaybeUnwrap(opts.Get("blocking")).ToBoolean());
69
- }
70
- hasProperty = MaybeUnwrap(opts.Has("data"));
71
- if (hasProperty) {
72
- hasData = MaybeUnwrap(MaybeUnwrap(opts.Get("data")).ToBoolean());
73
- }
74
- }
75
-
76
- // Allow optional callback passed from JS. Useful for testing.
77
- Function cb = Function::New(env, [](const CallbackInfo& /*info*/) {});
78
-
79
- TestContext* testContext = new TestContext(Napi::Promise::Deferred(env));
80
-
81
- napi_status status =
82
- napi_create_threadsafe_function(env,
83
- cb,
84
- Object::New(env),
85
- String::New(env, "Test"),
86
- 0,
87
- 1,
88
- nullptr, /*finalize data*/
89
- FinalizeCB,
90
- testContext,
91
- hasData ? CallJSWithData : CallJSNoData,
92
- &testContext->tsfn);
93
-
94
- NAPI_THROW_IF_FAILED(env, status, Value());
95
-
96
- ThreadSafeFunction wrapped = ThreadSafeFunction(testContext->tsfn);
97
-
98
- // Test the four napi_threadsafe_function direct-accessing calls
99
- if (isBlocking) {
100
- if (hasData) {
101
- wrapped.BlockingCall(static_cast<void*>(new double(std::rand())));
102
- } else {
103
- wrapped.BlockingCall(static_cast<void*>(nullptr));
104
- }
105
- } else {
106
- if (hasData) {
107
- wrapped.NonBlockingCall(static_cast<void*>(new double(std::rand())));
108
- } else {
109
- wrapped.NonBlockingCall(static_cast<void*>(nullptr));
110
- }
111
- }
112
-
113
- return testContext->deferred.Promise();
114
- }
115
-
116
- } // namespace
117
-
118
- Object InitThreadSafeFunctionExistingTsfn(Env env) {
119
- Object exports = Object::New(env);
120
- exports["testCall"] = Function::New(env, TestCall);
121
-
122
- return exports;
123
- }
124
-
125
- #endif
@@ -1,14 +0,0 @@
1
- 'use strict';
2
-
3
- const assert = require('assert');
4
-
5
- module.exports = require('../common').runTest(test);
6
-
7
- async function test (binding) {
8
- const testCall = binding.threadsafe_function_existing_tsfn.testCall;
9
-
10
- assert.strictEqual(typeof await testCall({ blocking: true, data: true }), 'number');
11
- assert.strictEqual(typeof await testCall({ blocking: true, data: false }), 'undefined');
12
- assert.strictEqual(typeof await testCall({ blocking: false, data: true }), 'number');
13
- assert.strictEqual(typeof await testCall({ blocking: false, data: false }), 'undefined');
14
- }
@@ -1,27 +0,0 @@
1
- #include "napi.h"
2
-
3
- #if (NAPI_VERSION > 3)
4
-
5
- using namespace Napi;
6
-
7
- namespace {
8
-
9
- static Value Test(const CallbackInfo& info) {
10
- Object resource = info[0].As<Object>();
11
- Function cb = info[1].As<Function>();
12
- ThreadSafeFunction tsfn =
13
- ThreadSafeFunction::New(info.Env(), cb, resource, "Test", 1, 1);
14
- tsfn.Release();
15
- return info.Env().Undefined();
16
- }
17
-
18
- } // namespace
19
-
20
- Object InitThreadSafeFunctionPtr(Env env) {
21
- Object exports = Object::New(env);
22
- exports["test"] = Function::New(env, Test);
23
-
24
- return exports;
25
- }
26
-
27
- #endif
@@ -1,7 +0,0 @@
1
- 'use strict';
2
-
3
- module.exports = require('../common').runTest(test);
4
-
5
- function test (binding) {
6
- binding.threadsafe_function_ptr.test({}, () => {});
7
- }
@@ -1,240 +0,0 @@
1
- #include <condition_variable>
2
- #include <cstdlib>
3
- #include <mutex>
4
- #include <thread>
5
- #include "napi.h"
6
-
7
- #if (NAPI_VERSION > 3)
8
-
9
- using namespace Napi;
10
-
11
- namespace {
12
-
13
- struct TestData {
14
- TestData(Promise::Deferred&& deferred) : deferred(std::move(deferred)){};
15
-
16
- // Native Promise returned to JavaScript
17
- Promise::Deferred deferred;
18
-
19
- // List of threads created for test. This list only ever accessed via main
20
- // thread.
21
- std::vector<std::thread> threads = {};
22
-
23
- ThreadSafeFunction tsfn = ThreadSafeFunction();
24
-
25
- // These variables are only accessed from the main thread.
26
- bool mainWantsRelease = false;
27
- size_t expected_calls = 0;
28
- };
29
-
30
- void FinalizerCallback(Napi::Env env, TestData* finalizeData) {
31
- for (size_t i = 0; i < finalizeData->threads.size(); ++i) {
32
- finalizeData->threads[i].join();
33
- }
34
- finalizeData->deferred.Resolve(Boolean::New(env, true));
35
- delete finalizeData;
36
- }
37
-
38
- /**
39
- * See threadsafe_function_sum.js for descriptions of the tests in this file
40
- */
41
-
42
- void entryWithTSFN(ThreadSafeFunction tsfn, int threadId) {
43
- std::this_thread::sleep_for(std::chrono::milliseconds(std::rand() % 100 + 1));
44
- tsfn.BlockingCall([=](Napi::Env env, Function callback) {
45
- callback.Call({Number::New(env, static_cast<double>(threadId))});
46
- });
47
- tsfn.Release();
48
- }
49
-
50
- static Value TestWithTSFN(const CallbackInfo& info) {
51
- int threadCount = info[0].As<Number>().Int32Value();
52
- Function cb = info[1].As<Function>();
53
-
54
- // We pass the test data to the Finalizer for cleanup. The finalizer is
55
- // responsible for deleting this data as well.
56
- TestData* testData = new TestData(Promise::Deferred::New(info.Env()));
57
-
58
- ThreadSafeFunction tsfn = ThreadSafeFunction::New(
59
- info.Env(),
60
- cb,
61
- "Test",
62
- 0,
63
- threadCount,
64
- std::function<decltype(FinalizerCallback)>(FinalizerCallback),
65
- testData);
66
-
67
- for (int i = 0; i < threadCount; ++i) {
68
- // A copy of the ThreadSafeFunction will go to the thread entry point
69
- testData->threads.push_back(std::thread(entryWithTSFN, tsfn, i));
70
- }
71
-
72
- return testData->deferred.Promise();
73
- }
74
-
75
- // Task instance created for each new std::thread
76
- class DelayedTSFNTask {
77
- public:
78
- // Each instance has its own tsfn
79
- ThreadSafeFunction tsfn;
80
-
81
- // Thread-safety
82
- std::mutex mtx;
83
- std::condition_variable cv;
84
-
85
- // Entry point for std::thread
86
- void entryDelayedTSFN(int threadId) {
87
- std::unique_lock<std::mutex> lk(mtx);
88
- cv.wait(lk, [this] { return this->tsfn != nullptr; });
89
- tsfn.BlockingCall([=](Napi::Env env, Function callback) {
90
- callback.Call({Number::New(env, static_cast<double>(threadId))});
91
- });
92
- tsfn.Release();
93
- };
94
- };
95
-
96
- struct TestDataDelayed {
97
- TestDataDelayed(Promise::Deferred&& deferred)
98
- : deferred(std::move(deferred)){};
99
- ~TestDataDelayed() { taskInsts.clear(); };
100
- // Native Promise returned to JavaScript
101
- Promise::Deferred deferred;
102
-
103
- // List of threads created for test. This list only ever accessed via main
104
- // thread.
105
- std::vector<std::thread> threads = {};
106
-
107
- // List of DelayedTSFNThread instances
108
- std::vector<std::unique_ptr<DelayedTSFNTask>> taskInsts = {};
109
-
110
- ThreadSafeFunction tsfn = ThreadSafeFunction();
111
- };
112
-
113
- void FinalizerCallbackDelayed(Napi::Env env, TestDataDelayed* finalizeData) {
114
- for (size_t i = 0; i < finalizeData->threads.size(); ++i) {
115
- finalizeData->threads[i].join();
116
- }
117
- finalizeData->deferred.Resolve(Boolean::New(env, true));
118
- delete finalizeData;
119
- }
120
-
121
- static Value TestDelayedTSFN(const CallbackInfo& info) {
122
- int threadCount = info[0].As<Number>().Int32Value();
123
- Function cb = info[1].As<Function>();
124
-
125
- TestDataDelayed* testData =
126
- new TestDataDelayed(Promise::Deferred::New(info.Env()));
127
-
128
- testData->tsfn =
129
- ThreadSafeFunction::New(info.Env(),
130
- cb,
131
- "Test",
132
- 0,
133
- threadCount,
134
- std::function<decltype(FinalizerCallbackDelayed)>(
135
- FinalizerCallbackDelayed),
136
- testData);
137
-
138
- for (int i = 0; i < threadCount; ++i) {
139
- testData->taskInsts.push_back(
140
- std::unique_ptr<DelayedTSFNTask>(new DelayedTSFNTask()));
141
- testData->threads.push_back(std::thread(&DelayedTSFNTask::entryDelayedTSFN,
142
- testData->taskInsts.back().get(),
143
- i));
144
- }
145
- std::this_thread::sleep_for(std::chrono::milliseconds(std::rand() % 100 + 1));
146
-
147
- for (auto& task : testData->taskInsts) {
148
- std::lock_guard<std::mutex> lk(task->mtx);
149
- task->tsfn = testData->tsfn;
150
- task->cv.notify_all();
151
- }
152
-
153
- return testData->deferred.Promise();
154
- }
155
-
156
- void AcquireFinalizerCallback(Napi::Env env,
157
- TestData* finalizeData,
158
- TestData* context) {
159
- (void)context;
160
- for (size_t i = 0; i < finalizeData->threads.size(); ++i) {
161
- finalizeData->threads[i].join();
162
- }
163
- finalizeData->deferred.Resolve(Boolean::New(env, true));
164
- delete finalizeData;
165
- }
166
-
167
- void entryAcquire(ThreadSafeFunction tsfn, int threadId) {
168
- tsfn.Acquire();
169
- TestData* testData = tsfn.GetContext();
170
- std::this_thread::sleep_for(std::chrono::milliseconds(std::rand() % 100 + 1));
171
- tsfn.BlockingCall([=](Napi::Env env, Function callback) {
172
- // This lambda runs on the main thread so it's OK to access the variables
173
- // `expected_calls` and `mainWantsRelease`.
174
- testData->expected_calls--;
175
- if (testData->expected_calls == 0 && testData->mainWantsRelease)
176
- testData->tsfn.Release();
177
- callback.Call({Number::New(env, static_cast<double>(threadId))});
178
- });
179
- tsfn.Release();
180
- }
181
-
182
- static Value CreateThread(const CallbackInfo& info) {
183
- TestData* testData = static_cast<TestData*>(info.Data());
184
- // Counting expected calls like this only works because on the JS side this
185
- // binding is called from a synchronous loop. This means the main loop has no
186
- // chance to run the tsfn JS callback before we've counted how many threads
187
- // the JS intends to create.
188
- testData->expected_calls++;
189
- ThreadSafeFunction tsfn = testData->tsfn;
190
- int threadId = testData->threads.size();
191
- // A copy of the ThreadSafeFunction will go to the thread entry point
192
- testData->threads.push_back(std::thread(entryAcquire, tsfn, threadId));
193
- return Number::New(info.Env(), threadId);
194
- }
195
-
196
- static Value StopThreads(const CallbackInfo& info) {
197
- TestData* testData = static_cast<TestData*>(info.Data());
198
- testData->mainWantsRelease = true;
199
- return info.Env().Undefined();
200
- }
201
-
202
- static Value TestAcquire(const CallbackInfo& info) {
203
- Function cb = info[0].As<Function>();
204
- Napi::Env env = info.Env();
205
-
206
- // We pass the test data to the Finalizer for cleanup. The finalizer is
207
- // responsible for deleting this data as well.
208
- TestData* testData = new TestData(Promise::Deferred::New(info.Env()));
209
-
210
- testData->tsfn =
211
- ThreadSafeFunction::New(env,
212
- cb,
213
- "Test",
214
- 0,
215
- 1,
216
- testData,
217
- std::function<decltype(AcquireFinalizerCallback)>(
218
- AcquireFinalizerCallback),
219
- testData);
220
-
221
- Object result = Object::New(env);
222
- result["createThread"] =
223
- Function::New(env, CreateThread, "createThread", testData);
224
- result["stopThreads"] =
225
- Function::New(env, StopThreads, "stopThreads", testData);
226
- result["promise"] = testData->deferred.Promise();
227
-
228
- return result;
229
- }
230
- } // namespace
231
-
232
- Object InitThreadSafeFunctionSum(Env env) {
233
- Object exports = Object::New(env);
234
- exports["testDelayedTSFN"] = Function::New(env, TestDelayedTSFN);
235
- exports["testWithTSFN"] = Function::New(env, TestWithTSFN);
236
- exports["testAcquire"] = Function::New(env, TestAcquire);
237
- return exports;
238
- }
239
-
240
- #endif