cborg 2.0.4 → 3.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 (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 +29 -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,339 +0,0 @@
1
- import chai from 'chai';
2
- import { exec } from 'child_process';
3
- import process from 'process';
4
- import path from 'path';
5
- import { platform } from 'os';
6
- import { fileURLToPath } from 'url';
7
- const {assert} = chai;
8
- const fixture1JsonString = '{"a":1,"b":[2,3],"smile":"\uD83D\uDE00"}';
9
- const fixture1JsonPrettyString = `{
10
- "a": 1,
11
- "b": [
12
- 2,
13
- 3
14
- ],
15
- "smile": "😀"
16
- }
17
- `;
18
- const fixture1HexString = 'a3616101616282020365736d696c6564f09f9880';
19
- const fixture1Bin = fromHex(fixture1HexString);
20
- const fixture1BinString = new TextDecoder().decode(fixture1Bin);
21
- const fixture1DiagnosticString = `a3 # map(3)
22
- 61 # string(1)
23
- 61 # "a"
24
- 01 # uint(1)
25
- 61 # string(1)
26
- 62 # "b"
27
- 82 # array(2)
28
- 02 # uint(2)
29
- 03 # uint(3)
30
- 65 # string(5)
31
- 736d696c65 # "smile"
32
- 64 # string(2)
33
- f09f9880 # "😀"
34
- `;
35
- const fixture2HexString = 'a4616101616282020363627566440102036165736d696c6564f09f9880';
36
- const fixture2DiagnosticString = `a4 # map(4)
37
- 61 # string(1)
38
- 61 # "a"
39
- 01 # uint(1)
40
- 61 # string(1)
41
- 62 # "b"
42
- 82 # array(2)
43
- 02 # uint(2)
44
- 03 # uint(3)
45
- 63 # string(3)
46
- 627566 # "buf"
47
- 44 # bytes(4)
48
- 01020361 # "\\x01\\x02\\x03a"
49
- 65 # string(5)
50
- 736d696c65 # "smile"
51
- 64 # string(2)
52
- f09f9880 # "😀"
53
- `;
54
- const binPath = path.join(path.dirname(fileURLToPath(import.meta.url)), '../lib/bin.js');
55
- function fromHex(hex) {
56
- return new Uint8Array(hex.split('').map((c, i, d) => i % 2 === 0 ? `0x${ c }${ d[i + 1] }` : '').filter(Boolean).map(e => parseInt(e, 16)));
57
- }
58
- async function execBin(cmd, stdin) {
59
- return new Promise((resolve, reject) => {
60
- const cp = exec(`"${ process.execPath }" "${ binPath }" ${ cmd }`, (err, stdout, stderr) => {
61
- if (err) {
62
- err.stdout = stdout;
63
- err.stderr = stderr;
64
- return reject(err);
65
- }
66
- resolve({
67
- stdout,
68
- stderr
69
- });
70
- });
71
- if (stdin != null) {
72
- cp.on('spawn', () => {
73
- cp.stdin.write(stdin);
74
- cp.stdin.end();
75
- });
76
- }
77
- });
78
- }
79
- describe('Bin', () => {
80
- it('usage', async () => {
81
- try {
82
- await execBin('');
83
- assert.fail('should have errored');
84
- } catch (e) {
85
- assert.strictEqual(e.stdout, '');
86
- assert.strictEqual(e.stderr, `Usage: cborg <command> <args>
87
- Valid commands:
88
- \tbin2diag [binary input]
89
- \tbin2hex [binary input]
90
- \tbin2json [--pretty] [binary input]
91
- \tdiag2bin [diagnostic input]
92
- \tdiag2hex [diagnostic input]
93
- \tdiag2json [--pretty] [diagnostic input]
94
- \thex2bin [hex input]
95
- \thex2diag [hex input]
96
- \thex2json [--pretty] [hex input]
97
- \tjson2bin '[json input]'
98
- \tjson2diag '[json input]'
99
- \tjson2hex '[json input]'
100
- Input may either be supplied as an argument or piped via stdin
101
- `);
102
- }
103
- });
104
- it('bad cmd', async () => {
105
- try {
106
- await execBin('blip');
107
- assert.fail('should have errored');
108
- } catch (e) {
109
- assert.strictEqual(e.stdout, '');
110
- assert.strictEqual(e.stderr, `Unknown command: 'blip'
111
- Usage: cborg <command> <args>
112
- Valid commands:
113
- \tbin2diag [binary input]
114
- \tbin2hex [binary input]
115
- \tbin2json [--pretty] [binary input]
116
- \tdiag2bin [diagnostic input]
117
- \tdiag2hex [diagnostic input]
118
- \tdiag2json [--pretty] [diagnostic input]
119
- \thex2bin [hex input]
120
- \thex2diag [hex input]
121
- \thex2json [--pretty] [hex input]
122
- \tjson2bin '[json input]'
123
- \tjson2diag '[json input]'
124
- \tjson2hex '[json input]'
125
- Input may either be supplied as an argument or piped via stdin
126
- `);
127
- }
128
- });
129
- it('help', async () => {
130
- const {stdout, stderr} = await execBin('help');
131
- assert.strictEqual(stdout, '');
132
- assert.strictEqual(stderr, `Usage: cborg <command> <args>
133
- Valid commands:
134
- \tbin2diag [binary input]
135
- \tbin2hex [binary input]
136
- \tbin2json [--pretty] [binary input]
137
- \tdiag2bin [diagnostic input]
138
- \tdiag2hex [diagnostic input]
139
- \tdiag2json [--pretty] [diagnostic input]
140
- \thex2bin [hex input]
141
- \thex2diag [hex input]
142
- \thex2json [--pretty] [hex input]
143
- \tjson2bin '[json input]'
144
- \tjson2diag '[json input]'
145
- \tjson2hex '[json input]'
146
- Input may either be supplied as an argument or piped via stdin
147
- `);
148
- });
149
- it('bin2diag (stdin)', async () => {
150
- const {stdout, stderr} = await execBin('bin2diag', fixture1Bin);
151
- assert.strictEqual(stderr, '');
152
- assert.strictEqual(stdout, fixture1DiagnosticString);
153
- });
154
- it('bin2hex (stdin)', async () => {
155
- const {stdout, stderr} = await execBin('bin2hex', fixture1Bin);
156
- assert.strictEqual(stderr, '');
157
- assert.strictEqual(stdout, `${ fixture1HexString }\n`);
158
- });
159
- it('bin2json (stdin)', async () => {
160
- const {stdout, stderr} = await execBin('bin2json', fixture1Bin);
161
- assert.strictEqual(stderr, '');
162
- assert.strictEqual(stdout, `${ fixture1JsonString }\n`);
163
- });
164
- it('bin2json pretty (stdin)', async () => {
165
- const {stdout, stderr} = await execBin('bin2json --pretty', fixture1Bin);
166
- assert.strictEqual(stderr, '');
167
- assert.strictEqual(stdout, fixture1JsonPrettyString);
168
- });
169
- for (const stdin of [
170
- true,
171
- false
172
- ]) {
173
- if (platform() !== 'win32' || stdin) {
174
- it(`diag2bin${ stdin ? ' (stdin)' : '' }`, async () => {
175
- const {stdout, stderr} = !stdin ? await execBin(`diag2bin '${ fixture1DiagnosticString }'`) : await execBin('diag2bin', fixture1DiagnosticString);
176
- assert.strictEqual(stderr, '');
177
- assert.strictEqual(stdout, fixture1BinString);
178
- });
179
- it(`diag2hex${ stdin ? ' (stdin)' : '' }`, async () => {
180
- const {stdout, stderr} = !stdin ? await execBin(`diag2hex '${ fixture1DiagnosticString }'`) : await execBin('diag2hex', fixture1DiagnosticString);
181
- assert.strictEqual(stderr, '');
182
- assert.strictEqual(stdout, `${ fixture1HexString }\n`);
183
- });
184
- it(`diag2json${ stdin ? ' (stdin)' : '' }`, async () => {
185
- const {stdout, stderr} = !stdin ? await execBin(`diag2json '${ fixture1DiagnosticString }'`) : await execBin('diag2json', fixture1DiagnosticString);
186
- assert.strictEqual(stderr, '');
187
- assert.strictEqual(stdout, `${ fixture1JsonString }\n`);
188
- });
189
- it(`diag2json pretty${ stdin ? ' (stdin)' : '' }`, async () => {
190
- const {stdout, stderr} = !stdin ? await execBin(`diag2json --pretty '${ fixture1DiagnosticString }'`) : await execBin('diag2json --pretty', fixture1DiagnosticString);
191
- assert.strictEqual(stderr, '');
192
- assert.strictEqual(stdout, fixture1JsonPrettyString);
193
- });
194
- }
195
- it(`hex2bin${ stdin ? ' (stdin)' : '' }`, async () => {
196
- const {stdout, stderr} = !stdin ? await execBin(`hex2bin ${ fixture1HexString }`) : await execBin('hex2bin', fixture1HexString);
197
- assert.strictEqual(stderr, '');
198
- assert.strictEqual(stdout, fixture1BinString);
199
- });
200
- it(`hex2diag${ stdin ? ' (stdin)' : '' }`, async () => {
201
- const {stdout, stderr} = !stdin ? await execBin(`hex2diag ${ fixture2HexString }`) : await execBin('hex2diag', fixture2HexString);
202
- assert.strictEqual(stderr, '');
203
- assert.strictEqual(stdout, fixture2DiagnosticString);
204
- });
205
- it(`hex2json${ stdin ? ' (stdin)' : '' }`, async () => {
206
- const {stdout, stderr} = !stdin ? await execBin(`hex2json ${ fixture1HexString }`) : await execBin('hex2json', fixture1HexString);
207
- assert.strictEqual(stderr, '');
208
- assert.strictEqual(stdout, `${ fixture1JsonString }\n`);
209
- });
210
- it(`hex2json pretty${ stdin ? ' (stdin)' : '' }`, async () => {
211
- const {stdout, stderr} = !stdin ? await execBin(`hex2json --pretty ${ fixture1HexString }`) : await execBin('hex2json --pretty', fixture1HexString);
212
- assert.strictEqual(stderr, '');
213
- assert.strictEqual(stdout, fixture1JsonPrettyString);
214
- });
215
- it(`json2bin${ stdin ? ' (stdin)' : '' }`, async () => {
216
- const {stdout, stderr} = !stdin ? await execBin('json2bin "{\\"a\\":1,\\"b\\":[2,3],\\"smile\\":\\"\uD83D\uDE00\\"}"') : await execBin('json2bin', fixture1JsonString);
217
- assert.strictEqual(stderr, '');
218
- assert.strictEqual(stdout, fixture1BinString);
219
- });
220
- it(`json2diag${ stdin ? ' (stdin)' : '' }`, async () => {
221
- const {stdout, stderr} = !stdin ? await execBin('json2diag "{\\"a\\":1,\\"b\\":[2,3],\\"smile\\":\\"\uD83D\uDE00\\"}"') : await execBin('json2diag', fixture1JsonString);
222
- assert.strictEqual(stderr, '');
223
- assert.strictEqual(stdout, fixture1DiagnosticString);
224
- });
225
- it(`json2hex${ stdin ? ' (stdin)' : '' }`, async () => {
226
- const {stdout, stderr} = !stdin ? await execBin(`json2hex "${ fixture1JsonString.replace(/"/g, '\\"') }"`) : await execBin('json2hex', fixture1JsonString);
227
- assert.strictEqual(stderr, '');
228
- assert.strictEqual(stdout, `${ fixture1HexString }\n`);
229
- });
230
- }
231
- it('diag indenting', async () => {
232
- const {stdout, stderr} = await execBin('json2diag', '{"a":[],"b":{},"c":{"a":1,"b":{"a":{"a":{}}}},"d":{"a":{"a":{"a":1},"b":2,"c":[]}},"e":[[[[{"a":{}}]]]],"f":1}');
233
- assert.strictEqual(stderr, '');
234
- assert.strictEqual(stdout, `a6 # map(6)
235
- 61 # string(1)
236
- 61 # "a"
237
- 80 # array(0)
238
- 61 # string(1)
239
- 62 # "b"
240
- a0 # map(0)
241
- 61 # string(1)
242
- 63 # "c"
243
- a2 # map(2)
244
- 61 # string(1)
245
- 61 # "a"
246
- 01 # uint(1)
247
- 61 # string(1)
248
- 62 # "b"
249
- a1 # map(1)
250
- 61 # string(1)
251
- 61 # "a"
252
- a1 # map(1)
253
- 61 # string(1)
254
- 61 # "a"
255
- a0 # map(0)
256
- 61 # string(1)
257
- 64 # "d"
258
- a1 # map(1)
259
- 61 # string(1)
260
- 61 # "a"
261
- a3 # map(3)
262
- 61 # string(1)
263
- 61 # "a"
264
- a1 # map(1)
265
- 61 # string(1)
266
- 61 # "a"
267
- 01 # uint(1)
268
- 61 # string(1)
269
- 62 # "b"
270
- 02 # uint(2)
271
- 61 # string(1)
272
- 63 # "c"
273
- 80 # array(0)
274
- 61 # string(1)
275
- 65 # "e"
276
- 81 # array(1)
277
- 81 # array(1)
278
- 81 # array(1)
279
- 81 # array(1)
280
- a1 # map(1)
281
- 61 # string(1)
282
- 61 # "a"
283
- a0 # map(0)
284
- 61 # string(1)
285
- 66 # "f"
286
- 01 # uint(1)
287
- `);
288
- });
289
- describe('diag length bytes', () => {
290
- it('compact', async () => {
291
- const {stdout, stderr} = await execBin('json2diag', '"aaaaaaaaaaaaaaaaaaaaaaa"');
292
- assert.strictEqual(stderr, '');
293
- assert.strictEqual(stdout, `77 # string(23)
294
- 6161616161616161616161616161616161616161616161 # "aaaaaaaaaaaaaaaaaaaaaaa"
295
- `);
296
- });
297
- it('1-byte', async () => {
298
- const {stdout, stderr} = await execBin('json2diag', '"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"');
299
- assert.strictEqual(stderr, '');
300
- assert.strictEqual(stdout, `78 23 # string(35)
301
- 6161616161616161616161616161616161616161616161 # "aaaaaaaaaaaaaaaaaaaaaaa"
302
- 616161616161616161616161 # "aaaaaaaaaaaa"
303
- `);
304
- });
305
- it('2-byte', async () => {
306
- const {stdout, stderr} = await execBin('json2diag', '"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"');
307
- assert.strictEqual(stderr, '');
308
- assert.strictEqual(stdout, `79 0100 # string(256)
309
- 6161616161616161616161616161616161616161616161 # "aaaaaaaaaaaaaaaaaaaaaaa"
310
- 6161616161616161616161616161616161616161616161 # "aaaaaaaaaaaaaaaaaaaaaaa"
311
- 6161616161616161616161616161616161616161616161 # "aaaaaaaaaaaaaaaaaaaaaaa"
312
- 6161616161616161616161616161616161616161616161 # "aaaaaaaaaaaaaaaaaaaaaaa"
313
- 6161616161616161616161616161616161616161616161 # "aaaaaaaaaaaaaaaaaaaaaaa"
314
- 6161616161616161616161616161616161616161616161 # "aaaaaaaaaaaaaaaaaaaaaaa"
315
- 6161616161616161616161616161616161616161616161 # "aaaaaaaaaaaaaaaaaaaaaaa"
316
- 6161616161616161616161616161616161616161616161 # "aaaaaaaaaaaaaaaaaaaaaaa"
317
- 6161616161616161616161616161616161616161616161 # "aaaaaaaaaaaaaaaaaaaaaaa"
318
- 6161616161616161616161616161616161616161616161 # "aaaaaaaaaaaaaaaaaaaaaaa"
319
- 6161616161616161616161616161616161616161616161 # "aaaaaaaaaaaaaaaaaaaaaaa"
320
- 616161 # "aaa"
321
- `);
322
- });
323
- });
324
- it('diag non-utf8 and non-printable ascii', async () => {
325
- const input = '7864f55ff8f12508b63ef2bfeca7557ae90df6311a5ec1631b4a1fa843310bd9c3a710eaace5a1bdd72ad0bfe049771c11e756338bd93865e645f1adec9b9c99ef407fbd4fc6859e7904c5ad7dc9bd10a5cc16973d5b28ec1a6dd43d9f82f9f18c3d03418e35';
326
- let {stdout, stderr} = await execBin(`hex2diag ${ input }`);
327
- assert.strictEqual(stderr, '');
328
- assert.strictEqual(stdout, `78 64 # string(86)
329
- f55ff8f12508b63ef2bfeca7557ae90df6311a5ec1631b # "õ_øñ%\\x08¶>ò¿ì§Uzé\\x0dö1\\x1a^Ác\\x1b"
330
- 4a1fa843310bd9c3a710eaace5a1bdd72ad0bfe049771c # "J\\x1f¨C1\\x0bÙç\\x10ê¬å¡½×*пàIw\\x1c"
331
- 11e756338bd93865e645f1adec9b9c99ef407fbd4fc685 # "\\x11çV3\\x8bÙ8eæEñ\\xadì\\x9b\\x9c\\x99ï@\\x7f½OÆ\\x85"
332
- 9e7904c5ad7dc9bd10a5cc16973d5b28ec1a6dd43d9f82 # "\\x9ey\\x04Å\\xad}ɽ\\x10¥Ì\\x16\\x97=[(ì\\x1amÔ=\\x9f\\x82"
333
- f9f18c3d03418e35 # "ùñ\\x8c=\\x03A\\x8e5"
334
- `);
335
- ({stdout, stderr} = await execBin('diag2hex', stdout));
336
- assert.strictEqual(stderr, '');
337
- assert.strictEqual(stdout, `${ input }\n`);
338
- });
339
- });
@@ -1 +0,0 @@
1
- import bin from '../lib/bin.js';
@@ -1,155 +0,0 @@
1
- import chai from 'chai';
2
- import {
3
- decode,
4
- encode
5
- } from '../cborg.js';
6
- import {
7
- fromHex,
8
- toHex
9
- } from '../lib/byte-utils.js';
10
- const {assert} = chai;
11
- const fixtures = [
12
- {
13
- data: '00',
14
- expected: 0,
15
- type: 'uint8'
16
- },
17
- {
18
- data: '02',
19
- expected: 2,
20
- type: 'uint8'
21
- },
22
- {
23
- data: '18ff',
24
- expected: 255,
25
- type: 'uint8'
26
- },
27
- {
28
- data: '1901f4',
29
- expected: 500,
30
- type: 'uint16'
31
- },
32
- {
33
- data: '1900ff',
34
- expected: 255,
35
- type: 'uint16',
36
- strict: false
37
- },
38
- {
39
- data: '19ffff',
40
- expected: 65535,
41
- type: 'uint16'
42
- },
43
- {
44
- data: '1a000000ff',
45
- expected: 255,
46
- type: 'uint32',
47
- strict: false
48
- },
49
- {
50
- data: '1a00010000',
51
- expected: 65536,
52
- type: 'uint32'
53
- },
54
- {
55
- data: '1a000f4240',
56
- expected: 1000000,
57
- type: 'uint32'
58
- },
59
- {
60
- data: '1aa5f702b3',
61
- expected: 2784428723,
62
- type: 'uint32'
63
- },
64
- {
65
- data: '1b00000000000000ff',
66
- expected: 255,
67
- type: 'uint64',
68
- strict: false
69
- },
70
- {
71
- data: '1b0016db6db6db6db7',
72
- expected: Number.MAX_SAFE_INTEGER / 1.4,
73
- type: 'uint64'
74
- },
75
- {
76
- data: '1b001fffffffffffff',
77
- expected: Number.MAX_SAFE_INTEGER,
78
- type: 'uint64'
79
- },
80
- {
81
- data: '1ba5f702b3a5f702b3',
82
- expected: BigInt('11959030306112471731'),
83
- type: 'uint64'
84
- },
85
- {
86
- data: '1bffffffffffffffff',
87
- expected: BigInt('18446744073709551615'),
88
- type: 'uint64'
89
- }
90
- ];
91
- describe('uint', () => {
92
- describe('decode', () => {
93
- for (const fixture of fixtures) {
94
- const data = fromHex(fixture.data);
95
- it(`should decode ${ fixture.type }=${ fixture.expected }`, () => {
96
- assert.ok(decode(data) === fixture.expected, `decode ${ fixture.type } ${ decode(data) } != ${ fixture.expected }`);
97
- if (fixture.strict === false) {
98
- assert.throws(() => decode(data, { strict: true }), Error, 'CBOR decode error: integer encoded in more bytes than necessary (strict decode)');
99
- } else {
100
- assert.ok(decode(data, { strict: true }) === fixture.expected, `decode ${ fixture.type }`);
101
- }
102
- });
103
- }
104
- });
105
- it('should throw error', () => {
106
- assert.throws(() => decode(fromHex('1ca5f702b3a5f702b3')), Error, 'CBOR decode error: encountered invalid minor (28) for major 0');
107
- assert.throws(() => decode(fromHex('1ba5f702b3a5f702')), Error, 'CBOR decode error: not enough data for type');
108
- });
109
- describe('encode', () => {
110
- for (const fixture of fixtures) {
111
- it(`should encode ${ fixture.type }=${ fixture.expected }`, () => {
112
- if (fixture.strict === false) {
113
- assert.notStrictEqual(toHex(encode(fixture.expected)), fixture.data, `encode ${ fixture.type } !strict`);
114
- } else {
115
- assert.strictEqual(toHex(encode(fixture.expected)), fixture.data, `encode ${ fixture.type }`);
116
- }
117
- });
118
- }
119
- });
120
- describe('roundtrip', () => {
121
- for (const fixture of fixtures) {
122
- if (fixture.strict !== false) {
123
- it(`should roundtrip ${ fixture.type }=${ fixture.expected }`, () => {
124
- assert.ok(decode(encode(fixture.expected)) === fixture.expected, `roundtrip ${ fixture.type }`);
125
- });
126
- }
127
- }
128
- });
129
- describe('toobig', () => {
130
- it('bigger than 64-bit', () => {
131
- assert.doesNotThrow(() => encode(BigInt('18446744073709551615')));
132
- assert.throws(() => encode(BigInt('18446744073709551616')), /BigInt larger than allowable range/);
133
- });
134
- it('disallow BigInt', () => {
135
- for (const fixture of fixtures) {
136
- const data = fromHex(fixture.data);
137
- if (!Number.isSafeInteger(fixture.expected)) {
138
- assert.throws(() => decode(data, { allowBigInt: false }), /safe integer range/);
139
- } else {
140
- assert.ok(decode(data, { allowBigInt: false }) === fixture.expected, `decode ${ fixture.type }`);
141
- }
142
- }
143
- });
144
- });
145
- describe('toosmall', () => {
146
- for (const fixture of fixtures) {
147
- if (fixture.strict !== false && typeof fixture.expected === 'number') {
148
- const small = BigInt(fixture.expected);
149
- it(`should encode ${ small }n`, () => {
150
- assert.strictEqual(toHex(encode(BigInt(small))), fixture.data, `encode ${ small }`);
151
- });
152
- }
153
- }
154
- });
155
- });
@@ -1,149 +0,0 @@
1
- import chai from 'chai';
2
- import {
3
- decode,
4
- encode
5
- } from '../cborg.js';
6
- import {
7
- fromHex,
8
- toHex
9
- } from '../lib/byte-utils.js';
10
- const {assert} = chai;
11
- const fixtures = [
12
- {
13
- data: '20',
14
- expected: -1,
15
- type: 'negint8'
16
- },
17
- {
18
- data: '22',
19
- expected: -3,
20
- type: 'negint8'
21
- },
22
- {
23
- data: '3863',
24
- expected: -100,
25
- type: 'negint8'
26
- },
27
- {
28
- data: '38ff',
29
- expected: -256,
30
- type: 'negint8'
31
- },
32
- {
33
- data: '3900ff',
34
- expected: -256,
35
- type: 'negint16',
36
- strict: false
37
- },
38
- {
39
- data: '3901f4',
40
- expected: -501,
41
- type: 'negint16'
42
- },
43
- {
44
- data: '3a000000ff',
45
- expected: -256,
46
- type: 'negint32',
47
- strict: false
48
- },
49
- {
50
- data: '3aa5f702b3',
51
- expected: -2784428724,
52
- type: 'negint32'
53
- },
54
- {
55
- data: '3b00000000000000ff',
56
- expected: -256,
57
- type: 'negint32',
58
- strict: false
59
- },
60
- {
61
- data: '3b0016db6db6db6db7',
62
- expected: Number.MIN_SAFE_INTEGER / 1.4 - 1,
63
- type: 'negint64'
64
- },
65
- {
66
- data: '3b001ffffffffffffe',
67
- expected: Number.MIN_SAFE_INTEGER,
68
- type: 'negint64'
69
- },
70
- {
71
- data: '3b001fffffffffffff',
72
- expected: BigInt('-9007199254740992'),
73
- type: 'negint64'
74
- },
75
- {
76
- data: '3b0020000000000000',
77
- expected: BigInt('-9007199254740993'),
78
- type: 'negint64'
79
- },
80
- {
81
- data: '3ba5f702b3a5f702b3',
82
- expected: BigInt('-11959030306112471732'),
83
- type: 'negint64'
84
- },
85
- {
86
- data: '3bffffffffffffffff',
87
- expected: BigInt('-18446744073709551616'),
88
- type: 'negint64'
89
- }
90
- ];
91
- describe('negint', () => {
92
- describe('decode', () => {
93
- for (const fixture of fixtures) {
94
- const data = fromHex(fixture.data);
95
- it(`should decode ${ fixture.type }=${ fixture.expected }`, () => {
96
- assert.ok(decode(data) === fixture.expected, `decode ${ fixture.type } (${ decode(data) } != ${ fixture.expected })`);
97
- if (fixture.strict === false) {
98
- assert.throws(() => decode(data, { strict: true }), Error, 'CBOR decode error: integer encoded in more bytes than necessary (strict decode)');
99
- } else {
100
- assert.strictEqual(decode(data, { strict: true }), fixture.expected, `decode ${ fixture.type }`);
101
- }
102
- });
103
- }
104
- });
105
- describe('encode', () => {
106
- for (const fixture of fixtures) {
107
- it(`should encode ${ fixture.type }=${ fixture.expected }`, () => {
108
- if (fixture.strict === false) {
109
- assert.notStrictEqual(toHex(encode(fixture.expected)), fixture.data, `encode ${ fixture.type } !strict`);
110
- } else {
111
- assert.strictEqual(toHex(encode(fixture.expected)), fixture.data, `encode ${ fixture.type }`);
112
- }
113
- });
114
- }
115
- });
116
- describe('roundtrip', () => {
117
- for (const fixture of fixtures) {
118
- it(`should roundtrip ${ fixture.type }=${ fixture.expected }`, () => {
119
- assert.ok(decode(encode(fixture.expected)) === fixture.expected, `roundtrip ${ fixture.type }`);
120
- });
121
- }
122
- });
123
- describe('toobig', () => {
124
- it('bigger than 64-bit', () => {
125
- assert.doesNotThrow(() => encode(BigInt('-18446744073709551616')));
126
- assert.throws(() => encode(BigInt('-18446744073709551617')), /BigInt larger than allowable range/);
127
- });
128
- it('disallow BigInt', () => {
129
- for (const fixture of fixtures) {
130
- const data = fromHex(fixture.data);
131
- if (!Number.isSafeInteger(fixture.expected)) {
132
- assert.throws(() => decode(data, { allowBigInt: false }), /safe integer range/);
133
- } else {
134
- assert.ok(decode(data, { allowBigInt: false }) === fixture.expected, `decode ${ fixture.type }`);
135
- }
136
- }
137
- });
138
- });
139
- describe('toosmall', () => {
140
- for (const fixture of fixtures) {
141
- if (fixture.strict !== false && typeof fixture.expected === 'number') {
142
- const small = BigInt(fixture.expected);
143
- it(`should encode ${ small }n`, () => {
144
- assert.strictEqual(toHex(encode(BigInt(small))), fixture.data, `encode ${ small }`);
145
- });
146
- }
147
- }
148
- });
149
- });