koffi 2.3.4 → 2.3.6-beta.1

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 (206) hide show
  1. package/CHANGELOG.md +25 -2
  2. package/doc/changelog.md +4 -0
  3. package/doc/index.rst +1 -2
  4. package/doc/types.md +3 -3
  5. package/package.json +5 -5
  6. package/src/cnoke/cnoke.js +40 -834
  7. package/src/cnoke/package.json +1 -0
  8. package/src/cnoke/src/builder.js +447 -0
  9. package/src/cnoke/src/index.js +20 -0
  10. package/src/cnoke/src/tools.js +401 -0
  11. package/src/core/libcc/libcc.cc +2 -2
  12. package/src/koffi/build/2.3.6-beta.1/koffi_darwin_arm64/koffi.node +0 -0
  13. package/src/koffi/build/2.3.6-beta.1/koffi_darwin_x64/koffi.node +0 -0
  14. package/src/koffi/build/2.3.6-beta.1/koffi_freebsd_arm64/koffi.node +0 -0
  15. package/src/koffi/build/2.3.6-beta.1/koffi_freebsd_ia32/koffi.node +0 -0
  16. package/src/koffi/build/2.3.6-beta.1/koffi_freebsd_x64/koffi.node +0 -0
  17. package/src/koffi/build/2.3.6-beta.1/koffi_linux_arm32hf/koffi.node +0 -0
  18. package/src/koffi/build/2.3.6-beta.1/koffi_linux_arm64/koffi.node +0 -0
  19. package/src/koffi/build/2.3.6-beta.1/koffi_linux_ia32/koffi.node +0 -0
  20. package/src/koffi/build/2.3.6-beta.1/koffi_linux_riscv64hf64/koffi.node +0 -0
  21. package/src/koffi/build/2.3.6-beta.1/koffi_linux_x64/koffi.node +0 -0
  22. package/src/koffi/build/2.3.6-beta.1/koffi_openbsd_ia32/koffi.node +0 -0
  23. package/src/koffi/build/2.3.6-beta.1/koffi_openbsd_x64/koffi.node +0 -0
  24. package/src/koffi/build/2.3.6-beta.1/koffi_win32_arm64/koffi.exp +0 -0
  25. package/src/koffi/build/2.3.6-beta.1/koffi_win32_arm64/koffi.lib +0 -0
  26. package/src/koffi/build/2.3.6-beta.1/koffi_win32_arm64/koffi.node +0 -0
  27. package/src/koffi/build/2.3.6-beta.1/koffi_win32_arm64/koffi.pdb +0 -0
  28. package/src/koffi/build/2.3.6-beta.1/koffi_win32_ia32/koffi.exp +0 -0
  29. package/src/koffi/build/2.3.6-beta.1/koffi_win32_ia32/koffi.lib +0 -0
  30. package/src/koffi/build/2.3.6-beta.1/koffi_win32_ia32/koffi.node +0 -0
  31. package/src/koffi/build/2.3.6-beta.1/koffi_win32_ia32/koffi.pdb +0 -0
  32. package/src/koffi/build/2.3.6-beta.1/koffi_win32_x64/koffi.exp +0 -0
  33. package/src/koffi/build/2.3.6-beta.1/koffi_win32_x64/koffi.lib +0 -0
  34. package/src/koffi/build/2.3.6-beta.1/koffi_win32_x64/koffi.node +0 -0
  35. package/src/koffi/build/2.3.6-beta.1/koffi_win32_x64/koffi.pdb +0 -0
  36. package/src/koffi/src/abi_arm32.cc +43 -14
  37. package/src/koffi/src/abi_arm64.cc +95 -21
  38. package/src/koffi/src/abi_riscv64.cc +125 -64
  39. package/src/koffi/src/abi_x64_sysv.cc +38 -20
  40. package/src/koffi/src/abi_x64_win.cc +11 -5
  41. package/src/koffi/src/abi_x86.cc +14 -7
  42. package/src/koffi/src/call.cc +114 -44
  43. package/src/koffi/src/call.hh +6 -4
  44. package/src/koffi/src/ffi.cc +172 -147
  45. package/src/koffi/src/ffi.hh +18 -10
  46. package/src/koffi/src/index.d.ts +28 -7
  47. package/src/koffi/src/index.js +23 -4
  48. package/src/koffi/src/util.cc +261 -69
  49. package/src/koffi/src/util.hh +34 -8
  50. package/vendor/node-addon-api/CHANGELOG.md +122 -9
  51. package/vendor/node-addon-api/CONTRIBUTING.md +10 -10
  52. package/vendor/node-addon-api/README.md +36 -12
  53. package/vendor/node-addon-api/benchmark/function_args.cc +95 -62
  54. package/vendor/node-addon-api/benchmark/function_args.js +6 -6
  55. package/vendor/node-addon-api/benchmark/index.js +1 -1
  56. package/vendor/node-addon-api/benchmark/property_descriptor.cc +27 -34
  57. package/vendor/node-addon-api/benchmark/property_descriptor.js +5 -4
  58. package/vendor/node-addon-api/doc/async_operations.md +1 -1
  59. package/vendor/node-addon-api/doc/async_worker_variants.md +23 -2
  60. package/vendor/node-addon-api/doc/cmake-js.md +1 -1
  61. package/vendor/node-addon-api/doc/error_handling.md +3 -3
  62. package/vendor/node-addon-api/doc/external.md +7 -0
  63. package/vendor/node-addon-api/doc/handle_scope.md +14 -0
  64. package/vendor/node-addon-api/doc/hierarchy.md +1 -1
  65. package/vendor/node-addon-api/doc/object.md +27 -0
  66. package/vendor/node-addon-api/index.js +3 -3
  67. package/vendor/node-addon-api/napi-inl.deprecated.h +121 -127
  68. package/vendor/node-addon-api/napi-inl.h +1178 -1144
  69. package/vendor/node-addon-api/napi.h +2786 -2675
  70. package/vendor/node-addon-api/package.json +42 -1
  71. package/vendor/node-addon-api/test/addon.cc +8 -6
  72. package/vendor/node-addon-api/test/addon_build/index.js +9 -9
  73. package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +2 -1
  74. package/vendor/node-addon-api/test/addon_build/tpl/index.js +4 -4
  75. package/vendor/node-addon-api/test/addon_data.cc +12 -13
  76. package/vendor/node-addon-api/test/array_buffer.js +3 -2
  77. package/vendor/node-addon-api/test/async_progress_queue_worker.cc +13 -3
  78. package/vendor/node-addon-api/test/async_progress_queue_worker.js +5 -5
  79. package/vendor/node-addon-api/test/async_progress_worker.cc +65 -9
  80. package/vendor/node-addon-api/test/async_progress_worker.js +14 -9
  81. package/vendor/node-addon-api/test/async_worker.cc +236 -3
  82. package/vendor/node-addon-api/test/async_worker.js +122 -37
  83. package/vendor/node-addon-api/test/async_worker_nocallback.js +9 -3
  84. package/vendor/node-addon-api/test/async_worker_persistent.js +2 -2
  85. package/vendor/node-addon-api/test/basic_types/array.js +3 -4
  86. package/vendor/node-addon-api/test/basic_types/boolean.cc +4 -2
  87. package/vendor/node-addon-api/test/basic_types/boolean.js +1 -2
  88. package/vendor/node-addon-api/test/basic_types/number.cc +12 -6
  89. package/vendor/node-addon-api/test/basic_types/number.js +19 -18
  90. package/vendor/node-addon-api/test/basic_types/value.cc +52 -1
  91. package/vendor/node-addon-api/test/basic_types/value.js +44 -21
  92. package/vendor/node-addon-api/test/bigint.cc +2 -1
  93. package/vendor/node-addon-api/test/binding.cc +11 -5
  94. package/vendor/node-addon-api/test/binding.gyp +3 -1
  95. package/vendor/node-addon-api/test/buffer.cc +46 -38
  96. package/vendor/node-addon-api/test/buffer.js +12 -12
  97. package/vendor/node-addon-api/test/callbackInfo.cc +27 -0
  98. package/vendor/node-addon-api/test/callbackInfo.js +9 -0
  99. package/vendor/node-addon-api/test/callbackscope.cc +19 -2
  100. package/vendor/node-addon-api/test/callbackscope.js +20 -20
  101. package/vendor/node-addon-api/test/common/index.js +37 -4
  102. package/vendor/node-addon-api/test/dataview/dataview.js +5 -5
  103. package/vendor/node-addon-api/test/dataview/dataview_read_write.js +14 -12
  104. package/vendor/node-addon-api/test/date.cc +2 -1
  105. package/vendor/node-addon-api/test/date.js +2 -2
  106. package/vendor/node-addon-api/test/env_cleanup.cc +12 -0
  107. package/vendor/node-addon-api/test/env_cleanup.js +38 -39
  108. package/vendor/node-addon-api/test/error.cc +6 -5
  109. package/vendor/node-addon-api/test/error_terminating_environment.js +64 -60
  110. package/vendor/node-addon-api/test/external.cc +36 -32
  111. package/vendor/node-addon-api/test/external.js +43 -46
  112. package/vendor/node-addon-api/test/function.cc +58 -44
  113. package/vendor/node-addon-api/test/function.js +4 -0
  114. package/vendor/node-addon-api/test/function_reference.cc +15 -13
  115. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +50 -53
  116. package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +33 -34
  117. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +38 -40
  118. package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +47 -49
  119. package/vendor/node-addon-api/test/handlescope.cc +29 -3
  120. package/vendor/node-addon-api/test/handlescope.js +5 -3
  121. package/vendor/node-addon-api/test/index.js +1 -5
  122. package/vendor/node-addon-api/test/maybe/check.cc +49 -3
  123. package/vendor/node-addon-api/test/maybe/index.js +19 -7
  124. package/vendor/node-addon-api/test/memory_management.cc +9 -8
  125. package/vendor/node-addon-api/test/memory_management.js +2 -2
  126. package/vendor/node-addon-api/test/movable_callbacks.js +2 -2
  127. package/vendor/node-addon-api/test/name.js +3 -3
  128. package/vendor/node-addon-api/test/napi_child.js +2 -2
  129. package/vendor/node-addon-api/test/object/delete_property.js +7 -7
  130. package/vendor/node-addon-api/test/object/finalizer.cc +13 -12
  131. package/vendor/node-addon-api/test/object/finalizer.js +2 -2
  132. package/vendor/node-addon-api/test/object/get_property.js +6 -6
  133. package/vendor/node-addon-api/test/object/has_own_property.js +3 -3
  134. package/vendor/node-addon-api/test/object/has_property.js +4 -4
  135. package/vendor/node-addon-api/test/object/object.cc +191 -111
  136. package/vendor/node-addon-api/test/object/object.js +53 -52
  137. package/vendor/node-addon-api/test/object/object_deprecated.cc +24 -20
  138. package/vendor/node-addon-api/test/object/object_deprecated.js +3 -8
  139. package/vendor/node-addon-api/test/object/object_freeze_seal.js +54 -54
  140. package/vendor/node-addon-api/test/object/object_type_tag.cc +39 -0
  141. package/vendor/node-addon-api/test/object/object_type_tag.js +55 -0
  142. package/vendor/node-addon-api/test/object/subscript_operator.js +2 -2
  143. package/vendor/node-addon-api/test/object_reference.js +100 -100
  144. package/vendor/node-addon-api/test/objectwrap.cc +41 -34
  145. package/vendor/node-addon-api/test/objectwrap.js +23 -19
  146. package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +5 -5
  147. package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +1 -1
  148. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +7 -7
  149. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +1 -1
  150. package/vendor/node-addon-api/test/objectwrap_removewrap.js +24 -32
  151. package/vendor/node-addon-api/test/objectwrap_worker_thread.js +5 -4
  152. package/vendor/node-addon-api/test/promise.cc +7 -0
  153. package/vendor/node-addon-api/test/promise.js +3 -1
  154. package/vendor/node-addon-api/test/reference.cc +1 -1
  155. package/vendor/node-addon-api/test/reference.js +2 -2
  156. package/vendor/node-addon-api/test/run_script.cc +1 -1
  157. package/vendor/node-addon-api/test/symbol.js +59 -66
  158. package/vendor/node-addon-api/test/testUtil.js +6 -6
  159. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +64 -29
  160. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +71 -34
  161. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +111 -19
  162. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +2 -1
  163. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +36 -26
  164. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +5 -5
  165. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +3 -2
  166. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +1 -1
  167. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +47 -32
  168. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +3 -3
  169. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +22 -9
  170. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +76 -31
  171. package/vendor/node-addon-api/test/thunking_manual.cc +61 -74
  172. package/vendor/node-addon-api/test/thunking_manual.js +6 -7
  173. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +20 -20
  174. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +19 -19
  175. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +57 -5
  176. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +2 -0
  177. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +5 -5
  178. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +5 -1
  179. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +4 -3
  180. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +3 -3
  181. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +14 -0
  182. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +76 -31
  183. package/vendor/node-addon-api/test/typedarray-bigint.js +2 -2
  184. package/vendor/node-addon-api/test/typedarray.cc +263 -70
  185. package/vendor/node-addon-api/test/typedarray.js +44 -10
  186. package/vendor/node-addon-api/test/version_management.cc +16 -15
  187. package/vendor/node-addon-api/test/version_management.js +18 -20
  188. package/vendor/node-addon-api/tools/check-napi.js +13 -14
  189. package/vendor/node-addon-api/tools/conversion.js +161 -169
  190. package/vendor/node-addon-api/tools/eslint-format.js +9 -1
  191. package/vendor/node-addon-api/unit-test/README.md +4 -4
  192. package/src/koffi/build/2.3.4/koffi_darwin_arm64.tar.gz +0 -0
  193. package/src/koffi/build/2.3.4/koffi_darwin_x64.tar.gz +0 -0
  194. package/src/koffi/build/2.3.4/koffi_freebsd_arm64.tar.gz +0 -0
  195. package/src/koffi/build/2.3.4/koffi_freebsd_ia32.tar.gz +0 -0
  196. package/src/koffi/build/2.3.4/koffi_freebsd_x64.tar.gz +0 -0
  197. package/src/koffi/build/2.3.4/koffi_linux_arm32hf.tar.gz +0 -0
  198. package/src/koffi/build/2.3.4/koffi_linux_arm64.tar.gz +0 -0
  199. package/src/koffi/build/2.3.4/koffi_linux_ia32.tar.gz +0 -0
  200. package/src/koffi/build/2.3.4/koffi_linux_riscv64hf64.tar.gz +0 -0
  201. package/src/koffi/build/2.3.4/koffi_linux_x64.tar.gz +0 -0
  202. package/src/koffi/build/2.3.4/koffi_openbsd_ia32.tar.gz +0 -0
  203. package/src/koffi/build/2.3.4/koffi_openbsd_x64.tar.gz +0 -0
  204. package/src/koffi/build/2.3.4/koffi_win32_arm64.tar.gz +0 -0
  205. package/src/koffi/build/2.3.4/koffi_win32_ia32.tar.gz +0 -0
  206. package/src/koffi/build/2.3.4/koffi_win32_x64.tar.gz +0 -0
@@ -15,6 +15,10 @@
15
15
  "name": "Alexander Floh",
16
16
  "url": "https://github.com/alexanderfloh"
17
17
  },
18
+ {
19
+ "name": "Ammar Faizi",
20
+ "url": "https://github.com/ammarfaizi2"
21
+ },
18
22
  {
19
23
  "name": "András Timár, Dr",
20
24
  "url": "https://github.com/timarandras"
@@ -71,6 +75,10 @@
71
75
  "name": "Daniel Bevenius",
72
76
  "url": "https://github.com/danbev"
73
77
  },
78
+ {
79
+ "name": "Dante Calderón",
80
+ "url": "https://github.com/dantehemerson"
81
+ },
74
82
  {
75
83
  "name": "Darshan Sen",
76
84
  "url": "https://github.com/RaisinTen"
@@ -103,6 +111,10 @@
103
111
  "name": "extremeheat",
104
112
  "url": "https://github.com/extremeheat"
105
113
  },
114
+ {
115
+ "name": "Feng Yu",
116
+ "url": "https://github.com/F3n67u"
117
+ },
106
118
  {
107
119
  "name": "Ferdinand Holzer",
108
120
  "url": "https://github.com/fholzer"
@@ -147,6 +159,10 @@
147
159
  "name": "Jason Ginchereau",
148
160
  "url": "https://github.com/jasongin"
149
161
  },
162
+ {
163
+ "name": "Jenny",
164
+ "url": "https://github.com/egg-bread"
165
+ },
150
166
  {
151
167
  "name": "Jeroen Janssen",
152
168
  "url": "https://github.com/japj"
@@ -167,6 +183,10 @@
167
183
  "name": "joshgarde",
168
184
  "url": "https://github.com/joshgarde"
169
185
  },
186
+ {
187
+ "name": "Julian Mesa",
188
+ "url": "https://github.com/julianmesa-gitkraken"
189
+ },
170
190
  {
171
191
  "name": "Kasumi Hanazuki",
172
192
  "url": "https://github.com/hanazuki"
@@ -199,6 +219,10 @@
199
219
  "name": "Kyle Farnung",
200
220
  "url": "https://github.com/kfarnung"
201
221
  },
222
+ {
223
+ "name": "Kyle Kovacs",
224
+ "url": "https://github.com/nullromo"
225
+ },
202
226
  {
203
227
  "name": "legendecas",
204
228
  "url": "https://github.com/legendecas"
@@ -267,6 +291,10 @@
267
291
  "name": "pacop",
268
292
  "url": "https://github.com/pacop"
269
293
  },
294
+ {
295
+ "name": "Peter Šándor",
296
+ "url": "https://github.com/petersandor"
297
+ },
270
298
  {
271
299
  "name": "Philipp Renoth",
272
300
  "url": "https://github.com/DaAitch"
@@ -275,6 +303,10 @@
275
303
  "name": "rgerd",
276
304
  "url": "https://github.com/rgerd"
277
305
  },
306
+ {
307
+ "name": "Richard Lau",
308
+ "url": "https://github.com/richardlau"
309
+ },
278
310
  {
279
311
  "name": "Rolf Timmermans",
280
312
  "url": "https://github.com/rolftimmermans"
@@ -287,6 +319,10 @@
287
319
  "name": "Ryuichi Okumura",
288
320
  "url": "https://github.com/okuryu"
289
321
  },
322
+ {
323
+ "name": "Saint Gabriel",
324
+ "url": "https://github.com/chineduG"
325
+ },
290
326
  {
291
327
  "name": "Sampson Gao",
292
328
  "url": "https://github.com/sampsongao"
@@ -351,6 +387,10 @@
351
387
  {
352
388
  "name": "Ziqiu Zhao",
353
389
  "url": "https://github.com/ZzqiZQute"
390
+ },
391
+ {
392
+ "name": "Feng Yu",
393
+ "url": "https://github.com/F3n67u"
354
394
  }
355
395
  ],
356
396
  "description": "Node.js API (Node-API)",
@@ -401,6 +441,7 @@
401
441
  "benchmark": "node benchmark",
402
442
  "pretest": "node-gyp rebuild -C test",
403
443
  "test": "node test",
444
+ "test:debug": "node-gyp rebuild -C test --debug && NODE_API_BUILD_CONFIG=Debug node ./test/index.js",
404
445
  "predev": "node-gyp rebuild -C test --debug",
405
446
  "dev": "node test",
406
447
  "predev:incremental": "node-gyp configure build -C test --debug",
@@ -410,6 +451,6 @@
410
451
  "lint:fix": "node tools/clang-format --fix && node tools/eslint-format --fix"
411
452
  },
412
453
  "pre-commit": "lint",
413
- "version": "5.0.0",
454
+ "version": "6.0.0",
414
455
  "support": true
415
456
  }
@@ -7,12 +7,14 @@ namespace {
7
7
  class TestAddon : public Napi::Addon<TestAddon> {
8
8
  public:
9
9
  inline TestAddon(Napi::Env env, Napi::Object exports) {
10
- DefineAddon(exports, {
11
- InstanceMethod("increment", &TestAddon::Increment),
12
- InstanceValue("subObject", DefineProperties(Napi::Object::New(env), {
13
- InstanceMethod("decrement", &TestAddon::Decrement)
14
- }))
15
- });
10
+ DefineAddon(
11
+ exports,
12
+ {InstanceMethod("increment", &TestAddon::Increment),
13
+ InstanceValue(
14
+ "subObject",
15
+ DefineProperties(
16
+ Napi::Object::New(env),
17
+ {InstanceMethod("decrement", &TestAddon::Decrement)}))});
16
18
  }
17
19
 
18
20
  private:
@@ -4,28 +4,28 @@ const { promisify } = require('util');
4
4
  const exec = promisify(require('child_process').exec);
5
5
  const { copy, remove } = require('fs-extra');
6
6
  const path = require('path');
7
- const assert = require('assert')
7
+ const assert = require('assert');
8
8
 
9
9
  const ADDONS_FOLDER = path.join(__dirname, 'addons');
10
10
 
11
11
  const addons = [
12
12
  'echo addon',
13
13
  'echo-addon'
14
- ]
14
+ ];
15
15
 
16
- async function beforeAll(addons) {
17
- console.log(' >Preparing native addons to build')
16
+ async function beforeAll (addons) {
17
+ console.log(' >Preparing native addons to build');
18
18
  for (const addon of addons) {
19
19
  await remove(path.join(ADDONS_FOLDER, addon));
20
20
  await copy(path.join(__dirname, 'tpl'), path.join(ADDONS_FOLDER, addon));
21
21
  }
22
22
  }
23
23
 
24
- async function test(addon) {
24
+ async function test (addon) {
25
25
  console.log(` >Building addon: '${addon}'`);
26
- const { stderr, stdout } = await exec('npm install', {
26
+ await exec('npm install', {
27
27
  cwd: path.join(ADDONS_FOLDER, addon)
28
- })
28
+ });
29
29
  console.log(` >Running test for: '${addon}'`);
30
30
  // Disabled the checks on stderr and stdout because of this issue on npm:
31
31
  // Stop using process.umask(): https://github.com/npm/cli/issues/1103
@@ -41,9 +41,9 @@ async function test(addon) {
41
41
  assert.strictEqual(binding.noexcept.echo(103), 103);
42
42
  }
43
43
 
44
- module.exports = (async function() {
44
+ module.exports = (async function () {
45
45
  await beforeAll(addons);
46
46
  for (const addon of addons) {
47
47
  await test(addon);
48
48
  }
49
- })()
49
+ })();
@@ -3,7 +3,8 @@
3
3
  Napi::Value Echo(const Napi::CallbackInfo& info) {
4
4
  Napi::Env env = info.Env();
5
5
  if (info.Length() != 1) {
6
- Napi::TypeError::New(env, "Wrong number of arguments. One argument expected.")
6
+ Napi::TypeError::New(env,
7
+ "Wrong number of arguments. One argument expected.")
7
8
  .ThrowAsJavaScriptException();
8
9
  }
9
10
  return info[0].As<Napi::Value>();
@@ -1,9 +1,9 @@
1
- 'use strict'
1
+ 'use strict';
2
2
 
3
- const except = require('bindings')('addon')
4
- const noexcept = require('bindings')('addon_noexcept')
3
+ const except = require('bindings')('addon');
4
+ const noexcept = require('bindings')('addon_noexcept');
5
5
 
6
6
  module.exports = {
7
7
  except,
8
8
  noexcept
9
- }
9
+ };
@@ -17,11 +17,10 @@ class Addon {
17
17
  public:
18
18
  class VerboseIndicator : public Napi::ObjectWrap<VerboseIndicator> {
19
19
  public:
20
- VerboseIndicator(const Napi::CallbackInfo& info):
21
- Napi::ObjectWrap<VerboseIndicator>(info) {
22
- info.This().As<Napi::Object>()["verbose"] =
23
- Napi::Boolean::New(info.Env(),
24
- info.Env().GetInstanceData<Addon>()->verbose);
20
+ VerboseIndicator(const Napi::CallbackInfo& info)
21
+ : Napi::ObjectWrap<VerboseIndicator>(info) {
22
+ info.This().As<Napi::Object>()["verbose"] = Napi::Boolean::New(
23
+ info.Env(), info.Env().GetInstanceData<Addon>()->verbose);
25
24
  }
26
25
 
27
26
  Napi::Value Getter(const Napi::CallbackInfo& info) {
@@ -34,11 +33,11 @@ class Addon {
34
33
  }
35
34
 
36
35
  static Napi::FunctionReference Init(Napi::Env env) {
37
- return Napi::Persistent(DefineClass(env, "VerboseIndicator", {
38
- InstanceAccessor<
39
- &VerboseIndicator::Getter,
40
- &VerboseIndicator::Setter>("verbose")
41
- }));
36
+ return Napi::Persistent(DefineClass(
37
+ env,
38
+ "VerboseIndicator",
39
+ {InstanceAccessor<&VerboseIndicator::Getter,
40
+ &VerboseIndicator::Setter>("verbose")}));
42
41
  }
43
42
  };
44
43
 
@@ -51,7 +50,7 @@ class Addon {
51
50
  info.Env().GetInstanceData<Addon>()->verbose = info[0].As<Napi::Boolean>();
52
51
  }
53
52
 
54
- Addon(Napi::Env env): VerboseIndicator(VerboseIndicator::Init(env)) {}
53
+ Addon(Napi::Env env) : VerboseIndicator(VerboseIndicator::Init(env)) {}
55
54
  ~Addon() {
56
55
  if (verbose) {
57
56
  fprintf(stderr, "addon_data: Addon::~Addon\n");
@@ -60,7 +59,7 @@ class Addon {
60
59
 
61
60
  static void DeleteAddon(Napi::Env, Addon* addon, uint32_t* hint) {
62
61
  delete addon;
63
- fprintf(stderr, "hint: %d\n", *hint);
62
+ fprintf(stderr, "hint: %u\n", *hint);
64
63
  delete hint;
65
64
  }
66
65
 
@@ -76,7 +75,7 @@ class Addon {
76
75
  new uint32_t(hint));
77
76
  Napi::Object result = Napi::Object::New(env);
78
77
  result.DefineProperties({
79
- Napi::PropertyDescriptor::Accessor<Getter, Setter>("verbose"),
78
+ Napi::PropertyDescriptor::Accessor<Getter, Setter>("verbose"),
80
79
  });
81
80
 
82
81
  return result;
@@ -5,7 +5,7 @@ const testUtil = require('./testUtil');
5
5
 
6
6
  module.exports = require('./common').runTest(test);
7
7
 
8
- function test(binding) {
8
+ function test (binding) {
9
9
  return testUtil.runGCTests([
10
10
  'Internal ArrayBuffer',
11
11
  () => {
@@ -58,12 +58,13 @@ function test(binding) {
58
58
  'ArrayBuffer updates data pointer and length when detached',
59
59
  () => {
60
60
  // Detach the ArrayBuffer in JavaScript.
61
+ // eslint-disable-next-line no-undef
61
62
  const mem = new WebAssembly.Memory({ initial: 1 });
62
63
  binding.arraybuffer.checkDetachUpdatesData(mem.buffer, () => mem.grow(1));
63
64
 
64
65
  // Let C++ detach the ArrayBuffer.
65
66
  const extBuffer = binding.arraybuffer.createExternalBuffer();
66
67
  binding.arraybuffer.checkDetachUpdatesData(extBuffer);
67
- },
68
+ }
68
69
  ]);
69
70
  }
@@ -41,6 +41,8 @@ class TestWorker : public AsyncProgressQueueWorker<ProgressData> {
41
41
 
42
42
  if (_times < 0) {
43
43
  SetError("test error");
44
+ } else {
45
+ progress.Signal();
44
46
  }
45
47
  ProgressData data{0};
46
48
  for (int32_t idx = 0; idx < _times; idx++) {
@@ -49,11 +51,18 @@ class TestWorker : public AsyncProgressQueueWorker<ProgressData> {
49
51
  }
50
52
  }
51
53
 
52
- void OnProgress(const ProgressData* data, size_t /* count */) override {
54
+ void OnProgress(const ProgressData* data, size_t count) override {
53
55
  Napi::Env env = Env();
56
+ _test_case_count++;
54
57
  if (!_js_progress_cb.IsEmpty()) {
55
- Number progress = Number::New(env, data->progress);
56
- _js_progress_cb.Call(Receiver().Value(), {progress});
58
+ if (_test_case_count == 1) {
59
+ if (count != 0) {
60
+ SetError("expect 0 count of data on 1st call");
61
+ }
62
+ } else {
63
+ Number progress = Number::New(env, data->progress);
64
+ _js_progress_cb.Call(Receiver().Value(), {progress});
65
+ }
57
66
  }
58
67
  }
59
68
 
@@ -68,6 +77,7 @@ class TestWorker : public AsyncProgressQueueWorker<ProgressData> {
68
77
  }
69
78
 
70
79
  int32_t _times;
80
+ size_t _test_case_count = 0;
71
81
  FunctionReference _js_progress_cb;
72
82
  };
73
83
 
@@ -1,16 +1,16 @@
1
1
  'use strict';
2
2
 
3
- const common = require('./common')
3
+ const common = require('./common');
4
4
  const assert = require('assert');
5
5
 
6
6
  module.exports = common.runTest(test);
7
7
 
8
- async function test({ asyncprogressqueueworker }) {
8
+ async function test ({ asyncprogressqueueworker }) {
9
9
  await success(asyncprogressqueueworker);
10
10
  await fail(asyncprogressqueueworker);
11
11
  }
12
12
 
13
- function success(binding) {
13
+ function success (binding) {
14
14
  return new Promise((resolve, reject) => {
15
15
  const expected = [0, 1, 2, 3];
16
16
  const actual = [];
@@ -32,11 +32,11 @@ function success(binding) {
32
32
  });
33
33
  }
34
34
 
35
- function fail(binding) {
35
+ function fail (binding) {
36
36
  return new Promise((resolve, reject) => {
37
37
  const worker = binding.createWork(-1,
38
38
  common.mustCall((err) => {
39
- assert.throws(() => { throw err }, /test error/);
39
+ assert.throws(() => { throw err; }, /test error/);
40
40
  resolve();
41
41
  }),
42
42
  common.mustNotCall()
@@ -78,10 +78,17 @@ class MalignWorker : public AsyncProgressWorker<ProgressData> {
78
78
 
79
79
  protected:
80
80
  void Execute(const ExecutionProgress& progress) override {
81
- std::unique_lock<std::mutex> lock(_cvm);
82
- // Testing a nullptr send is acceptable.
83
- progress.Send(nullptr, 0);
84
- _cv.wait(lock);
81
+ {
82
+ std::unique_lock<std::mutex> lock(_cvm);
83
+ // Testing a nullptr send is acceptable.
84
+ progress.Send(nullptr, 0);
85
+ _cv.wait(lock, [this] { return _test_case_count == 1; });
86
+ }
87
+ {
88
+ std::unique_lock<std::mutex> lock(_cvm);
89
+ progress.Signal();
90
+ _cv.wait(lock, [this] { return _test_case_count == 2; });
91
+ }
85
92
  // Testing busy looping on send doesn't trigger unexpected empty data
86
93
  // OnProgress call.
87
94
  for (size_t i = 0; i < 1000000; i++) {
@@ -92,16 +99,21 @@ class MalignWorker : public AsyncProgressWorker<ProgressData> {
92
99
 
93
100
  void OnProgress(const ProgressData* /* data */, size_t count) override {
94
101
  Napi::Env env = Env();
95
- _test_case_count++;
102
+ {
103
+ std::lock_guard<std::mutex> lock(_cvm);
104
+ _test_case_count++;
105
+ }
96
106
  bool error = false;
97
107
  Napi::String reason = Napi::String::New(env, "No error");
98
- if (_test_case_count == 1 && count != 0) {
108
+ if (_test_case_count <= 2 && count != 0) {
99
109
  error = true;
100
- reason = Napi::String::New(env, "expect 0 count of data on 1st call");
110
+ reason =
111
+ Napi::String::New(env, "expect 0 count of data on 1st and 2nd call");
101
112
  }
102
- if (_test_case_count > 1 && count != 1) {
113
+ if (_test_case_count > 2 && count != 1) {
103
114
  error = true;
104
- reason = Napi::String::New(env, "expect 1 count of data on non-1st call");
115
+ reason = Napi::String::New(
116
+ env, "expect 1 count of data on non-1st and non-2nd call");
105
117
  }
106
118
  _progress.MakeCallback(Receiver().Value(),
107
119
  {Napi::Boolean::New(env, error), reason});
@@ -122,12 +134,56 @@ class MalignWorker : public AsyncProgressWorker<ProgressData> {
122
134
  std::mutex _cvm;
123
135
  FunctionReference _progress;
124
136
  };
137
+
138
+ // Calling a Signal after a SendProgress should not clear progress data
139
+ class SignalAfterProgressTestWorker : public AsyncProgressWorker<ProgressData> {
140
+ public:
141
+ static void DoWork(const CallbackInfo& info) {
142
+ Function cb = info[0].As<Function>();
143
+ Function progress = info[1].As<Function>();
144
+
145
+ SignalAfterProgressTestWorker* worker = new SignalAfterProgressTestWorker(
146
+ cb, progress, "TestResource", Object::New(info.Env()));
147
+ worker->Queue();
148
+ }
149
+
150
+ protected:
151
+ void Execute(const ExecutionProgress& progress) override {
152
+ ProgressData data{0};
153
+ progress.Send(&data, 1);
154
+ progress.Signal();
155
+ }
156
+
157
+ void OnProgress(const ProgressData* /* data */, size_t count) override {
158
+ Napi::Env env = Env();
159
+ bool error = false;
160
+ Napi::String reason = Napi::String::New(env, "No error");
161
+ if (count != 1) {
162
+ error = true;
163
+ reason = Napi::String::New(env, "expect 1 count of data");
164
+ }
165
+ _progress.MakeCallback(Receiver().Value(),
166
+ {Napi::Boolean::New(env, error), reason});
167
+ }
168
+
169
+ private:
170
+ SignalAfterProgressTestWorker(Function cb,
171
+ Function progress,
172
+ const char* resource_name,
173
+ const Object& resource)
174
+ : AsyncProgressWorker(cb, resource_name, resource) {
175
+ _progress.Reset(progress, 1);
176
+ }
177
+ FunctionReference _progress;
178
+ };
125
179
  } // namespace
126
180
 
127
181
  Object InitAsyncProgressWorker(Env env) {
128
182
  Object exports = Object::New(env);
129
183
  exports["doWork"] = Function::New(env, TestWorker::DoWork);
130
184
  exports["doMalignTest"] = Function::New(env, MalignWorker::DoWork);
185
+ exports["doSignalAfterProgressTest"] =
186
+ Function::New(env, SignalAfterProgressTestWorker::DoWork);
131
187
  return exports;
132
188
  }
133
189
 
@@ -1,17 +1,18 @@
1
1
  'use strict';
2
2
 
3
- const common = require('./common')
3
+ const common = require('./common');
4
4
  const assert = require('assert');
5
5
 
6
6
  module.exports = common.runTest(test);
7
7
 
8
- async function test({ asyncprogressworker }) {
8
+ async function test ({ asyncprogressworker }) {
9
9
  await success(asyncprogressworker);
10
10
  await fail(asyncprogressworker);
11
- await malignTest(asyncprogressworker);
11
+ await signalTest(asyncprogressworker.doMalignTest);
12
+ await signalTest(asyncprogressworker.doSignalAfterProgressTest);
12
13
  }
13
14
 
14
- function success(binding) {
15
+ function success (binding) {
15
16
  return new Promise((resolve, reject) => {
16
17
  const expected = [0, 1, 2, 3];
17
18
  const actual = [];
@@ -32,11 +33,11 @@ function success(binding) {
32
33
  });
33
34
  }
34
35
 
35
- function fail(binding) {
36
+ function fail (binding) {
36
37
  return new Promise((resolve) => {
37
38
  binding.doWork(-1,
38
39
  common.mustCall((err) => {
39
- assert.throws(() => { throw err }, /test error/)
40
+ assert.throws(() => { throw err; }, /test error/);
40
41
  resolve();
41
42
  }),
42
43
  common.mustNotCall()
@@ -44,9 +45,9 @@ function fail(binding) {
44
45
  });
45
46
  }
46
47
 
47
- function malignTest(binding) {
48
+ function signalTest (bindingFunction) {
48
49
  return new Promise((resolve, reject) => {
49
- binding.doMalignTest(
50
+ bindingFunction(
50
51
  common.mustCall((err) => {
51
52
  if (err) {
52
53
  return reject(err);
@@ -54,7 +55,11 @@ function malignTest(binding) {
54
55
  resolve();
55
56
  }),
56
57
  common.mustCallAtLeast((error, reason) => {
57
- assert(!error, reason);
58
+ try {
59
+ assert(!error, reason);
60
+ } catch (e) {
61
+ reject(e);
62
+ }
58
63
  }, 1)
59
64
  );
60
65
  });