seroval 0.15.0 → 1.0.0

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.
Files changed (114) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/development/index.cjs +1278 -1929
  3. package/dist/cjs/development/index.cjs.map +3 -3
  4. package/dist/cjs/production/index.cjs +3 -3
  5. package/dist/esm/development/index.mjs +1278 -1929
  6. package/dist/esm/development/index.mjs.map +3 -3
  7. package/dist/esm/production/index.mjs +3 -3
  8. package/dist/types/core/Serializer.d.ts +2 -1
  9. package/dist/types/core/Serializer.d.ts.map +1 -1
  10. package/dist/types/core/UnsupportedTypeError.d.ts.map +1 -1
  11. package/dist/types/core/base-primitives.d.ts +6 -2
  12. package/dist/types/core/base-primitives.d.ts.map +1 -1
  13. package/dist/types/core/compat.d.ts +5 -13
  14. package/dist/types/core/compat.d.ts.map +1 -1
  15. package/dist/types/core/constants.d.ts +17 -29
  16. package/dist/types/core/constants.d.ts.map +1 -1
  17. package/dist/types/core/context/deserializer.d.ts +6 -16
  18. package/dist/types/core/context/deserializer.d.ts.map +1 -1
  19. package/dist/types/core/context/parser/async.d.ts +2 -11
  20. package/dist/types/core/context/parser/async.d.ts.map +1 -1
  21. package/dist/types/core/context/parser/stream.d.ts +10 -10
  22. package/dist/types/core/context/parser/stream.d.ts.map +1 -1
  23. package/dist/types/core/context/parser/sync.d.ts +5 -7
  24. package/dist/types/core/context/parser/sync.d.ts.map +1 -1
  25. package/dist/types/core/context/parser.d.ts +19 -4
  26. package/dist/types/core/context/parser.d.ts.map +1 -1
  27. package/dist/types/core/context/serializer.d.ts +11 -25
  28. package/dist/types/core/context/serializer.d.ts.map +1 -1
  29. package/dist/types/core/cross/async.d.ts.map +1 -1
  30. package/dist/types/core/cross/deserializer.d.ts.map +1 -1
  31. package/dist/types/core/cross/index.d.ts.map +1 -1
  32. package/dist/types/core/cross/parser.d.ts.map +1 -1
  33. package/dist/types/core/cross/serializer.d.ts +1 -1
  34. package/dist/types/core/cross/serializer.d.ts.map +1 -1
  35. package/dist/types/core/cross/stream.d.ts.map +1 -1
  36. package/dist/types/core/cross/sync.d.ts.map +1 -1
  37. package/dist/types/core/keys.d.ts.map +1 -1
  38. package/dist/types/core/literals.d.ts.map +1 -1
  39. package/dist/types/core/plugin.d.ts +21 -0
  40. package/dist/types/core/plugin.d.ts.map +1 -1
  41. package/dist/types/core/reference.d.ts.map +1 -1
  42. package/dist/types/core/special-reference.d.ts +4 -9
  43. package/dist/types/core/special-reference.d.ts.map +1 -1
  44. package/dist/types/core/stream.d.ts +18 -0
  45. package/dist/types/core/stream.d.ts.map +1 -0
  46. package/dist/types/core/string.d.ts.map +1 -1
  47. package/dist/types/core/tree/async.d.ts.map +1 -1
  48. package/dist/types/core/tree/deserializer.d.ts.map +1 -1
  49. package/dist/types/core/tree/index.d.ts +1 -1
  50. package/dist/types/core/tree/index.d.ts.map +1 -1
  51. package/dist/types/core/tree/serializer.d.ts +3 -11
  52. package/dist/types/core/tree/serializer.d.ts.map +1 -1
  53. package/dist/types/core/types.d.ts +28 -122
  54. package/dist/types/core/types.d.ts.map +1 -1
  55. package/dist/types/core/utils/deferred.d.ts +0 -7
  56. package/dist/types/core/utils/deferred.d.ts.map +1 -1
  57. package/dist/types/core/utils/error.d.ts +2 -1
  58. package/dist/types/core/utils/error.d.ts.map +1 -1
  59. package/dist/types/core/utils/get-identifier.d.ts.map +1 -1
  60. package/dist/types/core/utils/is-valid-identifier.d.ts.map +1 -1
  61. package/dist/types/core/utils/iterator-to-sequence.d.ts +0 -12
  62. package/dist/types/core/utils/iterator-to-sequence.d.ts.map +1 -1
  63. package/dist/types/core/utils/typed-array.d.ts +2 -0
  64. package/dist/types/core/utils/typed-array.d.ts.map +1 -1
  65. package/dist/types/index.d.ts +3 -3
  66. package/dist/types/index.d.ts.map +1 -1
  67. package/package.json +7 -7
  68. package/src/core/Serializer.ts +44 -28
  69. package/src/core/UnsupportedTypeError.ts +2 -3
  70. package/src/core/base-primitives.ts +124 -38
  71. package/src/core/compat.ts +5 -14
  72. package/src/core/constants.ts +28 -39
  73. package/src/core/context/deserializer.ts +122 -308
  74. package/src/core/context/parser/async.ts +163 -375
  75. package/src/core/context/parser/stream.ts +109 -367
  76. package/src/core/context/parser/sync.ts +139 -266
  77. package/src/core/context/parser.ts +93 -68
  78. package/src/core/context/serializer.ts +370 -439
  79. package/src/core/cross/async.ts +1 -1
  80. package/src/core/cross/deserializer.ts +1 -4
  81. package/src/core/cross/index.ts +28 -31
  82. package/src/core/cross/parser.ts +1 -1
  83. package/src/core/cross/serializer.ts +30 -20
  84. package/src/core/cross/stream.ts +1 -1
  85. package/src/core/cross/sync.ts +1 -1
  86. package/src/core/keys.ts +3 -1
  87. package/src/core/literals.ts +22 -8
  88. package/src/core/plugin.ts +48 -10
  89. package/src/core/reference.ts +4 -5
  90. package/src/core/special-reference.ts +5 -15
  91. package/src/core/stream.ts +205 -0
  92. package/src/core/string.ts +53 -22
  93. package/src/core/tree/async.ts +1 -1
  94. package/src/core/tree/deserializer.ts +4 -9
  95. package/src/core/tree/index.ts +15 -10
  96. package/src/core/tree/serializer.ts +6 -50
  97. package/src/core/types.ts +39 -179
  98. package/src/core/utils/deferred.ts +0 -27
  99. package/src/core/utils/error.ts +26 -15
  100. package/src/core/utils/get-identifier.ts +5 -4
  101. package/src/core/utils/is-valid-identifier.ts +6 -5
  102. package/src/core/utils/iterator-to-sequence.ts +0 -174
  103. package/src/core/utils/typed-array.ts +35 -11
  104. package/src/index.ts +5 -12
  105. package/dist/types/core/utils/constructors.d.ts +0 -5
  106. package/dist/types/core/utils/constructors.d.ts.map +0 -1
  107. package/dist/types/core/web-api.d.ts +0 -8
  108. package/dist/types/core/web-api.d.ts.map +0 -1
  109. package/dist/types/types.d.ts +0 -21
  110. package/dist/types/types.d.ts.map +0 -1
  111. package/src/core/utils/constructors.ts +0 -49
  112. package/src/core/web-api.ts +0 -138
  113. package/src/example.ts +0 -25
  114. package/src/types.ts +0 -84
@@ -1,4 +1,3 @@
1
- import type { BigIntTypedArrayValue, TypedArrayValue } from '../types';
2
1
  import assert from './utils/assert';
3
2
  import type { WellKnownSymbols } from './constants';
4
3
  import { INV_SYMBOL_REF, SerovalNodeType } from './constants';
@@ -33,41 +32,49 @@ import type {
33
32
  SerovalReferenceNode,
34
33
  SerovalRegExpNode,
35
34
  SerovalSetNode,
35
+ SerovalStreamConstructorNode,
36
+ SerovalStreamNextNode,
37
+ SerovalStreamReturnNode,
38
+ SerovalStreamThrowNode,
36
39
  SerovalStringNode,
37
40
  SerovalTypedArrayNode,
38
41
  SerovalWKSymbolNode,
39
42
  } from './types';
40
43
  import { getObjectFlag } from './utils/get-object-flag';
44
+ import type {
45
+ BigIntTypedArrayValue,
46
+ TypedArrayValue,
47
+ } from './utils/typed-array';
41
48
 
42
- export function createNumberNode(value: number): SerovalConstantNode | SerovalNumberNode {
49
+ export function createNumberNode(
50
+ value: number,
51
+ ): SerovalConstantNode | SerovalNumberNode {
43
52
  switch (value) {
44
53
  case Infinity:
45
54
  return INFINITY_NODE;
46
55
  case -Infinity:
47
56
  return NEG_INFINITY_NODE;
48
- default:
49
- // eslint-disable-next-line no-self-compare
50
- if (value !== value) {
51
- return NAN_NODE;
52
- }
53
- if (Object.is(value, -0)) {
54
- return NEG_ZERO_NODE;
55
- }
56
- return {
57
- t: SerovalNodeType.Number,
58
- i: undefined,
59
- s: value,
60
- l: undefined,
61
- c: undefined,
62
- m: undefined,
63
- p: undefined,
64
- e: undefined,
65
- a: undefined,
66
- f: undefined,
67
- b: undefined,
68
- o: undefined,
69
- };
70
57
  }
58
+ if (value !== value) {
59
+ return NAN_NODE;
60
+ }
61
+ if (Object.is(value, -0)) {
62
+ return NEG_ZERO_NODE;
63
+ }
64
+ return {
65
+ t: SerovalNodeType.Number,
66
+ i: undefined,
67
+ s: value,
68
+ l: undefined,
69
+ c: undefined,
70
+ m: undefined,
71
+ p: undefined,
72
+ e: undefined,
73
+ a: undefined,
74
+ f: undefined,
75
+ b: undefined,
76
+ o: undefined,
77
+ };
71
78
  }
72
79
 
73
80
  export function createStringNode(value: string): SerovalStringNode {
@@ -87,9 +94,7 @@ export function createStringNode(value: string): SerovalStringNode {
87
94
  };
88
95
  }
89
96
 
90
- export function createBigIntNode(
91
- current: bigint,
92
- ): SerovalBigIntNode {
97
+ export function createBigIntNode(current: bigint): SerovalBigIntNode {
93
98
  return {
94
99
  t: SerovalNodeType.BigInt,
95
100
  i: undefined,
@@ -140,13 +145,16 @@ export function createDateNode(id: number, current: Date): SerovalDateNode {
140
145
  };
141
146
  }
142
147
 
143
- export function createRegExpNode(id: number, current: RegExp): SerovalRegExpNode {
148
+ export function createRegExpNode(
149
+ id: number,
150
+ current: RegExp,
151
+ ): SerovalRegExpNode {
144
152
  return {
145
153
  t: SerovalNodeType.RegExp,
146
154
  i: id,
147
155
  s: undefined,
148
156
  l: undefined,
149
- c: current.source,
157
+ c: serializeString(current.source),
150
158
  m: current.flags,
151
159
  p: undefined,
152
160
  e: undefined,
@@ -187,7 +195,10 @@ export function createWKSymbolNode(
187
195
  id: number,
188
196
  current: WellKnownSymbols,
189
197
  ): SerovalWKSymbolNode {
190
- assert(current in INV_SYMBOL_REF, new Error('Only well-known symbols are supported.'));
198
+ assert(
199
+ current in INV_SYMBOL_REF,
200
+ new Error('Only well-known symbols are supported.'),
201
+ );
191
202
  return {
192
203
  t: SerovalNodeType.WKSymbol,
193
204
  i: id,
@@ -425,10 +436,7 @@ export function createIteratorFactoryInstanceNode(
425
436
  m: undefined,
426
437
  p: undefined,
427
438
  e: undefined,
428
- a: [
429
- factory,
430
- items,
431
- ],
439
+ a: [factory, items],
432
440
  f: undefined,
433
441
  b: undefined,
434
442
  o: undefined,
@@ -448,12 +456,90 @@ export function createAsyncIteratorFactoryInstanceNode(
448
456
  m: undefined,
449
457
  p: undefined,
450
458
  e: undefined,
451
- a: [
452
- factory,
453
- items,
454
- ],
459
+ a: [factory, items],
455
460
  f: undefined,
456
461
  b: undefined,
457
462
  o: undefined,
458
463
  };
459
464
  }
465
+
466
+ export function createStreamConstructorNode(
467
+ id: number,
468
+ factory: SerovalNodeWithID,
469
+ sequence: SerovalNode[],
470
+ ): SerovalStreamConstructorNode {
471
+ return {
472
+ t: SerovalNodeType.StreamConstructor,
473
+ i: id,
474
+ s: undefined,
475
+ l: undefined,
476
+ c: undefined,
477
+ m: undefined,
478
+ p: undefined,
479
+ e: undefined,
480
+ a: sequence,
481
+ f: factory,
482
+ b: undefined,
483
+ o: undefined,
484
+ };
485
+ }
486
+
487
+ export function createStreamNextNode(
488
+ id: number,
489
+ parsed: SerovalNode,
490
+ ): SerovalStreamNextNode {
491
+ return {
492
+ t: SerovalNodeType.StreamNext,
493
+ i: id,
494
+ s: undefined,
495
+ l: undefined,
496
+ c: undefined,
497
+ m: undefined,
498
+ p: undefined,
499
+ e: undefined,
500
+ a: undefined,
501
+ f: parsed,
502
+ b: undefined,
503
+ o: undefined,
504
+ };
505
+ }
506
+
507
+ export function createStreamThrowNode(
508
+ id: number,
509
+ parsed: SerovalNode,
510
+ ): SerovalStreamThrowNode {
511
+ return {
512
+ t: SerovalNodeType.StreamThrow,
513
+ i: id,
514
+ s: undefined,
515
+ l: undefined,
516
+ c: undefined,
517
+ m: undefined,
518
+ p: undefined,
519
+ e: undefined,
520
+ a: undefined,
521
+ f: parsed,
522
+ b: undefined,
523
+ o: undefined,
524
+ };
525
+ }
526
+
527
+ export function createStreamReturnNode(
528
+ id: number,
529
+ parsed: SerovalNode,
530
+ ): SerovalStreamReturnNode {
531
+ return {
532
+ t: SerovalNodeType.StreamReturn,
533
+ i: id,
534
+ s: undefined,
535
+ l: undefined,
536
+ c: undefined,
537
+ m: undefined,
538
+ p: undefined,
539
+ e: undefined,
540
+ a: undefined,
541
+ f: parsed,
542
+ b: undefined,
543
+ o: undefined,
544
+ };
545
+ }
@@ -6,19 +6,10 @@
6
6
 
7
7
  export const enum Feature {
8
8
  AggregateError = 0x01,
9
- ArrowFunction = 0x04,
10
- BigInt = 0x08,
11
- ErrorPrototypeStack = 0x10,
12
- Map = 0x20,
13
- ObjectAssign = 0x80,
14
- Promise = 0x100,
15
- Set = 0x200,
16
- Symbol = 0x400,
17
- TypedArray = 0x800,
18
- BigIntTypedArray = 0x1000,
19
- WebAPI = 0x2000,
9
+ ArrowFunction = 0x02,
10
+ ErrorPrototypeStack = 0x04,
11
+ ObjectAssign = 0x08,
12
+ BigIntTypedArray = 0x10,
20
13
  }
21
14
 
22
- export const ALL_ENABLED = 0x3FFF;
23
-
24
- export const BIGINT_FLAG = Feature.BigIntTypedArray | Feature.BigInt;
15
+ export const ALL_ENABLED = 0x1f;
@@ -28,35 +28,23 @@ export const enum SerovalNodeType {
28
28
  TypedArray = 15,
29
29
  BigIntTypedArray = 16,
30
30
  WKSymbol = 17,
31
- URL = 18,
32
- URLSearchParams = 19,
33
- Reference = 20,
34
- ArrayBuffer = 21,
35
- DataView = 22,
36
- Blob = 23,
37
- File = 24,
38
- Headers = 25,
39
- FormData = 26,
40
- Boxed = 27,
41
- PromiseConstructor = 28,
42
- PromiseResolve = 29,
43
- PromiseReject = 30,
44
- ReadableStreamConstructor = 31,
45
- ReadableStreamEnqueue = 32,
46
- ReadableStreamClose = 33,
47
- ReadableStreamError = 34,
48
- Request = 35,
49
- Response = 36,
50
- Event = 37,
51
- CustomEvent = 38,
52
- DOMException = 39,
53
- Plugin = 40,
54
- SpecialReference = 41,
55
- IteratorFactory = 42,
56
- IteratorFactoryInstance = 43,
57
- AsyncIteratorFactory = 44,
58
- AsyncIteratorFactoryInstance = 45,
59
- ReadableStream = 46,
31
+ Reference = 18,
32
+ ArrayBuffer = 19,
33
+ DataView = 20,
34
+ Boxed = 21,
35
+ PromiseConstructor = 22,
36
+ PromiseResolve = 23,
37
+ PromiseReject = 24,
38
+ Plugin = 25,
39
+ SpecialReference = 26,
40
+ IteratorFactory = 27,
41
+ IteratorFactoryInstance = 28,
42
+ AsyncIteratorFactory = 29,
43
+ AsyncIteratorFactoryInstance = 30,
44
+ StreamConstructor = 31,
45
+ StreamNext = 32,
46
+ StreamThrow = 33,
47
+ StreamReturn = 34,
60
48
  }
61
49
 
62
50
  export const enum SerovalObjectFlags {
@@ -98,7 +86,7 @@ export const SYMBOL_STRING: Record<Symbols, string> = {
98
86
  [Symbols.Unscopables]: 'Symbol.unscopables',
99
87
  };
100
88
 
101
- export const INV_SYMBOL_REF = {
89
+ export const INV_SYMBOL_REF = /* @__PURE__ */ {
102
90
  [Symbol.asyncIterator]: Symbols.AsyncIterator,
103
91
  [Symbol.hasInstance]: Symbols.HasInstance,
104
92
  [Symbol.isConcatSpreadable]: Symbols.IsConcatSpreadable,
@@ -183,12 +171,13 @@ type ErrorConstructors =
183
171
  | TypeErrorConstructor
184
172
  | URIErrorConstructor;
185
173
 
186
- export const ERROR_CONSTRUCTOR: Record<ErrorConstructorTag, ErrorConstructors> = {
187
- [ErrorConstructorTag.Error]: Error,
188
- [ErrorConstructorTag.EvalError]: EvalError,
189
- [ErrorConstructorTag.RangeError]: RangeError,
190
- [ErrorConstructorTag.ReferenceError]: ReferenceError,
191
- [ErrorConstructorTag.SyntaxError]: SyntaxError,
192
- [ErrorConstructorTag.TypeError]: TypeError,
193
- [ErrorConstructorTag.URIError]: URIError,
194
- };
174
+ export const ERROR_CONSTRUCTOR: Record<ErrorConstructorTag, ErrorConstructors> =
175
+ {
176
+ [ErrorConstructorTag.Error]: Error,
177
+ [ErrorConstructorTag.EvalError]: EvalError,
178
+ [ErrorConstructorTag.RangeError]: RangeError,
179
+ [ErrorConstructorTag.ReferenceError]: ReferenceError,
180
+ [ErrorConstructorTag.SyntaxError]: SyntaxError,
181
+ [ErrorConstructorTag.TypeError]: TypeError,
182
+ [ErrorConstructorTag.URIError]: URIError,
183
+ };