koffi 0.9.2 → 0.9.5

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 (416) hide show
  1. package/CMakeLists.txt +60 -60
  2. package/README.md +163 -153
  3. package/package.json +19 -18
  4. package/src/call.hh +27 -27
  5. package/src/call_arm64.cc +482 -482
  6. package/src/call_arm64_fwd.S +115 -115
  7. package/src/call_x64_sysv.cc +477 -477
  8. package/src/call_x64_sysv_fwd.S +131 -131
  9. package/src/call_x64_win.cc +243 -243
  10. package/src/call_x64_win_fwd.asm +105 -105
  11. package/src/call_x86.cc +259 -259
  12. package/src/call_x86_fwd.S +48 -48
  13. package/src/call_x86_fwd.asm +50 -50
  14. package/src/ffi.cc +504 -504
  15. package/src/ffi.hh +135 -135
  16. package/src/util.cc +296 -296
  17. package/src/util.hh +80 -80
  18. package/vendor/dragonbox/CMakeLists.txt +122 -122
  19. package/vendor/dragonbox/LICENSE-Apache2-LLVM +218 -218
  20. package/vendor/dragonbox/LICENSE-Boost +23 -23
  21. package/vendor/dragonbox/README.md +277 -277
  22. package/vendor/dragonbox/cmake/dragonboxConfig.cmake +1 -1
  23. package/vendor/dragonbox/include/dragonbox/dragonbox.h +2670 -2670
  24. package/vendor/dragonbox/include/dragonbox/dragonbox_to_chars.h +108 -108
  25. package/vendor/dragonbox/other_files/unknown_win64_vc2019.html +539 -539
  26. package/vendor/dragonbox/source/dragonbox_to_chars.cpp +303 -303
  27. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/CMakeLists.txt +23 -23
  28. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/fp_to_chars.cpp +238 -238
  29. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/fp_to_chars.h +95 -95
  30. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/grisu_exact.h +2666 -2666
  31. package/vendor/dragonbox/subproject/3rdparty/ryu/CMakeLists.txt +16 -16
  32. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/common.h +114 -114
  33. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s.c +509 -509
  34. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s_full_table.h +367 -367
  35. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s_intrinsics.h +357 -357
  36. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/digit_table.h +35 -35
  37. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s.c +345 -345
  38. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s_full_table.h +55 -55
  39. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s_intrinsics.h +128 -128
  40. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/ryu.h +46 -46
  41. package/vendor/dragonbox/subproject/3rdparty/schubfach/CMakeLists.txt +21 -21
  42. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_32.cc +699 -699
  43. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_32.h +31 -31
  44. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_64.cc +1354 -1354
  45. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_64.h +31 -31
  46. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/example_shaded_plots.m +68 -68
  47. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/license.txt +25 -25
  48. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_distribution.m +92 -92
  49. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_distribution_prctile.m +121 -121
  50. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_histogram_shaded.m +99 -99
  51. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_shaded.m +93 -93
  52. package/vendor/dragonbox/subproject/benchmark/CMakeLists.txt +64 -64
  53. package/vendor/dragonbox/subproject/benchmark/include/benchmark.h +40 -40
  54. package/vendor/dragonbox/subproject/benchmark/matlab/plot_benchmarks.m +21 -21
  55. package/vendor/dragonbox/subproject/benchmark/matlab/plot_digit_benchmark.m +78 -78
  56. package/vendor/dragonbox/subproject/benchmark/matlab/plot_uniform_benchmark.m +95 -95
  57. package/vendor/dragonbox/subproject/benchmark/source/benchmark.cpp +237 -237
  58. package/vendor/dragonbox/subproject/benchmark/source/dragonbox.cpp +30 -30
  59. package/vendor/dragonbox/subproject/benchmark/source/grisu_exact.cpp +36 -36
  60. package/vendor/dragonbox/subproject/benchmark/source/ryu.cpp +27 -27
  61. package/vendor/dragonbox/subproject/benchmark/source/schubfach.cpp +31 -31
  62. package/vendor/dragonbox/subproject/common/CMakeLists.txt +41 -41
  63. package/vendor/dragonbox/subproject/common/include/best_rational_approx.h +96 -96
  64. package/vendor/dragonbox/subproject/common/include/big_uint.h +217 -217
  65. package/vendor/dragonbox/subproject/common/include/continued_fractions.h +173 -173
  66. package/vendor/dragonbox/subproject/common/include/good_rational_approx.h +266 -266
  67. package/vendor/dragonbox/subproject/common/include/random_float.h +182 -182
  68. package/vendor/dragonbox/subproject/common/include/rational_continued_fractions.h +56 -56
  69. package/vendor/dragonbox/subproject/common/source/big_uint.cpp +601 -601
  70. package/vendor/dragonbox/subproject/meta/CMakeLists.txt +40 -40
  71. package/vendor/dragonbox/subproject/meta/results/binary32_generated_cache.txt +81 -81
  72. package/vendor/dragonbox/subproject/meta/results/binary64_compressed_cache_error_table.txt +9 -9
  73. package/vendor/dragonbox/subproject/meta/results/binary64_generated_cache.txt +622 -622
  74. package/vendor/dragonbox/subproject/meta/source/generate_cache.cpp +126 -126
  75. package/vendor/dragonbox/subproject/meta/source/live_test.cpp +81 -81
  76. package/vendor/dragonbox/subproject/meta/source/perf_test.cpp +104 -104
  77. package/vendor/dragonbox/subproject/meta/source/sandbox.cpp +20 -20
  78. package/vendor/dragonbox/subproject/test/CMakeLists.txt +69 -69
  79. package/vendor/dragonbox/subproject/test/results/binary32.csv +255 -255
  80. package/vendor/dragonbox/subproject/test/results/binary64.csv +2047 -2047
  81. package/vendor/dragonbox/subproject/test/results/plot_required_bits.m +17 -17
  82. package/vendor/dragonbox/subproject/test/source/test_all_shorter_interval_cases.cpp +88 -88
  83. package/vendor/dragonbox/subproject/test/source/uniform_random_test.cpp +95 -95
  84. package/vendor/dragonbox/subproject/test/source/verify_cache_precision.cpp +337 -337
  85. package/vendor/dragonbox/subproject/test/source/verify_compressed_cache.cpp +154 -154
  86. package/vendor/dragonbox/subproject/test/source/verify_fast_multiplication.cpp +168 -168
  87. package/vendor/dragonbox/subproject/test/source/verify_log_computation.cpp +251 -251
  88. package/vendor/dragonbox/subproject/test/source/verify_magic_division.cpp +113 -113
  89. package/vendor/libcc/libcc.cc +7651 -7651
  90. package/vendor/libcc/libcc.hh +4312 -4312
  91. package/vendor/node-addon-api/CHANGELOG.md +859 -859
  92. package/vendor/node-addon-api/CODE_OF_CONDUCT.md +4 -4
  93. package/vendor/node-addon-api/CONTRIBUTING.md +93 -93
  94. package/vendor/node-addon-api/LICENSE.md +12 -12
  95. package/vendor/node-addon-api/README.md +293 -293
  96. package/vendor/node-addon-api/appveyor.yml +37 -37
  97. package/vendor/node-addon-api/benchmark/README.md +47 -47
  98. package/vendor/node-addon-api/benchmark/binding.gyp +25 -25
  99. package/vendor/node-addon-api/benchmark/function_args.cc +217 -217
  100. package/vendor/node-addon-api/benchmark/function_args.js +60 -60
  101. package/vendor/node-addon-api/benchmark/index.js +34 -34
  102. package/vendor/node-addon-api/benchmark/property_descriptor.cc +91 -91
  103. package/vendor/node-addon-api/benchmark/property_descriptor.js +37 -37
  104. package/vendor/node-addon-api/common.gypi +21 -21
  105. package/vendor/node-addon-api/doc/addon.md +163 -163
  106. package/vendor/node-addon-api/doc/array.md +81 -81
  107. package/vendor/node-addon-api/doc/array_buffer.md +155 -155
  108. package/vendor/node-addon-api/doc/async_context.md +86 -86
  109. package/vendor/node-addon-api/doc/async_operations.md +31 -31
  110. package/vendor/node-addon-api/doc/async_worker.md +427 -427
  111. package/vendor/node-addon-api/doc/async_worker_variants.md +557 -557
  112. package/vendor/node-addon-api/doc/bigint.md +97 -97
  113. package/vendor/node-addon-api/doc/boolean.md +68 -68
  114. package/vendor/node-addon-api/doc/buffer.md +150 -150
  115. package/vendor/node-addon-api/doc/callback_scope.md +54 -54
  116. package/vendor/node-addon-api/doc/callbackinfo.md +97 -97
  117. package/vendor/node-addon-api/doc/checker-tool.md +32 -32
  118. package/vendor/node-addon-api/doc/class_property_descriptor.md +115 -115
  119. package/vendor/node-addon-api/doc/cmake-js.md +68 -68
  120. package/vendor/node-addon-api/doc/conversion-tool.md +27 -27
  121. package/vendor/node-addon-api/doc/creating_a_release.md +62 -62
  122. package/vendor/node-addon-api/doc/dataview.md +248 -248
  123. package/vendor/node-addon-api/doc/date.md +68 -68
  124. package/vendor/node-addon-api/doc/env.md +196 -196
  125. package/vendor/node-addon-api/doc/error.md +120 -120
  126. package/vendor/node-addon-api/doc/error_handling.md +254 -254
  127. package/vendor/node-addon-api/doc/escapable_handle_scope.md +80 -80
  128. package/vendor/node-addon-api/doc/external.md +63 -63
  129. package/vendor/node-addon-api/doc/function.md +402 -402
  130. package/vendor/node-addon-api/doc/function_reference.md +238 -238
  131. package/vendor/node-addon-api/doc/generator.md +13 -13
  132. package/vendor/node-addon-api/doc/handle_scope.md +63 -63
  133. package/vendor/node-addon-api/doc/hierarchy.md +91 -91
  134. package/vendor/node-addon-api/doc/instance_wrap.md +408 -408
  135. package/vendor/node-addon-api/doc/maybe.md +76 -76
  136. package/vendor/node-addon-api/doc/memory_management.md +27 -27
  137. package/vendor/node-addon-api/doc/name.md +29 -29
  138. package/vendor/node-addon-api/doc/node-gyp.md +82 -82
  139. package/vendor/node-addon-api/doc/number.md +163 -163
  140. package/vendor/node-addon-api/doc/object.md +432 -432
  141. package/vendor/node-addon-api/doc/object_lifetime_management.md +83 -83
  142. package/vendor/node-addon-api/doc/object_reference.md +117 -117
  143. package/vendor/node-addon-api/doc/object_wrap.md +561 -561
  144. package/vendor/node-addon-api/doc/prebuild_tools.md +16 -16
  145. package/vendor/node-addon-api/doc/promises.md +79 -79
  146. package/vendor/node-addon-api/doc/property_descriptor.md +286 -286
  147. package/vendor/node-addon-api/doc/propertylvalue.md +50 -50
  148. package/vendor/node-addon-api/doc/range_error.md +59 -59
  149. package/vendor/node-addon-api/doc/reference.md +113 -113
  150. package/vendor/node-addon-api/doc/setup.md +110 -110
  151. package/vendor/node-addon-api/doc/string.md +93 -93
  152. package/vendor/node-addon-api/doc/symbol.md +60 -60
  153. package/vendor/node-addon-api/doc/threadsafe.md +121 -121
  154. package/vendor/node-addon-api/doc/threadsafe_function.md +290 -290
  155. package/vendor/node-addon-api/doc/type_error.md +59 -59
  156. package/vendor/node-addon-api/doc/typed_array.md +78 -78
  157. package/vendor/node-addon-api/doc/typed_array_of.md +137 -137
  158. package/vendor/node-addon-api/doc/typed_threadsafe_function.md +306 -306
  159. package/vendor/node-addon-api/doc/value.md +340 -340
  160. package/vendor/node-addon-api/doc/version_management.md +43 -43
  161. package/vendor/node-addon-api/except.gypi +25 -25
  162. package/vendor/node-addon-api/index.js +11 -11
  163. package/vendor/node-addon-api/napi-inl.deprecated.h +192 -192
  164. package/vendor/node-addon-api/napi-inl.h +6209 -6209
  165. package/vendor/node-addon-api/napi.h +2983 -2983
  166. package/vendor/node-addon-api/node_api.gyp +9 -9
  167. package/vendor/node-addon-api/noexcept.gypi +26 -26
  168. package/vendor/node-addon-api/package-support.json +21 -21
  169. package/vendor/node-addon-api/package.json +399 -399
  170. package/vendor/node-addon-api/test/README.md +91 -91
  171. package/vendor/node-addon-api/test/addon.cc +36 -36
  172. package/vendor/node-addon-api/test/addon.js +11 -11
  173. package/vendor/node-addon-api/test/addon_build/index.js +49 -49
  174. package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +17 -17
  175. package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +62 -62
  176. package/vendor/node-addon-api/test/addon_build/tpl/index.js +9 -9
  177. package/vendor/node-addon-api/test/addon_build/tpl/package.json +11 -11
  178. package/vendor/node-addon-api/test/addon_data.cc +99 -99
  179. package/vendor/node-addon-api/test/addon_data.js +46 -46
  180. package/vendor/node-addon-api/test/array_buffer.cc +243 -243
  181. package/vendor/node-addon-api/test/array_buffer.js +69 -69
  182. package/vendor/node-addon-api/test/async_context.cc +21 -21
  183. package/vendor/node-addon-api/test/async_context.js +86 -86
  184. package/vendor/node-addon-api/test/async_progress_queue_worker.cc +83 -83
  185. package/vendor/node-addon-api/test/async_progress_queue_worker.js +46 -46
  186. package/vendor/node-addon-api/test/async_progress_worker.cc +134 -134
  187. package/vendor/node-addon-api/test/async_progress_worker.js +61 -61
  188. package/vendor/node-addon-api/test/async_worker.cc +106 -106
  189. package/vendor/node-addon-api/test/async_worker.js +179 -179
  190. package/vendor/node-addon-api/test/async_worker_nocallback.js +13 -13
  191. package/vendor/node-addon-api/test/async_worker_persistent.cc +63 -63
  192. package/vendor/node-addon-api/test/async_worker_persistent.js +24 -24
  193. package/vendor/node-addon-api/test/basic_types/array.cc +40 -40
  194. package/vendor/node-addon-api/test/basic_types/array.js +35 -35
  195. package/vendor/node-addon-api/test/basic_types/boolean.cc +38 -38
  196. package/vendor/node-addon-api/test/basic_types/boolean.js +35 -35
  197. package/vendor/node-addon-api/test/basic_types/number.cc +99 -99
  198. package/vendor/node-addon-api/test/basic_types/number.js +114 -114
  199. package/vendor/node-addon-api/test/basic_types/value.cc +120 -120
  200. package/vendor/node-addon-api/test/basic_types/value.js +133 -133
  201. package/vendor/node-addon-api/test/bigint.cc +91 -91
  202. package/vendor/node-addon-api/test/bigint.js +53 -53
  203. package/vendor/node-addon-api/test/binding-swallowexcept.cc +12 -12
  204. package/vendor/node-addon-api/test/binding.cc +171 -171
  205. package/vendor/node-addon-api/test/binding.gyp +117 -117
  206. package/vendor/node-addon-api/test/buffer.cc +183 -183
  207. package/vendor/node-addon-api/test/buffer.js +69 -69
  208. package/vendor/node-addon-api/test/callbackscope.cc +22 -22
  209. package/vendor/node-addon-api/test/callbackscope.js +49 -49
  210. package/vendor/node-addon-api/test/common/index.js +113 -113
  211. package/vendor/node-addon-api/test/common/test_helper.h +61 -61
  212. package/vendor/node-addon-api/test/dataview/dataview.cc +48 -48
  213. package/vendor/node-addon-api/test/dataview/dataview.js +35 -35
  214. package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +115 -115
  215. package/vendor/node-addon-api/test/dataview/dataview_read_write.js +90 -90
  216. package/vendor/node-addon-api/test/date.cc +44 -44
  217. package/vendor/node-addon-api/test/date.js +18 -18
  218. package/vendor/node-addon-api/test/env_cleanup.cc +88 -88
  219. package/vendor/node-addon-api/test/env_cleanup.js +56 -56
  220. package/vendor/node-addon-api/test/error.cc +287 -287
  221. package/vendor/node-addon-api/test/error.js +81 -81
  222. package/vendor/node-addon-api/test/error_handling_for_primitives.cc +13 -13
  223. package/vendor/node-addon-api/test/error_handling_for_primitives.js +29 -29
  224. package/vendor/node-addon-api/test/error_terminating_environment.js +94 -94
  225. package/vendor/node-addon-api/test/external.cc +81 -81
  226. package/vendor/node-addon-api/test/external.js +88 -88
  227. package/vendor/node-addon-api/test/function.cc +295 -295
  228. package/vendor/node-addon-api/test/function.js +121 -121
  229. package/vendor/node-addon-api/test/function_reference.cc +202 -202
  230. package/vendor/node-addon-api/test/function_reference.js +157 -157
  231. package/vendor/node-addon-api/test/globalObject/global_object.cc +61 -61
  232. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +31 -31
  233. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +61 -61
  234. package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +40 -40
  235. package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +57 -57
  236. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +28 -28
  237. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +48 -48
  238. package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +30 -30
  239. package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +58 -58
  240. package/vendor/node-addon-api/test/handlescope.cc +60 -60
  241. package/vendor/node-addon-api/test/handlescope.js +14 -14
  242. package/vendor/node-addon-api/test/index.js +136 -136
  243. package/vendor/node-addon-api/test/maybe/check.cc +23 -23
  244. package/vendor/node-addon-api/test/maybe/index.js +38 -38
  245. package/vendor/node-addon-api/test/memory_management.cc +17 -17
  246. package/vendor/node-addon-api/test/memory_management.js +9 -9
  247. package/vendor/node-addon-api/test/movable_callbacks.cc +23 -23
  248. package/vendor/node-addon-api/test/movable_callbacks.js +21 -21
  249. package/vendor/node-addon-api/test/name.cc +108 -108
  250. package/vendor/node-addon-api/test/name.js +59 -59
  251. package/vendor/node-addon-api/test/napi_child.js +14 -14
  252. package/vendor/node-addon-api/test/object/delete_property.cc +38 -38
  253. package/vendor/node-addon-api/test/object/delete_property.js +41 -41
  254. package/vendor/node-addon-api/test/object/finalizer.cc +29 -29
  255. package/vendor/node-addon-api/test/object/finalizer.js +28 -28
  256. package/vendor/node-addon-api/test/object/get_property.cc +34 -34
  257. package/vendor/node-addon-api/test/object/get_property.js +40 -40
  258. package/vendor/node-addon-api/test/object/has_own_property.cc +34 -34
  259. package/vendor/node-addon-api/test/object/has_own_property.js +34 -34
  260. package/vendor/node-addon-api/test/object/has_property.cc +38 -38
  261. package/vendor/node-addon-api/test/object/has_property.js +37 -37
  262. package/vendor/node-addon-api/test/object/object.cc +348 -348
  263. package/vendor/node-addon-api/test/object/object.js +217 -217
  264. package/vendor/node-addon-api/test/object/object_deprecated.cc +66 -66
  265. package/vendor/node-addon-api/test/object/object_deprecated.js +47 -47
  266. package/vendor/node-addon-api/test/object/object_freeze_seal.cc +25 -25
  267. package/vendor/node-addon-api/test/object/object_freeze_seal.js +61 -61
  268. package/vendor/node-addon-api/test/object/set_property.cc +37 -37
  269. package/vendor/node-addon-api/test/object/set_property.js +29 -29
  270. package/vendor/node-addon-api/test/object/subscript_operator.cc +42 -42
  271. package/vendor/node-addon-api/test/object/subscript_operator.js +17 -17
  272. package/vendor/node-addon-api/test/object_reference.cc +219 -219
  273. package/vendor/node-addon-api/test/object_reference.js +259 -259
  274. package/vendor/node-addon-api/test/objectwrap.cc +268 -268
  275. package/vendor/node-addon-api/test/objectwrap.js +284 -284
  276. package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +26 -26
  277. package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +18 -18
  278. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +30 -30
  279. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +13 -13
  280. package/vendor/node-addon-api/test/objectwrap_removewrap.cc +45 -45
  281. package/vendor/node-addon-api/test/objectwrap_removewrap.js +40 -40
  282. package/vendor/node-addon-api/test/objectwrap_worker_thread.js +19 -19
  283. package/vendor/node-addon-api/test/promise.cc +29 -29
  284. package/vendor/node-addon-api/test/promise.js +18 -18
  285. package/vendor/node-addon-api/test/reference.cc +24 -24
  286. package/vendor/node-addon-api/test/reference.js +14 -14
  287. package/vendor/node-addon-api/test/run_script.cc +56 -56
  288. package/vendor/node-addon-api/test/run_script.js +45 -45
  289. package/vendor/node-addon-api/test/symbol.cc +79 -79
  290. package/vendor/node-addon-api/test/symbol.js +73 -73
  291. package/vendor/node-addon-api/test/testUtil.js +54 -54
  292. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +195 -195
  293. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +188 -188
  294. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +63 -63
  295. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +12 -12
  296. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +115 -115
  297. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +14 -14
  298. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +26 -26
  299. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +7 -7
  300. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +225 -225
  301. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +59 -59
  302. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +42 -42
  303. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +53 -53
  304. package/vendor/node-addon-api/test/thunking_manual.cc +140 -140
  305. package/vendor/node-addon-api/test/thunking_manual.js +17 -17
  306. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +215 -215
  307. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +188 -188
  308. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +68 -68
  309. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +12 -12
  310. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +127 -127
  311. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +14 -14
  312. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +28 -28
  313. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +7 -7
  314. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +237 -237
  315. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +59 -59
  316. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +53 -53
  317. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +53 -53
  318. package/vendor/node-addon-api/test/typedarray-bigint.js +58 -58
  319. package/vendor/node-addon-api/test/typedarray.cc +216 -216
  320. package/vendor/node-addon-api/test/typedarray.js +69 -69
  321. package/vendor/node-addon-api/test/version_management.cc +27 -27
  322. package/vendor/node-addon-api/test/version_management.js +31 -31
  323. package/vendor/node-addon-api/tools/README.md +73 -73
  324. package/vendor/node-addon-api/tools/check-napi.js +100 -100
  325. package/vendor/node-addon-api/tools/clang-format.js +68 -68
  326. package/vendor/node-addon-api/tools/conversion.js +309 -309
  327. package/vendor/node-addon-api/tools/eslint-format.js +71 -71
  328. package/build/ALL_BUILD.vcxproj +0 -186
  329. package/build/ALL_BUILD.vcxproj.filters +0 -8
  330. package/build/CMakeCache.txt +0 -417
  331. package/build/CMakeFiles/3.23.0-rc1/CMakeASMCompiler.cmake +0 -20
  332. package/build/CMakeFiles/3.23.0-rc1/CMakeASM_MASMCompiler.cmake +0 -20
  333. package/build/CMakeFiles/3.23.0-rc1/CMakeCCompiler.cmake +0 -72
  334. package/build/CMakeFiles/3.23.0-rc1/CMakeCXXCompiler.cmake +0 -83
  335. package/build/CMakeFiles/3.23.0-rc1/CMakeDetermineCompilerABI_C.bin +0 -0
  336. package/build/CMakeFiles/3.23.0-rc1/CMakeDetermineCompilerABI_CXX.bin +0 -0
  337. package/build/CMakeFiles/3.23.0-rc1/CMakeRCCompiler.cmake +0 -6
  338. package/build/CMakeFiles/3.23.0-rc1/CMakeSystem.cmake +0 -15
  339. package/build/CMakeFiles/3.23.0-rc1/CompilerIdC/CMakeCCompilerId.c +0 -828
  340. package/build/CMakeFiles/3.23.0-rc1/CompilerIdC/CompilerIdC.exe +0 -0
  341. package/build/CMakeFiles/3.23.0-rc1/CompilerIdC/CompilerIdC.vcxproj +0 -71
  342. package/build/CMakeFiles/3.23.0-rc1/CompilerIdC/Debug/CMakeCCompilerId.obj +0 -0
  343. package/build/CMakeFiles/3.23.0-rc1/CompilerIdC/Debug/CompilerIdC.exe.recipe +0 -11
  344. package/build/CMakeFiles/3.23.0-rc1/CompilerIdC/Debug/CompilerIdC.tlog/CL.command.1.tlog +0 -0
  345. package/build/CMakeFiles/3.23.0-rc1/CompilerIdC/Debug/CompilerIdC.tlog/CL.read.1.tlog +0 -0
  346. package/build/CMakeFiles/3.23.0-rc1/CompilerIdC/Debug/CompilerIdC.tlog/CL.write.1.tlog +0 -0
  347. package/build/CMakeFiles/3.23.0-rc1/CompilerIdC/Debug/CompilerIdC.tlog/CompilerIdC.lastbuildstate +0 -2
  348. package/build/CMakeFiles/3.23.0-rc1/CompilerIdC/Debug/CompilerIdC.tlog/link.command.1.tlog +0 -0
  349. package/build/CMakeFiles/3.23.0-rc1/CompilerIdC/Debug/CompilerIdC.tlog/link.read.1.tlog +0 -0
  350. package/build/CMakeFiles/3.23.0-rc1/CompilerIdC/Debug/CompilerIdC.tlog/link.write.1.tlog +0 -0
  351. package/build/CMakeFiles/3.23.0-rc1/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -816
  352. package/build/CMakeFiles/3.23.0-rc1/CompilerIdCXX/CompilerIdCXX.exe +0 -0
  353. package/build/CMakeFiles/3.23.0-rc1/CompilerIdCXX/CompilerIdCXX.vcxproj +0 -71
  354. package/build/CMakeFiles/3.23.0-rc1/CompilerIdCXX/Debug/CMakeCXXCompilerId.obj +0 -0
  355. package/build/CMakeFiles/3.23.0-rc1/CompilerIdCXX/Debug/CompilerIdCXX.exe.recipe +0 -11
  356. package/build/CMakeFiles/3.23.0-rc1/CompilerIdCXX/Debug/CompilerIdCXX.tlog/CL.command.1.tlog +0 -0
  357. package/build/CMakeFiles/3.23.0-rc1/CompilerIdCXX/Debug/CompilerIdCXX.tlog/CL.read.1.tlog +0 -0
  358. package/build/CMakeFiles/3.23.0-rc1/CompilerIdCXX/Debug/CompilerIdCXX.tlog/CL.write.1.tlog +0 -0
  359. package/build/CMakeFiles/3.23.0-rc1/CompilerIdCXX/Debug/CompilerIdCXX.tlog/CompilerIdCXX.lastbuildstate +0 -2
  360. package/build/CMakeFiles/3.23.0-rc1/CompilerIdCXX/Debug/CompilerIdCXX.tlog/link.command.1.tlog +0 -0
  361. package/build/CMakeFiles/3.23.0-rc1/CompilerIdCXX/Debug/CompilerIdCXX.tlog/link.read.1.tlog +0 -0
  362. package/build/CMakeFiles/3.23.0-rc1/CompilerIdCXX/Debug/CompilerIdCXX.tlog/link.write.1.tlog +0 -0
  363. package/build/CMakeFiles/3.23.0-rc1/VCTargetsPath.txt +0 -1
  364. package/build/CMakeFiles/3.23.0-rc1/VCTargetsPath.vcxproj +0 -31
  365. package/build/CMakeFiles/3.23.0-rc1/x64/Debug/VCTargetsPath.recipe +0 -11
  366. package/build/CMakeFiles/3.23.0-rc1/x64/Debug/VCTargetsPath.tlog/VCTargetsPath.lastbuildstate +0 -2
  367. package/build/CMakeFiles/41bcd16856091d4a38fd1f71fbe2f202/generate.stamp.rule +0 -1
  368. package/build/CMakeFiles/CMakeError.log +0 -108
  369. package/build/CMakeFiles/CMakeOutput.log +0 -413
  370. package/build/CMakeFiles/TargetDirectories.txt +0 -3
  371. package/build/CMakeFiles/cmake.check_cache +0 -1
  372. package/build/CMakeFiles/generate.stamp +0 -1
  373. package/build/CMakeFiles/generate.stamp.depend +0 -109
  374. package/build/CMakeFiles/generate.stamp.list +0 -1
  375. package/build/Release/koffi.exp +0 -0
  376. package/build/Release/koffi.lib +0 -0
  377. package/build/Release/koffi.node +0 -0
  378. package/build/ZERO_CHECK.vcxproj +0 -176
  379. package/build/ZERO_CHECK.vcxproj.filters +0 -13
  380. package/build/cmake_install.cmake +0 -44
  381. package/build/koffi.dir/Release/call_arm64.obj +0 -0
  382. package/build/koffi.dir/Release/call_x64_sysv.obj +0 -0
  383. package/build/koffi.dir/Release/call_x64_win.obj +0 -0
  384. package/build/koffi.dir/Release/call_x64_win_fwd.obj +0 -0
  385. package/build/koffi.dir/Release/call_x86.obj +0 -0
  386. package/build/koffi.dir/Release/ffi.obj +0 -0
  387. package/build/koffi.dir/Release/koffi.node.recipe +0 -14
  388. package/build/koffi.dir/Release/koffi.tlog/CL.command.1.tlog +0 -0
  389. package/build/koffi.dir/Release/koffi.tlog/CL.read.1.tlog +0 -0
  390. package/build/koffi.dir/Release/koffi.tlog/CL.write.1.tlog +0 -0
  391. package/build/koffi.dir/Release/koffi.tlog/CustomBuild.command.1.tlog +0 -10
  392. package/build/koffi.dir/Release/koffi.tlog/CustomBuild.read.1.tlog +0 -108
  393. package/build/koffi.dir/Release/koffi.tlog/CustomBuild.write.1.tlog +0 -2
  394. package/build/koffi.dir/Release/koffi.tlog/Masm.read.1u.tlog +0 -0
  395. package/build/koffi.dir/Release/koffi.tlog/Masm.write.1u.tlog +0 -0
  396. package/build/koffi.dir/Release/koffi.tlog/koffi.lastbuildstate +0 -2
  397. package/build/koffi.dir/Release/koffi.tlog/koffi.write.1u.tlog +0 -0
  398. package/build/koffi.dir/Release/koffi.tlog/link.command.1.tlog +0 -0
  399. package/build/koffi.dir/Release/koffi.tlog/link.read.1.tlog +0 -0
  400. package/build/koffi.dir/Release/koffi.tlog/link.write.1.tlog +0 -0
  401. package/build/koffi.dir/Release/libcc.obj +0 -0
  402. package/build/koffi.dir/Release/util.obj +0 -0
  403. package/build/koffi.dir/Release/win_delay_load_hook.obj +0 -0
  404. package/build/koffi.sln +0 -53
  405. package/build/koffi.vcxproj +0 -363
  406. package/build/koffi.vcxproj.filters +0 -40
  407. package/build/x64/Release/ALL_BUILD/ALL_BUILD.recipe +0 -17
  408. package/build/x64/Release/ALL_BUILD/ALL_BUILD.tlog/ALL_BUILD.lastbuildstate +0 -2
  409. package/build/x64/Release/ALL_BUILD/ALL_BUILD.tlog/CustomBuild.command.1.tlog +0 -10
  410. package/build/x64/Release/ALL_BUILD/ALL_BUILD.tlog/CustomBuild.read.1.tlog +0 -108
  411. package/build/x64/Release/ALL_BUILD/ALL_BUILD.tlog/CustomBuild.write.1.tlog +0 -2
  412. package/build/x64/Release/ZERO_CHECK/ZERO_CHECK.recipe +0 -11
  413. package/build/x64/Release/ZERO_CHECK/ZERO_CHECK.tlog/CustomBuild.command.1.tlog +0 -10
  414. package/build/x64/Release/ZERO_CHECK/ZERO_CHECK.tlog/CustomBuild.read.1.tlog +0 -109
  415. package/build/x64/Release/ZERO_CHECK/ZERO_CHECK.tlog/CustomBuild.write.1.tlog +0 -2
  416. package/build/x64/Release/ZERO_CHECK/ZERO_CHECK.tlog/ZERO_CHECK.lastbuildstate +0 -2
@@ -1,427 +1,427 @@
1
- # AsyncWorker
2
-
3
- `Napi::AsyncWorker` is an abstract class that you can subclass to remove many of
4
- the tedious tasks of moving data between the event loop and worker threads. This
5
- class internally handles all the details of creating and executing an asynchronous
6
- operation.
7
-
8
- Once created, execution is requested by calling `Napi::AsyncWorker::Queue`. When
9
- a thread is available for execution the `Napi::AsyncWorker::Execute` method will
10
- be invoked. Once `Napi::AsyncWorker::Execute` completes either
11
- `Napi::AsyncWorker::OnOK` or `Napi::AsyncWorker::OnError` will be invoked. Once
12
- the `Napi::AsyncWorker::OnOK` or `Napi::AsyncWorker::OnError` methods are
13
- complete the `Napi::AsyncWorker` instance is destructed.
14
-
15
- For the most basic use, only the `Napi::AsyncWorker::Execute` method must be
16
- implemented in a subclass.
17
-
18
- ## Methods
19
-
20
- ### Env
21
-
22
- Requests the environment in which the async worker has been initially created.
23
-
24
- ```cpp
25
- Napi::Env Napi::AsyncWorker::Env() const;
26
- ```
27
-
28
- Returns the environment in which the async worker has been created.
29
-
30
- ### Queue
31
-
32
- Requests that the work be queued for execution.
33
-
34
- ```cpp
35
- void Napi::AsyncWorker::Queue();
36
- ```
37
-
38
- ### Cancel
39
-
40
- Cancels queued work if it has not yet been started. If it has already started
41
- executing, it cannot be cancelled. If cancelled successfully neither
42
- `OnOK` nor `OnError` will be called.
43
-
44
- ```cpp
45
- void Napi::AsyncWorker::Cancel();
46
- ```
47
-
48
- ### Receiver
49
-
50
- ```cpp
51
- Napi::ObjectReference& Napi::AsyncWorker::Receiver();
52
- ```
53
-
54
- Returns the persistent object reference of the receiver object set when the async
55
- worker was created.
56
-
57
- ### Callback
58
-
59
- ```cpp
60
- Napi::FunctionReference& Napi::AsyncWorker::Callback();
61
- ```
62
-
63
- Returns the persistent function reference of the callback set when the async
64
- worker was created. The returned function reference will receive the results of
65
- the computation that happened in the `Napi::AsyncWorker::Execute` method, unless
66
- the default implementation of `Napi::AsyncWorker::OnOK` or
67
- `Napi::AsyncWorker::OnError` is overridden.
68
-
69
- ### SuppressDestruct
70
-
71
- ```cpp
72
- void Napi::AsyncWorker::SuppressDestruct();
73
- ```
74
-
75
- Prevents the destruction of the `Napi::AsyncWorker` instance upon completion of
76
- the `Napi::AsyncWorker::OnOK` callback.
77
-
78
- ### SetError
79
-
80
- Sets the error message for the error that happened during the execution. Setting
81
- an error message will cause the `Napi::AsyncWorker::OnError` method to be
82
- invoked instead of `Napi::AsyncWorker::OnOK` once the
83
- `Napi::AsyncWorker::Execute` method completes.
84
-
85
- ```cpp
86
- void Napi::AsyncWorker::SetError(const std::string& error);
87
- ```
88
-
89
- - `[in] error`: The reference to the string that represent the message of the error.
90
-
91
- ### Execute
92
-
93
- This method is used to execute some tasks outside of the **event loop** on a libuv
94
- worker thread. Subclasses must implement this method and the method is run on
95
- a thread other than that running the main event loop. As the method is not
96
- running on the main event loop, it must avoid calling any methods from node-addon-api
97
- or running any code that might invoke JavaScript. Instead, once this method is
98
- complete any interaction through node-addon-api with JavaScript should be implemented
99
- in the `Napi::AsyncWorker::OnOK` method and `Napi::AsyncWorker::OnError` which run
100
- on the main thread and are invoked when the `Napi::AsyncWorker::Execute` method completes.
101
-
102
- ```cpp
103
- virtual void Napi::AsyncWorker::Execute() = 0;
104
- ```
105
-
106
- ### OnOK
107
-
108
- This method is invoked when the computation in the `Execute` method ends.
109
- The default implementation runs the `Callback` optionally provided when the
110
- `AsyncWorker` class was created. The `Callback` will by default receive no
111
- arguments. The arguments to the `Callback` can be provided by overriding the
112
- `GetResult()` method.
113
-
114
- ```cpp
115
- virtual void Napi::AsyncWorker::OnOK();
116
- ```
117
- ### GetResult
118
-
119
- This method returns the arguments passed to the `Callback` invoked by the default
120
- `OnOK()` implementation. The default implementation returns an empty vector,
121
- providing no arguments to the `Callback`.
122
-
123
- ```cpp
124
- virtual std::vector<napi_value> Napi::AsyncWorker::GetResult(Napi::Env env);
125
- ```
126
-
127
- ### OnError
128
-
129
- This method is invoked after `Napi::AsyncWorker::Execute` completes if an error
130
- occurs while `Napi::AsyncWorker::Execute` is running and C++ exceptions are
131
- enabled or if an error was set through a call to `Napi::AsyncWorker::SetError`.
132
- The default implementation calls the `Callback` provided when the `Napi::AsyncWorker`
133
- class was created, passing in the error as the first parameter.
134
-
135
- ```cpp
136
- virtual void Napi::AsyncWorker::OnError(const Napi::Error& e);
137
- ```
138
-
139
- ### OnWorkComplete
140
-
141
- This method is invoked after the work has completed on JavaScript thread.
142
- The default implementation of this method checks the status of the work and
143
- tries to dispatch the result to `Napi::AsyncWorker::OnOk` or `Napi::AsyncWorker::Error`
144
- if the work has committed an error. If the work was cancelled, neither
145
- `Napi::AsyncWorker::OnOk` nor `Napi::AsyncWorker::Error` will be invoked.
146
- After the result is dispatched, the default implementation will call into
147
- `Napi::AsyncWorker::Destroy` if `SuppressDestruct()` was not called.
148
-
149
- ```cpp
150
- virtual void OnWorkComplete(Napi::Env env, napi_status status);
151
- ```
152
-
153
- ### OnExecute
154
-
155
- This method is invoked immediately on the work thread when scheduled.
156
- The default implementation of this method just calls the `Napi::AsyncWorker::Execute`
157
- and handles exceptions if cpp exceptions were enabled.
158
-
159
- The `OnExecute` method receives an `napi_env` argument. However, the `napi_env`
160
- must NOT be used within this method, as it does not run on the JavaScript
161
- thread and must not run any method that would cause JavaScript to run. In
162
- practice, this means that almost any use of `napi_env` will be incorrect.
163
-
164
- ```cpp
165
- virtual void OnExecute(Napi::Env env);
166
- ```
167
-
168
- ### Destroy
169
-
170
- This method is invoked when the instance must be deallocated. If
171
- `SuppressDestruct()` was not called then this method will be called after either
172
- `OnError()` or `OnOK()` complete. The default implementation of this method
173
- causes the instance to delete itself using the `delete` operator. The method is
174
- provided so as to ensure that instances allocated by means other than the `new`
175
- operator can be deallocated upon work completion.
176
-
177
- ```cpp
178
- virtual void Napi::AsyncWorker::Destroy();
179
- ```
180
-
181
- ### Constructor
182
-
183
- Creates a new `Napi::AsyncWorker`.
184
-
185
- ```cpp
186
- explicit Napi::AsyncWorker(const Napi::Function& callback);
187
- ```
188
-
189
- - `[in] callback`: The function which will be called when an asynchronous
190
- operations ends. The given function is called from the main event loop thread.
191
-
192
- Returns a `Napi::AsyncWorker` instance which can later be queued for execution by calling
193
- `Queue`.
194
-
195
- ### Constructor
196
-
197
- Creates a new `Napi::AsyncWorker`.
198
-
199
- ```cpp
200
- explicit Napi::AsyncWorker(const Napi::Function& callback, const char* resource_name);
201
- ```
202
-
203
- - `[in] callback`: The function which will be called when an asynchronous
204
- operations ends. The given function is called from the main event loop thread.
205
- - `[in] resource_name`: Null-terminated string that represents the
206
- identifier for the kind of resource that is being provided for diagnostic
207
- information exposed by the async_hooks API.
208
-
209
- Returns a `Napi::AsyncWorker` instance which can later be queued for execution by
210
- calling `Napi::AsyncWork::Queue`.
211
-
212
- ### Constructor
213
-
214
- Creates a new `Napi::AsyncWorker`.
215
-
216
- ```cpp
217
- explicit Napi::AsyncWorker(const Napi::Function& callback, const char* resource_name, const Napi::Object& resource);
218
- ```
219
-
220
- - `[in] callback`: The function which will be called when an asynchronous
221
- operations ends. The given function is called from the main event loop thread.
222
- - `[in] resource_name`: Null-terminated string that represents the
223
- identifier for the kind of resource that is being provided for diagnostic
224
- information exposed by the async_hooks API.
225
- - `[in] resource`: Object associated with the asynchronous operation that
226
- will be passed to possible async_hooks.
227
-
228
- Returns a `Napi::AsyncWorker` instance which can later be queued for execution by
229
- calling `Napi::AsyncWork::Queue`.
230
-
231
- ### Constructor
232
-
233
- Creates a new `Napi::AsyncWorker`.
234
-
235
- ```cpp
236
- explicit Napi::AsyncWorker(const Napi::Object& receiver, const Napi::Function& callback);
237
- ```
238
-
239
- - `[in] receiver`: The `this` object passed to the called function.
240
- - `[in] callback`: The function which will be called when an asynchronous
241
- operations ends. The given function is called from the main event loop thread.
242
-
243
- Returns a `Napi::AsyncWorker` instance which can later be queued for execution by
244
- calling `Napi::AsyncWork::Queue`.
245
-
246
- ### Constructor
247
-
248
- Creates a new `Napi::AsyncWorker`.
249
-
250
- ```cpp
251
- explicit Napi::AsyncWorker(const Napi::Object& receiver, const Napi::Function& callback, const char* resource_name);
252
- ```
253
-
254
- - `[in] receiver`: The `this` object passed to the called function.
255
- - `[in] callback`: The function which will be called when an asynchronous
256
- operations ends. The given function is called from the main event loop thread.
257
- - `[in] resource_name`: Null-terminated string that represents the
258
- identifier for the kind of resource that is being provided for diagnostic
259
- information exposed by the async_hooks API.
260
-
261
- Returns a `Napi::AsyncWork` instance which can later be queued for execution by
262
- calling `Napi::AsyncWork::Queue`.
263
-
264
- ### Constructor
265
-
266
- Creates a new `Napi::AsyncWorker`.
267
-
268
- ```cpp
269
- explicit Napi::AsyncWorker(const Napi::Object& receiver, const Napi::Function& callback, const char* resource_name, const Napi::Object& resource);
270
- ```
271
-
272
- - `[in] receiver`: The `this` object passed to the called function.
273
- - `[in] callback`: The function which will be called when an asynchronous
274
- operations ends. The given function is called from the main event loop thread.
275
- - `[in] resource_name`: Null-terminated string that represents the
276
- identifier for the kind of resource that is being provided for diagnostic
277
- information exposed by the async_hooks API.
278
- - `[in] resource`: Object associated with the asynchronous operation that
279
- will be passed to possible async_hooks.
280
-
281
- Returns a `Napi::AsyncWork` instance which can later be queued for execution by
282
- calling `Napi::AsyncWork::Queue`.
283
-
284
-
285
- ### Constructor
286
-
287
- Creates a new `Napi::AsyncWorker`.
288
-
289
- ```cpp
290
- explicit Napi::AsyncWorker(Napi::Env env);
291
- ```
292
-
293
- - `[in] env`: The environment in which to create the `Napi::AsyncWorker`.
294
-
295
- Returns an `Napi::AsyncWorker` instance which can later be queued for execution by calling
296
- `Napi::AsyncWorker::Queue`.
297
-
298
- ### Constructor
299
-
300
- Creates a new `Napi::AsyncWorker`.
301
-
302
- ```cpp
303
- explicit Napi::AsyncWorker(Napi::Env env, const char* resource_name);
304
- ```
305
-
306
- - `[in] env`: The environment in which to create the `Napi::AsyncWorker`.
307
- - `[in] resource_name`: Null-terminated string that represents the
308
- identifier for the kind of resource that is being provided for diagnostic
309
- information exposed by the async_hooks API.
310
-
311
- Returns a `Napi::AsyncWorker` instance which can later be queued for execution by
312
- calling `Napi::AsyncWorker::Queue`.
313
-
314
- ### Constructor
315
-
316
- Creates a new `Napi::AsyncWorker`.
317
-
318
- ```cpp
319
- explicit Napi::AsyncWorker(Napi::Env env, const char* resource_name, const Napi::Object& resource);
320
- ```
321
-
322
- - `[in] env`: The environment in which to create the `Napi::AsyncWorker`.
323
- - `[in] resource_name`: Null-terminated string that represents the
324
- identifier for the kind of resource that is being provided for diagnostic
325
- information exposed by the async_hooks API.
326
- - `[in] resource`: Object associated with the asynchronous operation that
327
- will be passed to possible async_hooks.
328
-
329
- Returns a `Napi::AsyncWorker` instance which can later be queued for execution by
330
- calling `Napi::AsyncWorker::Queue`.
331
-
332
- ### Destructor
333
-
334
- Deletes the created work object that is used to execute logic asynchronously.
335
-
336
- ```cpp
337
- virtual Napi::AsyncWorker::~AsyncWorker();
338
- ```
339
-
340
- ## Operator
341
-
342
- ```cpp
343
- Napi::AsyncWorker::operator napi_async_work() const;
344
- ```
345
-
346
- Returns the Node-API `napi_async_work` wrapped by the `Napi::AsyncWorker` object. This
347
- can be used to mix usage of the C Node-API and node-addon-api.
348
-
349
- ## Example
350
-
351
- The first step to use the `Napi::AsyncWorker` class is to create a new class that
352
- inherits from it and implement the `Napi::AsyncWorker::Execute` abstract method.
353
- Typically input to your worker will be saved within class' fields generally
354
- passed in through its constructor.
355
-
356
- When the `Napi::AsyncWorker::Execute` method completes without errors the
357
- `Napi::AsyncWorker::OnOK` function callback will be invoked. In this function the
358
- results of the computation will be reassembled and returned back to the initial
359
- JavaScript context.
360
-
361
- `Napi::AsyncWorker` ensures that all the code in the `Napi::AsyncWorker::Execute`
362
- function runs in the background out of the **event loop** thread and at the end
363
- the `Napi::AsyncWorker::OnOK` or `Napi::AsyncWorker::OnError` function will be
364
- called and are executed as part of the event loop.
365
-
366
- The code below shows a basic example of `Napi::AsyncWorker` the implementation:
367
-
368
- ```cpp
369
- #include<napi.h>
370
-
371
- #include <chrono>
372
- #include <thread>
373
-
374
- using namespace Napi;
375
-
376
- class EchoWorker : public AsyncWorker {
377
- public:
378
- EchoWorker(Function& callback, std::string& echo)
379
- : AsyncWorker(callback), echo(echo) {}
380
-
381
- ~EchoWorker() {}
382
- // This code will be executed on the worker thread
383
- void Execute() override {
384
- // Need to simulate cpu heavy task
385
- std::this_thread::sleep_for(std::chrono::seconds(1));
386
- }
387
-
388
- void OnOK() override {
389
- HandleScope scope(Env());
390
- Callback().Call({Env().Null(), String::New(Env(), echo)});
391
- }
392
-
393
- private:
394
- std::string echo;
395
- };
396
- ```
397
-
398
- The `EchoWorker`'s constructor calls the base class' constructor to pass in the
399
- callback that the `Napi::AsyncWorker` base class will store persistently. When
400
- the work on the `Napi::AsyncWorker::Execute` method is done the
401
- `Napi::AsyncWorker::OnOk` method is called and the results return back to
402
- JavaScript invoking the stored callback with its associated environment.
403
-
404
- The following code shows an example of how to create and use an `Napi::AsyncWorker`.
405
-
406
- ```cpp
407
- #include<napi.h>
408
-
409
- // Include EchoWorker class
410
- // ..
411
-
412
- using namespace Napi;
413
-
414
- Value Echo(const CallbackInfo& info) {
415
- // You need to validate the arguments here.
416
- Function cb = info[1].As<Function>();
417
- std::string in = info[0].As<String>();
418
- EchoWorker* wk = new EchoWorker(cb, in);
419
- wk->Queue();
420
- return info.Env().Undefined();
421
- ```
422
-
423
- Using the implementation of a `Napi::AsyncWorker` is straight forward. You only
424
- need to create a new instance and pass to its constructor the callback you want to
425
- execute when your asynchronous task ends and other data you need for your
426
- computation. Once created the only other action you have to do is to call the
427
- `Napi::AsyncWorker::Queue` method that will queue the created worker for execution.
1
+ # AsyncWorker
2
+
3
+ `Napi::AsyncWorker` is an abstract class that you can subclass to remove many of
4
+ the tedious tasks of moving data between the event loop and worker threads. This
5
+ class internally handles all the details of creating and executing an asynchronous
6
+ operation.
7
+
8
+ Once created, execution is requested by calling `Napi::AsyncWorker::Queue`. When
9
+ a thread is available for execution the `Napi::AsyncWorker::Execute` method will
10
+ be invoked. Once `Napi::AsyncWorker::Execute` completes either
11
+ `Napi::AsyncWorker::OnOK` or `Napi::AsyncWorker::OnError` will be invoked. Once
12
+ the `Napi::AsyncWorker::OnOK` or `Napi::AsyncWorker::OnError` methods are
13
+ complete the `Napi::AsyncWorker` instance is destructed.
14
+
15
+ For the most basic use, only the `Napi::AsyncWorker::Execute` method must be
16
+ implemented in a subclass.
17
+
18
+ ## Methods
19
+
20
+ ### Env
21
+
22
+ Requests the environment in which the async worker has been initially created.
23
+
24
+ ```cpp
25
+ Napi::Env Napi::AsyncWorker::Env() const;
26
+ ```
27
+
28
+ Returns the environment in which the async worker has been created.
29
+
30
+ ### Queue
31
+
32
+ Requests that the work be queued for execution.
33
+
34
+ ```cpp
35
+ void Napi::AsyncWorker::Queue();
36
+ ```
37
+
38
+ ### Cancel
39
+
40
+ Cancels queued work if it has not yet been started. If it has already started
41
+ executing, it cannot be cancelled. If cancelled successfully neither
42
+ `OnOK` nor `OnError` will be called.
43
+
44
+ ```cpp
45
+ void Napi::AsyncWorker::Cancel();
46
+ ```
47
+
48
+ ### Receiver
49
+
50
+ ```cpp
51
+ Napi::ObjectReference& Napi::AsyncWorker::Receiver();
52
+ ```
53
+
54
+ Returns the persistent object reference of the receiver object set when the async
55
+ worker was created.
56
+
57
+ ### Callback
58
+
59
+ ```cpp
60
+ Napi::FunctionReference& Napi::AsyncWorker::Callback();
61
+ ```
62
+
63
+ Returns the persistent function reference of the callback set when the async
64
+ worker was created. The returned function reference will receive the results of
65
+ the computation that happened in the `Napi::AsyncWorker::Execute` method, unless
66
+ the default implementation of `Napi::AsyncWorker::OnOK` or
67
+ `Napi::AsyncWorker::OnError` is overridden.
68
+
69
+ ### SuppressDestruct
70
+
71
+ ```cpp
72
+ void Napi::AsyncWorker::SuppressDestruct();
73
+ ```
74
+
75
+ Prevents the destruction of the `Napi::AsyncWorker` instance upon completion of
76
+ the `Napi::AsyncWorker::OnOK` callback.
77
+
78
+ ### SetError
79
+
80
+ Sets the error message for the error that happened during the execution. Setting
81
+ an error message will cause the `Napi::AsyncWorker::OnError` method to be
82
+ invoked instead of `Napi::AsyncWorker::OnOK` once the
83
+ `Napi::AsyncWorker::Execute` method completes.
84
+
85
+ ```cpp
86
+ void Napi::AsyncWorker::SetError(const std::string& error);
87
+ ```
88
+
89
+ - `[in] error`: The reference to the string that represent the message of the error.
90
+
91
+ ### Execute
92
+
93
+ This method is used to execute some tasks outside of the **event loop** on a libuv
94
+ worker thread. Subclasses must implement this method and the method is run on
95
+ a thread other than that running the main event loop. As the method is not
96
+ running on the main event loop, it must avoid calling any methods from node-addon-api
97
+ or running any code that might invoke JavaScript. Instead, once this method is
98
+ complete any interaction through node-addon-api with JavaScript should be implemented
99
+ in the `Napi::AsyncWorker::OnOK` method and `Napi::AsyncWorker::OnError` which run
100
+ on the main thread and are invoked when the `Napi::AsyncWorker::Execute` method completes.
101
+
102
+ ```cpp
103
+ virtual void Napi::AsyncWorker::Execute() = 0;
104
+ ```
105
+
106
+ ### OnOK
107
+
108
+ This method is invoked when the computation in the `Execute` method ends.
109
+ The default implementation runs the `Callback` optionally provided when the
110
+ `AsyncWorker` class was created. The `Callback` will by default receive no
111
+ arguments. The arguments to the `Callback` can be provided by overriding the
112
+ `GetResult()` method.
113
+
114
+ ```cpp
115
+ virtual void Napi::AsyncWorker::OnOK();
116
+ ```
117
+ ### GetResult
118
+
119
+ This method returns the arguments passed to the `Callback` invoked by the default
120
+ `OnOK()` implementation. The default implementation returns an empty vector,
121
+ providing no arguments to the `Callback`.
122
+
123
+ ```cpp
124
+ virtual std::vector<napi_value> Napi::AsyncWorker::GetResult(Napi::Env env);
125
+ ```
126
+
127
+ ### OnError
128
+
129
+ This method is invoked after `Napi::AsyncWorker::Execute` completes if an error
130
+ occurs while `Napi::AsyncWorker::Execute` is running and C++ exceptions are
131
+ enabled or if an error was set through a call to `Napi::AsyncWorker::SetError`.
132
+ The default implementation calls the `Callback` provided when the `Napi::AsyncWorker`
133
+ class was created, passing in the error as the first parameter.
134
+
135
+ ```cpp
136
+ virtual void Napi::AsyncWorker::OnError(const Napi::Error& e);
137
+ ```
138
+
139
+ ### OnWorkComplete
140
+
141
+ This method is invoked after the work has completed on JavaScript thread.
142
+ The default implementation of this method checks the status of the work and
143
+ tries to dispatch the result to `Napi::AsyncWorker::OnOk` or `Napi::AsyncWorker::Error`
144
+ if the work has committed an error. If the work was cancelled, neither
145
+ `Napi::AsyncWorker::OnOk` nor `Napi::AsyncWorker::Error` will be invoked.
146
+ After the result is dispatched, the default implementation will call into
147
+ `Napi::AsyncWorker::Destroy` if `SuppressDestruct()` was not called.
148
+
149
+ ```cpp
150
+ virtual void OnWorkComplete(Napi::Env env, napi_status status);
151
+ ```
152
+
153
+ ### OnExecute
154
+
155
+ This method is invoked immediately on the work thread when scheduled.
156
+ The default implementation of this method just calls the `Napi::AsyncWorker::Execute`
157
+ and handles exceptions if cpp exceptions were enabled.
158
+
159
+ The `OnExecute` method receives an `napi_env` argument. However, the `napi_env`
160
+ must NOT be used within this method, as it does not run on the JavaScript
161
+ thread and must not run any method that would cause JavaScript to run. In
162
+ practice, this means that almost any use of `napi_env` will be incorrect.
163
+
164
+ ```cpp
165
+ virtual void OnExecute(Napi::Env env);
166
+ ```
167
+
168
+ ### Destroy
169
+
170
+ This method is invoked when the instance must be deallocated. If
171
+ `SuppressDestruct()` was not called then this method will be called after either
172
+ `OnError()` or `OnOK()` complete. The default implementation of this method
173
+ causes the instance to delete itself using the `delete` operator. The method is
174
+ provided so as to ensure that instances allocated by means other than the `new`
175
+ operator can be deallocated upon work completion.
176
+
177
+ ```cpp
178
+ virtual void Napi::AsyncWorker::Destroy();
179
+ ```
180
+
181
+ ### Constructor
182
+
183
+ Creates a new `Napi::AsyncWorker`.
184
+
185
+ ```cpp
186
+ explicit Napi::AsyncWorker(const Napi::Function& callback);
187
+ ```
188
+
189
+ - `[in] callback`: The function which will be called when an asynchronous
190
+ operations ends. The given function is called from the main event loop thread.
191
+
192
+ Returns a `Napi::AsyncWorker` instance which can later be queued for execution by calling
193
+ `Queue`.
194
+
195
+ ### Constructor
196
+
197
+ Creates a new `Napi::AsyncWorker`.
198
+
199
+ ```cpp
200
+ explicit Napi::AsyncWorker(const Napi::Function& callback, const char* resource_name);
201
+ ```
202
+
203
+ - `[in] callback`: The function which will be called when an asynchronous
204
+ operations ends. The given function is called from the main event loop thread.
205
+ - `[in] resource_name`: Null-terminated string that represents the
206
+ identifier for the kind of resource that is being provided for diagnostic
207
+ information exposed by the async_hooks API.
208
+
209
+ Returns a `Napi::AsyncWorker` instance which can later be queued for execution by
210
+ calling `Napi::AsyncWork::Queue`.
211
+
212
+ ### Constructor
213
+
214
+ Creates a new `Napi::AsyncWorker`.
215
+
216
+ ```cpp
217
+ explicit Napi::AsyncWorker(const Napi::Function& callback, const char* resource_name, const Napi::Object& resource);
218
+ ```
219
+
220
+ - `[in] callback`: The function which will be called when an asynchronous
221
+ operations ends. The given function is called from the main event loop thread.
222
+ - `[in] resource_name`: Null-terminated string that represents the
223
+ identifier for the kind of resource that is being provided for diagnostic
224
+ information exposed by the async_hooks API.
225
+ - `[in] resource`: Object associated with the asynchronous operation that
226
+ will be passed to possible async_hooks.
227
+
228
+ Returns a `Napi::AsyncWorker` instance which can later be queued for execution by
229
+ calling `Napi::AsyncWork::Queue`.
230
+
231
+ ### Constructor
232
+
233
+ Creates a new `Napi::AsyncWorker`.
234
+
235
+ ```cpp
236
+ explicit Napi::AsyncWorker(const Napi::Object& receiver, const Napi::Function& callback);
237
+ ```
238
+
239
+ - `[in] receiver`: The `this` object passed to the called function.
240
+ - `[in] callback`: The function which will be called when an asynchronous
241
+ operations ends. The given function is called from the main event loop thread.
242
+
243
+ Returns a `Napi::AsyncWorker` instance which can later be queued for execution by
244
+ calling `Napi::AsyncWork::Queue`.
245
+
246
+ ### Constructor
247
+
248
+ Creates a new `Napi::AsyncWorker`.
249
+
250
+ ```cpp
251
+ explicit Napi::AsyncWorker(const Napi::Object& receiver, const Napi::Function& callback, const char* resource_name);
252
+ ```
253
+
254
+ - `[in] receiver`: The `this` object passed to the called function.
255
+ - `[in] callback`: The function which will be called when an asynchronous
256
+ operations ends. The given function is called from the main event loop thread.
257
+ - `[in] resource_name`: Null-terminated string that represents the
258
+ identifier for the kind of resource that is being provided for diagnostic
259
+ information exposed by the async_hooks API.
260
+
261
+ Returns a `Napi::AsyncWork` instance which can later be queued for execution by
262
+ calling `Napi::AsyncWork::Queue`.
263
+
264
+ ### Constructor
265
+
266
+ Creates a new `Napi::AsyncWorker`.
267
+
268
+ ```cpp
269
+ explicit Napi::AsyncWorker(const Napi::Object& receiver, const Napi::Function& callback, const char* resource_name, const Napi::Object& resource);
270
+ ```
271
+
272
+ - `[in] receiver`: The `this` object passed to the called function.
273
+ - `[in] callback`: The function which will be called when an asynchronous
274
+ operations ends. The given function is called from the main event loop thread.
275
+ - `[in] resource_name`: Null-terminated string that represents the
276
+ identifier for the kind of resource that is being provided for diagnostic
277
+ information exposed by the async_hooks API.
278
+ - `[in] resource`: Object associated with the asynchronous operation that
279
+ will be passed to possible async_hooks.
280
+
281
+ Returns a `Napi::AsyncWork` instance which can later be queued for execution by
282
+ calling `Napi::AsyncWork::Queue`.
283
+
284
+
285
+ ### Constructor
286
+
287
+ Creates a new `Napi::AsyncWorker`.
288
+
289
+ ```cpp
290
+ explicit Napi::AsyncWorker(Napi::Env env);
291
+ ```
292
+
293
+ - `[in] env`: The environment in which to create the `Napi::AsyncWorker`.
294
+
295
+ Returns an `Napi::AsyncWorker` instance which can later be queued for execution by calling
296
+ `Napi::AsyncWorker::Queue`.
297
+
298
+ ### Constructor
299
+
300
+ Creates a new `Napi::AsyncWorker`.
301
+
302
+ ```cpp
303
+ explicit Napi::AsyncWorker(Napi::Env env, const char* resource_name);
304
+ ```
305
+
306
+ - `[in] env`: The environment in which to create the `Napi::AsyncWorker`.
307
+ - `[in] resource_name`: Null-terminated string that represents the
308
+ identifier for the kind of resource that is being provided for diagnostic
309
+ information exposed by the async_hooks API.
310
+
311
+ Returns a `Napi::AsyncWorker` instance which can later be queued for execution by
312
+ calling `Napi::AsyncWorker::Queue`.
313
+
314
+ ### Constructor
315
+
316
+ Creates a new `Napi::AsyncWorker`.
317
+
318
+ ```cpp
319
+ explicit Napi::AsyncWorker(Napi::Env env, const char* resource_name, const Napi::Object& resource);
320
+ ```
321
+
322
+ - `[in] env`: The environment in which to create the `Napi::AsyncWorker`.
323
+ - `[in] resource_name`: Null-terminated string that represents the
324
+ identifier for the kind of resource that is being provided for diagnostic
325
+ information exposed by the async_hooks API.
326
+ - `[in] resource`: Object associated with the asynchronous operation that
327
+ will be passed to possible async_hooks.
328
+
329
+ Returns a `Napi::AsyncWorker` instance which can later be queued for execution by
330
+ calling `Napi::AsyncWorker::Queue`.
331
+
332
+ ### Destructor
333
+
334
+ Deletes the created work object that is used to execute logic asynchronously.
335
+
336
+ ```cpp
337
+ virtual Napi::AsyncWorker::~AsyncWorker();
338
+ ```
339
+
340
+ ## Operator
341
+
342
+ ```cpp
343
+ Napi::AsyncWorker::operator napi_async_work() const;
344
+ ```
345
+
346
+ Returns the Node-API `napi_async_work` wrapped by the `Napi::AsyncWorker` object. This
347
+ can be used to mix usage of the C Node-API and node-addon-api.
348
+
349
+ ## Example
350
+
351
+ The first step to use the `Napi::AsyncWorker` class is to create a new class that
352
+ inherits from it and implement the `Napi::AsyncWorker::Execute` abstract method.
353
+ Typically input to your worker will be saved within class' fields generally
354
+ passed in through its constructor.
355
+
356
+ When the `Napi::AsyncWorker::Execute` method completes without errors the
357
+ `Napi::AsyncWorker::OnOK` function callback will be invoked. In this function the
358
+ results of the computation will be reassembled and returned back to the initial
359
+ JavaScript context.
360
+
361
+ `Napi::AsyncWorker` ensures that all the code in the `Napi::AsyncWorker::Execute`
362
+ function runs in the background out of the **event loop** thread and at the end
363
+ the `Napi::AsyncWorker::OnOK` or `Napi::AsyncWorker::OnError` function will be
364
+ called and are executed as part of the event loop.
365
+
366
+ The code below shows a basic example of `Napi::AsyncWorker` the implementation:
367
+
368
+ ```cpp
369
+ #include<napi.h>
370
+
371
+ #include <chrono>
372
+ #include <thread>
373
+
374
+ using namespace Napi;
375
+
376
+ class EchoWorker : public AsyncWorker {
377
+ public:
378
+ EchoWorker(Function& callback, std::string& echo)
379
+ : AsyncWorker(callback), echo(echo) {}
380
+
381
+ ~EchoWorker() {}
382
+ // This code will be executed on the worker thread
383
+ void Execute() override {
384
+ // Need to simulate cpu heavy task
385
+ std::this_thread::sleep_for(std::chrono::seconds(1));
386
+ }
387
+
388
+ void OnOK() override {
389
+ HandleScope scope(Env());
390
+ Callback().Call({Env().Null(), String::New(Env(), echo)});
391
+ }
392
+
393
+ private:
394
+ std::string echo;
395
+ };
396
+ ```
397
+
398
+ The `EchoWorker`'s constructor calls the base class' constructor to pass in the
399
+ callback that the `Napi::AsyncWorker` base class will store persistently. When
400
+ the work on the `Napi::AsyncWorker::Execute` method is done the
401
+ `Napi::AsyncWorker::OnOk` method is called and the results return back to
402
+ JavaScript invoking the stored callback with its associated environment.
403
+
404
+ The following code shows an example of how to create and use an `Napi::AsyncWorker`.
405
+
406
+ ```cpp
407
+ #include<napi.h>
408
+
409
+ // Include EchoWorker class
410
+ // ..
411
+
412
+ using namespace Napi;
413
+
414
+ Value Echo(const CallbackInfo& info) {
415
+ // You need to validate the arguments here.
416
+ Function cb = info[1].As<Function>();
417
+ std::string in = info[0].As<String>();
418
+ EchoWorker* wk = new EchoWorker(cb, in);
419
+ wk->Queue();
420
+ return info.Env().Undefined();
421
+ ```
422
+
423
+ Using the implementation of a `Napi::AsyncWorker` is straight forward. You only
424
+ need to create a new instance and pass to its constructor the callback you want to
425
+ execute when your asynchronous task ends and other data you need for your
426
+ computation. Once created the only other action you have to do is to call the
427
+ `Napi::AsyncWorker::Queue` method that will queue the created worker for execution.