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/README.md +66 -21
- package/decode.d.ts +5 -0
- package/decode.js +344 -118
- package/dist/index.js +650 -327
- package/dist/index.min.js +100 -107
- package/dist/node-index.js +93 -0
- package/dist/node.cjs +651 -325
- package/dist/test.js +107 -9
- package/encode.d.ts +1 -1
- package/encode.js +302 -144
- package/index.d.ts +1 -1
- package/index.js +2 -4
- package/node-index.js +2 -4
- 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 -586
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
|
|
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 = {
|
|
@@ -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,
|
|
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