seroval 0.6.0 → 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 +15 -3
- package/dist/cjs/development/index.cjs +550 -180
- package/dist/cjs/development/index.cjs.map +4 -4
- package/dist/cjs/production/index.cjs +3 -3
- package/dist/esm/development/index.mjs +550 -180
- package/dist/esm/development/index.mjs.map +4 -4
- package/dist/esm/production/index.mjs +3 -3
- package/dist/types/compat.d.ts +1 -1
- package/dist/types/context.d.ts +11 -5
- package/dist/types/string.d.ts +3 -0
- package/dist/types/tree/primitives.d.ts +4 -1
- package/dist/types/tree/types.d.ts +52 -9
- package/dist/types/tree/web-api.d.ts +3 -1
- package/package.json +3 -2
- package/src/compat.ts +1 -1
- package/src/context.ts +14 -6
- package/src/{quote.ts → string.ts} +27 -30
- package/src/tree/async.ts +87 -8
- package/src/tree/deserialize.ts +176 -59
- package/src/tree/primitives.ts +84 -20
- package/src/tree/serialize.ts +211 -41
- package/src/tree/sync.ts +76 -7
- package/src/tree/types.ts +111 -10
- package/src/tree/web-api.ts +53 -3
- package/dist/types/quote.d.ts +0 -2
package/src/tree/types.ts
CHANGED
|
@@ -29,6 +29,12 @@ export const enum SerovalNodeType {
|
|
|
29
29
|
URL,
|
|
30
30
|
URLSearchParams,
|
|
31
31
|
Reference,
|
|
32
|
+
ArrayBuffer,
|
|
33
|
+
DataView,
|
|
34
|
+
Blob,
|
|
35
|
+
File,
|
|
36
|
+
Headers,
|
|
37
|
+
FormData,
|
|
32
38
|
}
|
|
33
39
|
|
|
34
40
|
export interface SerovalBaseNode {
|
|
@@ -38,11 +44,11 @@ export interface SerovalBaseNode {
|
|
|
38
44
|
i: number | undefined;
|
|
39
45
|
// Serialized value
|
|
40
46
|
s: any;
|
|
41
|
-
//
|
|
47
|
+
// size/length
|
|
42
48
|
l: number | undefined;
|
|
43
49
|
// Constructor name / RegExp source
|
|
44
50
|
c: string | undefined;
|
|
45
|
-
// message
|
|
51
|
+
// message/flags
|
|
46
52
|
m: string | undefined;
|
|
47
53
|
// dictionary
|
|
48
54
|
d: SerovalDictionaryNode | undefined;
|
|
@@ -50,6 +56,8 @@ export interface SerovalBaseNode {
|
|
|
50
56
|
a: SerovalNode[] | undefined;
|
|
51
57
|
// fulfilled node
|
|
52
58
|
f: SerovalNode | undefined;
|
|
59
|
+
// byte offset
|
|
60
|
+
b: number | undefined;
|
|
53
61
|
}
|
|
54
62
|
|
|
55
63
|
export interface SerovalObjectRecordNode {
|
|
@@ -120,22 +128,27 @@ export type SerovalPrimitiveNode =
|
|
|
120
128
|
|
|
121
129
|
export interface SerovalIndexedValueNode extends SerovalBaseNode {
|
|
122
130
|
t: SerovalNodeType.IndexedValue;
|
|
131
|
+
// id
|
|
123
132
|
i: number;
|
|
124
133
|
}
|
|
125
134
|
|
|
126
135
|
export interface SerovalBigIntNode extends SerovalBaseNode {
|
|
127
136
|
t: SerovalNodeType.BigInt;
|
|
137
|
+
// value in string
|
|
128
138
|
s: string;
|
|
129
139
|
}
|
|
130
140
|
|
|
131
141
|
export interface SerovalDateNode extends SerovalBaseNode {
|
|
132
142
|
t: SerovalNodeType.Date;
|
|
143
|
+
// id (Dates are stateful)
|
|
133
144
|
i: number;
|
|
145
|
+
// value in ISO string
|
|
134
146
|
s: string;
|
|
135
147
|
}
|
|
136
148
|
|
|
137
149
|
export interface SerovalRegExpNode extends SerovalBaseNode {
|
|
138
150
|
t: SerovalNodeType.RegExp;
|
|
151
|
+
// id (RegExp are stateful)
|
|
139
152
|
i: number;
|
|
140
153
|
// source
|
|
141
154
|
c: string;
|
|
@@ -143,20 +156,39 @@ export interface SerovalRegExpNode extends SerovalBaseNode {
|
|
|
143
156
|
m: string;
|
|
144
157
|
}
|
|
145
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
|
+
|
|
146
167
|
export interface SerovalTypedArrayNode extends SerovalBaseNode {
|
|
147
168
|
t: SerovalNodeType.TypedArray;
|
|
169
|
+
// id
|
|
148
170
|
i: number;
|
|
149
|
-
|
|
171
|
+
// length
|
|
150
172
|
l: number;
|
|
173
|
+
// TypedArray Constructor
|
|
151
174
|
c: string;
|
|
175
|
+
// ArrayBuffer reference
|
|
176
|
+
f: SerovalNode;
|
|
177
|
+
// Byte Offset
|
|
178
|
+
b: number;
|
|
152
179
|
}
|
|
153
180
|
|
|
154
181
|
export interface SerovalBigIntTypedArrayNode extends SerovalBaseNode {
|
|
155
182
|
t: SerovalNodeType.BigIntTypedArray;
|
|
156
183
|
i: number;
|
|
157
|
-
|
|
184
|
+
// length
|
|
158
185
|
l: number;
|
|
186
|
+
// TypedArray Constructor
|
|
159
187
|
c: string;
|
|
188
|
+
// ArrayBuffer reference
|
|
189
|
+
f: SerovalNode;
|
|
190
|
+
// Byte Offset
|
|
191
|
+
b: number;
|
|
160
192
|
}
|
|
161
193
|
|
|
162
194
|
export type SerovalSemiPrimitiveNode =
|
|
@@ -168,63 +200,78 @@ export type SerovalSemiPrimitiveNode =
|
|
|
168
200
|
|
|
169
201
|
export interface SerovalSetNode extends SerovalBaseNode {
|
|
170
202
|
t: SerovalNodeType.Set;
|
|
203
|
+
// id
|
|
204
|
+
i: number;
|
|
205
|
+
// Size of Set
|
|
171
206
|
l: number;
|
|
207
|
+
// Items in Set (as array)
|
|
172
208
|
a: SerovalNode[];
|
|
173
|
-
i: number;
|
|
174
209
|
}
|
|
175
210
|
|
|
176
211
|
export interface SerovalMapNode extends SerovalBaseNode {
|
|
177
212
|
t: SerovalNodeType.Map;
|
|
178
|
-
d: SerovalMapRecordNode;
|
|
179
213
|
i: number;
|
|
214
|
+
// key/value pairs
|
|
215
|
+
d: SerovalMapRecordNode;
|
|
180
216
|
}
|
|
181
217
|
|
|
182
218
|
export interface SerovalArrayNode extends SerovalBaseNode {
|
|
183
219
|
t: SerovalNodeType.Array;
|
|
220
|
+
// size of array
|
|
184
221
|
l: number;
|
|
222
|
+
// items
|
|
185
223
|
a: SerovalNode[];
|
|
186
224
|
i: number;
|
|
187
225
|
}
|
|
188
226
|
|
|
189
227
|
export interface SerovalObjectNode extends SerovalBaseNode {
|
|
190
228
|
t: SerovalNodeType.Object;
|
|
229
|
+
// key/value pairs
|
|
191
230
|
d: SerovalObjectRecordNode;
|
|
192
231
|
i: number;
|
|
193
232
|
}
|
|
194
233
|
|
|
195
234
|
export interface SerovalNullConstructorNode extends SerovalBaseNode {
|
|
196
235
|
t: SerovalNodeType.NullConstructor;
|
|
236
|
+
// key/value pairs
|
|
197
237
|
d: SerovalObjectRecordNode;
|
|
198
238
|
i: number;
|
|
199
239
|
}
|
|
200
240
|
|
|
201
241
|
export interface SerovalPromiseNode extends SerovalBaseNode {
|
|
202
242
|
t: SerovalNodeType.Promise;
|
|
243
|
+
// resolved value
|
|
203
244
|
f: SerovalNode;
|
|
204
245
|
i: number;
|
|
205
246
|
}
|
|
206
247
|
|
|
207
248
|
export interface SerovalErrorNode extends SerovalBaseNode {
|
|
208
249
|
t: SerovalNodeType.Error;
|
|
250
|
+
// constructor name
|
|
209
251
|
c: string;
|
|
252
|
+
// message
|
|
210
253
|
m: string;
|
|
254
|
+
// other properties
|
|
211
255
|
d: SerovalObjectRecordNode | undefined;
|
|
212
256
|
i: number;
|
|
213
257
|
}
|
|
214
258
|
|
|
215
259
|
export interface SerovalAggregateErrorNode extends SerovalBaseNode {
|
|
216
260
|
t: SerovalNodeType.AggregateError;
|
|
261
|
+
i: number;
|
|
262
|
+
// message
|
|
217
263
|
m: string;
|
|
264
|
+
// other properties
|
|
218
265
|
d: SerovalObjectRecordNode | undefined;
|
|
219
|
-
l: number;
|
|
220
|
-
a: SerovalNode[];
|
|
221
|
-
i: number;
|
|
222
266
|
}
|
|
223
267
|
|
|
224
268
|
export interface SerovalIterableNode extends SerovalBaseNode {
|
|
225
269
|
t: SerovalNodeType.Iterable;
|
|
270
|
+
// other properties
|
|
226
271
|
d: SerovalObjectRecordNode | undefined;
|
|
272
|
+
// number of emitted items
|
|
227
273
|
l: number;
|
|
274
|
+
// array of items
|
|
228
275
|
a: SerovalNode[];
|
|
229
276
|
i: number;
|
|
230
277
|
}
|
|
@@ -237,21 +284,69 @@ export interface SerovalWKSymbolNode extends SerovalBaseNode {
|
|
|
237
284
|
export interface SerovalURLNode extends SerovalBaseNode {
|
|
238
285
|
t: SerovalNodeType.URL;
|
|
239
286
|
i: number;
|
|
287
|
+
// raw URL
|
|
240
288
|
s: string;
|
|
241
289
|
}
|
|
242
290
|
|
|
243
291
|
export interface SerovalURLSearchParamsNode extends SerovalBaseNode {
|
|
244
292
|
t: SerovalNodeType.URLSearchParams;
|
|
245
293
|
i: number;
|
|
294
|
+
// raw URL search params
|
|
246
295
|
s: string;
|
|
247
296
|
}
|
|
248
297
|
|
|
249
298
|
export interface SerovalReferenceNode extends SerovalBaseNode {
|
|
250
299
|
t: SerovalNodeType.Reference;
|
|
251
300
|
i: number;
|
|
301
|
+
// id of the reference in the map
|
|
252
302
|
s: string;
|
|
253
303
|
}
|
|
254
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
|
+
|
|
255
350
|
export type SerovalNode =
|
|
256
351
|
| SerovalPrimitiveNode
|
|
257
352
|
| SerovalIndexedValueNode
|
|
@@ -268,4 +363,10 @@ export type SerovalNode =
|
|
|
268
363
|
| SerovalWKSymbolNode
|
|
269
364
|
| SerovalURLNode
|
|
270
365
|
| SerovalURLSearchParamsNode
|
|
271
|
-
| SerovalReferenceNode
|
|
366
|
+
| SerovalReferenceNode
|
|
367
|
+
| SerovalArrayBufferNode
|
|
368
|
+
| SerovalDataViewNode
|
|
369
|
+
| SerovalBlobNode
|
|
370
|
+
| SerovalFileNode
|
|
371
|
+
| SerovalHeadersNode
|
|
372
|
+
| SerovalFormDataNode;
|
package/src/tree/web-api.ts
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import assert from '../assert';
|
|
2
2
|
import { Feature } from '../compat';
|
|
3
3
|
import { ParserContext } from '../context';
|
|
4
|
-
import {
|
|
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';
|
|
5
13
|
|
|
6
14
|
export function createURLNode(
|
|
7
15
|
ctx: ParserContext,
|
|
@@ -12,13 +20,14 @@ export function createURLNode(
|
|
|
12
20
|
return {
|
|
13
21
|
t: SerovalNodeType.URL,
|
|
14
22
|
i: id,
|
|
15
|
-
s: current.href,
|
|
23
|
+
s: serializeString(current.href),
|
|
16
24
|
l: undefined,
|
|
17
25
|
c: undefined,
|
|
18
26
|
m: undefined,
|
|
19
27
|
d: undefined,
|
|
20
28
|
f: undefined,
|
|
21
29
|
a: undefined,
|
|
30
|
+
b: undefined,
|
|
22
31
|
};
|
|
23
32
|
}
|
|
24
33
|
|
|
@@ -31,12 +40,53 @@ export function createURLSearchParamsNode(
|
|
|
31
40
|
return {
|
|
32
41
|
t: SerovalNodeType.URLSearchParams,
|
|
33
42
|
i: id,
|
|
34
|
-
s: current.toString(),
|
|
43
|
+
s: serializeString(current.toString()),
|
|
35
44
|
l: undefined,
|
|
36
45
|
c: undefined,
|
|
37
46
|
m: undefined,
|
|
38
47
|
d: undefined,
|
|
39
48
|
f: undefined,
|
|
40
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,
|
|
41
91
|
};
|
|
42
92
|
}
|
package/dist/types/quote.d.ts
DELETED