seroval 0.9.0 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +4 -287
  2. package/dist/cjs/development/index.cjs +3529 -1140
  3. package/dist/cjs/development/index.cjs.map +4 -4
  4. package/dist/cjs/production/index.cjs +3 -3
  5. package/dist/esm/development/index.mjs +3533 -1142
  6. package/dist/esm/development/index.mjs.map +4 -4
  7. package/dist/esm/production/index.mjs +3 -3
  8. package/dist/types/core/Serializer.d.ts +15 -0
  9. package/dist/types/{tree → core}/UnsupportedTypeError.d.ts +4 -3
  10. package/dist/types/{assert.d.ts → core/assert.d.ts} +1 -1
  11. package/dist/types/core/assignments.d.ts +33 -0
  12. package/dist/types/core/base-primitives.d.ts +12 -0
  13. package/dist/types/{compat.d.ts → core/compat.d.ts} +22 -22
  14. package/dist/types/core/constants.d.ts +89 -0
  15. package/dist/types/core/context.d.ts +9 -0
  16. package/dist/types/core/cross/async.d.ts +3 -0
  17. package/dist/types/core/cross/context.d.ts +37 -0
  18. package/dist/types/core/cross/index.d.ts +8 -0
  19. package/dist/types/core/cross/primitives.d.ts +9 -0
  20. package/dist/types/core/cross/serialize.d.ts +5 -0
  21. package/dist/types/core/cross/stream.d.ts +3 -0
  22. package/dist/types/core/cross/sync.d.ts +3 -0
  23. package/dist/types/core/cross/web-api.d.ts +4 -0
  24. package/dist/types/{get-identifier.d.ts → core/get-identifier.d.ts} +1 -1
  25. package/dist/types/core/keys.d.ts +13 -0
  26. package/dist/types/{tree/constants.d.ts → core/literals.d.ts} +9 -11
  27. package/dist/types/core/promise-to-result.d.ts +1 -0
  28. package/dist/types/{tree → core}/reference.d.ts +5 -6
  29. package/dist/types/{tree → core}/shared.d.ts +13 -13
  30. package/dist/types/{string.d.ts → core/string.d.ts} +3 -3
  31. package/dist/types/core/tree/async.d.ts +3 -0
  32. package/dist/types/core/tree/context.d.ts +44 -0
  33. package/dist/types/core/tree/deserialize.d.ts +3 -0
  34. package/dist/types/core/tree/index.d.ts +14 -0
  35. package/dist/types/core/tree/primitives.d.ts +9 -0
  36. package/dist/types/core/tree/serialize.d.ts +4 -0
  37. package/dist/types/core/tree/sync.d.ts +3 -0
  38. package/dist/types/core/tree/web-api.d.ts +4 -0
  39. package/dist/types/{tree → core}/types.d.ts +228 -238
  40. package/dist/types/core/web-api.d.ts +4 -0
  41. package/dist/types/index.d.ts +9 -19
  42. package/dist/types/types.d.ts +20 -20
  43. package/package.json +5 -5
  44. package/src/core/Serializer.ts +48 -0
  45. package/src/{tree → core}/UnsupportedTypeError.ts +1 -1
  46. package/src/core/assignments.ts +159 -0
  47. package/src/{tree/primitives.ts → core/base-primitives.ts} +33 -136
  48. package/src/core/constants.ts +169 -0
  49. package/src/core/context.ts +15 -0
  50. package/src/core/cross/async.ts +614 -0
  51. package/src/core/cross/context.ts +102 -0
  52. package/src/core/cross/index.ts +169 -0
  53. package/src/core/cross/primitives.ts +137 -0
  54. package/src/core/cross/serialize.ts +847 -0
  55. package/src/core/cross/stream.ts +745 -0
  56. package/src/core/cross/sync.ts +561 -0
  57. package/src/core/cross/web-api.ts +55 -0
  58. package/src/core/header.js +61 -0
  59. package/src/core/keys.ts +41 -0
  60. package/src/core/literals.ts +28 -0
  61. package/src/core/promise-to-result.ts +9 -0
  62. package/src/{tree → core}/reference.ts +6 -7
  63. package/src/{tree → core}/shared.ts +4 -4
  64. package/src/{tree → core/tree}/async.ts +46 -34
  65. package/src/core/tree/context.ts +125 -0
  66. package/src/{tree → core/tree}/deserialize.ts +68 -55
  67. package/src/core/tree/index.ts +142 -0
  68. package/src/core/tree/primitives.ts +132 -0
  69. package/src/{tree → core/tree}/serialize.ts +87 -193
  70. package/src/{tree → core/tree}/sync.ts +50 -39
  71. package/src/{tree → core/tree}/web-api.ts +8 -52
  72. package/src/{tree → core}/types.ts +76 -60
  73. package/src/core/web-api.ts +51 -0
  74. package/src/index.ts +7 -141
  75. package/src/types.ts +1 -1
  76. package/dist/types/context.d.ts +0 -67
  77. package/dist/types/tree/async.d.ts +0 -3
  78. package/dist/types/tree/deserialize.d.ts +0 -3
  79. package/dist/types/tree/primitives.d.ts +0 -19
  80. package/dist/types/tree/serialize.d.ts +0 -4
  81. package/dist/types/tree/symbols.d.ts +0 -33
  82. package/dist/types/tree/sync.d.ts +0 -3
  83. package/dist/types/tree/web-api.d.ts +0 -6
  84. package/src/context.ts +0 -164
  85. package/src/tree/constants.ts +0 -73
  86. package/src/tree/symbols.ts +0 -65
  87. /package/src/{assert.ts → core/assert.ts} +0 -0
  88. /package/src/{compat.ts → core/compat.ts} +0 -0
  89. /package/src/{get-identifier.ts → core/get-identifier.ts} +0 -0
  90. /package/src/{string.ts → core/string.ts} +0 -0
@@ -1,41 +1,33 @@
1
1
  /* eslint-disable @typescript-eslint/no-use-before-define */
2
2
  import assert from '../assert';
3
3
  import { Feature } from '../compat';
4
- import type { ParserContext } from '../context';
5
- import { createIndexedValue } from '../context';
4
+ import type { ParserContext } from './context';
5
+ import { createIndexedValue } from './context';
6
6
  import { serializeString } from '../string';
7
- import type { BigIntTypedArrayValue, TypedArrayValue } from '../types';
8
- import UnsupportedTypeError from './UnsupportedTypeError';
7
+ import type { BigIntTypedArrayValue, TypedArrayValue } from '../../types';
8
+ import UnsupportedTypeError from '../UnsupportedTypeError';
9
9
  import {
10
10
  TRUE_NODE,
11
11
  FALSE_NODE,
12
12
  UNDEFINED_NODE,
13
13
  NULL_NODE,
14
- } from './constants';
14
+ } from '../literals';
15
15
  import {
16
- createBigIntNode,
17
16
  createBigIntTypedArrayNode,
18
- createDateNode,
19
- createNumberNode,
20
- createIndexedValueNode,
21
- createRegExpNode,
22
- createStringNode,
23
17
  createTypedArrayNode,
24
- createReferenceNode,
25
- createArrayBufferNode,
26
18
  createDataViewNode,
27
19
  createSymbolNode,
28
20
  createFunctionNode,
29
21
  } from './primitives';
30
22
  import {
31
23
  hasReferenceID,
32
- } from './reference';
24
+ } from '../reference';
33
25
  import {
34
26
  getErrorConstructorName,
35
27
  getErrorOptions,
36
28
  getObjectFlag,
37
29
  isIterable,
38
- } from './shared';
30
+ } from '../shared';
39
31
  import type {
40
32
  SerovalAggregateErrorNode,
41
33
  SerovalArrayNode,
@@ -44,25 +36,35 @@ import type {
44
36
  SerovalFormDataNode,
45
37
  SerovalHeadersNode,
46
38
  SerovalMapNode,
47
- SerovalNode,
48
39
  SerovalNullConstructorNode,
49
40
  SerovalObjectNode,
50
41
  SerovalObjectRecordKey,
51
42
  SerovalObjectRecordNode,
52
43
  SerovalPlainRecordNode,
53
44
  SerovalSetNode,
54
- } from './types';
45
+ SerovalSyncNode,
46
+ } from '../types';
55
47
  import {
56
- SerovalNodeType,
57
48
  SerovalObjectRecordSpecialKey,
58
- } from './types';
59
- import { createURLNode, createURLSearchParamsNode } from './web-api';
49
+ } from '../types';
50
+ import { SerovalNodeType } from '../constants';
51
+ import {
52
+ createArrayBufferNode,
53
+ createBigIntNode,
54
+ createDateNode,
55
+ createIndexedValueNode,
56
+ createNumberNode,
57
+ createReferenceNode,
58
+ createRegExpNode,
59
+ createStringNode,
60
+ } from '../base-primitives';
61
+ import { createURLNode, createURLSearchParamsNode } from '../web-api';
60
62
 
61
63
  type ObjectLikeNode = SerovalObjectNode | SerovalNullConstructorNode;
62
64
 
63
- function generateNodeList(ctx: ParserContext, current: unknown[]): SerovalNode[] {
65
+ function generateNodeList(ctx: ParserContext, current: unknown[]): SerovalSyncNode[] {
64
66
  const size = current.length;
65
- const nodes = new Array<SerovalNode>(size);
67
+ const nodes = new Array<SerovalSyncNode>(size);
66
68
  const deferred = new Array<unknown>(size);
67
69
  let item: unknown;
68
70
  for (let i = 0; i < size; i++) {
@@ -95,7 +97,8 @@ function generateArrayNode(
95
97
  l: current.length,
96
98
  c: undefined,
97
99
  m: undefined,
98
- d: undefined,
100
+ p: undefined,
101
+ e: undefined,
99
102
  a: generateNodeList(ctx, current),
100
103
  f: undefined,
101
104
  b: undefined,
@@ -110,8 +113,8 @@ function generateMapNode(
110
113
  ): SerovalMapNode {
111
114
  assert(ctx.features & Feature.Map, new UnsupportedTypeError(current));
112
115
  const len = current.size;
113
- const keyNodes = new Array<SerovalNode>(len);
114
- const valueNodes = new Array<SerovalNode>(len);
116
+ const keyNodes = new Array<SerovalSyncNode>(len);
117
+ const valueNodes = new Array<SerovalSyncNode>(len);
115
118
  const deferredKey = new Array<unknown>(len);
116
119
  const deferredValue = new Array<unknown>(len);
117
120
  let deferredSize = 0;
@@ -139,7 +142,8 @@ function generateMapNode(
139
142
  l: undefined,
140
143
  c: undefined,
141
144
  m: undefined,
142
- d: { k: keyNodes, v: valueNodes, s: len },
145
+ p: undefined,
146
+ e: { k: keyNodes, v: valueNodes, s: len },
143
147
  a: undefined,
144
148
  f: undefined,
145
149
  b: undefined,
@@ -154,7 +158,7 @@ function generateSetNode(
154
158
  ): SerovalSetNode {
155
159
  assert(ctx.features & Feature.Set, new UnsupportedTypeError(current));
156
160
  const len = current.size;
157
- const nodes = new Array<SerovalNode>(len);
161
+ const nodes = new Array<SerovalSyncNode>(len);
158
162
  const deferred = new Array<unknown>(len);
159
163
  let deferredSize = 0;
160
164
  let nodeSize = 0;
@@ -177,7 +181,8 @@ function generateSetNode(
177
181
  l: len,
178
182
  c: undefined,
179
183
  m: undefined,
180
- d: undefined,
184
+ p: undefined,
185
+ e: undefined,
181
186
  a: nodes,
182
187
  f: undefined,
183
188
  b: undefined,
@@ -192,7 +197,7 @@ function generateProperties(
192
197
  const keys = Object.keys(properties);
193
198
  let size = keys.length;
194
199
  const keyNodes = new Array<SerovalObjectRecordKey>(size);
195
- const valueNodes = new Array<SerovalNode>(size);
200
+ const valueNodes = new Array<SerovalSyncNode>(size);
196
201
  const deferredKeys = new Array<SerovalObjectRecordKey>(size);
197
202
  const deferredValues = new Array<unknown>(size);
198
203
  let deferredSize = 0;
@@ -239,7 +244,7 @@ function generatePlainProperties(
239
244
  const keys = Object.keys(properties);
240
245
  const size = keys.length;
241
246
  const keyNodes = new Array<string>(size);
242
- const valueNodes = new Array<SerovalNode>(size);
247
+ const valueNodes = new Array<SerovalSyncNode>(size);
243
248
  const deferredKeys = new Array<string>(size);
244
249
  const deferredValues = new Array<unknown>(size);
245
250
  let deferredSize = 0;
@@ -283,7 +288,8 @@ function generateObjectNode(
283
288
  l: undefined,
284
289
  c: undefined,
285
290
  m: undefined,
286
- d: generateProperties(ctx, current),
291
+ p: generateProperties(ctx, current),
292
+ e: undefined,
287
293
  a: undefined,
288
294
  f: undefined,
289
295
  b: undefined,
@@ -307,7 +313,8 @@ function generateAggregateErrorNode(
307
313
  l: undefined,
308
314
  c: undefined,
309
315
  m: serializeString(current.message),
310
- d: optionsNode,
316
+ p: optionsNode,
317
+ e: undefined,
311
318
  a: undefined,
312
319
  f: undefined,
313
320
  b: undefined,
@@ -331,7 +338,8 @@ function generateErrorNode(
331
338
  l: undefined,
332
339
  c: getErrorConstructorName(current),
333
340
  m: serializeString(current.message),
334
- d: optionsNode,
341
+ p: optionsNode,
342
+ e: undefined,
335
343
  a: undefined,
336
344
  f: undefined,
337
345
  b: undefined,
@@ -357,7 +365,8 @@ function generateHeadersNode(
357
365
  l: undefined,
358
366
  c: undefined,
359
367
  m: undefined,
360
- d: generatePlainProperties(ctx, items),
368
+ p: undefined,
369
+ e: generatePlainProperties(ctx, items),
361
370
  a: undefined,
362
371
  f: undefined,
363
372
  b: undefined,
@@ -383,7 +392,8 @@ function generateFormDataNode(
383
392
  l: undefined,
384
393
  c: undefined,
385
394
  m: undefined,
386
- d: generatePlainProperties(ctx, items),
395
+ p: undefined,
396
+ e: generatePlainProperties(ctx, items),
387
397
  a: undefined,
388
398
  f: undefined,
389
399
  b: undefined,
@@ -403,7 +413,8 @@ function generateBoxedNode(
403
413
  l: undefined,
404
414
  c: undefined,
405
415
  m: undefined,
406
- d: undefined,
416
+ p: undefined,
417
+ e: undefined,
407
418
  a: undefined,
408
419
  f: parseSync(ctx, current.valueOf()),
409
420
  b: undefined,
@@ -414,14 +425,14 @@ function generateBoxedNode(
414
425
  function parseObject(
415
426
  ctx: ParserContext,
416
427
  current: object | null,
417
- ): SerovalNode {
428
+ ): SerovalSyncNode {
418
429
  if (!current) {
419
430
  return NULL_NODE;
420
431
  }
421
432
  // Non-primitive values needs a reference ID
422
433
  // mostly because the values themselves are stateful
423
434
  const id = createIndexedValue(ctx, current);
424
- if (ctx.markedRefs.has(id)) {
435
+ if (ctx.reference.marked.has(id)) {
425
436
  return createIndexedValueNode(id);
426
437
  }
427
438
  if (hasReferenceID(current)) {
@@ -526,7 +537,7 @@ function parseObject(
526
537
  export default function parseSync<T>(
527
538
  ctx: ParserContext,
528
539
  current: T,
529
- ): SerovalNode {
540
+ ): SerovalSyncNode {
530
541
  switch (typeof current) {
531
542
  case 'boolean':
532
543
  return current ? TRUE_NODE : FALSE_NODE;
@@ -1,60 +1,14 @@
1
1
  import assert from '../assert';
2
2
  import { Feature } from '../compat';
3
- import type { ParserContext } from '../context';
3
+ import type { ParserContext } from './context';
4
4
  import { serializeString } from '../string';
5
- import UnsupportedTypeError from './UnsupportedTypeError';
5
+ import UnsupportedTypeError from '../UnsupportedTypeError';
6
6
  import { serializeArrayBuffer } from './primitives';
7
7
  import type {
8
8
  SerovalBlobNode,
9
9
  SerovalFileNode,
10
- SerovalURLNode,
11
- SerovalURLSearchParamsNode,
12
- } from './types';
13
- import {
14
- SerovalNodeType,
15
- } from './types';
16
-
17
- export function createURLNode(
18
- ctx: ParserContext,
19
- id: number,
20
- current: URL,
21
- ): SerovalURLNode {
22
- assert(ctx.features & Feature.WebAPI, new UnsupportedTypeError(current));
23
- return {
24
- t: SerovalNodeType.URL,
25
- i: id,
26
- s: serializeString(current.href),
27
- l: undefined,
28
- c: undefined,
29
- m: undefined,
30
- d: undefined,
31
- f: undefined,
32
- a: undefined,
33
- b: undefined,
34
- o: undefined,
35
- };
36
- }
37
-
38
- export function createURLSearchParamsNode(
39
- ctx: ParserContext,
40
- id: number,
41
- current: URLSearchParams,
42
- ): SerovalURLSearchParamsNode {
43
- assert(ctx.features & Feature.WebAPI, new UnsupportedTypeError(current));
44
- return {
45
- t: SerovalNodeType.URLSearchParams,
46
- i: id,
47
- s: serializeString(current.toString()),
48
- l: undefined,
49
- c: undefined,
50
- m: undefined,
51
- d: undefined,
52
- f: undefined,
53
- a: undefined,
54
- b: undefined,
55
- o: undefined,
56
- };
57
- }
10
+ } from '../types';
11
+ import { SerovalNodeType } from '../constants';
58
12
 
59
13
  export async function createBlobNode(
60
14
  ctx: ParserContext,
@@ -69,7 +23,8 @@ export async function createBlobNode(
69
23
  l: undefined,
70
24
  c: serializeString(current.type),
71
25
  m: undefined,
72
- d: undefined,
26
+ p: undefined,
27
+ e: undefined,
73
28
  f: serializeArrayBuffer(ctx, await current.arrayBuffer()),
74
29
  a: undefined,
75
30
  b: undefined,
@@ -90,7 +45,8 @@ export async function createFileNode(
90
45
  l: undefined,
91
46
  c: serializeString(current.type),
92
47
  m: serializeString(current.name),
93
- d: undefined,
48
+ p: undefined,
49
+ e: undefined,
94
50
  f: serializeArrayBuffer(ctx, await current.arrayBuffer()),
95
51
  a: undefined,
96
52
  b: current.lastModified,
@@ -1,53 +1,9 @@
1
- import type { Symbols } from './symbols';
2
-
3
- export const enum SerovalConstant {
4
- Null = 0,
5
- Undefined = 1,
6
- True = 2,
7
- False = 3,
8
- NegativeZero = 4,
9
- Infinity = 5,
10
- NegativeInfinity = 6,
11
- NaN = 7,
12
- }
13
-
14
- export const enum SerovalNodeType {
15
- Number = 0,
16
- String = 1,
17
- Constant = 2,
18
- BigInt = 3,
19
- IndexedValue = 4,
20
- Date = 5,
21
- RegExp = 6,
22
- Set = 7,
23
- Map = 8,
24
- Array = 9,
25
- Object = 10,
26
- NullConstructor = 11,
27
- Promise = 12,
28
- Error = 13,
29
- AggregateError = 14,
30
- TypedArray = 15,
31
- BigIntTypedArray = 16,
32
- WKSymbol = 17,
33
- URL = 18,
34
- URLSearchParams = 19,
35
- Reference = 20,
36
- ArrayBuffer = 21,
37
- DataView = 22,
38
- Blob = 23,
39
- File = 24,
40
- Headers = 25,
41
- FormData = 26,
42
- Boxed = 27,
43
- }
44
-
45
- export const enum SerovalObjectFlags {
46
- None = 0,
47
- NonExtensible = 1,
48
- Sealed = 2,
49
- Frozen = 3,
50
- }
1
+ import type {
2
+ SerovalNodeType,
3
+ SerovalObjectFlags,
4
+ SerovalConstant,
5
+ Symbols,
6
+ } from './constants';
51
7
 
52
8
  export interface SerovalBaseNode {
53
9
  // Type of the node
@@ -62,8 +18,10 @@ export interface SerovalBaseNode {
62
18
  c: string | undefined;
63
19
  // message/flags
64
20
  m: string | undefined;
65
- // dictionary
66
- d: SerovalObjectRecordNode | SerovalMapRecordNode | undefined;
21
+ // properties (objects)
22
+ p: SerovalObjectRecordNode | undefined;
23
+ // entries (for Map, Headers, etc.)
24
+ e: SerovalMapRecordNode | SerovalPlainRecordNode | undefined;
67
25
  // array of nodes
68
26
  a: (SerovalNode | undefined)[] | undefined;
69
27
  // fulfilled node
@@ -206,7 +164,7 @@ export interface SerovalMapNode extends SerovalBaseNode {
206
164
  t: SerovalNodeType.Map;
207
165
  i: number;
208
166
  // key/value pairs
209
- d: SerovalMapRecordNode;
167
+ e: SerovalMapRecordNode;
210
168
  }
211
169
 
212
170
  export interface SerovalArrayNode extends SerovalBaseNode {
@@ -222,7 +180,7 @@ export interface SerovalArrayNode extends SerovalBaseNode {
222
180
  export interface SerovalObjectNode extends SerovalBaseNode {
223
181
  t: SerovalNodeType.Object;
224
182
  // key/value pairs
225
- d: SerovalObjectRecordNode;
183
+ p: SerovalObjectRecordNode;
226
184
  i: number;
227
185
  o: SerovalObjectFlags;
228
186
  }
@@ -230,13 +188,14 @@ export interface SerovalObjectNode extends SerovalBaseNode {
230
188
  export interface SerovalNullConstructorNode extends SerovalBaseNode {
231
189
  t: SerovalNodeType.NullConstructor;
232
190
  // key/value pairs
233
- d: SerovalObjectRecordNode;
191
+ p: SerovalObjectRecordNode;
234
192
  i: number;
235
193
  o: SerovalObjectFlags;
236
194
  }
237
195
 
238
196
  export interface SerovalPromiseNode extends SerovalBaseNode {
239
197
  t: SerovalNodeType.Promise;
198
+ s: 0 | 1;
240
199
  // resolved value
241
200
  f: SerovalNode;
242
201
  i: number;
@@ -249,7 +208,7 @@ export interface SerovalErrorNode extends SerovalBaseNode {
249
208
  // message
250
209
  m: string;
251
210
  // other properties
252
- d: SerovalObjectRecordNode | undefined;
211
+ p: SerovalObjectRecordNode | undefined;
253
212
  i: number;
254
213
  }
255
214
 
@@ -259,7 +218,7 @@ export interface SerovalAggregateErrorNode extends SerovalBaseNode {
259
218
  // message
260
219
  m: string;
261
220
  // other properties
262
- d: SerovalObjectRecordNode | undefined;
221
+ p: SerovalObjectRecordNode | undefined;
263
222
  }
264
223
 
265
224
  export interface SerovalWKSymbolNode extends SerovalBaseNode {
@@ -325,13 +284,13 @@ export interface SerovalFileNode extends SerovalBaseNode {
325
284
  export interface SerovalHeadersNode extends SerovalBaseNode {
326
285
  t: SerovalNodeType.Headers;
327
286
  i: number;
328
- d: SerovalPlainRecordNode;
287
+ e: SerovalPlainRecordNode;
329
288
  }
330
289
 
331
290
  export interface SerovalFormDataNode extends SerovalBaseNode {
332
291
  t: SerovalNodeType.FormData;
333
292
  i: number;
334
- d: SerovalPlainRecordNode;
293
+ e: SerovalPlainRecordNode;
335
294
  }
336
295
 
337
296
  export interface SerovalBoxedNode extends SerovalBaseNode {
@@ -340,7 +299,48 @@ export interface SerovalBoxedNode extends SerovalBaseNode {
340
299
  f: SerovalNode;
341
300
  }
342
301
 
343
- export type SerovalNode =
302
+ export interface SerovalPromiseConstructorNode extends SerovalBaseNode {
303
+ t: SerovalNodeType.PromiseConstructor;
304
+ i: number;
305
+ }
306
+
307
+ export interface SerovalPromiseResolveNode extends SerovalBaseNode {
308
+ t: SerovalNodeType.PromiseResolve;
309
+ // reference to the resolver
310
+ i: number;
311
+ f: SerovalNode;
312
+ }
313
+
314
+ export interface SerovalPromiseRejectNode extends SerovalBaseNode {
315
+ t: SerovalNodeType.PromiseReject;
316
+ // reference to the resolver
317
+ i: number;
318
+ f: SerovalNode;
319
+ }
320
+
321
+ export interface SerovalReadableStreamConstructorNode extends SerovalBaseNode {
322
+ t: SerovalNodeType.ReadableStreamConstructor;
323
+ i: number;
324
+ }
325
+
326
+ export interface SerovalReadableStreamEnqueueNode extends SerovalBaseNode {
327
+ t: SerovalNodeType.ReadableStreamEnqueue;
328
+ i: number;
329
+ f: SerovalNode;
330
+ }
331
+
332
+ export interface SerovalReadableStreamCloseNode extends SerovalBaseNode {
333
+ t: SerovalNodeType.ReadableStreamClose;
334
+ i: number;
335
+ }
336
+
337
+ export interface SerovalReadableStreamErrorNode extends SerovalBaseNode {
338
+ t: SerovalNodeType.ReadableStreamError;
339
+ i: number;
340
+ f: SerovalNode;
341
+ }
342
+
343
+ export type SerovalSyncNode =
344
344
  | SerovalPrimitiveNode
345
345
  | SerovalIndexedValueNode
346
346
  | SerovalSemiPrimitiveNode
@@ -363,3 +363,19 @@ export type SerovalNode =
363
363
  | SerovalHeadersNode
364
364
  | SerovalFormDataNode
365
365
  | SerovalBoxedNode;
366
+
367
+ export type SerovalAsyncNode =
368
+ | SerovalPromiseNode
369
+ | SerovalBlobNode
370
+ | SerovalFileNode
371
+ | SerovalPromiseConstructorNode
372
+ | SerovalPromiseResolveNode
373
+ | SerovalPromiseRejectNode
374
+ | SerovalReadableStreamConstructorNode
375
+ | SerovalReadableStreamEnqueueNode
376
+ | SerovalReadableStreamCloseNode
377
+ | SerovalReadableStreamErrorNode;
378
+
379
+ export type SerovalNode =
380
+ | SerovalSyncNode
381
+ | SerovalAsyncNode;
@@ -0,0 +1,51 @@
1
+ import UnsupportedTypeError from './UnsupportedTypeError';
2
+ import assert from './assert';
3
+ import { Feature } from './compat';
4
+ import { SerovalNodeType } from './constants';
5
+ import type { BaseParserContext } from './context';
6
+ import { serializeString } from './string';
7
+ import type { SerovalURLNode, SerovalURLSearchParamsNode } from './types';
8
+
9
+ export function createURLNode(
10
+ ctx: BaseParserContext,
11
+ id: number,
12
+ current: URL,
13
+ ): SerovalURLNode {
14
+ assert(ctx.features & Feature.WebAPI, new UnsupportedTypeError(current));
15
+ return {
16
+ t: SerovalNodeType.URL,
17
+ i: id,
18
+ s: serializeString(current.href),
19
+ l: undefined,
20
+ c: undefined,
21
+ m: undefined,
22
+ p: undefined,
23
+ e: undefined,
24
+ f: undefined,
25
+ a: undefined,
26
+ b: undefined,
27
+ o: undefined,
28
+ };
29
+ }
30
+
31
+ export function createURLSearchParamsNode(
32
+ ctx: BaseParserContext,
33
+ id: number,
34
+ current: URLSearchParams,
35
+ ): SerovalURLSearchParamsNode {
36
+ assert(ctx.features & Feature.WebAPI, new UnsupportedTypeError(current));
37
+ return {
38
+ t: SerovalNodeType.URLSearchParams,
39
+ i: id,
40
+ s: serializeString(current.toString()),
41
+ l: undefined,
42
+ c: undefined,
43
+ m: undefined,
44
+ p: undefined,
45
+ e: undefined,
46
+ f: undefined,
47
+ a: undefined,
48
+ b: undefined,
49
+ o: undefined,
50
+ };
51
+ }