cbor-x 0.9.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/test.js CHANGED
@@ -581,6 +581,17 @@
581
581
  outcomesScore: outcomesScore
582
582
  };
583
583
 
584
+ const senmlData = [
585
+ { bn: '/3303/0/5700', bt: 1278887, v: 35.5 },
586
+ { t: 10, v: 34 },
587
+ { t: 20, v: 33 },
588
+ { t: 30, v: 32 },
589
+ { t: 40, v: 31 },
590
+ { t: 50, v: 30 }
591
+ ];
592
+
593
+ const senmlKeys = { bs: -6, bv: -5, bu: -4, bt: -3, bn: -2, n: 0, u: 1, v: 2, vs: 3, t: 6, ut: 7, vd: 8 };
594
+
584
595
  //import inspector from 'inspector'; inspector.open(9229, null, true); debugger
585
596
  function tryRequire(module) {
586
597
  try {
@@ -608,6 +619,27 @@
608
619
  var ITERATIONS = 4000;
609
620
 
610
621
  suite('CBOR basic tests', function(){
622
+
623
+ test('encode/decode with keyMaps (basic)', function() {
624
+ var data = senmlData;
625
+ let cborSenml = new Encoder({ useRecords: false, keyMap: senmlKeys });
626
+ let cborBasic = new Encoder();
627
+ var serialized = cborSenml.encode(data);
628
+ var deserialized = cborSenml.decode(serialized);
629
+ assert(serialized.length < cborBasic.encode(data).length);
630
+ assert.deepEqual(deserialized, data);
631
+ });
632
+
633
+ test('encode/decode with keyMaps and Records)', function() {
634
+ var data = senmlData;
635
+ let cborSenml = new Encoder({ useRecords: true, keyMap: senmlKeys });
636
+ let cborBasic = new Encoder();
637
+ var serialized = cborSenml.encode(data);
638
+ var deserialized = cborSenml.decode(serialized);
639
+ assert(serialized.length < cborBasic.encode(data).length);
640
+ assert.deepEqual(deserialized, data);
641
+ });
642
+
611
643
  test('encode/decode data', function(){
612
644
  var data = {
613
645
  data: [
@@ -633,10 +665,42 @@
633
665
  let structures = [];
634
666
  let encoder = new Encoder({ structures });
635
667
  var serialized = encoder.encode(data);
668
+ serialized = encoder.encode(data);
636
669
  var deserialized = encoder.decode(serialized);
637
670
  assert.deepEqual(deserialized, data);
638
671
  });
639
672
 
673
+ test('mixed structures, shared', function(){
674
+ let data1 = { a: 1, b: 2, c: 3 };
675
+ let data2 = { a: 1, b: 2, d: 4 };
676
+ let data3 = { a: 1, b: 2, e: 5 };
677
+ let structures = [];
678
+ let encoder = new Encoder({ structures });
679
+ var serialized = encoder.encode(data1);
680
+ var deserialized = encoder.decode(serialized);
681
+ assert.deepEqual(deserialized, data1);
682
+ var serialized = encoder.encode(data2);
683
+ var deserialized = encoder.decode(serialized);
684
+ assert.deepEqual(deserialized, data2);
685
+ var serialized = encoder.encode(data3);
686
+ var deserialized = encoder.decode(serialized);
687
+ assert.deepEqual(deserialized, data3);
688
+ });
689
+
690
+ test('mixed structures, unshared', function(){
691
+ let data = [];
692
+ let encoder = new Encoder({ });
693
+ for (let i = 0; i< 1000; i++) {
694
+ data.push({a: 1, ['test' + i]: i});
695
+ }
696
+ var serialized = encoder.encode(data);
697
+ var deserialized = encoder.decode(serialized);
698
+ assert.deepEqual(deserialized, data);
699
+ serialized = encoder.encode(data);
700
+ deserialized = encoder.decode(serialized);
701
+ assert.deepEqual(deserialized, data);
702
+ });
703
+
640
704
  test('mixed array', function(){
641
705
  var data = [
642
706
  'one',
@@ -677,9 +741,10 @@
677
741
  });
678
742
  test('encode/decode sample data with records', function(){
679
743
  var data = sampleData;
680
- let structures = [];
681
- let encoder = new Encoder({ structures, useRecords: true });
744
+ let sharedSerialized;
745
+ let encoder = new Encoder({ getStructures() { return }, saveStructures(shared) { sharedSerialized = encode(shared); }, useRecords: true });
682
746
  var serialized = encoder.encode(data);
747
+ encoder = new Encoder({ getStructures() { return decode(sharedSerialized) }, saveStructures(shared) { sharedSerialized = encode(shared); }, useRecords: true });
683
748
  var deserialized = encoder.decode(serialized);
684
749
  assert.deepEqual(deserialized, data);
685
750
  });
@@ -692,8 +757,7 @@
692
757
  });
693
758
  test('encode/decode sample data with packing and records', function(){
694
759
  var data = sampleData;
695
- let structures = [];
696
- let encoder = new Encoder({ structures, pack: true, useRecords: true });
760
+ let encoder = new Encoder({ useStringRefs: true });
697
761
  var serialized = encoder.encode(data);
698
762
  var deserialized = encoder.decode(serialized);
699
763
  assert.deepEqual(deserialized, data);
@@ -732,6 +796,23 @@
732
796
  assert.deepEqual(deserialized, data);
733
797
  }
734
798
  });
799
+ test('pack/unpack sample data with bundled strings', function(){
800
+ var data = sampleData;
801
+ let encoder = new Encoder({ /*structures,*/ useRecords: false, bundleStrings: true });
802
+ var serialized = encoder.encode(data);
803
+ var deserialized = encoder.decode(serialized);
804
+ assert.deepEqual(deserialized, data);
805
+ });
806
+ test('pack/unpack sample data with self-descriptive header', function(){
807
+ var data = sampleData;
808
+ let encoder = new Encoder({ useSelfDescribedHeader: true });
809
+ var serialized = encoder.encode(data);
810
+ var deserialized = encoder.decode(serialized);
811
+ assert.deepEqual(deserialized, data);
812
+ assert.equal(serialized[0], 0xd9);
813
+ assert.equal(serialized[1], 0xd9);
814
+ assert.equal(serialized[2], 0xf7);
815
+ });
735
816
  if (typeof Buffer != 'undefined')
736
817
  test('replace data', function(){
737
818
  var data1 = {
@@ -931,6 +1012,7 @@
931
1012
  date: new Date(1532219539733),
932
1013
  farFutureDate: new Date(3532219539133),
933
1014
  ancient: new Date(-3532219539133),
1015
+ invalidDate: new Date('invalid')
934
1016
  };
935
1017
  let encoder = new Encoder();
936
1018
  var serialized = encoder.encode(data);
@@ -940,6 +1022,7 @@
940
1022
  assert.equal(deserialized.date.getTime(), 1532219539733);
941
1023
  assert.equal(deserialized.farFutureDate.getTime(), 3532219539133);
942
1024
  assert.equal(deserialized.ancient.getTime(), -3532219539133);
1025
+ assert.equal(deserialized.invalidDate.toString(), 'Invalid Date');
943
1026
  });
944
1027
  test('map/date with options', function(){
945
1028
  var map = new Map();
@@ -948,6 +1031,7 @@
948
1031
  var data = {
949
1032
  map: map,
950
1033
  date: new Date(1532219539011),
1034
+ invalidDate: new Date('invalid')
951
1035
  };
952
1036
  let encoder = new Encoder({
953
1037
  mapsAsObjects: true,
@@ -959,6 +1043,7 @@
959
1043
  assert.equal(deserialized.map[4], 'four');
960
1044
  assert.equal(deserialized.map.three, 3);
961
1045
  assert.equal(deserialized.date.getTime(), 1532219539000);
1046
+ assert.isTrue(isNaN(deserialized.invalidDate.getTime()));
962
1047
  });
963
1048
  test('key caching', function() {
964
1049
  var data = {
@@ -1008,11 +1093,21 @@
1008
1093
  useFloat32: DECIMAL_FIT
1009
1094
  });
1010
1095
  var serialized = encoder.encode(data);
1011
- assert.equal(serialized.length, 35);
1096
+ assert.equal(serialized.length, 36);
1012
1097
  var deserialized = encoder.decode(serialized);
1013
1098
  assert.deepEqual(deserialized, data);
1014
1099
  });
1015
-
1100
+ test('bigint to float', function() {
1101
+ var data = {
1102
+ a: 325283295382932843n
1103
+ };
1104
+ let encoder = new Encoder({
1105
+ int64AsNumber: true
1106
+ });
1107
+ var serialized = encoder.encode(data);
1108
+ var deserialized = encoder.decode(serialized);
1109
+ assert.deepEqual(deserialized.a, 325283295382932843);
1110
+ });
1016
1111
  test('numbers', function(){
1017
1112
  var data = {
1018
1113
  bigEncodable: 48978578104322,
@@ -1108,7 +1203,10 @@
1108
1203
  CBOR.decodeMultiple(new Uint8Array([1, 2, 3, 4]), value => values.push(value));
1109
1204
  assert.deepEqual(values, [1, 2, 3, 4]);
1110
1205
  });
1111
-
1206
+ test('bad input', function() {
1207
+ let badInput = Buffer.from('7b2273657269616c6e6f223a2265343a30222c226970223a223139322e3136382e312e3335222c226b6579223a226770735f736563726574227d', 'hex');
1208
+ assert.throws(function(){ decode(badInput); }); // should throw, not crash
1209
+ });
1112
1210
  });
1113
1211
  suite('CBOR performance tests', function(){
1114
1212
  test('performance JSON.parse', function() {
@@ -1133,7 +1231,7 @@
1133
1231
  let structures = [];
1134
1232
  var serialized = encode(data);
1135
1233
  console.log('CBOR size', serialized.length);
1136
- let encoder = new Encoder({ structures });
1234
+ let encoder = new Encoder({ structures, bundleStrings: true });
1137
1235
  var serialized = encoder.encode(data);
1138
1236
  console.log('CBOR w/ record ext size', serialized.length);
1139
1237
  for (var i = 0; i < ITERATIONS; i++) {
@@ -1144,7 +1242,7 @@
1144
1242
  var data = sampleData;
1145
1243
  this.timeout(10000);
1146
1244
  let structures = [];
1147
- let encoder = new Encoder({ structures });
1245
+ let encoder = new Encoder({ structures, bundleStrings: true });
1148
1246
  let buffer = typeof Buffer != 'undefined' ? Buffer.alloc(0x10000) : new Uint8Array(0x10000);
1149
1247
 
1150
1248
  for (var i = 0; i < ITERATIONS; i++) {
package/encode.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Decoder } from './decode'
2
- export { addExtension, FLOAT32_OPTIONS } from './unpack'
2
+ export { addExtension, FLOAT32_OPTIONS } from './decode'
3
3
  export class Encoder extends Decoder {
4
4
  encode(value: any): Buffer
5
5
  }