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/primitives.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import assert from '../assert';
|
|
2
2
|
import { Feature } from '../compat';
|
|
3
|
-
import { ParserContext } from '../context';
|
|
4
|
-
import
|
|
3
|
+
import { ParserContext, createIndexedValue } from '../context';
|
|
4
|
+
import { serializeString } from '../string';
|
|
5
5
|
import { BigIntTypedArrayValue, TypedArrayValue } from '../types';
|
|
6
6
|
import { getReferenceID } from './reference';
|
|
7
7
|
import { INV_SYMBOL_REF, WellKnownSymbols } from './symbols';
|
|
@@ -24,6 +24,8 @@ import {
|
|
|
24
24
|
SerovalUndefinedNode,
|
|
25
25
|
SerovalWKSymbolNode,
|
|
26
26
|
SerovalReferenceNode,
|
|
27
|
+
SerovalArrayBufferNode,
|
|
28
|
+
SerovalDataViewNode,
|
|
27
29
|
} from './types';
|
|
28
30
|
|
|
29
31
|
export const TRUE_NODE: SerovalBooleanNode = {
|
|
@@ -36,6 +38,7 @@ export const TRUE_NODE: SerovalBooleanNode = {
|
|
|
36
38
|
d: undefined,
|
|
37
39
|
a: undefined,
|
|
38
40
|
f: undefined,
|
|
41
|
+
b: undefined,
|
|
39
42
|
};
|
|
40
43
|
export const FALSE_NODE: SerovalBooleanNode = {
|
|
41
44
|
t: SerovalNodeType.Boolean,
|
|
@@ -47,6 +50,7 @@ export const FALSE_NODE: SerovalBooleanNode = {
|
|
|
47
50
|
d: undefined,
|
|
48
51
|
a: undefined,
|
|
49
52
|
f: undefined,
|
|
53
|
+
b: undefined,
|
|
50
54
|
};
|
|
51
55
|
export const UNDEFINED_NODE: SerovalUndefinedNode = {
|
|
52
56
|
t: SerovalNodeType.Undefined,
|
|
@@ -58,6 +62,7 @@ export const UNDEFINED_NODE: SerovalUndefinedNode = {
|
|
|
58
62
|
d: undefined,
|
|
59
63
|
a: undefined,
|
|
60
64
|
f: undefined,
|
|
65
|
+
b: undefined,
|
|
61
66
|
};
|
|
62
67
|
export const NULL_NODE: SerovalNullNode = {
|
|
63
68
|
t: SerovalNodeType.Null,
|
|
@@ -69,6 +74,7 @@ export const NULL_NODE: SerovalNullNode = {
|
|
|
69
74
|
d: undefined,
|
|
70
75
|
a: undefined,
|
|
71
76
|
f: undefined,
|
|
77
|
+
b: undefined,
|
|
72
78
|
};
|
|
73
79
|
export const NEG_ZERO_NODE: SerovalNegativeZeroNode = {
|
|
74
80
|
t: SerovalNodeType.NegativeZero,
|
|
@@ -80,6 +86,7 @@ export const NEG_ZERO_NODE: SerovalNegativeZeroNode = {
|
|
|
80
86
|
d: undefined,
|
|
81
87
|
a: undefined,
|
|
82
88
|
f: undefined,
|
|
89
|
+
b: undefined,
|
|
83
90
|
};
|
|
84
91
|
export const INFINITY_NODE: SerovalInfinityNode = {
|
|
85
92
|
t: SerovalNodeType.Infinity,
|
|
@@ -91,6 +98,7 @@ export const INFINITY_NODE: SerovalInfinityNode = {
|
|
|
91
98
|
d: undefined,
|
|
92
99
|
a: undefined,
|
|
93
100
|
f: undefined,
|
|
101
|
+
b: undefined,
|
|
94
102
|
};
|
|
95
103
|
export const NEG_INFINITY_NODE: SerovalNegativeInfinityNode = {
|
|
96
104
|
t: SerovalNodeType.NegativeInfinity,
|
|
@@ -102,6 +110,7 @@ export const NEG_INFINITY_NODE: SerovalNegativeInfinityNode = {
|
|
|
102
110
|
d: undefined,
|
|
103
111
|
a: undefined,
|
|
104
112
|
f: undefined,
|
|
113
|
+
b: undefined,
|
|
105
114
|
};
|
|
106
115
|
export const NAN_NODE: SerovalNaNNode = {
|
|
107
116
|
t: SerovalNodeType.NaN,
|
|
@@ -113,6 +122,7 @@ export const NAN_NODE: SerovalNaNNode = {
|
|
|
113
122
|
d: undefined,
|
|
114
123
|
a: undefined,
|
|
115
124
|
f: undefined,
|
|
125
|
+
b: undefined,
|
|
116
126
|
};
|
|
117
127
|
|
|
118
128
|
export function createNumberNode(value: number): SerovalNumberNode {
|
|
@@ -126,6 +136,7 @@ export function createNumberNode(value: number): SerovalNumberNode {
|
|
|
126
136
|
d: undefined,
|
|
127
137
|
a: undefined,
|
|
128
138
|
f: undefined,
|
|
139
|
+
b: undefined,
|
|
129
140
|
};
|
|
130
141
|
}
|
|
131
142
|
|
|
@@ -133,13 +144,14 @@ export function createStringNode(value: string): SerovalStringNode {
|
|
|
133
144
|
return {
|
|
134
145
|
t: SerovalNodeType.String,
|
|
135
146
|
i: undefined,
|
|
136
|
-
s:
|
|
147
|
+
s: serializeString(value),
|
|
137
148
|
l: undefined,
|
|
138
149
|
c: undefined,
|
|
139
150
|
m: undefined,
|
|
140
151
|
d: undefined,
|
|
141
152
|
a: undefined,
|
|
142
153
|
f: undefined,
|
|
154
|
+
b: undefined,
|
|
143
155
|
};
|
|
144
156
|
}
|
|
145
157
|
|
|
@@ -158,6 +170,7 @@ export function createBigIntNode(
|
|
|
158
170
|
d: undefined,
|
|
159
171
|
a: undefined,
|
|
160
172
|
f: undefined,
|
|
173
|
+
b: undefined,
|
|
161
174
|
};
|
|
162
175
|
}
|
|
163
176
|
|
|
@@ -172,6 +185,7 @@ export function createIndexedValueNode(id: number): SerovalIndexedValueNode {
|
|
|
172
185
|
d: undefined,
|
|
173
186
|
a: undefined,
|
|
174
187
|
f: undefined,
|
|
188
|
+
b: undefined,
|
|
175
189
|
};
|
|
176
190
|
}
|
|
177
191
|
|
|
@@ -186,6 +200,7 @@ export function createDateNode(id: number, current: Date): SerovalDateNode {
|
|
|
186
200
|
d: undefined,
|
|
187
201
|
f: undefined,
|
|
188
202
|
a: undefined,
|
|
203
|
+
b: undefined,
|
|
189
204
|
};
|
|
190
205
|
}
|
|
191
206
|
|
|
@@ -200,9 +215,45 @@ export function createRegExpNode(id: number, current: RegExp): SerovalRegExpNode
|
|
|
200
215
|
d: undefined,
|
|
201
216
|
a: undefined,
|
|
202
217
|
f: undefined,
|
|
218
|
+
b: undefined,
|
|
203
219
|
};
|
|
204
220
|
}
|
|
205
221
|
|
|
222
|
+
export function createArrayBufferNode(
|
|
223
|
+
id: number,
|
|
224
|
+
current: ArrayBuffer,
|
|
225
|
+
): SerovalArrayBufferNode {
|
|
226
|
+
const bytes = new Uint8Array(current);
|
|
227
|
+
const len = bytes.length;
|
|
228
|
+
const values = new Array<number>(len);
|
|
229
|
+
for (let i = 0; i < len; i++) {
|
|
230
|
+
values[i] = bytes[i];
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
t: SerovalNodeType.ArrayBuffer,
|
|
234
|
+
i: id,
|
|
235
|
+
s: values,
|
|
236
|
+
l: undefined,
|
|
237
|
+
c: undefined,
|
|
238
|
+
m: undefined,
|
|
239
|
+
d: undefined,
|
|
240
|
+
a: undefined,
|
|
241
|
+
f: undefined,
|
|
242
|
+
b: undefined,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
export function serializeArrayBuffer(
|
|
247
|
+
ctx: ParserContext,
|
|
248
|
+
current: ArrayBuffer,
|
|
249
|
+
) {
|
|
250
|
+
const id = createIndexedValue(ctx, current);
|
|
251
|
+
if (ctx.markedRefs.has(id)) {
|
|
252
|
+
return createIndexedValueNode(id);
|
|
253
|
+
}
|
|
254
|
+
return createArrayBufferNode(id, current);
|
|
255
|
+
}
|
|
256
|
+
|
|
206
257
|
export function createTypedArrayNode(
|
|
207
258
|
ctx: ParserContext,
|
|
208
259
|
id: number,
|
|
@@ -210,21 +261,17 @@ export function createTypedArrayNode(
|
|
|
210
261
|
): SerovalTypedArrayNode {
|
|
211
262
|
const constructor = current.constructor.name;
|
|
212
263
|
assert(ctx.features & Feature.TypedArray, `Unsupported value type "${constructor}"`);
|
|
213
|
-
const len = current.length;
|
|
214
|
-
const values = new Array<string>(len);
|
|
215
|
-
for (let i = 0; i < len; i++) {
|
|
216
|
-
values[i] = '' + current[i];
|
|
217
|
-
}
|
|
218
264
|
return {
|
|
219
265
|
t: SerovalNodeType.TypedArray,
|
|
220
266
|
i: id,
|
|
221
|
-
s:
|
|
222
|
-
l: current.
|
|
267
|
+
s: undefined,
|
|
268
|
+
l: current.length,
|
|
223
269
|
c: constructor,
|
|
224
270
|
m: undefined,
|
|
225
271
|
d: undefined,
|
|
226
272
|
a: undefined,
|
|
227
|
-
f:
|
|
273
|
+
f: serializeArrayBuffer(ctx, current.buffer),
|
|
274
|
+
b: current.byteOffset,
|
|
228
275
|
};
|
|
229
276
|
}
|
|
230
277
|
|
|
@@ -240,21 +287,17 @@ export function createBigIntTypedArrayNode(
|
|
|
240
287
|
(ctx.features & BIGINT_FLAG) === BIGINT_FLAG,
|
|
241
288
|
`Unsupported value type "${constructor}"`,
|
|
242
289
|
);
|
|
243
|
-
const len = current.length;
|
|
244
|
-
const values = new Array<string>(len);
|
|
245
|
-
for (let i = 0; i < len; i++) {
|
|
246
|
-
values[i] = '' + current[i];
|
|
247
|
-
}
|
|
248
290
|
return {
|
|
249
291
|
t: SerovalNodeType.BigIntTypedArray,
|
|
250
292
|
i: id,
|
|
251
|
-
s:
|
|
252
|
-
l: current.
|
|
293
|
+
s: undefined,
|
|
294
|
+
l: current.length,
|
|
253
295
|
c: constructor,
|
|
254
296
|
m: undefined,
|
|
255
297
|
d: undefined,
|
|
256
298
|
a: undefined,
|
|
257
|
-
f:
|
|
299
|
+
f: serializeArrayBuffer(ctx, current.buffer),
|
|
300
|
+
b: current.byteOffset,
|
|
258
301
|
};
|
|
259
302
|
}
|
|
260
303
|
|
|
@@ -274,6 +317,7 @@ export function createWKSymbolNode(
|
|
|
274
317
|
d: undefined,
|
|
275
318
|
a: undefined,
|
|
276
319
|
f: undefined,
|
|
320
|
+
b: undefined,
|
|
277
321
|
};
|
|
278
322
|
}
|
|
279
323
|
|
|
@@ -284,12 +328,32 @@ export function createReferenceNode<T>(
|
|
|
284
328
|
return {
|
|
285
329
|
t: SerovalNodeType.Reference,
|
|
286
330
|
i: id,
|
|
287
|
-
s:
|
|
331
|
+
s: serializeString(getReferenceID(ref)),
|
|
288
332
|
l: undefined,
|
|
289
333
|
c: undefined,
|
|
290
334
|
m: undefined,
|
|
291
335
|
d: undefined,
|
|
292
336
|
a: undefined,
|
|
293
337
|
f: undefined,
|
|
338
|
+
b: undefined,
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
export function createDataViewNode(
|
|
343
|
+
ctx: ParserContext,
|
|
344
|
+
id: number,
|
|
345
|
+
current: DataView,
|
|
346
|
+
): SerovalDataViewNode {
|
|
347
|
+
return {
|
|
348
|
+
t: SerovalNodeType.DataView,
|
|
349
|
+
i: id,
|
|
350
|
+
s: undefined,
|
|
351
|
+
l: current.byteLength,
|
|
352
|
+
c: undefined,
|
|
353
|
+
m: undefined,
|
|
354
|
+
d: undefined,
|
|
355
|
+
a: undefined,
|
|
356
|
+
f: serializeArrayBuffer(ctx, current.buffer),
|
|
357
|
+
b: current.byteOffset,
|
|
294
358
|
};
|
|
295
359
|
}
|