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