koffi 1.1.0-beta.0 → 1.1.0-beta.3

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 +16 -11
  3. package/build/qemu/1.1.0-beta.3/koffi_darwin_x64.tar.gz +0 -0
  4. package/build/qemu/1.1.0-beta.3/koffi_freebsd_arm64.tar.gz +0 -0
  5. package/build/qemu/1.1.0-beta.3/koffi_freebsd_ia32.tar.gz +0 -0
  6. package/build/qemu/1.1.0-beta.3/koffi_freebsd_x64.tar.gz +0 -0
  7. package/build/qemu/1.1.0-beta.3/koffi_linux_arm.tar.gz +0 -0
  8. package/build/qemu/1.1.0-beta.3/koffi_linux_arm64.tar.gz +0 -0
  9. package/build/qemu/1.1.0-beta.3/koffi_linux_ia32.tar.gz +0 -0
  10. package/build/qemu/1.1.0-beta.3/koffi_linux_x64.tar.gz +0 -0
  11. package/build/qemu/1.1.0-beta.3/koffi_win32_ia32.tar.gz +0 -0
  12. package/build/qemu/1.1.0-beta.3/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 +69 -4
  23. package/src/ffi.hh +3 -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.0/koffi_darwin_x64.tar.gz +0 -0
  262. package/build/qemu/1.1.0-beta.0/koffi_freebsd_arm64.tar.gz +0 -0
  263. package/build/qemu/1.1.0-beta.0/koffi_freebsd_ia32.tar.gz +0 -0
  264. package/build/qemu/1.1.0-beta.0/koffi_freebsd_x64.tar.gz +0 -0
  265. package/build/qemu/1.1.0-beta.0/koffi_linux_arm.tar.gz +0 -0
  266. package/build/qemu/1.1.0-beta.0/koffi_linux_arm64.tar.gz +0 -0
  267. package/build/qemu/1.1.0-beta.0/koffi_linux_ia32.tar.gz +0 -0
  268. package/build/qemu/1.1.0-beta.0/koffi_linux_x64.tar.gz +0 -0
  269. package/build/qemu/1.1.0-beta.0/koffi_win32_ia32.tar.gz +0 -0
  270. package/build/qemu/1.1.0-beta.0/koffi_win32_x64.tar.gz +0 -0
@@ -0,0 +1,91 @@
1
+ #if (NAPI_VERSION > 5)
2
+
3
+ #define NAPI_EXPERIMENTAL
4
+ #include "napi.h"
5
+
6
+ #include "test_helper.h"
7
+
8
+ using namespace Napi;
9
+
10
+ namespace {
11
+
12
+ Value IsLossless(const CallbackInfo& info) {
13
+ Env env = info.Env();
14
+
15
+ BigInt big = info[0].As<BigInt>();
16
+ bool is_signed = MaybeUnwrap(info[1].ToBoolean()).Value();
17
+
18
+ bool lossless;
19
+ if (is_signed) {
20
+ big.Int64Value(&lossless);
21
+ } else {
22
+ big.Uint64Value(&lossless);
23
+ }
24
+
25
+ return Boolean::New(env, lossless);
26
+ }
27
+
28
+ Value IsBigInt(const CallbackInfo& info) {
29
+ Env env = info.Env();
30
+
31
+ BigInt big = info[0].As<BigInt>();
32
+
33
+ return Boolean::New(env, big.IsBigInt());
34
+ }
35
+
36
+ Value TestInt64(const CallbackInfo& info) {
37
+ bool lossless;
38
+ int64_t input = info[0].As<BigInt>().Int64Value(&lossless);
39
+
40
+ return BigInt::New(info.Env(), input);
41
+ }
42
+
43
+ Value TestUint64(const CallbackInfo& info) {
44
+ bool lossless;
45
+ uint64_t input = info[0].As<BigInt>().Uint64Value(&lossless);
46
+
47
+ return BigInt::New(info.Env(), input);
48
+ }
49
+
50
+ Value TestWords(const CallbackInfo& info) {
51
+ BigInt big = info[0].As<BigInt>();
52
+
53
+ size_t expected_word_count = big.WordCount();
54
+
55
+ int sign_bit;
56
+ size_t word_count = 10;
57
+ uint64_t words[10] = {0};
58
+
59
+ big.ToWords(&sign_bit, &word_count, words);
60
+
61
+ if (word_count != expected_word_count) {
62
+ Error::New(info.Env(), "word count did not match").ThrowAsJavaScriptException();
63
+ return BigInt();
64
+ }
65
+
66
+ return BigInt::New(info.Env(), sign_bit, word_count, words);
67
+ }
68
+
69
+ Value TestTooBigBigInt(const CallbackInfo& info) {
70
+ int sign_bit = 0;
71
+ size_t word_count = SIZE_MAX;
72
+ uint64_t words[10] = {0};
73
+
74
+ return BigInt::New(info.Env(), sign_bit, word_count, words);
75
+ }
76
+
77
+ } // anonymous namespace
78
+
79
+ Object InitBigInt(Env env) {
80
+ Object exports = Object::New(env);
81
+ exports["IsLossless"] = Function::New(env, IsLossless);
82
+ exports["IsBigInt"] = Function::New(env, IsBigInt);
83
+ exports["TestInt64"] = Function::New(env, TestInt64);
84
+ exports["TestUint64"] = Function::New(env, TestUint64);
85
+ exports["TestWords"] = Function::New(env, TestWords);
86
+ exports["TestTooBigBigInt"] = Function::New(env, TestTooBigBigInt);
87
+
88
+ return exports;
89
+ }
90
+
91
+ #endif
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ const assert = require('assert');
4
+
5
+ module.exports = require('./common').runTest(test);
6
+
7
+ function test (binding) {
8
+ const {
9
+ TestInt64,
10
+ TestUint64,
11
+ TestWords,
12
+ IsLossless,
13
+ IsBigInt,
14
+ TestTooBigBigInt
15
+ } = binding.bigint;
16
+
17
+ [
18
+ 0n,
19
+ -0n,
20
+ 1n,
21
+ -1n,
22
+ 100n,
23
+ 2121n,
24
+ -1233n,
25
+ 986583n,
26
+ -976675n,
27
+ 98765432213456789876546896323445679887645323232436587988766545658n,
28
+ -4350987086545760976737453646576078997096876957864353245245769809n
29
+ ].forEach((num) => {
30
+ if (num > -(2n ** 63n) && num < 2n ** 63n) {
31
+ assert.strictEqual(TestInt64(num), num);
32
+ assert.strictEqual(IsLossless(num, true), true);
33
+ } else {
34
+ assert.strictEqual(IsLossless(num, true), false);
35
+ }
36
+
37
+ if (num >= 0 && num < 2n ** 64n) {
38
+ assert.strictEqual(TestUint64(num), num);
39
+ assert.strictEqual(IsLossless(num, false), true);
40
+ } else {
41
+ assert.strictEqual(IsLossless(num, false), false);
42
+ }
43
+
44
+ assert.strictEqual(IsBigInt(num), true);
45
+
46
+ assert.strictEqual(num, TestWords(num));
47
+ });
48
+
49
+ assert.throws(TestTooBigBigInt, {
50
+ name: /^(RangeError|Error)$/,
51
+ message: /^(Maximum BigInt size exceeded|Invalid argument)$/
52
+ });
53
+ }
@@ -0,0 +1,12 @@
1
+ #include "napi.h"
2
+
3
+ using namespace Napi;
4
+
5
+ Object InitError(Env env);
6
+
7
+ Object Init(Env env, Object exports) {
8
+ exports.Set("error", InitError(env));
9
+ return exports;
10
+ }
11
+
12
+ NODE_API_MODULE(addon, Init)
@@ -0,0 +1,173 @@
1
+ #include "napi.h"
2
+
3
+ using namespace Napi;
4
+
5
+ #if (NAPI_VERSION > 5)
6
+ Object InitAddon(Env env);
7
+ Object InitAddonData(Env env);
8
+ #endif
9
+ Object InitArrayBuffer(Env env);
10
+ Object InitAsyncContext(Env env);
11
+ #if (NAPI_VERSION > 3)
12
+ Object InitAsyncProgressQueueWorker(Env env);
13
+ Object InitAsyncProgressWorker(Env env);
14
+ #endif
15
+ Object InitAsyncWorker(Env env);
16
+ Object InitPersistentAsyncWorker(Env env);
17
+ Object InitBasicTypesArray(Env env);
18
+ Object InitBasicTypesBoolean(Env env);
19
+ Object InitBasicTypesNumber(Env env);
20
+ Object InitBasicTypesValue(Env env);
21
+ #if (NAPI_VERSION > 5)
22
+ Object InitBigInt(Env env);
23
+ #endif
24
+ Object InitBuffer(Env env);
25
+ #if (NAPI_VERSION > 2)
26
+ Object InitCallbackScope(Env env);
27
+ #endif
28
+ #if (NAPI_VERSION > 4)
29
+ Object InitDate(Env env);
30
+ #endif
31
+ Object InitDataView(Env env);
32
+ Object InitDataViewReadWrite(Env env);
33
+ Object InitEnvCleanup(Env env);
34
+ Object InitErrorHandlingPrim(Env env);
35
+ Object InitError(Env env);
36
+ Object InitExternal(Env env);
37
+ Object InitFunction(Env env);
38
+ Object InitFunctionReference(Env env);
39
+ Object InitHandleScope(Env env);
40
+ Object InitMovableCallbacks(Env env);
41
+ Object InitMemoryManagement(Env env);
42
+ Object InitName(Env env);
43
+ Object InitObject(Env env);
44
+ #ifndef NODE_ADDON_API_DISABLE_DEPRECATED
45
+ Object InitObjectDeprecated(Env env);
46
+ #endif // !NODE_ADDON_API_DISABLE_DEPRECATED
47
+ Object InitPromise(Env env);
48
+ Object InitRunScript(Env env);
49
+ #if (NAPI_VERSION > 3)
50
+ Object InitThreadSafeFunctionCtx(Env env);
51
+ Object InitThreadSafeFunctionExistingTsfn(Env env);
52
+ Object InitThreadSafeFunctionPtr(Env env);
53
+ Object InitThreadSafeFunctionSum(Env env);
54
+ Object InitThreadSafeFunctionUnref(Env env);
55
+ Object InitThreadSafeFunction(Env env);
56
+ Object InitTypedThreadSafeFunctionCtx(Env env);
57
+ Object InitTypedThreadSafeFunctionExistingTsfn(Env env);
58
+ Object InitTypedThreadSafeFunctionPtr(Env env);
59
+ Object InitTypedThreadSafeFunctionSum(Env env);
60
+ Object InitTypedThreadSafeFunctionUnref(Env env);
61
+ Object InitTypedThreadSafeFunction(Env env);
62
+ #endif
63
+ Object InitSymbol(Env env);
64
+ Object InitTypedArray(Env env);
65
+ Object InitGlobalObject(Env env);
66
+ Object InitObjectWrap(Env env);
67
+ Object InitObjectWrapConstructorException(Env env);
68
+ Object InitObjectWrapFunction(Env env);
69
+ Object InitObjectWrapRemoveWrap(Env env);
70
+ Object InitObjectWrapMultipleInheritance(Env env);
71
+ Object InitObjectReference(Env env);
72
+ Object InitReference(Env env);
73
+ Object InitVersionManagement(Env env);
74
+ Object InitThunkingManual(Env env);
75
+ #if (NAPI_VERSION > 7)
76
+ Object InitObjectFreezeSeal(Env env);
77
+ #endif
78
+
79
+ #if defined(NODE_ADDON_API_ENABLE_MAYBE)
80
+ Object InitMaybeCheck(Env env);
81
+ #endif
82
+
83
+ Object Init(Env env, Object exports) {
84
+ #if (NAPI_VERSION > 5)
85
+ exports.Set("addon", InitAddon(env));
86
+ exports.Set("addon_data", InitAddonData(env));
87
+ #endif
88
+ exports.Set("arraybuffer", InitArrayBuffer(env));
89
+ exports.Set("asynccontext", InitAsyncContext(env));
90
+ #if (NAPI_VERSION > 3)
91
+ exports.Set("asyncprogressqueueworker", InitAsyncProgressQueueWorker(env));
92
+ exports.Set("asyncprogressworker", InitAsyncProgressWorker(env));
93
+ #endif
94
+ exports.Set("globalObject", InitGlobalObject(env));
95
+ exports.Set("asyncworker", InitAsyncWorker(env));
96
+ exports.Set("persistentasyncworker", InitPersistentAsyncWorker(env));
97
+ exports.Set("basic_types_array", InitBasicTypesArray(env));
98
+ exports.Set("basic_types_boolean", InitBasicTypesBoolean(env));
99
+ exports.Set("basic_types_number", InitBasicTypesNumber(env));
100
+ exports.Set("basic_types_value", InitBasicTypesValue(env));
101
+ #if (NAPI_VERSION > 5)
102
+ exports.Set("bigint", InitBigInt(env));
103
+ #endif
104
+ #if (NAPI_VERSION > 4)
105
+ exports.Set("date", InitDate(env));
106
+ #endif
107
+ exports.Set("buffer", InitBuffer(env));
108
+ #if (NAPI_VERSION > 2)
109
+ exports.Set("callbackscope", InitCallbackScope(env));
110
+ #endif
111
+ exports.Set("dataview", InitDataView(env));
112
+ exports.Set("dataview_read_write", InitDataView(env));
113
+ exports.Set("dataview_read_write", InitDataViewReadWrite(env));
114
+ #if (NAPI_VERSION > 2)
115
+ exports.Set("env_cleanup", InitEnvCleanup(env));
116
+ #endif
117
+ exports.Set("error", InitError(env));
118
+ exports.Set("errorHandlingPrim", InitErrorHandlingPrim(env));
119
+ exports.Set("external", InitExternal(env));
120
+ exports.Set("function", InitFunction(env));
121
+ exports.Set("functionreference", InitFunctionReference(env));
122
+ exports.Set("name", InitName(env));
123
+ exports.Set("handlescope", InitHandleScope(env));
124
+ exports.Set("movable_callbacks", InitMovableCallbacks(env));
125
+ exports.Set("memory_management", InitMemoryManagement(env));
126
+ exports.Set("object", InitObject(env));
127
+ #ifndef NODE_ADDON_API_DISABLE_DEPRECATED
128
+ exports.Set("object_deprecated", InitObjectDeprecated(env));
129
+ #endif // !NODE_ADDON_API_DISABLE_DEPRECATED
130
+ exports.Set("promise", InitPromise(env));
131
+ exports.Set("run_script", InitRunScript(env));
132
+ exports.Set("symbol", InitSymbol(env));
133
+ #if (NAPI_VERSION > 3)
134
+ exports.Set("threadsafe_function_ctx", InitThreadSafeFunctionCtx(env));
135
+ exports.Set("threadsafe_function_existing_tsfn", InitThreadSafeFunctionExistingTsfn(env));
136
+ exports.Set("threadsafe_function_ptr", InitThreadSafeFunctionPtr(env));
137
+ exports.Set("threadsafe_function_sum", InitThreadSafeFunctionSum(env));
138
+ exports.Set("threadsafe_function_unref", InitThreadSafeFunctionUnref(env));
139
+ exports.Set("threadsafe_function", InitThreadSafeFunction(env));
140
+ exports.Set("typed_threadsafe_function_ctx",
141
+ InitTypedThreadSafeFunctionCtx(env));
142
+ exports.Set("typed_threadsafe_function_existing_tsfn",
143
+ InitTypedThreadSafeFunctionExistingTsfn(env));
144
+ exports.Set("typed_threadsafe_function_ptr",
145
+ InitTypedThreadSafeFunctionPtr(env));
146
+ exports.Set("typed_threadsafe_function_sum",
147
+ InitTypedThreadSafeFunctionSum(env));
148
+ exports.Set("typed_threadsafe_function_unref",
149
+ InitTypedThreadSafeFunctionUnref(env));
150
+ exports.Set("typed_threadsafe_function", InitTypedThreadSafeFunction(env));
151
+ #endif
152
+ exports.Set("typedarray", InitTypedArray(env));
153
+ exports.Set("objectwrap", InitObjectWrap(env));
154
+ exports.Set("objectwrapConstructorException",
155
+ InitObjectWrapConstructorException(env));
156
+ exports.Set("objectwrap_function", InitObjectWrapFunction(env));
157
+ exports.Set("objectwrap_removewrap", InitObjectWrapRemoveWrap(env));
158
+ exports.Set("objectwrap_multiple_inheritance", InitObjectWrapMultipleInheritance(env));
159
+ exports.Set("objectreference", InitObjectReference(env));
160
+ exports.Set("reference", InitReference(env));
161
+ exports.Set("version_management", InitVersionManagement(env));
162
+ exports.Set("thunking_manual", InitThunkingManual(env));
163
+ #if (NAPI_VERSION > 7)
164
+ exports.Set("object_freeze_seal", InitObjectFreezeSeal(env));
165
+ #endif
166
+
167
+ #if defined(NODE_ADDON_API_ENABLE_MAYBE)
168
+ exports.Set("maybe_check", InitMaybeCheck(env));
169
+ #endif
170
+ return exports;
171
+ }
172
+
173
+ NODE_API_MODULE(addon, Init)
@@ -0,0 +1,124 @@
1
+ {
2
+ 'target_defaults': {
3
+ 'includes': ['../common.gypi'],
4
+ 'include_dirs': ['./common'],
5
+ 'variables': {
6
+ 'build_sources': [
7
+ 'addon.cc',
8
+ 'addon_data.cc',
9
+ 'array_buffer.cc',
10
+ 'async_context.cc',
11
+ 'async_progress_queue_worker.cc',
12
+ 'async_progress_worker.cc',
13
+ 'async_worker.cc',
14
+ 'async_worker_persistent.cc',
15
+ 'basic_types/array.cc',
16
+ 'basic_types/boolean.cc',
17
+ 'basic_types/number.cc',
18
+ 'basic_types/value.cc',
19
+ 'bigint.cc',
20
+ 'date.cc',
21
+ 'binding.cc',
22
+ 'buffer.cc',
23
+ 'callbackscope.cc',
24
+ 'dataview/dataview.cc',
25
+ 'dataview/dataview_read_write.cc',
26
+ 'env_cleanup.cc',
27
+ 'error.cc',
28
+ 'error_handling_for_primitives.cc',
29
+ 'external.cc',
30
+ 'function.cc',
31
+ 'function_reference.cc',
32
+ 'handlescope.cc',
33
+ 'maybe/check.cc',
34
+ 'movable_callbacks.cc',
35
+ 'memory_management.cc',
36
+ 'name.cc',
37
+ 'globalObject/global_object_delete_property.cc',
38
+ 'globalObject/global_object_has_own_property.cc',
39
+ 'globalObject/global_object_set_property.cc',
40
+ 'globalObject/global_object_get_property.cc',
41
+ 'globalObject/global_object.cc',
42
+ 'object/delete_property.cc',
43
+ 'object/finalizer.cc',
44
+ 'object/get_property.cc',
45
+ 'object/has_own_property.cc',
46
+ 'object/has_property.cc',
47
+ 'object/object.cc',
48
+ 'object/object_freeze_seal.cc',
49
+ 'object/set_property.cc',
50
+ 'object/subscript_operator.cc',
51
+ 'promise.cc',
52
+ 'run_script.cc',
53
+ "symbol.cc",
54
+ 'threadsafe_function/threadsafe_function_ctx.cc',
55
+ 'threadsafe_function/threadsafe_function_existing_tsfn.cc',
56
+ 'threadsafe_function/threadsafe_function_ptr.cc',
57
+ 'threadsafe_function/threadsafe_function_sum.cc',
58
+ 'threadsafe_function/threadsafe_function_unref.cc',
59
+ 'threadsafe_function/threadsafe_function.cc',
60
+ 'typed_threadsafe_function/typed_threadsafe_function_ctx.cc',
61
+ 'typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc',
62
+ 'typed_threadsafe_function/typed_threadsafe_function_ptr.cc',
63
+ 'typed_threadsafe_function/typed_threadsafe_function_sum.cc',
64
+ 'typed_threadsafe_function/typed_threadsafe_function_unref.cc',
65
+ 'typed_threadsafe_function/typed_threadsafe_function.cc',
66
+ 'typedarray.cc',
67
+ 'objectwrap.cc',
68
+ 'objectwrap_constructor_exception.cc',
69
+ 'objectwrap_function.cc',
70
+ 'objectwrap_removewrap.cc',
71
+ 'objectwrap_multiple_inheritance.cc',
72
+ 'object_reference.cc',
73
+ 'reference.cc',
74
+ 'version_management.cc',
75
+ 'thunking_manual.cc',
76
+ ],
77
+ 'build_sources_swallowexcept': [
78
+ 'binding-swallowexcept.cc',
79
+ 'error.cc',
80
+ ],
81
+ 'conditions': [
82
+ ['disable_deprecated!="true"', {
83
+ 'build_sources': ['object/object_deprecated.cc']
84
+ }]
85
+ ]
86
+ },
87
+ },
88
+ 'targets': [
89
+ {
90
+ 'target_name': 'binding',
91
+ 'includes': ['../except.gypi'],
92
+ 'sources': ['>@(build_sources)']
93
+ },
94
+ {
95
+ 'target_name': 'binding_noexcept',
96
+ 'includes': ['../noexcept.gypi'],
97
+ 'sources': ['>@(build_sources)']
98
+ },
99
+ {
100
+ 'target_name': 'binding_noexcept_maybe',
101
+ 'includes': ['../noexcept.gypi'],
102
+ 'sources': ['>@(build_sources)'],
103
+ 'defines': ['NODE_ADDON_API_ENABLE_MAYBE']
104
+ },
105
+ {
106
+ 'target_name': 'binding_swallowexcept',
107
+ 'includes': ['../except.gypi'],
108
+ 'sources': [ '>@(build_sources_swallowexcept)'],
109
+ 'defines': ['NODE_API_SWALLOW_UNTHROWABLE_EXCEPTIONS']
110
+ },
111
+ {
112
+ 'target_name': 'binding_swallowexcept_noexcept',
113
+ 'includes': ['../noexcept.gypi'],
114
+ 'sources': ['>@(build_sources_swallowexcept)'],
115
+ 'defines': ['NODE_API_SWALLOW_UNTHROWABLE_EXCEPTIONS']
116
+ },
117
+ {
118
+ 'target_name': 'binding_custom_namespace',
119
+ 'includes': ['../noexcept.gypi'],
120
+ 'sources': ['>@(build_sources)'],
121
+ 'defines': ['NAPI_CPP_CUSTOM_NAMESPACE=cstm']
122
+ },
123
+ ],
124
+ }
@@ -0,0 +1,183 @@
1
+ #include "napi.h"
2
+
3
+ using namespace Napi;
4
+
5
+ namespace {
6
+
7
+ const size_t testLength = 4;
8
+ uint16_t testData[testLength];
9
+ int finalizeCount = 0;
10
+
11
+ template <typename T>
12
+ void InitData(T* data, size_t length) {
13
+ for (size_t i = 0; i < length; i++) {
14
+ data[i] = static_cast<T>(i);
15
+ }
16
+ }
17
+
18
+ template <typename T>
19
+ bool VerifyData(T* data, size_t length) {
20
+ for (size_t i = 0; i < length; i++) {
21
+ if (data[i] != static_cast<T>(i)) {
22
+ return false;
23
+ }
24
+ }
25
+ return true;
26
+ }
27
+
28
+ Value CreateBuffer(const CallbackInfo& info) {
29
+ Buffer<uint16_t> buffer = Buffer<uint16_t>::New(info.Env(), testLength);
30
+
31
+ if (buffer.Length() != testLength) {
32
+ Error::New(info.Env(), "Incorrect buffer length.").ThrowAsJavaScriptException();
33
+ return Value();
34
+ }
35
+
36
+ InitData(buffer.Data(), testLength);
37
+ return buffer;
38
+ }
39
+
40
+ Value CreateExternalBuffer(const CallbackInfo& info) {
41
+ finalizeCount = 0;
42
+
43
+ Buffer<uint16_t> buffer = Buffer<uint16_t>::New(
44
+ info.Env(),
45
+ testData,
46
+ testLength);
47
+
48
+ if (buffer.Length() != testLength) {
49
+ Error::New(info.Env(), "Incorrect buffer length.").ThrowAsJavaScriptException();
50
+ return Value();
51
+ }
52
+
53
+ if (buffer.Data() != testData) {
54
+ Error::New(info.Env(), "Incorrect buffer data.").ThrowAsJavaScriptException();
55
+ return Value();
56
+ }
57
+
58
+ InitData(testData, testLength);
59
+ return buffer;
60
+ }
61
+
62
+ Value CreateExternalBufferWithFinalize(const CallbackInfo& info) {
63
+ finalizeCount = 0;
64
+
65
+ uint16_t* data = new uint16_t[testLength];
66
+
67
+ Buffer<uint16_t> buffer = Buffer<uint16_t>::New(
68
+ info.Env(),
69
+ data,
70
+ testLength,
71
+ [](Env /*env*/, uint16_t* finalizeData) {
72
+ delete[] finalizeData;
73
+ finalizeCount++;
74
+ });
75
+
76
+ if (buffer.Length() != testLength) {
77
+ Error::New(info.Env(), "Incorrect buffer length.").ThrowAsJavaScriptException();
78
+ return Value();
79
+ }
80
+
81
+ if (buffer.Data() != data) {
82
+ Error::New(info.Env(), "Incorrect buffer data.").ThrowAsJavaScriptException();
83
+ return Value();
84
+ }
85
+
86
+ InitData(data, testLength);
87
+ return buffer;
88
+ }
89
+
90
+ Value CreateExternalBufferWithFinalizeHint(const CallbackInfo& info) {
91
+ finalizeCount = 0;
92
+
93
+ uint16_t* data = new uint16_t[testLength];
94
+
95
+ char* hint = nullptr;
96
+ Buffer<uint16_t> buffer = Buffer<uint16_t>::New(
97
+ info.Env(),
98
+ data,
99
+ testLength,
100
+ [](Env /*env*/, uint16_t* finalizeData, char* /*finalizeHint*/) {
101
+ delete[] finalizeData;
102
+ finalizeCount++;
103
+ },
104
+ hint);
105
+
106
+ if (buffer.Length() != testLength) {
107
+ Error::New(info.Env(), "Incorrect buffer length.").ThrowAsJavaScriptException();
108
+ return Value();
109
+ }
110
+
111
+ if (buffer.Data() != data) {
112
+ Error::New(info.Env(), "Incorrect buffer data.").ThrowAsJavaScriptException();
113
+ return Value();
114
+ }
115
+
116
+ InitData(data, testLength);
117
+ return buffer;
118
+ }
119
+
120
+ Value CreateBufferCopy(const CallbackInfo& info) {
121
+ InitData(testData, testLength);
122
+
123
+ Buffer<uint16_t> buffer = Buffer<uint16_t>::Copy(
124
+ info.Env(), testData, testLength);
125
+
126
+ if (buffer.Length() != testLength) {
127
+ Error::New(info.Env(), "Incorrect buffer length.").ThrowAsJavaScriptException();
128
+ return Value();
129
+ }
130
+
131
+ if (buffer.Data() == testData) {
132
+ Error::New(info.Env(), "Copy should have different memory.").ThrowAsJavaScriptException();
133
+ return Value();
134
+ }
135
+
136
+ if (!VerifyData(buffer.Data(), buffer.Length())) {
137
+ Error::New(info.Env(), "Copy data is incorrect.").ThrowAsJavaScriptException();
138
+ return Value();
139
+ }
140
+
141
+ return buffer;
142
+ }
143
+
144
+ void CheckBuffer(const CallbackInfo& info) {
145
+ if (!info[0].IsBuffer()) {
146
+ Error::New(info.Env(), "A buffer was expected.").ThrowAsJavaScriptException();
147
+ return;
148
+ }
149
+
150
+ Buffer<uint16_t> buffer = info[0].As<Buffer<uint16_t>>();
151
+
152
+ if (buffer.Length() != testLength) {
153
+ Error::New(info.Env(), "Incorrect buffer length.").ThrowAsJavaScriptException();
154
+ return;
155
+ }
156
+
157
+ if (!VerifyData(buffer.Data(), testLength)) {
158
+ Error::New(info.Env(), "Incorrect buffer data.").ThrowAsJavaScriptException();
159
+ return;
160
+ }
161
+ }
162
+
163
+ Value GetFinalizeCount(const CallbackInfo& info) {
164
+ return Number::New(info.Env(), finalizeCount);
165
+ }
166
+
167
+ } // end anonymous namespace
168
+
169
+ Object InitBuffer(Env env) {
170
+ Object exports = Object::New(env);
171
+
172
+ exports["createBuffer"] = Function::New(env, CreateBuffer);
173
+ exports["createExternalBuffer"] = Function::New(env, CreateExternalBuffer);
174
+ exports["createExternalBufferWithFinalize"] =
175
+ Function::New(env, CreateExternalBufferWithFinalize);
176
+ exports["createExternalBufferWithFinalizeHint"] =
177
+ Function::New(env, CreateExternalBufferWithFinalizeHint);
178
+ exports["createBufferCopy"] = Function::New(env, CreateBufferCopy);
179
+ exports["checkBuffer"] = Function::New(env, CheckBuffer);
180
+ exports["getFinalizeCount"] = Function::New(env, GetFinalizeCount);
181
+
182
+ return exports;
183
+ }