seroval 0.5.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -1
- package/dist/cjs/development/index.cjs +762 -228
- package/dist/cjs/development/index.cjs.map +4 -4
- package/dist/cjs/production/index.cjs +3 -3
- package/dist/esm/development/index.mjs +762 -228
- package/dist/esm/development/index.mjs.map +4 -4
- package/dist/esm/production/index.mjs +3 -3
- package/dist/types/compat.d.ts +3 -2
- package/dist/types/context.d.ts +14 -9
- package/dist/types/index.d.ts +9 -9
- package/dist/types/string.d.ts +3 -0
- package/dist/types/tree/async.d.ts +1 -2
- package/dist/types/tree/deserialize.d.ts +1 -2
- package/dist/types/tree/primitives.d.ts +7 -3
- package/dist/types/tree/reference.d.ts +6 -0
- package/dist/types/tree/sync.d.ts +1 -2
- package/dist/types/tree/types.d.ts +73 -12
- package/dist/types/tree/web-api.d.ts +6 -0
- package/dist/types/types.d.ts +2 -1
- package/package.json +4 -3
- package/src/compat.ts +2 -1
- package/src/context.ts +19 -12
- package/src/index.ts +10 -16
- package/src/{quote.ts → string.ts} +27 -30
- package/src/tree/async.ts +164 -62
- package/src/tree/deserialize.ts +195 -67
- package/src/tree/primitives.ts +108 -22
- package/src/tree/reference.ts +61 -0
- package/src/tree/serialize.ts +236 -59
- package/src/tree/sync.ts +160 -55
- package/src/tree/types.ts +139 -14
- package/src/tree/web-api.ts +92 -0
- package/src/types.ts +6 -1
- package/dist/types/quote.d.ts +0 -2
package/src/tree/types.ts
CHANGED
|
@@ -11,7 +11,7 @@ export const enum SerovalNodeType {
|
|
|
11
11
|
NegativeInfinity,
|
|
12
12
|
NaN,
|
|
13
13
|
BigInt,
|
|
14
|
-
|
|
14
|
+
IndexedValue,
|
|
15
15
|
Date,
|
|
16
16
|
RegExp,
|
|
17
17
|
Set,
|
|
@@ -26,6 +26,15 @@ export const enum SerovalNodeType {
|
|
|
26
26
|
TypedArray,
|
|
27
27
|
BigIntTypedArray,
|
|
28
28
|
WKSymbol,
|
|
29
|
+
URL,
|
|
30
|
+
URLSearchParams,
|
|
31
|
+
Reference,
|
|
32
|
+
ArrayBuffer,
|
|
33
|
+
DataView,
|
|
34
|
+
Blob,
|
|
35
|
+
File,
|
|
36
|
+
Headers,
|
|
37
|
+
FormData,
|
|
29
38
|
}
|
|
30
39
|
|
|
31
40
|
export interface SerovalBaseNode {
|
|
@@ -35,11 +44,11 @@ export interface SerovalBaseNode {
|
|
|
35
44
|
i: number | undefined;
|
|
36
45
|
// Serialized value
|
|
37
46
|
s: any;
|
|
38
|
-
//
|
|
47
|
+
// size/length
|
|
39
48
|
l: number | undefined;
|
|
40
49
|
// Constructor name / RegExp source
|
|
41
50
|
c: string | undefined;
|
|
42
|
-
// message
|
|
51
|
+
// message/flags
|
|
43
52
|
m: string | undefined;
|
|
44
53
|
// dictionary
|
|
45
54
|
d: SerovalDictionaryNode | undefined;
|
|
@@ -47,6 +56,8 @@ export interface SerovalBaseNode {
|
|
|
47
56
|
a: SerovalNode[] | undefined;
|
|
48
57
|
// fulfilled node
|
|
49
58
|
f: SerovalNode | undefined;
|
|
59
|
+
// byte offset
|
|
60
|
+
b: number | undefined;
|
|
50
61
|
}
|
|
51
62
|
|
|
52
63
|
export interface SerovalObjectRecordNode {
|
|
@@ -115,24 +126,29 @@ export type SerovalPrimitiveNode =
|
|
|
115
126
|
| SerovalInfinityNode
|
|
116
127
|
| SerovalNaNNode;
|
|
117
128
|
|
|
118
|
-
export interface
|
|
119
|
-
t: SerovalNodeType.
|
|
129
|
+
export interface SerovalIndexedValueNode extends SerovalBaseNode {
|
|
130
|
+
t: SerovalNodeType.IndexedValue;
|
|
131
|
+
// id
|
|
120
132
|
i: number;
|
|
121
133
|
}
|
|
122
134
|
|
|
123
135
|
export interface SerovalBigIntNode extends SerovalBaseNode {
|
|
124
136
|
t: SerovalNodeType.BigInt;
|
|
137
|
+
// value in string
|
|
125
138
|
s: string;
|
|
126
139
|
}
|
|
127
140
|
|
|
128
141
|
export interface SerovalDateNode extends SerovalBaseNode {
|
|
129
142
|
t: SerovalNodeType.Date;
|
|
143
|
+
// id (Dates are stateful)
|
|
130
144
|
i: number;
|
|
145
|
+
// value in ISO string
|
|
131
146
|
s: string;
|
|
132
147
|
}
|
|
133
148
|
|
|
134
149
|
export interface SerovalRegExpNode extends SerovalBaseNode {
|
|
135
150
|
t: SerovalNodeType.RegExp;
|
|
151
|
+
// id (RegExp are stateful)
|
|
136
152
|
i: number;
|
|
137
153
|
// source
|
|
138
154
|
c: string;
|
|
@@ -140,20 +156,39 @@ export interface SerovalRegExpNode extends SerovalBaseNode {
|
|
|
140
156
|
m: string;
|
|
141
157
|
}
|
|
142
158
|
|
|
159
|
+
export interface SerovalArrayBufferNode extends SerovalBaseNode {
|
|
160
|
+
t: SerovalNodeType.ArrayBuffer;
|
|
161
|
+
// id
|
|
162
|
+
i: number;
|
|
163
|
+
// sequence in bytes
|
|
164
|
+
s: number[];
|
|
165
|
+
}
|
|
166
|
+
|
|
143
167
|
export interface SerovalTypedArrayNode extends SerovalBaseNode {
|
|
144
168
|
t: SerovalNodeType.TypedArray;
|
|
169
|
+
// id
|
|
145
170
|
i: number;
|
|
146
|
-
|
|
171
|
+
// length
|
|
147
172
|
l: number;
|
|
173
|
+
// TypedArray Constructor
|
|
148
174
|
c: string;
|
|
175
|
+
// ArrayBuffer reference
|
|
176
|
+
f: SerovalNode;
|
|
177
|
+
// Byte Offset
|
|
178
|
+
b: number;
|
|
149
179
|
}
|
|
150
180
|
|
|
151
181
|
export interface SerovalBigIntTypedArrayNode extends SerovalBaseNode {
|
|
152
182
|
t: SerovalNodeType.BigIntTypedArray;
|
|
153
183
|
i: number;
|
|
154
|
-
|
|
184
|
+
// length
|
|
155
185
|
l: number;
|
|
186
|
+
// TypedArray Constructor
|
|
156
187
|
c: string;
|
|
188
|
+
// ArrayBuffer reference
|
|
189
|
+
f: SerovalNode;
|
|
190
|
+
// Byte Offset
|
|
191
|
+
b: number;
|
|
157
192
|
}
|
|
158
193
|
|
|
159
194
|
export type SerovalSemiPrimitiveNode =
|
|
@@ -165,63 +200,78 @@ export type SerovalSemiPrimitiveNode =
|
|
|
165
200
|
|
|
166
201
|
export interface SerovalSetNode extends SerovalBaseNode {
|
|
167
202
|
t: SerovalNodeType.Set;
|
|
203
|
+
// id
|
|
204
|
+
i: number;
|
|
205
|
+
// Size of Set
|
|
168
206
|
l: number;
|
|
207
|
+
// Items in Set (as array)
|
|
169
208
|
a: SerovalNode[];
|
|
170
|
-
i: number;
|
|
171
209
|
}
|
|
172
210
|
|
|
173
211
|
export interface SerovalMapNode extends SerovalBaseNode {
|
|
174
212
|
t: SerovalNodeType.Map;
|
|
175
|
-
d: SerovalMapRecordNode;
|
|
176
213
|
i: number;
|
|
214
|
+
// key/value pairs
|
|
215
|
+
d: SerovalMapRecordNode;
|
|
177
216
|
}
|
|
178
217
|
|
|
179
218
|
export interface SerovalArrayNode extends SerovalBaseNode {
|
|
180
219
|
t: SerovalNodeType.Array;
|
|
220
|
+
// size of array
|
|
181
221
|
l: number;
|
|
222
|
+
// items
|
|
182
223
|
a: SerovalNode[];
|
|
183
224
|
i: number;
|
|
184
225
|
}
|
|
185
226
|
|
|
186
227
|
export interface SerovalObjectNode extends SerovalBaseNode {
|
|
187
228
|
t: SerovalNodeType.Object;
|
|
229
|
+
// key/value pairs
|
|
188
230
|
d: SerovalObjectRecordNode;
|
|
189
231
|
i: number;
|
|
190
232
|
}
|
|
191
233
|
|
|
192
234
|
export interface SerovalNullConstructorNode extends SerovalBaseNode {
|
|
193
235
|
t: SerovalNodeType.NullConstructor;
|
|
236
|
+
// key/value pairs
|
|
194
237
|
d: SerovalObjectRecordNode;
|
|
195
238
|
i: number;
|
|
196
239
|
}
|
|
197
240
|
|
|
198
241
|
export interface SerovalPromiseNode extends SerovalBaseNode {
|
|
199
242
|
t: SerovalNodeType.Promise;
|
|
243
|
+
// resolved value
|
|
200
244
|
f: SerovalNode;
|
|
201
245
|
i: number;
|
|
202
246
|
}
|
|
203
247
|
|
|
204
248
|
export interface SerovalErrorNode extends SerovalBaseNode {
|
|
205
249
|
t: SerovalNodeType.Error;
|
|
250
|
+
// constructor name
|
|
206
251
|
c: string;
|
|
252
|
+
// message
|
|
207
253
|
m: string;
|
|
254
|
+
// other properties
|
|
208
255
|
d: SerovalObjectRecordNode | undefined;
|
|
209
256
|
i: number;
|
|
210
257
|
}
|
|
211
258
|
|
|
212
259
|
export interface SerovalAggregateErrorNode extends SerovalBaseNode {
|
|
213
260
|
t: SerovalNodeType.AggregateError;
|
|
261
|
+
i: number;
|
|
262
|
+
// message
|
|
214
263
|
m: string;
|
|
264
|
+
// other properties
|
|
215
265
|
d: SerovalObjectRecordNode | undefined;
|
|
216
|
-
l: number;
|
|
217
|
-
a: SerovalNode[];
|
|
218
|
-
i: number;
|
|
219
266
|
}
|
|
220
267
|
|
|
221
268
|
export interface SerovalIterableNode extends SerovalBaseNode {
|
|
222
269
|
t: SerovalNodeType.Iterable;
|
|
270
|
+
// other properties
|
|
223
271
|
d: SerovalObjectRecordNode | undefined;
|
|
272
|
+
// number of emitted items
|
|
224
273
|
l: number;
|
|
274
|
+
// array of items
|
|
225
275
|
a: SerovalNode[];
|
|
226
276
|
i: number;
|
|
227
277
|
}
|
|
@@ -231,9 +281,75 @@ export interface SerovalWKSymbolNode extends SerovalBaseNode {
|
|
|
231
281
|
s: Symbols;
|
|
232
282
|
}
|
|
233
283
|
|
|
284
|
+
export interface SerovalURLNode extends SerovalBaseNode {
|
|
285
|
+
t: SerovalNodeType.URL;
|
|
286
|
+
i: number;
|
|
287
|
+
// raw URL
|
|
288
|
+
s: string;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
export interface SerovalURLSearchParamsNode extends SerovalBaseNode {
|
|
292
|
+
t: SerovalNodeType.URLSearchParams;
|
|
293
|
+
i: number;
|
|
294
|
+
// raw URL search params
|
|
295
|
+
s: string;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
export interface SerovalReferenceNode extends SerovalBaseNode {
|
|
299
|
+
t: SerovalNodeType.Reference;
|
|
300
|
+
i: number;
|
|
301
|
+
// id of the reference in the map
|
|
302
|
+
s: string;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
export interface SerovalDataViewNode extends SerovalBaseNode {
|
|
306
|
+
t: SerovalNodeType.DataView;
|
|
307
|
+
i: number;
|
|
308
|
+
// byte length
|
|
309
|
+
l: number;
|
|
310
|
+
// reference to array buffer
|
|
311
|
+
f: SerovalNode;
|
|
312
|
+
// byte offset
|
|
313
|
+
b: number;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
export interface SerovalBlobNode extends SerovalBaseNode {
|
|
317
|
+
t: SerovalNodeType.Blob;
|
|
318
|
+
i: number;
|
|
319
|
+
// file type
|
|
320
|
+
c: string;
|
|
321
|
+
// reference to array buffer
|
|
322
|
+
f: SerovalNode;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
export interface SerovalFileNode extends SerovalBaseNode {
|
|
326
|
+
t: SerovalNodeType.File;
|
|
327
|
+
i: number;
|
|
328
|
+
// file type
|
|
329
|
+
c: string;
|
|
330
|
+
// file name
|
|
331
|
+
m: string;
|
|
332
|
+
// reference to array buffer
|
|
333
|
+
f: SerovalNode;
|
|
334
|
+
// last modified
|
|
335
|
+
b: number;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
export interface SerovalHeadersNode extends SerovalBaseNode {
|
|
339
|
+
t: SerovalNodeType.Headers;
|
|
340
|
+
i: number;
|
|
341
|
+
d: SerovalObjectRecordNode;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
export interface SerovalFormDataNode extends SerovalBaseNode {
|
|
345
|
+
t: SerovalNodeType.FormData;
|
|
346
|
+
i: number;
|
|
347
|
+
d: SerovalObjectRecordNode;
|
|
348
|
+
}
|
|
349
|
+
|
|
234
350
|
export type SerovalNode =
|
|
235
351
|
| SerovalPrimitiveNode
|
|
236
|
-
|
|
|
352
|
+
| SerovalIndexedValueNode
|
|
237
353
|
| SerovalSemiPrimitiveNode
|
|
238
354
|
| SerovalSetNode
|
|
239
355
|
| SerovalMapNode
|
|
@@ -244,4 +360,13 @@ export type SerovalNode =
|
|
|
244
360
|
| SerovalErrorNode
|
|
245
361
|
| SerovalAggregateErrorNode
|
|
246
362
|
| SerovalIterableNode
|
|
247
|
-
| SerovalWKSymbolNode
|
|
363
|
+
| SerovalWKSymbolNode
|
|
364
|
+
| SerovalURLNode
|
|
365
|
+
| SerovalURLSearchParamsNode
|
|
366
|
+
| SerovalReferenceNode
|
|
367
|
+
| SerovalArrayBufferNode
|
|
368
|
+
| SerovalDataViewNode
|
|
369
|
+
| SerovalBlobNode
|
|
370
|
+
| SerovalFileNode
|
|
371
|
+
| SerovalHeadersNode
|
|
372
|
+
| SerovalFormDataNode;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import assert from '../assert';
|
|
2
|
+
import { Feature } from '../compat';
|
|
3
|
+
import { ParserContext } from '../context';
|
|
4
|
+
import { serializeString } from '../string';
|
|
5
|
+
import { serializeArrayBuffer } from './primitives';
|
|
6
|
+
import {
|
|
7
|
+
SerovalBlobNode,
|
|
8
|
+
SerovalFileNode,
|
|
9
|
+
SerovalNodeType,
|
|
10
|
+
SerovalURLNode,
|
|
11
|
+
SerovalURLSearchParamsNode,
|
|
12
|
+
} from './types';
|
|
13
|
+
|
|
14
|
+
export function createURLNode(
|
|
15
|
+
ctx: ParserContext,
|
|
16
|
+
id: number,
|
|
17
|
+
current: URL,
|
|
18
|
+
): SerovalURLNode {
|
|
19
|
+
assert(ctx.features & Feature.WebAPI, 'Unsupported type "URL"');
|
|
20
|
+
return {
|
|
21
|
+
t: SerovalNodeType.URL,
|
|
22
|
+
i: id,
|
|
23
|
+
s: serializeString(current.href),
|
|
24
|
+
l: undefined,
|
|
25
|
+
c: undefined,
|
|
26
|
+
m: undefined,
|
|
27
|
+
d: undefined,
|
|
28
|
+
f: undefined,
|
|
29
|
+
a: undefined,
|
|
30
|
+
b: undefined,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function createURLSearchParamsNode(
|
|
35
|
+
ctx: ParserContext,
|
|
36
|
+
id: number,
|
|
37
|
+
current: URLSearchParams,
|
|
38
|
+
): SerovalURLSearchParamsNode {
|
|
39
|
+
assert(ctx.features & Feature.WebAPI, 'Unsupported type "URLSearchParams"');
|
|
40
|
+
return {
|
|
41
|
+
t: SerovalNodeType.URLSearchParams,
|
|
42
|
+
i: id,
|
|
43
|
+
s: serializeString(current.toString()),
|
|
44
|
+
l: undefined,
|
|
45
|
+
c: undefined,
|
|
46
|
+
m: undefined,
|
|
47
|
+
d: undefined,
|
|
48
|
+
f: undefined,
|
|
49
|
+
a: undefined,
|
|
50
|
+
b: undefined,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export async function createBlobNode(
|
|
55
|
+
ctx: ParserContext,
|
|
56
|
+
id: number,
|
|
57
|
+
current: Blob,
|
|
58
|
+
): Promise<SerovalBlobNode> {
|
|
59
|
+
assert(ctx.features & Feature.WebAPI, 'Unsupported type "Blob"');
|
|
60
|
+
return {
|
|
61
|
+
t: SerovalNodeType.Blob,
|
|
62
|
+
i: id,
|
|
63
|
+
s: undefined,
|
|
64
|
+
l: undefined,
|
|
65
|
+
c: serializeString(current.type),
|
|
66
|
+
m: undefined,
|
|
67
|
+
d: undefined,
|
|
68
|
+
f: serializeArrayBuffer(ctx, await current.arrayBuffer()),
|
|
69
|
+
a: undefined,
|
|
70
|
+
b: undefined,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export async function createFileNode(
|
|
75
|
+
ctx: ParserContext,
|
|
76
|
+
id: number,
|
|
77
|
+
current: File,
|
|
78
|
+
): Promise<SerovalFileNode> {
|
|
79
|
+
assert(ctx.features & Feature.WebAPI, 'Unsupported type "File"');
|
|
80
|
+
return {
|
|
81
|
+
t: SerovalNodeType.File,
|
|
82
|
+
i: id,
|
|
83
|
+
s: undefined,
|
|
84
|
+
l: undefined,
|
|
85
|
+
c: serializeString(current.type),
|
|
86
|
+
m: serializeString(current.name),
|
|
87
|
+
d: undefined,
|
|
88
|
+
f: serializeArrayBuffer(ctx, await current.arrayBuffer()),
|
|
89
|
+
a: undefined,
|
|
90
|
+
b: current.lastModified,
|
|
91
|
+
};
|
|
92
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -34,12 +34,17 @@ export type BigIntTypedArrayValue =
|
|
|
34
34
|
| BigInt64Array
|
|
35
35
|
| BigUint64Array;
|
|
36
36
|
|
|
37
|
+
export type WebAPIValue =
|
|
38
|
+
| URL
|
|
39
|
+
| URLSearchParams;
|
|
40
|
+
|
|
37
41
|
export type SemiPrimitiveValue =
|
|
38
42
|
| RegExp
|
|
39
43
|
| Date
|
|
40
44
|
| TypedArrayValue
|
|
41
45
|
| BigIntTypedArrayValue
|
|
42
|
-
| bigint
|
|
46
|
+
| bigint
|
|
47
|
+
| WebAPIValue;
|
|
43
48
|
|
|
44
49
|
export type CommonServerValue =
|
|
45
50
|
| PrimitiveValue
|
package/dist/types/quote.d.ts
DELETED