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
package/esm/lib/encode.js DELETED
@@ -1,246 +0,0 @@
1
- import { is } from './is.js';
2
- import {
3
- Token,
4
- Type
5
- } from './token.js';
6
- import { Bl } from './bl.js';
7
- import { encodeErrPrefix } from './common.js';
8
- import { quickEncodeToken } from './jump.js';
9
- import { asU8A } from './byte-utils.js';
10
- import { encodeUint } from './0uint.js';
11
- import { encodeNegint } from './1negint.js';
12
- import { encodeBytes } from './2bytes.js';
13
- import { encodeString } from './3string.js';
14
- import { encodeArray } from './4array.js';
15
- import { encodeMap } from './5map.js';
16
- import { encodeTag } from './6tag.js';
17
- import { encodeFloat } from './7float.js';
18
- const defaultEncodeOptions = {
19
- float64: false,
20
- mapSorter,
21
- quickEncodeToken
22
- };
23
- export function makeCborEncoders() {
24
- const encoders = [];
25
- encoders[Type.uint.major] = encodeUint;
26
- encoders[Type.negint.major] = encodeNegint;
27
- encoders[Type.bytes.major] = encodeBytes;
28
- encoders[Type.string.major] = encodeString;
29
- encoders[Type.array.major] = encodeArray;
30
- encoders[Type.map.major] = encodeMap;
31
- encoders[Type.tag.major] = encodeTag;
32
- encoders[Type.float.major] = encodeFloat;
33
- return encoders;
34
- }
35
- const cborEncoders = makeCborEncoders();
36
- const buf = new Bl();
37
- class Ref {
38
- constructor(obj, parent) {
39
- this.obj = obj;
40
- this.parent = parent;
41
- }
42
- includes(obj) {
43
- let p = this;
44
- do {
45
- if (p.obj === obj) {
46
- return true;
47
- }
48
- } while (p = p.parent);
49
- return false;
50
- }
51
- static createCheck(stack, obj) {
52
- if (stack && stack.includes(obj)) {
53
- throw new Error(`${ encodeErrPrefix } object contains circular references`);
54
- }
55
- return new Ref(obj, stack);
56
- }
57
- }
58
- const simpleTokens = {
59
- null: new Token(Type.null, null),
60
- undefined: new Token(Type.undefined, undefined),
61
- true: new Token(Type.true, true),
62
- false: new Token(Type.false, false),
63
- emptyArray: new Token(Type.array, 0),
64
- emptyMap: new Token(Type.map, 0)
65
- };
66
- const typeEncoders = {
67
- number(obj, _typ, _options, _refStack) {
68
- if (!Number.isInteger(obj) || !Number.isSafeInteger(obj)) {
69
- return new Token(Type.float, obj);
70
- } else if (obj >= 0) {
71
- return new Token(Type.uint, obj);
72
- } else {
73
- return new Token(Type.negint, obj);
74
- }
75
- },
76
- bigint(obj, _typ, _options, _refStack) {
77
- if (obj >= BigInt(0)) {
78
- return new Token(Type.uint, obj);
79
- } else {
80
- return new Token(Type.negint, obj);
81
- }
82
- },
83
- Uint8Array(obj, _typ, _options, _refStack) {
84
- return new Token(Type.bytes, obj);
85
- },
86
- string(obj, _typ, _options, _refStack) {
87
- return new Token(Type.string, obj);
88
- },
89
- boolean(obj, _typ, _options, _refStack) {
90
- return obj ? simpleTokens.true : simpleTokens.false;
91
- },
92
- null(_obj, _typ, _options, _refStack) {
93
- return simpleTokens.null;
94
- },
95
- undefined(_obj, _typ, _options, _refStack) {
96
- return simpleTokens.undefined;
97
- },
98
- ArrayBuffer(obj, _typ, _options, _refStack) {
99
- return new Token(Type.bytes, new Uint8Array(obj));
100
- },
101
- DataView(obj, _typ, _options, _refStack) {
102
- return new Token(Type.bytes, new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength));
103
- },
104
- Array(obj, _typ, options, refStack) {
105
- if (!obj.length) {
106
- if (options.addBreakTokens === true) {
107
- return [
108
- simpleTokens.emptyArray,
109
- new Token(Type.break)
110
- ];
111
- }
112
- return simpleTokens.emptyArray;
113
- }
114
- refStack = Ref.createCheck(refStack, obj);
115
- const entries = [];
116
- let i = 0;
117
- for (const e of obj) {
118
- entries[i++] = objectToTokens(e, options, refStack);
119
- }
120
- if (options.addBreakTokens) {
121
- return [
122
- new Token(Type.array, obj.length),
123
- entries,
124
- new Token(Type.break)
125
- ];
126
- }
127
- return [
128
- new Token(Type.array, obj.length),
129
- entries
130
- ];
131
- },
132
- Object(obj, typ, options, refStack) {
133
- const isMap = typ !== 'Object';
134
- const keys = isMap ? obj.keys() : Object.keys(obj);
135
- const length = isMap ? obj.size : keys.length;
136
- if (!length) {
137
- if (options.addBreakTokens === true) {
138
- return [
139
- simpleTokens.emptyMap,
140
- new Token(Type.break)
141
- ];
142
- }
143
- return simpleTokens.emptyMap;
144
- }
145
- refStack = Ref.createCheck(refStack, obj);
146
- const entries = [];
147
- let i = 0;
148
- for (const key of keys) {
149
- entries[i++] = [
150
- objectToTokens(key, options, refStack),
151
- objectToTokens(isMap ? obj.get(key) : obj[key], options, refStack)
152
- ];
153
- }
154
- sortMapEntries(entries, options);
155
- if (options.addBreakTokens) {
156
- return [
157
- new Token(Type.map, length),
158
- entries,
159
- new Token(Type.break)
160
- ];
161
- }
162
- return [
163
- new Token(Type.map, length),
164
- entries
165
- ];
166
- }
167
- };
168
- typeEncoders.Map = typeEncoders.Object;
169
- typeEncoders.Buffer = typeEncoders.Uint8Array;
170
- for (const typ of 'Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64'.split(' ')) {
171
- typeEncoders[`${ typ }Array`] = typeEncoders.DataView;
172
- }
173
- function objectToTokens(obj, options = {}, refStack) {
174
- const typ = is(obj);
175
- const customTypeEncoder = options && options.typeEncoders && options.typeEncoders[typ] || typeEncoders[typ];
176
- if (typeof customTypeEncoder === 'function') {
177
- const tokens = customTypeEncoder(obj, typ, options, refStack);
178
- if (tokens != null) {
179
- return tokens;
180
- }
181
- }
182
- const typeEncoder = typeEncoders[typ];
183
- if (!typeEncoder) {
184
- throw new Error(`${ encodeErrPrefix } unsupported type: ${ typ }`);
185
- }
186
- return typeEncoder(obj, typ, options, refStack);
187
- }
188
- function sortMapEntries(entries, options) {
189
- if (options.mapSorter) {
190
- entries.sort(options.mapSorter);
191
- }
192
- }
193
- function mapSorter(e1, e2) {
194
- const keyToken1 = Array.isArray(e1[0]) ? e1[0][0] : e1[0];
195
- const keyToken2 = Array.isArray(e2[0]) ? e2[0][0] : e2[0];
196
- if (keyToken1.type !== keyToken2.type) {
197
- return keyToken1.type.compare(keyToken2.type);
198
- }
199
- const major = keyToken1.type.major;
200
- const tcmp = cborEncoders[major].compareTokens(keyToken1, keyToken2);
201
- if (tcmp === 0) {
202
- console.warn('WARNING: complex key types used, CBOR key sorting guarantees are gone');
203
- }
204
- return tcmp;
205
- }
206
- function tokensToEncoded(buf, tokens, encoders, options) {
207
- if (Array.isArray(tokens)) {
208
- for (const token of tokens) {
209
- tokensToEncoded(buf, token, encoders, options);
210
- }
211
- } else {
212
- encoders[tokens.type.major](buf, tokens, options);
213
- }
214
- }
215
- function encodeCustom(data, encoders, options) {
216
- const tokens = objectToTokens(data, options);
217
- if (!Array.isArray(tokens) && options.quickEncodeToken) {
218
- const quickBytes = options.quickEncodeToken(tokens);
219
- if (quickBytes) {
220
- return quickBytes;
221
- }
222
- const encoder = encoders[tokens.type.major];
223
- if (encoder.encodedSize) {
224
- const size = encoder.encodedSize(tokens, options);
225
- const buf = new Bl(size);
226
- encoder(buf, tokens, options);
227
- if (buf.chunks.length !== 1) {
228
- throw new Error(`Unexpected error: pre-calculated length for ${ tokens } was wrong`);
229
- }
230
- return asU8A(buf.chunks[0]);
231
- }
232
- }
233
- buf.reset();
234
- tokensToEncoded(buf, tokens, encoders, options);
235
- return buf.toBytes(true);
236
- }
237
- function encode(data, options) {
238
- options = Object.assign({}, defaultEncodeOptions, options);
239
- return encodeCustom(data, cborEncoders, options);
240
- }
241
- export {
242
- objectToTokens,
243
- encode,
244
- encodeCustom,
245
- Ref
246
- };
package/esm/lib/is.js DELETED
@@ -1,81 +0,0 @@
1
- const typeofs = [
2
- 'string',
3
- 'number',
4
- 'bigint',
5
- 'symbol'
6
- ];
7
- const objectTypeNames = [
8
- 'Function',
9
- 'Generator',
10
- 'AsyncGenerator',
11
- 'GeneratorFunction',
12
- 'AsyncGeneratorFunction',
13
- 'AsyncFunction',
14
- 'Observable',
15
- 'Array',
16
- 'Buffer',
17
- 'Object',
18
- 'RegExp',
19
- 'Date',
20
- 'Error',
21
- 'Map',
22
- 'Set',
23
- 'WeakMap',
24
- 'WeakSet',
25
- 'ArrayBuffer',
26
- 'SharedArrayBuffer',
27
- 'DataView',
28
- 'Promise',
29
- 'URL',
30
- 'HTMLElement',
31
- 'Int8Array',
32
- 'Uint8Array',
33
- 'Uint8ClampedArray',
34
- 'Int16Array',
35
- 'Uint16Array',
36
- 'Int32Array',
37
- 'Uint32Array',
38
- 'Float32Array',
39
- 'Float64Array',
40
- 'BigInt64Array',
41
- 'BigUint64Array'
42
- ];
43
- export function is(value) {
44
- if (value === null) {
45
- return 'null';
46
- }
47
- if (value === undefined) {
48
- return 'undefined';
49
- }
50
- if (value === true || value === false) {
51
- return 'boolean';
52
- }
53
- const typeOf = typeof value;
54
- if (typeofs.includes(typeOf)) {
55
- return typeOf;
56
- }
57
- if (typeOf === 'function') {
58
- return 'Function';
59
- }
60
- if (Array.isArray(value)) {
61
- return 'Array';
62
- }
63
- if (isBuffer(value)) {
64
- return 'Buffer';
65
- }
66
- const objectType = getObjectType(value);
67
- if (objectType) {
68
- return objectType;
69
- }
70
- return 'Object';
71
- }
72
- function isBuffer(value) {
73
- return value && value.constructor && value.constructor.isBuffer && value.constructor.isBuffer.call(null, value);
74
- }
75
- function getObjectType(value) {
76
- const objectTypeName = Object.prototype.toString.call(value).slice(8, -1);
77
- if (objectTypeNames.includes(objectTypeName)) {
78
- return objectTypeName;
79
- }
80
- return undefined;
81
- }