cborg 2.0.5 → 3.0.0

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 (135) hide show
  1. package/.github/dependabot.yml +16 -0
  2. package/.github/workflows/test-and-release.yml +63 -0
  3. package/CHANGELOG.md +332 -0
  4. package/bench/bench.js +117 -0
  5. package/bench/json.js +124 -0
  6. package/bench/package.json +8 -0
  7. package/lib/bin.js +1 -1
  8. package/package.json +30 -47
  9. package/types/lib/bin.d.ts +1 -0
  10. package/cjs/browser-test/appendix_a.js +0 -643
  11. package/cjs/browser-test/common.js +0 -24
  12. package/cjs/browser-test/node-test-bin.js +0 -348
  13. package/cjs/browser-test/noop-bin-test.js +0 -4
  14. package/cjs/browser-test/test-0uint.js +0 -158
  15. package/cjs/browser-test/test-1negint.js +0 -152
  16. package/cjs/browser-test/test-2bytes.js +0 -254
  17. package/cjs/browser-test/test-3string.js +0 -144
  18. package/cjs/browser-test/test-4array.js +0 -200
  19. package/cjs/browser-test/test-5map.js +0 -667
  20. package/cjs/browser-test/test-6tag.js +0 -75
  21. package/cjs/browser-test/test-7float.js +0 -253
  22. package/cjs/browser-test/test-bl.js +0 -91
  23. package/cjs/browser-test/test-cbor-vectors.js +0 -98
  24. package/cjs/browser-test/test-decode-errors.js +0 -77
  25. package/cjs/browser-test/test-fuzz.js +0 -56
  26. package/cjs/browser-test/test-json.js +0 -281
  27. package/cjs/browser-test/test-length.js +0 -63
  28. package/cjs/cborg.js +0 -14
  29. package/cjs/lib/0uint.js +0 -163
  30. package/cjs/lib/1negint.js +0 -63
  31. package/cjs/lib/2bytes.js +0 -62
  32. package/cjs/lib/3string.js +0 -46
  33. package/cjs/lib/4array.js +0 -51
  34. package/cjs/lib/5map.js +0 -51
  35. package/cjs/lib/6tag.js +0 -36
  36. package/cjs/lib/7float.js +0 -188
  37. package/cjs/lib/bin.js +0 -139
  38. package/cjs/lib/bl.js +0 -77
  39. package/cjs/lib/byte-utils.js +0 -245
  40. package/cjs/lib/common.js +0 -22
  41. package/cjs/lib/decode.js +0 -140
  42. package/cjs/lib/diagnostic.js +0 -124
  43. package/cjs/lib/encode.js +0 -248
  44. package/cjs/lib/is.js +0 -87
  45. package/cjs/lib/json/decode.js +0 -414
  46. package/cjs/lib/json/encode.js +0 -161
  47. package/cjs/lib/json/json.js +0 -12
  48. package/cjs/lib/jump.js +0 -174
  49. package/cjs/lib/length.js +0 -36
  50. package/cjs/lib/token.js +0 -46
  51. package/cjs/node-test/appendix_a.js +0 -643
  52. package/cjs/node-test/common.js +0 -24
  53. package/cjs/node-test/node-test-bin.js +0 -348
  54. package/cjs/node-test/noop-bin-test.js +0 -4
  55. package/cjs/node-test/test-0uint.js +0 -158
  56. package/cjs/node-test/test-1negint.js +0 -152
  57. package/cjs/node-test/test-2bytes.js +0 -254
  58. package/cjs/node-test/test-3string.js +0 -144
  59. package/cjs/node-test/test-4array.js +0 -200
  60. package/cjs/node-test/test-5map.js +0 -667
  61. package/cjs/node-test/test-6tag.js +0 -75
  62. package/cjs/node-test/test-7float.js +0 -253
  63. package/cjs/node-test/test-bl.js +0 -91
  64. package/cjs/node-test/test-cbor-vectors.js +0 -98
  65. package/cjs/node-test/test-decode-errors.js +0 -77
  66. package/cjs/node-test/test-fuzz.js +0 -56
  67. package/cjs/node-test/test-json.js +0 -281
  68. package/cjs/node-test/test-length.js +0 -63
  69. package/cjs/taglib.js +0 -44
  70. package/cli.js +0 -7
  71. package/esm/browser-test/appendix_a.js +0 -640
  72. package/esm/browser-test/common.js +0 -19
  73. package/esm/browser-test/node-test-bin.js +0 -339
  74. package/esm/browser-test/noop-bin-test.js +0 -1
  75. package/esm/browser-test/test-0uint.js +0 -155
  76. package/esm/browser-test/test-1negint.js +0 -149
  77. package/esm/browser-test/test-2bytes.js +0 -252
  78. package/esm/browser-test/test-3string.js +0 -141
  79. package/esm/browser-test/test-4array.js +0 -197
  80. package/esm/browser-test/test-5map.js +0 -664
  81. package/esm/browser-test/test-6tag.js +0 -78
  82. package/esm/browser-test/test-7float.js +0 -250
  83. package/esm/browser-test/test-bl.js +0 -84
  84. package/esm/browser-test/test-cbor-vectors.js +0 -95
  85. package/esm/browser-test/test-decode-errors.js +0 -69
  86. package/esm/browser-test/test-fuzz.js +0 -50
  87. package/esm/browser-test/test-json.js +0 -279
  88. package/esm/browser-test/test-length.js +0 -55
  89. package/esm/cborg.js +0 -12
  90. package/esm/lib/0uint.js +0 -152
  91. package/esm/lib/1negint.js +0 -55
  92. package/esm/lib/2bytes.js +0 -59
  93. package/esm/lib/3string.js +0 -43
  94. package/esm/lib/4array.js +0 -41
  95. package/esm/lib/5map.js +0 -41
  96. package/esm/lib/6tag.js +0 -27
  97. package/esm/lib/7float.js +0 -179
  98. package/esm/lib/bin.js +0 -137
  99. package/esm/lib/bl.js +0 -74
  100. package/esm/lib/byte-utils.js +0 -228
  101. package/esm/lib/common.js +0 -19
  102. package/esm/lib/decode.js +0 -139
  103. package/esm/lib/diagnostic.js +0 -123
  104. package/esm/lib/encode.js +0 -246
  105. package/esm/lib/is.js +0 -81
  106. package/esm/lib/json/decode.js +0 -413
  107. package/esm/lib/json/encode.js +0 -160
  108. package/esm/lib/json/json.js +0 -10
  109. package/esm/lib/jump.js +0 -168
  110. package/esm/lib/length.js +0 -31
  111. package/esm/lib/token.js +0 -43
  112. package/esm/node-test/appendix_a.js +0 -640
  113. package/esm/node-test/common.js +0 -19
  114. package/esm/node-test/node-test-bin.js +0 -339
  115. package/esm/node-test/noop-bin-test.js +0 -1
  116. package/esm/node-test/test-0uint.js +0 -155
  117. package/esm/node-test/test-1negint.js +0 -149
  118. package/esm/node-test/test-2bytes.js +0 -252
  119. package/esm/node-test/test-3string.js +0 -141
  120. package/esm/node-test/test-4array.js +0 -197
  121. package/esm/node-test/test-5map.js +0 -664
  122. package/esm/node-test/test-6tag.js +0 -78
  123. package/esm/node-test/test-7float.js +0 -250
  124. package/esm/node-test/test-bl.js +0 -84
  125. package/esm/node-test/test-cbor-vectors.js +0 -95
  126. package/esm/node-test/test-decode-errors.js +0 -69
  127. package/esm/node-test/test-fuzz.js +0 -50
  128. package/esm/node-test/test-json.js +0 -279
  129. package/esm/node-test/test-length.js +0 -55
  130. package/esm/package.json +0 -4
  131. package/esm/taglib.js +0 -37
  132. package/index.js +0 -1
  133. package/json +0 -1
  134. package/length +0 -1
  135. 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
- });