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.
- package/README.md +4 -287
- package/dist/cjs/development/index.cjs +3529 -1140
- package/dist/cjs/development/index.cjs.map +4 -4
- package/dist/cjs/production/index.cjs +3 -3
- package/dist/esm/development/index.mjs +3533 -1142
- package/dist/esm/development/index.mjs.map +4 -4
- package/dist/esm/production/index.mjs +3 -3
- package/dist/types/core/Serializer.d.ts +15 -0
- package/dist/types/{tree → core}/UnsupportedTypeError.d.ts +4 -3
- package/dist/types/{assert.d.ts → core/assert.d.ts} +1 -1
- package/dist/types/core/assignments.d.ts +33 -0
- package/dist/types/core/base-primitives.d.ts +12 -0
- package/dist/types/{compat.d.ts → core/compat.d.ts} +22 -22
- package/dist/types/core/constants.d.ts +89 -0
- package/dist/types/core/context.d.ts +9 -0
- package/dist/types/core/cross/async.d.ts +3 -0
- package/dist/types/core/cross/context.d.ts +37 -0
- package/dist/types/core/cross/index.d.ts +8 -0
- package/dist/types/core/cross/primitives.d.ts +9 -0
- package/dist/types/core/cross/serialize.d.ts +5 -0
- package/dist/types/core/cross/stream.d.ts +3 -0
- package/dist/types/core/cross/sync.d.ts +3 -0
- package/dist/types/core/cross/web-api.d.ts +4 -0
- package/dist/types/{get-identifier.d.ts → core/get-identifier.d.ts} +1 -1
- package/dist/types/core/keys.d.ts +13 -0
- package/dist/types/{tree/constants.d.ts → core/literals.d.ts} +9 -11
- package/dist/types/core/promise-to-result.d.ts +1 -0
- package/dist/types/{tree → core}/reference.d.ts +5 -6
- package/dist/types/{tree → core}/shared.d.ts +13 -13
- package/dist/types/{string.d.ts → core/string.d.ts} +3 -3
- package/dist/types/core/tree/async.d.ts +3 -0
- package/dist/types/core/tree/context.d.ts +44 -0
- package/dist/types/core/tree/deserialize.d.ts +3 -0
- package/dist/types/core/tree/index.d.ts +14 -0
- package/dist/types/core/tree/primitives.d.ts +9 -0
- package/dist/types/core/tree/serialize.d.ts +4 -0
- package/dist/types/core/tree/sync.d.ts +3 -0
- package/dist/types/core/tree/web-api.d.ts +4 -0
- package/dist/types/{tree → core}/types.d.ts +228 -238
- package/dist/types/core/web-api.d.ts +4 -0
- package/dist/types/index.d.ts +9 -19
- package/dist/types/types.d.ts +20 -20
- package/package.json +5 -5
- package/src/core/Serializer.ts +48 -0
- package/src/{tree → core}/UnsupportedTypeError.ts +1 -1
- package/src/core/assignments.ts +159 -0
- package/src/{tree/primitives.ts → core/base-primitives.ts} +33 -136
- package/src/core/constants.ts +169 -0
- package/src/core/context.ts +15 -0
- package/src/core/cross/async.ts +614 -0
- package/src/core/cross/context.ts +102 -0
- package/src/core/cross/index.ts +169 -0
- package/src/core/cross/primitives.ts +137 -0
- package/src/core/cross/serialize.ts +847 -0
- package/src/core/cross/stream.ts +745 -0
- package/src/core/cross/sync.ts +561 -0
- package/src/core/cross/web-api.ts +55 -0
- package/src/core/header.js +61 -0
- package/src/core/keys.ts +41 -0
- package/src/core/literals.ts +28 -0
- package/src/core/promise-to-result.ts +9 -0
- package/src/{tree → core}/reference.ts +6 -7
- package/src/{tree → core}/shared.ts +4 -4
- package/src/{tree → core/tree}/async.ts +46 -34
- package/src/core/tree/context.ts +125 -0
- package/src/{tree → core/tree}/deserialize.ts +68 -55
- package/src/core/tree/index.ts +142 -0
- package/src/core/tree/primitives.ts +132 -0
- package/src/{tree → core/tree}/serialize.ts +87 -193
- package/src/{tree → core/tree}/sync.ts +50 -39
- package/src/{tree → core/tree}/web-api.ts +8 -52
- package/src/{tree → core}/types.ts +76 -60
- package/src/core/web-api.ts +51 -0
- package/src/index.ts +7 -141
- package/src/types.ts +1 -1
- package/dist/types/context.d.ts +0 -67
- package/dist/types/tree/async.d.ts +0 -3
- package/dist/types/tree/deserialize.d.ts +0 -3
- package/dist/types/tree/primitives.d.ts +0 -19
- package/dist/types/tree/serialize.d.ts +0 -4
- package/dist/types/tree/symbols.d.ts +0 -33
- package/dist/types/tree/sync.d.ts +0 -3
- package/dist/types/tree/web-api.d.ts +0 -6
- package/src/context.ts +0 -164
- package/src/tree/constants.ts +0 -73
- package/src/tree/symbols.ts +0 -65
- /package/src/{assert.ts → core/assert.ts} +0 -0
- /package/src/{compat.ts → core/compat.ts} +0 -0
- /package/src/{get-identifier.ts → core/get-identifier.ts} +0 -0
- /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 '
|
|
5
|
-
import { createIndexedValue } from '
|
|
4
|
+
import type { ParserContext } from './context';
|
|
5
|
+
import { createIndexedValue } from './context';
|
|
6
6
|
import { serializeString } from '../string';
|
|
7
|
-
import type { BigIntTypedArrayValue, TypedArrayValue } from '
|
|
8
|
-
import UnsupportedTypeError from '
|
|
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 '
|
|
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 '
|
|
24
|
+
} from '../reference';
|
|
33
25
|
import {
|
|
34
26
|
getErrorConstructorName,
|
|
35
27
|
getErrorOptions,
|
|
36
28
|
getObjectFlag,
|
|
37
29
|
isIterable,
|
|
38
|
-
} from '
|
|
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
|
-
|
|
45
|
+
SerovalSyncNode,
|
|
46
|
+
} from '../types';
|
|
55
47
|
import {
|
|
56
|
-
SerovalNodeType,
|
|
57
48
|
SerovalObjectRecordSpecialKey,
|
|
58
|
-
} from '
|
|
59
|
-
import {
|
|
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[]):
|
|
65
|
+
function generateNodeList(ctx: ParserContext, current: unknown[]): SerovalSyncNode[] {
|
|
64
66
|
const size = current.length;
|
|
65
|
-
const nodes = new Array<
|
|
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
|
-
|
|
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<
|
|
114
|
-
const valueNodes = new Array<
|
|
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
|
-
|
|
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<
|
|
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
|
-
|
|
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<
|
|
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<
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
):
|
|
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.
|
|
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
|
-
):
|
|
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 '
|
|
3
|
+
import type { ParserContext } from './context';
|
|
4
4
|
import { serializeString } from '../string';
|
|
5
|
-
import UnsupportedTypeError from '
|
|
5
|
+
import UnsupportedTypeError from '../UnsupportedTypeError';
|
|
6
6
|
import { serializeArrayBuffer } from './primitives';
|
|
7
7
|
import type {
|
|
8
8
|
SerovalBlobNode,
|
|
9
9
|
SerovalFileNode,
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
//
|
|
66
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
287
|
+
e: SerovalPlainRecordNode;
|
|
329
288
|
}
|
|
330
289
|
|
|
331
290
|
export interface SerovalFormDataNode extends SerovalBaseNode {
|
|
332
291
|
t: SerovalNodeType.FormData;
|
|
333
292
|
i: number;
|
|
334
|
-
|
|
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
|
|
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
|
+
}
|