koffi 1.1.0-beta.1 → 1.1.0-beta.2

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 +12 -11
  3. package/build/qemu/1.1.0-beta.2/koffi_darwin_x64.tar.gz +0 -0
  4. package/build/qemu/1.1.0-beta.2/koffi_freebsd_arm64.tar.gz +0 -0
  5. package/build/qemu/1.1.0-beta.2/koffi_freebsd_ia32.tar.gz +0 -0
  6. package/build/qemu/1.1.0-beta.2/koffi_freebsd_x64.tar.gz +0 -0
  7. package/build/qemu/1.1.0-beta.2/koffi_linux_arm.tar.gz +0 -0
  8. package/build/qemu/1.1.0-beta.2/koffi_linux_arm64.tar.gz +0 -0
  9. package/build/qemu/1.1.0-beta.2/koffi_linux_ia32.tar.gz +0 -0
  10. package/build/qemu/1.1.0-beta.2/koffi_linux_x64.tar.gz +0 -0
  11. package/build/qemu/1.1.0-beta.2/koffi_win32_ia32.tar.gz +0 -0
  12. package/build/qemu/1.1.0-beta.2/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 +66 -2
  23. package/src/ffi.hh +3 -1
  24. package/src/parser.cc +4 -0
  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,82 @@
1
+ # node-gyp
2
+
3
+ C++ code needs to be compiled into executable form whether it be as an object
4
+ file to linked with others, a shared library, or a standalone executable.
5
+
6
+ The main reason for this is that we need to link to the Node.js dependencies and
7
+ headers correctly, another reason is that we need a cross platform way to build
8
+ C++ source into binary for the target platform.
9
+
10
+ Until now **node-gyp** is the **de-facto** standard build tool for writing
11
+ Node.js addons. It's based on Google's **gyp** build tool, which abstract away
12
+ many of the tedious issues related to cross platform building.
13
+
14
+ **node-gyp** uses a file called ```binding.gyp``` that is located on the root of
15
+ your addon project.
16
+
17
+ ```binding.gyp``` file, contains all building configurations organized with a
18
+ JSON like syntax. The most important parameter is the **target** that must be
19
+ set to the same value used on the initialization code of the addon as in the
20
+ examples reported below:
21
+
22
+ ### **binding.gyp**
23
+
24
+ ```gyp
25
+ {
26
+ "targets": [
27
+ {
28
+ # myModule is the name of your native addon
29
+ "target_name": "myModule",
30
+ "sources": ["src/my_module.cc", ...],
31
+ ...
32
+ ]
33
+ }
34
+ ```
35
+
36
+ ### **my_module.cc**
37
+
38
+ ```cpp
39
+ #include <napi.h>
40
+
41
+ // ...
42
+
43
+ /**
44
+ * This code is our entry-point. We receive two arguments here, the first is the
45
+ * environment that represent an independent instance of the JavaScript runtime,
46
+ * the second is exports, the same as module.exports in a .js file.
47
+ * You can either add properties to the exports object passed in or create your
48
+ * own exports object. In either case you must return the object to be used as
49
+ * the exports for the module when you return from the Init function.
50
+ */
51
+ Napi::Object Init(Napi::Env env, Napi::Object exports) {
52
+
53
+ // ...
54
+
55
+ return exports;
56
+ }
57
+
58
+ /**
59
+ * This code defines the entry-point for the Node addon, it tells Node where to go
60
+ * once the library has been loaded into active memory. The first argument must
61
+ * match the "target" in our *binding.gyp*. Using NODE_GYP_MODULE_NAME ensures
62
+ * that the argument will be correct, as long as the module is built with
63
+ * node-gyp (which is the usual way of building modules). The second argument
64
+ * points to the function to invoke. The function must not be namespaced.
65
+ */
66
+ NODE_API_MODULE(NODE_GYP_MODULE_NAME, Init)
67
+ ```
68
+
69
+ ## **node-gyp** reference
70
+
71
+ - [Installation](https://www.npmjs.com/package/node-gyp#installation)
72
+ - [How to use](https://www.npmjs.com/package/node-gyp#how-to-use)
73
+ - [The binding.gyp file](https://www.npmjs.com/package/node-gyp#the-bindinggyp-file)
74
+ - [Commands](https://www.npmjs.com/package/node-gyp#commands)
75
+ - [Command options](https://www.npmjs.com/package/node-gyp#command-options)
76
+ - [Configuration](https://www.npmjs.com/package/node-gyp#configuration)
77
+
78
+ Sometimes finding the right settings for ```binding.gyp``` is not easy so to
79
+ accomplish at most complicated task please refer to:
80
+
81
+ - [GYP documentation](https://gyp.gsrc.io/index.md)
82
+ - [node-gyp wiki](https://github.com/nodejs/node-gyp/wiki)
@@ -0,0 +1,163 @@
1
+ # Number
2
+
3
+ `Napi::Number` class is a representation of the JavaScript `Number` object. The
4
+ `Napi::Number` class inherits its behavior from `Napi::Value` class
5
+ (for more info see [`Napi::Value`](value.md))
6
+
7
+ ## Methods
8
+
9
+ ### Constructor
10
+
11
+ Creates a new _empty_ instance of a `Napi::Number` object.
12
+
13
+ ```cpp
14
+ Napi::Number();
15
+ ```
16
+
17
+ Returns a new _empty_ `Napi::Number` object.
18
+
19
+ ### Constructor
20
+
21
+ Creates a new instance of a `Napi::Number` object.
22
+
23
+ ```cpp
24
+ Napi::Number(napi_env env, napi_value value);
25
+ ```
26
+
27
+ - `[in] env`: The `napi_env` environment in which to construct the `Napi::Number` object.
28
+ - `[in] value`: The JavaScript value holding a number.
29
+
30
+ Returns a non-empty `Napi::Number` object.
31
+
32
+ ### New
33
+
34
+ Creates a new instance of a `Napi::Number` object.
35
+
36
+ ```cpp
37
+ Napi::Number Napi::Number::New(napi_env env, double value);
38
+ ```
39
+ - `[in] env`: The `napi_env` environment in which to construct the `Napi::Number` object.
40
+ - `[in] value`: The C++ primitive from which to instantiate the `Napi::Number`.
41
+
42
+ Creates a new instance of a `Napi::Number` object.
43
+
44
+ ### Int32Value
45
+
46
+ Converts a `Napi::Number` value to a `int32_t` primitive type.
47
+
48
+ ```cpp
49
+ Napi::Number::Int32Value() const;
50
+ ```
51
+
52
+ Returns the `int32_t` primitive type of the corresponding `Napi::Number` object.
53
+
54
+ ### Uint32Value
55
+
56
+ Converts a `Napi::Number` value to a `uint32_t` primitive type.
57
+
58
+ ```cpp
59
+ Napi::Number::Uint32Value() const;
60
+ ```
61
+
62
+ Returns the `uint32_t` primitive type of the corresponding `Napi::Number` object.
63
+
64
+ ### Int64Value
65
+
66
+ Converts a `Napi::Number` value to a `int64_t` primitive type.
67
+
68
+ ```cpp
69
+ Napi::Number::Int64Value() const;
70
+ ```
71
+
72
+ Returns the `int64_t` primitive type of the corresponding `Napi::Number` object.
73
+
74
+ ### FloatValue
75
+
76
+ Converts a `Napi::Number` value to a `float` primitive type.
77
+
78
+ ```cpp
79
+ Napi::Number::FloatValue() const;
80
+ ```
81
+
82
+ Returns the `float` primitive type of the corresponding `Napi::Number` object.
83
+
84
+ ### DoubleValue
85
+
86
+ Converts a `Napi::Number` value to a `double` primitive type.
87
+
88
+ ```cpp
89
+ Napi::Number::DoubleValue() const;
90
+ ```
91
+
92
+ Returns the `double` primitive type of the corresponding `Napi::Number` object.
93
+
94
+ ## Operators
95
+
96
+ The `Napi::Number` class contains a set of operators to easily cast JavaScript
97
+ `Number` object to one of the following primitive types:
98
+
99
+ - `int32_t`
100
+ - `uint32_t`
101
+ - `int64_t`
102
+ - `float`
103
+ - `double`
104
+
105
+ ### operator int32_t
106
+
107
+ Converts a `Napi::Number` value to a `int32_t` primitive.
108
+
109
+ ```cpp
110
+ Napi::Number::operator int32_t() const;
111
+ ```
112
+
113
+ Returns the `int32_t` primitive type of the corresponding `Napi::Number` object.
114
+
115
+ ### operator uint32_t
116
+
117
+ Converts a `Napi::Number` value to a `uint32_t` primitive type.
118
+
119
+ ```cpp
120
+ Napi::Number::operator uint32_t() const;
121
+ ```
122
+
123
+ Returns the `uint32_t` primitive type of the corresponding `Napi::Number` object.
124
+
125
+ ### operator int64_t
126
+
127
+ Converts a `Napi::Number` value to a `int64_t` primitive type.
128
+
129
+ ```cpp
130
+ Napi::Number::operator int64_t() const;
131
+ ```
132
+
133
+ Returns the `int64_t` primitive type of the corresponding `Napi::Number` object.
134
+
135
+ ### operator float
136
+
137
+ Converts a `Napi::Number` value to a `float` primitive type.
138
+
139
+ ```cpp
140
+ Napi::Number::operator float() const;
141
+ ```
142
+
143
+ Returns the `float` primitive type of the corresponding `Napi::Number` object.
144
+
145
+ ### operator double
146
+
147
+ Converts a `Napi::Number` value to a `double` primitive type.
148
+
149
+ ```cpp
150
+ Napi::Number::operator double() const;
151
+ ```
152
+
153
+ Returns the `double` primitive type of the corresponding `Napi::Number` object.
154
+
155
+ ### Example
156
+
157
+ The following shows an example of casting a number to an `uint32_t` value.
158
+
159
+ ```cpp
160
+ uint32_t operatorVal = Napi::Number::New(Env(), 10.0); // Number to unsigned 32 bit integer
161
+ // or
162
+ auto instanceVal = info[0].As<Napi::Number>().Uint32Value();
163
+ ```
@@ -0,0 +1,411 @@
1
+ # Object
2
+
3
+ Class `Napi::Object` inherits from class [`Napi::Value`][].
4
+
5
+ The `Napi::Object` class corresponds to a JavaScript object. It is extended by the following node-addon-api classes that you may use when working with more specific types:
6
+
7
+ - [`Napi::Array`](array.md)
8
+ - [`Napi::ArrayBuffer`](array_buffer.md)
9
+ - [`Napi::Buffer<T>`](buffer.md)
10
+ - [`Napi::Function`](function.md)
11
+ - [`Napi::TypedArray`](typed_array.md).
12
+
13
+ This class provides a number of convenience methods, most of which are used to set or get properties on a JavaScript object. For example, Set() and Get().
14
+
15
+ ## Example
16
+ ```cpp
17
+ #include <napi.h>
18
+
19
+ using namespace Napi;
20
+
21
+ Void Init(Env env) {
22
+
23
+ // Create a new instance
24
+ Object obj = Object::New(env);
25
+
26
+ // Assign values to properties
27
+ obj.Set("hello", "world");
28
+ obj.Set(uint32_t(42), "The Answer to Life, the Universe, and Everything");
29
+ obj.Set("Douglas Adams", true);
30
+
31
+ // Get properties
32
+ Value val1 = obj.Get("hello");
33
+ Value val2 = obj.Get(uint32_t(42));
34
+ Value val3 = obj.Get("Douglas Adams");
35
+
36
+ // Test if objects have properties.
37
+ bool obj1 = obj.Has("hello"); // true
38
+ bool obj2 = obj.Has("world"); // false
39
+
40
+ }
41
+ ```
42
+
43
+ ## Methods
44
+
45
+ ### Empty Constructor
46
+
47
+ ```cpp
48
+ Napi::Object::Object();
49
+ ```
50
+ Creates a new empty Object instance.
51
+
52
+ ### Constructor
53
+
54
+ ```cpp
55
+ Napi::Object::Object(napi_env env, napi_value value);
56
+ ```
57
+ - `[in] env`: The `napi_env` environment in which to construct the Value object.
58
+
59
+ - `[in] value`: The `napi_value` which is a handle for a JavaScript object.
60
+
61
+ Creates a non-empty `Napi::Object` instance.
62
+
63
+ ### New()
64
+
65
+ ```cpp
66
+ Napi::Object Napi::Object::New(napi_env env);
67
+ ```
68
+ - `[in] env`: The `napi_env` environment in which to construct the `Napi::Value` object.
69
+
70
+ Creates a new `Napi::Object` value.
71
+
72
+ ### Set()
73
+
74
+ ```cpp
75
+ bool Napi::Object::Set (____ key, ____ value) const;
76
+ ```
77
+ - `[in] key`: The name for the property being assigned.
78
+ - `[in] value`: The value being assigned to the property.
79
+
80
+ Add a property with the specified key with the specified value to the object.
81
+
82
+ The key can be any of the following types:
83
+ - `napi_value`
84
+ - [`Napi::Value`](value.md)
85
+ - `const char*`
86
+ - `const std::string&`
87
+ - `uint32_t`
88
+
89
+ The `value` can be of any type that is accepted by [`Napi::Value::From`][].
90
+
91
+ ### Delete()
92
+
93
+ ```cpp
94
+ bool Napi::Object::Delete(____ key) const;
95
+ ```
96
+ - `[in] key`: The name of the property to delete.
97
+
98
+ Deletes the property associated with the given key. Returns `true` if the property was deleted.
99
+
100
+ The `key` can be any of the following types:
101
+ - `napi_value`
102
+ - [`Napi::Value`](value.md)
103
+ - `const char *`
104
+ - `const std::string &`
105
+ - `uint32_t`
106
+
107
+ ### Get()
108
+
109
+ ```cpp
110
+ Napi::Value Napi::Object::Get(____ key);
111
+ ```
112
+ - `[in] key`: The name of the property to return the value for.
113
+
114
+ Returns the [`Napi::Value`](value.md) associated with the key property. Returns the value *undefined* if the key does not exist.
115
+
116
+ The `key` can be any of the following types:
117
+ - `napi_value`
118
+ - [`Napi::Value`](value.md)
119
+ - `const char *`
120
+ - `const std::string &`
121
+ - `uint32_t`
122
+
123
+ ### Has()
124
+
125
+ ```cpp
126
+ bool Napi::Object::Has (____ key) const;
127
+ ```
128
+ - `[in] key`: The name of the property to check.
129
+
130
+ Returns a `bool` that is *true* if the object has a property named `key` and *false* otherwise.
131
+
132
+ ### InstanceOf()
133
+
134
+ ```cpp
135
+ bool Napi::Object::InstanceOf (const Function& constructor) const
136
+ ```
137
+ - `[in] constructor`: The constructor [`Napi::Function`](function.md) of the value that is being compared with the object.
138
+
139
+ Returns a `bool` that is true if the `Napi::Object` is an instance created by the `constructor` and false otherwise.
140
+
141
+ Note: This is equivalent to the JavaScript instanceof operator.
142
+
143
+ ### AddFinalizer()
144
+ ```cpp
145
+ template <typename Finalizer, typename T>
146
+ inline void AddFinalizer(Finalizer finalizeCallback, T* data) const;
147
+ ```
148
+
149
+ - `[in] finalizeCallback`: The function to call when the object is garbage-collected.
150
+ - `[in] data`: The data to associate with the object.
151
+
152
+ Associates `data` with the object, calling `finalizeCallback` when the object is garbage-collected. `finalizeCallback`
153
+ has the signature
154
+ ```cpp
155
+ void finalizeCallback(Napi::Env env, T* data);
156
+ ```
157
+ where `data` is the pointer that was passed into the call to `AddFinalizer()`.
158
+
159
+ ### AddFinalizer()
160
+ ```cpp
161
+ template <typename Finalizer, typename T, typename Hint>
162
+ inline void AddFinalizer(Finalizer finalizeCallback,
163
+ T* data,
164
+ Hint* finalizeHint) const;
165
+ ```
166
+
167
+ - `[in] data`: The data to associate with the object.
168
+ - `[in] finalizeCallback`: The function to call when the object is garbage-collected.
169
+
170
+ Associates `data` with the object, calling `finalizeCallback` when the object is garbage-collected. An additional hint
171
+ may be given. It will also be passed to `finalizeCallback`, which has the signature
172
+ ```cpp
173
+ void finalizeCallback(Napi::Env env, T* data, Hint* hint);
174
+ ```
175
+ where `data` and `hint` are the pointers that were passed into the call to `AddFinalizer()`.
176
+
177
+ ### GetPropertyNames()
178
+ ```cpp
179
+ Napi::Array Napi::Object::GetPropertyNames() const;
180
+ ```
181
+
182
+ Returns the names of the enumerable properties of the object as a [`Napi::Array`](array.md) of strings.
183
+ The properties whose key is a `Symbol` will not be included.
184
+
185
+ ### HasOwnProperty()
186
+ ```cpp
187
+ bool Napi::Object::HasOwnProperty(____ key) const;
188
+ ```
189
+ - `[in] key` The name of the property to check.
190
+
191
+ Returns a `bool` that is *true* if the object has an own property named `key` and *false* otherwise.
192
+
193
+ The key can be any of the following types:
194
+ - `napi_value`
195
+ - [`Napi::Value`](value.md)
196
+ - `const char*`
197
+ - `const std::string&`
198
+ - `uint32_t`
199
+
200
+ ### DefineProperty()
201
+
202
+ ```cpp
203
+ bool Napi::Object::DefineProperty (const Napi::PropertyDescriptor& property) const;
204
+ ```
205
+ - `[in] property`: A [`Napi::PropertyDescriptor`](property_descriptor.md).
206
+
207
+ Define a property on the object.
208
+
209
+ ### DefineProperties()
210
+
211
+ ```cpp
212
+ bool Napi::Object::DefineProperties (____ properties) const;
213
+ ```
214
+ - `[in] properties`: A list of [`Napi::PropertyDescriptor`](property_descriptor.md). Can be one of the following types:
215
+ - const std::initializer_list<Napi::PropertyDescriptor>&
216
+ - const std::vector<Napi::PropertyDescriptor>&
217
+
218
+ Defines properties on the object.
219
+
220
+ ### Freeze()
221
+
222
+ ```cpp
223
+ void Napi::Object::Freeze() const;
224
+ ```
225
+
226
+ The `Napi::Object::Freeze()` method freezes an object. A frozen object can no
227
+ longer changed. Freezing an object prevents new properties from being added to
228
+ it, existing properties from being removed, prevents changing the
229
+ enumerability, configurability, or writability of existing properties and
230
+ prevents the value of existing properties from being changed. In addition,
231
+ freezing an object also prevents its prototype from being changed.
232
+
233
+ ### Seal()
234
+
235
+ ```cpp
236
+ void Napi::Object::Seal() const;
237
+ ```
238
+
239
+ The `Napi::Object::Seal()` method seals an object, preventing new properties
240
+ from being added to it and marking all existing properties as non-configurable.
241
+ Values of present properties can still be changed as long as they are
242
+ writable.
243
+
244
+ ### operator\[\]()
245
+
246
+ ```cpp
247
+ Napi::PropertyLValue<std::string> Napi::Object::operator[] (const char* utf8name) const;
248
+ ```
249
+ - `[in] utf8name`: UTF-8 encoded null-terminated property name.
250
+
251
+ Returns a [`Napi::Object::PropertyLValue`](propertylvalue.md) as the named
252
+ property or sets the named property.
253
+
254
+ ```cpp
255
+ Napi::PropertyLValue<std::string> Napi::Object::operator[] (const std::string& utf8name) const;
256
+ ```
257
+ - `[in] utf8name`: UTF-8 encoded property name.
258
+
259
+ Returns a [`Napi::Object::PropertyLValue`](propertylvalue.md) as the named
260
+ property or sets the named property.
261
+
262
+ ```cpp
263
+ Napi::PropertyLValue<uint32_t> Napi::Object::operator[] (uint32_t index) const;
264
+ ```
265
+ - `[in] index`: Element index.
266
+
267
+ Returns a [`Napi::Object::PropertyLValue`](propertylvalue.md) or sets an
268
+ indexed property or array element.
269
+
270
+ ### begin()
271
+
272
+ ```cpp
273
+ Napi::Object::iterator Napi::Object::begin() const;
274
+ ```
275
+
276
+ Returns a constant iterator to the beginning of the object.
277
+
278
+ ```cpp
279
+ Napi::Object::iterator Napi::Object::begin();
280
+ ```
281
+
282
+ Returns a non constant iterator to the beginning of the object.
283
+
284
+ ### end()
285
+
286
+ ```cpp
287
+ Napi::Object::iterator Napi::Object::end() const;
288
+ ```
289
+
290
+ Returns a constant iterator to the end of the object.
291
+
292
+ ```cpp
293
+ Napi::Object::iterator Napi::Object::end();
294
+ ```
295
+
296
+ Returns a non constant iterator to the end of the object.
297
+
298
+ ## Iterator
299
+
300
+ Iterators expose an `std::pair<...>`, where the `first` property is a
301
+ [`Napi::Value`](value.md) that holds the currently iterated key and the
302
+ `second` property is a [`Napi::Object::PropertyLValue`](propertylvalue.md) that
303
+ holds the currently iterated value. Iterators are only available if C++
304
+ exceptions are enabled (by defining `NAPI_CPP_EXCEPTIONS` during the build).
305
+
306
+ ### Constant Iterator
307
+
308
+ In constant iterators, the iterated values are immutable.
309
+
310
+ #### operator++()
311
+
312
+ ```cpp
313
+ inline Napi::Object::const_iterator& Napi::Object::const_iterator::operator++();
314
+ ```
315
+
316
+ Moves the iterator one step forward.
317
+
318
+ #### operator==
319
+
320
+ ```cpp
321
+ inline bool Napi::Object::const_iterator::operator==(const Napi::Object::const_iterator& other) const;
322
+ ```
323
+ - `[in] other`: Another iterator to compare the current iterator to.
324
+
325
+ Returns whether both iterators are at the same index.
326
+
327
+ #### operator!=
328
+
329
+ ```cpp
330
+ inline bool Napi::Object::const_iterator::operator!=(const Napi::Object::const_iterator& other) const;
331
+ ```
332
+ - `[in] other`: Another iterator to compare the current iterator to.
333
+
334
+ Returns whether both iterators are at different indices.
335
+
336
+ #### operator*()
337
+
338
+ ```cpp
339
+ inline const std::pair<Napi::Value, Napi::Object::PropertyLValue<Napi::Value>> Napi::Object::const_iterator::operator*() const;
340
+ ```
341
+
342
+ Returns the currently iterated key and value.
343
+
344
+ #### Example
345
+ ```cpp
346
+ Value Sum(const CallbackInfo& info) {
347
+ Object object = info[0].As<Object>();
348
+ int64_t sum = 0;
349
+
350
+ for (const auto& e : object) {
351
+ sum += static_cast<Value>(e.second).As<Number>().Int64Value();
352
+ }
353
+
354
+ return Number::New(info.Env(), sum);
355
+ }
356
+ ```
357
+
358
+ ### Non Constant Iterator
359
+
360
+ In non constant iterators, the iterated values are mutable.
361
+
362
+ #### operator++()
363
+
364
+ ```cpp
365
+ inline Napi::Object::iterator& Napi::Object::iterator::operator++();
366
+ ```
367
+
368
+ Moves the iterator one step forward.
369
+
370
+ #### operator==
371
+
372
+ ```cpp
373
+ inline bool Napi::Object::iterator::operator==(const Napi::Object::iterator& other) const;
374
+ ```
375
+ - `[in] other`: Another iterator to compare the current iterator to.
376
+
377
+ Returns whether both iterators are at the same index.
378
+
379
+ #### operator!=
380
+
381
+ ```cpp
382
+ inline bool Napi::Object::iterator::operator!=(const Napi::Object::iterator& other) const;
383
+ ```
384
+ - `[in] other`: Another iterator to compare the current iterator to.
385
+
386
+ Returns whether both iterators are at different indices.
387
+
388
+ #### operator*()
389
+
390
+ ```cpp
391
+ inline std::pair<Napi::Value, Napi::Object::PropertyLValue<Napi::Value>> Napi::Object::iterator::operator*();
392
+ ```
393
+
394
+ Returns the currently iterated key and value.
395
+
396
+ #### Example
397
+ ```cpp
398
+ void Increment(const CallbackInfo& info) {
399
+ Env env = info.Env();
400
+ Object object = info[0].As<Object>();
401
+
402
+ for (auto e : object) {
403
+ int64_t value = static_cast<Value>(e.second).As<Number>().Int64Value();
404
+ ++value;
405
+ e.second = Napi::Number::New(env, value);
406
+ }
407
+ }
408
+ ```
409
+
410
+ [`Napi::Value`]: ./value.md
411
+ [`Napi::Value::From`]: ./value.md#from