seroval 0.6.0 → 0.8.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 +1431 -991
- package/dist/cjs/development/index.cjs.map +4 -4
- package/dist/cjs/production/index.cjs +3 -3
- package/dist/esm/development/index.mjs +1431 -991
- 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/compat.d.ts +1 -1
- package/dist/types/context.d.ts +13 -7
- package/dist/types/index.d.ts +3 -4
- package/dist/types/string.d.ts +3 -0
- 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 +11 -14
- package/dist/types/tree/serialize.d.ts +2 -2
- package/dist/types/tree/shared.d.ts +10 -8
- package/dist/types/tree/sync.d.ts +3 -3
- package/dist/types/tree/types.d.ts +106 -70
- package/dist/types/tree/web-api.d.ts +4 -2
- package/dist/types/types.d.ts +4 -4
- package/package.json +11 -8
- package/src/assert.ts +2 -2
- package/src/compat.ts +1 -2
- package/src/context.ts +24 -13
- package/src/get-identifier.ts +1 -1
- package/src/index.ts +35 -26
- package/src/string.ts +53 -0
- package/src/tree/UnsupportedTypeError.ts +8 -0
- package/src/tree/async.ts +313 -222
- package/src/tree/constants.ts +72 -0
- package/src/tree/deserialize.ts +239 -119
- package/src/tree/primitives.ts +154 -143
- package/src/tree/reference.ts +4 -3
- package/src/tree/serialize.ts +394 -170
- package/src/tree/shared.ts +31 -22
- package/src/tree/symbols.ts +13 -13
- package/src/tree/sync.ts +288 -191
- package/src/tree/types.ts +173 -91
- package/src/tree/web-api.ts +59 -6
- package/src/types.ts +7 -3
- package/dist/types/quote.d.ts +0 -2
- package/src/quote.ts +0 -56
package/src/tree/types.ts
CHANGED
|
@@ -1,34 +1,45 @@
|
|
|
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
|
-
|
|
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,
|
|
32
43
|
}
|
|
33
44
|
|
|
34
45
|
export interface SerovalBaseNode {
|
|
@@ -37,37 +48,49 @@ export interface SerovalBaseNode {
|
|
|
37
48
|
// Reference ID
|
|
38
49
|
i: number | undefined;
|
|
39
50
|
// Serialized value
|
|
40
|
-
s:
|
|
41
|
-
//
|
|
51
|
+
s: unknown;
|
|
52
|
+
// size/length
|
|
42
53
|
l: number | undefined;
|
|
43
54
|
// Constructor name / RegExp source
|
|
44
55
|
c: string | undefined;
|
|
45
|
-
// message
|
|
56
|
+
// message/flags
|
|
46
57
|
m: string | undefined;
|
|
47
58
|
// dictionary
|
|
48
|
-
d:
|
|
59
|
+
d: SerovalObjectRecordNode | SerovalMapRecordNode | undefined;
|
|
49
60
|
// array of nodes
|
|
50
|
-
a: SerovalNode[] | undefined;
|
|
61
|
+
a: (SerovalNode | undefined)[] | undefined;
|
|
51
62
|
// fulfilled node
|
|
52
63
|
f: SerovalNode | undefined;
|
|
64
|
+
// byte offset
|
|
65
|
+
b: number | undefined;
|
|
53
66
|
}
|
|
54
67
|
|
|
55
|
-
export
|
|
68
|
+
export const enum SerovalObjectRecordSpecialKey {
|
|
69
|
+
SymbolIterator = 0,
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export type SerovalObjectRecordKey =
|
|
73
|
+
| string
|
|
74
|
+
| SerovalObjectRecordSpecialKey;
|
|
75
|
+
|
|
76
|
+
export interface SerovalPlainRecordNode {
|
|
56
77
|
k: string[];
|
|
57
78
|
v: SerovalNode[];
|
|
58
79
|
s: number;
|
|
59
80
|
}
|
|
60
81
|
|
|
82
|
+
export interface SerovalObjectRecordNode {
|
|
83
|
+
k: SerovalObjectRecordKey[];
|
|
84
|
+
v: SerovalNode[];
|
|
85
|
+
s: number;
|
|
86
|
+
}
|
|
87
|
+
|
|
61
88
|
export interface SerovalMapRecordNode {
|
|
62
89
|
k: SerovalNode[];
|
|
63
90
|
v: SerovalNode[];
|
|
64
91
|
s: number;
|
|
65
92
|
}
|
|
66
93
|
|
|
67
|
-
export type SerovalDictionaryNode =
|
|
68
|
-
| SerovalObjectRecordNode
|
|
69
|
-
| SerovalMapRecordNode;
|
|
70
|
-
|
|
71
94
|
export interface SerovalNumberNode extends SerovalBaseNode {
|
|
72
95
|
t: SerovalNodeType.Number;
|
|
73
96
|
s: number;
|
|
@@ -78,64 +101,39 @@ export interface SerovalStringNode extends SerovalBaseNode {
|
|
|
78
101
|
s: string;
|
|
79
102
|
}
|
|
80
103
|
|
|
81
|
-
export interface
|
|
82
|
-
t: SerovalNodeType.
|
|
83
|
-
s:
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export interface SerovalNullNode extends SerovalBaseNode {
|
|
87
|
-
t: SerovalNodeType.Null;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export interface SerovalUndefinedNode extends SerovalBaseNode {
|
|
91
|
-
t: SerovalNodeType.Undefined;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export interface SerovalNegativeZeroNode extends SerovalBaseNode {
|
|
95
|
-
t: SerovalNodeType.NegativeZero;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
export interface SerovalInfinityNode extends SerovalBaseNode {
|
|
99
|
-
t: SerovalNodeType.Infinity;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export interface SerovalNegativeInfinityNode extends SerovalBaseNode {
|
|
103
|
-
t: SerovalNodeType.NegativeInfinity;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
export interface SerovalNaNNode extends SerovalBaseNode {
|
|
107
|
-
t: SerovalNodeType.NaN;
|
|
104
|
+
export interface SerovalConstantNode extends SerovalBaseNode {
|
|
105
|
+
t: SerovalNodeType.Constant;
|
|
106
|
+
s: SerovalConstant;
|
|
108
107
|
}
|
|
109
108
|
|
|
110
109
|
export type SerovalPrimitiveNode =
|
|
111
110
|
| SerovalNumberNode
|
|
112
111
|
| SerovalStringNode
|
|
113
|
-
|
|
|
114
|
-
| SerovalNullNode
|
|
115
|
-
| SerovalUndefinedNode
|
|
116
|
-
| SerovalNegativeZeroNode
|
|
117
|
-
| SerovalNegativeInfinityNode
|
|
118
|
-
| SerovalInfinityNode
|
|
119
|
-
| SerovalNaNNode;
|
|
112
|
+
| SerovalConstantNode;
|
|
120
113
|
|
|
121
114
|
export interface SerovalIndexedValueNode extends SerovalBaseNode {
|
|
122
115
|
t: SerovalNodeType.IndexedValue;
|
|
116
|
+
// id
|
|
123
117
|
i: number;
|
|
124
118
|
}
|
|
125
119
|
|
|
126
120
|
export interface SerovalBigIntNode extends SerovalBaseNode {
|
|
127
121
|
t: SerovalNodeType.BigInt;
|
|
122
|
+
// value in string
|
|
128
123
|
s: string;
|
|
129
124
|
}
|
|
130
125
|
|
|
131
126
|
export interface SerovalDateNode extends SerovalBaseNode {
|
|
132
127
|
t: SerovalNodeType.Date;
|
|
128
|
+
// id (Dates are stateful)
|
|
133
129
|
i: number;
|
|
130
|
+
// value in ISO string
|
|
134
131
|
s: string;
|
|
135
132
|
}
|
|
136
133
|
|
|
137
134
|
export interface SerovalRegExpNode extends SerovalBaseNode {
|
|
138
135
|
t: SerovalNodeType.RegExp;
|
|
136
|
+
// id (RegExp are stateful)
|
|
139
137
|
i: number;
|
|
140
138
|
// source
|
|
141
139
|
c: string;
|
|
@@ -143,20 +141,39 @@ export interface SerovalRegExpNode extends SerovalBaseNode {
|
|
|
143
141
|
m: string;
|
|
144
142
|
}
|
|
145
143
|
|
|
144
|
+
export interface SerovalArrayBufferNode extends SerovalBaseNode {
|
|
145
|
+
t: SerovalNodeType.ArrayBuffer;
|
|
146
|
+
// id
|
|
147
|
+
i: number;
|
|
148
|
+
// sequence in bytes
|
|
149
|
+
s: number[];
|
|
150
|
+
}
|
|
151
|
+
|
|
146
152
|
export interface SerovalTypedArrayNode extends SerovalBaseNode {
|
|
147
153
|
t: SerovalNodeType.TypedArray;
|
|
154
|
+
// id
|
|
148
155
|
i: number;
|
|
149
|
-
|
|
156
|
+
// length
|
|
150
157
|
l: number;
|
|
158
|
+
// TypedArray Constructor
|
|
151
159
|
c: string;
|
|
160
|
+
// ArrayBuffer reference
|
|
161
|
+
f: SerovalNode;
|
|
162
|
+
// Byte Offset
|
|
163
|
+
b: number;
|
|
152
164
|
}
|
|
153
165
|
|
|
154
166
|
export interface SerovalBigIntTypedArrayNode extends SerovalBaseNode {
|
|
155
167
|
t: SerovalNodeType.BigIntTypedArray;
|
|
156
168
|
i: number;
|
|
157
|
-
|
|
169
|
+
// length
|
|
158
170
|
l: number;
|
|
171
|
+
// TypedArray Constructor
|
|
159
172
|
c: string;
|
|
173
|
+
// ArrayBuffer reference
|
|
174
|
+
f: SerovalNode;
|
|
175
|
+
// Byte Offset
|
|
176
|
+
b: number;
|
|
160
177
|
}
|
|
161
178
|
|
|
162
179
|
export type SerovalSemiPrimitiveNode =
|
|
@@ -168,90 +185,149 @@ export type SerovalSemiPrimitiveNode =
|
|
|
168
185
|
|
|
169
186
|
export interface SerovalSetNode extends SerovalBaseNode {
|
|
170
187
|
t: SerovalNodeType.Set;
|
|
188
|
+
// id
|
|
189
|
+
i: number;
|
|
190
|
+
// Size of Set
|
|
171
191
|
l: number;
|
|
192
|
+
// Items in Set (as array)
|
|
172
193
|
a: SerovalNode[];
|
|
173
|
-
i: number;
|
|
174
194
|
}
|
|
175
195
|
|
|
176
196
|
export interface SerovalMapNode extends SerovalBaseNode {
|
|
177
197
|
t: SerovalNodeType.Map;
|
|
178
|
-
d: SerovalMapRecordNode;
|
|
179
198
|
i: number;
|
|
199
|
+
// key/value pairs
|
|
200
|
+
d: SerovalMapRecordNode;
|
|
180
201
|
}
|
|
181
202
|
|
|
182
203
|
export interface SerovalArrayNode extends SerovalBaseNode {
|
|
183
204
|
t: SerovalNodeType.Array;
|
|
205
|
+
// size of array
|
|
184
206
|
l: number;
|
|
185
|
-
|
|
207
|
+
// items
|
|
208
|
+
a: (SerovalNode | undefined)[];
|
|
186
209
|
i: number;
|
|
187
210
|
}
|
|
188
211
|
|
|
189
212
|
export interface SerovalObjectNode extends SerovalBaseNode {
|
|
190
213
|
t: SerovalNodeType.Object;
|
|
214
|
+
// key/value pairs
|
|
191
215
|
d: SerovalObjectRecordNode;
|
|
192
216
|
i: number;
|
|
193
217
|
}
|
|
194
218
|
|
|
195
219
|
export interface SerovalNullConstructorNode extends SerovalBaseNode {
|
|
196
220
|
t: SerovalNodeType.NullConstructor;
|
|
221
|
+
// key/value pairs
|
|
197
222
|
d: SerovalObjectRecordNode;
|
|
198
223
|
i: number;
|
|
199
224
|
}
|
|
200
225
|
|
|
201
226
|
export interface SerovalPromiseNode extends SerovalBaseNode {
|
|
202
227
|
t: SerovalNodeType.Promise;
|
|
228
|
+
// resolved value
|
|
203
229
|
f: SerovalNode;
|
|
204
230
|
i: number;
|
|
205
231
|
}
|
|
206
232
|
|
|
207
233
|
export interface SerovalErrorNode extends SerovalBaseNode {
|
|
208
234
|
t: SerovalNodeType.Error;
|
|
235
|
+
// constructor name
|
|
209
236
|
c: string;
|
|
237
|
+
// message
|
|
210
238
|
m: string;
|
|
239
|
+
// other properties
|
|
211
240
|
d: SerovalObjectRecordNode | undefined;
|
|
212
241
|
i: number;
|
|
213
242
|
}
|
|
214
243
|
|
|
215
244
|
export interface SerovalAggregateErrorNode extends SerovalBaseNode {
|
|
216
245
|
t: SerovalNodeType.AggregateError;
|
|
217
|
-
m: string;
|
|
218
|
-
d: SerovalObjectRecordNode | undefined;
|
|
219
|
-
l: number;
|
|
220
|
-
a: SerovalNode[];
|
|
221
246
|
i: number;
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
t: SerovalNodeType.Iterable;
|
|
247
|
+
// message
|
|
248
|
+
m: string;
|
|
249
|
+
// other properties
|
|
226
250
|
d: SerovalObjectRecordNode | undefined;
|
|
227
|
-
l: number;
|
|
228
|
-
a: SerovalNode[];
|
|
229
|
-
i: number;
|
|
230
251
|
}
|
|
231
252
|
|
|
232
253
|
export interface SerovalWKSymbolNode extends SerovalBaseNode {
|
|
233
254
|
t: SerovalNodeType.WKSymbol;
|
|
255
|
+
i: number;
|
|
234
256
|
s: Symbols;
|
|
235
257
|
}
|
|
236
258
|
|
|
237
259
|
export interface SerovalURLNode extends SerovalBaseNode {
|
|
238
260
|
t: SerovalNodeType.URL;
|
|
239
261
|
i: number;
|
|
262
|
+
// raw URL
|
|
240
263
|
s: string;
|
|
241
264
|
}
|
|
242
265
|
|
|
243
266
|
export interface SerovalURLSearchParamsNode extends SerovalBaseNode {
|
|
244
267
|
t: SerovalNodeType.URLSearchParams;
|
|
245
268
|
i: number;
|
|
269
|
+
// raw URL search params
|
|
246
270
|
s: string;
|
|
247
271
|
}
|
|
248
272
|
|
|
249
273
|
export interface SerovalReferenceNode extends SerovalBaseNode {
|
|
250
274
|
t: SerovalNodeType.Reference;
|
|
251
275
|
i: number;
|
|
276
|
+
// id of the reference in the map
|
|
252
277
|
s: string;
|
|
253
278
|
}
|
|
254
279
|
|
|
280
|
+
export interface SerovalDataViewNode extends SerovalBaseNode {
|
|
281
|
+
t: SerovalNodeType.DataView;
|
|
282
|
+
i: number;
|
|
283
|
+
// byte length
|
|
284
|
+
l: number;
|
|
285
|
+
// reference to array buffer
|
|
286
|
+
f: SerovalNode;
|
|
287
|
+
// byte offset
|
|
288
|
+
b: number;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
export interface SerovalBlobNode extends SerovalBaseNode {
|
|
292
|
+
t: SerovalNodeType.Blob;
|
|
293
|
+
i: number;
|
|
294
|
+
// file type
|
|
295
|
+
c: string;
|
|
296
|
+
// reference to array buffer
|
|
297
|
+
f: SerovalNode;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export interface SerovalFileNode extends SerovalBaseNode {
|
|
301
|
+
t: SerovalNodeType.File;
|
|
302
|
+
i: number;
|
|
303
|
+
// file type
|
|
304
|
+
c: string;
|
|
305
|
+
// file name
|
|
306
|
+
m: string;
|
|
307
|
+
// reference to array buffer
|
|
308
|
+
f: SerovalNode;
|
|
309
|
+
// last modified
|
|
310
|
+
b: number;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
export interface SerovalHeadersNode extends SerovalBaseNode {
|
|
314
|
+
t: SerovalNodeType.Headers;
|
|
315
|
+
i: number;
|
|
316
|
+
d: SerovalPlainRecordNode;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
export interface SerovalFormDataNode extends SerovalBaseNode {
|
|
320
|
+
t: SerovalNodeType.FormData;
|
|
321
|
+
i: number;
|
|
322
|
+
d: SerovalPlainRecordNode;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
export interface SerovalBoxedNode extends SerovalBaseNode {
|
|
326
|
+
t: SerovalNodeType.Boxed;
|
|
327
|
+
i: number;
|
|
328
|
+
f: SerovalNode;
|
|
329
|
+
}
|
|
330
|
+
|
|
255
331
|
export type SerovalNode =
|
|
256
332
|
| SerovalPrimitiveNode
|
|
257
333
|
| SerovalIndexedValueNode
|
|
@@ -264,8 +340,14 @@ export type SerovalNode =
|
|
|
264
340
|
| SerovalPromiseNode
|
|
265
341
|
| SerovalErrorNode
|
|
266
342
|
| SerovalAggregateErrorNode
|
|
267
|
-
| SerovalIterableNode
|
|
268
343
|
| SerovalWKSymbolNode
|
|
269
344
|
| SerovalURLNode
|
|
270
345
|
| SerovalURLSearchParamsNode
|
|
271
|
-
| SerovalReferenceNode
|
|
346
|
+
| SerovalReferenceNode
|
|
347
|
+
| SerovalArrayBufferNode
|
|
348
|
+
| SerovalDataViewNode
|
|
349
|
+
| SerovalBlobNode
|
|
350
|
+
| SerovalFileNode
|
|
351
|
+
| SerovalHeadersNode
|
|
352
|
+
| SerovalFormDataNode
|
|
353
|
+
| SerovalBoxedNode;
|
package/src/tree/web-api.ts
CHANGED
|
@@ -1,24 +1,36 @@
|
|
|
1
1
|
import assert from '../assert';
|
|
2
2
|
import { Feature } from '../compat';
|
|
3
|
-
import { ParserContext } from '../context';
|
|
4
|
-
import {
|
|
3
|
+
import type { ParserContext } from '../context';
|
|
4
|
+
import { serializeString } from '../string';
|
|
5
|
+
import UnsupportedTypeError from './UnsupportedTypeError';
|
|
6
|
+
import { serializeArrayBuffer } from './primitives';
|
|
7
|
+
import type {
|
|
8
|
+
SerovalBlobNode,
|
|
9
|
+
SerovalFileNode,
|
|
10
|
+
SerovalURLNode,
|
|
11
|
+
SerovalURLSearchParamsNode,
|
|
12
|
+
} from './types';
|
|
13
|
+
import {
|
|
14
|
+
SerovalNodeType,
|
|
15
|
+
} from './types';
|
|
5
16
|
|
|
6
17
|
export function createURLNode(
|
|
7
18
|
ctx: ParserContext,
|
|
8
19
|
id: number,
|
|
9
20
|
current: URL,
|
|
10
21
|
): SerovalURLNode {
|
|
11
|
-
assert(ctx.features & Feature.WebAPI,
|
|
22
|
+
assert(ctx.features & Feature.WebAPI, new UnsupportedTypeError(current));
|
|
12
23
|
return {
|
|
13
24
|
t: SerovalNodeType.URL,
|
|
14
25
|
i: id,
|
|
15
|
-
s: current.href,
|
|
26
|
+
s: serializeString(current.href),
|
|
16
27
|
l: undefined,
|
|
17
28
|
c: undefined,
|
|
18
29
|
m: undefined,
|
|
19
30
|
d: undefined,
|
|
20
31
|
f: undefined,
|
|
21
32
|
a: undefined,
|
|
33
|
+
b: undefined,
|
|
22
34
|
};
|
|
23
35
|
}
|
|
24
36
|
|
|
@@ -27,16 +39,57 @@ export function createURLSearchParamsNode(
|
|
|
27
39
|
id: number,
|
|
28
40
|
current: URLSearchParams,
|
|
29
41
|
): SerovalURLSearchParamsNode {
|
|
30
|
-
assert(ctx.features & Feature.WebAPI,
|
|
42
|
+
assert(ctx.features & Feature.WebAPI, new UnsupportedTypeError(current));
|
|
31
43
|
return {
|
|
32
44
|
t: SerovalNodeType.URLSearchParams,
|
|
33
45
|
i: id,
|
|
34
|
-
s: current.toString(),
|
|
46
|
+
s: serializeString(current.toString()),
|
|
35
47
|
l: undefined,
|
|
36
48
|
c: undefined,
|
|
37
49
|
m: undefined,
|
|
38
50
|
d: undefined,
|
|
39
51
|
f: undefined,
|
|
40
52
|
a: undefined,
|
|
53
|
+
b: undefined,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export async function createBlobNode(
|
|
58
|
+
ctx: ParserContext,
|
|
59
|
+
id: number,
|
|
60
|
+
current: Blob,
|
|
61
|
+
): Promise<SerovalBlobNode> {
|
|
62
|
+
assert(ctx.features & Feature.WebAPI, new UnsupportedTypeError(current));
|
|
63
|
+
return {
|
|
64
|
+
t: SerovalNodeType.Blob,
|
|
65
|
+
i: id,
|
|
66
|
+
s: undefined,
|
|
67
|
+
l: undefined,
|
|
68
|
+
c: serializeString(current.type),
|
|
69
|
+
m: undefined,
|
|
70
|
+
d: undefined,
|
|
71
|
+
f: serializeArrayBuffer(ctx, await current.arrayBuffer()),
|
|
72
|
+
a: undefined,
|
|
73
|
+
b: undefined,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export async function createFileNode(
|
|
78
|
+
ctx: ParserContext,
|
|
79
|
+
id: number,
|
|
80
|
+
current: File,
|
|
81
|
+
): Promise<SerovalFileNode> {
|
|
82
|
+
assert(ctx.features & Feature.WebAPI, new UnsupportedTypeError(current));
|
|
83
|
+
return {
|
|
84
|
+
t: SerovalNodeType.File,
|
|
85
|
+
i: id,
|
|
86
|
+
s: undefined,
|
|
87
|
+
l: undefined,
|
|
88
|
+
c: serializeString(current.type),
|
|
89
|
+
m: serializeString(current.name),
|
|
90
|
+
d: undefined,
|
|
91
|
+
f: serializeArrayBuffer(ctx, await current.arrayBuffer()),
|
|
92
|
+
a: undefined,
|
|
93
|
+
b: current.lastModified,
|
|
41
94
|
};
|
|
42
95
|
}
|
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/dist/types/quote.d.ts
DELETED
package/src/quote.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// Written by https://github.com/DylanPiercey and is distributed under the MIT license.
|
|
2
|
-
// Creates a JavaScript double quoted string and escapes all characters
|
|
3
|
-
// not listed as DoubleStringCharacters on
|
|
4
|
-
// Also includes "<" to escape "</script>" and "\" to avoid invalid escapes in the output.
|
|
5
|
-
// http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4
|
|
6
|
-
export default function quote(str: string) {
|
|
7
|
-
let result = '';
|
|
8
|
-
let lastPos = 0;
|
|
9
|
-
for (let i = 0, len = str.length; i < len; i++) {
|
|
10
|
-
let replacement;
|
|
11
|
-
switch (str[i]) {
|
|
12
|
-
case '"':
|
|
13
|
-
replacement = '\\"';
|
|
14
|
-
break;
|
|
15
|
-
case '\\':
|
|
16
|
-
replacement = '\\\\';
|
|
17
|
-
break;
|
|
18
|
-
case '<':
|
|
19
|
-
replacement = '\\x3C';
|
|
20
|
-
break;
|
|
21
|
-
case '\n':
|
|
22
|
-
replacement = '\\n';
|
|
23
|
-
break;
|
|
24
|
-
case '\r':
|
|
25
|
-
replacement = '\\r';
|
|
26
|
-
break;
|
|
27
|
-
case '\u2028':
|
|
28
|
-
replacement = '\\u2028';
|
|
29
|
-
break;
|
|
30
|
-
case '\u2029':
|
|
31
|
-
replacement = '\\u2029';
|
|
32
|
-
break;
|
|
33
|
-
default:
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
result += str.slice(lastPos, i) + replacement;
|
|
37
|
-
lastPos = i + 1;
|
|
38
|
-
}
|
|
39
|
-
if (lastPos === 0) {
|
|
40
|
-
result = str;
|
|
41
|
-
} else {
|
|
42
|
-
result += str.slice(lastPos);
|
|
43
|
-
}
|
|
44
|
-
return result;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export function invQuote(str: string): string {
|
|
48
|
-
return str
|
|
49
|
-
.replace(/\\"/g, '"')
|
|
50
|
-
.replace(/\\\\/g, '\\')
|
|
51
|
-
.replace(/\\x3C/g, '<')
|
|
52
|
-
.replace(/\\n/g, '\n')
|
|
53
|
-
.replace(/\\r/g, '\r')
|
|
54
|
-
.replace(/\\u2028/g, '\u2028')
|
|
55
|
-
.replace(/\\u2029/g, '\u2029');
|
|
56
|
-
}
|