cborg 1.10.1 → 2.0.0-alpha.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/.github/dependabot.yml +16 -0
- package/.github/workflows/test-and-release.yml +63 -0
- package/CHANGELOG.md +332 -0
- package/bench/bench.js +117 -0
- package/bench/json.js +124 -0
- package/bench/package.json +8 -0
- package/lib/bin.js +1 -1
- package/package.json +29 -47
- package/types/lib/4array.d.ts +1 -1
- package/types/lib/5map.d.ts +1 -1
- package/types/lib/6tag.d.ts +1 -1
- package/types/lib/7float.d.ts +1 -1
- package/types/lib/bin.d.ts +1 -0
- package/types/lib/token.d.ts +13 -13
- package/cjs/browser-test/appendix_a.js +0 -643
- package/cjs/browser-test/common.js +0 -24
- package/cjs/browser-test/node-test-bin.js +0 -348
- package/cjs/browser-test/noop-bin-test.js +0 -4
- package/cjs/browser-test/test-0uint.js +0 -158
- package/cjs/browser-test/test-1negint.js +0 -152
- package/cjs/browser-test/test-2bytes.js +0 -254
- package/cjs/browser-test/test-3string.js +0 -144
- package/cjs/browser-test/test-4array.js +0 -200
- package/cjs/browser-test/test-5map.js +0 -667
- package/cjs/browser-test/test-6tag.js +0 -75
- package/cjs/browser-test/test-7float.js +0 -253
- package/cjs/browser-test/test-bl.js +0 -91
- package/cjs/browser-test/test-cbor-vectors.js +0 -98
- package/cjs/browser-test/test-decode-errors.js +0 -77
- package/cjs/browser-test/test-fuzz.js +0 -56
- package/cjs/browser-test/test-json.js +0 -281
- package/cjs/browser-test/test-length.js +0 -63
- package/cjs/cborg.js +0 -14
- package/cjs/lib/0uint.js +0 -163
- package/cjs/lib/1negint.js +0 -63
- package/cjs/lib/2bytes.js +0 -62
- package/cjs/lib/3string.js +0 -46
- package/cjs/lib/4array.js +0 -51
- package/cjs/lib/5map.js +0 -51
- package/cjs/lib/6tag.js +0 -36
- package/cjs/lib/7float.js +0 -188
- package/cjs/lib/bin.js +0 -139
- package/cjs/lib/bl.js +0 -77
- package/cjs/lib/byte-utils.js +0 -245
- package/cjs/lib/common.js +0 -22
- package/cjs/lib/decode.js +0 -140
- package/cjs/lib/diagnostic.js +0 -124
- package/cjs/lib/encode.js +0 -248
- package/cjs/lib/is.js +0 -87
- package/cjs/lib/json/decode.js +0 -414
- package/cjs/lib/json/encode.js +0 -161
- package/cjs/lib/json/json.js +0 -12
- package/cjs/lib/jump.js +0 -174
- package/cjs/lib/length.js +0 -36
- package/cjs/lib/token.js +0 -46
- package/cjs/node-test/appendix_a.js +0 -643
- package/cjs/node-test/common.js +0 -24
- package/cjs/node-test/node-test-bin.js +0 -348
- package/cjs/node-test/noop-bin-test.js +0 -4
- package/cjs/node-test/test-0uint.js +0 -158
- package/cjs/node-test/test-1negint.js +0 -152
- package/cjs/node-test/test-2bytes.js +0 -254
- package/cjs/node-test/test-3string.js +0 -144
- package/cjs/node-test/test-4array.js +0 -200
- package/cjs/node-test/test-5map.js +0 -667
- package/cjs/node-test/test-6tag.js +0 -75
- package/cjs/node-test/test-7float.js +0 -253
- package/cjs/node-test/test-bl.js +0 -91
- package/cjs/node-test/test-cbor-vectors.js +0 -98
- package/cjs/node-test/test-decode-errors.js +0 -77
- package/cjs/node-test/test-fuzz.js +0 -56
- package/cjs/node-test/test-json.js +0 -281
- package/cjs/node-test/test-length.js +0 -63
- package/cjs/taglib.js +0 -44
- package/cli.js +0 -7
- package/esm/browser-test/appendix_a.js +0 -640
- package/esm/browser-test/common.js +0 -19
- package/esm/browser-test/node-test-bin.js +0 -339
- package/esm/browser-test/noop-bin-test.js +0 -1
- package/esm/browser-test/test-0uint.js +0 -155
- package/esm/browser-test/test-1negint.js +0 -149
- package/esm/browser-test/test-2bytes.js +0 -252
- package/esm/browser-test/test-3string.js +0 -141
- package/esm/browser-test/test-4array.js +0 -197
- package/esm/browser-test/test-5map.js +0 -664
- package/esm/browser-test/test-6tag.js +0 -78
- package/esm/browser-test/test-7float.js +0 -250
- package/esm/browser-test/test-bl.js +0 -84
- package/esm/browser-test/test-cbor-vectors.js +0 -95
- package/esm/browser-test/test-decode-errors.js +0 -69
- package/esm/browser-test/test-fuzz.js +0 -50
- package/esm/browser-test/test-json.js +0 -279
- package/esm/browser-test/test-length.js +0 -55
- package/esm/cborg.js +0 -12
- package/esm/lib/0uint.js +0 -152
- package/esm/lib/1negint.js +0 -55
- package/esm/lib/2bytes.js +0 -59
- package/esm/lib/3string.js +0 -43
- package/esm/lib/4array.js +0 -41
- package/esm/lib/5map.js +0 -41
- package/esm/lib/6tag.js +0 -27
- package/esm/lib/7float.js +0 -179
- package/esm/lib/bin.js +0 -137
- package/esm/lib/bl.js +0 -74
- package/esm/lib/byte-utils.js +0 -228
- package/esm/lib/common.js +0 -19
- package/esm/lib/decode.js +0 -139
- package/esm/lib/diagnostic.js +0 -123
- package/esm/lib/encode.js +0 -246
- package/esm/lib/is.js +0 -81
- package/esm/lib/json/decode.js +0 -413
- package/esm/lib/json/encode.js +0 -160
- package/esm/lib/json/json.js +0 -10
- package/esm/lib/jump.js +0 -168
- package/esm/lib/length.js +0 -31
- package/esm/lib/token.js +0 -43
- package/esm/node-test/appendix_a.js +0 -640
- package/esm/node-test/common.js +0 -19
- package/esm/node-test/node-test-bin.js +0 -339
- package/esm/node-test/noop-bin-test.js +0 -1
- package/esm/node-test/test-0uint.js +0 -155
- package/esm/node-test/test-1negint.js +0 -149
- package/esm/node-test/test-2bytes.js +0 -252
- package/esm/node-test/test-3string.js +0 -141
- package/esm/node-test/test-4array.js +0 -197
- package/esm/node-test/test-5map.js +0 -664
- package/esm/node-test/test-6tag.js +0 -78
- package/esm/node-test/test-7float.js +0 -250
- package/esm/node-test/test-bl.js +0 -84
- package/esm/node-test/test-cbor-vectors.js +0 -95
- package/esm/node-test/test-decode-errors.js +0 -69
- package/esm/node-test/test-fuzz.js +0 -50
- package/esm/node-test/test-json.js +0 -279
- package/esm/node-test/test-length.js +0 -55
- package/esm/package.json +0 -4
- package/esm/taglib.js +0 -37
- package/index.js +0 -1
- package/json +0 -1
- package/length +0 -1
- package/taglib +0 -1
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chai = require('chai');
|
|
4
|
-
require('../cborg.js');
|
|
5
|
-
var byteUtils = require('../lib/byte-utils.js');
|
|
6
|
-
var decode = require('../lib/decode.js');
|
|
7
|
-
var encode = require('../lib/encode.js');
|
|
8
|
-
|
|
9
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
10
|
-
|
|
11
|
-
var chai__default = /*#__PURE__*/_interopDefaultLegacy(chai);
|
|
12
|
-
|
|
13
|
-
const {assert} = chai__default["default"];
|
|
14
|
-
const fixtures = [
|
|
15
|
-
{
|
|
16
|
-
data: '40',
|
|
17
|
-
expected: '',
|
|
18
|
-
type: 'bytes'
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
data: '41a1',
|
|
22
|
-
expected: 'a1',
|
|
23
|
-
type: 'bytes'
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
data: '5801a1',
|
|
27
|
-
expected: 'a1',
|
|
28
|
-
type: 'bytes',
|
|
29
|
-
strict: false
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
data: '58ff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe',
|
|
33
|
-
expected: '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe',
|
|
34
|
-
type: 'bytes',
|
|
35
|
-
label: 'long bytes, 8-bit length'
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
data: '5900ff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe',
|
|
39
|
-
expected: '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe',
|
|
40
|
-
type: 'bytes',
|
|
41
|
-
label: 'long bytes, 16-bit length',
|
|
42
|
-
strict: false
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
data: '5a000000ff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe',
|
|
46
|
-
expected: '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe',
|
|
47
|
-
type: 'bytes',
|
|
48
|
-
label: 'long bytes, 32-bit length',
|
|
49
|
-
strict: false
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
data: '5b00000000000000ff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe',
|
|
53
|
-
expected: '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe',
|
|
54
|
-
type: 'bytes',
|
|
55
|
-
label: 'long bytes, 64-bit length',
|
|
56
|
-
strict: false
|
|
57
|
-
}
|
|
58
|
-
];
|
|
59
|
-
(() => {
|
|
60
|
-
function rnd(length) {
|
|
61
|
-
return new Uint8Array(Array.from({ length }, () => Math.floor(Math.random() * 255)));
|
|
62
|
-
}
|
|
63
|
-
const expected16 = rnd(256);
|
|
64
|
-
fixtures.push({
|
|
65
|
-
data: new Uint8Array([
|
|
66
|
-
...byteUtils.fromHex('590100'),
|
|
67
|
-
...expected16
|
|
68
|
-
]),
|
|
69
|
-
expected: expected16,
|
|
70
|
-
type: 'bytes',
|
|
71
|
-
label: 'long bytes, 16-bit length strict-compat'
|
|
72
|
-
});
|
|
73
|
-
const expected32 = rnd(65536);
|
|
74
|
-
fixtures.push({
|
|
75
|
-
data: new Uint8Array([
|
|
76
|
-
...byteUtils.fromHex('5a00010000'),
|
|
77
|
-
...expected32
|
|
78
|
-
]),
|
|
79
|
-
expected: expected32,
|
|
80
|
-
type: 'bytes',
|
|
81
|
-
label: 'long bytes, 32-bit length strict-compat'
|
|
82
|
-
});
|
|
83
|
-
})();
|
|
84
|
-
describe('bytes', () => {
|
|
85
|
-
describe('decode', () => {
|
|
86
|
-
for (const fixture of fixtures) {
|
|
87
|
-
const data = byteUtils.fromHex(fixture.data);
|
|
88
|
-
it(`should decode ${ fixture.type }=${ fixture.label || fixture.expected }`, () => {
|
|
89
|
-
let actual = decode.decode(data);
|
|
90
|
-
assert.strictEqual(byteUtils.toHex(actual), byteUtils.toHex(byteUtils.fromHex(fixture.expected)), `decode ${ fixture.type }`);
|
|
91
|
-
if (fixture.strict === false) {
|
|
92
|
-
assert.throws(() => decode.decode(data, { strict: true }), Error, 'CBOR decode error: integer encoded in more bytes than necessary (strict decode)');
|
|
93
|
-
} else {
|
|
94
|
-
actual = decode.decode(data, { strict: true });
|
|
95
|
-
assert.strictEqual(byteUtils.toHex(actual), byteUtils.toHex(byteUtils.fromHex(fixture.expected)), `decode ${ fixture.type } strict`);
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
it('should fail to decode very large length', () => {
|
|
99
|
-
assert.throws(() => decode.decode(byteUtils.fromHex('5ba5f702b3a5f702b3000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe')), /CBOR decode error: 64-bit integer bytes lengths not supported/);
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
describe('encode', () => {
|
|
104
|
-
for (const fixture of fixtures) {
|
|
105
|
-
if (fixture.data.length >= 100000000) {
|
|
106
|
-
it.skip(`(TODO) skipping encode of very large bytes ${ fixture.type }=${ fixture.label || fixture.expected }`, () => {
|
|
107
|
-
});
|
|
108
|
-
continue;
|
|
109
|
-
}
|
|
110
|
-
const data = byteUtils.fromHex(fixture.expected);
|
|
111
|
-
const expectedHex = byteUtils.toHex(fixture.data);
|
|
112
|
-
it(`should encode ${ fixture.type }=${ fixture.label || fixture.expected }`, () => {
|
|
113
|
-
if (fixture.unsafe) {
|
|
114
|
-
assert.throws(() => encode.encode(data), Error, /^CBOR encode error: number too large to encode \(-\d+\)$/);
|
|
115
|
-
} else if (fixture.strict === false) {
|
|
116
|
-
assert.notStrictEqual(byteUtils.toHex(encode.encode(data)), expectedHex, `encode ${ fixture.type } !strict`);
|
|
117
|
-
} else {
|
|
118
|
-
assert.strictEqual(byteUtils.toHex(encode.encode(data)), expectedHex, `encode ${ fixture.type }`);
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
describe('typedarrays', () => {
|
|
124
|
-
const cases = [
|
|
125
|
-
{
|
|
126
|
-
obj: Uint8Array.from([
|
|
127
|
-
1,
|
|
128
|
-
2,
|
|
129
|
-
3
|
|
130
|
-
]),
|
|
131
|
-
hex: '43010203'
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
obj: Uint8ClampedArray.from([
|
|
135
|
-
1,
|
|
136
|
-
2,
|
|
137
|
-
3
|
|
138
|
-
]),
|
|
139
|
-
hex: '43010203'
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
obj: Uint16Array.from([
|
|
143
|
-
1,
|
|
144
|
-
2,
|
|
145
|
-
3
|
|
146
|
-
]),
|
|
147
|
-
hex: '46010002000300'
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
obj: Uint32Array.from([
|
|
151
|
-
1,
|
|
152
|
-
2,
|
|
153
|
-
3
|
|
154
|
-
]),
|
|
155
|
-
hex: '4c010000000200000003000000'
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
obj: Int8Array.from([
|
|
159
|
-
1,
|
|
160
|
-
2,
|
|
161
|
-
-3
|
|
162
|
-
]),
|
|
163
|
-
hex: '430102fd'
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
obj: Int16Array.from([
|
|
167
|
-
1,
|
|
168
|
-
2,
|
|
169
|
-
-3
|
|
170
|
-
]),
|
|
171
|
-
hex: '4601000200fdff'
|
|
172
|
-
},
|
|
173
|
-
{
|
|
174
|
-
obj: Int32Array.from([
|
|
175
|
-
1,
|
|
176
|
-
2,
|
|
177
|
-
-3
|
|
178
|
-
]),
|
|
179
|
-
hex: '4c0100000002000000fdffffff'
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
obj: Float32Array.from([
|
|
183
|
-
1,
|
|
184
|
-
2,
|
|
185
|
-
-3
|
|
186
|
-
]),
|
|
187
|
-
hex: '4c0000803f00000040000040c0'
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
obj: Float64Array.from([
|
|
191
|
-
1,
|
|
192
|
-
2,
|
|
193
|
-
-3
|
|
194
|
-
]),
|
|
195
|
-
hex: '5818000000000000f03f000000000000004000000000000008c0'
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
obj: BigUint64Array.from([
|
|
199
|
-
BigInt(1),
|
|
200
|
-
BigInt(2),
|
|
201
|
-
BigInt(3)
|
|
202
|
-
]),
|
|
203
|
-
hex: '5818010000000000000002000000000000000300000000000000'
|
|
204
|
-
},
|
|
205
|
-
{
|
|
206
|
-
obj: BigInt64Array.from([
|
|
207
|
-
BigInt(1),
|
|
208
|
-
BigInt(2),
|
|
209
|
-
BigInt(-3)
|
|
210
|
-
]),
|
|
211
|
-
hex: '581801000000000000000200000000000000fdffffffffffffff'
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
obj: new DataView(Uint8Array.from([
|
|
215
|
-
1,
|
|
216
|
-
2,
|
|
217
|
-
3
|
|
218
|
-
]).buffer),
|
|
219
|
-
hex: '43010203'
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
obj: Uint8Array.from([
|
|
223
|
-
1,
|
|
224
|
-
2,
|
|
225
|
-
3
|
|
226
|
-
]).buffer,
|
|
227
|
-
hex: '43010203'
|
|
228
|
-
}
|
|
229
|
-
];
|
|
230
|
-
for (const testCase of cases) {
|
|
231
|
-
it(testCase.obj.constructor.name, () => {
|
|
232
|
-
assert.equal(byteUtils.toHex(encode.encode(testCase.obj)), testCase.hex);
|
|
233
|
-
const decoded = decode.decode(byteUtils.fromHex(testCase.hex));
|
|
234
|
-
assert.instanceOf(decoded, Uint8Array);
|
|
235
|
-
assert.equal(byteUtils.toHex(decoded), byteUtils.toHex(testCase.obj));
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
});
|
|
239
|
-
if (byteUtils.useBuffer) {
|
|
240
|
-
describe('buffer', () => {
|
|
241
|
-
it('can encode Node.js Buffers', () => {
|
|
242
|
-
const obj = global.Buffer.from([
|
|
243
|
-
1,
|
|
244
|
-
2,
|
|
245
|
-
3
|
|
246
|
-
]);
|
|
247
|
-
assert.equal(byteUtils.toHex(encode.encode(obj)), '43010203');
|
|
248
|
-
const decoded = decode.decode(byteUtils.fromHex('43010203'));
|
|
249
|
-
assert.instanceOf(decoded, Uint8Array);
|
|
250
|
-
assert.equal(byteUtils.toHex(decoded), byteUtils.toHex(obj));
|
|
251
|
-
});
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
});
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chai = require('chai');
|
|
4
|
-
require('../cborg.js');
|
|
5
|
-
var byteUtils = require('../lib/byte-utils.js');
|
|
6
|
-
var decode = require('../lib/decode.js');
|
|
7
|
-
var encode = require('../lib/encode.js');
|
|
8
|
-
|
|
9
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
10
|
-
|
|
11
|
-
var chai__default = /*#__PURE__*/_interopDefaultLegacy(chai);
|
|
12
|
-
|
|
13
|
-
const {assert} = chai__default["default"];
|
|
14
|
-
const fixtures = [
|
|
15
|
-
{
|
|
16
|
-
data: '60',
|
|
17
|
-
expected: '',
|
|
18
|
-
type: 'string'
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
data: '6161',
|
|
22
|
-
expected: 'a',
|
|
23
|
-
type: 'string'
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
data: '780161',
|
|
27
|
-
expected: 'a',
|
|
28
|
-
type: 'string',
|
|
29
|
-
strict: false
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
data: '6c48656c6c6f20776f726c6421',
|
|
33
|
-
expected: 'Hello world!',
|
|
34
|
-
type: 'string'
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
data: '6fc48c6175657320c39f76c49b746521',
|
|
38
|
-
expected: 'Čaues ßvěte!',
|
|
39
|
-
type: 'string'
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
data: '78964c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e6720656c69742e20446f6e6563206d692074656c6c75732c20696163756c6973206e656320766573746962756c756d20717569732c206665726d656e74756d206e6f6e2066656c69732e204d616563656e6173207574206a7573746f20706f73756572652e',
|
|
43
|
-
expected: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mi tellus, iaculis nec vestibulum quis, fermentum non felis. Maecenas ut justo posuere.',
|
|
44
|
-
type: 'string',
|
|
45
|
-
label: 'long string, 8-bit length'
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
data: '7900964c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e6720656c69742e20446f6e6563206d692074656c6c75732c20696163756c6973206e656320766573746962756c756d20717569732c206665726d656e74756d206e6f6e2066656c69732e204d616563656e6173207574206a7573746f20706f73756572652e',
|
|
49
|
-
expected: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mi tellus, iaculis nec vestibulum quis, fermentum non felis. Maecenas ut justo posuere.',
|
|
50
|
-
type: 'string',
|
|
51
|
-
label: 'long string, 16-bit length',
|
|
52
|
-
strict: false
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
data: '7a000000964c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e6720656c69742e20446f6e6563206d692074656c6c75732c20696163756c6973206e656320766573746962756c756d20717569732c206665726d656e74756d206e6f6e2066656c69732e204d616563656e6173207574206a7573746f20706f73756572652e',
|
|
56
|
-
expected: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mi tellus, iaculis nec vestibulum quis, fermentum non felis. Maecenas ut justo posuere.',
|
|
57
|
-
type: 'string',
|
|
58
|
-
label: 'long string, 32-bit length',
|
|
59
|
-
strict: false
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
data: '7b00000000000000964c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e6720656c69742e20446f6e6563206d692074656c6c75732c20696163756c6973206e656320766573746962756c756d20717569732c206665726d656e74756d206e6f6e2066656c69732e204d616563656e6173207574206a7573746f20706f73756572652e',
|
|
63
|
-
expected: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mi tellus, iaculis nec vestibulum quis, fermentum non felis. Maecenas ut justo posuere.',
|
|
64
|
-
type: 'string',
|
|
65
|
-
label: 'long string, 64-bit length',
|
|
66
|
-
strict: false
|
|
67
|
-
}
|
|
68
|
-
];
|
|
69
|
-
(() => {
|
|
70
|
-
function rnd(length) {
|
|
71
|
-
const sa = [];
|
|
72
|
-
let l = 0;
|
|
73
|
-
while (l < length) {
|
|
74
|
-
const ascii = length - l < 3;
|
|
75
|
-
const base = ascii ? 32 : 126976;
|
|
76
|
-
const max = ascii ? 126 : 130816;
|
|
77
|
-
const cc = Math.floor(Math.random() * (max - base)) + base;
|
|
78
|
-
const s = String.fromCharCode(cc);
|
|
79
|
-
l += new TextEncoder().encode(s).length;
|
|
80
|
-
sa.push(s);
|
|
81
|
-
}
|
|
82
|
-
return sa.join('');
|
|
83
|
-
}
|
|
84
|
-
const expected16 = rnd(256);
|
|
85
|
-
fixtures.push({
|
|
86
|
-
data: new Uint8Array([
|
|
87
|
-
...byteUtils.fromHex('790100'),
|
|
88
|
-
...new TextEncoder().encode(expected16)
|
|
89
|
-
]),
|
|
90
|
-
expected: expected16,
|
|
91
|
-
type: 'string',
|
|
92
|
-
label: 'long string, 16-bit length strict-compat'
|
|
93
|
-
});
|
|
94
|
-
const expected32 = rnd(65536);
|
|
95
|
-
fixtures.push({
|
|
96
|
-
data: new Uint8Array([
|
|
97
|
-
...byteUtils.fromHex('7a00010000'),
|
|
98
|
-
...new TextEncoder().encode(expected32)
|
|
99
|
-
]),
|
|
100
|
-
expected: expected32,
|
|
101
|
-
type: 'string',
|
|
102
|
-
label: 'long string, 32-bit length strict-compat'
|
|
103
|
-
});
|
|
104
|
-
})();
|
|
105
|
-
describe('string', () => {
|
|
106
|
-
describe('decode', () => {
|
|
107
|
-
for (const fixture of fixtures) {
|
|
108
|
-
const data = byteUtils.fromHex(fixture.data);
|
|
109
|
-
it(`should decode ${ fixture.type }=${ fixture.label || fixture.expected }`, () => {
|
|
110
|
-
let actual = decode.decode(data);
|
|
111
|
-
assert.strictEqual(actual, fixture.expected, `decode ${ fixture.type }`);
|
|
112
|
-
if (fixture.strict === false) {
|
|
113
|
-
assert.throws(() => decode.decode(data, { strict: true }), Error, 'CBOR decode error: integer encoded in more bytes than necessary (strict decode)');
|
|
114
|
-
} else {
|
|
115
|
-
actual = decode.decode(data, { strict: true });
|
|
116
|
-
assert.strictEqual(actual, fixture.expected, `decode ${ fixture.type } strict`);
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
it('should fail to decode very large length', () => {
|
|
120
|
-
assert.throws(() => decode.decode(byteUtils.fromHex('7ba5f702b3a5f702b34c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e6720656c69742e20446f6e6563206d692074656c6c75732c20696163756c6973206e656320766573746962756c756d20717569732c206665726d656e74756d206e6f6e2066656c69732e204d616563656e6173207574206a7573746f20706f73756572652e')), /CBOR decode error: 64-bit integer string lengths not supported/);
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
describe('encode', () => {
|
|
125
|
-
for (const fixture of fixtures) {
|
|
126
|
-
if (fixture.data.length >= 100000000) {
|
|
127
|
-
it.skip(`(TODO) skipping encode of very large string ${ fixture.type }=${ fixture.label || fixture.expected }`, () => {
|
|
128
|
-
});
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
const data = fixture.expected;
|
|
132
|
-
const expectedHex = byteUtils.toHex(fixture.data);
|
|
133
|
-
it(`should encode ${ fixture.type }=${ fixture.label || fixture.expected }`, () => {
|
|
134
|
-
if (fixture.unsafe) {
|
|
135
|
-
assert.throws(() => encode.encode(data), Error, /^CBOR encode error: number too large to encode \(-\d+\)$/);
|
|
136
|
-
} else if (fixture.strict === false) {
|
|
137
|
-
assert.notStrictEqual(byteUtils.toHex(encode.encode(data)), expectedHex, `encode ${ fixture.type } !strict`);
|
|
138
|
-
} else {
|
|
139
|
-
assert.strictEqual(byteUtils.toHex(encode.encode(data)), expectedHex, `encode ${ fixture.type }`);
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
});
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chai = require('chai');
|
|
4
|
-
require('../cborg.js');
|
|
5
|
-
var byteUtils = require('../lib/byte-utils.js');
|
|
6
|
-
var decode = require('../lib/decode.js');
|
|
7
|
-
var encode = require('../lib/encode.js');
|
|
8
|
-
|
|
9
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
10
|
-
|
|
11
|
-
var chai__default = /*#__PURE__*/_interopDefaultLegacy(chai);
|
|
12
|
-
|
|
13
|
-
const {assert} = chai__default["default"];
|
|
14
|
-
const fixtures = [
|
|
15
|
-
{
|
|
16
|
-
data: '80',
|
|
17
|
-
expected: [],
|
|
18
|
-
type: 'array empty'
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
data: '8102',
|
|
22
|
-
expected: [2],
|
|
23
|
-
type: 'array 1 compact uint'
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
data: '8118ff',
|
|
27
|
-
expected: [255],
|
|
28
|
-
type: 'array 1 uint8'
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
data: '811901f4',
|
|
32
|
-
expected: [500],
|
|
33
|
-
type: 'array 1 uint16'
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
data: '811a00010000',
|
|
37
|
-
expected: [65536],
|
|
38
|
-
type: 'array 1 uint32'
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
data: '811b00000000000000ff',
|
|
42
|
-
expected: [255],
|
|
43
|
-
type: 'array 1 uint64',
|
|
44
|
-
strict: false
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
data: '811b0016db6db6db6db7',
|
|
48
|
-
expected: [Number.MAX_SAFE_INTEGER / 1.4],
|
|
49
|
-
type: 'array 1 uint64'
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
data: '811b001fffffffffffff',
|
|
53
|
-
expected: [Number.MAX_SAFE_INTEGER],
|
|
54
|
-
type: 'array 1 uint64'
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
data: '8403040506',
|
|
58
|
-
expected: [
|
|
59
|
-
3,
|
|
60
|
-
4,
|
|
61
|
-
5,
|
|
62
|
-
6
|
|
63
|
-
],
|
|
64
|
-
type: 'array 4 ints'
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
data: '8c1b0016db6db6db6db71a000100001901f40200202238ff3aa5f702b33b0016db6db6db6db74261316fc48c6175657320c39f76c49b746521',
|
|
68
|
-
expected: [
|
|
69
|
-
Number.MAX_SAFE_INTEGER / 1.4,
|
|
70
|
-
65536,
|
|
71
|
-
500,
|
|
72
|
-
2,
|
|
73
|
-
0,
|
|
74
|
-
-1,
|
|
75
|
-
-3,
|
|
76
|
-
-256,
|
|
77
|
-
-2784428724,
|
|
78
|
-
Number.MIN_SAFE_INTEGER / 1.4 - 1,
|
|
79
|
-
new TextEncoder().encode('a1'),
|
|
80
|
-
'Čaues ßvěte!'
|
|
81
|
-
],
|
|
82
|
-
type: 'array mixed terminals',
|
|
83
|
-
label: '[]'
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
data: '8265617272617982626f66820582666e657374656482666172726179736121',
|
|
87
|
-
expected: [
|
|
88
|
-
'array',
|
|
89
|
-
[
|
|
90
|
-
'of',
|
|
91
|
-
[
|
|
92
|
-
5,
|
|
93
|
-
[
|
|
94
|
-
'nested',
|
|
95
|
-
[
|
|
96
|
-
'arrays',
|
|
97
|
-
'!'
|
|
98
|
-
]
|
|
99
|
-
]
|
|
100
|
-
]
|
|
101
|
-
]
|
|
102
|
-
],
|
|
103
|
-
type: 'array nested'
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
data: '980403040506',
|
|
107
|
-
expected: [
|
|
108
|
-
3,
|
|
109
|
-
4,
|
|
110
|
-
5,
|
|
111
|
-
6
|
|
112
|
-
],
|
|
113
|
-
type: 'array 4 ints, length8',
|
|
114
|
-
strict: false
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
data: '99000403040506',
|
|
118
|
-
expected: [
|
|
119
|
-
3,
|
|
120
|
-
4,
|
|
121
|
-
5,
|
|
122
|
-
6
|
|
123
|
-
],
|
|
124
|
-
type: 'array 4 ints, length16',
|
|
125
|
-
strict: false
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
data: '9a0000000403040506',
|
|
129
|
-
expected: [
|
|
130
|
-
3,
|
|
131
|
-
4,
|
|
132
|
-
5,
|
|
133
|
-
6
|
|
134
|
-
],
|
|
135
|
-
type: 'array 4 ints, length32',
|
|
136
|
-
strict: false
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
data: '9b000000000000000403040506',
|
|
140
|
-
expected: [
|
|
141
|
-
3,
|
|
142
|
-
4,
|
|
143
|
-
5,
|
|
144
|
-
6
|
|
145
|
-
],
|
|
146
|
-
type: 'array 4 ints, length64',
|
|
147
|
-
strict: false
|
|
148
|
-
}
|
|
149
|
-
];
|
|
150
|
-
describe('array', () => {
|
|
151
|
-
describe('decode', () => {
|
|
152
|
-
for (const fixture of fixtures) {
|
|
153
|
-
const data = byteUtils.fromHex(fixture.data);
|
|
154
|
-
it(`should decode ${ fixture.type }=${ fixture.label || fixture.expected }`, () => {
|
|
155
|
-
assert.deepStrictEqual(decode.decode(data), fixture.expected, `decode ${ fixture.type }`);
|
|
156
|
-
if (fixture.strict === false) {
|
|
157
|
-
assert.throws(() => decode.decode(data, { strict: true }), Error, 'CBOR decode error: integer encoded in more bytes than necessary (strict decode)');
|
|
158
|
-
} else {
|
|
159
|
-
assert.deepStrictEqual(decode.decode(data, { strict: true }), fixture.expected, `decode ${ fixture.type }`);
|
|
160
|
-
}
|
|
161
|
-
});
|
|
162
|
-
it('should fail to decode very large length', () => {
|
|
163
|
-
assert.throws(() => decode.decode(byteUtils.fromHex('9ba5f702b3a5f7020403040506')), /CBOR decode error: 64-bit integer array lengths not supported/);
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
describe('encode', () => {
|
|
168
|
-
for (const fixture of fixtures) {
|
|
169
|
-
it(`should encode ${ fixture.type }=${ fixture.label || fixture.expected }`, () => {
|
|
170
|
-
if (fixture.unsafe) {
|
|
171
|
-
assert.throws(encode.encode.bind(null, fixture.expected), Error, /^CBOR encode error: number too large to encode \(\d+\)$/);
|
|
172
|
-
} else if (fixture.strict === false) {
|
|
173
|
-
assert.notDeepEqual(byteUtils.toHex(encode.encode(fixture.expected)), fixture.data, `encode ${ fixture.type } !strict`);
|
|
174
|
-
} else {
|
|
175
|
-
assert.strictEqual(byteUtils.toHex(encode.encode(fixture.expected)), fixture.data, `encode ${ fixture.type }`);
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
});
|
|
180
|
-
describe('roundtrip', () => {
|
|
181
|
-
for (const fixture of fixtures) {
|
|
182
|
-
if (!fixture.unsafe && fixture.strict !== false) {
|
|
183
|
-
it(`should roundtrip ${ fixture.type }=${ fixture.label || fixture.expected }`, () => {
|
|
184
|
-
assert.deepStrictEqual(decode.decode(encode.encode(fixture.expected)), fixture.expected, `roundtrip ${ fixture.type }`);
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
describe('specials', () => {
|
|
190
|
-
it('can decode indefinite length items', () => {
|
|
191
|
-
assert.deepStrictEqual(decode.decode(byteUtils.fromHex('9f616f6174ff')), [
|
|
192
|
-
'o',
|
|
193
|
-
't'
|
|
194
|
-
]);
|
|
195
|
-
});
|
|
196
|
-
it('can switch off indefinite length support', () => {
|
|
197
|
-
assert.throws(() => decode.decode(byteUtils.fromHex('9f616f6174ff'), { allowIndefinite: false }), /indefinite/);
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
});
|