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/README.md +55 -21
- package/decode.d.ts +3 -0
- package/decode.js +355 -119
- package/dist/index.js +670 -342
- package/dist/index.min.js +99 -108
- package/dist/node-index.js +93 -0
- package/dist/node.cjs +672 -337
- package/dist/test.js +100 -8
- package/encode.d.ts +1 -1
- package/encode.js +312 -155
- package/index.js +0 -2
- package/package.json +13 -4
- package/.vscode/launch.json +0 -22
- package/tests/benchmark-stream.cjs +0 -282
- package/tests/benchmark.cjs +0 -245
- package/tests/example.json +0 -52
- package/tests/example2.json +0 -26
- package/tests/example3.json +0 -22
- package/tests/example4.json +0 -1
- package/tests/example5.json +0 -12
- package/tests/floats.json +0 -1
- package/tests/index.html +0 -28
- package/tests/sample-large.json +0 -231
- package/tests/strings2.json +0 -1
- package/tests/test-compatibility.cjs +0 -36
- package/tests/test-incomplete.js +0 -41
- package/tests/test-node-iterators.js +0 -72
- package/tests/test-node-stream.js +0 -60
- package/tests/test.js +0 -596
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
|
|
681
|
-
let encoder = new Encoder({
|
|
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
|
|
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,
|
|
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