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.
- package/CHANGELOG.md +25 -2
- package/doc/changelog.md +4 -0
- package/doc/index.rst +1 -2
- package/doc/types.md +3 -3
- package/package.json +5 -5
- package/src/cnoke/cnoke.js +40 -834
- package/src/cnoke/package.json +1 -0
- package/src/cnoke/src/builder.js +447 -0
- package/src/cnoke/src/index.js +20 -0
- package/src/cnoke/src/tools.js +401 -0
- package/src/core/libcc/libcc.cc +2 -2
- package/src/koffi/build/2.3.6-beta.1/koffi_darwin_arm64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_darwin_x64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_freebsd_arm64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_freebsd_ia32/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_freebsd_x64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_linux_arm32hf/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_linux_arm64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_linux_ia32/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_linux_riscv64hf64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_linux_x64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_openbsd_ia32/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_openbsd_x64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_arm64/koffi.exp +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_arm64/koffi.lib +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_arm64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_arm64/koffi.pdb +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_ia32/koffi.exp +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_ia32/koffi.lib +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_ia32/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_ia32/koffi.pdb +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_x64/koffi.exp +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_x64/koffi.lib +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_x64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_x64/koffi.pdb +0 -0
- package/src/koffi/src/abi_arm32.cc +43 -14
- package/src/koffi/src/abi_arm64.cc +95 -21
- package/src/koffi/src/abi_riscv64.cc +125 -64
- package/src/koffi/src/abi_x64_sysv.cc +38 -20
- package/src/koffi/src/abi_x64_win.cc +11 -5
- package/src/koffi/src/abi_x86.cc +14 -7
- package/src/koffi/src/call.cc +114 -44
- package/src/koffi/src/call.hh +6 -4
- package/src/koffi/src/ffi.cc +172 -147
- package/src/koffi/src/ffi.hh +18 -10
- package/src/koffi/src/index.d.ts +28 -7
- package/src/koffi/src/index.js +23 -4
- package/src/koffi/src/util.cc +261 -69
- package/src/koffi/src/util.hh +34 -8
- package/vendor/node-addon-api/CHANGELOG.md +122 -9
- package/vendor/node-addon-api/CONTRIBUTING.md +10 -10
- package/vendor/node-addon-api/README.md +36 -12
- package/vendor/node-addon-api/benchmark/function_args.cc +95 -62
- package/vendor/node-addon-api/benchmark/function_args.js +6 -6
- package/vendor/node-addon-api/benchmark/index.js +1 -1
- package/vendor/node-addon-api/benchmark/property_descriptor.cc +27 -34
- package/vendor/node-addon-api/benchmark/property_descriptor.js +5 -4
- package/vendor/node-addon-api/doc/async_operations.md +1 -1
- package/vendor/node-addon-api/doc/async_worker_variants.md +23 -2
- package/vendor/node-addon-api/doc/cmake-js.md +1 -1
- package/vendor/node-addon-api/doc/error_handling.md +3 -3
- package/vendor/node-addon-api/doc/external.md +7 -0
- package/vendor/node-addon-api/doc/handle_scope.md +14 -0
- package/vendor/node-addon-api/doc/hierarchy.md +1 -1
- package/vendor/node-addon-api/doc/object.md +27 -0
- package/vendor/node-addon-api/index.js +3 -3
- package/vendor/node-addon-api/napi-inl.deprecated.h +121 -127
- package/vendor/node-addon-api/napi-inl.h +1178 -1144
- package/vendor/node-addon-api/napi.h +2786 -2675
- package/vendor/node-addon-api/package.json +42 -1
- package/vendor/node-addon-api/test/addon.cc +8 -6
- package/vendor/node-addon-api/test/addon_build/index.js +9 -9
- package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +2 -1
- package/vendor/node-addon-api/test/addon_build/tpl/index.js +4 -4
- package/vendor/node-addon-api/test/addon_data.cc +12 -13
- package/vendor/node-addon-api/test/array_buffer.js +3 -2
- package/vendor/node-addon-api/test/async_progress_queue_worker.cc +13 -3
- package/vendor/node-addon-api/test/async_progress_queue_worker.js +5 -5
- package/vendor/node-addon-api/test/async_progress_worker.cc +65 -9
- package/vendor/node-addon-api/test/async_progress_worker.js +14 -9
- package/vendor/node-addon-api/test/async_worker.cc +236 -3
- package/vendor/node-addon-api/test/async_worker.js +122 -37
- package/vendor/node-addon-api/test/async_worker_nocallback.js +9 -3
- package/vendor/node-addon-api/test/async_worker_persistent.js +2 -2
- package/vendor/node-addon-api/test/basic_types/array.js +3 -4
- package/vendor/node-addon-api/test/basic_types/boolean.cc +4 -2
- package/vendor/node-addon-api/test/basic_types/boolean.js +1 -2
- package/vendor/node-addon-api/test/basic_types/number.cc +12 -6
- package/vendor/node-addon-api/test/basic_types/number.js +19 -18
- package/vendor/node-addon-api/test/basic_types/value.cc +52 -1
- package/vendor/node-addon-api/test/basic_types/value.js +44 -21
- package/vendor/node-addon-api/test/bigint.cc +2 -1
- package/vendor/node-addon-api/test/binding.cc +11 -5
- package/vendor/node-addon-api/test/binding.gyp +3 -1
- package/vendor/node-addon-api/test/buffer.cc +46 -38
- package/vendor/node-addon-api/test/buffer.js +12 -12
- package/vendor/node-addon-api/test/callbackInfo.cc +27 -0
- package/vendor/node-addon-api/test/callbackInfo.js +9 -0
- package/vendor/node-addon-api/test/callbackscope.cc +19 -2
- package/vendor/node-addon-api/test/callbackscope.js +20 -20
- package/vendor/node-addon-api/test/common/index.js +37 -4
- package/vendor/node-addon-api/test/dataview/dataview.js +5 -5
- package/vendor/node-addon-api/test/dataview/dataview_read_write.js +14 -12
- package/vendor/node-addon-api/test/date.cc +2 -1
- package/vendor/node-addon-api/test/date.js +2 -2
- package/vendor/node-addon-api/test/env_cleanup.cc +12 -0
- package/vendor/node-addon-api/test/env_cleanup.js +38 -39
- package/vendor/node-addon-api/test/error.cc +6 -5
- package/vendor/node-addon-api/test/error_terminating_environment.js +64 -60
- package/vendor/node-addon-api/test/external.cc +36 -32
- package/vendor/node-addon-api/test/external.js +43 -46
- package/vendor/node-addon-api/test/function.cc +58 -44
- package/vendor/node-addon-api/test/function.js +4 -0
- package/vendor/node-addon-api/test/function_reference.cc +15 -13
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +50 -53
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +33 -34
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +38 -40
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +47 -49
- package/vendor/node-addon-api/test/handlescope.cc +29 -3
- package/vendor/node-addon-api/test/handlescope.js +5 -3
- package/vendor/node-addon-api/test/index.js +1 -5
- package/vendor/node-addon-api/test/maybe/check.cc +49 -3
- package/vendor/node-addon-api/test/maybe/index.js +19 -7
- package/vendor/node-addon-api/test/memory_management.cc +9 -8
- package/vendor/node-addon-api/test/memory_management.js +2 -2
- package/vendor/node-addon-api/test/movable_callbacks.js +2 -2
- package/vendor/node-addon-api/test/name.js +3 -3
- package/vendor/node-addon-api/test/napi_child.js +2 -2
- package/vendor/node-addon-api/test/object/delete_property.js +7 -7
- package/vendor/node-addon-api/test/object/finalizer.cc +13 -12
- package/vendor/node-addon-api/test/object/finalizer.js +2 -2
- package/vendor/node-addon-api/test/object/get_property.js +6 -6
- package/vendor/node-addon-api/test/object/has_own_property.js +3 -3
- package/vendor/node-addon-api/test/object/has_property.js +4 -4
- package/vendor/node-addon-api/test/object/object.cc +191 -111
- package/vendor/node-addon-api/test/object/object.js +53 -52
- package/vendor/node-addon-api/test/object/object_deprecated.cc +24 -20
- package/vendor/node-addon-api/test/object/object_deprecated.js +3 -8
- package/vendor/node-addon-api/test/object/object_freeze_seal.js +54 -54
- package/vendor/node-addon-api/test/object/object_type_tag.cc +39 -0
- package/vendor/node-addon-api/test/object/object_type_tag.js +55 -0
- package/vendor/node-addon-api/test/object/subscript_operator.js +2 -2
- package/vendor/node-addon-api/test/object_reference.js +100 -100
- package/vendor/node-addon-api/test/objectwrap.cc +41 -34
- package/vendor/node-addon-api/test/objectwrap.js +23 -19
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +5 -5
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +1 -1
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +7 -7
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +1 -1
- package/vendor/node-addon-api/test/objectwrap_removewrap.js +24 -32
- package/vendor/node-addon-api/test/objectwrap_worker_thread.js +5 -4
- package/vendor/node-addon-api/test/promise.cc +7 -0
- package/vendor/node-addon-api/test/promise.js +3 -1
- package/vendor/node-addon-api/test/reference.cc +1 -1
- package/vendor/node-addon-api/test/reference.js +2 -2
- package/vendor/node-addon-api/test/run_script.cc +1 -1
- package/vendor/node-addon-api/test/symbol.js +59 -66
- package/vendor/node-addon-api/test/testUtil.js +6 -6
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +64 -29
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +71 -34
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +111 -19
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +2 -1
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +36 -26
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +5 -5
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +3 -2
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +1 -1
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +47 -32
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +3 -3
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +22 -9
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +76 -31
- package/vendor/node-addon-api/test/thunking_manual.cc +61 -74
- package/vendor/node-addon-api/test/thunking_manual.js +6 -7
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +20 -20
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +19 -19
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +57 -5
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +2 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +5 -5
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +5 -1
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +4 -3
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +3 -3
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +14 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +76 -31
- package/vendor/node-addon-api/test/typedarray-bigint.js +2 -2
- package/vendor/node-addon-api/test/typedarray.cc +263 -70
- package/vendor/node-addon-api/test/typedarray.js +44 -10
- package/vendor/node-addon-api/test/version_management.cc +16 -15
- package/vendor/node-addon-api/test/version_management.js +18 -20
- package/vendor/node-addon-api/tools/check-napi.js +13 -14
- package/vendor/node-addon-api/tools/conversion.js +161 -169
- package/vendor/node-addon-api/tools/eslint-format.js +9 -1
- package/vendor/node-addon-api/unit-test/README.md +4 -4
- package/src/koffi/build/2.3.4/koffi_darwin_arm64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_darwin_x64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_freebsd_arm64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_freebsd_ia32.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_freebsd_x64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_linux_arm32hf.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_linux_arm64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_linux_ia32.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_linux_riscv64hf64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_linux_x64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_openbsd_ia32.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_openbsd_x64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_win32_arm64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_win32_ia32.tar.gz +0 -0
- 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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
19
|
+
function test (binding) {
|
|
20
|
+
function testCastedEqual (testToCompare) {
|
|
21
|
+
const compareTest = ['hello', 'world', '!'];
|
|
22
22
|
if (testToCompare instanceof Array) {
|
|
23
|
-
assert.deepEqual(
|
|
23
|
+
assert.deepEqual(compareTest, testToCompare);
|
|
24
24
|
} else if (testToCompare instanceof String) {
|
|
25
|
-
assert.deepEqual(
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
test2[0] = binding.objectreference.getCastedFromGetter(
|
|
38
|
-
test2[1] = binding.objectreference.getCastedFromGetter(
|
|
39
|
-
test2[2] = binding.objectreference.getCastedFromGetter(
|
|
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(
|
|
49
|
-
const test2 =
|
|
50
|
-
test2[0] = binding.objectreference.getCastedFromGetter(
|
|
51
|
-
test2[1] = binding.objectreference.getCastedFromGetter(
|
|
52
|
-
test2[2] = binding.objectreference.getCastedFromGetter(
|
|
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 =
|
|
65
|
-
test2[0] = binding.objectreference.getCastedFromGetter(
|
|
66
|
-
test2[1] = binding.objectreference.getCastedFromGetter(
|
|
67
|
-
test2[2] = binding.objectreference.getCastedFromGetter(
|
|
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(
|
|
78
|
-
const test = binding.objectreference.getFromValue(
|
|
79
|
-
const test2 = binding.objectreference.getFromGetter(
|
|
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:
|
|
82
|
-
assert.equal(
|
|
83
|
-
assert.equal(test
|
|
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(
|
|
87
|
-
const test = binding.objectreference.getFromValue(
|
|
88
|
-
const test2 = binding.objectreference.getFromValue(
|
|
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:
|
|
91
|
-
assert.deepEqual({ hello:
|
|
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,
|
|
96
|
-
const test = binding.objectreference.getFromValue(
|
|
97
|
-
const test2 = binding.objectreference.getFromGetter(
|
|
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:
|
|
100
|
-
assert.equal(
|
|
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,
|
|
105
|
-
binding.objectreference.setObjects(1,
|
|
106
|
-
const test = binding.objectreference.getFromValue(
|
|
107
|
-
const test2 = binding.objectreference.getFromGetter(
|
|
108
|
-
const test3 = binding.objectreference.getFromGetter(
|
|
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:
|
|
110
|
+
assert.deepEqual({ 1: 'world' }, test);
|
|
111
111
|
assert.equal(undefined, test2);
|
|
112
|
-
assert.equal(
|
|
112
|
+
assert.equal('world', test3);
|
|
113
113
|
},
|
|
114
114
|
() => {
|
|
115
|
-
binding.objectreference.setObjects(
|
|
115
|
+
binding.objectreference.setObjects('hello', 'world');
|
|
116
116
|
assert.doesNotThrow(
|
|
117
117
|
() => {
|
|
118
|
-
|
|
118
|
+
let rcount = binding.objectreference.refObjects('weak');
|
|
119
119
|
assert.equal(rcount, 1);
|
|
120
|
-
rcount = binding.objectreference.unrefObjects(
|
|
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(
|
|
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(
|
|
136
|
-
const test = binding.objectreference.getFromValue(
|
|
137
|
-
const test2 = binding.objectreference.getFromGetter(
|
|
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:
|
|
140
|
-
assert.equal(
|
|
141
|
-
assert.equal(test
|
|
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(
|
|
145
|
-
const test = binding.objectreference.getFromValue(
|
|
146
|
-
const test2 = binding.objectreference.getFromValue(
|
|
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:
|
|
149
|
-
assert.deepEqual({ hello:
|
|
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,
|
|
154
|
-
const test = binding.objectreference.getFromValue(
|
|
155
|
-
const test2 = binding.objectreference.getFromGetter(
|
|
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:
|
|
158
|
-
assert.equal(
|
|
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,
|
|
163
|
-
binding.objectreference.setObjects(1,
|
|
164
|
-
const test = binding.objectreference.getFromValue(
|
|
165
|
-
const test2 = binding.objectreference.getFromGetter(
|
|
166
|
-
const test3 = binding.objectreference.getFromGetter(
|
|
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:
|
|
168
|
+
assert.deepEqual({ 1: 'world' }, test);
|
|
169
169
|
assert.equal(undefined, test2);
|
|
170
|
-
assert.equal(
|
|
170
|
+
assert.equal('world', test3);
|
|
171
171
|
},
|
|
172
172
|
() => {
|
|
173
|
-
binding.objectreference.setObjects(
|
|
173
|
+
binding.objectreference.setObjects('hello', 'world');
|
|
174
174
|
assert.doesNotThrow(
|
|
175
175
|
() => {
|
|
176
|
-
|
|
176
|
+
let rcount = binding.objectreference.unrefObjects('persistent');
|
|
177
177
|
assert.equal(rcount, 0);
|
|
178
|
-
rcount = binding.objectreference.refObjects(
|
|
178
|
+
rcount = binding.objectreference.refObjects('persistent');
|
|
179
179
|
assert.equal(rcount, 1);
|
|
180
|
-
rcount = binding.objectreference.unrefObjects(
|
|
180
|
+
rcount = binding.objectreference.unrefObjects('persistent');
|
|
181
181
|
assert.equal(rcount, 0);
|
|
182
|
-
rcount = binding.objectreference.refObjects(
|
|
182
|
+
rcount = binding.objectreference.refObjects('persistent');
|
|
183
183
|
assert.equal(rcount, 1);
|
|
184
|
-
rcount = binding.objectreference.unrefObjects(
|
|
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(
|
|
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(
|
|
199
|
+
binding.objectreference.setObjects('hello', 'world');
|
|
200
200
|
const test = binding.objectreference.getFromValue();
|
|
201
|
-
const test2 = binding.objectreference.getFromGetter(
|
|
201
|
+
const test2 = binding.objectreference.getFromGetter('hello');
|
|
202
202
|
|
|
203
|
-
assert.deepEqual({ hello:
|
|
204
|
-
assert.equal(
|
|
205
|
-
assert.equal(test
|
|
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(
|
|
208
|
+
binding.objectreference.setObjects('hello', 'world', 'javascript');
|
|
209
209
|
const test = binding.objectreference.getFromValue();
|
|
210
|
-
const test2 = binding.objectreference.getFromValue(
|
|
210
|
+
const test2 = binding.objectreference.getFromValue('hello');
|
|
211
211
|
|
|
212
|
-
assert.deepEqual({ hello:
|
|
213
|
-
assert.deepEqual({ hello:
|
|
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,
|
|
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:
|
|
222
|
-
assert.equal(
|
|
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,
|
|
227
|
-
binding.objectreference.setObjects(1,
|
|
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:
|
|
232
|
+
assert.deepEqual({ 1: 'world' }, test);
|
|
233
233
|
assert.equal(undefined, test2);
|
|
234
|
-
assert.equal(
|
|
234
|
+
assert.equal('world', test3);
|
|
235
235
|
},
|
|
236
236
|
() => {
|
|
237
|
-
binding.objectreference.setObjects(
|
|
237
|
+
binding.objectreference.setObjects('hello', 'world');
|
|
238
238
|
assert.doesNotThrow(
|
|
239
239
|
() => {
|
|
240
|
-
|
|
240
|
+
let rcount = binding.objectreference.unrefObjects('references');
|
|
241
241
|
assert.equal(rcount, 1);
|
|
242
|
-
rcount = binding.objectreference.refObjects(
|
|
242
|
+
rcount = binding.objectreference.refObjects('references');
|
|
243
243
|
assert.equal(rcount, 2);
|
|
244
|
-
rcount = binding.objectreference.unrefObjects(
|
|
244
|
+
rcount = binding.objectreference.unrefObjects('references');
|
|
245
245
|
assert.equal(rcount, 1);
|
|
246
|
-
rcount = binding.objectreference.unrefObjects(
|
|
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(
|
|
253
|
+
binding.objectreference.unrefObjects('references');
|
|
254
254
|
},
|
|
255
255
|
Error
|
|
256
256
|
);
|
|
257
257
|
}
|
|
258
|
-
])
|
|
259
|
-
}
|
|
258
|
+
]);
|
|
259
|
+
}
|