seroval 0.4.0-alpha.2 → 0.4.0-alpha.3
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/cjs/development/index.cjs +82 -64
- package/dist/cjs/development/index.cjs.map +2 -2
- package/dist/cjs/production/index.cjs +2 -2
- package/dist/esm/development/index.mjs +82 -64
- package/dist/esm/development/index.mjs.map +2 -2
- package/dist/esm/production/index.mjs +2 -2
- package/package.json +2 -2
- package/src/tree.ts +87 -72
|
@@ -552,27 +552,30 @@ function generateSemiPrimitiveValue(ctx, current, id) {
|
|
|
552
552
|
return void 0;
|
|
553
553
|
}
|
|
554
554
|
function serializePropertiesSync(ctx, properties) {
|
|
555
|
-
const keyNodes = [];
|
|
556
|
-
const valueNodes = [];
|
|
557
|
-
const deferredKeys = [];
|
|
558
|
-
const deferredValues = [];
|
|
559
555
|
const keys = Object.keys(properties);
|
|
556
|
+
const size = keys.length;
|
|
557
|
+
const keyNodes = new Array(size);
|
|
558
|
+
const valueNodes = new Array(size);
|
|
559
|
+
const deferredKeys = new Array(size);
|
|
560
|
+
const deferredValues = new Array(size);
|
|
560
561
|
let deferredSize = 0;
|
|
562
|
+
let nodesSize = 0;
|
|
561
563
|
for (const key of keys) {
|
|
562
564
|
if (isIterable(properties[key])) {
|
|
563
|
-
deferredKeys
|
|
564
|
-
deferredValues
|
|
565
|
+
deferredKeys[deferredSize] = key;
|
|
566
|
+
deferredValues[deferredSize] = properties[key];
|
|
565
567
|
deferredSize++;
|
|
566
568
|
} else {
|
|
567
|
-
keyNodes
|
|
568
|
-
valueNodes
|
|
569
|
+
keyNodes[nodesSize] = key;
|
|
570
|
+
valueNodes[nodesSize] = generateTreeSync(ctx, properties[key]);
|
|
571
|
+
nodesSize++;
|
|
569
572
|
}
|
|
570
573
|
}
|
|
571
574
|
for (let i = 0; i < deferredSize; i++) {
|
|
572
|
-
keyNodes
|
|
573
|
-
valueNodes
|
|
575
|
+
keyNodes[nodesSize + i] = deferredKeys[i];
|
|
576
|
+
valueNodes[nodesSize + i] = generateTreeSync(ctx, deferredValues[i]);
|
|
574
577
|
}
|
|
575
|
-
return [keyNodes, valueNodes,
|
|
578
|
+
return [keyNodes, valueNodes, size];
|
|
576
579
|
}
|
|
577
580
|
function generateTreeSync(ctx, current) {
|
|
578
581
|
if (isPrimitive(current)) {
|
|
@@ -588,42 +591,48 @@ function generateTreeSync(ctx, current) {
|
|
|
588
591
|
}
|
|
589
592
|
if (constructorCheck(current, Set)) {
|
|
590
593
|
assert(ctx.features.has(8 /* Set */), 'Unsupported type "Set"');
|
|
591
|
-
const
|
|
592
|
-
const
|
|
594
|
+
const len = current.size;
|
|
595
|
+
const nodes = new Array(len);
|
|
596
|
+
const deferred = new Array(len);
|
|
597
|
+
let deferredSize = 0;
|
|
598
|
+
let nodeSize = 0;
|
|
593
599
|
for (const item of current.keys()) {
|
|
594
600
|
if (isIterable(item)) {
|
|
595
|
-
deferred
|
|
601
|
+
deferred[deferredSize++] = item;
|
|
596
602
|
} else {
|
|
597
|
-
nodes
|
|
603
|
+
nodes[nodeSize++] = generateTreeSync(ctx, item);
|
|
598
604
|
}
|
|
599
605
|
}
|
|
600
|
-
for (let i = 0
|
|
601
|
-
nodes
|
|
606
|
+
for (let i = 0; i < deferredSize; i++) {
|
|
607
|
+
nodes[nodeSize + i] = generateTreeSync(ctx, deferred[i]);
|
|
602
608
|
}
|
|
603
609
|
return [4 /* Set */, nodes, id];
|
|
604
610
|
}
|
|
605
611
|
if (constructorCheck(current, Map)) {
|
|
606
612
|
assert(ctx.features.has(4 /* Map */), 'Unsupported type "Map"');
|
|
607
|
-
const
|
|
608
|
-
const
|
|
609
|
-
const
|
|
610
|
-
const
|
|
613
|
+
const len = current.size;
|
|
614
|
+
const keyNodes = new Array(len);
|
|
615
|
+
const valueNodes = new Array(len);
|
|
616
|
+
const deferredKey = new Array(len);
|
|
617
|
+
const deferredValue = new Array(len);
|
|
611
618
|
let deferredSize = 0;
|
|
619
|
+
let nodeSize = 0;
|
|
612
620
|
for (const [key, value] of current.entries()) {
|
|
613
621
|
if (isIterable(key) || isIterable(value)) {
|
|
614
|
-
deferredKey
|
|
615
|
-
deferredValue
|
|
622
|
+
deferredKey[deferredSize] = key;
|
|
623
|
+
deferredValue[deferredSize] = value;
|
|
616
624
|
deferredSize++;
|
|
617
625
|
} else {
|
|
618
|
-
keyNodes
|
|
619
|
-
valueNodes
|
|
626
|
+
keyNodes[nodeSize] = generateTreeSync(ctx, key);
|
|
627
|
+
valueNodes[nodeSize] = generateTreeSync(ctx, value);
|
|
628
|
+
nodeSize++;
|
|
620
629
|
}
|
|
621
630
|
}
|
|
622
631
|
for (let i = 0; i < deferredSize; i++) {
|
|
623
|
-
keyNodes
|
|
624
|
-
valueNodes
|
|
632
|
+
keyNodes[nodeSize + i] = generateTreeSync(ctx, deferredKey[i]);
|
|
633
|
+
valueNodes[nodeSize + i] = generateTreeSync(ctx, deferredValue[i]);
|
|
625
634
|
}
|
|
626
|
-
return [5 /* Map */, [keyNodes, valueNodes,
|
|
635
|
+
return [5 /* Map */, [keyNodes, valueNodes, len], id];
|
|
627
636
|
}
|
|
628
637
|
if (Array.isArray(current)) {
|
|
629
638
|
const size = current.length;
|
|
@@ -680,27 +689,30 @@ function generateTreeSync(ctx, current) {
|
|
|
680
689
|
throw new Error("Unsupported value");
|
|
681
690
|
}
|
|
682
691
|
async function serializePropertiesAsync(ctx, properties) {
|
|
683
|
-
const keyNodes = [];
|
|
684
|
-
const valueNodes = [];
|
|
685
|
-
const deferredKeys = [];
|
|
686
|
-
const deferredValues = [];
|
|
687
692
|
const keys = Object.keys(properties);
|
|
693
|
+
const size = keys.length;
|
|
694
|
+
const keyNodes = new Array(size);
|
|
695
|
+
const valueNodes = new Array(size);
|
|
696
|
+
const deferredKeys = new Array(size);
|
|
697
|
+
const deferredValues = new Array(size);
|
|
688
698
|
let deferredSize = 0;
|
|
699
|
+
let nodesSize = 0;
|
|
689
700
|
for (const key of keys) {
|
|
690
701
|
if (isIterable(properties[key])) {
|
|
691
|
-
deferredKeys
|
|
692
|
-
deferredValues
|
|
702
|
+
deferredKeys[deferredSize] = key;
|
|
703
|
+
deferredValues[deferredSize] = properties[key];
|
|
693
704
|
deferredSize++;
|
|
694
705
|
} else {
|
|
695
|
-
keyNodes
|
|
696
|
-
valueNodes
|
|
706
|
+
keyNodes[nodesSize] = key;
|
|
707
|
+
valueNodes[nodesSize] = await generateTreeAsync(ctx, properties[key]);
|
|
708
|
+
nodesSize++;
|
|
697
709
|
}
|
|
698
710
|
}
|
|
699
711
|
for (let i = 0; i < deferredSize; i++) {
|
|
700
|
-
keyNodes
|
|
701
|
-
valueNodes
|
|
712
|
+
keyNodes[nodesSize + i] = deferredKeys[i];
|
|
713
|
+
valueNodes[nodesSize + i] = await generateTreeAsync(ctx, deferredValues[i]);
|
|
702
714
|
}
|
|
703
|
-
return [keyNodes, valueNodes,
|
|
715
|
+
return [keyNodes, valueNodes, size];
|
|
704
716
|
}
|
|
705
717
|
async function generateTreeAsync(ctx, current) {
|
|
706
718
|
if (isPrimitive(current)) {
|
|
@@ -724,42 +736,48 @@ async function generateTreeAsync(ctx, current) {
|
|
|
724
736
|
}
|
|
725
737
|
if (constructorCheck(current, Set)) {
|
|
726
738
|
assert(ctx.features.has(8 /* Set */), 'Unsupported type "Set"');
|
|
727
|
-
const
|
|
728
|
-
const
|
|
739
|
+
const len = current.size;
|
|
740
|
+
const nodes = new Array(len);
|
|
741
|
+
const deferred = new Array(len);
|
|
742
|
+
let deferredSize = 0;
|
|
743
|
+
let nodeSize = 0;
|
|
729
744
|
for (const item of current.keys()) {
|
|
730
745
|
if (isIterable(item)) {
|
|
731
|
-
deferred
|
|
746
|
+
deferred[deferredSize++] = item;
|
|
732
747
|
} else {
|
|
733
|
-
nodes
|
|
748
|
+
nodes[nodeSize++] = await generateTreeAsync(ctx, item);
|
|
734
749
|
}
|
|
735
750
|
}
|
|
736
|
-
for (let i = 0
|
|
737
|
-
nodes
|
|
751
|
+
for (let i = 0; i < deferredSize; i++) {
|
|
752
|
+
nodes[nodeSize + i] = await generateTreeAsync(ctx, deferred[i]);
|
|
738
753
|
}
|
|
739
754
|
return [4 /* Set */, nodes, id];
|
|
740
755
|
}
|
|
741
756
|
if (constructorCheck(current, Map)) {
|
|
742
757
|
assert(ctx.features.has(4 /* Map */), 'Unsupported type "Map"');
|
|
743
|
-
const
|
|
744
|
-
const
|
|
745
|
-
const
|
|
746
|
-
const
|
|
758
|
+
const len = current.size;
|
|
759
|
+
const keyNodes = new Array(len);
|
|
760
|
+
const valueNodes = new Array(len);
|
|
761
|
+
const deferredKey = new Array(len);
|
|
762
|
+
const deferredValue = new Array(len);
|
|
747
763
|
let deferredSize = 0;
|
|
764
|
+
let nodeSize = 0;
|
|
748
765
|
for (const [key, value] of current.entries()) {
|
|
749
766
|
if (isIterable(key) || isIterable(value)) {
|
|
750
|
-
deferredKey
|
|
751
|
-
deferredValue
|
|
767
|
+
deferredKey[deferredSize] = key;
|
|
768
|
+
deferredValue[deferredSize] = value;
|
|
752
769
|
deferredSize++;
|
|
753
770
|
} else {
|
|
754
|
-
keyNodes
|
|
755
|
-
valueNodes
|
|
771
|
+
keyNodes[nodeSize] = await generateTreeAsync(ctx, key);
|
|
772
|
+
valueNodes[nodeSize] = await generateTreeAsync(ctx, value);
|
|
773
|
+
nodeSize++;
|
|
756
774
|
}
|
|
757
775
|
}
|
|
758
776
|
for (let i = 0; i < deferredSize; i++) {
|
|
759
|
-
keyNodes
|
|
760
|
-
valueNodes
|
|
777
|
+
keyNodes[nodeSize + i] = await generateTreeAsync(ctx, deferredKey[i]);
|
|
778
|
+
valueNodes[nodeSize + i] = await generateTreeAsync(ctx, deferredValue[i]);
|
|
761
779
|
}
|
|
762
|
-
return [5 /* Map */, [keyNodes, valueNodes,
|
|
780
|
+
return [5 /* Map */, [keyNodes, valueNodes, len], id];
|
|
763
781
|
}
|
|
764
782
|
if (Array.isArray(current)) {
|
|
765
783
|
const size = current.length;
|
|
@@ -859,7 +877,7 @@ function serializeAssignments(ctx, targetRef, [keys, values, size]) {
|
|
|
859
877
|
const check = Number(key);
|
|
860
878
|
const parentAssignment = ctx.assignments;
|
|
861
879
|
ctx.assignments = mainAssignments;
|
|
862
|
-
if (
|
|
880
|
+
if (IDENTIFIER_CHECK.test(key) || check >= 0) {
|
|
863
881
|
if (!Number.isNaN(check)) {
|
|
864
882
|
createObjectComputedAssign(ctx, targetRef, key, refParam);
|
|
865
883
|
} else {
|
|
@@ -880,20 +898,20 @@ function serializeObject(ctx, sourceID, [keys, values, size]) {
|
|
|
880
898
|
const key = keys[i];
|
|
881
899
|
const val = values[i];
|
|
882
900
|
const check = Number(key);
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
901
|
+
const isIdentifier = IDENTIFIER_CHECK.test(key) || check >= 0;
|
|
902
|
+
if (isReferenceInStack(ctx, val)) {
|
|
903
|
+
const refParam = getRefParam(ctx, val[1]);
|
|
904
|
+
if (isIdentifier) {
|
|
886
905
|
if (!Number.isNaN(check)) {
|
|
887
906
|
createObjectComputedAssign(ctx, sourceID, key, refParam);
|
|
888
907
|
} else {
|
|
889
908
|
createObjectIdentifierAssign(ctx, sourceID, key, refParam);
|
|
890
909
|
}
|
|
891
910
|
} else {
|
|
892
|
-
|
|
911
|
+
createObjectComputedAssign(ctx, sourceID, quote(key), refParam);
|
|
893
912
|
}
|
|
894
|
-
} else if (
|
|
895
|
-
|
|
896
|
-
createObjectComputedAssign(ctx, sourceID, quote(key), refParam);
|
|
913
|
+
} else if (isIdentifier) {
|
|
914
|
+
result += `${key}:${serializeTree(ctx, val)},`;
|
|
897
915
|
} else {
|
|
898
916
|
result += `${quote(key)}:${serializeTree(ctx, val)},`;
|
|
899
917
|
}
|