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
|
@@ -581,27 +581,30 @@ function generateSemiPrimitiveValue(ctx, current, id) {
|
|
|
581
581
|
return void 0;
|
|
582
582
|
}
|
|
583
583
|
function serializePropertiesSync(ctx, properties) {
|
|
584
|
-
const keyNodes = [];
|
|
585
|
-
const valueNodes = [];
|
|
586
|
-
const deferredKeys = [];
|
|
587
|
-
const deferredValues = [];
|
|
588
584
|
const keys = Object.keys(properties);
|
|
585
|
+
const size = keys.length;
|
|
586
|
+
const keyNodes = new Array(size);
|
|
587
|
+
const valueNodes = new Array(size);
|
|
588
|
+
const deferredKeys = new Array(size);
|
|
589
|
+
const deferredValues = new Array(size);
|
|
589
590
|
let deferredSize = 0;
|
|
591
|
+
let nodesSize = 0;
|
|
590
592
|
for (const key of keys) {
|
|
591
593
|
if (isIterable(properties[key])) {
|
|
592
|
-
deferredKeys
|
|
593
|
-
deferredValues
|
|
594
|
+
deferredKeys[deferredSize] = key;
|
|
595
|
+
deferredValues[deferredSize] = properties[key];
|
|
594
596
|
deferredSize++;
|
|
595
597
|
} else {
|
|
596
|
-
keyNodes
|
|
597
|
-
valueNodes
|
|
598
|
+
keyNodes[nodesSize] = key;
|
|
599
|
+
valueNodes[nodesSize] = generateTreeSync(ctx, properties[key]);
|
|
600
|
+
nodesSize++;
|
|
598
601
|
}
|
|
599
602
|
}
|
|
600
603
|
for (let i = 0; i < deferredSize; i++) {
|
|
601
|
-
keyNodes
|
|
602
|
-
valueNodes
|
|
604
|
+
keyNodes[nodesSize + i] = deferredKeys[i];
|
|
605
|
+
valueNodes[nodesSize + i] = generateTreeSync(ctx, deferredValues[i]);
|
|
603
606
|
}
|
|
604
|
-
return [keyNodes, valueNodes,
|
|
607
|
+
return [keyNodes, valueNodes, size];
|
|
605
608
|
}
|
|
606
609
|
function generateTreeSync(ctx, current) {
|
|
607
610
|
if (isPrimitive(current)) {
|
|
@@ -617,42 +620,48 @@ function generateTreeSync(ctx, current) {
|
|
|
617
620
|
}
|
|
618
621
|
if (constructorCheck(current, Set)) {
|
|
619
622
|
assert(ctx.features.has(8 /* Set */), 'Unsupported type "Set"');
|
|
620
|
-
const
|
|
621
|
-
const
|
|
623
|
+
const len = current.size;
|
|
624
|
+
const nodes = new Array(len);
|
|
625
|
+
const deferred = new Array(len);
|
|
626
|
+
let deferredSize = 0;
|
|
627
|
+
let nodeSize = 0;
|
|
622
628
|
for (const item of current.keys()) {
|
|
623
629
|
if (isIterable(item)) {
|
|
624
|
-
deferred
|
|
630
|
+
deferred[deferredSize++] = item;
|
|
625
631
|
} else {
|
|
626
|
-
nodes
|
|
632
|
+
nodes[nodeSize++] = generateTreeSync(ctx, item);
|
|
627
633
|
}
|
|
628
634
|
}
|
|
629
|
-
for (let i = 0
|
|
630
|
-
nodes
|
|
635
|
+
for (let i = 0; i < deferredSize; i++) {
|
|
636
|
+
nodes[nodeSize + i] = generateTreeSync(ctx, deferred[i]);
|
|
631
637
|
}
|
|
632
638
|
return [4 /* Set */, nodes, id];
|
|
633
639
|
}
|
|
634
640
|
if (constructorCheck(current, Map)) {
|
|
635
641
|
assert(ctx.features.has(4 /* Map */), 'Unsupported type "Map"');
|
|
636
|
-
const
|
|
637
|
-
const
|
|
638
|
-
const
|
|
639
|
-
const
|
|
642
|
+
const len = current.size;
|
|
643
|
+
const keyNodes = new Array(len);
|
|
644
|
+
const valueNodes = new Array(len);
|
|
645
|
+
const deferredKey = new Array(len);
|
|
646
|
+
const deferredValue = new Array(len);
|
|
640
647
|
let deferredSize = 0;
|
|
648
|
+
let nodeSize = 0;
|
|
641
649
|
for (const [key, value] of current.entries()) {
|
|
642
650
|
if (isIterable(key) || isIterable(value)) {
|
|
643
|
-
deferredKey
|
|
644
|
-
deferredValue
|
|
651
|
+
deferredKey[deferredSize] = key;
|
|
652
|
+
deferredValue[deferredSize] = value;
|
|
645
653
|
deferredSize++;
|
|
646
654
|
} else {
|
|
647
|
-
keyNodes
|
|
648
|
-
valueNodes
|
|
655
|
+
keyNodes[nodeSize] = generateTreeSync(ctx, key);
|
|
656
|
+
valueNodes[nodeSize] = generateTreeSync(ctx, value);
|
|
657
|
+
nodeSize++;
|
|
649
658
|
}
|
|
650
659
|
}
|
|
651
660
|
for (let i = 0; i < deferredSize; i++) {
|
|
652
|
-
keyNodes
|
|
653
|
-
valueNodes
|
|
661
|
+
keyNodes[nodeSize + i] = generateTreeSync(ctx, deferredKey[i]);
|
|
662
|
+
valueNodes[nodeSize + i] = generateTreeSync(ctx, deferredValue[i]);
|
|
654
663
|
}
|
|
655
|
-
return [5 /* Map */, [keyNodes, valueNodes,
|
|
664
|
+
return [5 /* Map */, [keyNodes, valueNodes, len], id];
|
|
656
665
|
}
|
|
657
666
|
if (Array.isArray(current)) {
|
|
658
667
|
const size = current.length;
|
|
@@ -709,27 +718,30 @@ function generateTreeSync(ctx, current) {
|
|
|
709
718
|
throw new Error("Unsupported value");
|
|
710
719
|
}
|
|
711
720
|
async function serializePropertiesAsync(ctx, properties) {
|
|
712
|
-
const keyNodes = [];
|
|
713
|
-
const valueNodes = [];
|
|
714
|
-
const deferredKeys = [];
|
|
715
|
-
const deferredValues = [];
|
|
716
721
|
const keys = Object.keys(properties);
|
|
722
|
+
const size = keys.length;
|
|
723
|
+
const keyNodes = new Array(size);
|
|
724
|
+
const valueNodes = new Array(size);
|
|
725
|
+
const deferredKeys = new Array(size);
|
|
726
|
+
const deferredValues = new Array(size);
|
|
717
727
|
let deferredSize = 0;
|
|
728
|
+
let nodesSize = 0;
|
|
718
729
|
for (const key of keys) {
|
|
719
730
|
if (isIterable(properties[key])) {
|
|
720
|
-
deferredKeys
|
|
721
|
-
deferredValues
|
|
731
|
+
deferredKeys[deferredSize] = key;
|
|
732
|
+
deferredValues[deferredSize] = properties[key];
|
|
722
733
|
deferredSize++;
|
|
723
734
|
} else {
|
|
724
|
-
keyNodes
|
|
725
|
-
valueNodes
|
|
735
|
+
keyNodes[nodesSize] = key;
|
|
736
|
+
valueNodes[nodesSize] = await generateTreeAsync(ctx, properties[key]);
|
|
737
|
+
nodesSize++;
|
|
726
738
|
}
|
|
727
739
|
}
|
|
728
740
|
for (let i = 0; i < deferredSize; i++) {
|
|
729
|
-
keyNodes
|
|
730
|
-
valueNodes
|
|
741
|
+
keyNodes[nodesSize + i] = deferredKeys[i];
|
|
742
|
+
valueNodes[nodesSize + i] = await generateTreeAsync(ctx, deferredValues[i]);
|
|
731
743
|
}
|
|
732
|
-
return [keyNodes, valueNodes,
|
|
744
|
+
return [keyNodes, valueNodes, size];
|
|
733
745
|
}
|
|
734
746
|
async function generateTreeAsync(ctx, current) {
|
|
735
747
|
if (isPrimitive(current)) {
|
|
@@ -753,42 +765,48 @@ async function generateTreeAsync(ctx, current) {
|
|
|
753
765
|
}
|
|
754
766
|
if (constructorCheck(current, Set)) {
|
|
755
767
|
assert(ctx.features.has(8 /* Set */), 'Unsupported type "Set"');
|
|
756
|
-
const
|
|
757
|
-
const
|
|
768
|
+
const len = current.size;
|
|
769
|
+
const nodes = new Array(len);
|
|
770
|
+
const deferred = new Array(len);
|
|
771
|
+
let deferredSize = 0;
|
|
772
|
+
let nodeSize = 0;
|
|
758
773
|
for (const item of current.keys()) {
|
|
759
774
|
if (isIterable(item)) {
|
|
760
|
-
deferred
|
|
775
|
+
deferred[deferredSize++] = item;
|
|
761
776
|
} else {
|
|
762
|
-
nodes
|
|
777
|
+
nodes[nodeSize++] = await generateTreeAsync(ctx, item);
|
|
763
778
|
}
|
|
764
779
|
}
|
|
765
|
-
for (let i = 0
|
|
766
|
-
nodes
|
|
780
|
+
for (let i = 0; i < deferredSize; i++) {
|
|
781
|
+
nodes[nodeSize + i] = await generateTreeAsync(ctx, deferred[i]);
|
|
767
782
|
}
|
|
768
783
|
return [4 /* Set */, nodes, id];
|
|
769
784
|
}
|
|
770
785
|
if (constructorCheck(current, Map)) {
|
|
771
786
|
assert(ctx.features.has(4 /* Map */), 'Unsupported type "Map"');
|
|
772
|
-
const
|
|
773
|
-
const
|
|
774
|
-
const
|
|
775
|
-
const
|
|
787
|
+
const len = current.size;
|
|
788
|
+
const keyNodes = new Array(len);
|
|
789
|
+
const valueNodes = new Array(len);
|
|
790
|
+
const deferredKey = new Array(len);
|
|
791
|
+
const deferredValue = new Array(len);
|
|
776
792
|
let deferredSize = 0;
|
|
793
|
+
let nodeSize = 0;
|
|
777
794
|
for (const [key, value] of current.entries()) {
|
|
778
795
|
if (isIterable(key) || isIterable(value)) {
|
|
779
|
-
deferredKey
|
|
780
|
-
deferredValue
|
|
796
|
+
deferredKey[deferredSize] = key;
|
|
797
|
+
deferredValue[deferredSize] = value;
|
|
781
798
|
deferredSize++;
|
|
782
799
|
} else {
|
|
783
|
-
keyNodes
|
|
784
|
-
valueNodes
|
|
800
|
+
keyNodes[nodeSize] = await generateTreeAsync(ctx, key);
|
|
801
|
+
valueNodes[nodeSize] = await generateTreeAsync(ctx, value);
|
|
802
|
+
nodeSize++;
|
|
785
803
|
}
|
|
786
804
|
}
|
|
787
805
|
for (let i = 0; i < deferredSize; i++) {
|
|
788
|
-
keyNodes
|
|
789
|
-
valueNodes
|
|
806
|
+
keyNodes[nodeSize + i] = await generateTreeAsync(ctx, deferredKey[i]);
|
|
807
|
+
valueNodes[nodeSize + i] = await generateTreeAsync(ctx, deferredValue[i]);
|
|
790
808
|
}
|
|
791
|
-
return [5 /* Map */, [keyNodes, valueNodes,
|
|
809
|
+
return [5 /* Map */, [keyNodes, valueNodes, len], id];
|
|
792
810
|
}
|
|
793
811
|
if (Array.isArray(current)) {
|
|
794
812
|
const size = current.length;
|
|
@@ -888,7 +906,7 @@ function serializeAssignments(ctx, targetRef, [keys, values, size]) {
|
|
|
888
906
|
const check = Number(key);
|
|
889
907
|
const parentAssignment = ctx.assignments;
|
|
890
908
|
ctx.assignments = mainAssignments;
|
|
891
|
-
if (
|
|
909
|
+
if (IDENTIFIER_CHECK.test(key) || check >= 0) {
|
|
892
910
|
if (!Number.isNaN(check)) {
|
|
893
911
|
createObjectComputedAssign(ctx, targetRef, key, refParam);
|
|
894
912
|
} else {
|
|
@@ -909,20 +927,20 @@ function serializeObject(ctx, sourceID, [keys, values, size]) {
|
|
|
909
927
|
const key = keys[i];
|
|
910
928
|
const val = values[i];
|
|
911
929
|
const check = Number(key);
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
930
|
+
const isIdentifier = IDENTIFIER_CHECK.test(key) || check >= 0;
|
|
931
|
+
if (isReferenceInStack(ctx, val)) {
|
|
932
|
+
const refParam = getRefParam(ctx, val[1]);
|
|
933
|
+
if (isIdentifier) {
|
|
915
934
|
if (!Number.isNaN(check)) {
|
|
916
935
|
createObjectComputedAssign(ctx, sourceID, key, refParam);
|
|
917
936
|
} else {
|
|
918
937
|
createObjectIdentifierAssign(ctx, sourceID, key, refParam);
|
|
919
938
|
}
|
|
920
939
|
} else {
|
|
921
|
-
|
|
940
|
+
createObjectComputedAssign(ctx, sourceID, quote(key), refParam);
|
|
922
941
|
}
|
|
923
|
-
} else if (
|
|
924
|
-
|
|
925
|
-
createObjectComputedAssign(ctx, sourceID, quote(key), refParam);
|
|
942
|
+
} else if (isIdentifier) {
|
|
943
|
+
result += `${key}:${serializeTree(ctx, val)},`;
|
|
926
944
|
} else {
|
|
927
945
|
result += `${quote(key)}:${serializeTree(ctx, val)},`;
|
|
928
946
|
}
|