seroval 1.0.0 → 1.0.2

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.
@@ -48,29 +48,36 @@ import type {
48
48
  } from '../types';
49
49
  import { isValidIdentifier } from '../utils/is-valid-identifier';
50
50
 
51
+ const enum AssignmentType {
52
+ Index = 0,
53
+ Add = 1,
54
+ Set = 2,
55
+ Delete = 3,
56
+ }
57
+
51
58
  interface IndexAssignment {
52
- t: 'index';
59
+ t: AssignmentType.Index;
53
60
  s: string;
54
61
  k: undefined;
55
62
  v: string;
56
63
  }
57
64
 
58
65
  interface SetAssignment {
59
- t: 'set';
66
+ t: AssignmentType.Set;
60
67
  s: string;
61
68
  k: string;
62
69
  v: string;
63
70
  }
64
71
 
65
72
  interface AddAssignment {
66
- t: 'add';
73
+ t: AssignmentType.Add;
67
74
  s: string;
68
75
  k: undefined;
69
76
  v: string;
70
77
  }
71
78
 
72
79
  interface DeleteAssignment {
73
- t: 'delete';
80
+ t: AssignmentType.Delete;
74
81
  s: string;
75
82
  k: string;
76
83
  v: undefined;
@@ -90,16 +97,14 @@ export interface FlaggedObject {
90
97
 
91
98
  function getAssignmentExpression(assignment: Assignment): string {
92
99
  switch (assignment.t) {
93
- case 'index':
100
+ case AssignmentType.Index:
94
101
  return assignment.s + '=' + assignment.v;
95
- case 'set':
102
+ case AssignmentType.Set:
96
103
  return assignment.s + '.set(' + assignment.k + ',' + assignment.v + ')';
97
- case 'add':
104
+ case AssignmentType.Add:
98
105
  return assignment.s + '.add(' + assignment.v + ')';
99
- case 'delete':
106
+ case AssignmentType.Delete:
100
107
  return assignment.s + '.delete(' + assignment.k + ')';
101
- default:
102
- return '';
103
108
  }
104
109
  }
105
110
 
@@ -112,35 +117,35 @@ function mergeAssignments(assignments: Assignment[]): Assignment[] {
112
117
  i++
113
118
  ) {
114
119
  item = assignments[i];
115
- if (item.t === 'index' && item.v === prev.v) {
120
+ if (item.t === AssignmentType.Index && item.v === prev.v) {
116
121
  // Merge if the right-hand value is the same
117
122
  // saves at least 2 chars
118
123
  current = {
119
- t: 'index',
124
+ t: AssignmentType.Index,
120
125
  s: item.s,
121
126
  k: undefined,
122
127
  v: getAssignmentExpression(current),
123
128
  } as IndexAssignment;
124
- } else if (item.t === 'set' && item.s === prev.s) {
129
+ } else if (item.t === AssignmentType.Set && item.s === prev.s) {
125
130
  // Maps has chaining methods, merge if source is the same
126
131
  current = {
127
- t: 'set',
132
+ t: AssignmentType.Set,
128
133
  s: getAssignmentExpression(current),
129
134
  k: item.k,
130
135
  v: item.v,
131
136
  } as SetAssignment;
132
- } else if (item.t === 'add' && item.s === prev.s) {
137
+ } else if (item.t === AssignmentType.Add && item.s === prev.s) {
133
138
  // Sets has chaining methods too
134
139
  current = {
135
- t: 'add',
140
+ t: AssignmentType.Add,
136
141
  s: getAssignmentExpression(current),
137
142
  k: undefined,
138
143
  v: item.v,
139
144
  } as AddAssignment;
140
- } else if (item.t === 'delete' && item.s === prev.s) {
145
+ } else if (item.t === AssignmentType.Delete && item.s === prev.s) {
141
146
  // Maps has chaining methods, merge if source is the same
142
147
  current = {
143
- t: 'delete',
148
+ t: AssignmentType.Delete,
144
149
  s: getAssignmentExpression(current),
145
150
  k: item.k,
146
151
  v: undefined,
@@ -319,7 +324,7 @@ export default abstract class BaseSerializerContext
319
324
  */
320
325
  protected createAssignment(source: string, value: string): void {
321
326
  this.assignments.push({
322
- t: 'index',
327
+ t: AssignmentType.Index,
323
328
  s: source,
324
329
  k: undefined,
325
330
  v: value,
@@ -328,7 +333,7 @@ export default abstract class BaseSerializerContext
328
333
 
329
334
  protected createAddAssignment(ref: number, value: string): void {
330
335
  this.assignments.push({
331
- t: 'add',
336
+ t: AssignmentType.Add,
332
337
  s: this.getRefParam(ref),
333
338
  k: undefined,
334
339
  v: value,
@@ -337,7 +342,7 @@ export default abstract class BaseSerializerContext
337
342
 
338
343
  protected createSetAssignment(ref: number, key: string, value: string): void {
339
344
  this.assignments.push({
340
- t: 'set',
345
+ t: AssignmentType.Set,
341
346
  s: this.getRefParam(ref),
342
347
  k: key,
343
348
  v: value,
@@ -346,7 +351,7 @@ export default abstract class BaseSerializerContext
346
351
 
347
352
  protected createDeleteAssignment(ref: number, key: string): void {
348
353
  this.assignments.push({
349
- t: 'delete',
354
+ t: AssignmentType.Delete,
350
355
  s: this.getRefParam(ref),
351
356
  k: key,
352
357
  v: undefined,
@@ -416,11 +421,11 @@ export default abstract class BaseSerializerContext
416
421
  const id = node.i;
417
422
  if (node.l) {
418
423
  this.stack.push(id);
424
+ const list = node.a;
425
+ let values = this.serializeArrayItem(id, list[0], 0);
419
426
  // This is different than Map and Set
420
427
  // because we also need to serialize
421
428
  // the holes of the Array
422
- const list = node.a;
423
- let values = this.serializeArrayItem(id, list[0], 0);
424
429
  let isHoley = values === '';
425
430
  for (let i = 1, len = node.l, item: string; i < len; i++) {
426
431
  item = this.serializeArrayItem(id, list[i], i);
@@ -469,9 +474,9 @@ export default abstract class BaseSerializerContext
469
474
  ): string {
470
475
  const len = record.s;
471
476
  if (len) {
472
- this.stack.push(source.i);
473
477
  const keys = record.k;
474
478
  const values = record.v;
479
+ this.stack.push(source.i);
475
480
  let result = this.serializeProperty(source, keys[0], values[0]);
476
481
  for (let i = 1, item = result; i < len; i++) {
477
482
  item = this.serializeProperty(source, keys[i], values[i]);
@@ -566,10 +571,10 @@ export default abstract class BaseSerializerContext
566
571
  ): string | undefined {
567
572
  const len = node.s;
568
573
  if (len) {
569
- this.stack.push(source.i);
570
574
  const mainAssignments: Assignment[] = [];
571
575
  const keys = node.k;
572
576
  const values = node.v;
577
+ this.stack.push(source.i);
573
578
  for (let i = 0; i < len; i++) {
574
579
  this.serializeAssignment(source, mainAssignments, keys[i], values[i]);
575
580
  }
@@ -795,15 +800,17 @@ export default abstract class BaseSerializerContext
795
800
  }
796
801
 
797
802
  protected serializeAggregateError(node: SerovalAggregateErrorNode): string {
798
- // Serialize the required arguments
799
803
  const id = node.i;
800
- this.stack.push(id);
801
- const serialized = 'new AggregateError([],"' + node.m + '")';
802
- this.stack.pop();
803
804
  // `AggregateError` might've been extended
804
805
  // either through class or custom properties
805
806
  // Make sure to assign extra properties
806
- return this.serializeDictionary(node, serialized);
807
+ this.stack.push(id);
808
+ const serialized = this.serializeDictionary(
809
+ node,
810
+ 'new AggregateError([],"' + node.m + '")',
811
+ );
812
+ this.stack.pop();
813
+ return serialized;
807
814
  }
808
815
 
809
816
  protected serializeError(node: SerovalErrorNode): string {
@@ -846,21 +853,6 @@ export default abstract class BaseSerializerContext
846
853
  return this.assignIndexedValue(node.i, SYMBOL_STRING[node.s]);
847
854
  }
848
855
 
849
- protected serializeFormDataEntry(
850
- id: number,
851
- key: string,
852
- value: SerovalNode,
853
- ): string {
854
- return (
855
- this.getRefParam(id) +
856
- '.append("' +
857
- key +
858
- '",' +
859
- this.serialize(value) +
860
- ')'
861
- );
862
- }
863
-
864
856
  protected serializeBoxed(node: SerovalBoxedNode): string {
865
857
  return this.assignIndexedValue(
866
858
  node.i,
@@ -943,10 +935,10 @@ export default abstract class BaseSerializerContext
943
935
  case SpecialReference.StreamConstructor:
944
936
  return this.createFunction(
945
937
  ['b', 'a', 's', 'l', 'p', 'f', 'e', 'n'],
946
- '(b=[],a=!0,s=!1,l=[],s=0,f=' +
938
+ '(b=[],a=!0,s=!1,l=[],p=0,f=' +
947
939
  this.createEffectfulFunction(
948
940
  ['v', 'm', 'x'],
949
- 'for(x=0;x<s;x++)l[x]&&l[x][m](v)',
941
+ 'for(x=0;x<p;x++)l[x]&&l[x][m](v)',
950
942
  ) +
951
943
  ',n=' +
952
944
  this.createEffectfulFunction(