cbor-x 1.4.0 → 1.4.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.
package/README.md CHANGED
@@ -168,7 +168,7 @@ assert.deepEqual(senmlEncoder.decode(senmlBuff), data)
168
168
  ```
169
169
 
170
170
  ### CBOR Packing
171
- [Packed CBOR](https://datatracker.ietf.org/doc/html/draft-ietf-cbor-packed) is additional specification for CBOR which allows for compact encoding of data that has repeated values. Cbor-x supports decoding packed CBOR, no or flags/options needed. Cbor-x can also optionally generate packed CBOR (with the `pack` option), which will cause the encoder to look for repeated strings in a data structure that is being encoded, and store the strings in a packed table that can be referenced, to reduce encoding size. This involves extra overhead and reduces encoding performance, and generally does not yield as much compaction as standard compression tools. However, this is can be much faster than encoding plus compression, while still providing some level of reduction in encoding size. In addition to size reduction, packed CBOR is also usually faster to decode (assuming that some repetitive values could be found/packed).
171
+ [Packed CBOR](https://datatracker.ietf.org/doc/html/draft-ietf-cbor-packed) is additional specification for CBOR which allows for compact encoding of data that has repeated values. Cbor-x supports decoding packed CBOR, no flags or options needed. Cbor-x can also optionally generate packed CBOR (with the `pack` option), which will cause the encoder to look for repeated strings in a data structure that is being encoded, and store the strings in a packed table that can be referenced, to reduce encoding size. This involves extra overhead and reduces encoding performance, and generally does not yield as much compaction as standard compression tools. However, this is can be much faster than encoding plus compression, while still providing some level of reduction in encoding size. In addition to size reduction, packed CBOR is also usually faster to decode (assuming that some repetitive values could be found/packed).
172
172
 
173
173
  Cbor-x also has in-progress effort to support shared packed tables.
174
174
 
package/decode.js CHANGED
@@ -84,7 +84,7 @@ export class Decoder {
84
84
  }
85
85
  let res = {}
86
86
  //map.forEach((v,k) => res[Object.keys(this._keyMap)[Object.values(this._keyMap).indexOf(k)] || k] = v)
87
- map.forEach((v,k) => res[this._mapKey.has(k) ? this._mapKey.get(k) : k] = v)
87
+ map.forEach((v,k) => res[safeKey(this._mapKey.has(k) ? this._mapKey.get(k) : k)] = v)
88
88
  return res
89
89
  }
90
90
 
@@ -289,8 +289,8 @@ export function read() {
289
289
  let key
290
290
  if (currentDecoder.mapsAsObjects) {
291
291
  let object = {}
292
- if (currentDecoder.keyMap) while((key = read()) != STOP_CODE) object[currentDecoder.decodeKey(key)] = read()
293
- else while ((key = read()) != STOP_CODE) object[key] = read()
292
+ if (currentDecoder.keyMap) while((key = read()) != STOP_CODE) object[safeKey(currentDecoder.decodeKey(key))] = read()
293
+ else while ((key = read()) != STOP_CODE) object[safeKey(key)] = read()
294
294
  return object
295
295
  } else {
296
296
  if (restoreMapsAsObject) {
@@ -338,8 +338,8 @@ export function read() {
338
338
  case 5: // map
339
339
  if (currentDecoder.mapsAsObjects) {
340
340
  let object = {}
341
- if (currentDecoder.keyMap) for (let i = 0; i < token; i++) object[currentDecoder.decodeKey(read())] = read()
342
- else for (let i = 0; i < token; i++) object[read()] = read()
341
+ if (currentDecoder.keyMap) for (let i = 0; i < token; i++) object[safeKey(currentDecoder.decodeKey(read()))] = read()
342
+ else for (let i = 0; i < token; i++) object[safeKey(read())] = read()
343
343
  return object
344
344
  } else {
345
345
  if (restoreMapsAsObject) {
@@ -455,8 +455,8 @@ function createStructureReader(structure) {
455
455
  if (this.slowReads++ >= 3) { // create a fast compiled reader
456
456
  let array = this.length == length ? this : this.slice(0, length)
457
457
  compiledReader = currentDecoder.keyMap
458
- ? new Function('r', 'return {' + array.map(k => currentDecoder.decodeKey(k)).map(k => validName.test(k) ? k + ':r()' : ('[' + JSON.stringify(k) + ']:r()')).join(',') + '}')
459
- : new Function('r', 'return {' + array.map(key => validName.test(key) ? key + ':r()' : ('[' + JSON.stringify(key) + ']:r()')).join(',') + '}')
458
+ ? new Function('r', 'return {' + array.map(k => currentDecoder.decodeKey(k)).map(k => validName.test(k) ? safeKey(k) + ':r()' : ('[' + JSON.stringify(k) + ']:r()')).join(',') + '}')
459
+ : new Function('r', 'return {' + array.map(key => validName.test(key) ? safeKey(key) + ':r()' : ('[' + JSON.stringify(key) + ']:r()')).join(',') + '}')
460
460
  if (this.compiledReader)
461
461
  compiledReader.next = this.compiledReader // if there is an existing one, we store multiple readers as a linked list because it is usually pretty rare to have multiple readers (of different length) for the same structure
462
462
  compiledReader.propertyCount = length
@@ -464,14 +464,20 @@ function createStructureReader(structure) {
464
464
  return compiledReader(read)
465
465
  }
466
466
  let object = {}
467
- if (currentDecoder.keyMap) for (let i = 0; i < length; i++) object[currentDecoder.decodeKey(this[i])] = read()
468
- else for (let i = 0; i < length; i++) object[this[i]] = read()
467
+ if (currentDecoder.keyMap) for (let i = 0; i < length; i++) object[safeKey(currentDecoder.decodeKey(this[i]))] = read()
468
+ else for (let i = 0; i < length; i++) {
469
+ object[safeKey(this[i])] = read();
470
+ }
469
471
  return object
470
472
  }
471
473
  structure.slowReads = 0
472
474
  return readObject
473
475
  }
474
476
 
477
+ function safeKey(key) {
478
+ return key === '__proto__' ? '__proto_' : key
479
+ }
480
+
475
481
  let readFixedString = readStringJS
476
482
  let readString8 = readStringJS
477
483
  let readString16 = readStringJS
@@ -737,18 +743,30 @@ function readExt(length) {
737
743
  else
738
744
  throw new Error('Unknown extension type ' + type)
739
745
  }
740
-
746
+ let f32Array = new Float32Array(1)
747
+ let u8Array = new Uint8Array(f32Array.buffer, 0, 4)
741
748
  function getFloat16() {
742
749
  let byte0 = src[position++]
743
750
  let byte1 = src[position++]
744
- let half = (byte0 << 8) + byte1
745
- let exp = (half >> 10) & 0x1f
746
- let mant = half & 0x3ff
747
- let val
748
- if (exp == 0) val = Math.exp(mant, -24)
749
- else if (exp != 31) val = Math.exp(mant + 1024, exp - 25)
750
- else val = mant == 0 ? Infinity : NaN
751
- return half & 0x8000 ? -val : val
751
+ let exponent = (byte0 & 0x7f) >> 2;
752
+ if (exponent === 0x1f) { // specials
753
+ if (byte1 || (byte0 & 3))
754
+ return NaN;
755
+ return (byte0 & 0x80) ? -Infinity : Infinity;
756
+ }
757
+ if (exponent === 0) { // sub-normals
758
+ // significand with 10 fractional bits and divided by 2^14
759
+ let abs = (((byte0 & 3) << 8) | byte1) / (1 << 24)
760
+ return (byte0 & 0x80) ? -abs : abs
761
+ }
762
+
763
+ u8Array[3] = (byte0 & 0x80) | // sign bit
764
+ ((exponent >> 1) + 56) // 4 of 5 of the exponent bits, re-offset-ed
765
+ u8Array[2] = ((byte0 & 7) << 5) | // last exponent bit and first two mantissa bits
766
+ (byte1 >> 3) // next 5 bits of mantissa
767
+ u8Array[1] = byte1 << 5; // last three bits of mantissa
768
+ u8Array[0] = 0;
769
+ return f32Array[0];
752
770
  }
753
771
 
754
772
  let keyCache = new Array(4096)
@@ -869,11 +887,11 @@ const recordDefinition = (definition) => {
869
887
  let object = {}
870
888
  if (currentDecoder.keyMap) for (let i = 2,l = definition.length; i < l; i++) {
871
889
  let key = currentDecoder.decodeKey(structure[i - 2])
872
- object[key] = definition[i]
890
+ object[safeKey(key)] = definition[i]
873
891
  }
874
892
  else for (let i = 2,l = definition.length; i < l; i++) {
875
893
  let key = structure[i - 2]
876
- object[key] = definition[i]
894
+ object[safeKey(key)] = definition[i]
877
895
  }
878
896
  return object
879
897
  }
@@ -1160,8 +1178,6 @@ export const FLOAT32_OPTIONS = {
1160
1178
  DECIMAL_ROUND: 3,
1161
1179
  DECIMAL_FIT: 4
1162
1180
  }
1163
- let f32Array = new Float32Array(1)
1164
- let u8Array = new Uint8Array(f32Array.buffer, 0, 4)
1165
1181
  export function roundFloat32(float32Number) {
1166
1182
  f32Array[0] = float32Number
1167
1183
  let multiplier = mult10[((u8Array[3] & 0x7f) << 1) | (u8Array[2] >> 7)]
package/dist/index.js CHANGED
@@ -85,7 +85,7 @@
85
85
  }
86
86
  let res = {};
87
87
  //map.forEach((v,k) => res[Object.keys(this._keyMap)[Object.values(this._keyMap).indexOf(k)] || k] = v)
88
- map.forEach((v,k) => res[this._mapKey.has(k) ? this._mapKey.get(k) : k] = v);
88
+ map.forEach((v,k) => res[safeKey(this._mapKey.has(k) ? this._mapKey.get(k) : k)] = v);
89
89
  return res
90
90
  }
91
91
 
@@ -285,8 +285,8 @@
285
285
  let key;
286
286
  if (currentDecoder.mapsAsObjects) {
287
287
  let object = {};
288
- if (currentDecoder.keyMap) while((key = read()) != STOP_CODE) object[currentDecoder.decodeKey(key)] = read();
289
- else while ((key = read()) != STOP_CODE) object[key] = read();
288
+ if (currentDecoder.keyMap) while((key = read()) != STOP_CODE) object[safeKey(currentDecoder.decodeKey(key))] = read();
289
+ else while ((key = read()) != STOP_CODE) object[safeKey(key)] = read();
290
290
  return object
291
291
  } else {
292
292
  if (restoreMapsAsObject) {
@@ -334,8 +334,8 @@
334
334
  case 5: // map
335
335
  if (currentDecoder.mapsAsObjects) {
336
336
  let object = {};
337
- if (currentDecoder.keyMap) for (let i = 0; i < token; i++) object[currentDecoder.decodeKey(read())] = read();
338
- else for (let i = 0; i < token; i++) object[read()] = read();
337
+ if (currentDecoder.keyMap) for (let i = 0; i < token; i++) object[safeKey(currentDecoder.decodeKey(read()))] = read();
338
+ else for (let i = 0; i < token; i++) object[safeKey(read())] = read();
339
339
  return object
340
340
  } else {
341
341
  if (restoreMapsAsObject) {
@@ -451,8 +451,8 @@
451
451
  if (this.slowReads++ >= 3) { // create a fast compiled reader
452
452
  let array = this.length == length ? this : this.slice(0, length);
453
453
  compiledReader = currentDecoder.keyMap
454
- ? new Function('r', 'return {' + array.map(k => currentDecoder.decodeKey(k)).map(k => validName.test(k) ? k + ':r()' : ('[' + JSON.stringify(k) + ']:r()')).join(',') + '}')
455
- : new Function('r', 'return {' + array.map(key => validName.test(key) ? key + ':r()' : ('[' + JSON.stringify(key) + ']:r()')).join(',') + '}');
454
+ ? new Function('r', 'return {' + array.map(k => currentDecoder.decodeKey(k)).map(k => validName.test(k) ? safeKey(k) + ':r()' : ('[' + JSON.stringify(k) + ']:r()')).join(',') + '}')
455
+ : new Function('r', 'return {' + array.map(key => validName.test(key) ? safeKey(key) + ':r()' : ('[' + JSON.stringify(key) + ']:r()')).join(',') + '}');
456
456
  if (this.compiledReader)
457
457
  compiledReader.next = this.compiledReader; // if there is an existing one, we store multiple readers as a linked list because it is usually pretty rare to have multiple readers (of different length) for the same structure
458
458
  compiledReader.propertyCount = length;
@@ -460,14 +460,20 @@
460
460
  return compiledReader(read)
461
461
  }
462
462
  let object = {};
463
- if (currentDecoder.keyMap) for (let i = 0; i < length; i++) object[currentDecoder.decodeKey(this[i])] = read();
464
- else for (let i = 0; i < length; i++) object[this[i]] = read();
463
+ if (currentDecoder.keyMap) for (let i = 0; i < length; i++) object[safeKey(currentDecoder.decodeKey(this[i]))] = read();
464
+ else for (let i = 0; i < length; i++) {
465
+ object[safeKey(this[i])] = read();
466
+ }
465
467
  return object
466
468
  }
467
469
  structure.slowReads = 0;
468
470
  return readObject
469
471
  }
470
472
 
473
+ function safeKey(key) {
474
+ return key === '__proto__' ? '__proto_' : key
475
+ }
476
+
471
477
  let readFixedString = readStringJS;
472
478
 
473
479
  let isNativeAccelerationEnabled = false;
@@ -684,18 +690,30 @@
684
690
  Uint8Array.prototype.slice.call(src, position, position += length) :
685
691
  src.subarray(position, position += length)
686
692
  }
687
-
693
+ let f32Array = new Float32Array(1);
694
+ let u8Array = new Uint8Array(f32Array.buffer, 0, 4);
688
695
  function getFloat16() {
689
696
  let byte0 = src[position++];
690
697
  let byte1 = src[position++];
691
- let half = (byte0 << 8) + byte1;
692
- let exp = (half >> 10) & 0x1f;
693
- let mant = half & 0x3ff;
694
- let val;
695
- if (exp == 0) val = Math.exp(mant, -24);
696
- else if (exp != 31) val = Math.exp(mant + 1024, exp - 25);
697
- else val = mant == 0 ? Infinity : NaN;
698
- return half & 0x8000 ? -val : val
698
+ let exponent = (byte0 & 0x7f) >> 2;
699
+ if (exponent === 0x1f) { // specials
700
+ if (byte1 || (byte0 & 3))
701
+ return NaN;
702
+ return (byte0 & 0x80) ? -Infinity : Infinity;
703
+ }
704
+ if (exponent === 0) { // sub-normals
705
+ // significand with 10 fractional bits and divided by 2^14
706
+ let abs = (((byte0 & 3) << 8) | byte1) / (1 << 24);
707
+ return (byte0 & 0x80) ? -abs : abs
708
+ }
709
+
710
+ u8Array[3] = (byte0 & 0x80) | // sign bit
711
+ ((exponent >> 1) + 56); // 4 of 5 of the exponent bits, re-offset-ed
712
+ u8Array[2] = ((byte0 & 7) << 5) | // last exponent bit and first two mantissa bits
713
+ (byte1 >> 3); // next 5 bits of mantissa
714
+ u8Array[1] = byte1 << 5; // last three bits of mantissa
715
+ u8Array[0] = 0;
716
+ return f32Array[0];
699
717
  }
700
718
 
701
719
  let keyCache = new Array(4096);
@@ -754,11 +772,11 @@
754
772
  let object = {};
755
773
  if (currentDecoder.keyMap) for (let i = 2,l = definition.length; i < l; i++) {
756
774
  let key = currentDecoder.decodeKey(structure[i - 2]);
757
- object[key] = definition[i];
775
+ object[safeKey(key)] = definition[i];
758
776
  }
759
777
  else for (let i = 2,l = definition.length; i < l; i++) {
760
778
  let key = structure[i - 2];
761
- object[key] = definition[i];
779
+ object[safeKey(key)] = definition[i];
762
780
  }
763
781
  return object
764
782
  };
@@ -1041,8 +1059,6 @@
1041
1059
  DECIMAL_ROUND: 3,
1042
1060
  DECIMAL_FIT: 4
1043
1061
  };
1044
- let f32Array = new Float32Array(1);
1045
- let u8Array = new Uint8Array(f32Array.buffer, 0, 4);
1046
1062
  function roundFloat32(float32Number) {
1047
1063
  f32Array[0] = float32Number;
1048
1064
  let multiplier = mult10[((u8Array[3] & 0x7f) << 1) | (u8Array[2] >> 7)];
package/dist/index.min.js CHANGED
@@ -1,29 +1,29 @@
1
- (function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):(e=e||self,t(e.CBOR={}))})(this,function(e){'use strict';var t=Math.log,s=Math.round,n=Math.exp;function a(){try{let e=r();if(F){if(B>=F.postBundlePosition){let e=new Error("Unexpected bundle position");throw e.incomplete=!0,e}// bundled strings to skip past
1
+ (function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):(e=e||self,t(e.CBOR={}))})(this,function(e){"use strict";var t=Math.exp,s=Math.log,n=Math.round;function a(){try{let e=r();if(F){if(B>=F.postBundlePosition){let e=new Error("Unexpected bundle position");throw e.incomplete=!0,e}// bundled strings to skip past
2
2
  B=F.postBundlePosition}if(B==V)// finished reading this source, cleanup references
3
3
  T=null,x=null,Y&&(Y=null);else if(B>V){// over read
4
4
  let e=new Error("Unexpected end of CBOR data");throw e.incomplete=!0,e}else if(!X)throw new Error("Data read, but end of buffer not reached");// else more to read, but we are reading sequentially, so don't clear source yet
5
- return e}catch(e){throw k(),(e instanceof RangeError||e.message.startsWith("Unexpected end of buffer"))&&(e.incomplete=!0),e}}function r(){let e=x[B++],t=e>>5;if(e&=31,23<e)switch(e){case 24:e=x[B++];break;case 25:if(7==t)return l();e=W.getUint16(B),B+=2;break;case 26:if(7==t){let e=W.getFloat32(B);if(2<q.useFloat32){// this does rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved
6
- let t=le[(127&x[B])<<1|x[B+1]>>7];return B+=4,(t*e+(0<e?.5:-.5)>>0)/t}return B+=4,e}e=W.getUint32(B),B+=4;break;case 27:if(7==t){let e=W.getFloat64(B);return B+=8,e}if(1<t){if(0<W.getUint32(B))throw new Error("JavaScript does not support arrays, maps, or strings with length over 4294967295");e=W.getUint32(B+4)}else q.int64AsNumber?(e=4294967296*W.getUint32(B),e+=W.getUint32(B+4)):e=W.getBigUint64(B);B+=8;break;case 31:// indefinite length
5
+ return e}catch(e){throw R(),(e instanceof RangeError||e.message.startsWith("Unexpected end of buffer"))&&(e.incomplete=!0),e}}function r(){let e=x[B++],t=e>>5;if(e&=31,23<e)switch(e){case 24:e=x[B++];break;case 25:if(7==t)return p();e=W.getUint16(B),B+=2;break;case 26:if(7==t){let e=W.getFloat32(B);if(2<q.useFloat32){// this does rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved
6
+ let t=fe[(127&x[B])<<1|x[B+1]>>7];return B+=4,(t*e+(0<e?.5:-.5)>>0)/t}return B+=4,e}e=W.getUint32(B),B+=4;break;case 27:if(7==t){let e=W.getFloat64(B);return B+=8,e}if(1<t){if(0<W.getUint32(B))throw new Error("JavaScript does not support arrays, maps, or strings with length over 4294967295");e=W.getUint32(B+4)}else q.int64AsNumber?(e=4294967296*W.getUint32(B),e+=W.getUint32(B+4)):e=W.getBigUint64(B);B+=8;break;case 31:// indefinite length
7
7
  switch(t){case 2:// byte string
8
8
  case 3:// text string
9
9
  throw new Error("Indefinite length not supported for byte or text strings");case 4:// array
10
10
  let e,s=[],n=0;for(;(e=r())!=w;)s[n++]=e;return 4==t?s:3==t?s.join(""):Buffer.concat(s);case 5:// map
11
- let a;if(q.mapsAsObjects){let e={};if(q.keyMap)for(;(a=r())!=w;)e[q.decodeKey(a)]=r();else for(;(a=r())!=w;)e[a]=r();return e}else{z&&(q.mapsAsObjects=!0,z=!1);let e=new Map;if(q.keyMap)for(;(a=r())!=w;)e.set(q.decodeKey(a),r());else for(;(a=r())!=w;)e.set(a,r());return e}case 7:return w;default:throw new Error("Invalid major type for indefinite length "+t);}default:throw new Error("Unknown token "+e);}switch(t){case 0:// positive int
11
+ let a;if(q.mapsAsObjects){let e={};if(q.keyMap)for(;(a=r())!=w;)e[o(q.decodeKey(a))]=r();else for(;(a=r())!=w;)e[o(a)]=r();return e}else{z&&(q.mapsAsObjects=!0,z=!1);let e=new Map;if(q.keyMap)for(;(a=r())!=w;)e.set(q.decodeKey(a),r());else for(;(a=r())!=w;)e.set(a,r());return e}case 7:return w;default:throw new Error("Invalid major type for indefinite length "+t);}default:throw new Error("Unknown token "+e);}switch(t){case 0:// positive int
12
12
  return e;case 1:// negative int
13
13
  return~e;case 2:// buffer
14
- return c(e);case 3:// string
14
+ return l(e);case 3:// string
15
15
  if(H>=B)return K.slice(B-G,(B+=e)-G);if(0==H&&140>V&&32>e){// for small blocks, avoiding the overhead of the extract call is helpful
16
- let t=16>e?u(e):d(e);if(null!=t)return t}return te(e);case 4:// array
16
+ let t=16>e?c(e):u(e);if(null!=t)return t}return te(e);case 4:// array
17
17
  let s=Array(e);//if (currentDecoder.keyMap) for (let i = 0; i < token; i++) array[i] = currentDecoder.decodeKey(read())
18
18
  //else
19
19
  for(let t=0;t<e;t++)s[t]=r();return s;case 5:// map
20
- if(q.mapsAsObjects){let t={};if(q.keyMap)for(let s=0;s<e;s++)t[q.decodeKey(r())]=r();else for(let s=0;s<e;s++)t[r()]=r();return t}else{z&&(q.mapsAsObjects=!0,z=!1);let t=new Map;if(q.keyMap)for(let s=0;s<e;s++)t.set(q.decodeKey(r()),r());else for(let s=0;s<e;s++)t.set(r(),r());return t}case 6:// extension
20
+ if(q.mapsAsObjects){let t={};if(q.keyMap)for(let s=0;s<e;s++)t[o(q.decodeKey(r()))]=r();else for(let s=0;s<e;s++)t[o(r())]=r();return t}else{z&&(q.mapsAsObjects=!0,z=!1);let t=new Map;if(q.keyMap)for(let s=0;s<e;s++)t.set(q.decodeKey(r()),r());else for(let s=0;s<e;s++)t.set(r(),r());return t}case 6:// extension
21
21
  if(e>=D){let t=T[8191&e];// check record structures first
22
22
  // At some point we may provide an option for dynamic tag assignment with a range like token >= 8 && (token < 16 || (token > 0x80 && token < 0xc0) || (token > 0x130 && token < 0x4000))
23
23
  if(t)return t.read||(t.read=i(t)),t.read();if(65536>e){if(e==P)// we do a special check for this so that we can keep the currentExtensions as densely stored array (v8 stores arrays densely under about 3000 elements)
24
- return re(r());if(e==L){let e=y(),t=r();for(let s=2;s<e;s++)re([t++,r()]);return r()}if(e==D)return h();if(q.getShared&&(m(),t=T[8191&e],t))return t.read||(t.read=i(t)),t.read()}}let n=J[e];if(n)return n.handlesRead?n(r):n(r());else{let t=r();for(let s,n=0;n<$.length;n++)if(s=$[n](e,t),void 0!==s)return s;return new ae(t,e)}case 7:// fixed value
24
+ return oe(r());if(e==L){let e=m(),t=r();for(let s=2;s<e;s++)oe([t++,r()]);return r()}if(e==D)return y();if(q.getShared&&(b(),t=T[8191&e],t))return t.read||(t.read=i(t)),t.read()}}let n=J[e];if(n)return n.handlesRead?n(r):n(r());else{let t=r();for(let s,n=0;n<$.length;n++)if(s=$[n](e,t),void 0!==s)return s;return new ie(t,e)}case 7:// fixed value
25
25
  switch(e){case 20:return!1;case 21:return!0;case 22:return null;case 23:return;// undefined
26
- case 31:default:let t=(N||f())[e];if(void 0!==t)return t;throw new Error("Unknown token "+e);}default:// negative int
26
+ case 31:default:let t=(N||g())[e];if(void 0!==t)return t;throw new Error("Unknown token "+e);}default:// negative int
27
27
  if(isNaN(e)){let e=new Error("Unexpected end of CBOR data");throw e.incomplete=!0,e}throw new Error("Unknown CBOR token "+e);}}function i(e){function t(){// get the array size from the header
28
28
  let e=x[B++];//let majorType = token >> 5
29
29
  if(e&=31,23<e)switch(e){case 24:e=x[B++];break;case 25:e=W.getUint16(B),B+=2;break;case 26:e=W.getUint32(B),B+=4;break;default:throw new Error("Expected array header, but got "+x[B-1]);}// This initial function is quick to instantiate, but runs slower. After several iterations pay the cost to build the faster function
@@ -31,20 +31,25 @@ let t=this.compiledReader;// first look to see if we have the fast compiled func
31
31
  for(;t;){// we have a fast compiled object literal reader
32
32
  if(t.propertyCount===e)return t(r);// with the right length, so we use it
33
33
  t=t.next}if(3<=this.slowReads++){// create a fast compiled reader
34
- let s=this.length==e?this:this.slice(0,e);return t=q.keyMap?new Function("r","return {"+s.map(e=>q.decodeKey(e)).map(e=>ee.test(e)?e+":r()":"["+JSON.stringify(e)+"]:r()").join(",")+"}"):new Function("r","return {"+s.map(e=>ee.test(e)?e+":r()":"["+JSON.stringify(e)+"]:r()").join(",")+"}"),this.compiledReader&&(t.next=this.compiledReader),t.propertyCount=e,this.compiledReader=t,t(r)}let s={};if(q.keyMap)for(let t=0;t<e;t++)s[q.decodeKey(this[t])]=r();else for(let t=0;t<e;t++)s[this[t]]=r();return s}return e.slowReads=0,t}function o(e){let t;if(16>e&&(t=u(e)))return t;if(64<e&&C)return C.decode(x.subarray(B,B+=e));const s=B+e,n=[];for(t="";B<s;){const e=x[B++];if(0==(128&e))n.push(e);else if(192==(224&e)){// 2 bytes
34
+ let s=this.length==e?this:this.slice(0,e);return t=q.keyMap?new Function("r","return {"+s.map(e=>q.decodeKey(e)).map(e=>ee.test(e)?o(e)+":r()":"["+JSON.stringify(e)+"]:r()").join(",")+"}"):new Function("r","return {"+s.map(e=>ee.test(e)?o(e)+":r()":"["+JSON.stringify(e)+"]:r()").join(",")+"}"),this.compiledReader&&(t.next=this.compiledReader),t.propertyCount=e,this.compiledReader=t,t(r)}let s={};if(q.keyMap)for(let t=0;t<e;t++)s[o(q.decodeKey(this[t]))]=r();else for(let t=0;t<e;t++)s[o(this[t])]=r();return s}return e.slowReads=0,t}function o(e){return"__proto__"===e?"__proto_":e}function d(e){let t;if(16>e&&(t=c(e)))return t;if(64<e&&C)return C.decode(x.subarray(B,B+=e));const s=B+e,n=[];for(t="";B<s;){const e=x[B++];if(0==(128&e))n.push(e);else if(192==(224&e)){// 2 bytes
35
35
  const t=63&x[B++];n.push((31&e)<<6|t)}else if(224==(240&e)){// 3 bytes
36
36
  const t=63&x[B++],s=63&x[B++];n.push((31&e)<<12|t<<6|s)}else if(240==(248&e)){// 4 bytes
37
- const t=63&x[B++],s=63&x[B++],a=63&x[B++];let r=(7&e)<<18|t<<12|s<<6|a;65535<r&&(r-=65536,n.push(55296|1023&r>>>10),r=56320|1023&r),n.push(r)}else n.push(e);4096<=n.length&&(t+=se.apply(String,n),n.length=0)}return 0<n.length&&(t+=se.apply(String,n)),t}function d(e){let t=B,s=Array(e);for(let n=0;n<e;n++){const e=x[B++];if(0<(128&e))return void(B=t);s[n]=e}return se.apply(String,s)}function u(t){if(4>t){if(!(2>t)){let e=x[B++],s=x[B++];if(0<(128&e)||0<(128&s))return void(B-=2);if(3>t)return se(e,s);let n=x[B++];return 0<(128&n)?void(B-=3):se(e,s,n)}if(0===t)return"";else{let e=x[B++];return 1<(128&e)?void(B-=1):se(e)}}else{let s=x[B++],a=x[B++],r=x[B++],u=x[B++];if(0<(128&s)||0<(128&a)||0<(128&r)||0<(128&u))return void(B-=4);if(6>t){if(4===t)return se(s,a,r,u);else{let t=x[B++];return 0<(128&t)?void(B-=5):se(s,a,r,u,t)}}else if(8>t){let n=x[B++],e=x[B++];if(0<(128&n)||0<(128&e))return void(B-=6);if(7>t)return se(s,a,r,u,n,e);let i=x[B++];return 0<(128&i)?void(B-=7):se(s,a,r,u,n,e,i)}else{let d=x[B++],e=x[B++],c=x[B++],p=x[B++];if(0<(128&d)||0<(128&e)||0<(128&c)||0<(128&p))return void(B-=8);if(10>t){if(8===t)return se(s,a,r,u,d,e,c,p);else{let t=x[B++];return 0<(128&t)?void(B-=9):se(s,a,r,u,d,e,c,p,t)}}else if(12>t){let n=x[B++],i=x[B++];if(0<(128&n)||0<(128&i))return void(B-=10);if(11>t)return se(s,a,r,u,d,e,c,p,n,i);let o=x[B++];return 0<(128&o)?void(B-=11):se(s,a,r,u,d,e,c,p,n,i,o)}else{let f=x[B++],i=x[B++],g=x[B++],h=x[B++];if(0<(128&f)||0<(128&i)||0<(128&g)||0<(128&h))return void(B-=12);if(!(14>t)){let l=x[B++],y=x[B++];if(0<(128&l)||0<(128&y))return void(B-=14);if(15>t)return se(s,a,r,u,d,e,c,p,f,i,g,h,l,y);let n=x[B++];return 0<(128&n)?void(B-=15):se(s,a,r,u,d,e,c,p,f,i,g,h,l,y,n)}if(12===t)return se(s,a,r,u,d,e,c,p,f,i,g,h);else{let t=x[B++];return 0<(128&t)?void(B-=13):se(s,a,r,u,d,e,c,p,f,i,g,h,t)}}}}}function c(e){return q.copyBuffers?// specifically use the copying slice (not the node one)
38
- Uint8Array.prototype.slice.call(x,B,B+=e):x.subarray(B,B+=e)}function l(){let e,t=x[B++],s=x[B++],a=(t<<8)+s,r=31&a>>10,i=1023&a;return e=0==r?n(i,-24):31==r?0==i?1/0:NaN:n(i+1024,r-25),32768&a?-e:e}function p(e,t){return"string"==typeof e?e+t:e instanceof Array?e.concat(t):Object.assign({},e,t)}function f(){if(!N)if(q.getShared)m();else throw new Error("No packed values available");return N}function g(e,t){let s="get"+e.name.slice(0,-5);"function"!=typeof e&&(e=null);let n=e.BYTES_PER_ELEMENT;for(let a=0;2>a;a++){if(!a&&1==n)continue;let r=2==n?1:4==n?2:3;J[a?t:t-4]=1==n||a==de?s=>{if(!e)throw new Error("Could not find typed array for code "+t);// we have to always slice/copy here to get a new ArrayBuffer that is word/byte aligned
39
- return new e(Uint8Array.prototype.slice.call(s,0).buffer)}:n=>{if(!e)throw new Error("Could not find typed array for code "+t);let o=new DataView(n.buffer,n.byteOffset,n.byteLength),d=n.length>>r,u=new e(d),c=o[s];for(let e=0;e<d;e++)u[e]=c.call(o,e<<r,a);return u}}}function h(){let e=y(),t=B+r();for(let t,s=2;s<e;s++)// skip past bundles that were already read
37
+ const t=63&x[B++],s=63&x[B++],a=63&x[B++];let r=(7&e)<<18|t<<12|s<<6|a;65535<r&&(r-=65536,n.push(55296|1023&r>>>10),r=56320|1023&r),n.push(r)}else n.push(e);4096<=n.length&&(t+=se.apply(String,n),n.length=0)}return 0<n.length&&(t+=se.apply(String,n)),t}function u(e){let t=B,s=Array(e);for(let n=0;n<e;n++){const e=x[B++];if(0<(128&e))return void(B=t);s[n]=e}return se.apply(String,s)}function c(t){if(4>t){if(!(2>t)){let e=x[B++],s=x[B++];if(0<(128&e)||0<(128&s))return void(B-=2);if(3>t)return se(e,s);let n=x[B++];return 0<(128&n)?void(B-=3):se(e,s,n)}if(0===t)return"";else{let e=x[B++];return 1<(128&e)?void(B-=1):se(e)}}else{let s=x[B++],a=x[B++],r=x[B++],u=x[B++];if(0<(128&s)||0<(128&a)||0<(128&r)||0<(128&u))return void(B-=4);if(6>t){if(4===t)return se(s,a,r,u);else{let t=x[B++];return 0<(128&t)?void(B-=5):se(s,a,r,u,t)}}else if(8>t){let n=x[B++],e=x[B++];if(0<(128&n)||0<(128&e))return void(B-=6);if(7>t)return se(s,a,r,u,n,e);let i=x[B++];return 0<(128&i)?void(B-=7):se(s,a,r,u,n,e,i)}else{let d=x[B++],e=x[B++],c=x[B++],p=x[B++];if(0<(128&d)||0<(128&e)||0<(128&c)||0<(128&p))return void(B-=8);if(10>t){if(8===t)return se(s,a,r,u,d,e,c,p);else{let t=x[B++];return 0<(128&t)?void(B-=9):se(s,a,r,u,d,e,c,p,t)}}else if(12>t){let n=x[B++],i=x[B++];if(0<(128&n)||0<(128&i))return void(B-=10);if(11>t)return se(s,a,r,u,d,e,c,p,n,i);let o=x[B++];return 0<(128&o)?void(B-=11):se(s,a,r,u,d,e,c,p,n,i,o)}else{let f=x[B++],i=x[B++],g=x[B++],h=x[B++];if(0<(128&f)||0<(128&i)||0<(128&g)||0<(128&h))return void(B-=12);if(!(14>t)){let l=x[B++],y=x[B++];if(0<(128&l)||0<(128&y))return void(B-=14);if(15>t)return se(s,a,r,u,d,e,c,p,f,i,g,h,l,y);let n=x[B++];return 0<(128&n)?void(B-=15):se(s,a,r,u,d,e,c,p,f,i,g,h,l,y,n)}if(12===t)return se(s,a,r,u,d,e,c,p,f,i,g,h);else{let t=x[B++];return 0<(128&t)?void(B-=13):se(s,a,r,u,d,e,c,p,f,i,g,h,t)}}}}}function l(e){return q.copyBuffers?// specifically use the copying slice (not the node one)
38
+ Uint8Array.prototype.slice.call(x,B,B+=e):x.subarray(B,B+=e)}function p(){let e=x[B++],t=x[B++],s=(127&e)>>2;if(31===s)// specials
39
+ return t||3&e?NaN:128&e?-Infinity:1/0;if(0===s){// sub-normals
40
+ // significand with 10 fractional bits and divided by 2^14
41
+ let s=((3&e)<<8|t)/16777216;return 128&e?-s:s}return ae[3]=128&e|// sign bit
42
+ (s>>1)+56,ae[2]=(7&e)<<5|// last exponent bit and first two mantissa bits
43
+ t>>3,ae[1]=t<<5,ae[0]=0,ne[0]}function f(e,t){return"string"==typeof e?e+t:e instanceof Array?e.concat(t):Object.assign({},e,t)}function g(){if(!N)if(q.getShared)b();else throw new Error("No packed values available");return N}function h(e,t){let s="get"+e.name.slice(0,-5);"function"!=typeof e&&(e=null);let n=e.BYTES_PER_ELEMENT;for(let a=0;2>a;a++){if(!a&&1==n)continue;let r=2==n?1:4==n?2:3;J[a?t:t-4]=1==n||a==ce?s=>{if(!e)throw new Error("Could not find typed array for code "+t);// we have to always slice/copy here to get a new ArrayBuffer that is word/byte aligned
44
+ return new e(Uint8Array.prototype.slice.call(s,0).buffer)}:n=>{if(!e)throw new Error("Could not find typed array for code "+t);let o=new DataView(n.buffer,n.byteOffset,n.byteLength),d=n.length>>r,u=new e(d),c=o[s];for(let e=0;e<d;e++)u[e]=c.call(o,e<<r,a);return u}}}function y(){let e=m(),t=B+r();for(let t,s=2;s<e;s++)// skip past bundles that were already read
40
45
  // this will increment position, so must add to position afterwards
41
- t=y(),B+=t;let s=B;return B=t,F=[o(y()),o(y())],F.position0=0,F.position1=0,F.postBundlePosition=B,B=s,r()}function y(){let e=31&x[B++];return 23<e&&(24===e?e=x[B++]:25===e?(e=W.getUint16(B),B+=2):26===e?(e=W.getUint32(B),B+=4):void 0),e}function m(){if(q.getShared){let e=b(()=>(x=null,q.getShared()))||{},t=e.structures||[];q.sharedVersion=e.version,N=q.sharedValues=e.packedValues,!0===T?q.structures=T=t:T.splice.apply(T,[0,t.length].concat(t))}}function b(e){let t=V,s=B,n=G,a=H,r=K,i=Y,o=F,d=new Uint8Array(x.slice(0,V)),u=T,c=q,l=X,p=e();return V=t,B=s,G=n,H=a,K=r,Y=i,F=o,x=d,X=l,T=u,q=c,W=new DataView(x.buffer,x.byteOffset,x.byteLength),p}function k(){x=null,Y=null,T=null}function R(e){J[e.tag]=e.decode}function O(e){24>e?Ue[Ae++]=128|e:256>e?(Ue[Ae++]=152,Ue[Ae++]=e):65536>e?(Ue[Ae++]=153,Ue[Ae++]=e>>8,Ue[Ae++]=255&e):(Ue[Ae++]=154,ve.setUint32(Ae,e),Ae+=4)}function M(e,t){switch(typeof e){case"string":if(3<e.length){if(-1<t.objectMap[e]||t.values.length>=t.maxValues)return;let s=t.get(e);if(s)2==++s.count&&t.values.push(e);else if(t.set(e,{count:1}),t.samplingPackedValues){let s=t.samplingPackedValues.get(e);s?s.count++:t.samplingPackedValues.set(e,{count:1})}}break;case"object":if(e)if(e instanceof Array)for(let s=0,n=e.length;s<n;s++)M(e[s],t);else{let n=!t.encoder.useRecords;for(var s in e)e.hasOwnProperty(s)&&(n&&M(s,t),M(e[s],t))}break;case"function":console.log(e);}}function S(e,t){// the big endian equivalents are 4 less
42
- return!Le&&1<t&&(e-=4),{tag:e,encode:function(e,t){let s=e.byteLength,n=e.byteOffset||0,a=e.buffer||e;t(Oe?Buffer.from(a,n,s):new Uint8Array(a,n,s))}}}function E(e,t){let s=e.byteLength;// if it is already a typed array (has an ArrayBuffer), use that, but if it is an ArrayBuffer itself,
46
+ t=m(),B+=t;let s=B;return B=t,F=[d(m()),d(m())],F.position0=0,F.position1=0,F.postBundlePosition=B,B=s,r()}function m(){let e=31&x[B++];return 23<e&&(24===e?e=x[B++]:25===e?(e=W.getUint16(B),B+=2):26===e?(e=W.getUint32(B),B+=4):void 0),e}function b(){if(q.getShared){let e=k(()=>(x=null,q.getShared()))||{},t=e.structures||[];q.sharedVersion=e.version,N=q.sharedValues=e.packedValues,!0===T?q.structures=T=t:T.splice.apply(T,[0,t.length].concat(t))}}function k(e){let t=V,s=B,n=G,a=H,r=K,i=Y,o=F,d=new Uint8Array(x.slice(0,V)),u=T,c=q,l=X,p=e();return V=t,B=s,G=n,H=a,K=r,Y=i,F=o,x=d,X=l,T=u,q=c,W=new DataView(x.buffer,x.byteOffset,x.byteLength),p}function R(){x=null,Y=null,T=null}function O(e){J[e.tag]=e.decode}function M(e){24>e?Ue[Ae++]=128|e:256>e?(Ue[Ae++]=152,Ue[Ae++]=e):65536>e?(Ue[Ae++]=153,Ue[Ae++]=e>>8,Ue[Ae++]=255&e):(Ue[Ae++]=154,ve.setUint32(Ae,e),Ae+=4)}function _(e,t){switch(typeof e){case"string":if(3<e.length){if(-1<t.objectMap[e]||t.values.length>=t.maxValues)return;let s=t.get(e);if(s)2==++s.count&&t.values.push(e);else if(t.set(e,{count:1}),t.samplingPackedValues){let s=t.samplingPackedValues.get(e);s?s.count++:t.samplingPackedValues.set(e,{count:1})}}break;case"object":if(e)if(e instanceof Array)for(let s=0,n=e.length;s<n;s++)_(e[s],t);else{let n=!t.encoder.useRecords;for(var s in e)e.hasOwnProperty(s)&&(n&&_(s,t),_(e[s],t))}break;case"function":console.log(e);}}function S(e,t){// the big endian equivalents are 4 less
47
+ return!Pe&&1<t&&(e-=4),{tag:e,encode:function s(e,t){let n=e.byteLength,a=e.byteOffset||0,r=e.buffer||e;t(Oe?Buffer.from(r,a,n):new Uint8Array(r,a,n))}}}function E(e,t){let s=e.byteLength;// if it is already a typed array (has an ArrayBuffer), use that, but if it is an ArrayBuffer itself,
43
48
  // must wrap it to set it.
44
- 24>s?Ue[Ae++]=64+s:256>s?(Ue[Ae++]=88,Ue[Ae++]=s):65536>s?(Ue[Ae++]=89,Ue[Ae++]=s>>8,Ue[Ae++]=255&s):(Ue[Ae++]=90,ve.setUint32(Ae,s),Ae+=4),Ae+s>=Ue.length&&t(Ae+s),Ue.set(e.buffer?e:new Uint8Array(e),Ae),Ae+=s}function _(e,t){// insert the ids that need to be referenced for structured clones
49
+ 24>s?Ue[Ae++]=64+s:256>s?(Ue[Ae++]=88,Ue[Ae++]=s):65536>s?(Ue[Ae++]=89,Ue[Ae++]=s>>8,Ue[Ae++]=255&s):(Ue[Ae++]=90,ve.setUint32(Ae,s),Ae+=4),Ae+s>=Ue.length&&t(Ae+s),Ue.set(e.buffer?e:new Uint8Array(e),Ae),Ae+=s}function U(e,t){// insert the ids that need to be referenced for structured clones
45
50
  let s,n=2*t.length,a=e.length-n;t.sort((e,t)=>e.offset>t.offset?1:-1);for(let s,n=0;n<t.length;n++){s=t[n],s.id=n;for(let t of s.references)e[t++]=n>>8,e[t]=255&n}for(;s=t.pop();){let t=s.offset;e.copyWithin(t+n,t,a),n-=2;let r=t+n;// http://cbor.schmorp.de/value-sharing
46
- e[r++]=216,e[r++]=28,a=t}return e}function U(e,t){ve.setUint32(Ce.position+e,Ae-Ce.position-e+1);// the offset to bundle
47
- let s=Ce;Ce=null,t(s[0]),t(s[1])}function v(e){if(e.Class){if(!e.encode)throw new Error("Extension has no encode function");Re.unshift(e.Class),ke.unshift(e)}R(e)}function*I(e,t){const s=new Ve(t);for(const n of e)yield s.encode(n)}async function*A(e,t){const s=new Ve(t);for await(const n of e)yield s.encode(n)}/**
51
+ e[r++]=216,e[r++]=28,a=t}return e}function v(e,t){ve.setUint32(Ce.position+e,Ae-Ce.position-e+1);// the offset to bundle
52
+ let s=Ce;Ce=null,t(s[0]),t(s[1])}function*I(e,t){const s=new Be(t);for(const n of e)yield s.encode(n)}async function*A(e,t){const s=new Be(t);for await(const n of e)yield s.encode(n)}/**
48
53
  * Given an Iterable/Iterator input which yields buffers, returns an IterableIterator which yields sync decoded objects
49
54
  * Or, given an Async Iterable/Iterator which yields promises resolving in buffers, returns an AsyncIterableIterator.
50
55
  * @param {Iterable|Iterator|AsyncIterable|AsyncIterableIterator} bufferIterator
@@ -58,34 +63,34 @@ let s=Ce;Ce=null,t(s[0]),t(s[1])}function v(e){if(e.Class){if(!e.encode)throw ne
58
63
  : key
59
64
  }
60
65
  */decodeKey(e){return this.keyMap?this.mapKey.get(e)||e:e}encodeKey(e){return this.keyMap&&this.keyMap.hasOwnProperty(e)?this.keyMap[e]:e}encodeKeys(e){if(!this._keyMap)return e;let t=new Map;for(let[s,n]of Object.entries(e))t.set(this._keyMap.hasOwnProperty(s)?this._keyMap[s]:s,n);return t}decodeKeys(e){if(!this._keyMap||"Map"!=e.constructor.name)return e;if(!this._mapKey){this._mapKey=new Map;for(let[e,t]of Object.entries(this._keyMap))this._mapKey.set(t,e)}let t={};//map.forEach((v,k) => res[Object.keys(this._keyMap)[Object.values(this._keyMap).indexOf(k)] || k] = v)
61
- return e.forEach((e,s)=>t[this._mapKey.has(s)?this._mapKey.get(s):s]=e),t}mapDecode(e){let t=this.decode(e);if(this._keyMap)//Experiemntal support for Optimised KeyMap decoding
62
- switch(t.constructor.name){case"Array":return t.map(e=>this.decodeKeys(e));//case 'Map': return this.decodeKeys(res)
63
- }return t}decode(e,t){if(x)// re-entrant execution, save the state and restore it after we do this decode
64
- return b(()=>(k(),this?this.decode(e,t):Z.prototype.decode.call(Q,e,t)));V=-1<t?t:e.length,B=0,H=0,K=null,F=null,x=e;// this provides cached access to the data view for a buffer if it is getting reused, which is a recommend
66
+ return e.forEach((e,s)=>t[o(this._mapKey.has(s)?this._mapKey.get(s):s)]=e),t}mapDecode(e,t){let s=this.decode(e);if(this._keyMap)//Experiemntal support for Optimised KeyMap decoding
67
+ switch(s.constructor.name){case"Array":return s.map(e=>this.decodeKeys(e));//case 'Map': return this.decodeKeys(res)
68
+ }return s}decode(e,t){if(x)// re-entrant execution, save the state and restore it after we do this decode
69
+ return k(()=>(R(),this?this.decode(e,t):Z.prototype.decode.call(Q,e,t)));V=-1<t?t:e.length,B=0,H=0,K=null,F=null,x=e;// this provides cached access to the data view for a buffer if it is getting reused, which is a recommend
65
70
  // technique for getting data from a database where it can be copied into an existing buffer instead of creating
66
71
  // new ones
67
- try{W=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))}catch(t){if(x=null,e instanceof Uint8Array)throw t;throw new Error("Source must be a Uint8Array or Buffer but was a "+(e&&"object"==typeof e?e.constructor.name:typeof e))}if(this instanceof Z){if(q=this,N=this.sharedValues&&(this.pack?Array(this.maxPrivatePackedValues||16).concat(this.sharedValues):this.sharedValues),this.structures)return T=this.structures,a();(!T||0<T.length)&&(T=[])}else q=Q,(!T||0<T.length)&&(T=[]),N=null;return a()}decodeMultiple(e,t){let s,n=0;try{let r=e.length;X=!0;let i=this?this.decode(e,r):pe.decode(e,r);if(t){if(!1===t(i))return;for(;B<r;)if(n=B,!1===t(a()))return}else{for(s=[i];B<r;)n=B,s.push(a());return s}}catch(e){throw e.lastPosition=n,e.values=s,e}finally{X=!1,k()}}}const ee=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;let te=o,se=String.fromCharCode,ne=Array(4096);class ae{constructor(e,t){this.value=e,this.tag=t}}J[0]=e=>new Date(e),J[1]=e=>new Date(s(1e3*e)),J[2]=e=>{// bigint extension
68
- let t=BigInt(0);for(let s=0,n=e.byteLength;s<n;s++)t=BigInt(e[s])+t<<BigInt(8);return t},J[3]=e=>BigInt(-1)-J[2](e),J[4]=e=>+(e[1]+"e"+e[0]),J[5]=e=>e[1]*n(e[0]*t(2));// the registration of the record definition extension
69
- const re=e=>{let t=e[0]-57344,s=e[1],n=T[t];n&&n.isShared&&((T.restoreStructures||(T.restoreStructures=[]))[t]=n),T[t]=s,s.read=i(s);let a={};if(q.keyMap)for(let t,n=2,r=e.length;n<r;n++)t=q.decodeKey(s[n-2]),a[t]=e[n];else for(let t,n=2,r=e.length;n<r;n++)t=s[n-2],a[t]=e[n];return a};J[105]=re,J[14]=e=>F?F[0].slice(F.position0,F.position0+=e):new ae(e,14),J[15]=e=>F?F[1].slice(F.position1,F.position1+=e):new ae(e,15);let ie={Error,RegExp};J[27]=e=>(ie[e[0]]||Error)(e[1],e[2]);const oe=e=>{if(132!=x[B++])throw new Error("Packed values structure must be followed by a 4 element array");let t=e();// packed values
72
+ try{W=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))}catch(t){if(x=null,e instanceof Uint8Array)throw t;throw new Error("Source must be a Uint8Array or Buffer but was a "+(e&&"object"==typeof e?e.constructor.name:typeof e))}if(this instanceof Z){if(q=this,N=this.sharedValues&&(this.pack?Array(this.maxPrivatePackedValues||16).concat(this.sharedValues):this.sharedValues),this.structures)return T=this.structures,a();(!T||0<T.length)&&(T=[])}else q=Q,(!T||0<T.length)&&(T=[]),N=null;return a()}decodeMultiple(e,t){let s,n=0;try{let r=e.length;X=!0;let i=this?this.decode(e,r):ge.decode(e,r);if(t){if(!1===t(i))return;for(;B<r;)if(n=B,!1===t(a()))return}else{for(s=[i];B<r;)n=B,s.push(a());return s}}catch(e){throw e.lastPosition=n,e.values=s,e}finally{X=!1,R()}}}const ee=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;let te=d,se=String.fromCharCode,ne=new Float32Array(1),ae=new Uint8Array(ne.buffer,0,4),re=Array(4096);class ie{constructor(e,t){this.value=e,this.tag=t}}J[0]=e=>new Date(e),J[1]=e=>new Date(n(1e3*e)),J[2]=e=>{// bigint extension
73
+ let t=BigInt(0);for(let s=0,n=e.byteLength;s<n;s++)t=BigInt(e[s])+t<<BigInt(8);return t},J[3]=e=>BigInt(-1)-J[2](e),J[4]=e=>+(e[1]+"e"+e[0]),J[5]=e=>e[1]*t(e[0]*s(2));// the registration of the record definition extension
74
+ const oe=e=>{let t=e[0]-57344,s=e[1],n=T[t];n&&n.isShared&&((T.restoreStructures||(T.restoreStructures=[]))[t]=n),T[t]=s,s.read=i(s);let a={};if(q.keyMap)for(let t,n=2,r=e.length;n<r;n++)t=q.decodeKey(s[n-2]),a[o(t)]=e[n];else for(let t,n=2,r=e.length;n<r;n++)t=s[n-2],a[o(t)]=e[n];return a};J[105]=oe,J[14]=e=>F?F[0].slice(F.position0,F.position0+=e):new ie(e,14),J[15]=e=>F?F[1].slice(F.position1,F.position1+=e):new ie(e,15);let de={Error,RegExp};J[27]=e=>(de[e[0]]||Error)(e[1],e[2]);const ue=e=>{if(132!=x[B++])throw new Error("Packed values structure must be followed by a 4 element array");let t=e();// packed values
70
75
  return N=N?t.concat(N.slice(t.length)):t,N.prefixes=e(),N.suffixes=e(),e();// read the rump
71
- };oe.handlesRead=!0,J[51]=oe,J[j]=e=>{// packed reference
72
- if(!N)if(q.getShared)m();else return new ae(e,j);if("number"==typeof e)return N[16+(0<=e?2*e:-2*e-1)];throw new Error("No support for non-integer packed references yet")},J[25]=e=>stringRefs[e],J[256]=e=>{stringRefs=[];try{return e()}finally{stringRefs=null}},J[256].handlesRead=!0,J[28]=e=>{Y||(Y=new Map,Y.id=0);let t,s=Y.id++,n=x[B];t=4==n>>5?[]:{};let a={target:t};// a placeholder object
76
+ };ue.handlesRead=!0,J[51]=ue,J[j]=e=>{// packed reference
77
+ if(!N)if(q.getShared)b();else return new ie(e,j);if("number"==typeof e)return N[16+(0<=e?2*e:-2*e-1)];throw new Error("No support for non-integer packed references yet")},J[25]=e=>stringRefs[e],J[256]=e=>{stringRefs=[];try{return e()}finally{stringRefs=null}},J[256].handlesRead=!0,J[28]=e=>{Y||(Y=new Map,Y.id=0);let t,s=Y.id++,n=x[B];t=4==n>>5?[]:{};let a={target:t};// a placeholder object
73
78
  Y.set(s,a);let r=e();// read the next value as the target object to id
74
79
  return a.used?Object.assign(t,r):(a.target=r,r);// no cycle, can just use the returned read object
75
80
  },J[28].handlesRead=!0,J[29]=e=>{// sharedref http://cbor.schmorp.de/value-sharing (for structured clones)
76
- let t=Y.get(e);return t.used=!0,t.target},J[258]=e=>new Set(e),(J[259]=e=>(q.mapsAsObjects&&(q.mapsAsObjects=!1,z=!0),e())).handlesRead=!0;$.push((e,t)=>225<=e&&255>=e?p(f().prefixes[e-224],t):28704<=e&&32767>=e?p(f().prefixes[e-28672],t):1879052288<=e&&2147483647>=e?p(f().prefixes[e-1879048192],t):216<=e&&223>=e?p(t,f().suffixes[e-216]):27647<=e&&28671>=e?p(t,f().suffixes[e-27639]):1811940352<=e&&1879048191>=e?p(t,f().suffixes[e-1811939328]):e==1399353956?{packedValues:N,structures:T.slice(0),version:t}:55799==e?t:void 0);const de=1==new Uint8Array(new Uint16Array([1]).buffer)[0],ue=[Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array,"undefined"==typeof BigUint64Array?{name:"BigUint64Array"}:BigUint64Array,Int8Array,Int16Array,Int32Array,"undefined"==typeof BigInt64Array?{name:"BigInt64Array"}:BigInt64Array,Float32Array,Float64Array],ce=[64,68,69,70,71,72,77,78,79,85,86];for(let t=0;t<ue.length;t++)g(ue[t],ce[t]);const le=Array(147);// this is a table matching binary exponents to the multiplier to determine significant digit rounding
77
- for(let t=0;256>t;t++)le[t]=+("1e"+Math.floor(45.15-.30103*t));let pe=new Z({useRecords:!1});const fe=pe.decode,ge=pe.decodeMultiple,he={NEVER:0,ALWAYS:1,DECIMAL_ROUND:3,DECIMAL_FIT:4};let ye,me=new Float32Array(1),be=new Uint8Array(me.buffer,0,4);try{ye=new TextEncoder}catch(e){}let ke,Re;const Oe="undefined"!=typeof Buffer,Me=Oe?Buffer.allocUnsafeSlow:Uint8Array,Se=Oe?Buffer:Uint8Array,Ee=256,_e=Oe?4294967296:2144337920;let Ue,ve,Ie,Ae=0,Ce=null;const xe=Symbol("record-id");class Ve extends Z{constructor(e){super(e),this.offset=0;let t,n,a,r,i;e=e||{};let o=Se.prototype.utf8Write?function(e,t,s){return Ue.utf8Write(e,t,s)}:!!(ye&&ye.encodeInto)&&function(e,t){return ye.encodeInto(e,Ue.subarray(t)).written},d=this,u=e.structures||e.saveStructures,c=e.maxSharedStructures;if(null==c&&(c=u?128:0),8190<c)throw new Error("Maximum maxSharedStructure is 8190");let l=e.sequential;l&&(c=0),this.structures||(this.structures=[]),this.saveStructures&&(this.saveShared=this.saveStructures);let p,f,g,h=e.sharedValues;if(h){g=Object.create(null);for(let e=0,t=h.length;e<t;e++)g[h[e]]=e}let y=[],m=0,b=0;this.mapEncode=function(e,t){// Experimental support for premapping keys using _keyMap instad of keyMap - not optiimised yet)
81
+ let t=Y.get(e);return t.used=!0,t.target},J[258]=e=>new Set(e),(J[259]=e=>(q.mapsAsObjects&&(q.mapsAsObjects=!1,z=!0),e())).handlesRead=!0;$.push((e,t)=>225<=e&&255>=e?f(g().prefixes[e-224],t):28704<=e&&32767>=e?f(g().prefixes[e-28672],t):1879052288<=e&&2147483647>=e?f(g().prefixes[e-1879048192],t):216<=e&&223>=e?f(t,g().suffixes[e-216]):27647<=e&&28671>=e?f(t,g().suffixes[e-27639]):1811940352<=e&&1879048191>=e?f(t,g().suffixes[e-1811939328]):e==1399353956?{packedValues:N,structures:T.slice(0),version:t}:55799==e?t:void 0);const ce=1==new Uint8Array(new Uint16Array([1]).buffer)[0],le=[Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array,"undefined"==typeof BigUint64Array?{name:"BigUint64Array"}:BigUint64Array,Int8Array,Int16Array,Int32Array,"undefined"==typeof BigInt64Array?{name:"BigInt64Array"}:BigInt64Array,Float32Array,Float64Array],pe=[64,68,69,70,71,72,77,78,79,85,86];for(let t=0;t<le.length;t++)h(le[t],pe[t]);const fe=Array(147);// this is a table matching binary exponents to the multiplier to determine significant digit rounding
82
+ for(let t=0;256>t;t++)fe[t]=+("1e"+Math.floor(45.15-.30103*t));let ge=new Z({useRecords:!1});const he=ge.decode,ye=ge.decodeMultiple,me={NEVER:0,ALWAYS:1,DECIMAL_ROUND:3,DECIMAL_FIT:4};let be;try{be=new TextEncoder}catch(e){}let ke,Re;const Oe="undefined"!=typeof Buffer,Me=Oe?Buffer.allocUnsafeSlow:Uint8Array,_e=Oe?Buffer:Uint8Array,Se=256,Ee=Oe?4294967296:2144337920;let Ue,ve,Ie,Ae=0,Ce=null;const xe=/[\u0080-\uFFFF]/,Ve=Symbol("record-id");class Be extends Z{constructor(e){super(e),this.offset=0;let t,s,a,r,i;e=e||{};let o=_e.prototype.utf8Write?function(e,t,s){return Ue.utf8Write(e,t,s)}:!!(be&&be.encodeInto)&&function(e,t){return be.encodeInto(e,Ue.subarray(t)).written},d=this,u=e.structures||e.saveStructures,c=e.maxSharedStructures;if(null==c&&(c=u?128:0),8190<c)throw new Error("Maximum maxSharedStructure is 8190");let l=e.sequential;l&&(c=0),this.structures||(this.structures=[]),this.saveStructures&&(this.saveShared=this.saveStructures);let p,f,g,h=e.sharedValues;if(h){g=Object.create(null);for(let e=0,t=h.length;e<t;e++)g[h[e]]=e}let y=[],m=0,b=0;this.mapEncode=function(e,t){// Experimental support for premapping keys using _keyMap instad of keyMap - not optiimised yet)
78
83
  if(this._keyMap&&!this._mapped)//console.log('encoding ', value)
79
84
  switch(e.constructor.name){case"Array":e=e.map(e=>this.encodeKeys(e));//case 'Map':
80
85
  // value = this.encodeKeys(value)
81
86
  // break
82
87
  }//this._mapped = true
83
- return this.encode(e,t)},this.encode=function(s,o){if(Ue||(Ue=new Me(8192),ve=new DataView(Ue.buffer,0,8192),Ae=0),Ie=Ue.length-10,2048>Ie-Ae?(Ue=new Me(Ue.length),ve=new DataView(Ue.buffer,0,Ue.length),Ie=Ue.length-10,Ae=0):o===Fe&&(Ae=2147483640&Ae+7),t=Ae,d.useSelfDescribedHeader&&(ve.setUint32(Ae,3654940416),Ae+=3),i=d.structuredClone?new Map:null,d.bundleStrings&&"string"!=typeof s?(Ce=[],Ce.size=1/0):Ce=null,n=d.structures,n){if(n.uninitialized){let e=d.getShared()||{};d.structures=n=e.structures||[],d.sharedVersion=e.version;let t=d.sharedValues=e.packedValues;if(t){g={};for(let e=0,s=t.length;e<s;e++)g[t[e]]=e}}let e=n.length;if(e>c&&!l&&(e=c),!n.transitions){n.transitions=Object.create(null);for(let t,s=0;s<e;s++){//console.log('shared struct keys:', keys)
84
- if(t=n[s],!t)continue;let e,a=n.transitions;for(let n=0,r=t.length;n<r;n++){void 0===a[xe]&&(a[xe]=s);let r=t[n];e=a[r],e||(e=a[r]=Object.create(null)),a=e}a[xe]=1048576|s}}l||(n.nextId=e)}if(a&&(a=!1),r=n||[],f=g,e.pack){let t=new Map;if(t.values=[],t.encoder=d,t.maxValues=e.maxPrivatePackedValues||(g?16:1/0),t.objectMap=g||!1,t.samplingPackedValues=p,M(s,t),0<t.values.length){Ue[Ae++]=216,Ue[Ae++]=51,O(4);let e=t.values;k(e),O(0),O(0),f=Object.create(g||null);for(let t=0,s=e.length;t<s;t++)f[e[t]]=t}}try{// update the offset so next serialization doesn't write over our buffer, but can continue writing to same buffer sequentially
85
- if(k(s),Ce&&U(t,k),d.offset=Ae,i&&i.idsToInsert){Ae+=2*i.idsToInsert.length,Ae>Ie&&S(Ae),d.offset=Ae;let e=_(Ue.subarray(t,Ae),i.idsToInsert);return i=null,e}return o&Fe?(Ue.start=t,Ue.end=Ae,Ue):Ue.subarray(t,Ae);// position can change if we call encode again in saveShared, so we get the buffer now
86
- }finally{if(n)if(10>b&&b++,n.length>c&&(n.length=c),1e4<m)n.transitions=null,b=0,m=0,0<y.length&&(y=[]);else if(0<y.length&&!l){for(let e=0,t=y.length;e<t;e++)y[e][xe]=void 0;y=[]}if(a&&d.saveShared){d.structures.length>c&&(d.structures=d.structures.slice(0,c));// we can't rely on start/end with REUSE_BUFFER_MODE since they will (probably) change when we save
87
- let e=Ue.subarray(t,Ae);return!1===d.updateSharedData()?d.encode(s):e;// re-encode if it fails
88
- }o&Ye&&(Ae=t)}},this.findCommonStringsToPack=()=>(p=new Map,g||(g=Object.create(null)),e=>{let t=e&&e.threshold||4,s=this.pack?e.maxPrivatePackedValues||16:0;h||(h=this.sharedValues=[]);for(let[n,r]of p)r.count>t&&(g[n]=s++,h.push(n),a=!0);for(;this.saveShared&&!1===this.updateSharedData(););p=null});const k=s=>{Ae>Ie&&(Ue=S(Ae));var n,a=typeof s;if("string"==a){if(f){let t=f[s];if(0<=t)return void(16>t?Ue[Ae++]=t+224:(Ue[Ae++]=198,1&t?k(15-t>>1):k(t-16>>1)));/* } else if (packedStatus.serializationId != serializationId) {
88
+ return this.encode(e,t)},this.encode=function(n,o){if(Ue||(Ue=new Me(8192),ve=new DataView(Ue.buffer,0,8192),Ae=0),Ie=Ue.length-10,2048>Ie-Ae?(Ue=new Me(Ue.length),ve=new DataView(Ue.buffer,0,Ue.length),Ie=Ue.length-10,Ae=0):o===Ye&&(Ae=2147483640&Ae+7),t=Ae,d.useSelfDescribedHeader&&(ve.setUint32(Ae,3654940416),Ae+=3),i=d.structuredClone?new Map:null,d.bundleStrings&&"string"!=typeof n?(Ce=[],Ce.size=1/0):Ce=null,s=d.structures,s){if(s.uninitialized){let e=d.getShared()||{};d.structures=s=e.structures||[],d.sharedVersion=e.version;let t=d.sharedValues=e.packedValues;if(t){g={};for(let e=0,s=t.length;e<s;e++)g[t[e]]=e}}let e=s.length;if(e>c&&!l&&(e=c),!s.transitions){s.transitions=Object.create(null);for(let t,n=0;n<e;n++){//console.log('shared struct keys:', keys)
89
+ if(t=s[n],!t)continue;let e,a=s.transitions;for(let s=0,r=t.length;s<r;s++){void 0===a[Ve]&&(a[Ve]=n);let r=t[s];e=a[r],e||(e=a[r]=Object.create(null)),a=e}a[Ve]=1048576|n}}l||(s.nextId=e)}if(a&&(a=!1),r=s||[],f=g,e.pack){let t=new Map;if(t.values=[],t.encoder=d,t.maxValues=e.maxPrivatePackedValues||(g?16:1/0),t.objectMap=g||!1,t.samplingPackedValues=p,_(n,t),0<t.values.length){Ue[Ae++]=216,Ue[Ae++]=51,M(4);let e=t.values;k(e),M(0),M(0),f=Object.create(g||null);for(let t=0,s=e.length;t<s;t++)f[e[t]]=t}}try{// update the offset so next serialization doesn't write over our buffer, but can continue writing to same buffer sequentially
90
+ if(k(n),Ce&&v(t,k),d.offset=Ae,i&&i.idsToInsert){Ae+=2*i.idsToInsert.length,Ae>Ie&&O(Ae),d.offset=Ae;let e=U(Ue.subarray(t,Ae),i.idsToInsert);return i=null,e}return o&Ye?(Ue.start=t,Ue.end=Ae,Ue):Ue.subarray(t,Ae);// position can change if we call encode again in saveShared, so we get the buffer now
91
+ }finally{if(s)if(10>b&&b++,s.length>c&&(s.length=c),1e4<m)s.transitions=null,b=0,m=0,0<y.length&&(y=[]);else if(0<y.length&&!l){for(let e=0,t=y.length;e<t;e++)y[e][Ve]=void 0;y=[]}if(a&&d.saveShared){d.structures.length>c&&(d.structures=d.structures.slice(0,c));// we can't rely on start/end with REUSE_BUFFER_MODE since they will (probably) change when we save
92
+ let e=Ue.subarray(t,Ae);return!1===d.updateSharedData()?d.encode(n):e;// re-encode if it fails
93
+ }o&Ne&&(Ae=t)}},this.findCommonStringsToPack=()=>(p=new Map,g||(g=Object.create(null)),e=>{let t=e&&e.threshold||4,s=this.pack?e.maxPrivatePackedValues||16:0;h||(h=this.sharedValues=[]);for(let[n,r]of p)r.count>t&&(g[n]=s++,h.push(n),a=!0);for(;this.saveShared&&!1===this.updateSharedData(););p=null});const k=s=>{Ae>Ie&&(Ue=O(Ae));var n,a=typeof s;if("string"==a){if(f){let t=f[s];if(0<=t)return void(16>t?Ue[Ae++]=t+224:(Ue[Ae++]=198,1&t?k(15-t>>1):k(t-16>>1)));/* } else if (packedStatus.serializationId != serializationId) {
89
94
  packedStatus.serializationId = serializationId
90
95
  packedStatus.count = 1
91
96
  if (options.sharedPack) {
@@ -98,23 +103,23 @@ let e=Ue.subarray(t,Ae);return!1===d.updateSharedData()?d.encode(s):e;// re-enco
98
103
 
99
104
  }
100
105
  }
101
- } // else any in-doc incrementation?*/if(p&&!e.pack){let e=p.get(s);e?e.count++:p.set(s,{count:1})}}let a=s.length;if(Ce&&4<=a&&1024>a){if((Ce.size+=a)>61440){let e,s=(Ce[0]?3*Ce[0].length+Ce[1].length:0)+10;Ae+s>Ie&&(Ue=S(Ae+s)),Ue[Ae++]=217,Ue[Ae++]=223,Ue[Ae++]=249,Ue[Ae++]=Ce.position?132:130,Ue[Ae++]=26,e=Ae-t,Ae+=4,Ce.position&&U(t,k),Ce=["",""],Ce.size=0,Ce.position=e}let e=/[\u0080-\uFFFF]/.test(s);return Ce[e?0:1]+=s,Ue[Ae++]=e?206:207,void k(a)}let r=32>a?1:256>a?2:65536>a?3:5;// first we estimate the header size, so we can write to the correct location
102
- let i=3*a;if(Ae+i>Ie&&(Ue=S(Ae+i)),64>a||!o){let e,t,i,o=Ae+r;for(e=0;e<a;e++)t=s.charCodeAt(e),128>t?Ue[o++]=t:2048>t?(Ue[o++]=192|t>>6,Ue[o++]=128|63&t):55296==(64512&t)&&56320==(64512&(i=s.charCodeAt(e+1)))?(t=65536+((1023&t)<<10)+(1023&i),e++,Ue[o++]=240|t>>18,Ue[o++]=128|63&t>>12,Ue[o++]=128|63&t>>6,Ue[o++]=128|63&t):(Ue[o++]=224|t>>12,Ue[o++]=128|63&t>>6,Ue[o++]=128|63&t);n=o-Ae-r}else n=o(s,Ae+r,i);24>n?Ue[Ae++]=96|n:256>n?(2>r&&Ue.copyWithin(Ae+2,Ae+1,Ae+1+n),Ue[Ae++]=120,Ue[Ae++]=n):65536>n?(3>r&&Ue.copyWithin(Ae+3,Ae+2,Ae+2+n),Ue[Ae++]=121,Ue[Ae++]=n>>8,Ue[Ae++]=255&n):(5>r&&Ue.copyWithin(Ae+5,Ae+3,Ae+3+n),Ue[Ae++]=122,ve.setUint32(Ae,n),Ae+=4),Ae+=n}else if("number"===a){if(s>>>0===s)24>s?Ue[Ae++]=s:256>s?(Ue[Ae++]=24,Ue[Ae++]=s):65536>s?(Ue[Ae++]=25,Ue[Ae++]=s>>8,Ue[Ae++]=255&s):(Ue[Ae++]=26,ve.setUint32(Ae,s),Ae+=4);else if(s>>0===s)-24<=s?Ue[Ae++]=31-s:-256<=s?(Ue[Ae++]=56,Ue[Ae++]=~s):-65536<=s?(Ue[Ae++]=57,ve.setUint16(Ae,~s),Ae+=2):(Ue[Ae++]=58,ve.setUint32(Ae,~s),Ae+=4);else{let e;if(0<(e=this.useFloat32)&&4294967296>s&&-2147483648<=s){Ue[Ae++]=250,ve.setFloat32(Ae,s);let t;if(4>e||// this checks for rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved
103
- (t=s*le[(127&Ue[Ae])<<1|Ue[Ae+1]>>7])>>0===t)return void(Ae+=4);// move back into position for writing a double
106
+ } // else any in-doc incrementation?*/if(p&&!e.pack){let e=p.get(s);e?e.count++:p.set(s,{count:1})}}let a=s.length;if(Ce&&4<=a&&1024>a){if((Ce.size+=a)>61440){let e,s=(Ce[0]?3*Ce[0].length+Ce[1].length:0)+10;Ae+s>Ie&&(Ue=O(Ae+s)),Ue[Ae++]=217,Ue[Ae++]=223,Ue[Ae++]=249,Ue[Ae++]=Ce.position?132:130,Ue[Ae++]=26,e=Ae-t,Ae+=4,Ce.position&&v(t,k),Ce=["",""],Ce.size=0,Ce.position=e}let e=xe.test(s);return Ce[e?0:1]+=s,Ue[Ae++]=e?206:207,void k(a)}let r;// first we estimate the header size, so we can write to the correct location
107
+ r=32>a?1:256>a?2:65536>a?3:5;let i=3*a;if(Ae+i>Ie&&(Ue=O(Ae+i)),64>a||!o){let e,t,i,o=Ae+r;for(e=0;e<a;e++)t=s.charCodeAt(e),128>t?Ue[o++]=t:2048>t?(Ue[o++]=192|t>>6,Ue[o++]=128|63&t):55296==(64512&t)&&56320==(64512&(i=s.charCodeAt(e+1)))?(t=65536+((1023&t)<<10)+(1023&i),e++,Ue[o++]=240|t>>18,Ue[o++]=128|63&t>>12,Ue[o++]=128|63&t>>6,Ue[o++]=128|63&t):(Ue[o++]=224|t>>12,Ue[o++]=128|63&t>>6,Ue[o++]=128|63&t);n=o-Ae-r}else n=o(s,Ae+r,i);24>n?Ue[Ae++]=96|n:256>n?(2>r&&Ue.copyWithin(Ae+2,Ae+1,Ae+1+n),Ue[Ae++]=120,Ue[Ae++]=n):65536>n?(3>r&&Ue.copyWithin(Ae+3,Ae+2,Ae+2+n),Ue[Ae++]=121,Ue[Ae++]=n>>8,Ue[Ae++]=255&n):(5>r&&Ue.copyWithin(Ae+5,Ae+3,Ae+3+n),Ue[Ae++]=122,ve.setUint32(Ae,n),Ae+=4),Ae+=n}else if("number"===a){if(s>>>0===s)24>s?Ue[Ae++]=s:256>s?(Ue[Ae++]=24,Ue[Ae++]=s):65536>s?(Ue[Ae++]=25,Ue[Ae++]=s>>8,Ue[Ae++]=255&s):(Ue[Ae++]=26,ve.setUint32(Ae,s),Ae+=4);else if(s>>0===s)-24<=s?Ue[Ae++]=31-s:-256<=s?(Ue[Ae++]=56,Ue[Ae++]=~s):-65536<=s?(Ue[Ae++]=57,ve.setUint16(Ae,~s),Ae+=2):(Ue[Ae++]=58,ve.setUint32(Ae,~s),Ae+=4);else{let e;if(0<(e=this.useFloat32)&&4294967296>s&&-2147483648<=s){Ue[Ae++]=250,ve.setFloat32(Ae,s);let t;if(4>e||// this checks for rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved
108
+ (t=s*fe[(127&Ue[Ae])<<1|Ue[Ae+1]>>7])>>0===t)return void(Ae+=4);// move back into position for writing a double
104
109
  Ae--}Ue[Ae++]=251,ve.setFloat64(Ae,s),Ae+=8}}else if("object"===a){if(!s)Ue[Ae++]=246;else{if(i){let e=i.get(s);if(e){// 16-bit uint
105
110
  if(Ue[Ae++]=216,Ue[Ae++]=29,Ue[Ae++]=25,!e.references){let t=i.idsToInsert||(i.idsToInsert=[]);e.references=[],t.push(e)}// TODO: also support 32-bit
106
- return e.references.push(Ae-t),void(Ae+=2)}i.set(s,{offset:Ae-t})}let e=s.constructor;if(e===Object)R(s,!0);else if(e===Array){n=s.length,24>n?Ue[Ae++]=128|n:O(n);for(let e=0;e<n;e++)k(s[e])}else if(e!==Map){for(let e,t=0,n=ke.length;t<n;t++)if(e=Re[t],s instanceof e){let e=ke[t],n=e.tag;return null==n&&(n=e.getTag&&e.getTag.call(this,s)),24>n?Ue[Ae++]=192|n:256>n?(Ue[Ae++]=216,Ue[Ae++]=n):65536>n?(Ue[Ae++]=217,Ue[Ae++]=n>>8,Ue[Ae++]=255&n):-1<n&&(Ue[Ae++]=218,ve.setUint32(Ae,n),Ae+=4),void e.encode.call(this,s,k,S)}if(s[Symbol.iterator]){Ue[Ae++]=159;// indefinite length array
111
+ return e.references.push(Ae-t),void(Ae+=2)}i.set(s,{offset:Ae-t})}let e=s.constructor;if(e===Object)R(s,!0);else if(e===Array){n=s.length,24>n?Ue[Ae++]=128|n:M(n);for(let e=0;e<n;e++)k(s[e])}else if(e!==Map){for(let e,t=0,n=ke.length;t<n;t++)if(e=Re[t],s instanceof e){let e=ke[t],n=e.tag;return null==n&&(n=e.getTag&&e.getTag.call(this,s)),24>n?Ue[Ae++]=192|n:256>n?(Ue[Ae++]=216,Ue[Ae++]=n):65536>n?(Ue[Ae++]=217,Ue[Ae++]=n>>8,Ue[Ae++]=255&n):-1<n&&(Ue[Ae++]=218,ve.setUint32(Ae,n),Ae+=4),void e.encode.call(this,s,k,O)}if(s[Symbol.iterator]){Ue[Ae++]=159;// indefinite length array
107
112
  for(let e of s)k(e);// stop-code
108
113
  return void(Ue[Ae++]=255)}// no extension found, write as object
109
114
  R(s,!s.hasOwnProperty)}else if((this.mapsAsObjects?!1!==this.useTag259ForMaps:this.useTag259ForMaps)&&(Ue[Ae++]=217,Ue[Ae++]=1,Ue[Ae++]=3),n=s.size,24>n?Ue[Ae++]=160|n:256>n?(Ue[Ae++]=184,Ue[Ae++]=n):65536>n?(Ue[Ae++]=185,Ue[Ae++]=n>>8,Ue[Ae++]=255&n):(Ue[Ae++]=186,ve.setUint32(Ae,n),Ae+=4),d.keyMap)for(let[e,t]of s)k(d.encodeKey(e)),k(t);else for(let[e,t]of s)k(e),k(t)}}else if("boolean"===a)Ue[Ae++]=s?245:244;else if("bigint"===a){if(s<BigInt(1)<<BigInt(64)&&0<=s)Ue[Ae++]=27,ve.setBigUint64(Ae,s);else if(s>-(BigInt(1)<<BigInt(64))&&0>s)Ue[Ae++]=59,ve.setBigUint64(Ae,-s-BigInt(1));else// overflow
110
115
  if(this.largeBigIntToFloat)Ue[Ae++]=251,ve.setFloat64(Ae,+s);else throw new RangeError(s+" was too large to fit in CBOR 64-bit integer format, set largeBigIntToFloat to convert to float-64");Ae+=8}else if("undefined"===a)Ue[Ae++]=247;else throw new Error("Unknown type: "+a)},R=!1===this.useRecords?this.variableMapSize?e=>{// this method is slightly slower, but generates "preferred serialization" (optimally small for smaller objects)
111
116
  let t=Object.keys(e),s=Object.values(e),n=t.length;if(24>n?Ue[Ae++]=160|n:256>n?(Ue[Ae++]=184,Ue[Ae++]=n):65536>n?(Ue[Ae++]=185,Ue[Ae++]=n>>8,Ue[Ae++]=255&n):(Ue[Ae++]=186,ve.setUint32(Ae,n),Ae+=4),d.keyMap)for(let e=0;e<n;e++)k(encodeKey(t[e])),k(s[e]);else for(let e=0;e<n;e++)k(t[e]),k(s[e])}:(e,s)=>{Ue[Ae++]=185;// always use map 16, so we can preallocate and set the length afterwards
112
- let n=Ae-t;Ae+=2;let a=0;if(d.keyMap)for(let t in e)(s||e.hasOwnProperty(t))&&(k(d.encodeKey(t)),k(e[t]),a++);else for(let t in e)(s||e.hasOwnProperty(t))&&(k(t),k(e[t]),a++);Ue[n++ +t]=a>>8,Ue[n+t]=255&a}:(e,t)=>{let s,n,o,d=r.transitions||(r.transitions=Object.create(null)),u=0,l=0;if(this.keyMap){o=Object.keys(e).map(e=>this.encodeKey(e)),l=o.length;for(let e,t=0;t<l;t++)e=o[t],s=d[e],s||(s=d[e]=Object.create(null),u++),d=s}else for(let a in e)(t||e.hasOwnProperty(a))&&(s=d[a],s||(1048576&d[xe]&&(n=65535&d[xe]),s=d[a]=Object.create(null),u++),d=s,l++);let p=d[xe];if(void 0!==p)p&=65535,Ue[Ae++]=217,Ue[Ae++]=224|p>>8,Ue[Ae++]=255&p;else if(o||(o=d.__keys__||(d.__keys__=Object.keys(e))),void 0===n?(p=r.nextId++,!p&&(p=0,r.nextId=1),p>=Ee&&(r.nextId=(p=c)+1)):p=n,r[p]=o,p<c){Ue[Ae++]=217,Ue[Ae++]=224|p>>8,Ue[Ae++]=255&p,d=r.transitions;for(let e=0;e<l;e++)(void 0===d[xe]||1048576&d[xe])&&(d[xe]=p),d=d[o[e]];d[xe]=1048576|p,a=!0}else{d[xe]=p,ve.setUint32(Ae,3655335680),Ae+=3,u&&(m+=b*u),y.length>=Ee-c&&(y.shift()[xe]=void 0),y.push(d),O(l+2),k(57344+p),k(o);for(let t of Object.values(e))k(t);return}for(let s in 24>l?Ue[Ae++]=128|l:O(l),e)(t||e.hasOwnProperty(s))&&k(e[s])},S=e=>{var n=Math.min,a=Math.max;let r;if(16777216<e){// special handling for really large buffers
113
- if(e-t>_e)throw new Error("Encoded buffer would be larger than maximum buffer size");r=n(_e,4096*s(a((e-t)*(67108864<e?1.25:2),4194304)/4096))}else// faster handling for smaller buffers
117
+ let n=Ae-t;Ae+=2;let a=0;if(d.keyMap)for(let t in e)(s||e.hasOwnProperty(t))&&(k(d.encodeKey(t)),k(e[t]),a++);else for(let t in e)(s||e.hasOwnProperty(t))&&(k(t),k(e[t]),a++);Ue[n++ +t]=a>>8,Ue[n+t]=255&a}:(e,t)=>{let s,n,o,d=r.transitions||(r.transitions=Object.create(null)),u=0,l=0;if(this.keyMap){o=Object.keys(e).map(e=>this.encodeKey(e)),l=o.length;for(let e,t=0;t<l;t++)e=o[t],s=d[e],s||(s=d[e]=Object.create(null),u++),d=s}else for(let a in e)(t||e.hasOwnProperty(a))&&(s=d[a],s||(1048576&d[Ve]&&(n=65535&d[Ve]),s=d[a]=Object.create(null),u++),d=s,l++);let p=d[Ve];if(void 0!==p)p&=65535,Ue[Ae++]=217,Ue[Ae++]=224|p>>8,Ue[Ae++]=255&p;else if(o||(o=d.__keys__||(d.__keys__=Object.keys(e))),void 0===n?(p=r.nextId++,!p&&(p=0,r.nextId=1),p>=Se&&(r.nextId=(p=c)+1)):p=n,r[p]=o,p<c){Ue[Ae++]=217,Ue[Ae++]=224|p>>8,Ue[Ae++]=255&p,d=r.transitions;for(let e=0;e<l;e++)(void 0===d[Ve]||1048576&d[Ve])&&(d[Ve]=p),d=d[o[e]];d[Ve]=1048576|p,a=!0}else{d[Ve]=p,ve.setUint32(Ae,3655335680),Ae+=3,u&&(m+=b*u),y.length>=Se-c&&(y.shift()[Ve]=void 0),y.push(d),M(l+2),k(57344+p),k(o);for(let t of Object.values(e))k(t);return}for(let s in 24>l?Ue[Ae++]=128|l:M(l),e)(t||e.hasOwnProperty(s))&&k(e[s])},O=e=>{var s=Math.min,a=Math.max;let r;if(16777216<e){// special handling for really large buffers
118
+ if(e-t>Ee)throw new Error("Encoded buffer would be larger than maximum buffer size");r=s(Ee,4096*n(a((e-t)*(67108864<e?1.25:2),4194304)/4096))}else// faster handling for smaller buffers
114
119
  r=(a(e-t<<2,Ue.length-1)>>12)+1<<12;let i=new Me(r);return ve=new DataView(i.buffer,0,r),Ue.copy?Ue.copy(i,0,t,e):i.set(Ue.slice(t,e)),Ae-=t,t=0,Ie=i.length-10,Ue=i}}useBuffer(e){// this means we are finished using our own buffer and we can write over it safely
115
- Ue=e,ve=new DataView(Ue.buffer,Ue.byteOffset,Ue.byteLength),Ae=0}clearSharedData(){this.structures&&(this.structures=[]),this.sharedValues&&(this.sharedValues=void 0)}updateSharedData(){let e=this.sharedVersion||0;this.sharedVersion=e+1;let t=this.structures.slice(0),s=new Be(t,this.sharedValues,this.sharedVersion),n=this.saveShared(s,t=>(t&&t.version||0)==e);// saveShared may fail to write and reload, or may have reloaded to check compatibility and overwrite saved data, either way load the correct shared data
116
- return!1===n?(s=this.getShared()||{},this.structures=s.structures||[],this.sharedValues=s.packedValues,this.sharedVersion=s.version,this.structures.nextId=this.structures.length):t.forEach((e,t)=>this.structures[t]=e),n}}class Be{constructor(e,t,s){this.structures=e,this.packedValues=t,this.version=s}}const Le=1==new Uint8Array(new Uint16Array([1]).buffer)[0];Re=[Date,Set,Error,RegExp,ae,ArrayBuffer,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array,"undefined"==typeof BigUint64Array?function(){}:BigUint64Array,Int8Array,Int16Array,Int32Array,"undefined"==typeof BigInt64Array?function(){}:BigInt64Array,Float32Array,Float64Array,Be],ke=[{// Date
117
- tag:1,encode(e){let t=e.getTime()/1e3;(this.useTimestamp32||0===e.getMilliseconds())&&0<=t&&4294967296>t?(Ue[Ae++]=26,ve.setUint32(Ae,t),Ae+=4):(Ue[Ae++]=251,ve.setFloat64(Ae,t),Ae+=8)}},{// Set
120
+ Ue=e,ve=new DataView(Ue.buffer,Ue.byteOffset,Ue.byteLength),Ae=0}clearSharedData(){this.structures&&(this.structures=[]),this.sharedValues&&(this.sharedValues=void 0)}updateSharedData(){let e=this.sharedVersion||0;this.sharedVersion=e+1;let t=this.structures.slice(0),s=new Le(t,this.sharedValues,this.sharedVersion),n=this.saveShared(s,t=>(t&&t.version||0)==e);// saveShared may fail to write and reload, or may have reloaded to check compatibility and overwrite saved data, either way load the correct shared data
121
+ return!1===n?(s=this.getShared()||{},this.structures=s.structures||[],this.sharedValues=s.packedValues,this.sharedVersion=s.version,this.structures.nextId=this.structures.length):t.forEach((e,t)=>this.structures[t]=e),n}}class Le{constructor(e,t,s){this.structures=e,this.packedValues=t,this.version=s}}const Pe=1==new Uint8Array(new Uint16Array([1]).buffer)[0];Re=[Date,Set,Error,RegExp,ie,ArrayBuffer,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array,"undefined"==typeof BigUint64Array?function(){}:BigUint64Array,Int8Array,Int16Array,Int32Array,"undefined"==typeof BigInt64Array?function(){}:BigInt64Array,Float32Array,Float64Array,Le],ke=[{// Date
122
+ tag:1,encode(e,t){let s=e.getTime()/1e3;(this.useTimestamp32||0===e.getMilliseconds())&&0<=s&&4294967296>s?(Ue[Ae++]=26,ve.setUint32(Ae,s),Ae+=4):(Ue[Ae++]=251,ve.setFloat64(Ae,s),Ae+=8)}},{// Set
118
123
  tag:258,// https://github.com/input-output-hk/cbor-sets-spec/blob/master/CBOR_SETS.md
119
124
  encode(e,t){let s=Array.from(e);t(s)}},{// Error
120
125
  tag:27,// http://cbor.schmorp.de/generic-object
@@ -125,11 +130,11 @@ getTag(e){return e.tag},encode(e,t){t(e.value)}},{// ArrayBuffer
125
130
  encode(e,t,s){E(e,s)}},{// Uint8Array
126
131
  getTag(e){if(e.constructor===Uint8Array&&(this.tagUint8Array||Oe&&!1!==this.tagUint8Array))return 64;// else no tag
127
132
  },encode(e,t,s){E(e,s)}},S(68,1),S(69,2),S(70,4),S(71,8),S(72,1),S(77,2),S(78,4),S(79,8),S(85,4),S(86,8),{encode(e,t){// write SharedData
128
- let s=e.packedValues||[],n=e.structures||[];if(0<s.values.length){Ue[Ae++]=216,Ue[Ae++]=51,O(4);let e=s.values;t(e),O(0),O(0),packedObjectMap=Object.create(sharedPackedObjectMap||null);for(let t=0,s=e.length;t<s;t++)packedObjectMap[e[t]]=t}if(n){ve.setUint32(Ae,3655335424),Ae+=3;let s=n.slice(0);s.unshift(57344),s.push(new ae(e.version,1399353956)),t(s)}else t(new ae(e.version,1399353956))}}];let Pe=new Ve({useRecords:!1});const De=Pe.encode,{NEVER:je,ALWAYS:we,DECIMAL_ROUND:Te,DECIMAL_FIT:Ke}=he,Fe=512,Ye=1024;e.ALWAYS=we,e.DECIMAL_FIT=Ke,e.DECIMAL_ROUND=Te,e.Decoder=Z,e.Encoder=Ve,e.FLOAT32_OPTIONS=he,e.NEVER=je,e.REUSE_BUFFER_MODE=Fe,e.Tag=ae,e.addExtension=v,e.clearSource=k,e.decode=fe,e.decodeIter=function(e,t={}){if(!e||"object"!=typeof e)throw new Error("first argument must be an Iterable, Async Iterable, Iterator, Async Iterator, or a promise");const s=new Z(t);let n;const a=e=>{let t;// if there's incomplete data from previous chunk, concatinate and try again
129
- n&&(e=Buffer.concat([n,e]),n=void 0);try{t=s.decodeMultiple(e)}catch(s){if(s.incomplete)n=e.slice(s.lastPosition),t=s.values;else throw s}return t};if("function"==typeof e[Symbol.iterator])return function*(){for(const t of e)yield*a(t)}();return"function"==typeof e[Symbol.asyncIterator]?async function*(){for await(const t of e)yield*a(t)}():void 0},e.decodeMultiple=ge,e.encode=De,e.encodeIter=/**
133
+ let s=e.packedValues||[],n=e.structures||[];if(0<s.values.length){Ue[Ae++]=216,Ue[Ae++]=51,M(4);let e=s.values;t(e),M(0),M(0),packedObjectMap=Object.create(sharedPackedObjectMap||null);for(let t=0,s=e.length;t<s;t++)packedObjectMap[e[t]]=t}if(n){ve.setUint32(Ae,3655335424),Ae+=3;let s=n.slice(0);s.unshift(57344),s.push(new ie(e.version,1399353956)),t(s)}else t(new ie(e.version,1399353956))}}];let De=new Be({useRecords:!1});const je=De.encode,{NEVER:we,ALWAYS:Te,DECIMAL_ROUND:Ke,DECIMAL_FIT:Fe}=me,Ye=512,Ne=1024;e.ALWAYS=Te,e.DECIMAL_FIT=Fe,e.DECIMAL_ROUND=Ke,e.Decoder=Z,e.Encoder=Be,e.FLOAT32_OPTIONS=me,e.NEVER=we,e.REUSE_BUFFER_MODE=Ye,e.Tag=ie,e.addExtension=function t(e){if(e.Class){if(!e.encode)throw new Error("Extension has no encode function");Re.unshift(e.Class),ke.unshift(e)}O(e)},e.clearSource=R,e.decode=he,e.decodeIter=function s(e,t={}){if(!e||"object"!=typeof e)throw new Error("first argument must be an Iterable, Async Iterable, Iterator, Async Iterator, or a promise");const n=new Z(t);let a;const r=e=>{let t;// if there's incomplete data from previous chunk, concatinate and try again
134
+ a&&(e=Buffer.concat([a,e]),a=void 0);try{t=n.decodeMultiple(e)}catch(s){if(s.incomplete)a=e.slice(s.lastPosition),t=s.values;else throw s}return t};if("function"==typeof e[Symbol.iterator])return function*t(){for(const t of e)yield*r(t)}();return"function"==typeof e[Symbol.asyncIterator]?async function*t(){for await(const t of e)yield*r(t)}():void 0},e.decodeMultiple=ye,e.encode=je,e.encodeIter=/**
130
135
  * Given an Iterable first argument, returns an Iterable where each value is encoded as a Buffer
131
136
  * If the argument is only Async Iterable, the return value will be an Async Iterable.
132
137
  * @param {Iterable|Iterator|AsyncIterable|AsyncIterator} objectIterator - iterable source, like a Readable object stream, an array, Set, or custom object
133
138
  * @param {options} [options] - cbor-x Encoder options
134
139
  * @returns {IterableIterator|Promise.<AsyncIterableIterator>}
135
- */function(e,t={}){if(!e||"object"!=typeof e)throw new Error("first argument must be an Iterable, Async Iterable, or a Promise for an Async Iterable");else{if("function"==typeof e[Symbol.iterator])return I(e,t);if("function"==typeof e.then||"function"==typeof e[Symbol.asyncIterator])return A(e,t);throw new Error("first argument must be an Iterable, Async Iterable, Iterator, Async Iterator, or a Promise")}},e.isNativeAccelerationEnabled=!1,e.roundFloat32=function(e){me[0]=e;let t=le[(127&be[3])<<1|be[2]>>7];return(t*e+(0<e?.5:-.5)>>0)/t},Object.defineProperty(e,"__esModule",{value:!0})});
140
+ */function s(e,t={}){if(!e||"object"!=typeof e)throw new Error("first argument must be an Iterable, Async Iterable, or a Promise for an Async Iterable");else{if("function"==typeof e[Symbol.iterator])return I(e,t);if("function"==typeof e.then||"function"==typeof e[Symbol.asyncIterator])return A(e,t);throw new Error("first argument must be an Iterable, Async Iterable, Iterator, Async Iterator, or a Promise")}},e.isNativeAccelerationEnabled=!1,e.roundFloat32=function t(e){ne[0]=e;let s=fe[(127&ae[3])<<1|ae[2]>>7];return(s*e+(0<e?.5:-.5)>>0)/s},Object.defineProperty(e,"__esModule",{value:!0})});
package/dist/node.cjs CHANGED
@@ -89,7 +89,7 @@ class Decoder {
89
89
  }
90
90
  let res = {};
91
91
  //map.forEach((v,k) => res[Object.keys(this._keyMap)[Object.values(this._keyMap).indexOf(k)] || k] = v)
92
- map.forEach((v,k) => res[this._mapKey.has(k) ? this._mapKey.get(k) : k] = v);
92
+ map.forEach((v,k) => res[safeKey(this._mapKey.has(k) ? this._mapKey.get(k) : k)] = v);
93
93
  return res
94
94
  }
95
95
 
@@ -291,8 +291,8 @@ function read() {
291
291
  let key;
292
292
  if (currentDecoder.mapsAsObjects) {
293
293
  let object = {};
294
- if (currentDecoder.keyMap) while((key = read()) != STOP_CODE) object[currentDecoder.decodeKey(key)] = read();
295
- else while ((key = read()) != STOP_CODE) object[key] = read();
294
+ if (currentDecoder.keyMap) while((key = read()) != STOP_CODE) object[safeKey(currentDecoder.decodeKey(key))] = read();
295
+ else while ((key = read()) != STOP_CODE) object[safeKey(key)] = read();
296
296
  return object
297
297
  } else {
298
298
  if (restoreMapsAsObject) {
@@ -340,8 +340,8 @@ function read() {
340
340
  case 5: // map
341
341
  if (currentDecoder.mapsAsObjects) {
342
342
  let object = {};
343
- if (currentDecoder.keyMap) for (let i = 0; i < token; i++) object[currentDecoder.decodeKey(read())] = read();
344
- else for (let i = 0; i < token; i++) object[read()] = read();
343
+ if (currentDecoder.keyMap) for (let i = 0; i < token; i++) object[safeKey(currentDecoder.decodeKey(read()))] = read();
344
+ else for (let i = 0; i < token; i++) object[safeKey(read())] = read();
345
345
  return object
346
346
  } else {
347
347
  if (restoreMapsAsObject) {
@@ -457,8 +457,8 @@ function createStructureReader(structure) {
457
457
  if (this.slowReads++ >= 3) { // create a fast compiled reader
458
458
  let array = this.length == length ? this : this.slice(0, length);
459
459
  compiledReader = currentDecoder.keyMap
460
- ? new Function('r', 'return {' + array.map(k => currentDecoder.decodeKey(k)).map(k => validName.test(k) ? k + ':r()' : ('[' + JSON.stringify(k) + ']:r()')).join(',') + '}')
461
- : new Function('r', 'return {' + array.map(key => validName.test(key) ? key + ':r()' : ('[' + JSON.stringify(key) + ']:r()')).join(',') + '}');
460
+ ? new Function('r', 'return {' + array.map(k => currentDecoder.decodeKey(k)).map(k => validName.test(k) ? safeKey(k) + ':r()' : ('[' + JSON.stringify(k) + ']:r()')).join(',') + '}')
461
+ : new Function('r', 'return {' + array.map(key => validName.test(key) ? safeKey(key) + ':r()' : ('[' + JSON.stringify(key) + ']:r()')).join(',') + '}');
462
462
  if (this.compiledReader)
463
463
  compiledReader.next = this.compiledReader; // if there is an existing one, we store multiple readers as a linked list because it is usually pretty rare to have multiple readers (of different length) for the same structure
464
464
  compiledReader.propertyCount = length;
@@ -466,14 +466,20 @@ function createStructureReader(structure) {
466
466
  return compiledReader(read)
467
467
  }
468
468
  let object = {};
469
- if (currentDecoder.keyMap) for (let i = 0; i < length; i++) object[currentDecoder.decodeKey(this[i])] = read();
470
- else for (let i = 0; i < length; i++) object[this[i]] = read();
469
+ if (currentDecoder.keyMap) for (let i = 0; i < length; i++) object[safeKey(currentDecoder.decodeKey(this[i]))] = read();
470
+ else for (let i = 0; i < length; i++) {
471
+ object[safeKey(this[i])] = read();
472
+ }
471
473
  return object
472
474
  }
473
475
  structure.slowReads = 0;
474
476
  return readObject
475
477
  }
476
478
 
479
+ function safeKey(key) {
480
+ return key === '__proto__' ? '__proto_' : key
481
+ }
482
+
477
483
  let readFixedString = readStringJS;
478
484
 
479
485
  exports.isNativeAccelerationEnabled = false;
@@ -725,18 +731,30 @@ function readBin(length) {
725
731
  Uint8Array.prototype.slice.call(src, position, position += length) :
726
732
  src.subarray(position, position += length)
727
733
  }
728
-
734
+ let f32Array = new Float32Array(1);
735
+ let u8Array = new Uint8Array(f32Array.buffer, 0, 4);
729
736
  function getFloat16() {
730
737
  let byte0 = src[position++];
731
738
  let byte1 = src[position++];
732
- let half = (byte0 << 8) + byte1;
733
- let exp = (half >> 10) & 0x1f;
734
- let mant = half & 0x3ff;
735
- let val;
736
- if (exp == 0) val = Math.exp(mant, -24);
737
- else if (exp != 31) val = Math.exp(mant + 1024, exp - 25);
738
- else val = mant == 0 ? Infinity : NaN;
739
- return half & 0x8000 ? -val : val
739
+ let exponent = (byte0 & 0x7f) >> 2;
740
+ if (exponent === 0x1f) { // specials
741
+ if (byte1 || (byte0 & 3))
742
+ return NaN;
743
+ return (byte0 & 0x80) ? -Infinity : Infinity;
744
+ }
745
+ if (exponent === 0) { // sub-normals
746
+ // significand with 10 fractional bits and divided by 2^14
747
+ let abs = (((byte0 & 3) << 8) | byte1) / (1 << 24);
748
+ return (byte0 & 0x80) ? -abs : abs
749
+ }
750
+
751
+ u8Array[3] = (byte0 & 0x80) | // sign bit
752
+ ((exponent >> 1) + 56); // 4 of 5 of the exponent bits, re-offset-ed
753
+ u8Array[2] = ((byte0 & 7) << 5) | // last exponent bit and first two mantissa bits
754
+ (byte1 >> 3); // next 5 bits of mantissa
755
+ u8Array[1] = byte1 << 5; // last three bits of mantissa
756
+ u8Array[0] = 0;
757
+ return f32Array[0];
740
758
  }
741
759
 
742
760
  let keyCache = new Array(4096);
@@ -795,11 +813,11 @@ const recordDefinition = (definition) => {
795
813
  let object = {};
796
814
  if (currentDecoder.keyMap) for (let i = 2,l = definition.length; i < l; i++) {
797
815
  let key = currentDecoder.decodeKey(structure[i - 2]);
798
- object[key] = definition[i];
816
+ object[safeKey(key)] = definition[i];
799
817
  }
800
818
  else for (let i = 2,l = definition.length; i < l; i++) {
801
819
  let key = structure[i - 2];
802
- object[key] = definition[i];
820
+ object[safeKey(key)] = definition[i];
803
821
  }
804
822
  return object
805
823
  };
@@ -1086,8 +1104,6 @@ const FLOAT32_OPTIONS = {
1086
1104
  DECIMAL_ROUND: 3,
1087
1105
  DECIMAL_FIT: 4
1088
1106
  };
1089
- let f32Array = new Float32Array(1);
1090
- let u8Array = new Uint8Array(f32Array.buffer, 0, 4);
1091
1107
  function roundFloat32(float32Number) {
1092
1108
  f32Array[0] = float32Number;
1093
1109
  let multiplier = mult10[((u8Array[3] & 0x7f) << 1) | (u8Array[2] >> 7)];
package/dist/test.js CHANGED
@@ -342,6 +342,15 @@
342
342
  assert.equal(deserialized.children, deserialized.childrenAgain);
343
343
  });
344
344
 
345
+ test('decode float 16', function() {
346
+ assert.equal(decode(new Uint8Array([0xF9, 0x4A, 0x60])), 12.75);
347
+ assert.equal(decode(new Uint8Array([0xF9, 0xC4, 0x80])), -4.5);
348
+ assert.equal(decode(new Uint8Array([0xF9, 0x5A, 0xF9])), 223.125);
349
+ assert.equal(decode(new Uint8Array([0xF9, 0x45, 0x80])), 5.5);
350
+ assert.equal(decode(new Uint8Array([0xF9, 0x7C, 0])), Infinity);
351
+ assert.equal(decode(new Uint8Array([0xF9, 0xFC, 0])), -Infinity);
352
+ assert.isNaN(decode(new Uint8Array([0xF9, 0x7E, 0])));
353
+ });
345
354
  test('structured cloning: types', function() {
346
355
  let b = typeof Buffer != 'undefined' ? Buffer.alloc(20) : new Uint8Array(20);
347
356
  let fa = new Float32Array(b.buffer, 8, 2);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cbor-x",
3
3
  "author": "Kris Zyp",
4
- "version": "1.4.0",
4
+ "version": "1.4.1",
5
5
  "description": "Ultra-fast and conformant CBOR (RFC 8949) implementation with support for numerous tag extensions including records and structured cloning",
6
6
  "license": "MIT",
7
7
  "types": "./index.d.ts",