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.
@@ -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.push(key);
593
- deferredValues.push(properties[key]);
594
+ deferredKeys[deferredSize] = key;
595
+ deferredValues[deferredSize] = properties[key];
594
596
  deferredSize++;
595
597
  } else {
596
- keyNodes.push(key);
597
- valueNodes.push(generateTreeSync(ctx, properties[key]));
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.push(deferredKeys[i]);
602
- valueNodes.push(generateTreeSync(ctx, deferredValues[i]));
604
+ keyNodes[nodesSize + i] = deferredKeys[i];
605
+ valueNodes[nodesSize + i] = generateTreeSync(ctx, deferredValues[i]);
603
606
  }
604
- return [keyNodes, valueNodes, keys.length];
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 nodes = [];
621
- const deferred = [];
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.push(item);
630
+ deferred[deferredSize++] = item;
625
631
  } else {
626
- nodes.push(generateTreeSync(ctx, item));
632
+ nodes[nodeSize++] = generateTreeSync(ctx, item);
627
633
  }
628
634
  }
629
- for (let i = 0, len = deferred.length; i < len; i++) {
630
- nodes.push(generateTreeSync(ctx, deferred[i]));
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 keyNodes = [];
637
- const valueNodes = [];
638
- const deferredKey = [];
639
- const deferredValue = [];
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.push(key);
644
- deferredValue.push(value);
651
+ deferredKey[deferredSize] = key;
652
+ deferredValue[deferredSize] = value;
645
653
  deferredSize++;
646
654
  } else {
647
- keyNodes.push(generateTreeSync(ctx, key));
648
- valueNodes.push(generateTreeSync(ctx, value));
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.push(generateTreeSync(ctx, deferredKey[i]));
653
- valueNodes.push(generateTreeSync(ctx, deferredValue[i]));
661
+ keyNodes[nodeSize + i] = generateTreeSync(ctx, deferredKey[i]);
662
+ valueNodes[nodeSize + i] = generateTreeSync(ctx, deferredValue[i]);
654
663
  }
655
- return [5 /* Map */, [keyNodes, valueNodes, current.size], id];
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.push(key);
721
- deferredValues.push(properties[key]);
731
+ deferredKeys[deferredSize] = key;
732
+ deferredValues[deferredSize] = properties[key];
722
733
  deferredSize++;
723
734
  } else {
724
- keyNodes.push(key);
725
- valueNodes.push(await generateTreeAsync(ctx, properties[key]));
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.push(deferredKeys[i]);
730
- valueNodes.push(await generateTreeAsync(ctx, deferredValues[i]));
741
+ keyNodes[nodesSize + i] = deferredKeys[i];
742
+ valueNodes[nodesSize + i] = await generateTreeAsync(ctx, deferredValues[i]);
731
743
  }
732
- return [keyNodes, valueNodes, keys.length];
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 nodes = [];
757
- const deferred = [];
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.push(item);
775
+ deferred[deferredSize++] = item;
761
776
  } else {
762
- nodes.push(await generateTreeAsync(ctx, item));
777
+ nodes[nodeSize++] = await generateTreeAsync(ctx, item);
763
778
  }
764
779
  }
765
- for (let i = 0, len = deferred.length; i < len; i++) {
766
- nodes.push(await generateTreeAsync(ctx, deferred[i]));
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 keyNodes = [];
773
- const valueNodes = [];
774
- const deferredKey = [];
775
- const deferredValue = [];
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.push(key);
780
- deferredValue.push(value);
796
+ deferredKey[deferredSize] = key;
797
+ deferredValue[deferredSize] = value;
781
798
  deferredSize++;
782
799
  } else {
783
- keyNodes.push(await generateTreeAsync(ctx, key));
784
- valueNodes.push(await generateTreeAsync(ctx, value));
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.push(await generateTreeAsync(ctx, deferredKey[i]));
789
- valueNodes.push(await generateTreeAsync(ctx, deferredValue[i]));
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, current.size], id];
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 (check >= 0 || Number.isNaN(check) && IDENTIFIER_CHECK.test(key)) {
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
- if (check >= 0 || Number.isNaN(check) && IDENTIFIER_CHECK.test(key)) {
913
- if (isReferenceInStack(ctx, val)) {
914
- const refParam = getRefParam(ctx, val[1]);
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
- result += `${key}:${serializeTree(ctx, val)},`;
940
+ createObjectComputedAssign(ctx, sourceID, quote(key), refParam);
922
941
  }
923
- } else if (isReferenceInStack(ctx, val)) {
924
- const refParam = getRefParam(ctx, val[1]);
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
  }