cbor-x 1.5.3 → 1.5.5

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/dist/node.cjs CHANGED
@@ -860,9 +860,18 @@ currentExtensions[27] = (data) => { // http://cbor.schmorp.de/generic-object
860
860
  return (glbl[data[0]] || Error)(data[1], data[2])
861
861
  };
862
862
  const packedTable = (read) => {
863
- if (src[position$1++] != 0x84)
864
- throw new Error('Packed values structure must be followed by a 4 element array')
863
+ if (src[position$1++] != 0x84) {
864
+ let error = new Error('Packed values structure must be followed by a 4 element array');
865
+ if (src.length < position$1)
866
+ error.incomplete = true;
867
+ throw error
868
+ }
865
869
  let newPackedValues = read(); // packed values
870
+ if (!newPackedValues || !newPackedValues.length) {
871
+ let error = new Error('Packed values structure must be followed by a 4 element array');
872
+ error.incomplete = true;
873
+ throw error
874
+ }
866
875
  packedValues = packedValues ? newPackedValues.concat(packedValues.slice(newPackedValues.length)) : newPackedValues;
867
876
  packedValues.prefixes = read();
868
877
  packedValues.suffixes = read();
@@ -880,7 +889,10 @@ currentExtensions[PACKED_REFERENCE_TAG_ID] = (data) => { // packed reference
880
889
  }
881
890
  if (typeof data == 'number')
882
891
  return packedValues[16 + (data >= 0 ? 2 * data : (-2 * data - 1))]
883
- throw new Error('No support for non-integer packed references yet')
892
+ let error = new Error('No support for non-integer packed references yet');
893
+ if (data === undefined)
894
+ error.incomplete = true;
895
+ throw error
884
896
  };
885
897
 
886
898
  // The following code is an incomplete implementation of http://cbor.schmorp.de/stringref
@@ -1006,7 +1018,15 @@ function registerTypedArray(TypedArray, tag) {
1006
1018
  currentExtensions[littleEndian ? tag : (tag - 4)] = (bytesPerElement == 1 || littleEndian == isLittleEndianMachine$1) ? (buffer) => {
1007
1019
  if (!TypedArray)
1008
1020
  throw new Error('Could not find typed array for code ' + tag)
1009
- // we have to always slice/copy here to get a new ArrayBuffer that is word/byte aligned
1021
+ if (!currentDecoder.copyBuffers) {
1022
+ // try provide a direct view, but will only work if we are byte-aligned
1023
+ if (bytesPerElement === 1 ||
1024
+ bytesPerElement === 2 && !(buffer.byteOffset & 1) ||
1025
+ bytesPerElement === 4 && !(buffer.byteOffset & 3) ||
1026
+ bytesPerElement === 8 && !(buffer.byteOffset & 7))
1027
+ return new TypedArray(buffer.buffer, buffer.byteOffset, buffer.byteLength);
1028
+ }
1029
+ // we have to slice/copy here to get a new ArrayBuffer, if we are not word/byte aligned
1010
1030
  return new TypedArray(Uint8Array.prototype.slice.call(buffer, 0).buffer)
1011
1031
  } : buffer => {
1012
1032
  if (!TypedArray)
@@ -1696,6 +1716,13 @@ class Encoder extends Decoder {
1696
1716
  error.iteratorNotHandled = true;
1697
1717
  throw error;
1698
1718
  }
1719
+ if (this.useToJSON && value.toJSON) {
1720
+ const json = value.toJSON();
1721
+ // if for some reason value.toJSON returns itself it'll loop forever
1722
+ if (json !== value)
1723
+ return encode(json)
1724
+ }
1725
+
1699
1726
  // no extension found, write as object
1700
1727
  writeObject(value, !value.hasOwnProperty); // if it doesn't have hasOwnProperty, don't do hasOwnProperty checks
1701
1728
  }
@@ -1749,7 +1776,7 @@ class Encoder extends Decoder {
1749
1776
  }
1750
1777
  if (encoder.keyMap) {
1751
1778
  for (let i = 0; i < length; i++) {
1752
- encode(encodeKey(keys[i]));
1779
+ encode(encoder.encodeKey(keys[i]));
1753
1780
  encode(vals[i]);
1754
1781
  }
1755
1782
  } else {
@@ -2355,10 +2382,12 @@ class EncoderStream extends stream.Transform {
2355
2382
  this.encoder = options.encoder || new Encoder(options);
2356
2383
  }
2357
2384
  async _transform(value, encoding, callback) {
2358
- for await (let chunk of this.encoder.encodeAsAsyncIterable(value)) {
2359
- this.push(chunk);
2360
- }
2361
- callback();
2385
+ try {
2386
+ for await (let chunk of this.encoder.encodeAsAsyncIterable(value)) {
2387
+ this.push(chunk);
2388
+ }
2389
+ callback();
2390
+ } catch(error) { callback (error); }
2362
2391
  }
2363
2392
  }
2364
2393
 
@@ -2379,13 +2408,14 @@ class DecoderStream extends stream.Transform {
2379
2408
  let values;
2380
2409
  try {
2381
2410
  values = this.decoder.decodeMultiple(chunk);
2411
+ callback();
2382
2412
  } catch(error) {
2383
2413
  if (error.incomplete) {
2384
2414
  this.incompleteBuffer = chunk.slice(error.lastPosition);
2385
2415
  values = error.values;
2416
+ } else {
2417
+ callback(error);
2386
2418
  }
2387
- else
2388
- throw error
2389
2419
  } finally {
2390
2420
  for (let value of values || []) {
2391
2421
  if (value === null)
@@ -2393,7 +2423,6 @@ class DecoderStream extends stream.Transform {
2393
2423
  this.push(value);
2394
2424
  }
2395
2425
  }
2396
- if (callback) callback();
2397
2426
  }
2398
2427
  getNullValue() {
2399
2428
  return Symbol.for(null)