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,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, SerializedAsyncIteratorResult } from '../utils/iterator-to-sequence';
57
- import {
58
- readableStreamToAsyncIterator,
59
- sequenceToAsyncIterator,
60
- sequenceToIterator,
61
- sequenceToReadableStream,
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, DeferredStream } from '../utils/deferred';
65
- import { createDeferred, createDeferredStream } from '../utils/deferred';
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 implements PluginAccessOptions {
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
- node: SerovalReferenceNode,
111
- ): unknown {
112
- return this.assignIndexedValue(node.i, getReference(deserializeString(node.s)));
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
- : Object.create(null)) as Record<string, unknown>,
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
- node: SerovalRegExpNode,
176
- ): RegExp {
177
- return this.assignIndexedValue(node.i, new RegExp(node.c, node.m));
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: SerovalMapNode,
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 TypedArray = getTypedArrayConstructor(node.c);
195
+ const construct = getTypedArrayConstructor(node.c);
221
196
  const source = this.deserialize(node.f) as ArrayBuffer;
222
- const result = this.assignIndexedValue(node.i, new TypedArray(
223
- source,
224
- node.b,
225
- node.l,
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(node.i, new DataView(
235
- source,
236
- node.b,
237
- node.l,
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: SerovalErrorNode,
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 ErrorConstructor(deserializeString(node.m)),
242
+ new construct(deserializeString(node.m)),
274
243
  );
275
244
  return this.deserializeDictionary(node, result);
276
245
  }
277
246
 
278
- private async deserializePromise(
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 deserializeURL(
293
- node: SerovalURLNode,
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 === node.c) {
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(node: SerovalPromiseConstructorNode): unknown {
442
- return this.assignIndexedValue(
443
- node.i,
444
- createDeferred(),
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 deserializeReadableStreamConstructor(
467
- node: SerovalReadableStreamConstructorNode,
302
+ private deserializeIteratorFactoryInstance(
303
+ node: SerovalIteratorFactoryInstanceNode,
468
304
  ): unknown {
469
- return this.assignIndexedValue(
470
- node.i,
471
- createDeferredStream(),
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 deserializeReadableStreamEnqueue(node: SerovalReadableStreamEnqueueNode): unknown {
476
- const deferred = this.refs.get(node.i) as DeferredStream | undefined;
477
- assert(deferred, new Error('Missing ReadableStream instance.'));
478
- deferred.enqueue(
479
- this.deserialize(node.a[1]),
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 deserializeReadableStreamError(node: SerovalReadableStreamErrorNode): unknown {
485
- const deferred = this.refs.get(node.i) as DeferredStream | undefined;
486
- assert(deferred, new Error('Missing Promise instance.'));
487
- deferred.error(
488
- this.deserialize(node.a[1]),
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 deserializeReadableStreamClose(node: SerovalReadableStreamCloseNode): unknown {
494
- const deferred = this.refs.get(node.i) as DeferredStream | undefined;
495
- assert(deferred, new Error('Missing Promise instance.'));
496
- deferred.close();
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 deserializeIteratorFactoryInstance(
501
- node: SerovalIteratorFactoryInstanceNode,
502
- ): unknown {
503
- const source = this.deserialize(node.a[1]);
504
- return sequenceToIterator(source as Sequence);
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 deserializeAsyncIteratorFactoryInstance(
508
- node: SerovalAsyncIteratorFactoryInstanceNode,
352
+ private deserializeIteratorFactory(
353
+ node: SerovalIteratorFactoryNode,
509
354
  ): unknown {
510
- const source = this.deserialize(node.a[1]);
511
- if (node.s) {
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 deserializeReadableStream(
520
- node: SerovalReadableStreamNode,
359
+ private deserializeAsyncIteratorFactory(
360
+ node: SerovalAsyncIteratorFactoryNode,
521
361
  ): unknown {
522
- return this.assignIndexedValue(
523
- node.i,
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.ReadableStream:
617
- return this.deserializeReadableStream(node);
618
- case SerovalNodeType.SpecialReference:
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
  }