@atcute/cbor 2.1.0 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,7 +3,23 @@
3
3
  lightweight [DASL dCBOR42 (deterministic CBOR with tag 42)][dasl-dcbor42] codec library for AT
4
4
  Protocol.
5
5
 
6
+ the specific profile being implemented is [IPLD DAG-CBOR][ipld-dag-cbor], with some additional notes
7
+ to keep in mind:
8
+
9
+ - `undefined` types are still forbidden, except for when they are in a `map` type, where fields will
10
+ be omitted instead, which makes it easier to construct objects to then pass to the encoder.
11
+ - `byte` and `link` types are represented by atproto's [lex-json][atproto-data-model] interfaces,
12
+ but because these involve string codec and parsing, they are done lazily by `BytesWrapper` and
13
+ `CidLinkWrapper` instances.
14
+ - use `fromBytes` and `fromCidLink` to convert them to Uint8Array or CID interface respectively,
15
+ without hitting the string conversion path.
16
+ - use `toBytes` and `toCidLink` for the other direction.
17
+ - integers can't exceed JavaScript's safe integer range, no bigint conversions will occur as they
18
+ will be thrown instead if encountered.
19
+
20
+ [atproto-data-model]: https://atproto.com/specs/data-model
6
21
  [dasl-dcbor42]: https://dasl.ing/dcbor42.html
22
+ [ipld-dag-cbor]: https://ipld.io/specs/codecs/dag-cbor/spec
7
23
 
8
24
  ```ts
9
25
  import { encode } from '@atcute/cbor';
package/dist/decode.js CHANGED
@@ -6,19 +6,24 @@ const readArgument = (state, info) => {
6
6
  return info;
7
7
  }
8
8
  switch (info) {
9
- case 24:
9
+ case 24: {
10
10
  return readUint8(state);
11
- case 25:
11
+ }
12
+ case 25: {
12
13
  return readUint16(state);
13
- case 26:
14
+ }
15
+ case 26: {
14
16
  return readUint32(state);
15
- case 27:
16
- return readUint64(state);
17
+ }
18
+ case 27: {
19
+ return readUint53(state);
20
+ }
17
21
  }
18
22
  throw new Error(`invalid argument encoding; got ${info}`);
19
23
  };
20
24
  const readFloat64 = (state) => {
21
- const value = state.v.getFloat64(state.p);
25
+ const view = (state.v ??= new DataView(state.b.buffer, state.b.byteOffset, state.b.byteLength));
26
+ const value = view.getFloat64(state.p);
22
27
  state.p += 8;
23
28
  return value;
24
29
  };
@@ -26,24 +31,29 @@ const readUint8 = (state) => {
26
31
  return state.b[state.p++];
27
32
  };
28
33
  const readUint16 = (state) => {
29
- const value = state.v.getUint16(state.p);
30
- state.p += 2;
34
+ let pos = state.p;
35
+ const buf = state.b;
36
+ const value = (buf[pos++] << 8) | buf[pos++];
37
+ state.p = pos;
31
38
  return value;
32
39
  };
33
40
  const readUint32 = (state) => {
34
- const value = state.v.getUint32(state.p);
35
- state.p += 4;
41
+ let pos = state.p;
42
+ const buf = state.b;
43
+ const value = ((buf[pos++] << 24) | (buf[pos++] << 16) | (buf[pos++] << 8) | buf[pos++]) >>> 0;
44
+ state.p = pos;
36
45
  return value;
37
46
  };
38
- const readUint64 = (state) => {
39
- const hi = state.v.getUint32(state.p);
40
- const lo = state.v.getUint32(state.p + 4);
47
+ const readUint53 = (state) => {
48
+ let pos = state.p;
49
+ const buf = state.b;
50
+ const hi = ((buf[pos++] << 24) | (buf[pos++] << 16) | (buf[pos++] << 8) | buf[pos++]) >>> 0;
41
51
  if (hi > 0x1fffff) {
42
52
  throw new RangeError(`can't decode integers beyond safe integer range`);
43
53
  }
44
- // prettier-ignore
45
- const value = (hi * (2 ** 32)) + lo;
46
- state.p += 8;
54
+ const lo = ((buf[pos++] << 24) | (buf[pos++] << 16) | (buf[pos++] << 8) | buf[pos++]) >>> 0;
55
+ const value = hi * 2 ** 32 + lo;
56
+ state.p = pos;
47
57
  return value;
48
58
  };
49
59
  const readString = (state, length) => {
@@ -64,82 +74,143 @@ const readCid = (state, length) => {
64
74
  const slice = state.b.subarray(state.p + 1, (state.p += length));
65
75
  return new CidLinkWrapper(slice);
66
76
  };
67
- const readValue = (state) => {
68
- const prelude = readUint8(state);
69
- const type = prelude >> 5;
70
- const info = prelude & 0x1f;
71
- const arg = type < 7 ? readArgument(state, info) : 0;
72
- switch (type) {
73
- case 0: {
74
- return arg;
75
- }
76
- case 1: {
77
- return -1 - arg;
78
- }
79
- case 2: {
80
- return readBytes(state, arg);
81
- }
82
- case 3: {
83
- return readString(state, arg);
84
- }
85
- case 4: {
86
- const array = new Array(arg);
87
- for (let idx = 0; idx < arg; idx++) {
88
- array[idx] = readValue(state);
77
+ var ContainerType;
78
+ (function (ContainerType) {
79
+ ContainerType[ContainerType["MAP"] = 0] = "MAP";
80
+ ContainerType[ContainerType["ARRAY"] = 1] = "ARRAY";
81
+ })(ContainerType || (ContainerType = {}));
82
+ export const decodeFirst = (buf) => {
83
+ const len = buf.length;
84
+ const state = {
85
+ b: buf,
86
+ v: null,
87
+ p: 0,
88
+ };
89
+ let stack = null;
90
+ let result;
91
+ jump: while (state.p < len) {
92
+ const prelude = readUint8(state);
93
+ const type = prelude >> 5;
94
+ const info = prelude & 0x1f;
95
+ const arg = type < 7 ? readArgument(state, info) : 0;
96
+ let value;
97
+ switch (type) {
98
+ case 0: {
99
+ value = arg;
100
+ break;
89
101
  }
90
- return array;
91
- }
92
- case 5: {
93
- const object = {};
94
- for (let idx = 0; idx < arg; idx++) {
95
- const [type, info] = readTypeInfo(state);
96
- if (type !== 3) {
97
- throw new TypeError(`expected map to only have string keys; got type ${type}`);
102
+ case 1: {
103
+ value = -1 - arg;
104
+ break;
105
+ }
106
+ case 2: {
107
+ value = readBytes(state, arg);
108
+ break;
109
+ }
110
+ case 3: {
111
+ value = readString(state, arg);
112
+ break;
113
+ }
114
+ case 4: {
115
+ const arr = new Array(arg);
116
+ value = arr;
117
+ if (arg > 0) {
118
+ stack = { t: ContainerType.ARRAY, c: arr, k: null, r: arg, n: stack };
119
+ continue jump;
98
120
  }
99
- const len = readArgument(state, info);
100
- const key = readString(state, len);
101
- if (key === '__proto__')
102
- // Guard against prototype pollution. CWE-1321
103
- Object.defineProperty(object, key, { enumerable: true, configurable: true, writable: true });
104
- object[key] = readValue(state);
121
+ break;
105
122
  }
106
- return object;
107
- }
108
- case 6: {
109
- if (arg === 42) {
110
- const [type, info] = readTypeInfo(state);
111
- if (type !== 2) {
112
- throw new TypeError(`expected cid-link to be type 2 (bytes); got type ${type}`);
123
+ case 5: {
124
+ const obj = {};
125
+ value = obj;
126
+ if (arg > 0) {
127
+ // `arg * 2` because we're reading both keys and values
128
+ stack = { t: ContainerType.MAP, c: obj, k: null, r: arg * 2, n: stack };
129
+ continue jump;
130
+ }
131
+ break;
132
+ }
133
+ case 6: {
134
+ switch (arg) {
135
+ case 42: {
136
+ const [type, info] = readTypeInfo(state);
137
+ if (type !== 2) {
138
+ throw new TypeError(`expected cid-link to be type 2 (bytes); got type ${type}`);
139
+ }
140
+ const len = readArgument(state, info);
141
+ value = readCid(state, len);
142
+ break;
143
+ }
144
+ default: {
145
+ throw new TypeError(`unsupported tag; got ${arg}`);
146
+ }
113
147
  }
114
- const len = readArgument(state, info);
115
- return readCid(state, len);
148
+ break;
149
+ }
150
+ case 7: {
151
+ switch (info) {
152
+ case 20:
153
+ case 21: {
154
+ value = info === 21;
155
+ break;
156
+ }
157
+ case 22: {
158
+ value = null;
159
+ break;
160
+ }
161
+ case 27: {
162
+ value = readFloat64(state);
163
+ break;
164
+ }
165
+ default: {
166
+ throw new Error(`invalid simple value; got ${info}`);
167
+ }
168
+ }
169
+ break;
170
+ }
171
+ default: {
172
+ throw new TypeError(`invalid type; got ${type}`);
116
173
  }
117
- throw new TypeError(`unsupported tag; got ${arg}`);
118
174
  }
119
- case 7: {
120
- switch (info) {
121
- case 20:
122
- case 21:
123
- return info === 21;
124
- case 22:
125
- return null;
126
- case 27:
127
- return readFloat64(state);
175
+ while (stack !== null) {
176
+ const node = stack;
177
+ switch (node.t) {
178
+ case ContainerType.ARRAY: {
179
+ const index = node.c.length - node.r;
180
+ node.c[index] = value;
181
+ break;
182
+ }
183
+ case ContainerType.MAP: {
184
+ if (node.k === null) {
185
+ if (typeof value !== 'string') {
186
+ throw new TypeError(`expected map to only have string keys; got ${type}`);
187
+ }
188
+ node.k = value;
189
+ }
190
+ else if (node.k !== '__proto__') {
191
+ node.c[node.k] = value;
192
+ node.k = null;
193
+ }
194
+ else {
195
+ // Guard against prototype pollution. CWE-1321
196
+ Object.defineProperty(node.c, node.k, { enumerable: true, configurable: true, writable: true });
197
+ node.k = null;
198
+ }
199
+ break;
200
+ }
201
+ }
202
+ if (--node.r !== 0) {
203
+ // We still have more values to decode, continue
204
+ continue jump;
128
205
  }
129
- throw new Error(`invalid simple value; got ${info}`);
206
+ // Unwrap the stack
207
+ value = node.c;
208
+ stack = node.n;
130
209
  }
210
+ result = value;
211
+ break;
131
212
  }
132
- throw new TypeError(`invalid type; got ${type}`);
133
- };
134
- export const decodeFirst = (buf) => {
135
- const state = {
136
- b: buf,
137
- v: new DataView(buf.buffer, buf.byteOffset, buf.byteLength),
138
- p: 0,
139
- };
140
- const value = readValue(state);
141
- const remainder = buf.subarray(state.p);
142
- return [value, remainder];
213
+ return [result, buf.subarray(state.p)];
143
214
  };
144
215
  export const decode = (buf) => {
145
216
  const [value, remainder] = decodeFirst(buf);
@@ -1 +1 @@
1
- {"version":3,"file":"decode.js","sourceRoot":"","sources":["../lib/decode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decode.js","sourceRoot":"","sources":["../lib/decode.ts"],"names":[],"mappings":"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"}
package/dist/encode.js CHANGED
@@ -3,9 +3,6 @@ import { allocUnsafe, concat, encodeUtf8Into } from '@atcute/uint8array';
3
3
  import { BytesWrapper, fromBytes } from './bytes.js';
4
4
  const MAX_TYPE_ARG_LEN = 9;
5
5
  const CHUNK_SIZE = 1024;
6
- const _abs = Math.abs;
7
- const _floor = Math.floor;
8
- const _log2 = Math.log2;
9
6
  const _max = Math.max;
10
7
  const _isInteger = Number.isInteger;
11
8
  const _isNaN = Number.isNaN;
@@ -17,7 +14,7 @@ const resizeIfNeeded = (state, needed) => {
17
14
  if (buf.byteLength < pos + needed) {
18
15
  state.c.push(buf.subarray(0, pos));
19
16
  state.l += pos;
20
- state.b = allocUnsafe(_max(CHUNK_SIZE, needed));
17
+ state.v = new DataView((state.b = allocUnsafe(_max(CHUNK_SIZE, needed))).buffer);
21
18
  state.p = 0;
22
19
  }
23
20
  };
@@ -25,21 +22,8 @@ const getTypeInfoLength = (arg) => {
25
22
  return arg < 24 ? 1 : arg < 0x100 ? 2 : arg < 0x10000 ? 3 : arg < 0x100000000 ? 5 : 9;
26
23
  };
27
24
  const writeFloat64 = (state, val) => {
28
- let pos = state.p;
29
- const buf = state.b;
30
- const sign = val < 0 ? 1 : 0;
31
- val = _abs(val);
32
- const exp = _floor(_log2(val));
33
- let frac = val / 2 ** exp - 1;
34
- const biasedExp = exp + 1023;
35
- buf[pos++] = (sign << 7) | (biasedExp >>> 4);
36
- buf[pos++] = ((biasedExp & 0xf) << 4) | ((frac * 16) >>> 0);
37
- frac *= 16;
38
- for (let i = 0; i < 6; i++) {
39
- frac = (frac % 1) * 256;
40
- buf[pos++] = frac >>> 0;
41
- }
42
- state.p = pos;
25
+ state.v.setFloat64(state.p, val);
26
+ state.p += 8;
43
27
  };
44
28
  const writeUint8 = (state, val) => {
45
29
  state.b[state.p++] = val;
@@ -60,7 +44,7 @@ const writeUint32 = (state, val) => {
60
44
  buf[pos++] = val & 0xff;
61
45
  state.p = pos;
62
46
  };
63
- const writeUint64 = (state, val) => {
47
+ const writeUint53 = (state, val) => {
64
48
  let pos = state.p;
65
49
  const buf = state.b;
66
50
  const hi = (val / 2 ** 32) | 0;
@@ -93,7 +77,7 @@ const writeTypeAndArgument = (state, type, arg) => {
93
77
  }
94
78
  else {
95
79
  writeUint8(state, (type << 5) | 27);
96
- writeUint64(state, arg);
80
+ writeUint53(state, arg);
97
81
  }
98
82
  };
99
83
  // --- Functions below MUST be cautious about ensuring there's enough room in the buffer!!
@@ -236,6 +220,7 @@ const createState = () => {
236
220
  return {
237
221
  c: [],
238
222
  b: buf,
223
+ v: new DataView(buf.buffer),
239
224
  p: 0,
240
225
  l: 0,
241
226
  };
@@ -1 +1 @@
1
- {"version":3,"file":"encode.js","sourceRoot":"","sources":["../lib/encode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAgB,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAc,MAAM,YAAY,CAAC;AAEjE,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,UAAU,GAAG,IAAI,CAAC;AASxB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;AACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;AAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;AACxB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;AAEtB,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;AACpC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAE5B,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACjD,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEjD,MAAM,cAAc,GAAG,CAAC,KAAY,EAAE,MAAc,EAAQ,EAAE;IAC7D,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IACpB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IAEpB,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,GAAG,MAAM,EAAE,CAAC;QACnC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACnC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC;QAEf,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAChD,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAU,EAAE;IACjD,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvF,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,GAAW,EAAQ,EAAE;IACxD,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IAEpB,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAEhB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IAE9B,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC;IAE7B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC;IAC7C,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAE5D,IAAI,IAAI,EAAE,CAAC;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACxB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,GAAW,EAAQ,EAAE;IACtD,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,GAAW,EAAQ,EAAE;IACvD,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IAElB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IAEpB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;IACvB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;IAExB,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,GAAW,EAAQ,EAAE;IACvD,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IAElB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IAEpB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC;IACxB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;IAChC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;IAExB,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,GAAW,EAAQ,EAAE;IACvD,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IAElB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IAEpB,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC;IAErB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;IACvB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAChC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;IAC/B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAEvB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;IACvB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAChC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;IAC/B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAEvB,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,KAAY,EAAE,IAAY,EAAE,GAAW,EAAQ,EAAE;IAC9E,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;QACd,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;QACxB,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACpC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC;SAAM,IAAI,GAAG,GAAG,OAAO,EAAE,CAAC;QAC1B,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACpC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC;SAAM,IAAI,GAAG,GAAG,WAAW,EAAE,CAAC;QAC9B,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACpC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC;SAAM,CAAC;QACP,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACpC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC;AACF,CAAC,CAAC;AAEF,0FAA0F;AAE1F,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,GAAW,EAAQ,EAAE;IACxD,cAAc,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAExC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACb,oBAAoB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACP,oBAAoB,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,GAAW,EAAQ,EAAE;IACtD,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAEzB,UAAU,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC7B,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,GAAW,EAAQ,EAAE;IACvD,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,GAAG,GAAG,gBAAgB,IAAI,GAAG,GAAG,gBAAgB,EAAE,CAAC;QACtD,MAAM,IAAI,UAAU,CAAC,gDAAgD,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACP,kFAAkF;QAClF,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,GAAW,EAAQ,EAAE;IACvD,oCAAoC;IACpC,qFAAqF;IACrF,8EAA8E;IAC9E,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;IAC7B,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC;IAExD,gCAAgC;IAChC,iFAAiF;IACjF,8EAA8E;IAC9E,2EAA2E;IAC3E,+FAA+F;IAC/F,uDAAuD;IACvD,mFAAmF;IACnF,oGAAoG;IACpG,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC;IACxD,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAE5D,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,mBAAmB,KAAK,UAAU,EAAE,CAAC;QACxC,8DAA8D;QAC9D,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,GAAG,GAAG,CAAC,CAAC;IACtF,CAAC;IAED,oBAAoB,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACpC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,GAAU,EAAQ,EAAE;IACrD,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC;IAE3B,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,gBAAgB,CAAC,CAAC;IAE9C,oBAAoB,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACpC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,KAAY,EAAE,GAAY,EAAQ,EAAE;IACrD,uEAAuE;IAEvE,MAAM,GAAG,GAAG,GAAG,YAAY,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;IACpF,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;IAE/B,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC;IAElD,oBAAoB,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,oBAAoB,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAEpC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACrB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9B,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,GAAQ,EAAQ,EAAE;IACnD,QAAQ,OAAO,GAAG,EAAE,CAAC;QACpB,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACzB,OAAO,UAAU,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,aAAa;YACb,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBAClB,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACzB,OAAO,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAChC,CAAC;YAED,cAAc;YACd,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;gBACvB,cAAc,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;gBACxC,oBAAoB,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;gBAEpC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;oBACpC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7B,CAAC;gBAED,OAAO;YACR,CAAC;YAED,iBAAiB;YACjB,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;gBACpB,IAAI,GAAG,YAAY,cAAc,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACpE,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBACrB,OAAO;gBACR,CAAC;gBAED,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAC;YAClD,CAAC;YAED,cAAc;YACd,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;gBACrB,IAAI,GAAG,YAAY,YAAY,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACnE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBACvB,OAAO;gBACR,CAAC;gBAED,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC;YAC/C,CAAC;YAED,aAAa;YACb,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;gBAExB,cAAc,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;gBACxC,oBAAoB,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;gBAEpC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;oBACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;oBAEtB,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBACxB,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7B,CAAC;gBAED,OAAO;YACR,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,IAAI,SAAS,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,GAAU,EAAE;IAC/B,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAEpC,OAAO;QACN,CAAC,EAAE,EAAE;QACL,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;KACJ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAU,EAAc,EAAE;IAChD,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAE5B,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAEzB,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,gBAAgB;AAChB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAA4B,EAAY,EAAE;IAC9E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAErB,oEAAoE;QACpE,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YAC7B,wCAAwC;YACxC,wEAAwE;YACxE,uCAAuC;YACvC,oBAAoB;YACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QACnB,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAErB,oEAAoE;gBACpE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;gBACxD,IAAI,GAAG,GAAG,CAAC;oBAAE,MAAM;gBAEnB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;YACpB,CAAC;YAED,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QACpB,CAAC;IACF,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC,CAAC"}
1
+ {"version":3,"file":"encode.js","sourceRoot":"","sources":["../lib/encode.ts"],"names":[],"mappings":"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"}
package/lib/decode.ts CHANGED
@@ -5,7 +5,7 @@ import { toBytes, type Bytes } from './bytes.js';
5
5
 
6
6
  interface State {
7
7
  b: Uint8Array;
8
- v: DataView;
8
+ v: DataView | null;
9
9
  p: number;
10
10
  }
11
11
 
@@ -15,21 +15,26 @@ const readArgument = (state: State, info: number): number => {
15
15
  }
16
16
 
17
17
  switch (info) {
18
- case 24:
18
+ case 24: {
19
19
  return readUint8(state);
20
- case 25:
20
+ }
21
+ case 25: {
21
22
  return readUint16(state);
22
- case 26:
23
+ }
24
+ case 26: {
23
25
  return readUint32(state);
24
- case 27:
25
- return readUint64(state);
26
+ }
27
+ case 27: {
28
+ return readUint53(state);
29
+ }
26
30
  }
27
31
 
28
32
  throw new Error(`invalid argument encoding; got ${info}`);
29
33
  };
30
34
 
31
35
  const readFloat64 = (state: State): number => {
32
- const value = state.v.getFloat64(state.p);
36
+ const view = (state.v ??= new DataView(state.b.buffer, state.b.byteOffset, state.b.byteLength));
37
+ const value = view.getFloat64(state.p);
33
38
 
34
39
  state.p += 8;
35
40
  return value;
@@ -40,31 +45,40 @@ const readUint8 = (state: State): number => {
40
45
  };
41
46
 
42
47
  const readUint16 = (state: State): number => {
43
- const value = state.v.getUint16(state.p);
48
+ let pos = state.p;
44
49
 
45
- state.p += 2;
50
+ const buf = state.b;
51
+ const value = (buf[pos++] << 8) | buf[pos++];
52
+
53
+ state.p = pos;
46
54
  return value;
47
55
  };
48
56
 
49
57
  const readUint32 = (state: State): number => {
50
- const value = state.v.getUint32(state.p);
58
+ let pos = state.p;
59
+
60
+ const buf = state.b;
61
+ const value = ((buf[pos++] << 24) | (buf[pos++] << 16) | (buf[pos++] << 8) | buf[pos++]) >>> 0;
51
62
 
52
- state.p += 4;
63
+ state.p = pos;
53
64
  return value;
54
65
  };
55
66
 
56
- const readUint64 = (state: State): number => {
57
- const hi = state.v.getUint32(state.p);
58
- const lo = state.v.getUint32(state.p + 4);
67
+ const readUint53 = (state: State): number => {
68
+ let pos = state.p;
69
+
70
+ const buf = state.b;
71
+
72
+ const hi = ((buf[pos++] << 24) | (buf[pos++] << 16) | (buf[pos++] << 8) | buf[pos++]) >>> 0;
59
73
 
60
74
  if (hi > 0x1fffff) {
61
75
  throw new RangeError(`can't decode integers beyond safe integer range`);
62
76
  }
63
77
 
64
- // prettier-ignore
65
- const value = (hi * (2 ** 32)) + lo;
78
+ const lo = ((buf[pos++] << 24) | (buf[pos++] << 16) | (buf[pos++] << 8) | buf[pos++]) >>> 0;
79
+ const value = hi * 2 ** 32 + lo;
66
80
 
67
- state.p += 8;
81
+ state.p = pos;
68
82
  return value;
69
83
  };
70
84
 
@@ -93,98 +107,180 @@ const readCid = (state: State, length: number): CidLink => {
93
107
  return new CidLinkWrapper(slice);
94
108
  };
95
109
 
96
- const readValue = (state: State): any => {
97
- const prelude = readUint8(state);
110
+ const enum ContainerType {
111
+ MAP,
112
+ ARRAY,
113
+ }
98
114
 
99
- const type = prelude >> 5;
100
- const info = prelude & 0x1f;
101
- const arg = type < 7 ? readArgument(state, info) : 0;
115
+ type Container =
116
+ | {
117
+ t: ContainerType.MAP;
118
+ c: Record<string, unknown>;
119
+ k: string | null;
120
+ r: number;
121
+ n: Container | null;
122
+ }
123
+ | {
124
+ t: ContainerType.ARRAY;
125
+ c: any[];
126
+ k: null;
127
+ r: number;
128
+ n: Container | null;
129
+ };
102
130
 
103
- switch (type) {
104
- case 0: {
105
- return arg;
106
- }
107
- case 1: {
108
- return -1 - arg;
109
- }
110
- case 2: {
111
- return readBytes(state, arg);
112
- }
113
- case 3: {
114
- return readString(state, arg);
115
- }
116
- case 4: {
117
- const array = new Array(arg);
131
+ export const decodeFirst = (buf: Uint8Array): [value: any, remainder: Uint8Array] => {
132
+ const len = buf.length;
118
133
 
119
- for (let idx = 0; idx < arg; idx++) {
120
- array[idx] = readValue(state);
121
- }
134
+ const state: State = {
135
+ b: buf,
136
+ v: null,
137
+ p: 0,
138
+ };
122
139
 
123
- return array;
124
- }
125
- case 5: {
126
- const object: Record<string, unknown> = {};
140
+ let stack: Container | null = null;
141
+ let result: any;
127
142
 
128
- for (let idx = 0; idx < arg; idx++) {
129
- const [type, info] = readTypeInfo(state);
130
- if (type !== 3) {
131
- throw new TypeError(`expected map to only have string keys; got type ${type}`);
132
- }
143
+ jump: while (state.p < len) {
144
+ const prelude = readUint8(state);
133
145
 
134
- const len = readArgument(state, info);
135
- const key = readString(state, len);
146
+ const type = prelude >> 5;
147
+ const info = prelude & 0x1f;
148
+ const arg = type < 7 ? readArgument(state, info) : 0;
136
149
 
137
- if (key === '__proto__')
138
- // Guard against prototype pollution. CWE-1321
139
- Object.defineProperty(object, key, { enumerable: true, configurable: true, writable: true });
150
+ let value: any;
140
151
 
141
- object[key] = readValue(state);
152
+ switch (type) {
153
+ case 0: {
154
+ value = arg;
155
+ break;
156
+ }
157
+ case 1: {
158
+ value = -1 - arg;
159
+ break;
160
+ }
161
+ case 2: {
162
+ value = readBytes(state, arg);
163
+ break;
164
+ }
165
+ case 3: {
166
+ value = readString(state, arg);
167
+ break;
142
168
  }
169
+ case 4: {
170
+ const arr = new Array(arg);
171
+ value = arr;
143
172
 
144
- return object;
145
- }
146
- case 6: {
147
- if (arg === 42) {
148
- const [type, info] = readTypeInfo(state);
149
- if (type !== 2) {
150
- throw new TypeError(`expected cid-link to be type 2 (bytes); got type ${type}`);
173
+ if (arg > 0) {
174
+ stack = { t: ContainerType.ARRAY, c: arr, k: null, r: arg, n: stack };
175
+ continue jump;
151
176
  }
152
177
 
153
- const len = readArgument(state, info);
154
- return readCid(state, len);
178
+ break;
155
179
  }
180
+ case 5: {
181
+ const obj: Record<string, unknown> = {};
182
+ value = obj;
183
+
184
+ if (arg > 0) {
185
+ // `arg * 2` because we're reading both keys and values
186
+ stack = { t: ContainerType.MAP, c: obj, k: null, r: arg * 2, n: stack };
187
+ continue jump;
188
+ }
156
189
 
157
- throw new TypeError(`unsupported tag; got ${arg}`);
158
- }
159
- case 7: {
160
- switch (info) {
161
- case 20:
162
- case 21:
163
- return info === 21;
164
- case 22:
165
- return null;
166
- case 27:
167
- return readFloat64(state);
190
+ break;
168
191
  }
192
+ case 6: {
193
+ switch (arg) {
194
+ case 42: {
195
+ const [type, info] = readTypeInfo(state);
196
+ if (type !== 2) {
197
+ throw new TypeError(`expected cid-link to be type 2 (bytes); got type ${type}`);
198
+ }
199
+
200
+ const len = readArgument(state, info);
201
+ value = readCid(state, len);
202
+
203
+ break;
204
+ }
205
+ default: {
206
+ throw new TypeError(`unsupported tag; got ${arg}`);
207
+ }
208
+ }
209
+
210
+ break;
211
+ }
212
+ case 7: {
213
+ switch (info) {
214
+ case 20:
215
+ case 21: {
216
+ value = info === 21;
217
+ break;
218
+ }
219
+ case 22: {
220
+ value = null;
221
+ break;
222
+ }
223
+ case 27: {
224
+ value = readFloat64(state);
225
+ break;
226
+ }
227
+ default: {
228
+ throw new Error(`invalid simple value; got ${info}`);
229
+ }
230
+ }
169
231
 
170
- throw new Error(`invalid simple value; got ${info}`);
232
+ break;
233
+ }
234
+ default: {
235
+ throw new TypeError(`invalid type; got ${type}`);
236
+ }
171
237
  }
172
- }
173
238
 
174
- throw new TypeError(`invalid type; got ${type}`);
175
- };
239
+ while (stack !== null) {
240
+ const node = stack;
176
241
 
177
- export const decodeFirst = (buf: Uint8Array): [value: any, remainder: Uint8Array] => {
178
- const state: State = {
179
- b: buf,
180
- v: new DataView(buf.buffer, buf.byteOffset, buf.byteLength),
181
- p: 0,
182
- };
242
+ switch (node.t) {
243
+ case ContainerType.ARRAY: {
244
+ const index = node.c.length - node.r;
245
+ node.c[index] = value;
246
+
247
+ break;
248
+ }
249
+ case ContainerType.MAP: {
250
+ if (node.k === null) {
251
+ if (typeof value !== 'string') {
252
+ throw new TypeError(`expected map to only have string keys; got ${type}`);
253
+ }
254
+
255
+ node.k = value;
256
+ } else if (node.k !== '__proto__') {
257
+ node.c[node.k] = value;
258
+ node.k = null;
259
+ } else {
260
+ // Guard against prototype pollution. CWE-1321
261
+ Object.defineProperty(node.c, node.k, { enumerable: true, configurable: true, writable: true });
262
+ node.k = null;
263
+ }
264
+
265
+ break;
266
+ }
267
+ }
268
+
269
+ if (--node.r !== 0) {
270
+ // We still have more values to decode, continue
271
+ continue jump;
272
+ }
183
273
 
184
- const value = readValue(state);
185
- const remainder = buf.subarray(state.p);
274
+ // Unwrap the stack
275
+ value = node.c;
276
+ stack = node.n;
277
+ }
278
+
279
+ result = value;
280
+ break;
281
+ }
186
282
 
187
- return [value, remainder];
283
+ return [result, buf.subarray(state.p)];
188
284
  };
189
285
 
190
286
  export const decode = (buf: Uint8Array): any => {
package/lib/encode.ts CHANGED
@@ -9,13 +9,11 @@ const CHUNK_SIZE = 1024;
9
9
  interface State {
10
10
  c: Uint8Array[];
11
11
  b: Uint8Array;
12
+ v: DataView;
12
13
  p: number;
13
14
  l: number;
14
15
  }
15
16
 
16
- const _abs = Math.abs;
17
- const _floor = Math.floor;
18
- const _log2 = Math.log2;
19
17
  const _max = Math.max;
20
18
 
21
19
  const _isInteger = Number.isInteger;
@@ -32,7 +30,7 @@ const resizeIfNeeded = (state: State, needed: number): void => {
32
30
  state.c.push(buf.subarray(0, pos));
33
31
  state.l += pos;
34
32
 
35
- state.b = allocUnsafe(_max(CHUNK_SIZE, needed));
33
+ state.v = new DataView((state.b = allocUnsafe(_max(CHUNK_SIZE, needed))).buffer);
36
34
  state.p = 0;
37
35
  }
38
36
  };
@@ -42,27 +40,8 @@ const getTypeInfoLength = (arg: number): number => {
42
40
  };
43
41
 
44
42
  const writeFloat64 = (state: State, val: number): void => {
45
- let pos = state.p;
46
- const buf = state.b;
47
-
48
- const sign = val < 0 ? 1 : 0;
49
- val = _abs(val);
50
-
51
- const exp = _floor(_log2(val));
52
- let frac = val / 2 ** exp - 1;
53
-
54
- const biasedExp = exp + 1023;
55
-
56
- buf[pos++] = (sign << 7) | (biasedExp >>> 4);
57
- buf[pos++] = ((biasedExp & 0xf) << 4) | ((frac * 16) >>> 0);
58
-
59
- frac *= 16;
60
- for (let i = 0; i < 6; i++) {
61
- frac = (frac % 1) * 256;
62
- buf[pos++] = frac >>> 0;
63
- }
64
-
65
- state.p = pos;
43
+ state.v.setFloat64(state.p, val);
44
+ state.p += 8;
66
45
  };
67
46
 
68
47
  const writeUint8 = (state: State, val: number): void => {
@@ -93,7 +72,7 @@ const writeUint32 = (state: State, val: number): void => {
93
72
  state.p = pos;
94
73
  };
95
74
 
96
- const writeUint64 = (state: State, val: number): void => {
75
+ const writeUint53 = (state: State, val: number): void => {
97
76
  let pos = state.p;
98
77
 
99
78
  const buf = state.b;
@@ -128,7 +107,7 @@ const writeTypeAndArgument = (state: State, type: number, arg: number): void =>
128
107
  writeUint32(state, arg);
129
108
  } else {
130
109
  writeUint8(state, (type << 5) | 27);
131
- writeUint64(state, arg);
110
+ writeUint53(state, arg);
132
111
  }
133
112
  };
134
113
 
@@ -306,6 +285,7 @@ const createState = (): State => {
306
285
  return {
307
286
  c: [],
308
287
  b: buf,
288
+ v: new DataView(buf.buffer),
309
289
  p: 0,
310
290
  l: 0,
311
291
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@atcute/cbor",
4
- "version": "2.1.0",
4
+ "version": "2.1.2",
5
5
  "description": "lightweight DASL dCBOR42 codec library for AT Protocol",
6
6
  "keywords": [
7
7
  "atproto",
@@ -25,13 +25,13 @@
25
25
  "sideEffects": false,
26
26
  "devDependencies": {
27
27
  "@ipld/dag-cbor": "^9.2.2",
28
- "@types/bun": "^1.1.14",
28
+ "@types/bun": "^1.2.1",
29
29
  "cbor-x": "^1.6.0"
30
30
  },
31
31
  "dependencies": {
32
32
  "@atcute/cid": "^2.1.0",
33
- "@atcute/uint8array": "^1.0.0",
34
- "@atcute/multibase": "^1.1.0"
33
+ "@atcute/multibase": "^1.1.2",
34
+ "@atcute/uint8array": "^1.0.1"
35
35
  },
36
36
  "scripts": {
37
37
  "build": "rm -rf dist; tsc --project tsconfig.build.json",