seroval 0.7.0 → 0.9.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/dist/cjs/development/index.cjs +1247 -1069
- package/dist/cjs/development/index.cjs.map +4 -4
- package/dist/cjs/production/index.cjs +3 -3
- package/dist/esm/development/index.mjs +1247 -1069
- package/dist/esm/development/index.mjs.map +4 -4
- package/dist/esm/production/index.mjs +3 -3
- package/dist/types/assert.d.ts +1 -1
- package/dist/types/context.d.ts +8 -2
- package/dist/types/index.d.ts +3 -4
- package/dist/types/string.d.ts +1 -1
- package/dist/types/tree/UnsupportedTypeError.d.ts +3 -0
- package/dist/types/tree/async.d.ts +3 -3
- package/dist/types/tree/constants.d.ts +11 -0
- package/dist/types/tree/deserialize.d.ts +2 -2
- package/dist/types/tree/primitives.d.ts +9 -15
- package/dist/types/tree/serialize.d.ts +2 -2
- package/dist/types/tree/shared.d.ts +12 -8
- package/dist/types/tree/sync.d.ts +3 -3
- package/dist/types/tree/types.d.ts +74 -71
- package/dist/types/tree/web-api.d.ts +2 -2
- package/dist/types/types.d.ts +4 -4
- package/package.json +11 -9
- package/src/assert.ts +2 -2
- package/src/compat.ts +0 -1
- package/src/context.ts +20 -7
- package/src/get-identifier.ts +1 -1
- package/src/index.ts +35 -26
- package/src/string.ts +2 -2
- package/src/tree/UnsupportedTypeError.ts +8 -0
- package/src/tree/async.ts +256 -233
- package/src/tree/constants.ts +73 -0
- package/src/tree/deserialize.ts +112 -93
- package/src/tree/primitives.ts +93 -134
- package/src/tree/reference.ts +3 -3
- package/src/tree/serialize.ts +307 -201
- package/src/tree/shared.ts +45 -22
- package/src/tree/symbols.ts +13 -13
- package/src/tree/sync.ts +236 -198
- package/src/tree/types.ts +87 -94
- package/src/tree/web-api.ts +14 -7
- package/src/types.ts +7 -3
- package/src/tree/iterator.ts +0 -14
package/src/tree/types.ts
CHANGED
|
@@ -1,40 +1,52 @@
|
|
|
1
|
-
import { Symbols } from './symbols';
|
|
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
|
+
}
|
|
2
13
|
|
|
3
14
|
export const enum SerovalNodeType {
|
|
4
|
-
Number,
|
|
5
|
-
String,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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,
|
|
38
50
|
}
|
|
39
51
|
|
|
40
52
|
export interface SerovalBaseNode {
|
|
@@ -43,7 +55,7 @@ export interface SerovalBaseNode {
|
|
|
43
55
|
// Reference ID
|
|
44
56
|
i: number | undefined;
|
|
45
57
|
// Serialized value
|
|
46
|
-
s:
|
|
58
|
+
s: unknown;
|
|
47
59
|
// size/length
|
|
48
60
|
l: number | undefined;
|
|
49
61
|
// Constructor name / RegExp source
|
|
@@ -51,31 +63,43 @@ export interface SerovalBaseNode {
|
|
|
51
63
|
// message/flags
|
|
52
64
|
m: string | undefined;
|
|
53
65
|
// dictionary
|
|
54
|
-
d:
|
|
66
|
+
d: SerovalObjectRecordNode | SerovalMapRecordNode | undefined;
|
|
55
67
|
// array of nodes
|
|
56
|
-
a: SerovalNode[] | undefined;
|
|
68
|
+
a: (SerovalNode | undefined)[] | undefined;
|
|
57
69
|
// fulfilled node
|
|
58
70
|
f: SerovalNode | undefined;
|
|
59
|
-
// byte offset
|
|
71
|
+
// byte offset/object flags
|
|
60
72
|
b: number | undefined;
|
|
73
|
+
// object flag
|
|
74
|
+
o: SerovalObjectFlags | undefined;
|
|
61
75
|
}
|
|
62
76
|
|
|
63
|
-
export
|
|
77
|
+
export const enum SerovalObjectRecordSpecialKey {
|
|
78
|
+
SymbolIterator = 0,
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export type SerovalObjectRecordKey =
|
|
82
|
+
| string
|
|
83
|
+
| SerovalObjectRecordSpecialKey;
|
|
84
|
+
|
|
85
|
+
export interface SerovalPlainRecordNode {
|
|
64
86
|
k: string[];
|
|
65
87
|
v: SerovalNode[];
|
|
66
88
|
s: number;
|
|
67
89
|
}
|
|
68
90
|
|
|
91
|
+
export interface SerovalObjectRecordNode {
|
|
92
|
+
k: SerovalObjectRecordKey[];
|
|
93
|
+
v: SerovalNode[];
|
|
94
|
+
s: number;
|
|
95
|
+
}
|
|
96
|
+
|
|
69
97
|
export interface SerovalMapRecordNode {
|
|
70
98
|
k: SerovalNode[];
|
|
71
99
|
v: SerovalNode[];
|
|
72
100
|
s: number;
|
|
73
101
|
}
|
|
74
102
|
|
|
75
|
-
export type SerovalDictionaryNode =
|
|
76
|
-
| SerovalObjectRecordNode
|
|
77
|
-
| SerovalMapRecordNode;
|
|
78
|
-
|
|
79
103
|
export interface SerovalNumberNode extends SerovalBaseNode {
|
|
80
104
|
t: SerovalNodeType.Number;
|
|
81
105
|
s: number;
|
|
@@ -86,45 +110,15 @@ export interface SerovalStringNode extends SerovalBaseNode {
|
|
|
86
110
|
s: string;
|
|
87
111
|
}
|
|
88
112
|
|
|
89
|
-
export interface
|
|
90
|
-
t: SerovalNodeType.
|
|
91
|
-
s:
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export interface SerovalNullNode extends SerovalBaseNode {
|
|
95
|
-
t: SerovalNodeType.Null;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
export interface SerovalUndefinedNode extends SerovalBaseNode {
|
|
99
|
-
t: SerovalNodeType.Undefined;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export interface SerovalNegativeZeroNode extends SerovalBaseNode {
|
|
103
|
-
t: SerovalNodeType.NegativeZero;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
export interface SerovalInfinityNode extends SerovalBaseNode {
|
|
107
|
-
t: SerovalNodeType.Infinity;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export interface SerovalNegativeInfinityNode extends SerovalBaseNode {
|
|
111
|
-
t: SerovalNodeType.NegativeInfinity;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
export interface SerovalNaNNode extends SerovalBaseNode {
|
|
115
|
-
t: SerovalNodeType.NaN;
|
|
113
|
+
export interface SerovalConstantNode extends SerovalBaseNode {
|
|
114
|
+
t: SerovalNodeType.Constant;
|
|
115
|
+
s: SerovalConstant;
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
export type SerovalPrimitiveNode =
|
|
119
119
|
| SerovalNumberNode
|
|
120
120
|
| SerovalStringNode
|
|
121
|
-
|
|
|
122
|
-
| SerovalNullNode
|
|
123
|
-
| SerovalUndefinedNode
|
|
124
|
-
| SerovalNegativeZeroNode
|
|
125
|
-
| SerovalNegativeInfinityNode
|
|
126
|
-
| SerovalInfinityNode
|
|
127
|
-
| SerovalNaNNode;
|
|
121
|
+
| SerovalConstantNode;
|
|
128
122
|
|
|
129
123
|
export interface SerovalIndexedValueNode extends SerovalBaseNode {
|
|
130
124
|
t: SerovalNodeType.IndexedValue;
|
|
@@ -220,8 +214,9 @@ export interface SerovalArrayNode extends SerovalBaseNode {
|
|
|
220
214
|
// size of array
|
|
221
215
|
l: number;
|
|
222
216
|
// items
|
|
223
|
-
a: SerovalNode[];
|
|
217
|
+
a: (SerovalNode | undefined)[];
|
|
224
218
|
i: number;
|
|
219
|
+
o: SerovalObjectFlags;
|
|
225
220
|
}
|
|
226
221
|
|
|
227
222
|
export interface SerovalObjectNode extends SerovalBaseNode {
|
|
@@ -229,6 +224,7 @@ export interface SerovalObjectNode extends SerovalBaseNode {
|
|
|
229
224
|
// key/value pairs
|
|
230
225
|
d: SerovalObjectRecordNode;
|
|
231
226
|
i: number;
|
|
227
|
+
o: SerovalObjectFlags;
|
|
232
228
|
}
|
|
233
229
|
|
|
234
230
|
export interface SerovalNullConstructorNode extends SerovalBaseNode {
|
|
@@ -236,6 +232,7 @@ export interface SerovalNullConstructorNode extends SerovalBaseNode {
|
|
|
236
232
|
// key/value pairs
|
|
237
233
|
d: SerovalObjectRecordNode;
|
|
238
234
|
i: number;
|
|
235
|
+
o: SerovalObjectFlags;
|
|
239
236
|
}
|
|
240
237
|
|
|
241
238
|
export interface SerovalPromiseNode extends SerovalBaseNode {
|
|
@@ -265,19 +262,9 @@ export interface SerovalAggregateErrorNode extends SerovalBaseNode {
|
|
|
265
262
|
d: SerovalObjectRecordNode | undefined;
|
|
266
263
|
}
|
|
267
264
|
|
|
268
|
-
export interface SerovalIterableNode extends SerovalBaseNode {
|
|
269
|
-
t: SerovalNodeType.Iterable;
|
|
270
|
-
// other properties
|
|
271
|
-
d: SerovalObjectRecordNode | undefined;
|
|
272
|
-
// number of emitted items
|
|
273
|
-
l: number;
|
|
274
|
-
// array of items
|
|
275
|
-
a: SerovalNode[];
|
|
276
|
-
i: number;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
265
|
export interface SerovalWKSymbolNode extends SerovalBaseNode {
|
|
280
266
|
t: SerovalNodeType.WKSymbol;
|
|
267
|
+
i: number;
|
|
281
268
|
s: Symbols;
|
|
282
269
|
}
|
|
283
270
|
|
|
@@ -338,13 +325,19 @@ export interface SerovalFileNode extends SerovalBaseNode {
|
|
|
338
325
|
export interface SerovalHeadersNode extends SerovalBaseNode {
|
|
339
326
|
t: SerovalNodeType.Headers;
|
|
340
327
|
i: number;
|
|
341
|
-
d:
|
|
328
|
+
d: SerovalPlainRecordNode;
|
|
342
329
|
}
|
|
343
330
|
|
|
344
331
|
export interface SerovalFormDataNode extends SerovalBaseNode {
|
|
345
332
|
t: SerovalNodeType.FormData;
|
|
346
333
|
i: number;
|
|
347
|
-
d:
|
|
334
|
+
d: SerovalPlainRecordNode;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
export interface SerovalBoxedNode extends SerovalBaseNode {
|
|
338
|
+
t: SerovalNodeType.Boxed;
|
|
339
|
+
i: number;
|
|
340
|
+
f: SerovalNode;
|
|
348
341
|
}
|
|
349
342
|
|
|
350
343
|
export type SerovalNode =
|
|
@@ -359,7 +352,6 @@ export type SerovalNode =
|
|
|
359
352
|
| SerovalPromiseNode
|
|
360
353
|
| SerovalErrorNode
|
|
361
354
|
| SerovalAggregateErrorNode
|
|
362
|
-
| SerovalIterableNode
|
|
363
355
|
| SerovalWKSymbolNode
|
|
364
356
|
| SerovalURLNode
|
|
365
357
|
| SerovalURLSearchParamsNode
|
|
@@ -369,4 +361,5 @@ export type SerovalNode =
|
|
|
369
361
|
| SerovalBlobNode
|
|
370
362
|
| SerovalFileNode
|
|
371
363
|
| SerovalHeadersNode
|
|
372
|
-
| SerovalFormDataNode
|
|
364
|
+
| SerovalFormDataNode
|
|
365
|
+
| SerovalBoxedNode;
|
package/src/tree/web-api.ts
CHANGED
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import assert from '../assert';
|
|
2
2
|
import { Feature } from '../compat';
|
|
3
|
-
import { ParserContext } from '../context';
|
|
3
|
+
import type { ParserContext } from '../context';
|
|
4
4
|
import { serializeString } from '../string';
|
|
5
|
+
import UnsupportedTypeError from './UnsupportedTypeError';
|
|
5
6
|
import { serializeArrayBuffer } from './primitives';
|
|
6
|
-
import {
|
|
7
|
+
import type {
|
|
7
8
|
SerovalBlobNode,
|
|
8
9
|
SerovalFileNode,
|
|
9
|
-
SerovalNodeType,
|
|
10
10
|
SerovalURLNode,
|
|
11
11
|
SerovalURLSearchParamsNode,
|
|
12
12
|
} from './types';
|
|
13
|
+
import {
|
|
14
|
+
SerovalNodeType,
|
|
15
|
+
} from './types';
|
|
13
16
|
|
|
14
17
|
export function createURLNode(
|
|
15
18
|
ctx: ParserContext,
|
|
16
19
|
id: number,
|
|
17
20
|
current: URL,
|
|
18
21
|
): SerovalURLNode {
|
|
19
|
-
assert(ctx.features & Feature.WebAPI,
|
|
22
|
+
assert(ctx.features & Feature.WebAPI, new UnsupportedTypeError(current));
|
|
20
23
|
return {
|
|
21
24
|
t: SerovalNodeType.URL,
|
|
22
25
|
i: id,
|
|
@@ -28,6 +31,7 @@ export function createURLNode(
|
|
|
28
31
|
f: undefined,
|
|
29
32
|
a: undefined,
|
|
30
33
|
b: undefined,
|
|
34
|
+
o: undefined,
|
|
31
35
|
};
|
|
32
36
|
}
|
|
33
37
|
|
|
@@ -36,7 +40,7 @@ export function createURLSearchParamsNode(
|
|
|
36
40
|
id: number,
|
|
37
41
|
current: URLSearchParams,
|
|
38
42
|
): SerovalURLSearchParamsNode {
|
|
39
|
-
assert(ctx.features & Feature.WebAPI,
|
|
43
|
+
assert(ctx.features & Feature.WebAPI, new UnsupportedTypeError(current));
|
|
40
44
|
return {
|
|
41
45
|
t: SerovalNodeType.URLSearchParams,
|
|
42
46
|
i: id,
|
|
@@ -48,6 +52,7 @@ export function createURLSearchParamsNode(
|
|
|
48
52
|
f: undefined,
|
|
49
53
|
a: undefined,
|
|
50
54
|
b: undefined,
|
|
55
|
+
o: undefined,
|
|
51
56
|
};
|
|
52
57
|
}
|
|
53
58
|
|
|
@@ -56,7 +61,7 @@ export async function createBlobNode(
|
|
|
56
61
|
id: number,
|
|
57
62
|
current: Blob,
|
|
58
63
|
): Promise<SerovalBlobNode> {
|
|
59
|
-
assert(ctx.features & Feature.WebAPI,
|
|
64
|
+
assert(ctx.features & Feature.WebAPI, new UnsupportedTypeError(current));
|
|
60
65
|
return {
|
|
61
66
|
t: SerovalNodeType.Blob,
|
|
62
67
|
i: id,
|
|
@@ -68,6 +73,7 @@ export async function createBlobNode(
|
|
|
68
73
|
f: serializeArrayBuffer(ctx, await current.arrayBuffer()),
|
|
69
74
|
a: undefined,
|
|
70
75
|
b: undefined,
|
|
76
|
+
o: undefined,
|
|
71
77
|
};
|
|
72
78
|
}
|
|
73
79
|
|
|
@@ -76,7 +82,7 @@ export async function createFileNode(
|
|
|
76
82
|
id: number,
|
|
77
83
|
current: File,
|
|
78
84
|
): Promise<SerovalFileNode> {
|
|
79
|
-
assert(ctx.features & Feature.WebAPI,
|
|
85
|
+
assert(ctx.features & Feature.WebAPI, new UnsupportedTypeError(current));
|
|
80
86
|
return {
|
|
81
87
|
t: SerovalNodeType.File,
|
|
82
88
|
i: id,
|
|
@@ -88,5 +94,6 @@ export async function createFileNode(
|
|
|
88
94
|
f: serializeArrayBuffer(ctx, await current.arrayBuffer()),
|
|
89
95
|
a: undefined,
|
|
90
96
|
b: current.lastModified,
|
|
97
|
+
o: undefined,
|
|
91
98
|
};
|
|
92
99
|
}
|
package/src/types.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WellKnownSymbols } from './tree/symbols';
|
|
1
|
+
import type { WellKnownSymbols } from './tree/symbols';
|
|
2
2
|
|
|
3
3
|
// Values that are non-recursive
|
|
4
4
|
export type PrimitiveValue =
|
|
@@ -36,11 +36,15 @@ export type BigIntTypedArrayValue =
|
|
|
36
36
|
|
|
37
37
|
export type WebAPIValue =
|
|
38
38
|
| URL
|
|
39
|
-
| URLSearchParams
|
|
39
|
+
| URLSearchParams
|
|
40
|
+
| Blob
|
|
41
|
+
| File;
|
|
40
42
|
|
|
41
43
|
export type SemiPrimitiveValue =
|
|
42
44
|
| RegExp
|
|
43
45
|
| Date
|
|
46
|
+
| ArrayBuffer
|
|
47
|
+
| DataView
|
|
44
48
|
| TypedArrayValue
|
|
45
49
|
| BigIntTypedArrayValue
|
|
46
50
|
| bigint
|
|
@@ -70,7 +74,7 @@ export type AsyncServerValue =
|
|
|
70
74
|
| { readonly [key: string | number]: AsyncServerValue }
|
|
71
75
|
| Set<AsyncServerValue>
|
|
72
76
|
| Map<AsyncServerValue, AsyncServerValue>
|
|
73
|
-
|
|
|
77
|
+
| Promise<AsyncServerValue>;
|
|
74
78
|
|
|
75
79
|
export type NonPrimitiveServerValue<T> =
|
|
76
80
|
T extends PrimitiveValue
|
package/src/tree/iterator.ts
DELETED