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/src/tree/types.ts CHANGED
@@ -11,7 +11,7 @@ export const enum SerovalNodeType {
11
11
  NegativeInfinity,
12
12
  NaN,
13
13
  BigInt,
14
- Reference,
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
- // Size/Byte offset
47
+ // size/length
39
48
  l: number | undefined;
40
49
  // Constructor name / RegExp source
41
50
  c: string | undefined;
42
- // message /flags
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 SerovalReferenceNode extends SerovalBaseNode {
119
- t: SerovalNodeType.Reference;
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
- s: string[];
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
- s: string[];
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
- | SerovalReferenceNode
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
@@ -1,2 +0,0 @@
1
- export default function quote(str: string): string;
2
- export declare function invQuote(str: string): string;