koffi 0.9.4 → 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 (327) 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
@@ -1,561 +1,561 @@
1
- # Object Wrap
2
-
3
- Class `Napi::ObjectWrap<T>` inherits from class [`Napi::InstanceWrap<T>`][].
4
-
5
- The `Napi::ObjectWrap<T>` class is used to bind the lifetime of C++ code to a
6
- JavaScript object. Once bound, each time an instance of the JavaScript object
7
- is created, an instance of the C++ class will also be created. When a method
8
- is called on the JavaScript object which is defined as an InstanceMethod, the
9
- corresponding C++ method on the wrapped C++ class will be invoked.
10
-
11
- In order to create a wrapper it's necessary to extend the
12
- `Napi::ObjectWrap<T>` class which contains all the plumbing to connect
13
- JavaScript code with a C++ object. Classes extending `Napi::ObjectWrap` can be
14
- instantiated from JavaScript using the **new** operator, and their methods can
15
- be directly invoked from JavaScript. The **wrap** word refers to a way of
16
- grouping methods and state of the class because it will be necessary write
17
- custom code to bridge each of your C++ class methods.
18
-
19
- ## Example
20
-
21
- ```cpp
22
- #include <napi.h>
23
-
24
- class Example : public Napi::ObjectWrap<Example> {
25
- public:
26
- static Napi::Object Init(Napi::Env env, Napi::Object exports);
27
- Example(const Napi::CallbackInfo& info);
28
- static Napi::Value CreateNewItem(const Napi::CallbackInfo& info);
29
-
30
- private:
31
- double _value;
32
- Napi::Value GetValue(const Napi::CallbackInfo& info);
33
- Napi::Value SetValue(const Napi::CallbackInfo& info);
34
- };
35
-
36
- Napi::Object Example::Init(Napi::Env env, Napi::Object exports) {
37
- // This method is used to hook the accessor and method callbacks
38
- Napi::Function func = DefineClass(env, "Example", {
39
- InstanceMethod<&Example::GetValue>("GetValue", static_cast<napi_property_attributes>(napi_writable | napi_configurable)),
40
- InstanceMethod<&Example::SetValue>("SetValue", static_cast<napi_property_attributes>(napi_writable | napi_configurable)),
41
- StaticMethod<&Example::CreateNewItem>("CreateNewItem", static_cast<napi_property_attributes>(napi_writable | napi_configurable)),
42
- });
43
-
44
- Napi::FunctionReference* constructor = new Napi::FunctionReference();
45
-
46
- // Create a persistent reference to the class constructor. This will allow
47
- // a function called on a class prototype and a function
48
- // called on instance of a class to be distinguished from each other.
49
- *constructor = Napi::Persistent(func);
50
- exports.Set("Example", func);
51
-
52
- // Store the constructor as the add-on instance data. This will allow this
53
- // add-on to support multiple instances of itself running on multiple worker
54
- // threads, as well as multiple instances of itself running in different
55
- // contexts on the same thread.
56
- //
57
- // By default, the value set on the environment here will be destroyed when
58
- // the add-on is unloaded using the `delete` operator, but it is also
59
- // possible to supply a custom deleter.
60
- env.SetInstanceData<Napi::FunctionReference>(constructor);
61
-
62
- return exports;
63
- }
64
-
65
- Example::Example(const Napi::CallbackInfo& info) :
66
- Napi::ObjectWrap<Example>(info) {
67
- Napi::Env env = info.Env();
68
- // ...
69
- Napi::Number value = info[0].As<Napi::Number>();
70
- this->_value = value.DoubleValue();
71
- }
72
-
73
- Napi::Value Example::GetValue(const Napi::CallbackInfo& info){
74
- Napi::Env env = info.Env();
75
- return Napi::Number::New(env, this->_value);
76
- }
77
-
78
- Napi::Value Example::SetValue(const Napi::CallbackInfo& info){
79
- Napi::Env env = info.Env();
80
- // ...
81
- Napi::Number value = info[0].As<Napi::Number>();
82
- this->_value = value.DoubleValue();
83
- return this->GetValue(info);
84
- }
85
-
86
- // Initialize native add-on
87
- Napi::Object Init (Napi::Env env, Napi::Object exports) {
88
- Example::Init(env, exports);
89
- return exports;
90
- }
91
-
92
- // Create a new item using the constructor stored during Init.
93
- Napi::Value Example::CreateNewItem(const Napi::CallbackInfo& info) {
94
- // Retrieve the instance data we stored during `Init()`. We only stored the
95
- // constructor there, so we retrieve it here to create a new instance of the
96
- // JS class the constructor represents.
97
- Napi::FunctionReference* constructor =
98
- info.Env().GetInstanceData<Napi::FunctionReference>();
99
- return constructor->New({ Napi::Number::New(info.Env(), 42) });
100
- }
101
-
102
- // Register and initialize native add-on
103
- NODE_API_MODULE(NODE_GYP_MODULE_NAME, Init)
104
- ```
105
-
106
- The above code can be used from JavaScript as follows:
107
-
108
- ```js
109
- 'use strict'
110
-
111
- const { Example } = require('bindings')('addon')
112
-
113
- const example = new Example(11)
114
- console.log(example.GetValue())
115
- // It prints 11
116
- example.SetValue(19)
117
- console.log(example.GetValue());
118
- // It prints 19
119
- ```
120
-
121
- At initialization time, the `Napi::ObjectWrap::DefineClass()` method must be
122
- used to hook up the accessor and method callbacks. It takes a list of property
123
- descriptors, which can be constructed via the various static methods on the base
124
- class.
125
-
126
- When JavaScript code invokes the constructor, the constructor callback will
127
- create a new C++ instance and "wrap" it into the newly created JavaScript
128
- object.
129
-
130
- When JavaScript code invokes a method or a property accessor on the class the
131
- corresponding C++ callback function will be executed.
132
-
133
- For a wrapped object it could be difficult to distinguish between a function
134
- called on a class prototype and a function called on instance of a class.
135
- Therefore it is good practice to save a persistent reference to the class
136
- constructor. This allows the two cases to be distinguished from each other by
137
- checking the this object against the class constructor.
138
-
139
- ## Methods
140
-
141
- ### Constructor
142
-
143
- Creates a new instance of a JavaScript object that wraps native instance.
144
-
145
- ```cpp
146
- Napi::ObjectWrap(const Napi::CallbackInfo& callbackInfo);
147
- ```
148
-
149
- - `[in] callbackInfo`: The object representing the components of the JavaScript
150
- request being made.
151
-
152
- ### Unwrap
153
-
154
- Retrieves a native instance wrapped in a JavaScript object.
155
-
156
- ```cpp
157
- static T* Napi::ObjectWrap::Unwrap(Napi::Object wrapper);
158
- ```
159
-
160
- * `[in] wrapper`: The JavaScript object that wraps the native instance.
161
-
162
- Returns a native instance wrapped in a JavaScript object. Given the
163
- `Napi::Object`, this allows a method to get a pointer to the wrapped
164
- C++ object and then reference fields, call methods, etc. within that class.
165
- In many cases calling Unwrap is not required, as methods can
166
- use the `this` field for ObjectWrap when running in a method on a
167
- class that extends ObjectWrap.
168
-
169
- ### DefineClass
170
-
171
- Defnines a JavaScript class with constructor, static and instance properties and
172
- methods.
173
-
174
- ```cpp
175
- static Napi::Function Napi::ObjectWrap::DefineClass(Napi::Env env,
176
- const char* utf8name,
177
- const std::initializer_list<PropertyDescriptor>& properties,
178
- void* data = nullptr);
179
- ```
180
-
181
- * `[in] env`: The environment in which to construct a JavaScript class.
182
- * `[in] utf8name`: Null-terminated string that represents the name of the
183
- JavaScript constructor function.
184
- * `[in] properties`: Initializer list of class property descriptor describing
185
- static and instance properties and methods of the class.
186
- See: [`Class property and descriptor`](class_property_descriptor.md).
187
- * `[in] data`: User-provided data passed to the constructor callback as `data`
188
- property of the `Napi::CallbackInfo`.
189
-
190
- Returns a `Napi::Function` representing the constructor function for the class.
191
-
192
- ### DefineClass
193
-
194
- Defnines a JavaScript class with constructor, static and instance properties and
195
- methods.
196
-
197
- ```cpp
198
- static Napi::Function Napi::ObjectWrap::DefineClass(Napi::Env env,
199
- const char* utf8name,
200
- const std::vector<PropertyDescriptor>& properties,
201
- void* data = nullptr);
202
- ```
203
-
204
- * `[in] env`: The environment in which to construct a JavaScript class.
205
- * `[in] utf8name`: Null-terminated string that represents the name of the
206
- JavaScript constructor function.
207
- * `[in] properties`: Vector of class property descriptor describing static and
208
- instance properties and methods of the class.
209
- See: [`Class property and descriptor`](class_property_descriptor.md).
210
- * `[in] data`: User-provided data passed to the constructor callback as `data`
211
- property of the `Napi::CallbackInfo`.
212
-
213
- Returns a `Napi::Function` representing the constructor function for the class.
214
-
215
- ### Finalize
216
-
217
- Provides an opportunity to run cleanup code that requires access to the
218
- `Napi::Env` before the wrapped native object instance is freed. Override to
219
- implement.
220
-
221
- ```cpp
222
- virtual void Finalize(Napi::Env env);
223
- ```
224
-
225
- - `[in] env`: `Napi::Env`.
226
-
227
- ### StaticMethod
228
-
229
- Creates property descriptor that represents a static method of a JavaScript
230
- class.
231
-
232
- ```cpp
233
- static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(
234
- const char* utf8name,
235
- StaticVoidMethodCallback method,
236
- napi_property_attributes attributes = napi_default,
237
- void* data = nullptr);
238
- ```
239
-
240
- - `[in] utf8name`: Null-terminated string that represents the name of a static
241
- method for the class.
242
- - `[in] method`: The native function that represents a static method of a
243
- JavaScript class.
244
- - `[in] attributes`: The attributes associated with a particular property.
245
- One or more of `napi_property_attributes`.
246
- - `[in] data`: User-provided data passed into method when it is invoked.
247
-
248
- Returns `Napi::PropertyDescriptor` object that represents the static method of a
249
- JavaScript class.
250
-
251
- ### StaticMethod
252
-
253
- Creates property descriptor that represents a static method of a JavaScript
254
- class.
255
-
256
- ```cpp
257
- static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(
258
- const char* utf8name,
259
- StaticMethodCallback method,
260
- napi_property_attributes attributes = napi_default,
261
- void* data = nullptr);
262
- ```
263
-
264
- - `[in] utf8name`: Null-terminated string that represents the name of a static
265
- method for the class.
266
- - `[in] method`: The native function that represents a static method of a
267
- JavaScript class.
268
- - `[in] attributes`: The attributes associated with a particular property.
269
- One or more of `napi_property_attributes`.
270
- - `[in] data`: User-provided data passed into method when it is invoked.
271
-
272
- Returns `Napi::PropertyDescriptor` object that represents a static method of a
273
- JavaScript class.
274
-
275
- ### StaticMethod
276
-
277
- Creates property descriptor that represents a static method of a JavaScript
278
- class.
279
-
280
- ```cpp
281
- static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(Symbol name,
282
- StaticVoidMethodCallback method,
283
- napi_property_attributes attributes = napi_default,
284
- void* data = nullptr);
285
- ```
286
-
287
- - `[in] name`: Napi::Symbol that represents the name of a static
288
- method for the class.
289
- - `[in] method`: The native function that represents a static method of a
290
- JavaScript class.
291
- - `[in] attributes`: The attributes associated with a particular property.
292
- One or more of `napi_property_attributes`.
293
- - `[in] data`: User-provided data passed into method when it is invoked.
294
-
295
- Returns `Napi::PropertyDescriptor` object that represents the static method of a
296
- JavaScript class.
297
-
298
- ### StaticMethod
299
-
300
- Creates property descriptor that represents a static method of a JavaScript
301
- class.
302
-
303
- ```cpp
304
- static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(Symbol name,
305
- StaticMethodCallback method,
306
- napi_property_attributes attributes = napi_default,
307
- void* data = nullptr);
308
- ```
309
-
310
- method for the class.
311
- - `[in] name`: Napi::Symbol that represents the name of a static.
312
- - `[in] method`: The native function that represents a static method of a
313
- JavaScript class.
314
- - `[in] attributes`: The attributes associated with a particular property.
315
- One or more of `napi_property_attributes`.
316
- - `[in] data`: User-provided data passed into method when it is invoked.
317
-
318
- Returns `Napi::PropertyDescriptor` object that represents a static method of a
319
- JavaScript class.
320
-
321
- ### StaticMethod
322
-
323
- Creates property descriptor that represents a static method of a JavaScript
324
- class.
325
-
326
- ```cpp
327
- template <StaticVoidMethodCallback method>
328
- static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(
329
- const char* utf8name,
330
- napi_property_attributes attributes = napi_default,
331
- void* data = nullptr);
332
- ```
333
-
334
- - `[in] method`: The native function that represents a static method of a
335
- JavaScript class. This function returns nothing.
336
- - `[in] utf8name`: Null-terminated string that represents the name of a static
337
- method for the class.
338
- - `[in] attributes`: The attributes associated with a particular property.
339
- One or more of `napi_property_attributes`.
340
- - `[in] data`: User-provided data passed into method when it is invoked.
341
-
342
- Returns `Napi::PropertyDescriptor` object that represents the static method of a
343
- JavaScript class.
344
-
345
- ### StaticMethod
346
-
347
- Creates property descriptor that represents a static method of a JavaScript
348
- class.
349
-
350
- ```cpp
351
- template <StaticMethodCallback method>
352
- static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(
353
- const char* utf8name,
354
- napi_property_attributes attributes = napi_default,
355
- void* data = nullptr);
356
- ```
357
-
358
- - `[in] method`: The native function that represents a static method of a
359
- JavaScript class.
360
- - `[in] utf8name`: Null-terminated string that represents the name of a static
361
- method for the class.
362
- - `[in] attributes`: The attributes associated with a particular property.
363
- One or more of `napi_property_attributes`.
364
- - `[in] data`: User-provided data passed into method when it is invoked.
365
-
366
- Returns `Napi::PropertyDescriptor` object that represents a static method of a
367
- JavaScript class.
368
-
369
- ### StaticMethod
370
-
371
- Creates property descriptor that represents a static method of a JavaScript
372
- class.
373
-
374
- ```cpp
375
- template <StaticVoidMethodCallback method>
376
- static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(Symbol name,
377
- napi_property_attributes attributes = napi_default,
378
- void* data = nullptr);
379
- ```
380
-
381
- - `[in] method`: The native function that represents a static method of a
382
- JavaScript class.
383
- - `[in] name`: Napi::Symbol that represents the name of a static
384
- method for the class.
385
- - `[in] attributes`: The attributes associated with a particular property.
386
- One or more of `napi_property_attributes`.
387
- - `[in] data`: User-provided data passed into method when it is invoked.
388
-
389
- Returns `Napi::PropertyDescriptor` object that represents the static method of a
390
- JavaScript class.
391
-
392
- ### StaticMethod
393
-
394
- Creates property descriptor that represents a static method of a JavaScript
395
- class.
396
-
397
- ```cpp
398
- template <StaticMethodCallback method>
399
- static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(Symbol name,
400
- napi_property_attributes attributes = napi_default,
401
- void* data = nullptr);
402
- ```
403
-
404
- - `[in] method`: The native function that represents a static method of a
405
- JavaScript class.
406
- - `[in] name`: Napi::Symbol that represents the name of a static.
407
- - `[in] attributes`: The attributes associated with a particular property.
408
- One or more of `napi_property_attributes`.
409
- - `[in] data`: User-provided data passed into method when it is invoked.
410
-
411
- Returns `Napi::PropertyDescriptor` object that represents a static method of a
412
- JavaScript class.
413
-
414
- ### StaticAccessor
415
-
416
- Creates property descriptor that represents a static accessor property of a
417
- JavaScript class.
418
-
419
- ```cpp
420
- static Napi::PropertyDescriptor Napi::ObjectWrap::StaticAccessor(
421
- const char* utf8name,
422
- StaticGetterCallback getter,
423
- StaticSetterCallback setter,
424
- napi_property_attributes attributes = napi_default,
425
- void* data = nullptr);
426
- ```
427
-
428
- - `[in] utf8name`: Null-terminated string that represents the name of a static
429
- accessor property for the class.
430
- - `[in] getter`: The native function to call when a get access to the property
431
- of a JavaScript class is performed.
432
- - `[in] setter`: The native function to call when a set access to the property
433
- of a JavaScript class is performed.
434
- - `[in] attributes`: The attributes associated with a particular property.
435
- One or more of `napi_property_attributes`.
436
- - `[in] data`: User-provided data passed into getter or setter when
437
- is invoked.
438
-
439
- Returns `Napi::PropertyDescriptor` object that represents a static accessor
440
- property of a JavaScript class.
441
-
442
- ### StaticAccessor
443
-
444
- Creates property descriptor that represents a static accessor property of a
445
- JavaScript class.
446
-
447
- ```cpp
448
- static Napi::PropertyDescriptor Napi::ObjectWrap::StaticAccessor(Symbol name,
449
- StaticGetterCallback getter,
450
- StaticSetterCallback setter,
451
- napi_property_attributes attributes = napi_default,
452
- void* data = nullptr);
453
- ```
454
-
455
- - `[in] name`: Napi::Symbol that represents the name of a static accessor.
456
- - `[in] getter`: The native function to call when a get access to the property
457
- of a JavaScript class is performed.
458
- - `[in] setter`: The native function to call when a set access to the property
459
- of a JavaScript class is performed.
460
- - `[in] attributes`: The attributes associated with a particular property.
461
- One or more of `napi_property_attributes`.
462
- - `[in] data`: User-provided data passed into getter or setter when
463
- is invoked.
464
-
465
- Returns `Napi::PropertyDescriptor` object that represents a static accessor
466
- property of a JavaScript class.
467
-
468
- ### StaticAccessor
469
-
470
- Creates property descriptor that represents a static accessor property of a
471
- JavaScript class.
472
-
473
- ```cpp
474
- template <StaticGetterCallback getter, StaticSetterCallback setter=nullptr>
475
- static Napi::PropertyDescriptor Napi::ObjectWrap::StaticAccessor(
476
- const char* utf8name,
477
- napi_property_attributes attributes = napi_default,
478
- void* data = nullptr);
479
- ```
480
-
481
- - `[in] getter`: The native function to call when a get access to the property
482
- of a JavaScript class is performed.
483
- - `[in] setter`: The native function to call when a set access to the property
484
- of a JavaScript class is performed.
485
- - `[in] utf8name`: Null-terminated string that represents the name of a static
486
- accessor property for the class.
487
- - `[in] attributes`: The attributes associated with a particular property.
488
- One or more of `napi_property_attributes`.
489
- - `[in] data`: User-provided data passed into getter or setter when
490
- is invoked.
491
-
492
- Returns `Napi::PropertyDescriptor` object that represents a static accessor
493
- property of a JavaScript class.
494
-
495
- ### StaticAccessor
496
-
497
- Creates property descriptor that represents a static accessor property of a
498
- JavaScript class.
499
-
500
- ```cpp
501
- template <StaticGetterCallback getter, StaticSetterCallback setter=nullptr>
502
- static Napi::PropertyDescriptor Napi::ObjectWrap::StaticAccessor(Symbol name,
503
- napi_property_attributes attributes = napi_default,
504
- void* data = nullptr);
505
- ```
506
-
507
- - `[in] getter`: The native function to call when a get access to the property
508
- of a JavaScript class is performed.
509
- - `[in] setter`: The native function to call when a set access to the property
510
- of a JavaScript class is performed.
511
- - `[in] name`: Napi::Symbol that represents the name of a static accessor.
512
- - `[in] attributes`: The attributes associated with a particular property.
513
- One or more of `napi_property_attributes`.
514
- - `[in] data`: User-provided data passed into getter or setter when
515
- is invoked.
516
-
517
- Returns `Napi::PropertyDescriptor` object that represents a static accessor
518
- property of a JavaScript class.
519
-
520
- ### StaticValue
521
-
522
- Creates property descriptor that represents an static value property of a
523
- JavaScript class.
524
- ```cpp
525
- static Napi::PropertyDescriptor Napi::ObjectWrap::StaticValue(
526
- const char* utf8name,
527
- Napi::Value value,
528
- napi_property_attributes attributes = napi_default);
529
- ```
530
-
531
- - `[in] utf8name`: Null-terminated string that represents the name of the static
532
- property.
533
- - `[in] value`: The value that's retrieved by a get access of the property.
534
- - `[in] attributes`: The attributes to be associated with the property in
535
- addition to the napi_static attribute. One or more of
536
- `napi_property_attributes`.
537
-
538
- Returns `Napi::PropertyDescriptor` object that represents an static value
539
- property of a JavaScript class
540
-
541
- ### StaticValue
542
-
543
- Creates property descriptor that represents an static value property of a
544
- JavaScript class.
545
- ```cpp
546
- static Napi::PropertyDescriptor Napi::ObjectWrap::StaticValue(Symbol name,
547
- Napi::Value value,
548
- napi_property_attributes attributes = napi_default);
549
- ```
550
-
551
- - `[in] name`: The `Napi::Symbol` object whose value is used to identify the
552
- name of the static property.
553
- - `[in] value`: The value that's retrieved by a get access of the property.
554
- - `[in] attributes`: The attributes to be associated with the property in
555
- addition to the napi_static attribute. One or more of
556
- `napi_property_attributes`.
557
-
558
- Returns `Napi::PropertyDescriptor` object that represents an static value
559
- property of a JavaScript class
560
-
561
- [`Napi::InstanceWrap<T>`]: ./instance_wrap.md
1
+ # Object Wrap
2
+
3
+ Class `Napi::ObjectWrap<T>` inherits from class [`Napi::InstanceWrap<T>`][].
4
+
5
+ The `Napi::ObjectWrap<T>` class is used to bind the lifetime of C++ code to a
6
+ JavaScript object. Once bound, each time an instance of the JavaScript object
7
+ is created, an instance of the C++ class will also be created. When a method
8
+ is called on the JavaScript object which is defined as an InstanceMethod, the
9
+ corresponding C++ method on the wrapped C++ class will be invoked.
10
+
11
+ In order to create a wrapper it's necessary to extend the
12
+ `Napi::ObjectWrap<T>` class which contains all the plumbing to connect
13
+ JavaScript code with a C++ object. Classes extending `Napi::ObjectWrap` can be
14
+ instantiated from JavaScript using the **new** operator, and their methods can
15
+ be directly invoked from JavaScript. The **wrap** word refers to a way of
16
+ grouping methods and state of the class because it will be necessary write
17
+ custom code to bridge each of your C++ class methods.
18
+
19
+ ## Example
20
+
21
+ ```cpp
22
+ #include <napi.h>
23
+
24
+ class Example : public Napi::ObjectWrap<Example> {
25
+ public:
26
+ static Napi::Object Init(Napi::Env env, Napi::Object exports);
27
+ Example(const Napi::CallbackInfo& info);
28
+ static Napi::Value CreateNewItem(const Napi::CallbackInfo& info);
29
+
30
+ private:
31
+ double _value;
32
+ Napi::Value GetValue(const Napi::CallbackInfo& info);
33
+ Napi::Value SetValue(const Napi::CallbackInfo& info);
34
+ };
35
+
36
+ Napi::Object Example::Init(Napi::Env env, Napi::Object exports) {
37
+ // This method is used to hook the accessor and method callbacks
38
+ Napi::Function func = DefineClass(env, "Example", {
39
+ InstanceMethod<&Example::GetValue>("GetValue", static_cast<napi_property_attributes>(napi_writable | napi_configurable)),
40
+ InstanceMethod<&Example::SetValue>("SetValue", static_cast<napi_property_attributes>(napi_writable | napi_configurable)),
41
+ StaticMethod<&Example::CreateNewItem>("CreateNewItem", static_cast<napi_property_attributes>(napi_writable | napi_configurable)),
42
+ });
43
+
44
+ Napi::FunctionReference* constructor = new Napi::FunctionReference();
45
+
46
+ // Create a persistent reference to the class constructor. This will allow
47
+ // a function called on a class prototype and a function
48
+ // called on instance of a class to be distinguished from each other.
49
+ *constructor = Napi::Persistent(func);
50
+ exports.Set("Example", func);
51
+
52
+ // Store the constructor as the add-on instance data. This will allow this
53
+ // add-on to support multiple instances of itself running on multiple worker
54
+ // threads, as well as multiple instances of itself running in different
55
+ // contexts on the same thread.
56
+ //
57
+ // By default, the value set on the environment here will be destroyed when
58
+ // the add-on is unloaded using the `delete` operator, but it is also
59
+ // possible to supply a custom deleter.
60
+ env.SetInstanceData<Napi::FunctionReference>(constructor);
61
+
62
+ return exports;
63
+ }
64
+
65
+ Example::Example(const Napi::CallbackInfo& info) :
66
+ Napi::ObjectWrap<Example>(info) {
67
+ Napi::Env env = info.Env();
68
+ // ...
69
+ Napi::Number value = info[0].As<Napi::Number>();
70
+ this->_value = value.DoubleValue();
71
+ }
72
+
73
+ Napi::Value Example::GetValue(const Napi::CallbackInfo& info){
74
+ Napi::Env env = info.Env();
75
+ return Napi::Number::New(env, this->_value);
76
+ }
77
+
78
+ Napi::Value Example::SetValue(const Napi::CallbackInfo& info){
79
+ Napi::Env env = info.Env();
80
+ // ...
81
+ Napi::Number value = info[0].As<Napi::Number>();
82
+ this->_value = value.DoubleValue();
83
+ return this->GetValue(info);
84
+ }
85
+
86
+ // Initialize native add-on
87
+ Napi::Object Init (Napi::Env env, Napi::Object exports) {
88
+ Example::Init(env, exports);
89
+ return exports;
90
+ }
91
+
92
+ // Create a new item using the constructor stored during Init.
93
+ Napi::Value Example::CreateNewItem(const Napi::CallbackInfo& info) {
94
+ // Retrieve the instance data we stored during `Init()`. We only stored the
95
+ // constructor there, so we retrieve it here to create a new instance of the
96
+ // JS class the constructor represents.
97
+ Napi::FunctionReference* constructor =
98
+ info.Env().GetInstanceData<Napi::FunctionReference>();
99
+ return constructor->New({ Napi::Number::New(info.Env(), 42) });
100
+ }
101
+
102
+ // Register and initialize native add-on
103
+ NODE_API_MODULE(NODE_GYP_MODULE_NAME, Init)
104
+ ```
105
+
106
+ The above code can be used from JavaScript as follows:
107
+
108
+ ```js
109
+ 'use strict'
110
+
111
+ const { Example } = require('bindings')('addon')
112
+
113
+ const example = new Example(11)
114
+ console.log(example.GetValue())
115
+ // It prints 11
116
+ example.SetValue(19)
117
+ console.log(example.GetValue());
118
+ // It prints 19
119
+ ```
120
+
121
+ At initialization time, the `Napi::ObjectWrap::DefineClass()` method must be
122
+ used to hook up the accessor and method callbacks. It takes a list of property
123
+ descriptors, which can be constructed via the various static methods on the base
124
+ class.
125
+
126
+ When JavaScript code invokes the constructor, the constructor callback will
127
+ create a new C++ instance and "wrap" it into the newly created JavaScript
128
+ object.
129
+
130
+ When JavaScript code invokes a method or a property accessor on the class the
131
+ corresponding C++ callback function will be executed.
132
+
133
+ For a wrapped object it could be difficult to distinguish between a function
134
+ called on a class prototype and a function called on instance of a class.
135
+ Therefore it is good practice to save a persistent reference to the class
136
+ constructor. This allows the two cases to be distinguished from each other by
137
+ checking the this object against the class constructor.
138
+
139
+ ## Methods
140
+
141
+ ### Constructor
142
+
143
+ Creates a new instance of a JavaScript object that wraps native instance.
144
+
145
+ ```cpp
146
+ Napi::ObjectWrap(const Napi::CallbackInfo& callbackInfo);
147
+ ```
148
+
149
+ - `[in] callbackInfo`: The object representing the components of the JavaScript
150
+ request being made.
151
+
152
+ ### Unwrap
153
+
154
+ Retrieves a native instance wrapped in a JavaScript object.
155
+
156
+ ```cpp
157
+ static T* Napi::ObjectWrap::Unwrap(Napi::Object wrapper);
158
+ ```
159
+
160
+ * `[in] wrapper`: The JavaScript object that wraps the native instance.
161
+
162
+ Returns a native instance wrapped in a JavaScript object. Given the
163
+ `Napi::Object`, this allows a method to get a pointer to the wrapped
164
+ C++ object and then reference fields, call methods, etc. within that class.
165
+ In many cases calling Unwrap is not required, as methods can
166
+ use the `this` field for ObjectWrap when running in a method on a
167
+ class that extends ObjectWrap.
168
+
169
+ ### DefineClass
170
+
171
+ Defnines a JavaScript class with constructor, static and instance properties and
172
+ methods.
173
+
174
+ ```cpp
175
+ static Napi::Function Napi::ObjectWrap::DefineClass(Napi::Env env,
176
+ const char* utf8name,
177
+ const std::initializer_list<PropertyDescriptor>& properties,
178
+ void* data = nullptr);
179
+ ```
180
+
181
+ * `[in] env`: The environment in which to construct a JavaScript class.
182
+ * `[in] utf8name`: Null-terminated string that represents the name of the
183
+ JavaScript constructor function.
184
+ * `[in] properties`: Initializer list of class property descriptor describing
185
+ static and instance properties and methods of the class.
186
+ See: [`Class property and descriptor`](class_property_descriptor.md).
187
+ * `[in] data`: User-provided data passed to the constructor callback as `data`
188
+ property of the `Napi::CallbackInfo`.
189
+
190
+ Returns a `Napi::Function` representing the constructor function for the class.
191
+
192
+ ### DefineClass
193
+
194
+ Defnines a JavaScript class with constructor, static and instance properties and
195
+ methods.
196
+
197
+ ```cpp
198
+ static Napi::Function Napi::ObjectWrap::DefineClass(Napi::Env env,
199
+ const char* utf8name,
200
+ const std::vector<PropertyDescriptor>& properties,
201
+ void* data = nullptr);
202
+ ```
203
+
204
+ * `[in] env`: The environment in which to construct a JavaScript class.
205
+ * `[in] utf8name`: Null-terminated string that represents the name of the
206
+ JavaScript constructor function.
207
+ * `[in] properties`: Vector of class property descriptor describing static and
208
+ instance properties and methods of the class.
209
+ See: [`Class property and descriptor`](class_property_descriptor.md).
210
+ * `[in] data`: User-provided data passed to the constructor callback as `data`
211
+ property of the `Napi::CallbackInfo`.
212
+
213
+ Returns a `Napi::Function` representing the constructor function for the class.
214
+
215
+ ### Finalize
216
+
217
+ Provides an opportunity to run cleanup code that requires access to the
218
+ `Napi::Env` before the wrapped native object instance is freed. Override to
219
+ implement.
220
+
221
+ ```cpp
222
+ virtual void Finalize(Napi::Env env);
223
+ ```
224
+
225
+ - `[in] env`: `Napi::Env`.
226
+
227
+ ### StaticMethod
228
+
229
+ Creates property descriptor that represents a static method of a JavaScript
230
+ class.
231
+
232
+ ```cpp
233
+ static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(
234
+ const char* utf8name,
235
+ StaticVoidMethodCallback method,
236
+ napi_property_attributes attributes = napi_default,
237
+ void* data = nullptr);
238
+ ```
239
+
240
+ - `[in] utf8name`: Null-terminated string that represents the name of a static
241
+ method for the class.
242
+ - `[in] method`: The native function that represents a static method of a
243
+ JavaScript class.
244
+ - `[in] attributes`: The attributes associated with a particular property.
245
+ One or more of `napi_property_attributes`.
246
+ - `[in] data`: User-provided data passed into method when it is invoked.
247
+
248
+ Returns `Napi::PropertyDescriptor` object that represents the static method of a
249
+ JavaScript class.
250
+
251
+ ### StaticMethod
252
+
253
+ Creates property descriptor that represents a static method of a JavaScript
254
+ class.
255
+
256
+ ```cpp
257
+ static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(
258
+ const char* utf8name,
259
+ StaticMethodCallback method,
260
+ napi_property_attributes attributes = napi_default,
261
+ void* data = nullptr);
262
+ ```
263
+
264
+ - `[in] utf8name`: Null-terminated string that represents the name of a static
265
+ method for the class.
266
+ - `[in] method`: The native function that represents a static method of a
267
+ JavaScript class.
268
+ - `[in] attributes`: The attributes associated with a particular property.
269
+ One or more of `napi_property_attributes`.
270
+ - `[in] data`: User-provided data passed into method when it is invoked.
271
+
272
+ Returns `Napi::PropertyDescriptor` object that represents a static method of a
273
+ JavaScript class.
274
+
275
+ ### StaticMethod
276
+
277
+ Creates property descriptor that represents a static method of a JavaScript
278
+ class.
279
+
280
+ ```cpp
281
+ static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(Symbol name,
282
+ StaticVoidMethodCallback method,
283
+ napi_property_attributes attributes = napi_default,
284
+ void* data = nullptr);
285
+ ```
286
+
287
+ - `[in] name`: Napi::Symbol that represents the name of a static
288
+ method for the class.
289
+ - `[in] method`: The native function that represents a static method of a
290
+ JavaScript class.
291
+ - `[in] attributes`: The attributes associated with a particular property.
292
+ One or more of `napi_property_attributes`.
293
+ - `[in] data`: User-provided data passed into method when it is invoked.
294
+
295
+ Returns `Napi::PropertyDescriptor` object that represents the static method of a
296
+ JavaScript class.
297
+
298
+ ### StaticMethod
299
+
300
+ Creates property descriptor that represents a static method of a JavaScript
301
+ class.
302
+
303
+ ```cpp
304
+ static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(Symbol name,
305
+ StaticMethodCallback method,
306
+ napi_property_attributes attributes = napi_default,
307
+ void* data = nullptr);
308
+ ```
309
+
310
+ method for the class.
311
+ - `[in] name`: Napi::Symbol that represents the name of a static.
312
+ - `[in] method`: The native function that represents a static method of a
313
+ JavaScript class.
314
+ - `[in] attributes`: The attributes associated with a particular property.
315
+ One or more of `napi_property_attributes`.
316
+ - `[in] data`: User-provided data passed into method when it is invoked.
317
+
318
+ Returns `Napi::PropertyDescriptor` object that represents a static method of a
319
+ JavaScript class.
320
+
321
+ ### StaticMethod
322
+
323
+ Creates property descriptor that represents a static method of a JavaScript
324
+ class.
325
+
326
+ ```cpp
327
+ template <StaticVoidMethodCallback method>
328
+ static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(
329
+ const char* utf8name,
330
+ napi_property_attributes attributes = napi_default,
331
+ void* data = nullptr);
332
+ ```
333
+
334
+ - `[in] method`: The native function that represents a static method of a
335
+ JavaScript class. This function returns nothing.
336
+ - `[in] utf8name`: Null-terminated string that represents the name of a static
337
+ method for the class.
338
+ - `[in] attributes`: The attributes associated with a particular property.
339
+ One or more of `napi_property_attributes`.
340
+ - `[in] data`: User-provided data passed into method when it is invoked.
341
+
342
+ Returns `Napi::PropertyDescriptor` object that represents the static method of a
343
+ JavaScript class.
344
+
345
+ ### StaticMethod
346
+
347
+ Creates property descriptor that represents a static method of a JavaScript
348
+ class.
349
+
350
+ ```cpp
351
+ template <StaticMethodCallback method>
352
+ static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(
353
+ const char* utf8name,
354
+ napi_property_attributes attributes = napi_default,
355
+ void* data = nullptr);
356
+ ```
357
+
358
+ - `[in] method`: The native function that represents a static method of a
359
+ JavaScript class.
360
+ - `[in] utf8name`: Null-terminated string that represents the name of a static
361
+ method for the class.
362
+ - `[in] attributes`: The attributes associated with a particular property.
363
+ One or more of `napi_property_attributes`.
364
+ - `[in] data`: User-provided data passed into method when it is invoked.
365
+
366
+ Returns `Napi::PropertyDescriptor` object that represents a static method of a
367
+ JavaScript class.
368
+
369
+ ### StaticMethod
370
+
371
+ Creates property descriptor that represents a static method of a JavaScript
372
+ class.
373
+
374
+ ```cpp
375
+ template <StaticVoidMethodCallback method>
376
+ static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(Symbol name,
377
+ napi_property_attributes attributes = napi_default,
378
+ void* data = nullptr);
379
+ ```
380
+
381
+ - `[in] method`: The native function that represents a static method of a
382
+ JavaScript class.
383
+ - `[in] name`: Napi::Symbol that represents the name of a static
384
+ method for the class.
385
+ - `[in] attributes`: The attributes associated with a particular property.
386
+ One or more of `napi_property_attributes`.
387
+ - `[in] data`: User-provided data passed into method when it is invoked.
388
+
389
+ Returns `Napi::PropertyDescriptor` object that represents the static method of a
390
+ JavaScript class.
391
+
392
+ ### StaticMethod
393
+
394
+ Creates property descriptor that represents a static method of a JavaScript
395
+ class.
396
+
397
+ ```cpp
398
+ template <StaticMethodCallback method>
399
+ static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(Symbol name,
400
+ napi_property_attributes attributes = napi_default,
401
+ void* data = nullptr);
402
+ ```
403
+
404
+ - `[in] method`: The native function that represents a static method of a
405
+ JavaScript class.
406
+ - `[in] name`: Napi::Symbol that represents the name of a static.
407
+ - `[in] attributes`: The attributes associated with a particular property.
408
+ One or more of `napi_property_attributes`.
409
+ - `[in] data`: User-provided data passed into method when it is invoked.
410
+
411
+ Returns `Napi::PropertyDescriptor` object that represents a static method of a
412
+ JavaScript class.
413
+
414
+ ### StaticAccessor
415
+
416
+ Creates property descriptor that represents a static accessor property of a
417
+ JavaScript class.
418
+
419
+ ```cpp
420
+ static Napi::PropertyDescriptor Napi::ObjectWrap::StaticAccessor(
421
+ const char* utf8name,
422
+ StaticGetterCallback getter,
423
+ StaticSetterCallback setter,
424
+ napi_property_attributes attributes = napi_default,
425
+ void* data = nullptr);
426
+ ```
427
+
428
+ - `[in] utf8name`: Null-terminated string that represents the name of a static
429
+ accessor property for the class.
430
+ - `[in] getter`: The native function to call when a get access to the property
431
+ of a JavaScript class is performed.
432
+ - `[in] setter`: The native function to call when a set access to the property
433
+ of a JavaScript class is performed.
434
+ - `[in] attributes`: The attributes associated with a particular property.
435
+ One or more of `napi_property_attributes`.
436
+ - `[in] data`: User-provided data passed into getter or setter when
437
+ is invoked.
438
+
439
+ Returns `Napi::PropertyDescriptor` object that represents a static accessor
440
+ property of a JavaScript class.
441
+
442
+ ### StaticAccessor
443
+
444
+ Creates property descriptor that represents a static accessor property of a
445
+ JavaScript class.
446
+
447
+ ```cpp
448
+ static Napi::PropertyDescriptor Napi::ObjectWrap::StaticAccessor(Symbol name,
449
+ StaticGetterCallback getter,
450
+ StaticSetterCallback setter,
451
+ napi_property_attributes attributes = napi_default,
452
+ void* data = nullptr);
453
+ ```
454
+
455
+ - `[in] name`: Napi::Symbol that represents the name of a static accessor.
456
+ - `[in] getter`: The native function to call when a get access to the property
457
+ of a JavaScript class is performed.
458
+ - `[in] setter`: The native function to call when a set access to the property
459
+ of a JavaScript class is performed.
460
+ - `[in] attributes`: The attributes associated with a particular property.
461
+ One or more of `napi_property_attributes`.
462
+ - `[in] data`: User-provided data passed into getter or setter when
463
+ is invoked.
464
+
465
+ Returns `Napi::PropertyDescriptor` object that represents a static accessor
466
+ property of a JavaScript class.
467
+
468
+ ### StaticAccessor
469
+
470
+ Creates property descriptor that represents a static accessor property of a
471
+ JavaScript class.
472
+
473
+ ```cpp
474
+ template <StaticGetterCallback getter, StaticSetterCallback setter=nullptr>
475
+ static Napi::PropertyDescriptor Napi::ObjectWrap::StaticAccessor(
476
+ const char* utf8name,
477
+ napi_property_attributes attributes = napi_default,
478
+ void* data = nullptr);
479
+ ```
480
+
481
+ - `[in] getter`: The native function to call when a get access to the property
482
+ of a JavaScript class is performed.
483
+ - `[in] setter`: The native function to call when a set access to the property
484
+ of a JavaScript class is performed.
485
+ - `[in] utf8name`: Null-terminated string that represents the name of a static
486
+ accessor property for the class.
487
+ - `[in] attributes`: The attributes associated with a particular property.
488
+ One or more of `napi_property_attributes`.
489
+ - `[in] data`: User-provided data passed into getter or setter when
490
+ is invoked.
491
+
492
+ Returns `Napi::PropertyDescriptor` object that represents a static accessor
493
+ property of a JavaScript class.
494
+
495
+ ### StaticAccessor
496
+
497
+ Creates property descriptor that represents a static accessor property of a
498
+ JavaScript class.
499
+
500
+ ```cpp
501
+ template <StaticGetterCallback getter, StaticSetterCallback setter=nullptr>
502
+ static Napi::PropertyDescriptor Napi::ObjectWrap::StaticAccessor(Symbol name,
503
+ napi_property_attributes attributes = napi_default,
504
+ void* data = nullptr);
505
+ ```
506
+
507
+ - `[in] getter`: The native function to call when a get access to the property
508
+ of a JavaScript class is performed.
509
+ - `[in] setter`: The native function to call when a set access to the property
510
+ of a JavaScript class is performed.
511
+ - `[in] name`: Napi::Symbol that represents the name of a static accessor.
512
+ - `[in] attributes`: The attributes associated with a particular property.
513
+ One or more of `napi_property_attributes`.
514
+ - `[in] data`: User-provided data passed into getter or setter when
515
+ is invoked.
516
+
517
+ Returns `Napi::PropertyDescriptor` object that represents a static accessor
518
+ property of a JavaScript class.
519
+
520
+ ### StaticValue
521
+
522
+ Creates property descriptor that represents an static value property of a
523
+ JavaScript class.
524
+ ```cpp
525
+ static Napi::PropertyDescriptor Napi::ObjectWrap::StaticValue(
526
+ const char* utf8name,
527
+ Napi::Value value,
528
+ napi_property_attributes attributes = napi_default);
529
+ ```
530
+
531
+ - `[in] utf8name`: Null-terminated string that represents the name of the static
532
+ property.
533
+ - `[in] value`: The value that's retrieved by a get access of the property.
534
+ - `[in] attributes`: The attributes to be associated with the property in
535
+ addition to the napi_static attribute. One or more of
536
+ `napi_property_attributes`.
537
+
538
+ Returns `Napi::PropertyDescriptor` object that represents an static value
539
+ property of a JavaScript class
540
+
541
+ ### StaticValue
542
+
543
+ Creates property descriptor that represents an static value property of a
544
+ JavaScript class.
545
+ ```cpp
546
+ static Napi::PropertyDescriptor Napi::ObjectWrap::StaticValue(Symbol name,
547
+ Napi::Value value,
548
+ napi_property_attributes attributes = napi_default);
549
+ ```
550
+
551
+ - `[in] name`: The `Napi::Symbol` object whose value is used to identify the
552
+ name of the static property.
553
+ - `[in] value`: The value that's retrieved by a get access of the property.
554
+ - `[in] attributes`: The attributes to be associated with the property in
555
+ addition to the napi_static attribute. One or more of
556
+ `napi_property_attributes`.
557
+
558
+ Returns `Napi::PropertyDescriptor` object that represents an static value
559
+ property of a JavaScript class
560
+
561
+ [`Napi::InstanceWrap<T>`]: ./instance_wrap.md