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
@@ -4,23 +4,18 @@ 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
  if (!('object_deprecated' in binding)) {
9
9
  return;
10
10
  }
11
- function assertPropertyIs(obj, key, attribute) {
12
- const propDesc = Object.getOwnPropertyDescriptor(obj, key);
13
- assert.ok(propDesc);
14
- assert.ok(propDesc[attribute]);
15
- }
16
11
 
17
- function assertPropertyIsNot(obj, key, attribute) {
12
+ function assertPropertyIsNot (obj, key, attribute) {
18
13
  const propDesc = Object.getOwnPropertyDescriptor(obj, key);
19
14
  assert.ok(propDesc);
20
15
  assert.ok(!propDesc[attribute]);
21
16
  }
22
17
 
23
- function testDefineProperties(nameType) {
18
+ function testDefineProperties (nameType) {
24
19
  const obj = {};
25
20
  binding.object.defineProperties(obj, nameType);
26
21
 
@@ -4,58 +4,58 @@ const assert = require('assert');
4
4
 
5
5
  module.exports = require('../common').runTest(test);
6
6
 
7
- function test(binding) {
8
- {
9
- const obj = { x: 'a', y: 'b', z: 'c' };
10
- assert.strictEqual(binding.object_freeze_seal.freeze(obj), true);
11
- assert.strictEqual(Object.isFrozen(obj), true);
12
- assert.throws(() => {
13
- obj.x = 10;
14
- }, /Cannot assign to read only property 'x' of object '#<Object>/);
15
- assert.throws(() => {
16
- obj.w = 15;
17
- }, /Cannot add property w, object is not extensible/);
18
- assert.throws(() => {
19
- delete obj.x;
20
- }, /Cannot delete property 'x' of #<Object>/);
21
- }
22
-
23
- {
24
- const obj = new Proxy({ x: 'a', y: 'b', z: 'c' }, {
25
- preventExtensions() {
26
- throw new Error('foo');
27
- },
28
- });
29
-
30
- assert.throws(() => {
31
- binding.object_freeze_seal.freeze(obj);
32
- }, /foo/);
33
- }
34
-
35
- {
36
- const obj = { x: 'a', y: 'b', z: 'c' };
37
- assert.strictEqual(binding.object_freeze_seal.seal(obj), true);
38
- assert.strictEqual(Object.isSealed(obj), true);
39
- assert.throws(() => {
40
- obj.w = 'd';
41
- }, /Cannot add property w, object is not extensible/);
42
- assert.throws(() => {
43
- delete obj.x;
44
- }, /Cannot delete property 'x' of #<Object>/);
45
- // Sealed objects allow updating existing properties,
46
- // so this should not throw.
47
- obj.x = 'd';
48
- }
49
-
50
- {
51
- const obj = new Proxy({ x: 'a', y: 'b', z: 'c' }, {
52
- preventExtensions() {
53
- throw new Error('foo');
54
- },
55
- });
56
-
57
- assert.throws(() => {
58
- binding.object_freeze_seal.seal(obj);
59
- }, /foo/);
60
- }
7
+ function test (binding) {
8
+ {
9
+ const obj = { x: 'a', y: 'b', z: 'c' };
10
+ assert.strictEqual(binding.object_freeze_seal.freeze(obj), true);
11
+ assert.strictEqual(Object.isFrozen(obj), true);
12
+ assert.throws(() => {
13
+ obj.x = 10;
14
+ }, /Cannot assign to read only property 'x' of object '#<Object>/);
15
+ assert.throws(() => {
16
+ obj.w = 15;
17
+ }, /Cannot add property w, object is not extensible/);
18
+ assert.throws(() => {
19
+ delete obj.x;
20
+ }, /Cannot delete property 'x' of #<Object>/);
21
+ }
22
+
23
+ {
24
+ const obj = new Proxy({ x: 'a', y: 'b', z: 'c' }, {
25
+ preventExtensions () {
26
+ throw new Error('foo');
27
+ }
28
+ });
29
+
30
+ assert.throws(() => {
31
+ binding.object_freeze_seal.freeze(obj);
32
+ }, /foo/);
33
+ }
34
+
35
+ {
36
+ const obj = { x: 'a', y: 'b', z: 'c' };
37
+ assert.strictEqual(binding.object_freeze_seal.seal(obj), true);
38
+ assert.strictEqual(Object.isSealed(obj), true);
39
+ assert.throws(() => {
40
+ obj.w = 'd';
41
+ }, /Cannot add property w, object is not extensible/);
42
+ assert.throws(() => {
43
+ delete obj.x;
44
+ }, /Cannot delete property 'x' of #<Object>/);
45
+ // Sealed objects allow updating existing properties,
46
+ // so this should not throw.
47
+ obj.x = 'd';
48
+ }
49
+
50
+ {
51
+ const obj = new Proxy({ x: 'a', y: 'b', z: 'c' }, {
52
+ preventExtensions () {
53
+ throw new Error('foo');
54
+ }
55
+ });
56
+
57
+ assert.throws(() => {
58
+ binding.object_freeze_seal.seal(obj);
59
+ }, /foo/);
60
+ }
61
61
  }
@@ -0,0 +1,39 @@
1
+ #include "napi.h"
2
+
3
+ #if (NAPI_VERSION > 7)
4
+
5
+ using namespace Napi;
6
+
7
+ static const napi_type_tag type_tags[5] = {
8
+ {0xdaf987b3cc62481a, 0xb745b0497f299531},
9
+ {0xbb7936c374084d9b, 0xa9548d0762eeedb9},
10
+ {0xa5ed9ce2e4c00c38, 0},
11
+ {0, 0},
12
+ {0xa5ed9ce2e4c00c38, 0xdaf987b3cc62481a},
13
+ };
14
+
15
+ Value TypeTaggedInstance(const CallbackInfo& info) {
16
+ Object instance = Object::New(info.Env());
17
+ uint32_t type_index = info[0].As<Number>().Int32Value();
18
+
19
+ instance.TypeTag(&type_tags[type_index]);
20
+
21
+ return instance;
22
+ }
23
+
24
+ Value CheckTypeTag(const CallbackInfo& info) {
25
+ uint32_t type_index = info[0].As<Number>().Int32Value();
26
+ Object instance = info[1].As<Object>();
27
+
28
+ return Boolean::New(info.Env(),
29
+ instance.CheckTypeTag(&type_tags[type_index]));
30
+ }
31
+
32
+ Object InitObjectTypeTag(Env env) {
33
+ Object exports = Object::New(env);
34
+ exports["checkTypeTag"] = Function::New(env, CheckTypeTag);
35
+ exports["typedTaggedInstance"] = Function::New(env, TypeTaggedInstance);
36
+ return exports;
37
+ }
38
+
39
+ #endif
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ const assert = require('assert');
4
+
5
+ module.exports = require('../common').runTest(test);
6
+
7
+ // eslint-disable-next-line camelcase
8
+ function test ({ object_type_tag }) {
9
+ const obj1 = object_type_tag.typedTaggedInstance(0);
10
+ const obj2 = object_type_tag.typedTaggedInstance(1);
11
+
12
+ // Verify that type tags are correctly accepted.
13
+ assert.strictEqual(object_type_tag.checkTypeTag(0, obj1), true);
14
+ assert.strictEqual(object_type_tag.checkTypeTag(1, obj2), true);
15
+
16
+ // Verify that wrongly tagged objects are rejected.
17
+ assert.strictEqual(object_type_tag.checkTypeTag(0, obj2), false);
18
+ assert.strictEqual(object_type_tag.checkTypeTag(1, obj1), false);
19
+
20
+ // Verify that untagged objects are rejected.
21
+ assert.strictEqual(object_type_tag.checkTypeTag(0, {}), false);
22
+ assert.strictEqual(object_type_tag.checkTypeTag(1, {}), false);
23
+
24
+ // Node v14 and v16 have an issue checking type tags if the `upper` in
25
+ // `napi_type_tag` is 0, so these tests can only be performed on Node version
26
+ // >=18. See:
27
+ // - https://github.com/nodejs/node/issues/43786
28
+ // - https://github.com/nodejs/node/pull/43788
29
+ const nodeVersion = parseInt(process.versions.node.split('.')[0]);
30
+ if (nodeVersion < 18) {
31
+ return;
32
+ }
33
+
34
+ const obj3 = object_type_tag.typedTaggedInstance(2);
35
+ const obj4 = object_type_tag.typedTaggedInstance(3);
36
+
37
+ // Verify that untagged objects are rejected.
38
+ assert.strictEqual(object_type_tag.checkTypeTag(0, {}), false);
39
+ assert.strictEqual(object_type_tag.checkTypeTag(1, {}), false);
40
+
41
+ // Verify that type tags are correctly accepted.
42
+ assert.strictEqual(object_type_tag.checkTypeTag(0, obj1), true);
43
+ assert.strictEqual(object_type_tag.checkTypeTag(1, obj2), true);
44
+ assert.strictEqual(object_type_tag.checkTypeTag(2, obj3), true);
45
+ assert.strictEqual(object_type_tag.checkTypeTag(3, obj4), true);
46
+
47
+ // Verify that wrongly tagged objects are rejected.
48
+ assert.strictEqual(object_type_tag.checkTypeTag(0, obj2), false);
49
+ assert.strictEqual(object_type_tag.checkTypeTag(1, obj1), false);
50
+ assert.strictEqual(object_type_tag.checkTypeTag(0, obj3), false);
51
+ assert.strictEqual(object_type_tag.checkTypeTag(1, obj4), false);
52
+ assert.strictEqual(object_type_tag.checkTypeTag(2, obj4), false);
53
+ assert.strictEqual(object_type_tag.checkTypeTag(3, obj3), false);
54
+ assert.strictEqual(object_type_tag.checkTypeTag(4, obj3), false);
55
+ }
@@ -4,8 +4,8 @@ const assert = require('assert');
4
4
 
5
5
  module.exports = require('../common').runTest(test);
6
6
 
7
- function test(binding) {
8
- function testProperty(obj, key, value, nativeGetProperty, nativeSetProperty) {
7
+ function test (binding) {
8
+ function testProperty (obj, key, value, nativeGetProperty, nativeSetProperty) {
9
9
  nativeSetProperty(obj, key, value);
10
10
  assert.strictEqual(nativeGetProperty(obj, key), value);
11
11
  }
@@ -16,13 +16,13 @@ const testUtil = require('./testUtil');
16
16
 
17
17
  module.exports = require('./common').runTest(test);
18
18
 
19
- function test(binding) {
20
- function testCastedEqual(testToCompare) {
21
- var compare_test = ["hello", "world", "!"];
19
+ function test (binding) {
20
+ function testCastedEqual (testToCompare) {
21
+ const compareTest = ['hello', 'world', '!'];
22
22
  if (testToCompare instanceof Array) {
23
- assert.deepEqual(compare_test, testToCompare);
23
+ assert.deepEqual(compareTest, testToCompare);
24
24
  } else if (testToCompare instanceof String) {
25
- assert.deepEqual("No Referenced Value", testToCompare);
25
+ assert.deepEqual('No Referenced Value', testToCompare);
26
26
  } else {
27
27
  assert.fail();
28
28
  }
@@ -32,11 +32,11 @@ function test(binding) {
32
32
  'Weak Casted Array',
33
33
  () => {
34
34
  binding.objectreference.setCastedObjects();
35
- var test = binding.objectreference.getCastedFromValue("weak");
36
- var test2 = new Array();
37
- test2[0] = binding.objectreference.getCastedFromGetter("weak", 0);
38
- test2[1] = binding.objectreference.getCastedFromGetter("weak", 1);
39
- test2[2] = binding.objectreference.getCastedFromGetter("weak", 2);
35
+ const test = binding.objectreference.getCastedFromValue('weak');
36
+ const test2 = [];
37
+ test2[0] = binding.objectreference.getCastedFromGetter('weak', 0);
38
+ test2[1] = binding.objectreference.getCastedFromGetter('weak', 1);
39
+ test2[2] = binding.objectreference.getCastedFromGetter('weak', 2);
40
40
 
41
41
  testCastedEqual(test);
42
42
  testCastedEqual(test2);
@@ -45,11 +45,11 @@ function test(binding) {
45
45
  'Persistent Casted Array',
46
46
  () => {
47
47
  binding.objectreference.setCastedObjects();
48
- const test = binding.objectreference.getCastedFromValue("persistent");
49
- const test2 = new Array();
50
- test2[0] = binding.objectreference.getCastedFromGetter("persistent", 0);
51
- test2[1] = binding.objectreference.getCastedFromGetter("persistent", 1);
52
- test2[2] = binding.objectreference.getCastedFromGetter("persistent", 2);
48
+ const test = binding.objectreference.getCastedFromValue('persistent');
49
+ const test2 = [];
50
+ test2[0] = binding.objectreference.getCastedFromGetter('persistent', 0);
51
+ test2[1] = binding.objectreference.getCastedFromGetter('persistent', 1);
52
+ test2[2] = binding.objectreference.getCastedFromGetter('persistent', 2);
53
53
 
54
54
  assert.ok(test instanceof Array);
55
55
  assert.ok(test2 instanceof Array);
@@ -61,10 +61,10 @@ function test(binding) {
61
61
  () => {
62
62
  binding.objectreference.setCastedObjects();
63
63
  const test = binding.objectreference.getCastedFromValue();
64
- const test2 = new Array();
65
- test2[0] = binding.objectreference.getCastedFromGetter("reference", 0);
66
- test2[1] = binding.objectreference.getCastedFromGetter("reference", 1);
67
- test2[2] = binding.objectreference.getCastedFromGetter("reference", 2);
64
+ const test2 = [];
65
+ test2[0] = binding.objectreference.getCastedFromGetter('reference', 0);
66
+ test2[1] = binding.objectreference.getCastedFromGetter('reference', 1);
67
+ test2[2] = binding.objectreference.getCastedFromGetter('reference', 2);
68
68
 
69
69
  assert.ok(test instanceof Array);
70
70
  assert.ok(test2 instanceof Array);
@@ -74,57 +74,57 @@ function test(binding) {
74
74
 
75
75
  'Weak',
76
76
  () => {
77
- binding.objectreference.setObjects("hello", "world");
78
- const test = binding.objectreference.getFromValue("weak");
79
- const test2 = binding.objectreference.getFromGetter("weak", "hello");
77
+ binding.objectreference.setObjects('hello', 'world');
78
+ const test = binding.objectreference.getFromValue('weak');
79
+ const test2 = binding.objectreference.getFromGetter('weak', 'hello');
80
80
 
81
- assert.deepEqual({ hello: "world"}, test);
82
- assert.equal("world", test2);
83
- assert.equal(test["hello"], test2);
81
+ assert.deepEqual({ hello: 'world' }, test);
82
+ assert.equal('world', test2);
83
+ assert.equal(test.hello, test2);
84
84
  },
85
85
  () => {
86
- binding.objectreference.setObjects("hello", "world", "javascript");
87
- const test = binding.objectreference.getFromValue("weak");
88
- const test2 = binding.objectreference.getFromValue("weak", "hello");
86
+ binding.objectreference.setObjects('hello', 'world', 'javascript');
87
+ const test = binding.objectreference.getFromValue('weak');
88
+ const test2 = binding.objectreference.getFromValue('weak', 'hello');
89
89
 
90
- assert.deepEqual({ hello: "world" }, test);
91
- assert.deepEqual({ hello: "world" }, test2);
90
+ assert.deepEqual({ hello: 'world' }, test);
91
+ assert.deepEqual({ hello: 'world' }, test2);
92
92
  assert.equal(test, test2);
93
93
  },
94
94
  () => {
95
- binding.objectreference.setObjects(1, "hello world");
96
- const test = binding.objectreference.getFromValue("weak");
97
- const test2 = binding.objectreference.getFromGetter("weak", 1);
95
+ binding.objectreference.setObjects(1, 'hello world');
96
+ const test = binding.objectreference.getFromValue('weak');
97
+ const test2 = binding.objectreference.getFromGetter('weak', 1);
98
98
 
99
- assert.deepEqual({ 1: "hello world" }, test);
100
- assert.equal("hello world", test2);
99
+ assert.deepEqual({ 1: 'hello world' }, test);
100
+ assert.equal('hello world', test2);
101
101
  assert.equal(test[1], test2);
102
102
  },
103
103
  () => {
104
- binding.objectreference.setObjects(0, "hello");
105
- binding.objectreference.setObjects(1, "world");
106
- const test = binding.objectreference.getFromValue("weak");
107
- const test2 = binding.objectreference.getFromGetter("weak", 0);
108
- const test3 = binding.objectreference.getFromGetter("weak", 1);
104
+ binding.objectreference.setObjects(0, 'hello');
105
+ binding.objectreference.setObjects(1, 'world');
106
+ const test = binding.objectreference.getFromValue('weak');
107
+ const test2 = binding.objectreference.getFromGetter('weak', 0);
108
+ const test3 = binding.objectreference.getFromGetter('weak', 1);
109
109
 
110
- assert.deepEqual({ 1: "world" }, test);
110
+ assert.deepEqual({ 1: 'world' }, test);
111
111
  assert.equal(undefined, test2);
112
- assert.equal("world", test3);
112
+ assert.equal('world', test3);
113
113
  },
114
114
  () => {
115
- binding.objectreference.setObjects("hello", "world");
115
+ binding.objectreference.setObjects('hello', 'world');
116
116
  assert.doesNotThrow(
117
117
  () => {
118
- var rcount = binding.objectreference.refObjects("weak");
118
+ let rcount = binding.objectreference.refObjects('weak');
119
119
  assert.equal(rcount, 1);
120
- rcount = binding.objectreference.unrefObjects("weak");
120
+ rcount = binding.objectreference.unrefObjects('weak');
121
121
  assert.equal(rcount, 0);
122
122
  },
123
123
  Error
124
124
  );
125
125
  assert.throws(
126
126
  () => {
127
- binding.objectreference.unrefObjects("weak");
127
+ binding.objectreference.unrefObjects('weak');
128
128
  },
129
129
  Error
130
130
  );
@@ -132,63 +132,63 @@ function test(binding) {
132
132
 
133
133
  'Persistent',
134
134
  () => {
135
- binding.objectreference.setObjects("hello", "world");
136
- const test = binding.objectreference.getFromValue("persistent");
137
- const test2 = binding.objectreference.getFromGetter("persistent", "hello");
135
+ binding.objectreference.setObjects('hello', 'world');
136
+ const test = binding.objectreference.getFromValue('persistent');
137
+ const test2 = binding.objectreference.getFromGetter('persistent', 'hello');
138
138
 
139
- assert.deepEqual({ hello: "world" }, test);
140
- assert.equal("world", test2);
141
- assert.equal(test["hello"], test2);
139
+ assert.deepEqual({ hello: 'world' }, test);
140
+ assert.equal('world', test2);
141
+ assert.equal(test.hello, test2);
142
142
  },
143
143
  () => {
144
- binding.objectreference.setObjects("hello", "world", "javascript");
145
- const test = binding.objectreference.getFromValue("persistent");
146
- const test2 = binding.objectreference.getFromValue("persistent", "hello");
144
+ binding.objectreference.setObjects('hello', 'world', 'javascript');
145
+ const test = binding.objectreference.getFromValue('persistent');
146
+ const test2 = binding.objectreference.getFromValue('persistent', 'hello');
147
147
 
148
- assert.deepEqual({ hello: "world" }, test);
149
- assert.deepEqual({ hello: "world" }, test2);
148
+ assert.deepEqual({ hello: 'world' }, test);
149
+ assert.deepEqual({ hello: 'world' }, test2);
150
150
  assert.deepEqual(test, test2);
151
151
  },
152
152
  () => {
153
- binding.objectreference.setObjects(1, "hello world");
154
- const test = binding.objectreference.getFromValue("persistent");
155
- const test2 = binding.objectreference.getFromGetter("persistent", 1);
153
+ binding.objectreference.setObjects(1, 'hello world');
154
+ const test = binding.objectreference.getFromValue('persistent');
155
+ const test2 = binding.objectreference.getFromGetter('persistent', 1);
156
156
 
157
- assert.deepEqual({ 1: "hello world"}, test);
158
- assert.equal("hello world", test2);
157
+ assert.deepEqual({ 1: 'hello world' }, test);
158
+ assert.equal('hello world', test2);
159
159
  assert.equal(test[1], test2);
160
160
  },
161
161
  () => {
162
- binding.objectreference.setObjects(0, "hello");
163
- binding.objectreference.setObjects(1, "world");
164
- const test = binding.objectreference.getFromValue("persistent");
165
- const test2 = binding.objectreference.getFromGetter("persistent", 0);
166
- const test3 = binding.objectreference.getFromGetter("persistent", 1);
162
+ binding.objectreference.setObjects(0, 'hello');
163
+ binding.objectreference.setObjects(1, 'world');
164
+ const test = binding.objectreference.getFromValue('persistent');
165
+ const test2 = binding.objectreference.getFromGetter('persistent', 0);
166
+ const test3 = binding.objectreference.getFromGetter('persistent', 1);
167
167
 
168
- assert.deepEqual({ 1: "world"}, test);
168
+ assert.deepEqual({ 1: 'world' }, test);
169
169
  assert.equal(undefined, test2);
170
- assert.equal("world", test3);
170
+ assert.equal('world', test3);
171
171
  },
172
172
  () => {
173
- binding.objectreference.setObjects("hello", "world");
173
+ binding.objectreference.setObjects('hello', 'world');
174
174
  assert.doesNotThrow(
175
175
  () => {
176
- var rcount = binding.objectreference.unrefObjects("persistent");
176
+ let rcount = binding.objectreference.unrefObjects('persistent');
177
177
  assert.equal(rcount, 0);
178
- rcount = binding.objectreference.refObjects("persistent");
178
+ rcount = binding.objectreference.refObjects('persistent');
179
179
  assert.equal(rcount, 1);
180
- rcount = binding.objectreference.unrefObjects("persistent");
180
+ rcount = binding.objectreference.unrefObjects('persistent');
181
181
  assert.equal(rcount, 0);
182
- rcount = binding.objectreference.refObjects("persistent");
182
+ rcount = binding.objectreference.refObjects('persistent');
183
183
  assert.equal(rcount, 1);
184
- rcount = binding.objectreference.unrefObjects("persistent");
184
+ rcount = binding.objectreference.unrefObjects('persistent');
185
185
  assert.equal(rcount, 0);
186
186
  },
187
187
  Error
188
188
  );
189
189
  assert.throws(
190
190
  () => {
191
- binding.objectreference.unrefObjects("persistent");
191
+ binding.objectreference.unrefObjects('persistent');
192
192
  },
193
193
  Error
194
194
  );
@@ -196,64 +196,64 @@ function test(binding) {
196
196
 
197
197
  'References',
198
198
  () => {
199
- binding.objectreference.setObjects("hello", "world");
199
+ binding.objectreference.setObjects('hello', 'world');
200
200
  const test = binding.objectreference.getFromValue();
201
- const test2 = binding.objectreference.getFromGetter("hello");
201
+ const test2 = binding.objectreference.getFromGetter('hello');
202
202
 
203
- assert.deepEqual({ hello: "world" }, test);
204
- assert.equal("world", test2);
205
- assert.equal(test["hello"], test2);
203
+ assert.deepEqual({ hello: 'world' }, test);
204
+ assert.equal('world', test2);
205
+ assert.equal(test.hello, test2);
206
206
  },
207
207
  () => {
208
- binding.objectreference.setObjects("hello", "world", "javascript");
208
+ binding.objectreference.setObjects('hello', 'world', 'javascript');
209
209
  const test = binding.objectreference.getFromValue();
210
- const test2 = binding.objectreference.getFromValue("hello");
210
+ const test2 = binding.objectreference.getFromValue('hello');
211
211
 
212
- assert.deepEqual({ hello: "world" }, test);
213
- assert.deepEqual({ hello: "world" }, test2);
212
+ assert.deepEqual({ hello: 'world' }, test);
213
+ assert.deepEqual({ hello: 'world' }, test2);
214
214
  assert.deepEqual(test, test2);
215
215
  },
216
216
  () => {
217
- binding.objectreference.setObjects(1, "hello world");
217
+ binding.objectreference.setObjects(1, 'hello world');
218
218
  const test = binding.objectreference.getFromValue();
219
219
  const test2 = binding.objectreference.getFromGetter(1);
220
220
 
221
- assert.deepEqual({ 1: "hello world"}, test);
222
- assert.equal("hello world", test2);
221
+ assert.deepEqual({ 1: 'hello world' }, test);
222
+ assert.equal('hello world', test2);
223
223
  assert.equal(test[1], test2);
224
224
  },
225
225
  () => {
226
- binding.objectreference.setObjects(0, "hello");
227
- binding.objectreference.setObjects(1, "world");
226
+ binding.objectreference.setObjects(0, 'hello');
227
+ binding.objectreference.setObjects(1, 'world');
228
228
  const test = binding.objectreference.getFromValue();
229
229
  const test2 = binding.objectreference.getFromGetter(0);
230
230
  const test3 = binding.objectreference.getFromGetter(1);
231
231
 
232
- assert.deepEqual({ 1: "world"}, test);
232
+ assert.deepEqual({ 1: 'world' }, test);
233
233
  assert.equal(undefined, test2);
234
- assert.equal("world", test3);
234
+ assert.equal('world', test3);
235
235
  },
236
236
  () => {
237
- binding.objectreference.setObjects("hello", "world");
237
+ binding.objectreference.setObjects('hello', 'world');
238
238
  assert.doesNotThrow(
239
239
  () => {
240
- var rcount = binding.objectreference.unrefObjects("references");
240
+ let rcount = binding.objectreference.unrefObjects('references');
241
241
  assert.equal(rcount, 1);
242
- rcount = binding.objectreference.refObjects("references");
242
+ rcount = binding.objectreference.refObjects('references');
243
243
  assert.equal(rcount, 2);
244
- rcount = binding.objectreference.unrefObjects("references");
244
+ rcount = binding.objectreference.unrefObjects('references');
245
245
  assert.equal(rcount, 1);
246
- rcount = binding.objectreference.unrefObjects("references");
246
+ rcount = binding.objectreference.unrefObjects('references');
247
247
  assert.equal(rcount, 0);
248
248
  },
249
249
  Error
250
250
  );
251
251
  assert.throws(
252
252
  () => {
253
- binding.objectreference.unrefObjects("references");
253
+ binding.objectreference.unrefObjects('references');
254
254
  },
255
255
  Error
256
256
  );
257
257
  }
258
- ])
259
- };
258
+ ]);
259
+ }