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.
@@ -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.push(key);
564
- deferredValues.push(properties[key]);
565
+ deferredKeys[deferredSize] = key;
566
+ deferredValues[deferredSize] = properties[key];
565
567
  deferredSize++;
566
568
  } else {
567
- keyNodes.push(key);
568
- valueNodes.push(generateTreeSync(ctx, properties[key]));
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.push(deferredKeys[i]);
573
- valueNodes.push(generateTreeSync(ctx, deferredValues[i]));
575
+ keyNodes[nodesSize + i] = deferredKeys[i];
576
+ valueNodes[nodesSize + i] = generateTreeSync(ctx, deferredValues[i]);
574
577
  }
575
- return [keyNodes, valueNodes, keys.length];
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 nodes = [];
592
- const deferred = [];
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.push(item);
601
+ deferred[deferredSize++] = item;
596
602
  } else {
597
- nodes.push(generateTreeSync(ctx, item));
603
+ nodes[nodeSize++] = generateTreeSync(ctx, item);
598
604
  }
599
605
  }
600
- for (let i = 0, len = deferred.length; i < len; i++) {
601
- nodes.push(generateTreeSync(ctx, deferred[i]));
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 keyNodes = [];
608
- const valueNodes = [];
609
- const deferredKey = [];
610
- const deferredValue = [];
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.push(key);
615
- deferredValue.push(value);
622
+ deferredKey[deferredSize] = key;
623
+ deferredValue[deferredSize] = value;
616
624
  deferredSize++;
617
625
  } else {
618
- keyNodes.push(generateTreeSync(ctx, key));
619
- valueNodes.push(generateTreeSync(ctx, value));
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.push(generateTreeSync(ctx, deferredKey[i]));
624
- valueNodes.push(generateTreeSync(ctx, deferredValue[i]));
632
+ keyNodes[nodeSize + i] = generateTreeSync(ctx, deferredKey[i]);
633
+ valueNodes[nodeSize + i] = generateTreeSync(ctx, deferredValue[i]);
625
634
  }
626
- return [5 /* Map */, [keyNodes, valueNodes, current.size], id];
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.push(key);
692
- deferredValues.push(properties[key]);
702
+ deferredKeys[deferredSize] = key;
703
+ deferredValues[deferredSize] = properties[key];
693
704
  deferredSize++;
694
705
  } else {
695
- keyNodes.push(key);
696
- valueNodes.push(await generateTreeAsync(ctx, properties[key]));
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.push(deferredKeys[i]);
701
- valueNodes.push(await generateTreeAsync(ctx, deferredValues[i]));
712
+ keyNodes[nodesSize + i] = deferredKeys[i];
713
+ valueNodes[nodesSize + i] = await generateTreeAsync(ctx, deferredValues[i]);
702
714
  }
703
- return [keyNodes, valueNodes, keys.length];
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 nodes = [];
728
- const deferred = [];
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.push(item);
746
+ deferred[deferredSize++] = item;
732
747
  } else {
733
- nodes.push(await generateTreeAsync(ctx, item));
748
+ nodes[nodeSize++] = await generateTreeAsync(ctx, item);
734
749
  }
735
750
  }
736
- for (let i = 0, len = deferred.length; i < len; i++) {
737
- nodes.push(await generateTreeAsync(ctx, deferred[i]));
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 keyNodes = [];
744
- const valueNodes = [];
745
- const deferredKey = [];
746
- const deferredValue = [];
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.push(key);
751
- deferredValue.push(value);
767
+ deferredKey[deferredSize] = key;
768
+ deferredValue[deferredSize] = value;
752
769
  deferredSize++;
753
770
  } else {
754
- keyNodes.push(await generateTreeAsync(ctx, key));
755
- valueNodes.push(await generateTreeAsync(ctx, value));
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.push(await generateTreeAsync(ctx, deferredKey[i]));
760
- valueNodes.push(await generateTreeAsync(ctx, deferredValue[i]));
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, current.size], id];
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 (check >= 0 || Number.isNaN(check) && IDENTIFIER_CHECK.test(key)) {
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
- if (check >= 0 || Number.isNaN(check) && IDENTIFIER_CHECK.test(key)) {
884
- if (isReferenceInStack(ctx, val)) {
885
- const refParam = getRefParam(ctx, val[1]);
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
- result += `${key}:${serializeTree(ctx, val)},`;
911
+ createObjectComputedAssign(ctx, sourceID, quote(key), refParam);
893
912
  }
894
- } else if (isReferenceInStack(ctx, val)) {
895
- const refParam = getRefParam(ctx, val[1]);
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
  }