seroval 0.15.1 → 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.
- package/README.md +3 -3
- package/dist/cjs/development/index.cjs +1221 -1867
- package/dist/cjs/development/index.cjs.map +3 -3
- package/dist/cjs/production/index.cjs +3 -3
- package/dist/esm/development/index.mjs +1222 -1868
- package/dist/esm/development/index.mjs.map +3 -3
- package/dist/esm/production/index.mjs +3 -3
- package/dist/types/core/Serializer.d.ts +2 -1
- package/dist/types/core/Serializer.d.ts.map +1 -1
- package/dist/types/core/UnsupportedTypeError.d.ts.map +1 -1
- package/dist/types/core/base-primitives.d.ts +6 -2
- package/dist/types/core/base-primitives.d.ts.map +1 -1
- package/dist/types/core/compat.d.ts +5 -13
- package/dist/types/core/compat.d.ts.map +1 -1
- package/dist/types/core/constants.d.ts +17 -29
- package/dist/types/core/constants.d.ts.map +1 -1
- package/dist/types/core/context/deserializer.d.ts +6 -16
- package/dist/types/core/context/deserializer.d.ts.map +1 -1
- package/dist/types/core/context/parser/async.d.ts +2 -11
- package/dist/types/core/context/parser/async.d.ts.map +1 -1
- package/dist/types/core/context/parser/stream.d.ts +10 -10
- package/dist/types/core/context/parser/stream.d.ts.map +1 -1
- package/dist/types/core/context/parser/sync.d.ts +5 -7
- package/dist/types/core/context/parser/sync.d.ts.map +1 -1
- package/dist/types/core/context/parser.d.ts +19 -4
- package/dist/types/core/context/parser.d.ts.map +1 -1
- package/dist/types/core/context/serializer.d.ts +11 -25
- package/dist/types/core/context/serializer.d.ts.map +1 -1
- package/dist/types/core/cross/async.d.ts.map +1 -1
- package/dist/types/core/cross/deserializer.d.ts.map +1 -1
- package/dist/types/core/cross/index.d.ts.map +1 -1
- package/dist/types/core/cross/parser.d.ts.map +1 -1
- package/dist/types/core/cross/serializer.d.ts +1 -1
- package/dist/types/core/cross/serializer.d.ts.map +1 -1
- package/dist/types/core/cross/stream.d.ts.map +1 -1
- package/dist/types/core/cross/sync.d.ts.map +1 -1
- package/dist/types/core/keys.d.ts.map +1 -1
- package/dist/types/core/literals.d.ts.map +1 -1
- package/dist/types/core/plugin.d.ts +21 -0
- package/dist/types/core/plugin.d.ts.map +1 -1
- package/dist/types/core/reference.d.ts.map +1 -1
- package/dist/types/core/special-reference.d.ts +4 -9
- package/dist/types/core/special-reference.d.ts.map +1 -1
- package/dist/types/core/stream.d.ts +18 -0
- package/dist/types/core/stream.d.ts.map +1 -0
- package/dist/types/core/string.d.ts.map +1 -1
- package/dist/types/core/tree/async.d.ts.map +1 -1
- package/dist/types/core/tree/deserializer.d.ts.map +1 -1
- package/dist/types/core/tree/index.d.ts +1 -1
- package/dist/types/core/tree/index.d.ts.map +1 -1
- package/dist/types/core/tree/serializer.d.ts +3 -11
- package/dist/types/core/tree/serializer.d.ts.map +1 -1
- package/dist/types/core/types.d.ts +28 -122
- package/dist/types/core/types.d.ts.map +1 -1
- package/dist/types/core/utils/deferred.d.ts +0 -7
- package/dist/types/core/utils/deferred.d.ts.map +1 -1
- package/dist/types/core/utils/error.d.ts +2 -1
- package/dist/types/core/utils/error.d.ts.map +1 -1
- package/dist/types/core/utils/get-identifier.d.ts.map +1 -1
- package/dist/types/core/utils/is-valid-identifier.d.ts.map +1 -1
- package/dist/types/core/utils/iterator-to-sequence.d.ts +0 -12
- package/dist/types/core/utils/iterator-to-sequence.d.ts.map +1 -1
- package/dist/types/core/utils/typed-array.d.ts +2 -0
- package/dist/types/core/utils/typed-array.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -3
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/core/Serializer.ts +44 -28
- package/src/core/UnsupportedTypeError.ts +2 -3
- package/src/core/base-primitives.ts +124 -38
- package/src/core/compat.ts +5 -14
- package/src/core/constants.ts +28 -39
- package/src/core/context/deserializer.ts +122 -308
- package/src/core/context/parser/async.ts +163 -375
- package/src/core/context/parser/stream.ts +109 -367
- package/src/core/context/parser/sync.ts +139 -266
- package/src/core/context/parser.ts +93 -68
- package/src/core/context/serializer.ts +370 -439
- package/src/core/cross/async.ts +1 -1
- package/src/core/cross/deserializer.ts +1 -4
- package/src/core/cross/index.ts +26 -20
- package/src/core/cross/parser.ts +1 -1
- package/src/core/cross/serializer.ts +30 -20
- package/src/core/cross/stream.ts +1 -1
- package/src/core/cross/sync.ts +1 -1
- package/src/core/keys.ts +3 -1
- package/src/core/literals.ts +22 -8
- package/src/core/plugin.ts +48 -10
- package/src/core/reference.ts +4 -5
- package/src/core/special-reference.ts +5 -15
- package/src/core/stream.ts +205 -0
- package/src/core/string.ts +53 -22
- package/src/core/tree/async.ts +1 -1
- package/src/core/tree/deserializer.ts +4 -9
- package/src/core/tree/index.ts +15 -10
- package/src/core/tree/serializer.ts +6 -50
- package/src/core/types.ts +39 -179
- package/src/core/utils/deferred.ts +0 -27
- package/src/core/utils/error.ts +26 -15
- package/src/core/utils/get-identifier.ts +5 -4
- package/src/core/utils/is-valid-identifier.ts +6 -5
- package/src/core/utils/iterator-to-sequence.ts +0 -174
- package/src/core/utils/typed-array.ts +35 -11
- package/src/index.ts +3 -12
- package/dist/types/core/utils/constructors.d.ts +0 -5
- package/dist/types/core/utils/constructors.d.ts.map +0 -1
- package/dist/types/core/web-api.d.ts +0 -8
- package/dist/types/core/web-api.d.ts.map +0 -1
- package/dist/types/types.d.ts +0 -21
- package/dist/types/types.d.ts.map +0 -1
- package/src/core/utils/constructors.ts +0 -49
- package/src/core/web-api.ts +0 -138
- package/src/example.ts +0 -25
- package/src/types.ts +0 -84
|
@@ -1,25 +1,18 @@
|
|
|
1
|
-
/* eslint-disable prefer-spread */
|
|
2
1
|
import { deserializeString } from '../string';
|
|
3
|
-
import type { BigIntTypedArrayValue, TypedArrayValue } from '../../types';
|
|
4
2
|
import { getReference } from '../reference';
|
|
5
3
|
import type {
|
|
6
4
|
SerovalAggregateErrorNode,
|
|
7
5
|
SerovalArrayBufferNode,
|
|
8
6
|
SerovalArrayNode,
|
|
9
7
|
SerovalAsyncIteratorFactoryInstanceNode,
|
|
8
|
+
SerovalAsyncIteratorFactoryNode,
|
|
10
9
|
SerovalBigIntTypedArrayNode,
|
|
11
|
-
SerovalBlobNode,
|
|
12
10
|
SerovalBoxedNode,
|
|
13
|
-
SerovalCustomEventNode,
|
|
14
|
-
SerovalDOMExceptionNode,
|
|
15
11
|
SerovalDataViewNode,
|
|
16
12
|
SerovalDateNode,
|
|
17
13
|
SerovalErrorNode,
|
|
18
|
-
SerovalEventNode,
|
|
19
|
-
SerovalFileNode,
|
|
20
|
-
SerovalFormDataNode,
|
|
21
|
-
SerovalHeadersNode,
|
|
22
14
|
SerovalIteratorFactoryInstanceNode,
|
|
15
|
+
SerovalIteratorFactoryNode,
|
|
23
16
|
SerovalMapNode,
|
|
24
17
|
SerovalNode,
|
|
25
18
|
SerovalNullConstructorNode,
|
|
@@ -31,19 +24,14 @@ import type {
|
|
|
31
24
|
SerovalPromiseNode,
|
|
32
25
|
SerovalPromiseRejectNode,
|
|
33
26
|
SerovalPromiseResolveNode,
|
|
34
|
-
SerovalReadableStreamCloseNode,
|
|
35
|
-
SerovalReadableStreamConstructorNode,
|
|
36
|
-
SerovalReadableStreamEnqueueNode,
|
|
37
|
-
SerovalReadableStreamErrorNode,
|
|
38
|
-
SerovalReadableStreamNode,
|
|
39
27
|
SerovalReferenceNode,
|
|
40
28
|
SerovalRegExpNode,
|
|
41
|
-
SerovalRequestNode,
|
|
42
|
-
SerovalResponseNode,
|
|
43
29
|
SerovalSetNode,
|
|
30
|
+
SerovalStreamConstructorNode,
|
|
31
|
+
SerovalStreamNextNode,
|
|
32
|
+
SerovalStreamReturnNode,
|
|
33
|
+
SerovalStreamThrowNode,
|
|
44
34
|
SerovalTypedArrayNode,
|
|
45
|
-
SerovalURLNode,
|
|
46
|
-
SerovalURLSearchParamsNode,
|
|
47
35
|
} from '../types';
|
|
48
36
|
import {
|
|
49
37
|
CONSTANT_VAL,
|
|
@@ -53,17 +41,18 @@ import {
|
|
|
53
41
|
SerovalObjectFlags,
|
|
54
42
|
} from '../constants';
|
|
55
43
|
import type { Plugin, PluginAccessOptions, SerovalMode } from '../plugin';
|
|
56
|
-
import type { Sequence
|
|
57
|
-
import {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
} from '../utils/iterator-to-sequence';
|
|
44
|
+
import type { Sequence } from '../utils/iterator-to-sequence';
|
|
45
|
+
import { sequenceToIterator } from '../utils/iterator-to-sequence';
|
|
46
|
+
import type {
|
|
47
|
+
BigIntTypedArrayValue,
|
|
48
|
+
TypedArrayValue,
|
|
49
|
+
} from '../utils/typed-array';
|
|
63
50
|
import { getTypedArrayConstructor } from '../utils/typed-array';
|
|
64
|
-
import type { Deferred
|
|
65
|
-
import { createDeferred
|
|
51
|
+
import type { Deferred } from '../utils/deferred';
|
|
52
|
+
import { createDeferred } from '../utils/deferred';
|
|
66
53
|
import assert from '../utils/assert';
|
|
54
|
+
import type { Stream } from '../stream';
|
|
55
|
+
import { createStream, streamToAsyncIterable } from '../stream';
|
|
67
56
|
|
|
68
57
|
function applyObjectFlag(obj: unknown, flag: SerovalObjectFlags): unknown {
|
|
69
58
|
switch (flag) {
|
|
@@ -78,14 +67,16 @@ function applyObjectFlag(obj: unknown, flag: SerovalObjectFlags): unknown {
|
|
|
78
67
|
}
|
|
79
68
|
}
|
|
80
69
|
|
|
81
|
-
type AssignableValue = AggregateError | Error | Iterable<unknown
|
|
70
|
+
type AssignableValue = AggregateError | Error | Iterable<unknown>;
|
|
82
71
|
type AssignableNode = SerovalAggregateErrorNode | SerovalErrorNode;
|
|
83
72
|
|
|
84
73
|
export interface BaseDeserializerOptions extends PluginAccessOptions {
|
|
85
74
|
refs?: Map<number, unknown>;
|
|
86
75
|
}
|
|
87
76
|
|
|
88
|
-
export default abstract class BaseDeserializerContext
|
|
77
|
+
export default abstract class BaseDeserializerContext
|
|
78
|
+
implements PluginAccessOptions
|
|
79
|
+
{
|
|
89
80
|
abstract readonly mode: SerovalMode;
|
|
90
81
|
|
|
91
82
|
/**
|
|
@@ -101,20 +92,16 @@ export default abstract class BaseDeserializerContext implements PluginAccessOpt
|
|
|
101
92
|
this.refs = options.refs || new Map<number, unknown>();
|
|
102
93
|
}
|
|
103
94
|
|
|
104
|
-
protected abstract assignIndexedValue<T>(
|
|
105
|
-
id: number,
|
|
106
|
-
value: T,
|
|
107
|
-
): T;
|
|
95
|
+
protected abstract assignIndexedValue<T>(id: number, value: T): T;
|
|
108
96
|
|
|
109
|
-
private deserializeReference(
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
97
|
+
private deserializeReference(node: SerovalReferenceNode): unknown {
|
|
98
|
+
return this.assignIndexedValue(
|
|
99
|
+
node.i,
|
|
100
|
+
getReference(deserializeString(node.s)),
|
|
101
|
+
);
|
|
113
102
|
}
|
|
114
103
|
|
|
115
|
-
private deserializeArray(
|
|
116
|
-
node: SerovalArrayNode,
|
|
117
|
-
): unknown[] {
|
|
104
|
+
private deserializeArray(node: SerovalArrayNode): unknown[] {
|
|
118
105
|
const len = node.l;
|
|
119
106
|
const result: unknown[] = this.assignIndexedValue(
|
|
120
107
|
node.i,
|
|
@@ -156,30 +143,28 @@ export default abstract class BaseDeserializerContext implements PluginAccessOpt
|
|
|
156
143
|
): Record<string, unknown> {
|
|
157
144
|
const result = this.assignIndexedValue(
|
|
158
145
|
node.i,
|
|
159
|
-
(node.t === SerovalNodeType.Object
|
|
160
|
-
|
|
161
|
-
|
|
146
|
+
(node.t === SerovalNodeType.Object ? {} : Object.create(null)) as Record<
|
|
147
|
+
string,
|
|
148
|
+
unknown
|
|
149
|
+
>,
|
|
162
150
|
);
|
|
163
151
|
this.deserializeProperties(node.p, result);
|
|
164
152
|
applyObjectFlag(result, node.o);
|
|
165
153
|
return result;
|
|
166
154
|
}
|
|
167
155
|
|
|
168
|
-
private deserializeDate(
|
|
169
|
-
node: SerovalDateNode,
|
|
170
|
-
): Date {
|
|
156
|
+
private deserializeDate(node: SerovalDateNode): Date {
|
|
171
157
|
return this.assignIndexedValue(node.i, new Date(node.s));
|
|
172
158
|
}
|
|
173
159
|
|
|
174
|
-
private deserializeRegExp(
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
160
|
+
private deserializeRegExp(node: SerovalRegExpNode): RegExp {
|
|
161
|
+
return this.assignIndexedValue(
|
|
162
|
+
node.i,
|
|
163
|
+
new RegExp(deserializeString(node.c), node.m),
|
|
164
|
+
);
|
|
178
165
|
}
|
|
179
166
|
|
|
180
|
-
private deserializeSet(
|
|
181
|
-
node: SerovalSetNode,
|
|
182
|
-
): Set<unknown> {
|
|
167
|
+
private deserializeSet(node: SerovalSetNode): Set<unknown> {
|
|
183
168
|
const result = this.assignIndexedValue(node.i, new Set<unknown>());
|
|
184
169
|
const items = node.a;
|
|
185
170
|
for (let i = 0, len = node.l; i < len; i++) {
|
|
@@ -188,27 +173,17 @@ export default abstract class BaseDeserializerContext implements PluginAccessOpt
|
|
|
188
173
|
return result;
|
|
189
174
|
}
|
|
190
175
|
|
|
191
|
-
private deserializeMap(
|
|
192
|
-
node
|
|
193
|
-
): Map<unknown, unknown> {
|
|
194
|
-
const result = this.assignIndexedValue(
|
|
195
|
-
node.i,
|
|
196
|
-
new Map<unknown, unknown>(),
|
|
197
|
-
);
|
|
176
|
+
private deserializeMap(node: SerovalMapNode): Map<unknown, unknown> {
|
|
177
|
+
const result = this.assignIndexedValue(node.i, new Map<unknown, unknown>());
|
|
198
178
|
const keys = node.e.k;
|
|
199
179
|
const vals = node.e.v;
|
|
200
180
|
for (let i = 0, len = node.e.s; i < len; i++) {
|
|
201
|
-
result.set(
|
|
202
|
-
this.deserialize(keys[i]),
|
|
203
|
-
this.deserialize(vals[i]),
|
|
204
|
-
);
|
|
181
|
+
result.set(this.deserialize(keys[i]), this.deserialize(vals[i]));
|
|
205
182
|
}
|
|
206
183
|
return result;
|
|
207
184
|
}
|
|
208
185
|
|
|
209
|
-
private deserializeArrayBuffer(
|
|
210
|
-
node: SerovalArrayBufferNode,
|
|
211
|
-
): ArrayBuffer {
|
|
186
|
+
private deserializeArrayBuffer(node: SerovalArrayBufferNode): ArrayBuffer {
|
|
212
187
|
const bytes = new Uint8Array(node.s);
|
|
213
188
|
const result = this.assignIndexedValue(node.i, bytes.buffer);
|
|
214
189
|
return result;
|
|
@@ -217,25 +192,21 @@ export default abstract class BaseDeserializerContext implements PluginAccessOpt
|
|
|
217
192
|
private deserializeTypedArray(
|
|
218
193
|
node: SerovalTypedArrayNode | SerovalBigIntTypedArrayNode,
|
|
219
194
|
): TypedArrayValue | BigIntTypedArrayValue {
|
|
220
|
-
const
|
|
195
|
+
const construct = getTypedArrayConstructor(node.c);
|
|
221
196
|
const source = this.deserialize(node.f) as ArrayBuffer;
|
|
222
|
-
const result = this.assignIndexedValue(
|
|
223
|
-
|
|
224
|
-
node.b,
|
|
225
|
-
|
|
226
|
-
));
|
|
197
|
+
const result = this.assignIndexedValue(
|
|
198
|
+
node.i,
|
|
199
|
+
new construct(source, node.b, node.l),
|
|
200
|
+
);
|
|
227
201
|
return result;
|
|
228
202
|
}
|
|
229
203
|
|
|
230
|
-
private deserializeDataView(
|
|
231
|
-
node: SerovalDataViewNode,
|
|
232
|
-
): DataView {
|
|
204
|
+
private deserializeDataView(node: SerovalDataViewNode): DataView {
|
|
233
205
|
const source = this.deserialize(node.f) as ArrayBuffer;
|
|
234
|
-
const result = this.assignIndexedValue(
|
|
235
|
-
|
|
236
|
-
node.b,
|
|
237
|
-
|
|
238
|
-
));
|
|
206
|
+
const result = this.assignIndexedValue(
|
|
207
|
+
node.i,
|
|
208
|
+
new DataView(source, node.b, node.l),
|
|
209
|
+
);
|
|
239
210
|
return result;
|
|
240
211
|
}
|
|
241
212
|
|
|
@@ -264,20 +235,16 @@ export default abstract class BaseDeserializerContext implements PluginAccessOpt
|
|
|
264
235
|
return this.deserializeDictionary(node, result);
|
|
265
236
|
}
|
|
266
237
|
|
|
267
|
-
private deserializeError(
|
|
268
|
-
node
|
|
269
|
-
): Error {
|
|
270
|
-
const ErrorConstructor = ERROR_CONSTRUCTOR[node.s];
|
|
238
|
+
private deserializeError(node: SerovalErrorNode): Error {
|
|
239
|
+
const construct = ERROR_CONSTRUCTOR[node.s];
|
|
271
240
|
const result = this.assignIndexedValue(
|
|
272
241
|
node.i,
|
|
273
|
-
new
|
|
242
|
+
new construct(deserializeString(node.m)),
|
|
274
243
|
);
|
|
275
244
|
return this.deserializeDictionary(node, result);
|
|
276
245
|
}
|
|
277
246
|
|
|
278
|
-
private
|
|
279
|
-
node: SerovalPromiseNode,
|
|
280
|
-
): Promise<unknown> {
|
|
247
|
+
private deserializePromise(node: SerovalPromiseNode): Promise<unknown> {
|
|
281
248
|
const deferred = createDeferred();
|
|
282
249
|
const result = this.assignIndexedValue(node.i, deferred);
|
|
283
250
|
const deserialized = this.deserialize(node.f);
|
|
@@ -289,143 +256,17 @@ export default abstract class BaseDeserializerContext implements PluginAccessOpt
|
|
|
289
256
|
return result.promise;
|
|
290
257
|
}
|
|
291
258
|
|
|
292
|
-
private
|
|
293
|
-
node
|
|
294
|
-
): URL {
|
|
295
|
-
return this.assignIndexedValue(node.i, new URL(deserializeString(node.s)));
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
private deserializeURLSearchParams(
|
|
299
|
-
node: SerovalURLSearchParamsNode,
|
|
300
|
-
): URLSearchParams {
|
|
301
|
-
return this.assignIndexedValue(node.i, new URLSearchParams(deserializeString(node.s)));
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
private deserializeBlob(
|
|
305
|
-
node: SerovalBlobNode,
|
|
306
|
-
): Blob {
|
|
307
|
-
const source = this.deserialize(node.f) as ArrayBuffer;
|
|
308
|
-
const result = this.assignIndexedValue(node.i, new Blob(
|
|
309
|
-
[source],
|
|
310
|
-
{ type: deserializeString(node.c) },
|
|
311
|
-
));
|
|
312
|
-
return result;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
private deserializeFile(
|
|
316
|
-
node: SerovalFileNode,
|
|
317
|
-
): File {
|
|
318
|
-
const source = this.deserialize(node.f) as ArrayBuffer;
|
|
319
|
-
const result = this.assignIndexedValue(node.i, new File(
|
|
320
|
-
[source],
|
|
321
|
-
deserializeString(node.m),
|
|
322
|
-
{ type: deserializeString(node.c), lastModified: node.b },
|
|
323
|
-
));
|
|
324
|
-
return result;
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
private deserializeHeaders(
|
|
328
|
-
node: SerovalHeadersNode,
|
|
329
|
-
): Headers {
|
|
330
|
-
const result = this.assignIndexedValue(node.i, new Headers());
|
|
331
|
-
const keys = node.e.k;
|
|
332
|
-
const vals = node.e.v;
|
|
333
|
-
for (let i = 0, len = node.e.s; i < len; i++) {
|
|
334
|
-
result.set(
|
|
335
|
-
deserializeString(keys[i]),
|
|
336
|
-
this.deserialize(vals[i]) as string,
|
|
337
|
-
);
|
|
338
|
-
}
|
|
339
|
-
return result;
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
private deserializeFormData(
|
|
343
|
-
node: SerovalFormDataNode,
|
|
344
|
-
): FormData {
|
|
345
|
-
const result = this.assignIndexedValue(node.i, new FormData());
|
|
346
|
-
const keys = node.e.k;
|
|
347
|
-
const vals = node.e.v;
|
|
348
|
-
for (let i = 0, len = node.e.s; i < len; i++) {
|
|
349
|
-
result.set(
|
|
350
|
-
deserializeString(keys[i]),
|
|
351
|
-
this.deserialize(vals[i]) as FormDataEntryValue,
|
|
352
|
-
);
|
|
353
|
-
}
|
|
354
|
-
return result;
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
private deserializeBoxed(
|
|
358
|
-
node: SerovalBoxedNode,
|
|
359
|
-
): unknown {
|
|
360
|
-
return this.assignIndexedValue(
|
|
361
|
-
node.i,
|
|
362
|
-
Object(this.deserialize(node.f)),
|
|
363
|
-
);
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
private deserializeRequest(
|
|
367
|
-
node: SerovalRequestNode,
|
|
368
|
-
): Request {
|
|
369
|
-
return this.assignIndexedValue(
|
|
370
|
-
node.i,
|
|
371
|
-
new Request(deserializeString(node.s), this.deserialize(node.f) as RequestInit),
|
|
372
|
-
);
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
private deserializeResponse(
|
|
376
|
-
node: SerovalResponseNode,
|
|
377
|
-
): Response {
|
|
378
|
-
return this.assignIndexedValue(
|
|
379
|
-
node.i,
|
|
380
|
-
new Response(
|
|
381
|
-
this.deserialize(node.a[0]) as BodyInit,
|
|
382
|
-
this.deserialize(node.a[1]) as RequestInit,
|
|
383
|
-
),
|
|
384
|
-
);
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
private deserializeEvent(
|
|
388
|
-
node: SerovalEventNode,
|
|
389
|
-
): Event {
|
|
390
|
-
return this.assignIndexedValue(
|
|
391
|
-
node.i,
|
|
392
|
-
new Event(
|
|
393
|
-
deserializeString(node.s),
|
|
394
|
-
this.deserialize(node.f) as EventInit,
|
|
395
|
-
),
|
|
396
|
-
);
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
private deserializeCustomEvent(
|
|
400
|
-
node: SerovalCustomEventNode,
|
|
401
|
-
): CustomEvent {
|
|
402
|
-
return this.assignIndexedValue(
|
|
403
|
-
node.i,
|
|
404
|
-
new CustomEvent(
|
|
405
|
-
deserializeString(node.s),
|
|
406
|
-
this.deserialize(node.f) as CustomEventInit,
|
|
407
|
-
),
|
|
408
|
-
);
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
private deserializeDOMException(
|
|
412
|
-
node: SerovalDOMExceptionNode,
|
|
413
|
-
): DOMException {
|
|
414
|
-
return this.assignIndexedValue(
|
|
415
|
-
node.i,
|
|
416
|
-
new DOMException(
|
|
417
|
-
deserializeString(node.s),
|
|
418
|
-
deserializeString(node.c),
|
|
419
|
-
),
|
|
420
|
-
);
|
|
259
|
+
private deserializeBoxed(node: SerovalBoxedNode): unknown {
|
|
260
|
+
return this.assignIndexedValue(node.i, Object(this.deserialize(node.f)));
|
|
421
261
|
}
|
|
422
262
|
|
|
423
263
|
private deserializePlugin(node: SerovalPluginNode): unknown {
|
|
424
264
|
const currentPlugins = this.plugins;
|
|
425
265
|
if (currentPlugins) {
|
|
266
|
+
const tag = deserializeString(node.c);
|
|
426
267
|
for (let i = 0, len = currentPlugins.length; i < len; i++) {
|
|
427
268
|
const plugin = currentPlugins[i];
|
|
428
|
-
if (plugin.tag ===
|
|
269
|
+
if (plugin.tag === tag) {
|
|
429
270
|
return this.assignIndexedValue(
|
|
430
271
|
node.i,
|
|
431
272
|
plugin.deserialize(node.s, this, {
|
|
@@ -438,93 +279,88 @@ export default abstract class BaseDeserializerContext implements PluginAccessOpt
|
|
|
438
279
|
throw new Error('Missing plugin for tag "' + node.c + '".');
|
|
439
280
|
}
|
|
440
281
|
|
|
441
|
-
private deserializePromiseConstructor(
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
).promise;
|
|
282
|
+
private deserializePromiseConstructor(
|
|
283
|
+
node: SerovalPromiseConstructorNode,
|
|
284
|
+
): unknown {
|
|
285
|
+
return this.assignIndexedValue(node.i, createDeferred()).promise;
|
|
446
286
|
}
|
|
447
287
|
|
|
448
288
|
private deserializePromiseResolve(node: SerovalPromiseResolveNode): unknown {
|
|
449
289
|
const deferred = this.refs.get(node.i) as Deferred | undefined;
|
|
450
290
|
assert(deferred, new Error('Missing Promise instance.'));
|
|
451
|
-
deferred.resolve(
|
|
452
|
-
this.deserialize(node.a[1]),
|
|
453
|
-
);
|
|
291
|
+
deferred.resolve(this.deserialize(node.a[1]));
|
|
454
292
|
return undefined;
|
|
455
293
|
}
|
|
456
294
|
|
|
457
295
|
private deserializePromiseReject(node: SerovalPromiseRejectNode): unknown {
|
|
458
296
|
const deferred = this.refs.get(node.i) as Deferred | undefined;
|
|
459
297
|
assert(deferred, new Error('Missing Promise instance.'));
|
|
460
|
-
deferred.reject(
|
|
461
|
-
this.deserialize(node.a[1]),
|
|
462
|
-
);
|
|
298
|
+
deferred.reject(this.deserialize(node.a[1]));
|
|
463
299
|
return undefined;
|
|
464
300
|
}
|
|
465
301
|
|
|
466
|
-
private
|
|
467
|
-
node:
|
|
302
|
+
private deserializeIteratorFactoryInstance(
|
|
303
|
+
node: SerovalIteratorFactoryInstanceNode,
|
|
468
304
|
): unknown {
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
).stream;
|
|
305
|
+
this.deserialize(node.a[0]);
|
|
306
|
+
const source = this.deserialize(node.a[1]);
|
|
307
|
+
return sequenceToIterator(source as Sequence);
|
|
473
308
|
}
|
|
474
309
|
|
|
475
|
-
private
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
);
|
|
481
|
-
return undefined;
|
|
310
|
+
private deserializeAsyncIteratorFactoryInstance(
|
|
311
|
+
node: SerovalAsyncIteratorFactoryInstanceNode,
|
|
312
|
+
): unknown {
|
|
313
|
+
this.deserialize(node.a[0]);
|
|
314
|
+
const source = this.deserialize(node.a[1]);
|
|
315
|
+
return streamToAsyncIterable(source as Stream<any>);
|
|
482
316
|
}
|
|
483
317
|
|
|
484
|
-
private
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
)
|
|
318
|
+
private deserializeStreamConstructor(
|
|
319
|
+
node: SerovalStreamConstructorNode,
|
|
320
|
+
): unknown {
|
|
321
|
+
const result = this.assignIndexedValue(node.i, createStream());
|
|
322
|
+
const len = node.a.length;
|
|
323
|
+
if (len) {
|
|
324
|
+
for (let i = 0; i < len; i++) {
|
|
325
|
+
this.deserialize(node.a[i]);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
return result;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
private deserializeStreamNext(node: SerovalStreamNextNode): unknown {
|
|
332
|
+
const deferred = this.refs.get(node.i) as Stream<unknown> | undefined;
|
|
333
|
+
assert(deferred, new Error('Missing Stream instance.'));
|
|
334
|
+
deferred.next(this.deserialize(node.f));
|
|
490
335
|
return undefined;
|
|
491
336
|
}
|
|
492
337
|
|
|
493
|
-
private
|
|
494
|
-
const deferred = this.refs.get(node.i) as
|
|
495
|
-
assert(deferred, new Error('Missing
|
|
496
|
-
deferred.
|
|
338
|
+
private deserializeStreamThrow(node: SerovalStreamThrowNode): unknown {
|
|
339
|
+
const deferred = this.refs.get(node.i) as Stream<unknown> | undefined;
|
|
340
|
+
assert(deferred, new Error('Missing Stream instance.'));
|
|
341
|
+
deferred.throw(this.deserialize(node.f));
|
|
497
342
|
return undefined;
|
|
498
343
|
}
|
|
499
344
|
|
|
500
|
-
private
|
|
501
|
-
node
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
return
|
|
345
|
+
private deserializeStreamReturn(node: SerovalStreamReturnNode): unknown {
|
|
346
|
+
const deferred = this.refs.get(node.i) as Stream<unknown> | undefined;
|
|
347
|
+
assert(deferred, new Error('Missing Stream instance.'));
|
|
348
|
+
deferred.return(this.deserialize(node.f));
|
|
349
|
+
return undefined;
|
|
505
350
|
}
|
|
506
351
|
|
|
507
|
-
private
|
|
508
|
-
node:
|
|
352
|
+
private deserializeIteratorFactory(
|
|
353
|
+
node: SerovalIteratorFactoryNode,
|
|
509
354
|
): unknown {
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
return readableStreamToAsyncIterator(
|
|
513
|
-
source as ReadableStream<SerializedAsyncIteratorResult<unknown>>,
|
|
514
|
-
);
|
|
515
|
-
}
|
|
516
|
-
return sequenceToAsyncIterator(source as Sequence);
|
|
355
|
+
this.deserialize(node.f);
|
|
356
|
+
return undefined;
|
|
517
357
|
}
|
|
518
358
|
|
|
519
|
-
private
|
|
520
|
-
node:
|
|
359
|
+
private deserializeAsyncIteratorFactory(
|
|
360
|
+
node: SerovalAsyncIteratorFactoryNode,
|
|
521
361
|
): unknown {
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
sequenceToReadableStream(
|
|
525
|
-
this.deserialize(node.a[1]) as Sequence,
|
|
526
|
-
),
|
|
527
|
-
);
|
|
362
|
+
this.deserialize(node.a[1]);
|
|
363
|
+
return undefined;
|
|
528
364
|
}
|
|
529
365
|
|
|
530
366
|
deserialize(node: SerovalNode): unknown {
|
|
@@ -569,30 +405,8 @@ export default abstract class BaseDeserializerContext implements PluginAccessOpt
|
|
|
569
405
|
return this.deserializePromise(node);
|
|
570
406
|
case SerovalNodeType.WKSymbol:
|
|
571
407
|
return SYMBOL_REF[node.s];
|
|
572
|
-
case SerovalNodeType.URL:
|
|
573
|
-
return this.deserializeURL(node);
|
|
574
|
-
case SerovalNodeType.URLSearchParams:
|
|
575
|
-
return this.deserializeURLSearchParams(node);
|
|
576
|
-
case SerovalNodeType.Blob:
|
|
577
|
-
return this.deserializeBlob(node);
|
|
578
|
-
case SerovalNodeType.File:
|
|
579
|
-
return this.deserializeFile(node);
|
|
580
|
-
case SerovalNodeType.Headers:
|
|
581
|
-
return this.deserializeHeaders(node);
|
|
582
|
-
case SerovalNodeType.FormData:
|
|
583
|
-
return this.deserializeFormData(node);
|
|
584
408
|
case SerovalNodeType.Boxed:
|
|
585
409
|
return this.deserializeBoxed(node);
|
|
586
|
-
case SerovalNodeType.Request:
|
|
587
|
-
return this.deserializeRequest(node);
|
|
588
|
-
case SerovalNodeType.Response:
|
|
589
|
-
return this.deserializeResponse(node);
|
|
590
|
-
case SerovalNodeType.Event:
|
|
591
|
-
return this.deserializeEvent(node);
|
|
592
|
-
case SerovalNodeType.CustomEvent:
|
|
593
|
-
return this.deserializeCustomEvent(node);
|
|
594
|
-
case SerovalNodeType.DOMException:
|
|
595
|
-
return this.deserializeDOMException(node);
|
|
596
410
|
case SerovalNodeType.Plugin:
|
|
597
411
|
return this.deserializePlugin(node);
|
|
598
412
|
case SerovalNodeType.PromiseConstructor:
|
|
@@ -601,23 +415,23 @@ export default abstract class BaseDeserializerContext implements PluginAccessOpt
|
|
|
601
415
|
return this.deserializePromiseResolve(node);
|
|
602
416
|
case SerovalNodeType.PromiseReject:
|
|
603
417
|
return this.deserializePromiseReject(node);
|
|
604
|
-
case SerovalNodeType.ReadableStreamConstructor:
|
|
605
|
-
return this.deserializeReadableStreamConstructor(node);
|
|
606
|
-
case SerovalNodeType.ReadableStreamEnqueue:
|
|
607
|
-
return this.deserializeReadableStreamEnqueue(node);
|
|
608
|
-
case SerovalNodeType.ReadableStreamError:
|
|
609
|
-
return this.deserializeReadableStreamError(node);
|
|
610
|
-
case SerovalNodeType.ReadableStreamClose:
|
|
611
|
-
return this.deserializeReadableStreamClose(node);
|
|
612
418
|
case SerovalNodeType.IteratorFactoryInstance:
|
|
613
419
|
return this.deserializeIteratorFactoryInstance(node);
|
|
614
420
|
case SerovalNodeType.AsyncIteratorFactoryInstance:
|
|
615
421
|
return this.deserializeAsyncIteratorFactoryInstance(node);
|
|
616
|
-
case SerovalNodeType.
|
|
617
|
-
return this.
|
|
618
|
-
case SerovalNodeType.
|
|
422
|
+
case SerovalNodeType.StreamConstructor:
|
|
423
|
+
return this.deserializeStreamConstructor(node);
|
|
424
|
+
case SerovalNodeType.StreamNext:
|
|
425
|
+
return this.deserializeStreamNext(node);
|
|
426
|
+
case SerovalNodeType.StreamThrow:
|
|
427
|
+
return this.deserializeStreamThrow(node);
|
|
428
|
+
case SerovalNodeType.StreamReturn:
|
|
429
|
+
return this.deserializeStreamReturn(node);
|
|
619
430
|
case SerovalNodeType.IteratorFactory:
|
|
431
|
+
return this.deserializeIteratorFactory(node);
|
|
620
432
|
case SerovalNodeType.AsyncIteratorFactory:
|
|
433
|
+
return this.deserializeAsyncIteratorFactory(node);
|
|
434
|
+
// case SerovalNodeType.SpecialReference:
|
|
621
435
|
default:
|
|
622
436
|
throw new Error('invariant');
|
|
623
437
|
}
|