koffi 0.9.3 → 0.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (330) hide show
  1. package/CMakeLists.txt +63 -60
  2. package/README.md +162 -153
  3. package/package.json +19 -18
  4. package/src/call.hh +27 -27
  5. package/src/call_arm32.cc +514 -0
  6. package/src/call_arm32_fwd.S +108 -0
  7. package/src/call_arm64.cc +497 -482
  8. package/src/call_arm64_fwd.S +110 -115
  9. package/src/call_x64_sysv.cc +477 -477
  10. package/src/call_x64_sysv_fwd.S +131 -131
  11. package/src/call_x64_win.cc +243 -243
  12. package/src/call_x64_win_fwd.asm +105 -105
  13. package/src/call_x86.cc +259 -259
  14. package/src/call_x86_fwd.S +48 -48
  15. package/src/call_x86_fwd.asm +50 -50
  16. package/src/ffi.cc +504 -504
  17. package/src/ffi.hh +136 -135
  18. package/src/util.cc +297 -296
  19. package/src/util.hh +80 -80
  20. package/vendor/dragonbox/CMakeLists.txt +122 -122
  21. package/vendor/dragonbox/LICENSE-Apache2-LLVM +218 -218
  22. package/vendor/dragonbox/LICENSE-Boost +23 -23
  23. package/vendor/dragonbox/README.md +277 -277
  24. package/vendor/dragonbox/cmake/dragonboxConfig.cmake +1 -1
  25. package/vendor/dragonbox/include/dragonbox/dragonbox.h +2674 -2670
  26. package/vendor/dragonbox/include/dragonbox/dragonbox_to_chars.h +108 -108
  27. package/vendor/dragonbox/other_files/Dragonbox.pdf +0 -0
  28. package/vendor/dragonbox/other_files/unknown_win64_vc2019.html +539 -539
  29. package/vendor/dragonbox/source/dragonbox_to_chars.cpp +303 -303
  30. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/CMakeLists.txt +23 -23
  31. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/fp_to_chars.cpp +238 -238
  32. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/fp_to_chars.h +95 -95
  33. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/grisu_exact.h +2666 -2666
  34. package/vendor/dragonbox/subproject/3rdparty/ryu/CMakeLists.txt +16 -16
  35. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/common.h +114 -114
  36. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s.c +509 -509
  37. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s_full_table.h +367 -367
  38. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s_intrinsics.h +357 -357
  39. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/digit_table.h +35 -35
  40. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s.c +345 -345
  41. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s_full_table.h +55 -55
  42. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s_intrinsics.h +128 -128
  43. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/ryu.h +46 -46
  44. package/vendor/dragonbox/subproject/3rdparty/schubfach/CMakeLists.txt +21 -21
  45. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_32.cc +699 -699
  46. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_32.h +31 -31
  47. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_64.cc +1354 -1354
  48. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_64.h +31 -31
  49. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/example_shaded_plots.m +68 -68
  50. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/license.txt +25 -25
  51. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_distribution.m +92 -92
  52. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_distribution_prctile.m +121 -121
  53. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_histogram_shaded.m +99 -99
  54. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_shaded.m +93 -93
  55. package/vendor/dragonbox/subproject/benchmark/CMakeLists.txt +64 -64
  56. package/vendor/dragonbox/subproject/benchmark/include/benchmark.h +40 -40
  57. package/vendor/dragonbox/subproject/benchmark/matlab/plot_benchmarks.m +21 -21
  58. package/vendor/dragonbox/subproject/benchmark/matlab/plot_digit_benchmark.m +78 -78
  59. package/vendor/dragonbox/subproject/benchmark/matlab/plot_uniform_benchmark.m +95 -95
  60. package/vendor/dragonbox/subproject/benchmark/source/benchmark.cpp +237 -237
  61. package/vendor/dragonbox/subproject/benchmark/source/dragonbox.cpp +30 -30
  62. package/vendor/dragonbox/subproject/benchmark/source/grisu_exact.cpp +36 -36
  63. package/vendor/dragonbox/subproject/benchmark/source/ryu.cpp +27 -27
  64. package/vendor/dragonbox/subproject/benchmark/source/schubfach.cpp +31 -31
  65. package/vendor/dragonbox/subproject/common/CMakeLists.txt +41 -41
  66. package/vendor/dragonbox/subproject/common/include/best_rational_approx.h +96 -96
  67. package/vendor/dragonbox/subproject/common/include/big_uint.h +217 -217
  68. package/vendor/dragonbox/subproject/common/include/continued_fractions.h +173 -173
  69. package/vendor/dragonbox/subproject/common/include/good_rational_approx.h +266 -266
  70. package/vendor/dragonbox/subproject/common/include/random_float.h +182 -182
  71. package/vendor/dragonbox/subproject/common/include/rational_continued_fractions.h +56 -56
  72. package/vendor/dragonbox/subproject/common/source/big_uint.cpp +601 -601
  73. package/vendor/dragonbox/subproject/meta/CMakeLists.txt +40 -40
  74. package/vendor/dragonbox/subproject/meta/results/binary32_generated_cache.txt +81 -81
  75. package/vendor/dragonbox/subproject/meta/results/binary64_compressed_cache_error_table.txt +9 -9
  76. package/vendor/dragonbox/subproject/meta/results/binary64_generated_cache.txt +622 -622
  77. package/vendor/dragonbox/subproject/meta/source/generate_cache.cpp +126 -126
  78. package/vendor/dragonbox/subproject/meta/source/live_test.cpp +81 -81
  79. package/vendor/dragonbox/subproject/meta/source/perf_test.cpp +104 -104
  80. package/vendor/dragonbox/subproject/meta/source/sandbox.cpp +20 -20
  81. package/vendor/dragonbox/subproject/test/CMakeLists.txt +69 -69
  82. package/vendor/dragonbox/subproject/test/results/binary32.csv +255 -255
  83. package/vendor/dragonbox/subproject/test/results/binary64.csv +2047 -2047
  84. package/vendor/dragonbox/subproject/test/results/plot_required_bits.m +17 -17
  85. package/vendor/dragonbox/subproject/test/source/test_all_shorter_interval_cases.cpp +88 -88
  86. package/vendor/dragonbox/subproject/test/source/uniform_random_test.cpp +95 -95
  87. package/vendor/dragonbox/subproject/test/source/verify_cache_precision.cpp +337 -337
  88. package/vendor/dragonbox/subproject/test/source/verify_compressed_cache.cpp +154 -154
  89. package/vendor/dragonbox/subproject/test/source/verify_fast_multiplication.cpp +168 -168
  90. package/vendor/dragonbox/subproject/test/source/verify_log_computation.cpp +251 -251
  91. package/vendor/dragonbox/subproject/test/source/verify_magic_division.cpp +113 -113
  92. package/vendor/libcc/libcc.cc +7651 -7651
  93. package/vendor/libcc/libcc.hh +4312 -4312
  94. package/vendor/node-addon-api/CHANGELOG.md +859 -859
  95. package/vendor/node-addon-api/CODE_OF_CONDUCT.md +4 -4
  96. package/vendor/node-addon-api/CONTRIBUTING.md +93 -93
  97. package/vendor/node-addon-api/LICENSE.md +12 -12
  98. package/vendor/node-addon-api/README.md +293 -293
  99. package/vendor/node-addon-api/appveyor.yml +37 -37
  100. package/vendor/node-addon-api/benchmark/README.md +47 -47
  101. package/vendor/node-addon-api/benchmark/binding.gyp +25 -25
  102. package/vendor/node-addon-api/benchmark/function_args.cc +217 -217
  103. package/vendor/node-addon-api/benchmark/function_args.js +60 -60
  104. package/vendor/node-addon-api/benchmark/index.js +34 -34
  105. package/vendor/node-addon-api/benchmark/property_descriptor.cc +91 -91
  106. package/vendor/node-addon-api/benchmark/property_descriptor.js +37 -37
  107. package/vendor/node-addon-api/common.gypi +21 -21
  108. package/vendor/node-addon-api/doc/addon.md +163 -163
  109. package/vendor/node-addon-api/doc/array.md +81 -81
  110. package/vendor/node-addon-api/doc/array_buffer.md +155 -155
  111. package/vendor/node-addon-api/doc/async_context.md +86 -86
  112. package/vendor/node-addon-api/doc/async_operations.md +31 -31
  113. package/vendor/node-addon-api/doc/async_worker.md +427 -427
  114. package/vendor/node-addon-api/doc/async_worker_variants.md +557 -557
  115. package/vendor/node-addon-api/doc/bigint.md +97 -97
  116. package/vendor/node-addon-api/doc/boolean.md +68 -68
  117. package/vendor/node-addon-api/doc/buffer.md +150 -150
  118. package/vendor/node-addon-api/doc/callback_scope.md +54 -54
  119. package/vendor/node-addon-api/doc/callbackinfo.md +97 -97
  120. package/vendor/node-addon-api/doc/checker-tool.md +32 -32
  121. package/vendor/node-addon-api/doc/class_property_descriptor.md +115 -115
  122. package/vendor/node-addon-api/doc/cmake-js.md +68 -68
  123. package/vendor/node-addon-api/doc/conversion-tool.md +27 -27
  124. package/vendor/node-addon-api/doc/creating_a_release.md +62 -62
  125. package/vendor/node-addon-api/doc/dataview.md +248 -248
  126. package/vendor/node-addon-api/doc/date.md +68 -68
  127. package/vendor/node-addon-api/doc/env.md +196 -196
  128. package/vendor/node-addon-api/doc/error.md +120 -120
  129. package/vendor/node-addon-api/doc/error_handling.md +254 -254
  130. package/vendor/node-addon-api/doc/escapable_handle_scope.md +80 -80
  131. package/vendor/node-addon-api/doc/external.md +63 -63
  132. package/vendor/node-addon-api/doc/function.md +402 -402
  133. package/vendor/node-addon-api/doc/function_reference.md +238 -238
  134. package/vendor/node-addon-api/doc/generator.md +13 -13
  135. package/vendor/node-addon-api/doc/handle_scope.md +63 -63
  136. package/vendor/node-addon-api/doc/hierarchy.md +91 -91
  137. package/vendor/node-addon-api/doc/instance_wrap.md +408 -408
  138. package/vendor/node-addon-api/doc/maybe.md +76 -76
  139. package/vendor/node-addon-api/doc/memory_management.md +27 -27
  140. package/vendor/node-addon-api/doc/name.md +29 -29
  141. package/vendor/node-addon-api/doc/node-gyp.md +82 -82
  142. package/vendor/node-addon-api/doc/number.md +163 -163
  143. package/vendor/node-addon-api/doc/object.md +432 -432
  144. package/vendor/node-addon-api/doc/object_lifetime_management.md +83 -83
  145. package/vendor/node-addon-api/doc/object_reference.md +117 -117
  146. package/vendor/node-addon-api/doc/object_wrap.md +561 -561
  147. package/vendor/node-addon-api/doc/prebuild_tools.md +16 -16
  148. package/vendor/node-addon-api/doc/promises.md +79 -79
  149. package/vendor/node-addon-api/doc/property_descriptor.md +286 -286
  150. package/vendor/node-addon-api/doc/propertylvalue.md +50 -50
  151. package/vendor/node-addon-api/doc/range_error.md +59 -59
  152. package/vendor/node-addon-api/doc/reference.md +113 -113
  153. package/vendor/node-addon-api/doc/setup.md +110 -110
  154. package/vendor/node-addon-api/doc/string.md +93 -93
  155. package/vendor/node-addon-api/doc/symbol.md +60 -60
  156. package/vendor/node-addon-api/doc/threadsafe.md +121 -121
  157. package/vendor/node-addon-api/doc/threadsafe_function.md +290 -290
  158. package/vendor/node-addon-api/doc/type_error.md +59 -59
  159. package/vendor/node-addon-api/doc/typed_array.md +78 -78
  160. package/vendor/node-addon-api/doc/typed_array_of.md +137 -137
  161. package/vendor/node-addon-api/doc/typed_threadsafe_function.md +306 -306
  162. package/vendor/node-addon-api/doc/value.md +340 -340
  163. package/vendor/node-addon-api/doc/version_management.md +43 -43
  164. package/vendor/node-addon-api/except.gypi +25 -25
  165. package/vendor/node-addon-api/index.js +11 -11
  166. package/vendor/node-addon-api/napi-inl.deprecated.h +192 -192
  167. package/vendor/node-addon-api/napi-inl.h +6209 -6209
  168. package/vendor/node-addon-api/napi.h +2983 -2983
  169. package/vendor/node-addon-api/node_api.gyp +9 -9
  170. package/vendor/node-addon-api/noexcept.gypi +26 -26
  171. package/vendor/node-addon-api/package-support.json +21 -21
  172. package/vendor/node-addon-api/package.json +399 -399
  173. package/vendor/node-addon-api/test/README.md +91 -91
  174. package/vendor/node-addon-api/test/addon.cc +36 -36
  175. package/vendor/node-addon-api/test/addon.js +11 -11
  176. package/vendor/node-addon-api/test/addon_build/index.js +49 -49
  177. package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +17 -17
  178. package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +62 -62
  179. package/vendor/node-addon-api/test/addon_build/tpl/index.js +9 -9
  180. package/vendor/node-addon-api/test/addon_build/tpl/package.json +11 -11
  181. package/vendor/node-addon-api/test/addon_data.cc +99 -99
  182. package/vendor/node-addon-api/test/addon_data.js +46 -46
  183. package/vendor/node-addon-api/test/array_buffer.cc +243 -243
  184. package/vendor/node-addon-api/test/array_buffer.js +69 -69
  185. package/vendor/node-addon-api/test/async_context.cc +21 -21
  186. package/vendor/node-addon-api/test/async_context.js +86 -86
  187. package/vendor/node-addon-api/test/async_progress_queue_worker.cc +83 -83
  188. package/vendor/node-addon-api/test/async_progress_queue_worker.js +46 -46
  189. package/vendor/node-addon-api/test/async_progress_worker.cc +134 -134
  190. package/vendor/node-addon-api/test/async_progress_worker.js +61 -61
  191. package/vendor/node-addon-api/test/async_worker.cc +106 -106
  192. package/vendor/node-addon-api/test/async_worker.js +179 -179
  193. package/vendor/node-addon-api/test/async_worker_nocallback.js +13 -13
  194. package/vendor/node-addon-api/test/async_worker_persistent.cc +63 -63
  195. package/vendor/node-addon-api/test/async_worker_persistent.js +24 -24
  196. package/vendor/node-addon-api/test/basic_types/array.cc +40 -40
  197. package/vendor/node-addon-api/test/basic_types/array.js +35 -35
  198. package/vendor/node-addon-api/test/basic_types/boolean.cc +38 -38
  199. package/vendor/node-addon-api/test/basic_types/boolean.js +35 -35
  200. package/vendor/node-addon-api/test/basic_types/number.cc +99 -99
  201. package/vendor/node-addon-api/test/basic_types/number.js +114 -114
  202. package/vendor/node-addon-api/test/basic_types/value.cc +120 -120
  203. package/vendor/node-addon-api/test/basic_types/value.js +133 -133
  204. package/vendor/node-addon-api/test/bigint.cc +91 -91
  205. package/vendor/node-addon-api/test/bigint.js +53 -53
  206. package/vendor/node-addon-api/test/binding-swallowexcept.cc +12 -12
  207. package/vendor/node-addon-api/test/binding.cc +171 -171
  208. package/vendor/node-addon-api/test/binding.gyp +117 -117
  209. package/vendor/node-addon-api/test/buffer.cc +183 -183
  210. package/vendor/node-addon-api/test/buffer.js +69 -69
  211. package/vendor/node-addon-api/test/callbackscope.cc +22 -22
  212. package/vendor/node-addon-api/test/callbackscope.js +49 -49
  213. package/vendor/node-addon-api/test/common/index.js +113 -113
  214. package/vendor/node-addon-api/test/common/test_helper.h +61 -61
  215. package/vendor/node-addon-api/test/dataview/dataview.cc +48 -48
  216. package/vendor/node-addon-api/test/dataview/dataview.js +35 -35
  217. package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +115 -115
  218. package/vendor/node-addon-api/test/dataview/dataview_read_write.js +90 -90
  219. package/vendor/node-addon-api/test/date.cc +44 -44
  220. package/vendor/node-addon-api/test/date.js +18 -18
  221. package/vendor/node-addon-api/test/env_cleanup.cc +88 -88
  222. package/vendor/node-addon-api/test/env_cleanup.js +56 -56
  223. package/vendor/node-addon-api/test/error.cc +287 -287
  224. package/vendor/node-addon-api/test/error.js +81 -81
  225. package/vendor/node-addon-api/test/error_handling_for_primitives.cc +13 -13
  226. package/vendor/node-addon-api/test/error_handling_for_primitives.js +29 -29
  227. package/vendor/node-addon-api/test/error_terminating_environment.js +94 -94
  228. package/vendor/node-addon-api/test/external.cc +81 -81
  229. package/vendor/node-addon-api/test/external.js +88 -88
  230. package/vendor/node-addon-api/test/function.cc +295 -295
  231. package/vendor/node-addon-api/test/function.js +121 -121
  232. package/vendor/node-addon-api/test/function_reference.cc +202 -202
  233. package/vendor/node-addon-api/test/function_reference.js +157 -157
  234. package/vendor/node-addon-api/test/globalObject/global_object.cc +61 -61
  235. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +31 -31
  236. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +61 -61
  237. package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +40 -40
  238. package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +57 -57
  239. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +28 -28
  240. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +48 -48
  241. package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +30 -30
  242. package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +58 -58
  243. package/vendor/node-addon-api/test/handlescope.cc +60 -60
  244. package/vendor/node-addon-api/test/handlescope.js +14 -14
  245. package/vendor/node-addon-api/test/index.js +136 -136
  246. package/vendor/node-addon-api/test/maybe/check.cc +23 -23
  247. package/vendor/node-addon-api/test/maybe/index.js +38 -38
  248. package/vendor/node-addon-api/test/memory_management.cc +17 -17
  249. package/vendor/node-addon-api/test/memory_management.js +9 -9
  250. package/vendor/node-addon-api/test/movable_callbacks.cc +23 -23
  251. package/vendor/node-addon-api/test/movable_callbacks.js +21 -21
  252. package/vendor/node-addon-api/test/name.cc +108 -108
  253. package/vendor/node-addon-api/test/name.js +59 -59
  254. package/vendor/node-addon-api/test/napi_child.js +14 -14
  255. package/vendor/node-addon-api/test/object/delete_property.cc +38 -38
  256. package/vendor/node-addon-api/test/object/delete_property.js +41 -41
  257. package/vendor/node-addon-api/test/object/finalizer.cc +29 -29
  258. package/vendor/node-addon-api/test/object/finalizer.js +28 -28
  259. package/vendor/node-addon-api/test/object/get_property.cc +34 -34
  260. package/vendor/node-addon-api/test/object/get_property.js +40 -40
  261. package/vendor/node-addon-api/test/object/has_own_property.cc +34 -34
  262. package/vendor/node-addon-api/test/object/has_own_property.js +34 -34
  263. package/vendor/node-addon-api/test/object/has_property.cc +38 -38
  264. package/vendor/node-addon-api/test/object/has_property.js +37 -37
  265. package/vendor/node-addon-api/test/object/object.cc +348 -348
  266. package/vendor/node-addon-api/test/object/object.js +217 -217
  267. package/vendor/node-addon-api/test/object/object_deprecated.cc +66 -66
  268. package/vendor/node-addon-api/test/object/object_deprecated.js +47 -47
  269. package/vendor/node-addon-api/test/object/object_freeze_seal.cc +25 -25
  270. package/vendor/node-addon-api/test/object/object_freeze_seal.js +61 -61
  271. package/vendor/node-addon-api/test/object/set_property.cc +37 -37
  272. package/vendor/node-addon-api/test/object/set_property.js +29 -29
  273. package/vendor/node-addon-api/test/object/subscript_operator.cc +42 -42
  274. package/vendor/node-addon-api/test/object/subscript_operator.js +17 -17
  275. package/vendor/node-addon-api/test/object_reference.cc +219 -219
  276. package/vendor/node-addon-api/test/object_reference.js +259 -259
  277. package/vendor/node-addon-api/test/objectwrap.cc +268 -268
  278. package/vendor/node-addon-api/test/objectwrap.js +284 -284
  279. package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +26 -26
  280. package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +18 -18
  281. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +30 -30
  282. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +13 -13
  283. package/vendor/node-addon-api/test/objectwrap_removewrap.cc +45 -45
  284. package/vendor/node-addon-api/test/objectwrap_removewrap.js +40 -40
  285. package/vendor/node-addon-api/test/objectwrap_worker_thread.js +19 -19
  286. package/vendor/node-addon-api/test/promise.cc +29 -29
  287. package/vendor/node-addon-api/test/promise.js +18 -18
  288. package/vendor/node-addon-api/test/reference.cc +24 -24
  289. package/vendor/node-addon-api/test/reference.js +14 -14
  290. package/vendor/node-addon-api/test/run_script.cc +56 -56
  291. package/vendor/node-addon-api/test/run_script.js +45 -45
  292. package/vendor/node-addon-api/test/symbol.cc +79 -79
  293. package/vendor/node-addon-api/test/symbol.js +73 -73
  294. package/vendor/node-addon-api/test/testUtil.js +54 -54
  295. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +195 -195
  296. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +188 -188
  297. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +63 -63
  298. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +12 -12
  299. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +115 -115
  300. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +14 -14
  301. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +26 -26
  302. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +7 -7
  303. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +225 -225
  304. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +59 -59
  305. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +42 -42
  306. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +53 -53
  307. package/vendor/node-addon-api/test/thunking_manual.cc +140 -140
  308. package/vendor/node-addon-api/test/thunking_manual.js +17 -17
  309. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +215 -215
  310. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +188 -188
  311. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +68 -68
  312. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +12 -12
  313. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +127 -127
  314. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +14 -14
  315. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +28 -28
  316. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +7 -7
  317. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +237 -237
  318. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +59 -59
  319. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +53 -53
  320. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +53 -53
  321. package/vendor/node-addon-api/test/typedarray-bigint.js +58 -58
  322. package/vendor/node-addon-api/test/typedarray.cc +216 -216
  323. package/vendor/node-addon-api/test/typedarray.js +69 -69
  324. package/vendor/node-addon-api/test/version_management.cc +27 -27
  325. package/vendor/node-addon-api/test/version_management.js +31 -31
  326. package/vendor/node-addon-api/tools/README.md +73 -73
  327. package/vendor/node-addon-api/tools/check-napi.js +100 -100
  328. package/vendor/node-addon-api/tools/clang-format.js +68 -68
  329. package/vendor/node-addon-api/tools/conversion.js +309 -309
  330. package/vendor/node-addon-api/tools/eslint-format.js +71 -71
@@ -1,290 +1,290 @@
1
- # ThreadSafeFunction
2
-
3
- The `Napi::ThreadSafeFunction` type provides APIs for threads to communicate
4
- with the addon's main thread to invoke JavaScript functions on their behalf.
5
- Documentation can be found for an [overview of the API](threadsafe.md), as well
6
- as [differences between the two thread-safe function
7
- APIs](threadsafe.md#implementation-differences).
8
-
9
- ## Methods
10
-
11
- ### Constructor
12
-
13
- Creates a new empty instance of `Napi::ThreadSafeFunction`.
14
-
15
- ```cpp
16
- Napi::Function::ThreadSafeFunction();
17
- ```
18
-
19
- ### Constructor
20
-
21
- Creates a new instance of the `Napi::ThreadSafeFunction` object.
22
-
23
- ```cpp
24
- Napi::ThreadSafeFunction::ThreadSafeFunction(napi_threadsafe_function tsfn);
25
- ```
26
-
27
- - `tsfn`: The `napi_threadsafe_function` which is a handle for an existing
28
- thread-safe function.
29
-
30
- Returns a non-empty `Napi::ThreadSafeFunction` instance. When using this
31
- constructor, only use the `Blocking(void*)` / `NonBlocking(void*)` overloads;
32
- the `Callback` and templated `data*` overloads should _not_ be used. See below
33
- for additional details.
34
-
35
- ### New
36
-
37
- Creates a new instance of the `Napi::ThreadSafeFunction` object. The `New`
38
- function has several overloads for the various optional parameters: skip the
39
- optional parameter for that specific overload.
40
-
41
- ```cpp
42
- New(napi_env env,
43
- const Function& callback,
44
- const Object& resource,
45
- ResourceString resourceName,
46
- size_t maxQueueSize,
47
- size_t initialThreadCount,
48
- ContextType* context,
49
- Finalizer finalizeCallback,
50
- FinalizerDataType* data);
51
- ```
52
-
53
- - `env`: The `napi_env` environment in which to construct the
54
- `Napi::ThreadSafeFunction` object.
55
- - `callback`: The `Function` to call from another thread.
56
- - `[optional] resource`: An object associated with the async work that will be
57
- passed to possible async_hooks init hooks.
58
- - `resourceName`: A JavaScript string to provide an identifier for the kind of
59
- resource that is being provided for diagnostic information exposed by the
60
- async_hooks API.
61
- - `maxQueueSize`: Maximum size of the queue. `0` for no limit.
62
- - `initialThreadCount`: The initial number of threads, including the main
63
- thread, which will be making use of this function.
64
- - `[optional] context`: Data to attach to the resulting `ThreadSafeFunction`. It
65
- can be retreived by calling `GetContext()`.
66
- - `[optional] finalizeCallback`: Function to call when the `ThreadSafeFunction`
67
- is being destroyed. This callback will be invoked on the main thread when the
68
- thread-safe function is about to be destroyed. It receives the context and the
69
- finalize data given during construction (if given), and provides an
70
- opportunity for cleaning up after the threads e.g. by calling
71
- `uv_thread_join()`. It is important that, aside from the main loop thread,
72
- there be no threads left using the thread-safe function after the finalize
73
- callback completes. Must implement `void operator()(Env env, DataType* data,
74
- ContextType* hint)`, skipping `data` or `hint` if they are not provided. Can
75
- be retrieved via `GetContext()`.
76
- - `[optional] data`: Data to be passed to `finalizeCallback`.
77
-
78
- Returns a non-empty `Napi::ThreadSafeFunction` instance.
79
-
80
- ### Acquire
81
-
82
- Add a thread to this thread-safe function object, indicating that a new thread
83
- will start making use of the thread-safe function.
84
-
85
- ```cpp
86
- napi_status Napi::ThreadSafeFunction::Acquire()
87
- ```
88
-
89
- Returns one of:
90
- - `napi_ok`: The thread has successfully acquired the thread-safe function
91
- for its use.
92
- - `napi_closing`: The thread-safe function has been marked as closing via a
93
- previous call to `Abort()`.
94
-
95
- ### Release
96
-
97
- Indicate that an existing thread will stop making use of the thread-safe
98
- function. A thread should call this API when it stops making use of this
99
- thread-safe function. Using any thread-safe APIs after having called this API
100
- has undefined results in the current thread, as it may have been destroyed.
101
-
102
- ```cpp
103
- napi_status Napi::ThreadSafeFunction::Release()
104
- ```
105
-
106
- Returns one of:
107
- - `napi_ok`: The thread-safe function has been successfully released.
108
- - `napi_invalid_arg`: The thread-safe function's thread-count is zero.
109
- - `napi_generic_failure`: A generic error occurred when attempting to release
110
- the thread-safe function.
111
-
112
- ### Abort
113
-
114
- "Abort" the thread-safe function. This will cause all subsequent APIs associated
115
- with the thread-safe function except `Release()` to return `napi_closing` even
116
- before its reference count reaches zero. In particular, `BlockingCall` and
117
- `NonBlockingCall()` will return `napi_closing`, thus informing the threads that
118
- it is no longer possible to make asynchronous calls to the thread-safe function.
119
- This can be used as a criterion for terminating the thread. Upon receiving a
120
- return value of `napi_closing` from a thread-safe function call a thread must
121
- make no further use of the thread-safe function because it is no longer
122
- guaranteed to be allocated.
123
-
124
- ```cpp
125
- napi_status Napi::ThreadSafeFunction::Abort()
126
- ```
127
-
128
- Returns one of:
129
- - `napi_ok`: The thread-safe function has been successfully aborted.
130
- - `napi_invalid_arg`: The thread-safe function's thread-count is zero.
131
- - `napi_generic_failure`: A generic error occurred when attempting to abort
132
- the thread-safe function.
133
-
134
- ### BlockingCall / NonBlockingCall
135
-
136
- Calls the Javascript function in either a blocking or non-blocking fashion.
137
- - `BlockingCall()`: the API blocks until space becomes available in the queue.
138
- Will never block if the thread-safe function was created with a maximum queue
139
- size of `0`.
140
- - `NonBlockingCall()`: will return `napi_queue_full` if the queue was full,
141
- preventing data from being successfully added to the queue.
142
-
143
- There are several overloaded implementations of `BlockingCall()` and
144
- `NonBlockingCall()` for use with optional parameters: skip the optional
145
- parameter for that specific overload.
146
-
147
- **These specific function overloads should only be used on a `ThreadSafeFunction`
148
- created via `ThreadSafeFunction::New`.**
149
-
150
- ```cpp
151
- napi_status Napi::ThreadSafeFunction::BlockingCall(DataType* data, Callback callback) const
152
-
153
- napi_status Napi::ThreadSafeFunction::NonBlockingCall(DataType* data, Callback callback) const
154
- ```
155
-
156
- - `[optional] data`: Data to pass to `callback`.
157
- - `[optional] callback`: C++ function that is invoked on the main thread. The
158
- callback receives the `ThreadSafeFunction`'s JavaScript callback function to
159
- call as an `Napi::Function` in its parameters and the `DataType*` data pointer
160
- (if provided). Must implement `void operator()(Napi::Env env, Function
161
- jsCallback, DataType* data)`, skipping `data` if not provided. It is not
162
- necessary to call into JavaScript via `MakeCallback()` because Node-API runs
163
- `callback` in a context appropriate for callbacks.
164
-
165
- **These specific function overloads should only be used on a `ThreadSafeFunction`
166
- created via `ThreadSafeFunction(napi_threadsafe_function)`.**
167
-
168
- ```cpp
169
- napi_status Napi::ThreadSafeFunction::BlockingCall(void* data) const
170
-
171
- napi_status Napi::ThreadSafeFunction::NonBlockingCall(void* data) const
172
- ```
173
- - `data`: Data to pass to `call_js_cb` specified when creating the thread-safe
174
- function via `napi_create_threadsafe_function`.
175
-
176
- Returns one of:
177
- - `napi_ok`: The call was successfully added to the queue.
178
- - `napi_queue_full`: The queue was full when trying to call in a non-blocking
179
- method.
180
- - `napi_closing`: The thread-safe function is aborted and cannot accept more
181
- calls.
182
- - `napi_invalid_arg`: The thread-safe function is closed.
183
- - `napi_generic_failure`: A generic error occurred when attempting to add to the
184
- queue.
185
-
186
- ## Example
187
-
188
- ```cpp
189
- #include <chrono>
190
- #include <thread>
191
- #include <napi.h>
192
-
193
- using namespace Napi;
194
-
195
- std::thread nativeThread;
196
- ThreadSafeFunction tsfn;
197
-
198
- Value Start( const CallbackInfo& info )
199
- {
200
- Napi::Env env = info.Env();
201
-
202
- if ( info.Length() < 2 )
203
- {
204
- throw TypeError::New( env, "Expected two arguments" );
205
- }
206
- else if ( !info[0].IsFunction() )
207
- {
208
- throw TypeError::New( env, "Expected first arg to be function" );
209
- }
210
- else if ( !info[1].IsNumber() )
211
- {
212
- throw TypeError::New( env, "Expected second arg to be number" );
213
- }
214
-
215
- int count = info[1].As<Number>().Int32Value();
216
-
217
- // Create a ThreadSafeFunction
218
- tsfn = ThreadSafeFunction::New(
219
- env,
220
- info[0].As<Function>(), // JavaScript function called asynchronously
221
- "Resource Name", // Name
222
- 0, // Unlimited queue
223
- 1, // Only one thread will use this initially
224
- []( Napi::Env ) { // Finalizer used to clean threads up
225
- nativeThread.join();
226
- } );
227
-
228
- // Create a native thread
229
- nativeThread = std::thread( [count] {
230
- auto callback = []( Napi::Env env, Function jsCallback, int* value ) {
231
- // Transform native data into JS data, passing it to the provided
232
- // `jsCallback` -- the TSFN's JavaScript function.
233
- jsCallback.Call( {Number::New( env, *value )} );
234
-
235
- // We're finished with the data.
236
- delete value;
237
- };
238
-
239
- for ( int i = 0; i < count; i++ )
240
- {
241
- // Create new data
242
- int* value = new int( clock() );
243
-
244
- // Perform a blocking call
245
- napi_status status = tsfn.BlockingCall( value, callback );
246
- if ( status != napi_ok )
247
- {
248
- // Handle error
249
- break;
250
- }
251
-
252
- std::this_thread::sleep_for( std::chrono::seconds( 1 ) );
253
- }
254
-
255
- // Release the thread-safe function
256
- tsfn.Release();
257
- } );
258
-
259
- return Boolean::New(env, true);
260
- }
261
-
262
- Napi::Object Init( Napi::Env env, Object exports )
263
- {
264
- exports.Set( "start", Function::New( env, Start ) );
265
- return exports;
266
- }
267
-
268
- NODE_API_MODULE( clock, Init )
269
- ```
270
-
271
- The above code can be used from JavaScript as follows:
272
-
273
- ```js
274
- const { start } = require('bindings')('clock');
275
-
276
- start(function () {
277
- console.log("JavaScript callback called with arguments", Array.from(arguments));
278
- }, 5);
279
- ```
280
-
281
- When executed, the output will show the value of `clock()` five times at one
282
- second intervals:
283
-
284
- ```
285
- JavaScript callback called with arguments [ 84745 ]
286
- JavaScript callback called with arguments [ 103211 ]
287
- JavaScript callback called with arguments [ 104516 ]
288
- JavaScript callback called with arguments [ 105104 ]
289
- JavaScript callback called with arguments [ 105691 ]
290
- ```
1
+ # ThreadSafeFunction
2
+
3
+ The `Napi::ThreadSafeFunction` type provides APIs for threads to communicate
4
+ with the addon's main thread to invoke JavaScript functions on their behalf.
5
+ Documentation can be found for an [overview of the API](threadsafe.md), as well
6
+ as [differences between the two thread-safe function
7
+ APIs](threadsafe.md#implementation-differences).
8
+
9
+ ## Methods
10
+
11
+ ### Constructor
12
+
13
+ Creates a new empty instance of `Napi::ThreadSafeFunction`.
14
+
15
+ ```cpp
16
+ Napi::Function::ThreadSafeFunction();
17
+ ```
18
+
19
+ ### Constructor
20
+
21
+ Creates a new instance of the `Napi::ThreadSafeFunction` object.
22
+
23
+ ```cpp
24
+ Napi::ThreadSafeFunction::ThreadSafeFunction(napi_threadsafe_function tsfn);
25
+ ```
26
+
27
+ - `tsfn`: The `napi_threadsafe_function` which is a handle for an existing
28
+ thread-safe function.
29
+
30
+ Returns a non-empty `Napi::ThreadSafeFunction` instance. When using this
31
+ constructor, only use the `Blocking(void*)` / `NonBlocking(void*)` overloads;
32
+ the `Callback` and templated `data*` overloads should _not_ be used. See below
33
+ for additional details.
34
+
35
+ ### New
36
+
37
+ Creates a new instance of the `Napi::ThreadSafeFunction` object. The `New`
38
+ function has several overloads for the various optional parameters: skip the
39
+ optional parameter for that specific overload.
40
+
41
+ ```cpp
42
+ New(napi_env env,
43
+ const Function& callback,
44
+ const Object& resource,
45
+ ResourceString resourceName,
46
+ size_t maxQueueSize,
47
+ size_t initialThreadCount,
48
+ ContextType* context,
49
+ Finalizer finalizeCallback,
50
+ FinalizerDataType* data);
51
+ ```
52
+
53
+ - `env`: The `napi_env` environment in which to construct the
54
+ `Napi::ThreadSafeFunction` object.
55
+ - `callback`: The `Function` to call from another thread.
56
+ - `[optional] resource`: An object associated with the async work that will be
57
+ passed to possible async_hooks init hooks.
58
+ - `resourceName`: A JavaScript string to provide an identifier for the kind of
59
+ resource that is being provided for diagnostic information exposed by the
60
+ async_hooks API.
61
+ - `maxQueueSize`: Maximum size of the queue. `0` for no limit.
62
+ - `initialThreadCount`: The initial number of threads, including the main
63
+ thread, which will be making use of this function.
64
+ - `[optional] context`: Data to attach to the resulting `ThreadSafeFunction`. It
65
+ can be retreived by calling `GetContext()`.
66
+ - `[optional] finalizeCallback`: Function to call when the `ThreadSafeFunction`
67
+ is being destroyed. This callback will be invoked on the main thread when the
68
+ thread-safe function is about to be destroyed. It receives the context and the
69
+ finalize data given during construction (if given), and provides an
70
+ opportunity for cleaning up after the threads e.g. by calling
71
+ `uv_thread_join()`. It is important that, aside from the main loop thread,
72
+ there be no threads left using the thread-safe function after the finalize
73
+ callback completes. Must implement `void operator()(Env env, DataType* data,
74
+ ContextType* hint)`, skipping `data` or `hint` if they are not provided. Can
75
+ be retrieved via `GetContext()`.
76
+ - `[optional] data`: Data to be passed to `finalizeCallback`.
77
+
78
+ Returns a non-empty `Napi::ThreadSafeFunction` instance.
79
+
80
+ ### Acquire
81
+
82
+ Add a thread to this thread-safe function object, indicating that a new thread
83
+ will start making use of the thread-safe function.
84
+
85
+ ```cpp
86
+ napi_status Napi::ThreadSafeFunction::Acquire()
87
+ ```
88
+
89
+ Returns one of:
90
+ - `napi_ok`: The thread has successfully acquired the thread-safe function
91
+ for its use.
92
+ - `napi_closing`: The thread-safe function has been marked as closing via a
93
+ previous call to `Abort()`.
94
+
95
+ ### Release
96
+
97
+ Indicate that an existing thread will stop making use of the thread-safe
98
+ function. A thread should call this API when it stops making use of this
99
+ thread-safe function. Using any thread-safe APIs after having called this API
100
+ has undefined results in the current thread, as it may have been destroyed.
101
+
102
+ ```cpp
103
+ napi_status Napi::ThreadSafeFunction::Release()
104
+ ```
105
+
106
+ Returns one of:
107
+ - `napi_ok`: The thread-safe function has been successfully released.
108
+ - `napi_invalid_arg`: The thread-safe function's thread-count is zero.
109
+ - `napi_generic_failure`: A generic error occurred when attempting to release
110
+ the thread-safe function.
111
+
112
+ ### Abort
113
+
114
+ "Abort" the thread-safe function. This will cause all subsequent APIs associated
115
+ with the thread-safe function except `Release()` to return `napi_closing` even
116
+ before its reference count reaches zero. In particular, `BlockingCall` and
117
+ `NonBlockingCall()` will return `napi_closing`, thus informing the threads that
118
+ it is no longer possible to make asynchronous calls to the thread-safe function.
119
+ This can be used as a criterion for terminating the thread. Upon receiving a
120
+ return value of `napi_closing` from a thread-safe function call a thread must
121
+ make no further use of the thread-safe function because it is no longer
122
+ guaranteed to be allocated.
123
+
124
+ ```cpp
125
+ napi_status Napi::ThreadSafeFunction::Abort()
126
+ ```
127
+
128
+ Returns one of:
129
+ - `napi_ok`: The thread-safe function has been successfully aborted.
130
+ - `napi_invalid_arg`: The thread-safe function's thread-count is zero.
131
+ - `napi_generic_failure`: A generic error occurred when attempting to abort
132
+ the thread-safe function.
133
+
134
+ ### BlockingCall / NonBlockingCall
135
+
136
+ Calls the Javascript function in either a blocking or non-blocking fashion.
137
+ - `BlockingCall()`: the API blocks until space becomes available in the queue.
138
+ Will never block if the thread-safe function was created with a maximum queue
139
+ size of `0`.
140
+ - `NonBlockingCall()`: will return `napi_queue_full` if the queue was full,
141
+ preventing data from being successfully added to the queue.
142
+
143
+ There are several overloaded implementations of `BlockingCall()` and
144
+ `NonBlockingCall()` for use with optional parameters: skip the optional
145
+ parameter for that specific overload.
146
+
147
+ **These specific function overloads should only be used on a `ThreadSafeFunction`
148
+ created via `ThreadSafeFunction::New`.**
149
+
150
+ ```cpp
151
+ napi_status Napi::ThreadSafeFunction::BlockingCall(DataType* data, Callback callback) const
152
+
153
+ napi_status Napi::ThreadSafeFunction::NonBlockingCall(DataType* data, Callback callback) const
154
+ ```
155
+
156
+ - `[optional] data`: Data to pass to `callback`.
157
+ - `[optional] callback`: C++ function that is invoked on the main thread. The
158
+ callback receives the `ThreadSafeFunction`'s JavaScript callback function to
159
+ call as an `Napi::Function` in its parameters and the `DataType*` data pointer
160
+ (if provided). Must implement `void operator()(Napi::Env env, Function
161
+ jsCallback, DataType* data)`, skipping `data` if not provided. It is not
162
+ necessary to call into JavaScript via `MakeCallback()` because Node-API runs
163
+ `callback` in a context appropriate for callbacks.
164
+
165
+ **These specific function overloads should only be used on a `ThreadSafeFunction`
166
+ created via `ThreadSafeFunction(napi_threadsafe_function)`.**
167
+
168
+ ```cpp
169
+ napi_status Napi::ThreadSafeFunction::BlockingCall(void* data) const
170
+
171
+ napi_status Napi::ThreadSafeFunction::NonBlockingCall(void* data) const
172
+ ```
173
+ - `data`: Data to pass to `call_js_cb` specified when creating the thread-safe
174
+ function via `napi_create_threadsafe_function`.
175
+
176
+ Returns one of:
177
+ - `napi_ok`: The call was successfully added to the queue.
178
+ - `napi_queue_full`: The queue was full when trying to call in a non-blocking
179
+ method.
180
+ - `napi_closing`: The thread-safe function is aborted and cannot accept more
181
+ calls.
182
+ - `napi_invalid_arg`: The thread-safe function is closed.
183
+ - `napi_generic_failure`: A generic error occurred when attempting to add to the
184
+ queue.
185
+
186
+ ## Example
187
+
188
+ ```cpp
189
+ #include <chrono>
190
+ #include <thread>
191
+ #include <napi.h>
192
+
193
+ using namespace Napi;
194
+
195
+ std::thread nativeThread;
196
+ ThreadSafeFunction tsfn;
197
+
198
+ Value Start( const CallbackInfo& info )
199
+ {
200
+ Napi::Env env = info.Env();
201
+
202
+ if ( info.Length() < 2 )
203
+ {
204
+ throw TypeError::New( env, "Expected two arguments" );
205
+ }
206
+ else if ( !info[0].IsFunction() )
207
+ {
208
+ throw TypeError::New( env, "Expected first arg to be function" );
209
+ }
210
+ else if ( !info[1].IsNumber() )
211
+ {
212
+ throw TypeError::New( env, "Expected second arg to be number" );
213
+ }
214
+
215
+ int count = info[1].As<Number>().Int32Value();
216
+
217
+ // Create a ThreadSafeFunction
218
+ tsfn = ThreadSafeFunction::New(
219
+ env,
220
+ info[0].As<Function>(), // JavaScript function called asynchronously
221
+ "Resource Name", // Name
222
+ 0, // Unlimited queue
223
+ 1, // Only one thread will use this initially
224
+ []( Napi::Env ) { // Finalizer used to clean threads up
225
+ nativeThread.join();
226
+ } );
227
+
228
+ // Create a native thread
229
+ nativeThread = std::thread( [count] {
230
+ auto callback = []( Napi::Env env, Function jsCallback, int* value ) {
231
+ // Transform native data into JS data, passing it to the provided
232
+ // `jsCallback` -- the TSFN's JavaScript function.
233
+ jsCallback.Call( {Number::New( env, *value )} );
234
+
235
+ // We're finished with the data.
236
+ delete value;
237
+ };
238
+
239
+ for ( int i = 0; i < count; i++ )
240
+ {
241
+ // Create new data
242
+ int* value = new int( clock() );
243
+
244
+ // Perform a blocking call
245
+ napi_status status = tsfn.BlockingCall( value, callback );
246
+ if ( status != napi_ok )
247
+ {
248
+ // Handle error
249
+ break;
250
+ }
251
+
252
+ std::this_thread::sleep_for( std::chrono::seconds( 1 ) );
253
+ }
254
+
255
+ // Release the thread-safe function
256
+ tsfn.Release();
257
+ } );
258
+
259
+ return Boolean::New(env, true);
260
+ }
261
+
262
+ Napi::Object Init( Napi::Env env, Object exports )
263
+ {
264
+ exports.Set( "start", Function::New( env, Start ) );
265
+ return exports;
266
+ }
267
+
268
+ NODE_API_MODULE( clock, Init )
269
+ ```
270
+
271
+ The above code can be used from JavaScript as follows:
272
+
273
+ ```js
274
+ const { start } = require('bindings')('clock');
275
+
276
+ start(function () {
277
+ console.log("JavaScript callback called with arguments", Array.from(arguments));
278
+ }, 5);
279
+ ```
280
+
281
+ When executed, the output will show the value of `clock()` five times at one
282
+ second intervals:
283
+
284
+ ```
285
+ JavaScript callback called with arguments [ 84745 ]
286
+ JavaScript callback called with arguments [ 103211 ]
287
+ JavaScript callback called with arguments [ 104516 ]
288
+ JavaScript callback called with arguments [ 105104 ]
289
+ JavaScript callback called with arguments [ 105691 ]
290
+ ```