seroval 1.3.2 → 1.4.1

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 (125) hide show
  1. package/dist/cjs/development/index.cjs +2817 -2700
  2. package/dist/cjs/development/index.cjs.map +4 -4
  3. package/dist/cjs/production/index.cjs +3 -17
  4. package/dist/esm/development/index.mjs +2817 -2700
  5. package/dist/esm/development/index.mjs.map +4 -4
  6. package/dist/esm/production/index.mjs +3 -17
  7. package/dist/types/core/base-primitives.d.ts +3 -4
  8. package/dist/types/core/base-primitives.d.ts.map +1 -1
  9. package/dist/types/core/compat.d.ts +3 -2
  10. package/dist/types/core/compat.d.ts.map +1 -1
  11. package/dist/types/core/constants.d.ts +2 -1
  12. package/dist/types/core/constants.d.ts.map +1 -1
  13. package/dist/types/core/constructors.d.ts +54 -0
  14. package/dist/types/core/constructors.d.ts.map +1 -0
  15. package/dist/types/core/context/async-parser.d.ts +20 -0
  16. package/dist/types/core/context/async-parser.d.ts.map +1 -0
  17. package/dist/types/core/context/deserializer.d.ts +40 -38
  18. package/dist/types/core/context/deserializer.d.ts.map +1 -1
  19. package/dist/types/core/context/parser.d.ts +34 -19
  20. package/dist/types/core/context/parser.d.ts.map +1 -1
  21. package/dist/types/core/context/serializer.d.ts +38 -99
  22. package/dist/types/core/context/serializer.d.ts.map +1 -1
  23. package/dist/types/core/context/sync-parser.d.ts +59 -0
  24. package/dist/types/core/context/sync-parser.d.ts.map +1 -0
  25. package/dist/types/core/cross/index.d.ts +12 -13
  26. package/dist/types/core/cross/index.d.ts.map +1 -1
  27. package/dist/types/core/errors.d.ts +9 -0
  28. package/dist/types/core/errors.d.ts.map +1 -1
  29. package/dist/types/core/function-string.d.ts +2 -2
  30. package/dist/types/core/function-string.d.ts.map +1 -1
  31. package/dist/types/core/literals.d.ts.map +1 -1
  32. package/dist/types/core/node.d.ts +1 -1
  33. package/dist/types/core/node.d.ts.map +1 -1
  34. package/dist/types/core/plugin.d.ts +13 -11
  35. package/dist/types/core/plugin.d.ts.map +1 -1
  36. package/dist/types/core/reference.d.ts.map +1 -1
  37. package/dist/types/core/special-reference.d.ts +3 -2
  38. package/dist/types/core/special-reference.d.ts.map +1 -1
  39. package/dist/types/core/stream.d.ts +1 -2
  40. package/dist/types/core/stream.d.ts.map +1 -1
  41. package/dist/types/core/string.d.ts.map +1 -1
  42. package/dist/types/core/symbols.d.ts +14 -0
  43. package/dist/types/core/symbols.d.ts.map +1 -0
  44. package/dist/types/core/tree/index.d.ts +7 -3
  45. package/dist/types/core/tree/index.d.ts.map +1 -1
  46. package/dist/types/core/types.d.ts +4 -11
  47. package/dist/types/core/types.d.ts.map +1 -1
  48. package/dist/types/core/utils/iterator-to-sequence.d.ts.map +1 -1
  49. package/dist/types/index.d.ts +10 -5
  50. package/dist/types/index.d.ts.map +1 -1
  51. package/package.json +18 -21
  52. package/dist/types/core/context/parser/async.d.ts +0 -24
  53. package/dist/types/core/context/parser/async.d.ts.map +0 -1
  54. package/dist/types/core/context/parser/stream.d.ts +0 -43
  55. package/dist/types/core/context/parser/stream.d.ts.map +0 -1
  56. package/dist/types/core/context/parser/sync.d.ts +0 -30
  57. package/dist/types/core/context/parser/sync.d.ts.map +0 -1
  58. package/dist/types/core/cross/async.d.ts +0 -8
  59. package/dist/types/core/cross/async.d.ts.map +0 -1
  60. package/dist/types/core/cross/deserializer.d.ts +0 -9
  61. package/dist/types/core/cross/deserializer.d.ts.map +0 -1
  62. package/dist/types/core/cross/parser.d.ts +0 -6
  63. package/dist/types/core/cross/parser.d.ts.map +0 -1
  64. package/dist/types/core/cross/serializer.d.ts +0 -16
  65. package/dist/types/core/cross/serializer.d.ts.map +0 -1
  66. package/dist/types/core/cross/stream.d.ts +0 -8
  67. package/dist/types/core/cross/stream.d.ts.map +0 -1
  68. package/dist/types/core/cross/sync.d.ts +0 -8
  69. package/dist/types/core/cross/sync.d.ts.map +0 -1
  70. package/dist/types/core/tree/async.d.ts +0 -8
  71. package/dist/types/core/tree/async.d.ts.map +0 -1
  72. package/dist/types/core/tree/deserializer.d.ts +0 -13
  73. package/dist/types/core/tree/deserializer.d.ts.map +0 -1
  74. package/dist/types/core/tree/serializer.d.ts +0 -29
  75. package/dist/types/core/tree/serializer.d.ts.map +0 -1
  76. package/dist/types/core/tree/sync.d.ts +0 -8
  77. package/dist/types/core/tree/sync.d.ts.map +0 -1
  78. package/dist/types/core/utils/assert.d.ts +0 -2
  79. package/dist/types/core/utils/assert.d.ts.map +0 -1
  80. package/dist/types/core/utils/deferred.d.ts +0 -7
  81. package/dist/types/core/utils/deferred.d.ts.map +0 -1
  82. package/src/core/Serializer.ts +0 -119
  83. package/src/core/base-primitives.ts +0 -542
  84. package/src/core/compat.ts +0 -20
  85. package/src/core/constants.ts +0 -185
  86. package/src/core/context/deserializer.ts +0 -456
  87. package/src/core/context/parser/async.ts +0 -495
  88. package/src/core/context/parser/stream.ts +0 -323
  89. package/src/core/context/parser/sync.ts +0 -404
  90. package/src/core/context/parser.ts +0 -270
  91. package/src/core/context/serializer.ts +0 -1180
  92. package/src/core/cross/async.ts +0 -9
  93. package/src/core/cross/deserializer.ts +0 -16
  94. package/src/core/cross/index.ts +0 -170
  95. package/src/core/cross/parser.ts +0 -7
  96. package/src/core/cross/serializer.ts +0 -72
  97. package/src/core/cross/stream.ts +0 -9
  98. package/src/core/cross/sync.ts +0 -9
  99. package/src/core/errors.ts +0 -102
  100. package/src/core/function-string.ts +0 -31
  101. package/src/core/keys.ts +0 -17
  102. package/src/core/literals.ts +0 -43
  103. package/src/core/node.ts +0 -40
  104. package/src/core/opaque-reference.ts +0 -9
  105. package/src/core/plugin.ts +0 -91
  106. package/src/core/reference.ts +0 -63
  107. package/src/core/special-reference.ts +0 -114
  108. package/src/core/stream.ts +0 -205
  109. package/src/core/string.ts +0 -84
  110. package/src/core/tree/async.ts +0 -9
  111. package/src/core/tree/deserializer.ts +0 -26
  112. package/src/core/tree/index.ts +0 -111
  113. package/src/core/tree/serializer.ts +0 -98
  114. package/src/core/tree/sync.ts +0 -9
  115. package/src/core/types.ts +0 -370
  116. package/src/core/utils/assert.ts +0 -5
  117. package/src/core/utils/deferred.ts +0 -22
  118. package/src/core/utils/error.ts +0 -73
  119. package/src/core/utils/get-identifier.ts +0 -18
  120. package/src/core/utils/get-object-flag.ts +0 -14
  121. package/src/core/utils/is-valid-identifier.ts +0 -12
  122. package/src/core/utils/iterator-to-sequence.ts +0 -66
  123. package/src/core/utils/promise-to-result.ts +0 -9
  124. package/src/core/utils/typed-array.ts +0 -56
  125. package/src/index.ts +0 -18
@@ -1,185 +0,0 @@
1
- export const enum SerovalConstant {
2
- Null = 0,
3
- Undefined = 1,
4
- True = 2,
5
- False = 3,
6
- NegZero = 4,
7
- Inf = 5,
8
- NegInf = 6,
9
- Nan = 7,
10
- }
11
-
12
- export const enum SerovalNodeType {
13
- Number = 0,
14
- String = 1,
15
- Constant = 2,
16
- BigInt = 3,
17
- IndexedValue = 4,
18
- Date = 5,
19
- RegExp = 6,
20
- Set = 7,
21
- Map = 8,
22
- Array = 9,
23
- Object = 10,
24
- NullConstructor = 11,
25
- Promise = 12,
26
- Error = 13,
27
- AggregateError = 14,
28
- TypedArray = 15,
29
- BigIntTypedArray = 16,
30
- WKSymbol = 17,
31
- Reference = 18,
32
- ArrayBuffer = 19,
33
- DataView = 20,
34
- Boxed = 21,
35
- PromiseConstructor = 22,
36
- PromiseSuccess = 23,
37
- PromiseFailure = 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,
48
- }
49
-
50
- export const enum SerovalObjectFlags {
51
- None = 0,
52
- NonExtensible = 1,
53
- Sealed = 2,
54
- Frozen = 3,
55
- }
56
-
57
- export const enum Symbols {
58
- AsyncIterator = 0,
59
- HasInstance = 1,
60
- IsConcatSpreadable = 2,
61
- Iterator = 3,
62
- Match = 4,
63
- MatchAll = 5,
64
- Replace = 6,
65
- Search = 7,
66
- Species = 8,
67
- Split = 9,
68
- ToPrimitive = 10,
69
- ToStringTag = 11,
70
- Unscopables = 12,
71
- }
72
-
73
- export const SYMBOL_STRING: Record<Symbols, string> = {
74
- [Symbols.AsyncIterator]: 'Symbol.asyncIterator',
75
- [Symbols.HasInstance]: 'Symbol.hasInstance',
76
- [Symbols.IsConcatSpreadable]: 'Symbol.isConcatSpreadable',
77
- [Symbols.Iterator]: 'Symbol.iterator',
78
- [Symbols.Match]: 'Symbol.match',
79
- [Symbols.MatchAll]: 'Symbol.matchAll',
80
- [Symbols.Replace]: 'Symbol.replace',
81
- [Symbols.Search]: 'Symbol.search',
82
- [Symbols.Species]: 'Symbol.species',
83
- [Symbols.Split]: 'Symbol.split',
84
- [Symbols.ToPrimitive]: 'Symbol.toPrimitive',
85
- [Symbols.ToStringTag]: 'Symbol.toStringTag',
86
- [Symbols.Unscopables]: 'Symbol.unscopables',
87
- };
88
-
89
- export const INV_SYMBOL_REF = /* @__PURE__ */ {
90
- [Symbol.asyncIterator]: Symbols.AsyncIterator,
91
- [Symbol.hasInstance]: Symbols.HasInstance,
92
- [Symbol.isConcatSpreadable]: Symbols.IsConcatSpreadable,
93
- [Symbol.iterator]: Symbols.Iterator,
94
- [Symbol.match]: Symbols.Match,
95
- [Symbol.matchAll]: Symbols.MatchAll,
96
- [Symbol.replace]: Symbols.Replace,
97
- [Symbol.search]: Symbols.Search,
98
- [Symbol.species]: Symbols.Species,
99
- [Symbol.split]: Symbols.Split,
100
- [Symbol.toPrimitive]: Symbols.ToPrimitive,
101
- [Symbol.toStringTag]: Symbols.ToStringTag,
102
- [Symbol.unscopables]: Symbols.Unscopables,
103
- };
104
-
105
- export type WellKnownSymbols = keyof typeof INV_SYMBOL_REF;
106
-
107
- export const SYMBOL_REF: Record<Symbols, WellKnownSymbols> = {
108
- [Symbols.AsyncIterator]: Symbol.asyncIterator,
109
- [Symbols.HasInstance]: Symbol.hasInstance,
110
- [Symbols.IsConcatSpreadable]: Symbol.isConcatSpreadable,
111
- [Symbols.Iterator]: Symbol.iterator,
112
- [Symbols.Match]: Symbol.match,
113
- [Symbols.MatchAll]: Symbol.matchAll,
114
- [Symbols.Replace]: Symbol.replace,
115
- [Symbols.Search]: Symbol.search,
116
- [Symbols.Species]: Symbol.species,
117
- [Symbols.Split]: Symbol.split,
118
- [Symbols.ToPrimitive]: Symbol.toPrimitive,
119
- [Symbols.ToStringTag]: Symbol.toStringTag,
120
- [Symbols.Unscopables]: Symbol.unscopables,
121
- };
122
-
123
- export const CONSTANT_STRING: Record<SerovalConstant, string> = {
124
- [SerovalConstant.True]: '!0',
125
- [SerovalConstant.False]: '!1',
126
- [SerovalConstant.Undefined]: 'void 0',
127
- [SerovalConstant.Null]: 'null',
128
- [SerovalConstant.NegZero]: '-0',
129
- [SerovalConstant.Inf]: '1/0',
130
- [SerovalConstant.NegInf]: '-1/0',
131
- [SerovalConstant.Nan]: '0/0',
132
- };
133
-
134
- export const CONSTANT_VAL: Record<SerovalConstant, unknown> = {
135
- [SerovalConstant.True]: true,
136
- [SerovalConstant.False]: false,
137
- [SerovalConstant.Undefined]: undefined,
138
- [SerovalConstant.Null]: null,
139
- [SerovalConstant.NegZero]: -0,
140
- [SerovalConstant.Inf]: Number.POSITIVE_INFINITY,
141
- [SerovalConstant.NegInf]: Number.NEGATIVE_INFINITY,
142
- [SerovalConstant.Nan]: Number.NaN,
143
- };
144
-
145
- export const enum ErrorConstructorTag {
146
- Error = 0,
147
- EvalError = 1,
148
- RangeError = 2,
149
- ReferenceError = 3,
150
- SyntaxError = 4,
151
- TypeError = 5,
152
- URIError = 6,
153
- }
154
-
155
- export const ERROR_CONSTRUCTOR_STRING: Record<ErrorConstructorTag, string> = {
156
- [ErrorConstructorTag.Error]: 'Error',
157
- [ErrorConstructorTag.EvalError]: 'EvalError',
158
- [ErrorConstructorTag.RangeError]: 'RangeError',
159
- [ErrorConstructorTag.ReferenceError]: 'ReferenceError',
160
- [ErrorConstructorTag.SyntaxError]: 'SyntaxError',
161
- [ErrorConstructorTag.TypeError]: 'TypeError',
162
- [ErrorConstructorTag.URIError]: 'URIError',
163
- };
164
-
165
- type ErrorConstructors =
166
- | ErrorConstructor
167
- | EvalErrorConstructor
168
- | RangeErrorConstructor
169
- | ReferenceErrorConstructor
170
- | SyntaxErrorConstructor
171
- | TypeErrorConstructor
172
- | URIErrorConstructor;
173
-
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
- };
184
-
185
- export const NIL = undefined;
@@ -1,456 +0,0 @@
1
- import {
2
- CONSTANT_VAL,
3
- ERROR_CONSTRUCTOR,
4
- SYMBOL_REF,
5
- SerovalNodeType,
6
- SerovalObjectFlags,
7
- } from '../constants';
8
- import {
9
- SerovalDeserializationError,
10
- SerovalMissingInstanceError,
11
- SerovalMissingPluginError,
12
- SerovalUnsupportedNodeError,
13
- } from '../errors';
14
- import type { Plugin, PluginAccessOptions, SerovalMode } from '../plugin';
15
- import { getReference } from '../reference';
16
- import type { Stream } from '../stream';
17
- import { createStream, streamToAsyncIterable } from '../stream';
18
- import { deserializeString } from '../string';
19
- import type {
20
- SerovalAggregateErrorNode,
21
- SerovalArrayBufferNode,
22
- SerovalArrayNode,
23
- SerovalAsyncIteratorFactoryInstanceNode,
24
- SerovalAsyncIteratorFactoryNode,
25
- SerovalBigIntTypedArrayNode,
26
- SerovalBoxedNode,
27
- SerovalDataViewNode,
28
- SerovalDateNode,
29
- SerovalErrorNode,
30
- SerovalIteratorFactoryInstanceNode,
31
- SerovalIteratorFactoryNode,
32
- SerovalMapNode,
33
- SerovalNode,
34
- SerovalNullConstructorNode,
35
- SerovalObjectNode,
36
- SerovalObjectRecordKey,
37
- SerovalObjectRecordNode,
38
- SerovalPluginNode,
39
- SerovalPromiseConstructorNode,
40
- SerovalPromiseNode,
41
- SerovalPromiseRejectNode,
42
- SerovalPromiseResolveNode,
43
- SerovalReferenceNode,
44
- SerovalRegExpNode,
45
- SerovalSetNode,
46
- SerovalStreamConstructorNode,
47
- SerovalStreamNextNode,
48
- SerovalStreamReturnNode,
49
- SerovalStreamThrowNode,
50
- SerovalTypedArrayNode,
51
- } from '../types';
52
- import assert from '../utils/assert';
53
- import type { Deferred } from '../utils/deferred';
54
- import { createDeferred } from '../utils/deferred';
55
- import type { Sequence } from '../utils/iterator-to-sequence';
56
- import { sequenceToIterator } from '../utils/iterator-to-sequence';
57
- import type {
58
- BigIntTypedArrayValue,
59
- TypedArrayValue,
60
- } from '../utils/typed-array';
61
- import { getTypedArrayConstructor } from '../utils/typed-array';
62
-
63
- function applyObjectFlag(obj: unknown, flag: SerovalObjectFlags): unknown {
64
- switch (flag) {
65
- case SerovalObjectFlags.Frozen:
66
- return Object.freeze(obj);
67
- case SerovalObjectFlags.NonExtensible:
68
- return Object.preventExtensions(obj);
69
- case SerovalObjectFlags.Sealed:
70
- return Object.seal(obj);
71
- default:
72
- return obj;
73
- }
74
- }
75
-
76
- type AssignableValue = AggregateError | Error | Iterable<unknown>;
77
- type AssignableNode = SerovalAggregateErrorNode | SerovalErrorNode;
78
-
79
- export interface BaseDeserializerOptions extends PluginAccessOptions {
80
- refs?: Map<number, unknown>;
81
- }
82
-
83
- export default abstract class BaseDeserializerContext
84
- implements PluginAccessOptions
85
- {
86
- abstract readonly mode: SerovalMode;
87
-
88
- /**
89
- * Mapping ids to values
90
- * @private
91
- */
92
- refs: Map<number, unknown>;
93
-
94
- plugins?: Plugin<any, any>[] | undefined;
95
-
96
- constructor(options: BaseDeserializerOptions) {
97
- this.plugins = options.plugins;
98
- this.refs = options.refs || new Map<number, unknown>();
99
- }
100
-
101
- protected abstract assignIndexedValue<T>(id: number, value: T): T;
102
-
103
- private deserializeReference(node: SerovalReferenceNode): unknown {
104
- return this.assignIndexedValue(
105
- node.i,
106
- getReference(deserializeString(node.s)),
107
- );
108
- }
109
-
110
- private deserializeArray(node: SerovalArrayNode): unknown[] {
111
- const len = node.l;
112
- const result: unknown[] = this.assignIndexedValue(
113
- node.i,
114
- new Array<unknown>(len),
115
- );
116
- let item: SerovalNode | undefined;
117
- for (let i = 0; i < len; i++) {
118
- item = node.a[i];
119
- if (item) {
120
- result[i] = this.deserialize(item);
121
- }
122
- }
123
- applyObjectFlag(result, node.o);
124
- return result;
125
- }
126
-
127
- private deserializeProperties(
128
- node: SerovalObjectRecordNode,
129
- result: Record<string | symbol, unknown>,
130
- ): Record<string | symbol, unknown> {
131
- const len = node.s;
132
- if (len) {
133
- const keys = node.k;
134
- const vals = node.v;
135
- for (let i = 0, key: SerovalObjectRecordKey; i < len; i++) {
136
- key = keys[i];
137
- if (typeof key === 'string') {
138
- result[deserializeString(key)] = this.deserialize(vals[i]);
139
- } else {
140
- result[this.deserialize(key) as symbol] = this.deserialize(vals[i]);
141
- }
142
- }
143
- }
144
- return result;
145
- }
146
-
147
- private deserializeObject(
148
- node: SerovalObjectNode | SerovalNullConstructorNode,
149
- ): Record<string, unknown> {
150
- const result = this.assignIndexedValue(
151
- node.i,
152
- (node.t === SerovalNodeType.Object ? {} : Object.create(null)) as Record<
153
- string,
154
- unknown
155
- >,
156
- );
157
- this.deserializeProperties(node.p, result);
158
- applyObjectFlag(result, node.o);
159
- return result;
160
- }
161
-
162
- private deserializeDate(node: SerovalDateNode): Date {
163
- return this.assignIndexedValue(node.i, new Date(node.s));
164
- }
165
-
166
- private deserializeRegExp(node: SerovalRegExpNode): RegExp {
167
- return this.assignIndexedValue(
168
- node.i,
169
- new RegExp(deserializeString(node.c), node.m),
170
- );
171
- }
172
-
173
- private deserializeSet(node: SerovalSetNode): Set<unknown> {
174
- const result = this.assignIndexedValue(node.i, new Set<unknown>());
175
- const items = node.a;
176
- for (let i = 0, len = node.l; i < len; i++) {
177
- result.add(this.deserialize(items[i]));
178
- }
179
- return result;
180
- }
181
-
182
- private deserializeMap(node: SerovalMapNode): Map<unknown, unknown> {
183
- const result = this.assignIndexedValue(node.i, new Map<unknown, unknown>());
184
- const keys = node.e.k;
185
- const vals = node.e.v;
186
- for (let i = 0, len = node.e.s; i < len; i++) {
187
- result.set(this.deserialize(keys[i]), this.deserialize(vals[i]));
188
- }
189
- return result;
190
- }
191
-
192
- private deserializeArrayBuffer(node: SerovalArrayBufferNode): ArrayBuffer {
193
- const bytes = new Uint8Array(node.s);
194
- const result = this.assignIndexedValue(node.i, bytes.buffer);
195
- return result;
196
- }
197
-
198
- private deserializeTypedArray(
199
- node: SerovalTypedArrayNode | SerovalBigIntTypedArrayNode,
200
- ): TypedArrayValue | BigIntTypedArrayValue {
201
- const construct = getTypedArrayConstructor(node.c) as Int8ArrayConstructor;
202
- const source = this.deserialize(node.f) as ArrayBuffer;
203
- const result = this.assignIndexedValue(
204
- node.i,
205
- new construct(source, node.b, node.l),
206
- );
207
- return result;
208
- }
209
-
210
- private deserializeDataView(node: SerovalDataViewNode): DataView {
211
- const source = this.deserialize(node.f) as ArrayBuffer;
212
- const result = this.assignIndexedValue(
213
- node.i,
214
- new DataView(source, node.b, node.l),
215
- );
216
- return result;
217
- }
218
-
219
- private deserializeDictionary<T extends AssignableValue>(
220
- node: AssignableNode,
221
- result: T,
222
- ): T {
223
- if (node.p) {
224
- const fields = this.deserializeProperties(node.p, {});
225
- Object.assign(result, fields);
226
- }
227
- return result;
228
- }
229
-
230
- private deserializeAggregateError(
231
- node: SerovalAggregateErrorNode,
232
- ): AggregateError {
233
- // Serialize the required arguments
234
- const result = this.assignIndexedValue(
235
- node.i,
236
- new AggregateError([], deserializeString(node.m)),
237
- );
238
- // `AggregateError` might've been extended
239
- // either through class or custom properties
240
- // Make sure to assign extra properties
241
- return this.deserializeDictionary(node, result);
242
- }
243
-
244
- private deserializeError(node: SerovalErrorNode): Error {
245
- const construct = ERROR_CONSTRUCTOR[node.s];
246
- const result = this.assignIndexedValue(
247
- node.i,
248
- new construct(deserializeString(node.m)),
249
- );
250
- return this.deserializeDictionary(node, result);
251
- }
252
-
253
- private deserializePromise(node: SerovalPromiseNode): Promise<unknown> {
254
- const deferred = createDeferred();
255
- const result = this.assignIndexedValue(node.i, deferred);
256
- const deserialized = this.deserialize(node.f);
257
- if (node.s) {
258
- deferred.resolve(deserialized);
259
- } else {
260
- deferred.reject(deserialized);
261
- }
262
- return result.promise;
263
- }
264
-
265
- private deserializeBoxed(node: SerovalBoxedNode): unknown {
266
- return this.assignIndexedValue(node.i, Object(this.deserialize(node.f)));
267
- }
268
-
269
- private deserializePlugin(node: SerovalPluginNode): unknown {
270
- const currentPlugins = this.plugins;
271
- if (currentPlugins) {
272
- const tag = deserializeString(node.c);
273
- for (let i = 0, len = currentPlugins.length; i < len; i++) {
274
- const plugin = currentPlugins[i];
275
- if (plugin.tag === tag) {
276
- return this.assignIndexedValue(
277
- node.i,
278
- plugin.deserialize(node.s, this, {
279
- id: node.i,
280
- }),
281
- );
282
- }
283
- }
284
- }
285
- throw new SerovalMissingPluginError(node.c);
286
- }
287
-
288
- private deserializePromiseConstructor(
289
- node: SerovalPromiseConstructorNode,
290
- ): unknown {
291
- return this.assignIndexedValue(
292
- node.i,
293
- this.assignIndexedValue(node.s, createDeferred()).promise,
294
- );
295
- }
296
-
297
- private deserializePromiseResolve(node: SerovalPromiseResolveNode): unknown {
298
- const deferred = this.refs.get(node.i) as Deferred | undefined;
299
- assert(deferred, new SerovalMissingInstanceError('Promise'));
300
- deferred.resolve(this.deserialize(node.a[1]));
301
- return undefined;
302
- }
303
-
304
- private deserializePromiseReject(node: SerovalPromiseRejectNode): unknown {
305
- const deferred = this.refs.get(node.i) as Deferred | undefined;
306
- assert(deferred, new SerovalMissingInstanceError('Promise'));
307
- deferred.reject(this.deserialize(node.a[1]));
308
- return undefined;
309
- }
310
-
311
- private deserializeIteratorFactoryInstance(
312
- node: SerovalIteratorFactoryInstanceNode,
313
- ): unknown {
314
- this.deserialize(node.a[0]);
315
- const source = this.deserialize(node.a[1]);
316
- return sequenceToIterator(source as Sequence);
317
- }
318
-
319
- private deserializeAsyncIteratorFactoryInstance(
320
- node: SerovalAsyncIteratorFactoryInstanceNode,
321
- ): unknown {
322
- this.deserialize(node.a[0]);
323
- const source = this.deserialize(node.a[1]);
324
- return streamToAsyncIterable(source as Stream<any>);
325
- }
326
-
327
- private deserializeStreamConstructor(
328
- node: SerovalStreamConstructorNode,
329
- ): unknown {
330
- const result = this.assignIndexedValue(node.i, createStream());
331
- const len = node.a.length;
332
- if (len) {
333
- for (let i = 0; i < len; i++) {
334
- this.deserialize(node.a[i]);
335
- }
336
- }
337
- return result;
338
- }
339
-
340
- private deserializeStreamNext(node: SerovalStreamNextNode): unknown {
341
- const deferred = this.refs.get(node.i) as Stream<unknown> | undefined;
342
- assert(deferred, new SerovalMissingInstanceError('Stream'));
343
- deferred.next(this.deserialize(node.f));
344
- return undefined;
345
- }
346
-
347
- private deserializeStreamThrow(node: SerovalStreamThrowNode): unknown {
348
- const deferred = this.refs.get(node.i) as Stream<unknown> | undefined;
349
- assert(deferred, new SerovalMissingInstanceError('Stream'));
350
- deferred.throw(this.deserialize(node.f));
351
- return undefined;
352
- }
353
-
354
- private deserializeStreamReturn(node: SerovalStreamReturnNode): unknown {
355
- const deferred = this.refs.get(node.i) as Stream<unknown> | undefined;
356
- assert(deferred, new SerovalMissingInstanceError('Stream'));
357
- deferred.return(this.deserialize(node.f));
358
- return undefined;
359
- }
360
-
361
- private deserializeIteratorFactory(
362
- node: SerovalIteratorFactoryNode,
363
- ): unknown {
364
- this.deserialize(node.f);
365
- return undefined;
366
- }
367
-
368
- private deserializeAsyncIteratorFactory(
369
- node: SerovalAsyncIteratorFactoryNode,
370
- ): unknown {
371
- this.deserialize(node.a[1]);
372
- return undefined;
373
- }
374
-
375
- deserializeTop(node: SerovalNode): unknown {
376
- try {
377
- return this.deserialize(node);
378
- } catch (error) {
379
- throw new SerovalDeserializationError(error);
380
- }
381
- }
382
-
383
- deserialize(node: SerovalNode): unknown {
384
- switch (node.t) {
385
- case SerovalNodeType.Constant:
386
- return CONSTANT_VAL[node.s];
387
- case SerovalNodeType.Number:
388
- return node.s;
389
- case SerovalNodeType.String:
390
- return deserializeString(node.s);
391
- case SerovalNodeType.BigInt:
392
- return BigInt(node.s);
393
- case SerovalNodeType.IndexedValue:
394
- return this.refs.get(node.i);
395
- case SerovalNodeType.Reference:
396
- return this.deserializeReference(node);
397
- case SerovalNodeType.Array:
398
- return this.deserializeArray(node);
399
- case SerovalNodeType.Object:
400
- case SerovalNodeType.NullConstructor:
401
- return this.deserializeObject(node);
402
- case SerovalNodeType.Date:
403
- return this.deserializeDate(node);
404
- case SerovalNodeType.RegExp:
405
- return this.deserializeRegExp(node);
406
- case SerovalNodeType.Set:
407
- return this.deserializeSet(node);
408
- case SerovalNodeType.Map:
409
- return this.deserializeMap(node);
410
- case SerovalNodeType.ArrayBuffer:
411
- return this.deserializeArrayBuffer(node);
412
- case SerovalNodeType.BigIntTypedArray:
413
- case SerovalNodeType.TypedArray:
414
- return this.deserializeTypedArray(node);
415
- case SerovalNodeType.DataView:
416
- return this.deserializeDataView(node);
417
- case SerovalNodeType.AggregateError:
418
- return this.deserializeAggregateError(node);
419
- case SerovalNodeType.Error:
420
- return this.deserializeError(node);
421
- case SerovalNodeType.Promise:
422
- return this.deserializePromise(node);
423
- case SerovalNodeType.WKSymbol:
424
- return SYMBOL_REF[node.s];
425
- case SerovalNodeType.Boxed:
426
- return this.deserializeBoxed(node);
427
- case SerovalNodeType.Plugin:
428
- return this.deserializePlugin(node);
429
- case SerovalNodeType.PromiseConstructor:
430
- return this.deserializePromiseConstructor(node);
431
- case SerovalNodeType.PromiseSuccess:
432
- return this.deserializePromiseResolve(node);
433
- case SerovalNodeType.PromiseFailure:
434
- return this.deserializePromiseReject(node);
435
- case SerovalNodeType.IteratorFactoryInstance:
436
- return this.deserializeIteratorFactoryInstance(node);
437
- case SerovalNodeType.AsyncIteratorFactoryInstance:
438
- return this.deserializeAsyncIteratorFactoryInstance(node);
439
- case SerovalNodeType.StreamConstructor:
440
- return this.deserializeStreamConstructor(node);
441
- case SerovalNodeType.StreamNext:
442
- return this.deserializeStreamNext(node);
443
- case SerovalNodeType.StreamThrow:
444
- return this.deserializeStreamThrow(node);
445
- case SerovalNodeType.StreamReturn:
446
- return this.deserializeStreamReturn(node);
447
- case SerovalNodeType.IteratorFactory:
448
- return this.deserializeIteratorFactory(node);
449
- case SerovalNodeType.AsyncIteratorFactory:
450
- return this.deserializeAsyncIteratorFactory(node);
451
- // case SerovalNodeType.SpecialReference:
452
- default:
453
- throw new SerovalUnsupportedNodeError(node);
454
- }
455
- }
456
- }