cbor-x 0.9.4 → 1.2.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,8 +665,40 @@
633
665
  let structures = [];
634
666
  let encoder = new Encoder({ structures });
635
667
  var serialized = encoder.encode(data);
668
+ serialized = encoder.encode(data);
669
+ var deserialized = encoder.decode(serialized);
670
+ assert.deepEqual(deserialized, data);
671
+ });
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);
636
697
  var deserialized = encoder.decode(serialized);
637
698
  assert.deepEqual(deserialized, data);
699
+ serialized = encoder.encode(data);
700
+ deserialized = encoder.decode(serialized);
701
+ assert.deepEqual(deserialized, data);
638
702
  });
639
703
 
640
704
  test('mixed array', function(){
@@ -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 = {
@@ -843,6 +924,7 @@
843
924
  let fa = new Float32Array(b.buffer, 8, 2);
844
925
  fa[0] = 2.25;
845
926
  fa[1] = 6;
927
+ let f64a = new Float64Array([2.3, 4.7]);
846
928
  let map = new Map();
847
929
  map.set('key', 'value');
848
930
  let object = {
@@ -851,6 +933,7 @@
851
933
  regexp: /test/gi,
852
934
  map,
853
935
  float32Array: fa,
936
+ float64Array: f64a,
854
937
  uint16Array: new Uint16Array([3,4])
855
938
  };
856
939
  let encoder = new Encoder({
@@ -865,6 +948,8 @@
865
948
  assert.equal(deserialized.float32Array.constructor.name, 'Float32Array');
866
949
  assert.equal(deserialized.float32Array[0], 2.25);
867
950
  assert.equal(deserialized.float32Array[1], 6);
951
+ assert.equal(deserialized.float64Array[0], 2.3);
952
+ assert.equal(deserialized.float64Array[1], 4.7);
868
953
  assert.equal(deserialized.uint16Array.constructor.name, 'Uint16Array');
869
954
  assert.equal(deserialized.uint16Array[0], 3);
870
955
  assert.equal(deserialized.uint16Array[1], 4);
@@ -931,6 +1016,7 @@
931
1016
  date: new Date(1532219539733),
932
1017
  farFutureDate: new Date(3532219539133),
933
1018
  ancient: new Date(-3532219539133),
1019
+ invalidDate: new Date('invalid')
934
1020
  };
935
1021
  let encoder = new Encoder();
936
1022
  var serialized = encoder.encode(data);
@@ -940,6 +1026,7 @@
940
1026
  assert.equal(deserialized.date.getTime(), 1532219539733);
941
1027
  assert.equal(deserialized.farFutureDate.getTime(), 3532219539133);
942
1028
  assert.equal(deserialized.ancient.getTime(), -3532219539133);
1029
+ assert.equal(deserialized.invalidDate.toString(), 'Invalid Date');
943
1030
  });
944
1031
  test('map/date with options', function(){
945
1032
  var map = new Map();
@@ -948,6 +1035,7 @@
948
1035
  var data = {
949
1036
  map: map,
950
1037
  date: new Date(1532219539011),
1038
+ invalidDate: new Date('invalid')
951
1039
  };
952
1040
  let encoder = new Encoder({
953
1041
  mapsAsObjects: true,
@@ -959,6 +1047,7 @@
959
1047
  assert.equal(deserialized.map[4], 'four');
960
1048
  assert.equal(deserialized.map.three, 3);
961
1049
  assert.equal(deserialized.date.getTime(), 1532219539000);
1050
+ assert.isTrue(isNaN(deserialized.invalidDate.getTime()));
962
1051
  });
963
1052
  test('key caching', function() {
964
1053
  var data = {
@@ -1008,7 +1097,7 @@
1008
1097
  useFloat32: DECIMAL_FIT
1009
1098
  });
1010
1099
  var serialized = encoder.encode(data);
1011
- assert.equal(serialized.length, 35);
1100
+ assert.equal(serialized.length, 36);
1012
1101
  var deserialized = encoder.decode(serialized);
1013
1102
  assert.deepEqual(deserialized, data);
1014
1103
  });
@@ -1118,7 +1207,10 @@
1118
1207
  CBOR.decodeMultiple(new Uint8Array([1, 2, 3, 4]), value => values.push(value));
1119
1208
  assert.deepEqual(values, [1, 2, 3, 4]);
1120
1209
  });
1121
-
1210
+ test('bad input', function() {
1211
+ let badInput = Buffer.from('7b2273657269616c6e6f223a2265343a30222c226970223a223139322e3136382e312e3335222c226b6579223a226770735f736563726574227d', 'hex');
1212
+ assert.throws(function(){ decode(badInput); }); // should throw, not crash
1213
+ });
1122
1214
  });
1123
1215
  suite('CBOR performance tests', function(){
1124
1216
  test('performance JSON.parse', function() {
@@ -1143,7 +1235,7 @@
1143
1235
  let structures = [];
1144
1236
  var serialized = encode(data);
1145
1237
  console.log('CBOR size', serialized.length);
1146
- let encoder = new Encoder({ structures });
1238
+ let encoder = new Encoder({ structures, bundleStrings: true });
1147
1239
  var serialized = encoder.encode(data);
1148
1240
  console.log('CBOR w/ record ext size', serialized.length);
1149
1241
  for (var i = 0; i < ITERATIONS; i++) {
@@ -1154,7 +1246,7 @@
1154
1246
  var data = sampleData;
1155
1247
  this.timeout(10000);
1156
1248
  let structures = [];
1157
- let encoder = new Encoder({ structures });
1249
+ let encoder = new Encoder({ structures, bundleStrings: true });
1158
1250
  let buffer = typeof Buffer != 'undefined' ? Buffer.alloc(0x10000) : new Uint8Array(0x10000);
1159
1251
 
1160
1252
  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
  }