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/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
- // Size/Byte offset
47
+ // size/length
42
48
  l: number | undefined;
43
49
  // Constructor name / RegExp source
44
50
  c: string | undefined;
45
- // message /flags
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
- s: string[];
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
- s: string[];
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;
@@ -1,7 +1,15 @@
1
1
  import assert from '../assert';
2
2
  import { Feature } from '../compat';
3
3
  import { ParserContext } from '../context';
4
- import { SerovalNodeType, SerovalURLNode, SerovalURLSearchParamsNode } from './types';
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
  }
@@ -1,2 +0,0 @@
1
- export default function quote(str: string): string;
2
- export declare function invQuote(str: string): string;