koffi 1.1.0-beta.1 → 1.1.0-beta.4

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 (270) hide show
  1. package/CMakeLists.txt +4 -0
  2. package/README.md +20 -11
  3. package/build/qemu/1.1.0-beta.4/koffi_darwin_x64.tar.gz +0 -0
  4. package/build/qemu/1.1.0-beta.4/koffi_freebsd_arm64.tar.gz +0 -0
  5. package/build/qemu/1.1.0-beta.4/koffi_freebsd_ia32.tar.gz +0 -0
  6. package/build/qemu/1.1.0-beta.4/koffi_freebsd_x64.tar.gz +0 -0
  7. package/build/qemu/1.1.0-beta.4/koffi_linux_arm.tar.gz +0 -0
  8. package/build/qemu/1.1.0-beta.4/koffi_linux_arm64.tar.gz +0 -0
  9. package/build/qemu/1.1.0-beta.4/koffi_linux_ia32.tar.gz +0 -0
  10. package/build/qemu/1.1.0-beta.4/koffi_linux_x64.tar.gz +0 -0
  11. package/build/qemu/1.1.0-beta.4/koffi_win32_ia32.tar.gz +0 -0
  12. package/build/qemu/1.1.0-beta.4/koffi_win32_x64.tar.gz +0 -0
  13. package/package.json +1 -1
  14. package/qemu/qemu.js +1 -0
  15. package/src/abi_arm32.cc +27 -45
  16. package/src/abi_arm64.cc +58 -132
  17. package/src/abi_x64_sysv.cc +24 -7
  18. package/src/abi_x64_win.cc +3 -0
  19. package/src/abi_x86.cc +3 -0
  20. package/src/call.cc +540 -33
  21. package/src/call.hh +5 -3
  22. package/src/ffi.cc +129 -4
  23. package/src/ffi.hh +5 -1
  24. package/src/parser.cc +7 -2
  25. package/src/util.cc +72 -0
  26. package/src/util.hh +2 -0
  27. package/test/misc.c +14 -8
  28. package/vendor/node-addon-api/CODE_OF_CONDUCT.md +4 -0
  29. package/vendor/node-addon-api/CONTRIBUTING.md +93 -0
  30. package/vendor/node-addon-api/appveyor.yml +37 -0
  31. package/vendor/node-addon-api/benchmark/README.md +47 -0
  32. package/vendor/node-addon-api/benchmark/binding.gyp +25 -0
  33. package/vendor/node-addon-api/benchmark/function_args.cc +217 -0
  34. package/vendor/node-addon-api/benchmark/function_args.js +60 -0
  35. package/vendor/node-addon-api/benchmark/index.js +34 -0
  36. package/vendor/node-addon-api/benchmark/property_descriptor.cc +91 -0
  37. package/vendor/node-addon-api/benchmark/property_descriptor.js +37 -0
  38. package/vendor/node-addon-api/doc/addon.md +163 -0
  39. package/vendor/node-addon-api/doc/array.md +81 -0
  40. package/vendor/node-addon-api/doc/array_buffer.md +155 -0
  41. package/vendor/node-addon-api/doc/async_context.md +86 -0
  42. package/vendor/node-addon-api/doc/async_operations.md +31 -0
  43. package/vendor/node-addon-api/doc/async_worker.md +427 -0
  44. package/vendor/node-addon-api/doc/async_worker_variants.md +557 -0
  45. package/vendor/node-addon-api/doc/bigint.md +97 -0
  46. package/vendor/node-addon-api/doc/boolean.md +68 -0
  47. package/vendor/node-addon-api/doc/buffer.md +150 -0
  48. package/vendor/node-addon-api/doc/callback_scope.md +54 -0
  49. package/vendor/node-addon-api/doc/callbackinfo.md +97 -0
  50. package/vendor/node-addon-api/doc/checker-tool.md +32 -0
  51. package/vendor/node-addon-api/doc/class_property_descriptor.md +123 -0
  52. package/vendor/node-addon-api/doc/cmake-js.md +68 -0
  53. package/vendor/node-addon-api/doc/conversion-tool.md +28 -0
  54. package/vendor/node-addon-api/doc/creating_a_release.md +62 -0
  55. package/vendor/node-addon-api/doc/dataview.md +248 -0
  56. package/vendor/node-addon-api/doc/date.md +68 -0
  57. package/vendor/node-addon-api/doc/env.md +196 -0
  58. package/vendor/node-addon-api/doc/error.md +120 -0
  59. package/vendor/node-addon-api/doc/error_handling.md +254 -0
  60. package/vendor/node-addon-api/doc/escapable_handle_scope.md +80 -0
  61. package/vendor/node-addon-api/doc/external.md +63 -0
  62. package/vendor/node-addon-api/doc/function.md +402 -0
  63. package/vendor/node-addon-api/doc/function_reference.md +238 -0
  64. package/vendor/node-addon-api/doc/generator.md +13 -0
  65. package/vendor/node-addon-api/doc/handle_scope.md +63 -0
  66. package/vendor/node-addon-api/doc/hierarchy.md +91 -0
  67. package/vendor/node-addon-api/doc/instance_wrap.md +408 -0
  68. package/vendor/node-addon-api/doc/maybe.md +76 -0
  69. package/vendor/node-addon-api/doc/memory_management.md +27 -0
  70. package/vendor/node-addon-api/doc/name.md +29 -0
  71. package/vendor/node-addon-api/doc/node-gyp.md +82 -0
  72. package/vendor/node-addon-api/doc/number.md +163 -0
  73. package/vendor/node-addon-api/doc/object.md +411 -0
  74. package/vendor/node-addon-api/doc/object_lifetime_management.md +83 -0
  75. package/vendor/node-addon-api/doc/object_reference.md +117 -0
  76. package/vendor/node-addon-api/doc/object_wrap.md +588 -0
  77. package/vendor/node-addon-api/doc/prebuild_tools.md +16 -0
  78. package/vendor/node-addon-api/doc/promises.md +79 -0
  79. package/vendor/node-addon-api/doc/property_descriptor.md +286 -0
  80. package/vendor/node-addon-api/doc/propertylvalue.md +50 -0
  81. package/vendor/node-addon-api/doc/range_error.md +59 -0
  82. package/vendor/node-addon-api/doc/reference.md +113 -0
  83. package/vendor/node-addon-api/doc/setup.md +110 -0
  84. package/vendor/node-addon-api/doc/string.md +93 -0
  85. package/vendor/node-addon-api/doc/symbol.md +61 -0
  86. package/vendor/node-addon-api/doc/threadsafe.md +121 -0
  87. package/vendor/node-addon-api/doc/threadsafe_function.md +290 -0
  88. package/vendor/node-addon-api/doc/type_error.md +59 -0
  89. package/vendor/node-addon-api/doc/typed_array.md +78 -0
  90. package/vendor/node-addon-api/doc/typed_array_of.md +137 -0
  91. package/vendor/node-addon-api/doc/typed_threadsafe_function.md +306 -0
  92. package/vendor/node-addon-api/doc/value.md +340 -0
  93. package/vendor/node-addon-api/doc/version_management.md +43 -0
  94. package/vendor/node-addon-api/package.json +415 -0
  95. package/vendor/node-addon-api/test/README.md +91 -0
  96. package/vendor/node-addon-api/test/addon.cc +36 -0
  97. package/vendor/node-addon-api/test/addon.js +11 -0
  98. package/vendor/node-addon-api/test/addon_build/index.js +49 -0
  99. package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +17 -0
  100. package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +62 -0
  101. package/vendor/node-addon-api/test/addon_build/tpl/index.js +9 -0
  102. package/vendor/node-addon-api/test/addon_build/tpl/package.json +11 -0
  103. package/vendor/node-addon-api/test/addon_data.cc +99 -0
  104. package/vendor/node-addon-api/test/addon_data.js +46 -0
  105. package/vendor/node-addon-api/test/array_buffer.cc +243 -0
  106. package/vendor/node-addon-api/test/array_buffer.js +69 -0
  107. package/vendor/node-addon-api/test/async_context.cc +36 -0
  108. package/vendor/node-addon-api/test/async_context.js +122 -0
  109. package/vendor/node-addon-api/test/async_progress_queue_worker.cc +83 -0
  110. package/vendor/node-addon-api/test/async_progress_queue_worker.js +46 -0
  111. package/vendor/node-addon-api/test/async_progress_worker.cc +134 -0
  112. package/vendor/node-addon-api/test/async_progress_worker.js +61 -0
  113. package/vendor/node-addon-api/test/async_worker.cc +106 -0
  114. package/vendor/node-addon-api/test/async_worker.js +179 -0
  115. package/vendor/node-addon-api/test/async_worker_nocallback.js +13 -0
  116. package/vendor/node-addon-api/test/async_worker_persistent.cc +63 -0
  117. package/vendor/node-addon-api/test/async_worker_persistent.js +24 -0
  118. package/vendor/node-addon-api/test/basic_types/array.cc +40 -0
  119. package/vendor/node-addon-api/test/basic_types/array.js +35 -0
  120. package/vendor/node-addon-api/test/basic_types/boolean.cc +38 -0
  121. package/vendor/node-addon-api/test/basic_types/boolean.js +35 -0
  122. package/vendor/node-addon-api/test/basic_types/number.cc +99 -0
  123. package/vendor/node-addon-api/test/basic_types/number.js +114 -0
  124. package/vendor/node-addon-api/test/basic_types/value.cc +120 -0
  125. package/vendor/node-addon-api/test/basic_types/value.js +133 -0
  126. package/vendor/node-addon-api/test/bigint.cc +91 -0
  127. package/vendor/node-addon-api/test/bigint.js +53 -0
  128. package/vendor/node-addon-api/test/binding-swallowexcept.cc +12 -0
  129. package/vendor/node-addon-api/test/binding.cc +173 -0
  130. package/vendor/node-addon-api/test/binding.gyp +124 -0
  131. package/vendor/node-addon-api/test/buffer.cc +183 -0
  132. package/vendor/node-addon-api/test/buffer.js +69 -0
  133. package/vendor/node-addon-api/test/callbackscope.cc +22 -0
  134. package/vendor/node-addon-api/test/callbackscope.js +49 -0
  135. package/vendor/node-addon-api/test/common/index.js +114 -0
  136. package/vendor/node-addon-api/test/common/test_helper.h +71 -0
  137. package/vendor/node-addon-api/test/dataview/dataview.cc +48 -0
  138. package/vendor/node-addon-api/test/dataview/dataview.js +35 -0
  139. package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +115 -0
  140. package/vendor/node-addon-api/test/dataview/dataview_read_write.js +90 -0
  141. package/vendor/node-addon-api/test/date.cc +44 -0
  142. package/vendor/node-addon-api/test/date.js +18 -0
  143. package/vendor/node-addon-api/test/env_cleanup.cc +88 -0
  144. package/vendor/node-addon-api/test/env_cleanup.js +56 -0
  145. package/vendor/node-addon-api/test/error.cc +287 -0
  146. package/vendor/node-addon-api/test/error.js +81 -0
  147. package/vendor/node-addon-api/test/error_handling_for_primitives.cc +13 -0
  148. package/vendor/node-addon-api/test/error_handling_for_primitives.js +29 -0
  149. package/vendor/node-addon-api/test/error_terminating_environment.js +95 -0
  150. package/vendor/node-addon-api/test/external.cc +81 -0
  151. package/vendor/node-addon-api/test/external.js +88 -0
  152. package/vendor/node-addon-api/test/function.cc +324 -0
  153. package/vendor/node-addon-api/test/function.js +133 -0
  154. package/vendor/node-addon-api/test/function_reference.cc +202 -0
  155. package/vendor/node-addon-api/test/function_reference.js +157 -0
  156. package/vendor/node-addon-api/test/globalObject/global_object.cc +61 -0
  157. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +31 -0
  158. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +61 -0
  159. package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +40 -0
  160. package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +57 -0
  161. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +28 -0
  162. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +48 -0
  163. package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +31 -0
  164. package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +58 -0
  165. package/vendor/node-addon-api/test/handlescope.cc +60 -0
  166. package/vendor/node-addon-api/test/handlescope.js +14 -0
  167. package/vendor/node-addon-api/test/index.js +159 -0
  168. package/vendor/node-addon-api/test/maybe/check.cc +23 -0
  169. package/vendor/node-addon-api/test/maybe/index.js +38 -0
  170. package/vendor/node-addon-api/test/memory_management.cc +17 -0
  171. package/vendor/node-addon-api/test/memory_management.js +9 -0
  172. package/vendor/node-addon-api/test/movable_callbacks.cc +23 -0
  173. package/vendor/node-addon-api/test/movable_callbacks.js +21 -0
  174. package/vendor/node-addon-api/test/name.cc +108 -0
  175. package/vendor/node-addon-api/test/name.js +59 -0
  176. package/vendor/node-addon-api/test/napi_child.js +14 -0
  177. package/vendor/node-addon-api/test/object/delete_property.cc +38 -0
  178. package/vendor/node-addon-api/test/object/delete_property.js +41 -0
  179. package/vendor/node-addon-api/test/object/finalizer.cc +29 -0
  180. package/vendor/node-addon-api/test/object/finalizer.js +28 -0
  181. package/vendor/node-addon-api/test/object/get_property.cc +34 -0
  182. package/vendor/node-addon-api/test/object/get_property.js +40 -0
  183. package/vendor/node-addon-api/test/object/has_own_property.cc +34 -0
  184. package/vendor/node-addon-api/test/object/has_own_property.js +34 -0
  185. package/vendor/node-addon-api/test/object/has_property.cc +38 -0
  186. package/vendor/node-addon-api/test/object/has_property.js +37 -0
  187. package/vendor/node-addon-api/test/object/object.cc +350 -0
  188. package/vendor/node-addon-api/test/object/object.js +217 -0
  189. package/vendor/node-addon-api/test/object/object_deprecated.cc +66 -0
  190. package/vendor/node-addon-api/test/object/object_deprecated.js +47 -0
  191. package/vendor/node-addon-api/test/object/object_freeze_seal.cc +25 -0
  192. package/vendor/node-addon-api/test/object/object_freeze_seal.js +61 -0
  193. package/vendor/node-addon-api/test/object/set_property.cc +45 -0
  194. package/vendor/node-addon-api/test/object/set_property.js +30 -0
  195. package/vendor/node-addon-api/test/object/subscript_operator.cc +58 -0
  196. package/vendor/node-addon-api/test/object/subscript_operator.js +17 -0
  197. package/vendor/node-addon-api/test/object_reference.cc +219 -0
  198. package/vendor/node-addon-api/test/object_reference.js +259 -0
  199. package/vendor/node-addon-api/test/objectwrap.cc +268 -0
  200. package/vendor/node-addon-api/test/objectwrap.js +284 -0
  201. package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +26 -0
  202. package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +18 -0
  203. package/vendor/node-addon-api/test/objectwrap_function.cc +45 -0
  204. package/vendor/node-addon-api/test/objectwrap_function.js +22 -0
  205. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +30 -0
  206. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +13 -0
  207. package/vendor/node-addon-api/test/objectwrap_removewrap.cc +45 -0
  208. package/vendor/node-addon-api/test/objectwrap_removewrap.js +40 -0
  209. package/vendor/node-addon-api/test/objectwrap_worker_thread.js +19 -0
  210. package/vendor/node-addon-api/test/promise.cc +29 -0
  211. package/vendor/node-addon-api/test/promise.js +18 -0
  212. package/vendor/node-addon-api/test/reference.cc +24 -0
  213. package/vendor/node-addon-api/test/reference.js +14 -0
  214. package/vendor/node-addon-api/test/run_script.cc +56 -0
  215. package/vendor/node-addon-api/test/run_script.js +45 -0
  216. package/vendor/node-addon-api/test/symbol.cc +79 -0
  217. package/vendor/node-addon-api/test/symbol.js +73 -0
  218. package/vendor/node-addon-api/test/testUtil.js +54 -0
  219. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +195 -0
  220. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +188 -0
  221. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +63 -0
  222. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +12 -0
  223. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +115 -0
  224. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +14 -0
  225. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +26 -0
  226. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +7 -0
  227. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +225 -0
  228. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +59 -0
  229. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +42 -0
  230. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +53 -0
  231. package/vendor/node-addon-api/test/thunking_manual.cc +140 -0
  232. package/vendor/node-addon-api/test/thunking_manual.js +17 -0
  233. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +215 -0
  234. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +188 -0
  235. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +68 -0
  236. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +12 -0
  237. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +127 -0
  238. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +14 -0
  239. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +28 -0
  240. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +7 -0
  241. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +237 -0
  242. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +59 -0
  243. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +53 -0
  244. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +53 -0
  245. package/vendor/node-addon-api/test/typedarray-bigint.js +58 -0
  246. package/vendor/node-addon-api/test/typedarray.cc +216 -0
  247. package/vendor/node-addon-api/test/typedarray.js +69 -0
  248. package/vendor/node-addon-api/test/version_management.cc +27 -0
  249. package/vendor/node-addon-api/test/version_management.js +31 -0
  250. package/vendor/node-addon-api/unit-test/README.md +28 -0
  251. package/vendor/node-addon-api/unit-test/binding-file-template.js +39 -0
  252. package/vendor/node-addon-api/unit-test/binding.gyp +72 -0
  253. package/vendor/node-addon-api/unit-test/exceptions.js +32 -0
  254. package/vendor/node-addon-api/unit-test/generate-binding-cc.js +61 -0
  255. package/vendor/node-addon-api/unit-test/injectTestParams.js +101 -0
  256. package/vendor/node-addon-api/unit-test/listOfTestModules.js +88 -0
  257. package/vendor/node-addon-api/unit-test/matchModules.js +65 -0
  258. package/vendor/node-addon-api/unit-test/setup.js +13 -0
  259. package/vendor/node-addon-api/unit-test/spawnTask.js +26 -0
  260. package/vendor/node-addon-api/unit-test/test.js +30 -0
  261. package/build/qemu/1.1.0-beta.1/koffi_darwin_x64.tar.gz +0 -0
  262. package/build/qemu/1.1.0-beta.1/koffi_freebsd_arm64.tar.gz +0 -0
  263. package/build/qemu/1.1.0-beta.1/koffi_freebsd_ia32.tar.gz +0 -0
  264. package/build/qemu/1.1.0-beta.1/koffi_freebsd_x64.tar.gz +0 -0
  265. package/build/qemu/1.1.0-beta.1/koffi_linux_arm.tar.gz +0 -0
  266. package/build/qemu/1.1.0-beta.1/koffi_linux_arm64.tar.gz +0 -0
  267. package/build/qemu/1.1.0-beta.1/koffi_linux_ia32.tar.gz +0 -0
  268. package/build/qemu/1.1.0-beta.1/koffi_linux_x64.tar.gz +0 -0
  269. package/build/qemu/1.1.0-beta.1/koffi_win32_ia32.tar.gz +0 -0
  270. package/build/qemu/1.1.0-beta.1/koffi_win32_x64.tar.gz +0 -0
@@ -0,0 +1,402 @@
1
+ # Function
2
+
3
+ The `Napi::Function` class provides a set of methods for creating a function object in
4
+ native code that can later be called from JavaScript. The created function is not
5
+ automatically visible from JavaScript. Instead it needs to be part of the add-on's
6
+ module exports or be returned by one of the module's exported functions.
7
+
8
+ In addition the `Napi::Function` class also provides methods that can be used to call
9
+ functions that were created in JavaScript and passed to the native add-on.
10
+
11
+ The `Napi::Function` class inherits its behavior from the `Napi::Object` class (for more info
12
+ see: [`Napi::Object`](object.md)).
13
+
14
+ > For callbacks that will be called with asynchronous events from a
15
+ > non-JavaScript thread, please refer to [`Napi::ThreadSafeFunction`][] for more
16
+ > examples.
17
+
18
+ ## Example
19
+
20
+ ```cpp
21
+ #include <napi.h>
22
+
23
+ using namespace Napi;
24
+
25
+ Value Fn(const CallbackInfo& info) {
26
+ Env env = info.Env();
27
+ // ...
28
+ return String::New(env, "Hello World");
29
+ }
30
+
31
+ Object Init(Env env, Object exports) {
32
+ exports.Set(String::New(env, "fn"), Function::New<Fn>(env));
33
+ return exports;
34
+ }
35
+
36
+ NODE_API_MODULE(NODE_GYP_MODULE_NAME, Init)
37
+ ```
38
+
39
+ The above code can be used from JavaScript as follows:
40
+
41
+ ```js
42
+ const addon = require('./addon');
43
+ addon.fn();
44
+ ```
45
+
46
+ With the `Napi::Function` class it is possible to call a JavaScript function object
47
+ from a native add-on with two different methods: `Call` and `MakeCallback`.
48
+ The API of these two methods is very similar, but they are used in different
49
+ contexts. The `MakeCallback` method is used to call from native code back into
50
+ JavaScript after returning from an [asynchronous operation](async_operations.md)
51
+ and in general in situations which don't have an existing JavaScript function on
52
+ the stack. The `Call` method is used when there is already a JavaScript function
53
+ on the stack (for example when running a native method called from JavaScript).
54
+
55
+ ## Type definitions
56
+
57
+ ### Napi::Function::VoidCallback
58
+
59
+ This is the type describing a callback returning `void` that will be invoked
60
+ from JavaScript.
61
+
62
+ ```cpp
63
+ using VoidCallback = void (*)(const Napi::CallbackInfo& info);
64
+ ```
65
+
66
+ ### Napi::Function::Callback
67
+
68
+ This is the type describing a callback returning a value that will be invoked
69
+ from JavaScript.
70
+
71
+
72
+ ```cpp
73
+ using Callback = Value (*)(const Napi::CallbackInfo& info);
74
+ ```
75
+
76
+ ## Methods
77
+
78
+ ### Constructor
79
+
80
+ Creates a new empty instance of `Napi::Function`.
81
+
82
+ ```cpp
83
+ Napi::Function::Function();
84
+ ```
85
+
86
+ ### Constructor
87
+
88
+ Creates a new instance of the `Napi::Function` object.
89
+
90
+ ```cpp
91
+ Napi::Function::Function(napi_env env, napi_value value);
92
+ ```
93
+
94
+ - `[in] env`: The `napi_env` environment in which to construct the `Napi::Function` object.
95
+ - `[in] value`: The `napi_value` which is a handle for a JavaScript function.
96
+
97
+ Returns a non-empty `Napi::Function` instance.
98
+
99
+ ### New
100
+
101
+ Creates an instance of a `Napi::Function` object.
102
+
103
+ ```cpp
104
+ template <Napi::VoidCallback cb>
105
+ static Napi::Function New(napi_env env,
106
+ const char* utf8name = nullptr,
107
+ void* data = nullptr);
108
+ ```
109
+
110
+ - `[template] cb`: The native function to invoke when the JavaScript function is
111
+ invoked.
112
+ - `[in] env`: The `napi_env` environment in which to construct the `Napi::Function` object.
113
+ - `[in] utf8name`: Null-terminated string to be used as the name of the function.
114
+ - `[in] data`: User-provided data context. This will be passed back into the
115
+ function when invoked later.
116
+
117
+ Returns an instance of a `Napi::Function` object.
118
+
119
+ ### New
120
+
121
+ Creates an instance of a `Napi::Function` object.
122
+
123
+ ```cpp
124
+ template <Napi::Callback cb>
125
+ static Napi::Function New(napi_env env,
126
+ const char* utf8name = nullptr,
127
+ void* data = nullptr);
128
+ ```
129
+
130
+ - `[template] cb`: The native function to invoke when the JavaScript function is
131
+ invoked.
132
+ - `[in] env`: The `napi_env` environment in which to construct the `Napi::Function` object.
133
+ - `[in] utf8name`: Null-terminated string to be used as the name of the function.
134
+ - `[in] data`: User-provided data context. This will be passed back into the
135
+ function when invoked later.
136
+
137
+ Returns an instance of a `Napi::Function` object.
138
+
139
+ ### New
140
+
141
+ Creates an instance of a `Napi::Function` object.
142
+
143
+ ```cpp
144
+ template <Napi::VoidCallback cb>
145
+ static Napi::Function New(napi_env env,
146
+ const std::string& utf8name,
147
+ void* data = nullptr);
148
+ ```
149
+
150
+ - `[template] cb`: The native function to invoke when the JavaScript function is
151
+ invoked.
152
+ - `[in] env`: The `napi_env` environment in which to construct the `Napi::Function` object.
153
+ - `[in] utf8name`: String to be used as the name of the function.
154
+ - `[in] data`: User-provided data context. This will be passed back into the
155
+ function when invoked later.
156
+
157
+ Returns an instance of a `Napi::Function` object.
158
+
159
+ ### New
160
+
161
+ Creates an instance of a `Napi::Function` object.
162
+
163
+ ```cpp
164
+ template <Napi::Callback cb>
165
+ static Napi::Function New(napi_env env,
166
+ const std::string& utf8name,
167
+ void* data = nullptr);
168
+ ```
169
+
170
+ - `[template] cb`: The native function to invoke when the JavaScript function is
171
+ invoked.
172
+ - `[in] env`: The `napi_env` environment in which to construct the `Napi::Function` object.
173
+ - `[in] utf8name`: String to be used as the name of the function.
174
+ - `[in] data`: User-provided data context. This will be passed back into the
175
+ function when invoked later.
176
+
177
+ Returns an instance of a `Napi::Function` object.
178
+
179
+ ### New
180
+
181
+ Creates an instance of a `Napi::Function` object.
182
+
183
+ ```cpp
184
+ template <typename Callable>
185
+ static Napi::Function Napi::Function::New(napi_env env, Callable cb, const char* utf8name = nullptr, void* data = nullptr);
186
+ ```
187
+
188
+ - `[in] env`: The `napi_env` environment in which to construct the `Napi::Function` object.
189
+ - `[in] cb`: Object that implements `Callable`.
190
+ - `[in] utf8name`: Null-terminated string to be used as the name of the function.
191
+ - `[in] data`: User-provided data context. This will be passed back into the
192
+ function when invoked later.
193
+
194
+ Returns an instance of a `Napi::Function` object.
195
+
196
+ ### New
197
+
198
+ ```cpp
199
+ template <typename Callable>
200
+ static Napi::Function Napi::Function::New(napi_env env, Callable cb, const std::string& utf8name, void* data = nullptr);
201
+ ```
202
+
203
+ - `[in] env`: The `napi_env` environment in which to construct the `Napi::Function` object.
204
+ - `[in] cb`: Object that implements `Callable`.
205
+ - `[in] utf8name`: String to be used as the name of the function.
206
+ - `[in] data`: User-provided data context. This will be passed back into the
207
+ function when invoked later.
208
+
209
+ Returns an instance of a `Napi::Function` object.
210
+
211
+ ### New
212
+
213
+ Creates a new JavaScript value from one that represents the constructor for the
214
+ object.
215
+
216
+ ```cpp
217
+ Napi::Object Napi::Function::New(const std::initializer_list<napi_value>& args) const;
218
+ ```
219
+
220
+ - `[in] args`: Initializer list of JavaScript values as `napi_value` representing
221
+ the arguments of the constructor function.
222
+
223
+ Returns a new JavaScript object.
224
+
225
+ ### New
226
+
227
+ Creates a new JavaScript value from one that represents the constructor for the
228
+ object.
229
+
230
+ ```cpp
231
+ Napi::Object Napi::Function::New(const std::vector<napi_value>& args) const;
232
+ ```
233
+
234
+ - `[in] args`: Vector of JavaScript values as `napi_value` representing the
235
+ arguments of the constructor function.
236
+
237
+ Returns a new JavaScript object.
238
+
239
+ ### New
240
+
241
+ Creates a new JavaScript value from one that represents the constructor for the
242
+ object.
243
+
244
+ ```cpp
245
+ Napi::Object Napi::Function::New(size_t argc, const napi_value* args) const;
246
+ ```
247
+
248
+ - `[in] argc`: The number of the arguments passed to the constructor function.
249
+ - `[in] args`: Array of JavaScript values as `napi_value` representing the
250
+ arguments of the constructor function.
251
+
252
+ Returns a new JavaScript object.
253
+
254
+ ### Call
255
+
256
+ Calls a Javascript function from a native add-on.
257
+
258
+ ```cpp
259
+ Napi::Value Napi::Function::Call(const std::initializer_list<napi_value>& args) const;
260
+ ```
261
+
262
+ - `[in] args`: Initializer list of JavaScript values as `napi_value` representing
263
+ the arguments of the function.
264
+
265
+ Returns a `Napi::Value` representing the JavaScript value returned by the function.
266
+
267
+ ### Call
268
+
269
+ Calls a JavaScript function from a native add-on.
270
+
271
+ ```cpp
272
+ Napi::Value Napi::Function::Call(const std::vector<napi_value>& args) const;
273
+ ```
274
+
275
+ - `[in] args`: Vector of JavaScript values as `napi_value` representing the
276
+ arguments of the function.
277
+
278
+ Returns a `Napi::Value` representing the JavaScript value returned by the function.
279
+
280
+ ### Call
281
+
282
+ Calls a Javascript function from a native add-on.
283
+
284
+ ```cpp
285
+ Napi::Value Napi::Function::Call(size_t argc, const napi_value* args) const;
286
+ ```
287
+
288
+ - `[in] argc`: The number of the arguments passed to the function.
289
+ - `[in] args`: Array of JavaScript values as `napi_value` representing the
290
+ arguments of the function.
291
+
292
+ Returns a `Napi::Value` representing the JavaScript value returned by the function.
293
+
294
+ ### Call
295
+
296
+ Calls a Javascript function from a native add-on.
297
+
298
+ ```cpp
299
+ Napi::Value Napi::Function::Call(napi_value recv, const std::initializer_list<napi_value>& args) const;
300
+ ```
301
+
302
+ - `[in] recv`: The `this` object passed to the called function.
303
+ - `[in] args`: Initializer list of JavaScript values as `napi_value` representing
304
+ the arguments of the function.
305
+
306
+ Returns a `Napi::Value` representing the JavaScript value returned by the function.
307
+
308
+ ### Call
309
+
310
+ Calls a Javascript function from a native add-on.
311
+
312
+ ```cpp
313
+ Napi::Value Napi::Function::Call(napi_value recv, const std::vector<napi_value>& args) const;
314
+ ```
315
+
316
+ - `[in] recv`: The `this` object passed to the called function.
317
+ - `[in] args`: Vector of JavaScript values as `napi_value` representing the
318
+ arguments of the function.
319
+
320
+ Returns a `Napi::Value` representing the JavaScript value returned by the function.
321
+
322
+ ### Call
323
+
324
+ Calls a Javascript function from a native add-on.
325
+
326
+ ```cpp
327
+ Napi::Value Napi::Function::Call(napi_value recv, size_t argc, const napi_value* args) const;
328
+ ```
329
+
330
+ - `[in] recv`: The `this` object passed to the called function.
331
+ - `[in] argc`: The number of the arguments passed to the function.
332
+ - `[in] args`: Array of JavaScript values as `napi_value` representing the
333
+ arguments of the function.
334
+
335
+ Returns a `Napi::Value` representing the JavaScript value returned by the function.
336
+
337
+ ### MakeCallback
338
+
339
+ Calls a Javascript function from a native add-on after an asynchronous operation.
340
+
341
+ ```cpp
342
+ Napi::Value Napi::Function::MakeCallback(napi_value recv, const std::initializer_list<napi_value>& args, napi_async_context context = nullptr) const;
343
+ ```
344
+
345
+ - `[in] recv`: The `this` object passed to the called function.
346
+ - `[in] args`: Initializer list of JavaScript values as `napi_value` representing
347
+ the arguments of the function.
348
+ - `[in] context`: Context for the async operation that is invoking the callback.
349
+ This should normally be a value previously obtained from [Napi::AsyncContext](async_context.md).
350
+ However `nullptr` is also allowed, which indicates the current async context
351
+ (if any) is to be used for the callback.
352
+
353
+ Returns a `Napi::Value` representing the JavaScript value returned by the function.
354
+
355
+ ### MakeCallback
356
+
357
+ Calls a Javascript function from a native add-on after an asynchronous operation.
358
+
359
+ ```cpp
360
+ Napi::Value Napi::Function::MakeCallback(napi_value recv, const std::vector<napi_value>& args, napi_async_context context = nullptr) const;
361
+ ```
362
+
363
+ - `[in] recv`: The `this` object passed to the called function.
364
+ - `[in] args`: List of JavaScript values as `napi_value` representing the
365
+ arguments of the function.
366
+ - `[in] context`: Context for the async operation that is invoking the callback.
367
+ This should normally be a value previously obtained from [Napi::AsyncContext](async_context.md).
368
+ However `nullptr` is also allowed, which indicates the current async context
369
+ (if any) is to be used for the callback.
370
+
371
+ Returns a `Napi::Value` representing the JavaScript value returned by the function.
372
+
373
+ ### MakeCallback
374
+
375
+ Calls a Javascript function from a native add-on after an asynchronous operation.
376
+
377
+ ```cpp
378
+ Napi::Value Napi::Function::MakeCallback(napi_value recv, size_t argc, const napi_value* args, napi_async_context context = nullptr) const;
379
+ ```
380
+
381
+ - `[in] recv`: The `this` object passed to the called function.
382
+ - `[in] argc`: The number of the arguments passed to the function.
383
+ - `[in] args`: Array of JavaScript values as `napi_value` representing the
384
+ arguments of the function.
385
+ - `[in] context`: Context for the async operation that is invoking the callback.
386
+ This should normally be a value previously obtained from [Napi::AsyncContext](async_context.md).
387
+ However `nullptr` is also allowed, which indicates the current async context
388
+ (if any) is to be used for the callback.
389
+
390
+ Returns a `Napi::Value` representing the JavaScript value returned by the function.
391
+
392
+ ## Operator
393
+
394
+ ```cpp
395
+ Napi::Value Napi::Function::operator ()(const std::initializer_list<napi_value>& args) const;
396
+ ```
397
+
398
+ - `[in] args`: Initializer list of JavaScript values as `napi_value`.
399
+
400
+ Returns a `Napi::Value` representing the JavaScript value returned by the function.
401
+
402
+ [`Napi::ThreadSafeFunction`]: ./threadsafe_function.md
@@ -0,0 +1,238 @@
1
+ # FunctionReference
2
+
3
+ `Napi::FunctionReference` is a subclass of [`Napi::Reference`](reference.md), and
4
+ is equivalent to an instance of `Napi::Reference<Napi::Function>`. This means
5
+ that a `Napi::FunctionReference` holds a [`Napi::Function`](function.md), and a
6
+ count of the number of references to that `Napi::Function`. When the count is
7
+ greater than 0, a `Napi::FunctionReference` is not eligible for garbage collection.
8
+ This ensures that the `Function` will remain accessible, even if the original
9
+ reference to it is no longer available.
10
+ `Napi::FunctionReference` allows the referenced JavaScript function object to be
11
+ called from a native add-on with two different methods: `Call` and `MakeCallback`.
12
+ See the documentation for [`Napi::Function`](function.md) for when `Call` should
13
+ be used instead of `MakeCallback` and vice-versa.
14
+
15
+ The `Napi::FunctionReference` class inherits its behavior from the `Napi::Reference`
16
+ class (for more info see: [`Napi::Reference`](reference.md)).
17
+
18
+ ## Methods
19
+
20
+ ### Weak
21
+
22
+ Creates a "weak" reference to the value, in that the initial reference count is
23
+ set to 0.
24
+
25
+ ```cpp
26
+ static Napi::FunctionReference Napi::Weak(const Napi::Function& value);
27
+ ```
28
+
29
+ - `[in] value`: The value which is to be referenced.
30
+
31
+ Returns the newly created reference.
32
+
33
+ ### Persistent
34
+
35
+ Creates a "persistent" reference to the value, in that the initial reference
36
+ count is set to 1.
37
+
38
+ ```cpp
39
+ static Napi::FunctionReference Napi::Persistent(const Napi::Function& value);
40
+ ```
41
+
42
+ - `[in] value`: The value which is to be referenced.
43
+
44
+ Returns the newly created reference.
45
+
46
+ ### Constructor
47
+
48
+ Creates a new empty instance of `Napi::FunctionReference`.
49
+
50
+ ```cpp
51
+ Napi::FunctionReference::FunctionReference();
52
+ ```
53
+
54
+ ### Constructor
55
+
56
+ Creates a new instance of the `Napi::FunctionReference`.
57
+
58
+ ```cpp
59
+ Napi::FunctionReference::FunctionReference(napi_env env, napi_ref ref);
60
+ ```
61
+
62
+ - `[in] env`: The environment in which to construct the `Napi::FunctionReference` object.
63
+ - `[in] ref`: The Node-API reference to be held by the `Napi::FunctionReference`.
64
+
65
+ Returns a newly created `Napi::FunctionReference` object.
66
+
67
+ ### New
68
+
69
+ Constructs a new instance by calling the constructor held by this reference.
70
+
71
+ ```cpp
72
+ Napi::Object Napi::FunctionReference::New(const std::initializer_list<napi_value>& args) const;
73
+ ```
74
+
75
+ - `[in] args`: Initializer list of JavaScript values as `napi_value` representing
76
+ the arguments of the constructor function.
77
+
78
+ Returns a new JavaScript object.
79
+
80
+ ### New
81
+
82
+ Constructs a new instance by calling the constructor held by this reference.
83
+
84
+ ```cpp
85
+ Napi::Object Napi::FunctionReference::New(const std::vector<napi_value>& args) const;
86
+ ```
87
+
88
+ - `[in] args`: Vector of JavaScript values as `napi_value` representing the
89
+ arguments of the constructor function.
90
+
91
+ Returns a new JavaScript object.
92
+
93
+ ### Call
94
+
95
+ Calls a referenced Javascript function from a native add-on.
96
+
97
+ ```cpp
98
+ Napi::Value Napi::FunctionReference::Call(const std::initializer_list<napi_value>& args) const;
99
+ ```
100
+
101
+ - `[in] args`: Initializer list of JavaScript values as `napi_value` representing
102
+ the arguments of the referenced function.
103
+
104
+ Returns a `Napi::Value` representing the JavaScript object returned by the referenced
105
+ function.
106
+
107
+ ### Call
108
+
109
+ Calls a referenced JavaScript function from a native add-on.
110
+
111
+ ```cpp
112
+ Napi::Value Napi::FunctionReference::Call(const std::vector<napi_value>& args) const;
113
+ ```
114
+
115
+ - `[in] args`: Vector of JavaScript values as `napi_value` representing the
116
+ arguments of the referenced function.
117
+
118
+ Returns a `Napi::Value` representing the JavaScript object returned by the referenced
119
+ function.
120
+
121
+ ### Call
122
+
123
+ Calls a referenced JavaScript function from a native add-on.
124
+
125
+ ```cpp
126
+ Napi::Value Napi::FunctionReference::Call(napi_value recv, const std::initializer_list<napi_value>& args) const;
127
+ ```
128
+
129
+ - `[in] recv`: The `this` object passed to the referenced function when it's called.
130
+ - `[in] args`: Initializer list of JavaScript values as `napi_value` representing
131
+ the arguments of the referenced function.
132
+
133
+ Returns a `Napi::Value` representing the JavaScript object returned by the referenced
134
+ function.
135
+
136
+ ### Call
137
+
138
+ Calls a referenced JavaScript function from a native add-on.
139
+
140
+ ```cpp
141
+ Napi::Value Napi::FunctionReference::Call(napi_value recv, const std::vector<napi_value>& args) const;
142
+ ```
143
+
144
+ - `[in] recv`: The `this` object passed to the referenced function when it's called.
145
+ - `[in] args`: Vector of JavaScript values as `napi_value` representing the
146
+ arguments of the referenced function.
147
+
148
+ Returns a `Napi::Value` representing the JavaScript object returned by the referenced
149
+ function.
150
+
151
+ ### Call
152
+
153
+ Calls a referenced JavaScript function from a native add-on.
154
+
155
+ ```cpp
156
+ Napi::Value Napi::FunctionReference::Call(napi_value recv, size_t argc, const napi_value* args) const;
157
+ ```
158
+
159
+ - `[in] recv`: The `this` object passed to the referenced function when it's called.
160
+ - `[in] argc`: The number of arguments passed to the referenced function.
161
+ - `[in] args`: Array of JavaScript values as `napi_value` representing the
162
+ arguments of the referenced function.
163
+
164
+ Returns a `Napi::Value` representing the JavaScript object returned by the referenced
165
+ function.
166
+
167
+
168
+ ### MakeCallback
169
+
170
+ Calls a referenced JavaScript function from a native add-on after an asynchronous
171
+ operation.
172
+
173
+ ```cpp
174
+ Napi::Value Napi::FunctionReference::MakeCallback(napi_value recv, const std::initializer_list<napi_value>& args, napi_async_context = nullptr) const;
175
+ ```
176
+
177
+ - `[in] recv`: The `this` object passed to the referenced function when it's called.
178
+ - `[in] args`: Initializer list of JavaScript values as `napi_value` representing
179
+ the arguments of the referenced function.
180
+ - `[in] context`: Context for the async operation that is invoking the callback.
181
+ This should normally be a value previously obtained from [Napi::AsyncContext](async_context.md).
182
+ However `nullptr` is also allowed, which indicates the current async context
183
+ (if any) is to be used for the callback.
184
+
185
+ Returns a `Napi::Value` representing the JavaScript object returned by the referenced
186
+ function.
187
+
188
+ ### MakeCallback
189
+
190
+ Calls a referenced JavaScript function from a native add-on after an asynchronous
191
+ operation.
192
+
193
+ ```cpp
194
+ Napi::Value Napi::FunctionReference::MakeCallback(napi_value recv, const std::vector<napi_value>& args, napi_async_context context = nullptr) const;
195
+ ```
196
+
197
+ - `[in] recv`: The `this` object passed to the referenced function when it's called.
198
+ - `[in] args`: Vector of JavaScript values as `napi_value` representing the
199
+ arguments of the referenced function.
200
+ - `[in] context`: Context for the async operation that is invoking the callback.
201
+ This should normally be a value previously obtained from [Napi::AsyncContext](async_context.md).
202
+ However `nullptr` is also allowed, which indicates the current async context
203
+ (if any) is to be used for the callback.
204
+
205
+ Returns a `Napi::Value` representing the JavaScript object returned by the referenced
206
+ function.
207
+
208
+ ### MakeCallback
209
+
210
+ Calls a referenced JavaScript function from a native add-on after an asynchronous
211
+ operation.
212
+
213
+ ```cpp
214
+ Napi::Value Napi::FunctionReference::MakeCallback(napi_value recv, size_t argc, const napi_value* args, napi_async_context context = nullptr) const;
215
+ ```
216
+
217
+ - `[in] recv`: The `this` object passed to the referenced function when it's called.
218
+ - `[in] argc`: The number of arguments passed to the referenced function.
219
+ - `[in] args`: Array of JavaScript values as `napi_value` representing the
220
+ arguments of the referenced function.
221
+ - `[in] context`: Context for the async operation that is invoking the callback.
222
+ This should normally be a value previously obtained from [Napi::AsyncContext](async_context.md).
223
+ However `nullptr` is also allowed, which indicates the current async context
224
+ (if any) is to be used for the callback.
225
+
226
+ Returns a `Napi::Value` representing the JavaScript object returned by the referenced
227
+ function.
228
+
229
+ ## Operator
230
+
231
+ ```cpp
232
+ Napi::Value operator ()(const std::initializer_list<napi_value>& args) const;
233
+ ```
234
+
235
+ - `[in] args`: Initializer list of reference to JavaScript values as `napi_value`
236
+
237
+ Returns a `Napi::Value` representing the JavaScript value returned by the referenced
238
+ function.
@@ -0,0 +1,13 @@
1
+ # Generator
2
+
3
+ ## What is generator
4
+
5
+ **[generator-napi-module](https://www.npmjs.com/package/generator-napi-module)** is a module to quickly generate a skeleton module using
6
+ **Node-API**, the new API for Native addons. This module automatically sets up your
7
+ **gyp file** to use **node-addon-api**, the C++ wrappers for Node-API and generates
8
+ a wrapper JS module. Optionally, it can even configure the generated project to
9
+ use **TypeScript** instead.
10
+
11
+ ## **generator-napi-module** reference
12
+
13
+ - [Installation and usage](https://www.npmjs.com/package/generator-napi-module#installation)