koffi 2.3.3 → 2.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/CHANGELOG.md +19 -3
  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 +2 -2
  6. package/src/core/libcc/libcc.cc +2 -2
  7. package/src/koffi/build/2.3.5/koffi_darwin_arm64.tar.gz +0 -0
  8. package/src/koffi/build/2.3.5/koffi_darwin_x64.tar.gz +0 -0
  9. package/src/koffi/build/2.3.5/koffi_freebsd_arm64.tar.gz +0 -0
  10. package/src/koffi/build/2.3.5/koffi_freebsd_ia32.tar.gz +0 -0
  11. package/src/koffi/build/2.3.5/koffi_freebsd_x64.tar.gz +0 -0
  12. package/src/koffi/build/2.3.5/koffi_linux_arm32hf.tar.gz +0 -0
  13. package/src/koffi/build/2.3.5/koffi_linux_arm64.tar.gz +0 -0
  14. package/src/koffi/build/2.3.5/koffi_linux_ia32.tar.gz +0 -0
  15. package/src/koffi/build/2.3.5/koffi_linux_riscv64hf64.tar.gz +0 -0
  16. package/src/koffi/build/2.3.5/koffi_linux_x64.tar.gz +0 -0
  17. package/src/koffi/build/2.3.5/koffi_openbsd_ia32.tar.gz +0 -0
  18. package/src/koffi/build/2.3.5/koffi_openbsd_x64.tar.gz +0 -0
  19. package/src/koffi/build/2.3.5/koffi_win32_arm64.tar.gz +0 -0
  20. package/src/koffi/build/2.3.5/koffi_win32_ia32.tar.gz +0 -0
  21. package/src/koffi/build/2.3.5/koffi_win32_x64.tar.gz +0 -0
  22. package/src/koffi/src/abi_arm32.cc +43 -14
  23. package/src/koffi/src/abi_arm64.cc +95 -21
  24. package/src/koffi/src/abi_riscv64.cc +125 -64
  25. package/src/koffi/src/abi_x64_sysv.cc +38 -20
  26. package/src/koffi/src/abi_x64_win.cc +11 -5
  27. package/src/koffi/src/abi_x86.cc +14 -7
  28. package/src/koffi/src/call.cc +114 -44
  29. package/src/koffi/src/call.hh +6 -4
  30. package/src/koffi/src/ffi.cc +172 -147
  31. package/src/koffi/src/ffi.hh +18 -10
  32. package/src/koffi/src/index.d.ts +28 -7
  33. package/src/koffi/src/util.cc +261 -69
  34. package/src/koffi/src/util.hh +34 -8
  35. package/vendor/node-addon-api/CHANGELOG.md +122 -9
  36. package/vendor/node-addon-api/CONTRIBUTING.md +10 -10
  37. package/vendor/node-addon-api/README.md +36 -12
  38. package/vendor/node-addon-api/benchmark/function_args.cc +95 -62
  39. package/vendor/node-addon-api/benchmark/function_args.js +6 -6
  40. package/vendor/node-addon-api/benchmark/index.js +1 -1
  41. package/vendor/node-addon-api/benchmark/property_descriptor.cc +27 -34
  42. package/vendor/node-addon-api/benchmark/property_descriptor.js +5 -4
  43. package/vendor/node-addon-api/doc/async_operations.md +1 -1
  44. package/vendor/node-addon-api/doc/async_worker_variants.md +23 -2
  45. package/vendor/node-addon-api/doc/cmake-js.md +1 -1
  46. package/vendor/node-addon-api/doc/error_handling.md +3 -3
  47. package/vendor/node-addon-api/doc/external.md +7 -0
  48. package/vendor/node-addon-api/doc/handle_scope.md +14 -0
  49. package/vendor/node-addon-api/doc/hierarchy.md +1 -1
  50. package/vendor/node-addon-api/doc/object.md +27 -0
  51. package/vendor/node-addon-api/index.js +3 -3
  52. package/vendor/node-addon-api/napi-inl.deprecated.h +121 -127
  53. package/vendor/node-addon-api/napi-inl.h +1178 -1144
  54. package/vendor/node-addon-api/napi.h +2786 -2675
  55. package/vendor/node-addon-api/package.json +42 -1
  56. package/vendor/node-addon-api/test/addon.cc +8 -6
  57. package/vendor/node-addon-api/test/addon_build/index.js +9 -9
  58. package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +2 -1
  59. package/vendor/node-addon-api/test/addon_build/tpl/index.js +4 -4
  60. package/vendor/node-addon-api/test/addon_data.cc +12 -13
  61. package/vendor/node-addon-api/test/array_buffer.js +3 -2
  62. package/vendor/node-addon-api/test/async_progress_queue_worker.cc +13 -3
  63. package/vendor/node-addon-api/test/async_progress_queue_worker.js +5 -5
  64. package/vendor/node-addon-api/test/async_progress_worker.cc +65 -9
  65. package/vendor/node-addon-api/test/async_progress_worker.js +14 -9
  66. package/vendor/node-addon-api/test/async_worker.cc +236 -3
  67. package/vendor/node-addon-api/test/async_worker.js +122 -37
  68. package/vendor/node-addon-api/test/async_worker_nocallback.js +9 -3
  69. package/vendor/node-addon-api/test/async_worker_persistent.js +2 -2
  70. package/vendor/node-addon-api/test/basic_types/array.js +3 -4
  71. package/vendor/node-addon-api/test/basic_types/boolean.cc +4 -2
  72. package/vendor/node-addon-api/test/basic_types/boolean.js +1 -2
  73. package/vendor/node-addon-api/test/basic_types/number.cc +12 -6
  74. package/vendor/node-addon-api/test/basic_types/number.js +19 -18
  75. package/vendor/node-addon-api/test/basic_types/value.cc +52 -1
  76. package/vendor/node-addon-api/test/basic_types/value.js +44 -21
  77. package/vendor/node-addon-api/test/bigint.cc +2 -1
  78. package/vendor/node-addon-api/test/binding.cc +11 -5
  79. package/vendor/node-addon-api/test/binding.gyp +3 -1
  80. package/vendor/node-addon-api/test/buffer.cc +46 -38
  81. package/vendor/node-addon-api/test/buffer.js +12 -12
  82. package/vendor/node-addon-api/test/callbackInfo.cc +27 -0
  83. package/vendor/node-addon-api/test/callbackInfo.js +9 -0
  84. package/vendor/node-addon-api/test/callbackscope.cc +19 -2
  85. package/vendor/node-addon-api/test/callbackscope.js +20 -20
  86. package/vendor/node-addon-api/test/common/index.js +37 -4
  87. package/vendor/node-addon-api/test/dataview/dataview.js +5 -5
  88. package/vendor/node-addon-api/test/dataview/dataview_read_write.js +14 -12
  89. package/vendor/node-addon-api/test/date.cc +2 -1
  90. package/vendor/node-addon-api/test/date.js +2 -2
  91. package/vendor/node-addon-api/test/env_cleanup.cc +12 -0
  92. package/vendor/node-addon-api/test/env_cleanup.js +38 -39
  93. package/vendor/node-addon-api/test/error.cc +6 -5
  94. package/vendor/node-addon-api/test/error_terminating_environment.js +64 -60
  95. package/vendor/node-addon-api/test/external.cc +36 -32
  96. package/vendor/node-addon-api/test/external.js +43 -46
  97. package/vendor/node-addon-api/test/function.cc +58 -44
  98. package/vendor/node-addon-api/test/function.js +4 -0
  99. package/vendor/node-addon-api/test/function_reference.cc +15 -13
  100. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +50 -53
  101. package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +33 -34
  102. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +38 -40
  103. package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +47 -49
  104. package/vendor/node-addon-api/test/handlescope.cc +29 -3
  105. package/vendor/node-addon-api/test/handlescope.js +5 -3
  106. package/vendor/node-addon-api/test/index.js +1 -5
  107. package/vendor/node-addon-api/test/maybe/check.cc +49 -3
  108. package/vendor/node-addon-api/test/maybe/index.js +19 -7
  109. package/vendor/node-addon-api/test/memory_management.cc +9 -8
  110. package/vendor/node-addon-api/test/memory_management.js +2 -2
  111. package/vendor/node-addon-api/test/movable_callbacks.js +2 -2
  112. package/vendor/node-addon-api/test/name.js +3 -3
  113. package/vendor/node-addon-api/test/napi_child.js +2 -2
  114. package/vendor/node-addon-api/test/object/delete_property.js +7 -7
  115. package/vendor/node-addon-api/test/object/finalizer.cc +13 -12
  116. package/vendor/node-addon-api/test/object/finalizer.js +2 -2
  117. package/vendor/node-addon-api/test/object/get_property.js +6 -6
  118. package/vendor/node-addon-api/test/object/has_own_property.js +3 -3
  119. package/vendor/node-addon-api/test/object/has_property.js +4 -4
  120. package/vendor/node-addon-api/test/object/object.cc +191 -111
  121. package/vendor/node-addon-api/test/object/object.js +53 -52
  122. package/vendor/node-addon-api/test/object/object_deprecated.cc +24 -20
  123. package/vendor/node-addon-api/test/object/object_deprecated.js +3 -8
  124. package/vendor/node-addon-api/test/object/object_freeze_seal.js +54 -54
  125. package/vendor/node-addon-api/test/object/object_type_tag.cc +39 -0
  126. package/vendor/node-addon-api/test/object/object_type_tag.js +55 -0
  127. package/vendor/node-addon-api/test/object/subscript_operator.js +2 -2
  128. package/vendor/node-addon-api/test/object_reference.js +100 -100
  129. package/vendor/node-addon-api/test/objectwrap.cc +41 -34
  130. package/vendor/node-addon-api/test/objectwrap.js +23 -19
  131. package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +5 -5
  132. package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +1 -1
  133. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +7 -7
  134. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +1 -1
  135. package/vendor/node-addon-api/test/objectwrap_removewrap.js +24 -32
  136. package/vendor/node-addon-api/test/objectwrap_worker_thread.js +5 -4
  137. package/vendor/node-addon-api/test/promise.cc +7 -0
  138. package/vendor/node-addon-api/test/promise.js +3 -1
  139. package/vendor/node-addon-api/test/reference.cc +1 -1
  140. package/vendor/node-addon-api/test/reference.js +2 -2
  141. package/vendor/node-addon-api/test/run_script.cc +1 -1
  142. package/vendor/node-addon-api/test/symbol.js +59 -66
  143. package/vendor/node-addon-api/test/testUtil.js +6 -6
  144. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +64 -29
  145. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +71 -34
  146. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +111 -19
  147. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +2 -1
  148. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +36 -26
  149. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +5 -5
  150. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +3 -2
  151. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +1 -1
  152. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +47 -32
  153. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +3 -3
  154. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +22 -9
  155. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +76 -31
  156. package/vendor/node-addon-api/test/thunking_manual.cc +61 -74
  157. package/vendor/node-addon-api/test/thunking_manual.js +6 -7
  158. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +20 -20
  159. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +19 -19
  160. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +57 -5
  161. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +2 -0
  162. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +5 -5
  163. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +5 -1
  164. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +4 -3
  165. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +3 -3
  166. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +14 -0
  167. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +76 -31
  168. package/vendor/node-addon-api/test/typedarray-bigint.js +2 -2
  169. package/vendor/node-addon-api/test/typedarray.cc +263 -70
  170. package/vendor/node-addon-api/test/typedarray.js +44 -10
  171. package/vendor/node-addon-api/test/version_management.cc +16 -15
  172. package/vendor/node-addon-api/test/version_management.js +18 -20
  173. package/vendor/node-addon-api/tools/check-napi.js +13 -14
  174. package/vendor/node-addon-api/tools/conversion.js +161 -169
  175. package/vendor/node-addon-api/tools/eslint-format.js +9 -1
  176. package/vendor/node-addon-api/unit-test/README.md +4 -4
  177. package/koffi-2.3.3.tgz +0 -0
  178. package/src/koffi/build/2.3.3/koffi_darwin_arm64.tar.gz +0 -0
  179. package/src/koffi/build/2.3.3/koffi_darwin_x64.tar.gz +0 -0
  180. package/src/koffi/build/2.3.3/koffi_freebsd_arm64.tar.gz +0 -0
  181. package/src/koffi/build/2.3.3/koffi_freebsd_ia32.tar.gz +0 -0
  182. package/src/koffi/build/2.3.3/koffi_freebsd_x64.tar.gz +0 -0
  183. package/src/koffi/build/2.3.3/koffi_linux_arm32hf.tar.gz +0 -0
  184. package/src/koffi/build/2.3.3/koffi_linux_arm64.tar.gz +0 -0
  185. package/src/koffi/build/2.3.3/koffi_linux_ia32.tar.gz +0 -0
  186. package/src/koffi/build/2.3.3/koffi_linux_riscv64hf64.tar.gz +0 -0
  187. package/src/koffi/build/2.3.3/koffi_linux_x64.tar.gz +0 -0
  188. package/src/koffi/build/2.3.3/koffi_openbsd_ia32.tar.gz +0 -0
  189. package/src/koffi/build/2.3.3/koffi_openbsd_x64.tar.gz +0 -0
  190. package/src/koffi/build/2.3.3/koffi_win32_arm64.tar.gz +0 -0
  191. package/src/koffi/build/2.3.3/koffi_win32_ia32.tar.gz +0 -0
  192. package/src/koffi/build/2.3.3/koffi_win32_x64.tar.gz +0 -0
@@ -14,66 +14,70 @@ Value CreateExternal(const CallbackInfo& info) {
14
14
 
15
15
  Value CreateExternalWithFinalize(const CallbackInfo& info) {
16
16
  finalizeCount = 0;
17
- return External<int>::New(info.Env(), new int(1),
18
- [](Env /*env*/, int* data) {
19
- delete data;
20
- finalizeCount++;
21
- });
17
+ return External<int>::New(info.Env(), new int(1), [](Env /*env*/, int* data) {
18
+ delete data;
19
+ finalizeCount++;
20
+ });
22
21
  }
23
22
 
24
23
  Value CreateExternalWithFinalizeHint(const CallbackInfo& info) {
25
24
  finalizeCount = 0;
26
25
  char* hint = nullptr;
27
- return External<int>::New(info.Env(), new int(1),
28
- [](Env /*env*/, int* data, char* /*hint*/) {
29
- delete data;
30
- finalizeCount++;
31
- },
32
- hint);
26
+ return External<int>::New(
27
+ info.Env(),
28
+ new int(1),
29
+ [](Env /*env*/, int* data, char* /*hint*/) {
30
+ delete data;
31
+ finalizeCount++;
32
+ },
33
+ hint);
33
34
  }
34
35
 
35
36
  void CheckExternal(const CallbackInfo& info) {
36
- Value arg = info[0];
37
- if (arg.Type() != napi_external) {
38
- Error::New(info.Env(), "An external argument was expected.").ThrowAsJavaScriptException();
39
- return;
40
- }
37
+ Value arg = info[0];
38
+ if (arg.Type() != napi_external) {
39
+ Error::New(info.Env(), "An external argument was expected.")
40
+ .ThrowAsJavaScriptException();
41
+ return;
42
+ }
41
43
 
42
- External<int> external = arg.As<External<int>>();
43
- int* externalData = external.Data();
44
- if (externalData == nullptr || *externalData != 1) {
45
- Error::New(info.Env(), "An external value of 1 was expected.").ThrowAsJavaScriptException();
46
- return;
47
- }
44
+ External<int> external = arg.As<External<int>>();
45
+ int* externalData = external.Data();
46
+ if (externalData == nullptr || *externalData != 1) {
47
+ Error::New(info.Env(), "An external value of 1 was expected.")
48
+ .ThrowAsJavaScriptException();
49
+ return;
50
+ }
48
51
  }
49
52
 
50
53
  Value GetFinalizeCount(const CallbackInfo& info) {
51
- return Number::New(info.Env(), finalizeCount);
54
+ return Number::New(info.Env(), finalizeCount);
52
55
  }
53
56
 
54
57
  Value CreateExternalWithFinalizeException(const CallbackInfo& info) {
55
- return External<int>::New(info.Env(), new int(1),
56
- [](Env env, int* data) {
57
- Error error = Error::New(env, "Finalizer exception");
58
- delete data;
58
+ return External<int>::New(info.Env(), new int(1), [](Env env, int* data) {
59
+ Error error = Error::New(env, "Finalizer exception");
60
+ delete data;
59
61
  #ifdef NAPI_CPP_EXCEPTIONS
60
- throw error;
62
+ throw error;
61
63
  #else
62
64
  error.ThrowAsJavaScriptException();
63
65
  #endif
64
- });
66
+ });
65
67
  }
66
68
 
67
- } // end anonymous namespace
69
+ } // end anonymous namespace
68
70
 
69
71
  Object InitExternal(Env env) {
70
72
  Object exports = Object::New(env);
71
73
 
72
74
  exports["createExternal"] = Function::New(env, CreateExternal);
73
- exports["createExternalWithFinalize"] = Function::New(env, CreateExternalWithFinalize);
75
+ exports["createExternalWithFinalize"] =
76
+ Function::New(env, CreateExternalWithFinalize);
74
77
  exports["createExternalWithFinalizeException"] =
75
78
  Function::New(env, CreateExternalWithFinalizeException);
76
- exports["createExternalWithFinalizeHint"] = Function::New(env, CreateExternalWithFinalizeHint);
79
+ exports["createExternalWithFinalizeHint"] =
80
+ Function::New(env, CreateExternalWithFinalizeHint);
77
81
  exports["checkExternal"] = Function::New(env, CheckExternal);
78
82
  exports["getFinalizeCount"] = Function::New(env, GetFinalizeCount);
79
83
 
@@ -27,62 +27,59 @@ if (process.argv.length === 3) {
27
27
  // exception is thrown from a native `SetImmediate()` we cannot catch it
28
28
  // anywhere except in the process' `uncaughtException` handler.
29
29
  let maxGCTries = 10;
30
- (function gcInterval() {
30
+ (function gcInterval () {
31
31
  global.gc();
32
32
  if (!interval) {
33
33
  interval = setInterval(gcInterval, 100);
34
34
  } else if (--maxGCTries === 0) {
35
35
  throw new Error('Timed out waiting for the gc to throw');
36
- process.exit(1);
37
36
  }
38
37
  })();
38
+ } else {
39
+ module.exports = require('./common').runTestWithBindingPath(test);
39
40
 
40
- return;
41
- }
42
-
43
- module.exports = require('./common').runTestWithBindingPath(test);
44
-
45
- function test(bindingPath) {
46
- const binding = require(bindingPath);
41
+ function test (bindingPath) {
42
+ const binding = require(bindingPath);
47
43
 
48
- const child = spawnSync(process.execPath, [
49
- '--expose-gc', __filename, bindingPath
50
- ], { stdio: 'inherit' });
51
- assert.strictEqual(child.status, 0);
52
- assert.strictEqual(child.signal, null);
44
+ const child = spawnSync(process.execPath, [
45
+ '--expose-gc', __filename, bindingPath
46
+ ], { stdio: 'inherit' });
47
+ assert.strictEqual(child.status, 0);
48
+ assert.strictEqual(child.signal, null);
53
49
 
54
- return testUtil.runGCTests([
55
- 'External without finalizer',
56
- () => {
57
- const test = binding.external.createExternal();
58
- assert.strictEqual(typeof test, 'object');
59
- binding.external.checkExternal(test);
60
- assert.strictEqual(0, binding.external.getFinalizeCount());
61
- },
62
- () => {
63
- assert.strictEqual(0, binding.external.getFinalizeCount());
64
- },
50
+ return testUtil.runGCTests([
51
+ 'External without finalizer',
52
+ () => {
53
+ const test = binding.external.createExternal();
54
+ assert.strictEqual(typeof test, 'object');
55
+ binding.external.checkExternal(test);
56
+ assert.strictEqual(0, binding.external.getFinalizeCount());
57
+ },
58
+ () => {
59
+ assert.strictEqual(0, binding.external.getFinalizeCount());
60
+ },
65
61
 
66
- 'External with finalizer',
67
- () => {
68
- const test = binding.external.createExternalWithFinalize();
69
- assert.strictEqual(typeof test, 'object');
70
- binding.external.checkExternal(test);
71
- assert.strictEqual(0, binding.external.getFinalizeCount());
72
- },
73
- () => {
74
- assert.strictEqual(1, binding.external.getFinalizeCount());
75
- },
62
+ 'External with finalizer',
63
+ () => {
64
+ const test = binding.external.createExternalWithFinalize();
65
+ assert.strictEqual(typeof test, 'object');
66
+ binding.external.checkExternal(test);
67
+ assert.strictEqual(0, binding.external.getFinalizeCount());
68
+ },
69
+ () => {
70
+ assert.strictEqual(1, binding.external.getFinalizeCount());
71
+ },
76
72
 
77
- 'External with finalizer hint',
78
- () => {
79
- const test = binding.external.createExternalWithFinalizeHint();
80
- assert.strictEqual(typeof test, 'object');
81
- binding.external.checkExternal(test);
82
- assert.strictEqual(0, binding.external.getFinalizeCount());
83
- },
84
- () => {
85
- assert.strictEqual(1, binding.external.getFinalizeCount());
86
- },
87
- ]);
73
+ 'External with finalizer hint',
74
+ () => {
75
+ const test = binding.external.createExternalWithFinalizeHint();
76
+ assert.strictEqual(typeof test, 'object');
77
+ binding.external.checkExternal(test);
78
+ assert.strictEqual(0, binding.external.getFinalizeCount());
79
+ },
80
+ () => {
81
+ assert.strictEqual(1, binding.external.getFinalizeCount());
82
+ }
83
+ ]);
84
+ }
88
85
  }
@@ -60,13 +60,13 @@ Value CallWithArgs(const CallbackInfo& info) {
60
60
  }
61
61
 
62
62
  Value CallWithVector(const CallbackInfo& info) {
63
- Function func = info[0].As<Function>();
64
- std::vector<napi_value> args;
65
- args.reserve(3);
66
- args.push_back(info[1]);
67
- args.push_back(info[2]);
68
- args.push_back(info[3]);
69
- return MaybeUnwrap(func.Call(args));
63
+ Function func = info[0].As<Function>();
64
+ std::vector<napi_value> args;
65
+ args.reserve(3);
66
+ args.push_back(info[1]);
67
+ args.push_back(info[2]);
68
+ args.push_back(info[3]);
69
+ return MaybeUnwrap(func.Call(args));
70
70
  }
71
71
 
72
72
  Value CallWithVectorUsingCppWrapper(const CallbackInfo& info) {
@@ -101,21 +101,21 @@ Value CallWithReceiverAndCStyleArray(const CallbackInfo& info) {
101
101
  }
102
102
 
103
103
  Value CallWithReceiverAndArgs(const CallbackInfo& info) {
104
- Function func = info[0].As<Function>();
105
- Value receiver = info[1];
106
- return MaybeUnwrap(func.Call(
107
- receiver, std::initializer_list<napi_value>{info[2], info[3], info[4]}));
104
+ Function func = info[0].As<Function>();
105
+ Value receiver = info[1];
106
+ return MaybeUnwrap(func.Call(
107
+ receiver, std::initializer_list<napi_value>{info[2], info[3], info[4]}));
108
108
  }
109
109
 
110
110
  Value CallWithReceiverAndVector(const CallbackInfo& info) {
111
- Function func = info[0].As<Function>();
112
- Value receiver = info[1];
113
- std::vector<napi_value> args;
114
- args.reserve(3);
115
- args.push_back(info[2]);
116
- args.push_back(info[3]);
117
- args.push_back(info[4]);
118
- return MaybeUnwrap(func.Call(receiver, args));
111
+ Function func = info[0].As<Function>();
112
+ Value receiver = info[1];
113
+ std::vector<napi_value> args;
114
+ args.reserve(3);
115
+ args.push_back(info[2]);
116
+ args.push_back(info[3]);
117
+ args.push_back(info[4]);
118
+ return MaybeUnwrap(func.Call(receiver, args));
119
119
  }
120
120
 
121
121
  Value CallWithReceiverAndVectorUsingCppWrapper(const CallbackInfo& info) {
@@ -130,25 +130,25 @@ Value CallWithReceiverAndVectorUsingCppWrapper(const CallbackInfo& info) {
130
130
  }
131
131
 
132
132
  Value CallWithInvalidReceiver(const CallbackInfo& info) {
133
- Function func = info[0].As<Function>();
134
- return MaybeUnwrapOr(func.Call(Value(), std::initializer_list<napi_value>{}),
135
- Value());
133
+ Function func = info[0].As<Function>();
134
+ return MaybeUnwrapOr(func.Call(Value(), std::initializer_list<napi_value>{}),
135
+ Value());
136
136
  }
137
137
 
138
138
  Value CallConstructorWithArgs(const CallbackInfo& info) {
139
- Function func = info[0].As<Function>();
140
- return MaybeUnwrap(
141
- func.New(std::initializer_list<napi_value>{info[1], info[2], info[3]}));
139
+ Function func = info[0].As<Function>();
140
+ return MaybeUnwrap(
141
+ func.New(std::initializer_list<napi_value>{info[1], info[2], info[3]}));
142
142
  }
143
143
 
144
144
  Value CallConstructorWithVector(const CallbackInfo& info) {
145
- Function func = info[0].As<Function>();
146
- std::vector<napi_value> args;
147
- args.reserve(3);
148
- args.push_back(info[1]);
149
- args.push_back(info[2]);
150
- args.push_back(info[3]);
151
- return MaybeUnwrap(func.New(args));
145
+ Function func = info[0].As<Function>();
146
+ std::vector<napi_value> args;
147
+ args.reserve(3);
148
+ args.push_back(info[1]);
149
+ args.push_back(info[2]);
150
+ args.push_back(info[3]);
151
+ return MaybeUnwrap(func.New(args));
152
152
  }
153
153
 
154
154
  Value CallConstructorWithCStyleArray(const CallbackInfo& info) {
@@ -162,9 +162,13 @@ Value CallConstructorWithCStyleArray(const CallbackInfo& info) {
162
162
  }
163
163
 
164
164
  void IsConstructCall(const CallbackInfo& info) {
165
- Function callback = info[0].As<Function>();
166
- bool isConstructCall = info.IsConstructCall();
167
- callback({Napi::Boolean::New(info.Env(), isConstructCall)});
165
+ Function callback = info[0].As<Function>();
166
+ bool isConstructCall = info.IsConstructCall();
167
+ callback({Napi::Boolean::New(info.Env(), isConstructCall)});
168
+ }
169
+
170
+ Value NewTargetCallback(const CallbackInfo& info) {
171
+ return info.NewTarget();
168
172
  }
169
173
 
170
174
  void MakeCallbackWithArgs(const CallbackInfo& info) {
@@ -220,18 +224,21 @@ Value CallWithFunctionOperator(const CallbackInfo& info) {
220
224
  return MaybeUnwrap(func({info[1], info[2], info[3]}));
221
225
  }
222
226
 
223
- } // end anonymous namespace
227
+ } // end anonymous namespace
224
228
 
225
229
  Object InitFunction(Env env) {
226
230
  Object result = Object::New(env);
227
231
  Object exports = Object::New(env);
228
232
  exports["emptyConstructor"] = Function::New(env, EmptyConstructor);
229
233
  exports["voidCallback"] = Function::New(env, VoidCallback, "voidCallback");
230
- exports["valueCallback"] = Function::New(env, ValueCallback, std::string("valueCallback"));
234
+ exports["valueCallback"] =
235
+ Function::New(env, ValueCallback, std::string("valueCallback"));
231
236
  exports["voidCallbackWithData"] =
232
- Function::New(env, VoidCallbackWithData, nullptr, &testData);
237
+ Function::New(env, VoidCallbackWithData, nullptr, &testData);
233
238
  exports["valueCallbackWithData"] =
234
- Function::New(env, ValueCallbackWithData, nullptr, &testData);
239
+ Function::New(env, ValueCallbackWithData, nullptr, &testData);
240
+ exports["newTargetCallback"] =
241
+ Function::New(env, NewTargetCallback, std::string("newTargetCallback"));
235
242
  exports["callWithArgs"] = Function::New(env, CallWithArgs);
236
243
  exports["callWithVector"] = Function::New(env, CallWithVector);
237
244
  exports["callWithVectorUsingCppWrapper"] =
@@ -239,13 +246,18 @@ Object InitFunction(Env env) {
239
246
  exports["callWithCStyleArray"] = Function::New(env, CallWithCStyleArray);
240
247
  exports["callWithReceiverAndCStyleArray"] =
241
248
  Function::New(env, CallWithReceiverAndCStyleArray);
242
- exports["callWithReceiverAndArgs"] = Function::New(env, CallWithReceiverAndArgs);
243
- exports["callWithReceiverAndVector"] = Function::New(env, CallWithReceiverAndVector);
249
+ exports["callWithReceiverAndArgs"] =
250
+ Function::New(env, CallWithReceiverAndArgs);
251
+ exports["callWithReceiverAndVector"] =
252
+ Function::New(env, CallWithReceiverAndVector);
244
253
  exports["callWithReceiverAndVectorUsingCppWrapper"] =
245
254
  Function::New(env, CallWithReceiverAndVectorUsingCppWrapper);
246
- exports["callWithInvalidReceiver"] = Function::New(env, CallWithInvalidReceiver);
247
- exports["callConstructorWithArgs"] = Function::New(env, CallConstructorWithArgs);
248
- exports["callConstructorWithVector"] = Function::New(env, CallConstructorWithVector);
255
+ exports["callWithInvalidReceiver"] =
256
+ Function::New(env, CallWithInvalidReceiver);
257
+ exports["callConstructorWithArgs"] =
258
+ Function::New(env, CallConstructorWithArgs);
259
+ exports["callConstructorWithVector"] =
260
+ Function::New(env, CallConstructorWithVector);
249
261
  exports["callConstructorWithCStyleArray"] =
250
262
  Function::New(env, CallConstructorWithCStyleArray);
251
263
  exports["isConstructCall"] = Function::New(env, IsConstructCall);
@@ -265,6 +277,8 @@ Object InitFunction(Env env) {
265
277
  exports["voidCallback"] = Function::New<VoidCallback>(env, "voidCallback");
266
278
  exports["valueCallback"] =
267
279
  Function::New<ValueCallback>(env, std::string("valueCallback"));
280
+ exports["newTargetCallback"] =
281
+ Function::New<NewTargetCallback>(env, std::string("newTargetCallback"));
268
282
  exports["voidCallbackWithData"] =
269
283
  Function::New<VoidCallbackWithData>(env, nullptr, &testData);
270
284
  exports["valueCallbackWithData"] =
@@ -18,6 +18,10 @@ function test (binding) {
18
18
 
19
19
  assert.deepStrictEqual(binding.valueCallback(), { foo: 'bar' });
20
20
 
21
+ /* eslint-disable-next-line no-new, new-cap */
22
+ assert.strictEqual(new binding.newTargetCallback(), binding.newTargetCallback);
23
+ assert.strictEqual(binding.newTargetCallback(), undefined);
24
+
21
25
  let args = null;
22
26
  let ret = null;
23
27
  let receiver = null;
@@ -82,16 +82,16 @@ Value CallWithRecvVector(const CallbackInfo& info) {
82
82
  Value CallWithRecvArgc(const CallbackInfo& info) {
83
83
  HandleScope scope(info.Env());
84
84
  FunctionReference ref;
85
- int argLength = info.Length() - 2;
86
- napi_value* args = new napi_value[argLength];
87
85
  ref.Reset(info[0].As<Function>());
88
86
 
89
- int argIdx = 0;
90
- for (int i = 2; i < (int)info.Length(); i++, argIdx++) {
91
- args[argIdx] = info[i];
87
+ size_t argLength = info.Length() > 2 ? info.Length() - 2 : 0;
88
+ std::unique_ptr<napi_value[]> args{argLength > 0 ? new napi_value[argLength]
89
+ : nullptr};
90
+ for (size_t i = 0; i < argLength; ++i) {
91
+ args[i] = info[i + 2];
92
92
  }
93
93
 
94
- return MaybeUnwrap(ref.Call(info[1], argLength, args));
94
+ return MaybeUnwrap(ref.Call(info[1], argLength, args.get()));
95
95
  }
96
96
 
97
97
  Value MakeAsyncCallbackWithInitList(const Napi::CallbackInfo& info) {
@@ -121,17 +121,19 @@ Value MakeAsyncCallbackWithVector(const Napi::CallbackInfo& info) {
121
121
  Value MakeAsyncCallbackWithArgv(const Napi::CallbackInfo& info) {
122
122
  Napi::FunctionReference ref;
123
123
  ref.Reset(info[0].As<Function>());
124
- int argLength = info.Length() - 1;
125
- napi_value* args = new napi_value[argLength];
126
124
 
127
- int argIdx = 0;
128
- for (int i = 1; i < (int)info.Length(); i++, argIdx++) {
129
- args[argIdx] = info[i];
125
+ size_t argLength = info.Length() > 1 ? info.Length() - 1 : 0;
126
+ std::unique_ptr<napi_value[]> args{argLength > 0 ? new napi_value[argLength]
127
+ : nullptr};
128
+ for (size_t i = 0; i < argLength; ++i) {
129
+ args[i] = info[i + 1];
130
130
  }
131
131
 
132
132
  Napi::AsyncContext context(info.Env(), "func_ref_resources", {});
133
- return MaybeUnwrap(ref.MakeCallback(
134
- Napi::Object::New(info.Env()), argLength, args, context));
133
+ return MaybeUnwrap(ref.MakeCallback(Napi::Object::New(info.Env()),
134
+ argLength,
135
+ argLength > 0 ? args.get() : nullptr,
136
+ context));
135
137
  }
136
138
 
137
139
  Value CreateFunctionReferenceUsingNew(const Napi::CallbackInfo& info) {
@@ -4,58 +4,55 @@ const assert = require('assert');
4
4
 
5
5
  module.exports = require('../common').runTest(test);
6
6
 
7
- function test(binding) {
8
- const KEY_TYPE = {
9
- C_STR: 'KEY_AS_C_STRING',
10
- CPP_STR: 'KEY_AS_CPP_STRING',
11
- NAPI: 'KEY_AS_NAPI_VALUES',
12
- INT_32: 'KEY_AS_INT_32_NUM'
13
- };
14
-
15
- function assertNotGlobalObjectHasNoProperty(key, keyType)
16
- {
17
- switch(keyType)
18
- {
19
- case KEY_TYPE.NAPI:
20
- assert.notStrictEqual(binding.globalObject.hasPropertyWithNapiValue(key), true);
21
- break;
22
-
23
- case KEY_TYPE.C_STR:
24
- assert.notStrictEqual(binding.globalObject.hasPropertyWithCStyleString(key), true);
25
- break;
26
-
27
- case KEY_TYPE.CPP_STR:
28
- assert.notStrictEqual(binding.globalObject.hasPropertyWithCppStyleString(key), true);
29
- break;
30
-
31
- case KEY_TYPE.INT_32:
32
- assert.notStrictEqual(binding.globalObject.hasPropertyWithInt32(key), true);
33
- break;
34
- }
7
+ function test (binding) {
8
+ const KEY_TYPE = {
9
+ C_STR: 'KEY_AS_C_STRING',
10
+ CPP_STR: 'KEY_AS_CPP_STRING',
11
+ NAPI: 'KEY_AS_NAPI_VALUES',
12
+ INT_32: 'KEY_AS_INT_32_NUM'
13
+ };
14
+
15
+ function assertNotGlobalObjectHasNoProperty (key, keyType) {
16
+ switch (keyType) {
17
+ case KEY_TYPE.NAPI:
18
+ assert.notStrictEqual(binding.globalObject.hasPropertyWithNapiValue(key), true);
19
+ break;
20
+
21
+ case KEY_TYPE.C_STR:
22
+ assert.notStrictEqual(binding.globalObject.hasPropertyWithCStyleString(key), true);
23
+ break;
24
+
25
+ case KEY_TYPE.CPP_STR:
26
+ assert.notStrictEqual(binding.globalObject.hasPropertyWithCppStyleString(key), true);
27
+ break;
28
+
29
+ case KEY_TYPE.INT_32:
30
+ assert.notStrictEqual(binding.globalObject.hasPropertyWithInt32(key), true);
31
+ break;
35
32
  }
36
-
37
- function assertErrMessageIsThrown(propertyCheckExistenceFunction, errMsg) {
38
- assert.throws(() => {
39
- propertyCheckExistenceFunction(undefined);
40
- }, errMsg);
41
- }
42
-
43
- binding.globalObject.createMockTestObject();
44
-
45
- binding.globalObject.deletePropertyWithCStyleString('c_str_key');
46
- binding.globalObject.deletePropertyWithCppStyleString('cpp_string_key');
47
- binding.globalObject.deletePropertyWithCppStyleString('circular');
48
- binding.globalObject.deletePropertyWithInt32(15);
49
- binding.globalObject.deletePropertyWithNapiValue('2');
50
-
51
-
52
- assertNotGlobalObjectHasNoProperty('c_str_key',KEY_TYPE.C_STR);
53
- assertNotGlobalObjectHasNoProperty('cpp_string_key',KEY_TYPE.CPP_STR);
54
- assertNotGlobalObjectHasNoProperty('circular',KEY_TYPE.CPP_STR);
55
- assertNotGlobalObjectHasNoProperty(15,true);
56
- assertNotGlobalObjectHasNoProperty('2', KEY_TYPE.NAPI);
57
-
58
- assertErrMessageIsThrown(binding.globalObject.hasPropertyWithCppStyleString, 'Error: A string was expected');
59
- assertErrMessageIsThrown(binding.globalObject.hasPropertyWithCStyleString, 'Error: A string was expected');
60
- assertErrMessageIsThrown(binding.globalObject.hasPropertyWithInt32, 'Error: A number was expected');
33
+ }
34
+
35
+ function assertErrMessageIsThrown (propertyCheckExistenceFunction, errMsg) {
36
+ assert.throws(() => {
37
+ propertyCheckExistenceFunction(undefined);
38
+ }, errMsg);
39
+ }
40
+
41
+ binding.globalObject.createMockTestObject();
42
+
43
+ binding.globalObject.deletePropertyWithCStyleString('c_str_key');
44
+ binding.globalObject.deletePropertyWithCppStyleString('cpp_string_key');
45
+ binding.globalObject.deletePropertyWithCppStyleString('circular');
46
+ binding.globalObject.deletePropertyWithInt32(15);
47
+ binding.globalObject.deletePropertyWithNapiValue('2');
48
+
49
+ assertNotGlobalObjectHasNoProperty('c_str_key', KEY_TYPE.C_STR);
50
+ assertNotGlobalObjectHasNoProperty('cpp_string_key', KEY_TYPE.CPP_STR);
51
+ assertNotGlobalObjectHasNoProperty('circular', KEY_TYPE.CPP_STR);
52
+ assertNotGlobalObjectHasNoProperty(15, true);
53
+ assertNotGlobalObjectHasNoProperty('2', KEY_TYPE.NAPI);
54
+
55
+ assertErrMessageIsThrown(binding.globalObject.hasPropertyWithCppStyleString, 'Error: A string was expected');
56
+ assertErrMessageIsThrown(binding.globalObject.hasPropertyWithCStyleString, 'Error: A string was expected');
57
+ assertErrMessageIsThrown(binding.globalObject.hasPropertyWithInt32, 'Error: A number was expected');
61
58
  }
@@ -4,51 +4,50 @@ const assert = require('assert');
4
4
 
5
5
  module.exports = require('../common').runTest(test);
6
6
 
7
- function test(binding) {
7
+ function test (binding) {
8
8
  const KEY_TYPE = {
9
- C_STR: 'KEY_AS_C_STRING',
10
- CPP_STR: 'KEY_AS_CPP_STRING',
11
- NAPI: 'KEY_AS_NAPI_VALUES',
12
- INT_32: 'KEY_AS_INT_32_NUM'
13
- };
9
+ C_STR: 'KEY_AS_C_STRING',
10
+ CPP_STR: 'KEY_AS_CPP_STRING',
11
+ NAPI: 'KEY_AS_NAPI_VALUES',
12
+ INT_32: 'KEY_AS_INT_32_NUM'
13
+ };
14
14
 
15
15
  binding.globalObject.createMockTestObject();
16
- function assertGlobalObjectPropertyIs(key, attribute, keyType) {
16
+ function assertGlobalObjectPropertyIs (key, attribute, keyType) {
17
17
  let napiObjectAttr;
18
- switch(keyType)
19
- {
20
- case KEY_TYPE.NAPI:
21
- napiObjectAttr = binding.globalObject.getPropertyWithNapiValue(key);
22
- assert.deepStrictEqual(attribute, napiObjectAttr);
23
- break;
24
-
25
- case KEY_TYPE.C_STR:
26
- napiObjectAttr = binding.globalObject.getPropertyWithCString(key);
27
- assert.deepStrictEqual(attribute, napiObjectAttr);
28
- break;
29
-
30
- case KEY_TYPE.CPP_STR:
31
- napiObjectAttr = binding.globalObject.getPropertyWithCppString(key);
32
- assert.deepStrictEqual(attribute, napiObjectAttr);
33
- break;
34
-
35
- case KEY_TYPE.INT_32:
36
- napiObjectAttr = binding.globalObject.getPropertyWithInt32(key);
37
- assert.deepStrictEqual(attribute, napiObjectAttr);
38
- break;
39
- }
18
+ switch (keyType) {
19
+ case KEY_TYPE.NAPI:
20
+ napiObjectAttr = binding.globalObject.getPropertyWithNapiValue(key);
21
+ assert.deepStrictEqual(attribute, napiObjectAttr);
22
+ break;
23
+
24
+ case KEY_TYPE.C_STR:
25
+ napiObjectAttr = binding.globalObject.getPropertyWithCString(key);
26
+ assert.deepStrictEqual(attribute, napiObjectAttr);
27
+ break;
28
+
29
+ case KEY_TYPE.CPP_STR:
30
+ napiObjectAttr = binding.globalObject.getPropertyWithCppString(key);
31
+ assert.deepStrictEqual(attribute, napiObjectAttr);
32
+ break;
33
+
34
+ case KEY_TYPE.INT_32:
35
+ napiObjectAttr = binding.globalObject.getPropertyWithInt32(key);
36
+ assert.deepStrictEqual(attribute, napiObjectAttr);
37
+ break;
38
+ }
40
39
  }
41
40
 
42
- function assertErrMessageIsThrown(propertyFetchFunction, errMsg) {
41
+ function assertErrMessageIsThrown (propertyFetchFunction, errMsg) {
43
42
  assert.throws(() => {
44
43
  propertyFetchFunction(undefined);
45
44
  }, errMsg);
46
45
  }
47
46
 
48
- assertGlobalObjectPropertyIs('2',global['2'], KEY_TYPE.NAPI);
49
- assertGlobalObjectPropertyIs('c_str_key',global['c_str_key'],KEY_TYPE.C_STR);
50
- assertGlobalObjectPropertyIs('cpp_string_key',global['cpp_string_key'],KEY_TYPE.CPP_STR);
51
- assertGlobalObjectPropertyIs('circular',global['circular'],KEY_TYPE.CPP_STR);
47
+ assertGlobalObjectPropertyIs('2', global['2'], KEY_TYPE.NAPI);
48
+ assertGlobalObjectPropertyIs('c_str_key', global.c_str_key, KEY_TYPE.C_STR);
49
+ assertGlobalObjectPropertyIs('cpp_string_key', global.cpp_string_key, KEY_TYPE.CPP_STR);
50
+ assertGlobalObjectPropertyIs('circular', global.circular, KEY_TYPE.CPP_STR);
52
51
  assertGlobalObjectPropertyIs(15, global['15'], KEY_TYPE.INT_32);
53
52
 
54
53
  assertErrMessageIsThrown(binding.globalObject.getPropertyWithCString, 'Error: A string was expected');