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,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.