seroval 0.8.0 → 0.9.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/dist/cjs/development/index.cjs +152 -44
- package/dist/cjs/development/index.cjs.map +2 -2
- package/dist/cjs/production/index.cjs +3 -3
- package/dist/esm/development/index.mjs +152 -44
- package/dist/esm/development/index.mjs.map +2 -2
- package/dist/esm/production/index.mjs +3 -3
- package/dist/types/context.d.ts +6 -0
- package/dist/types/tree/shared.d.ts +2 -0
- package/dist/types/tree/types.d.ts +10 -0
- package/package.json +7 -7
- package/src/context.ts +10 -0
- package/src/tree/async.ts +11 -0
- package/src/tree/constants.ts +1 -0
- package/src/tree/deserialize.ts +16 -0
- package/src/tree/primitives.ts +12 -0
- package/src/tree/reference.ts +0 -1
- package/src/tree/serialize.ts +61 -9
- package/src/tree/shared.ts +14 -0
- package/src/tree/sync.ts +10 -0
- package/src/tree/types.ts +13 -1
- package/src/tree/web-api.ts +4 -0
- package/src/tree/iterator.ts +0 -14
package/src/tree/shared.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { ParserContext } from '../context';
|
|
|
3
3
|
import type {
|
|
4
4
|
ErrorValue,
|
|
5
5
|
} from '../types';
|
|
6
|
+
import { SerovalObjectFlags } from './types';
|
|
6
7
|
|
|
7
8
|
export function getErrorConstructorName(error: ErrorValue): string {
|
|
8
9
|
if (error instanceof EvalError) {
|
|
@@ -152,3 +153,16 @@ export function isValidIdentifier(name: string): boolean {
|
|
|
152
153
|
|| (char >= 'a' && char <= 'z')
|
|
153
154
|
) && IDENTIFIER_CHECK.test(name);
|
|
154
155
|
}
|
|
156
|
+
|
|
157
|
+
export function getObjectFlag(obj: unknown): SerovalObjectFlags {
|
|
158
|
+
if (Object.isFrozen(obj)) {
|
|
159
|
+
return SerovalObjectFlags.Frozen;
|
|
160
|
+
}
|
|
161
|
+
if (Object.isSealed(obj)) {
|
|
162
|
+
return SerovalObjectFlags.Sealed;
|
|
163
|
+
}
|
|
164
|
+
if (Object.isExtensible(obj)) {
|
|
165
|
+
return SerovalObjectFlags.None;
|
|
166
|
+
}
|
|
167
|
+
return SerovalObjectFlags.NonExtensible;
|
|
168
|
+
}
|
package/src/tree/sync.ts
CHANGED
|
@@ -33,6 +33,7 @@ import {
|
|
|
33
33
|
import {
|
|
34
34
|
getErrorConstructorName,
|
|
35
35
|
getErrorOptions,
|
|
36
|
+
getObjectFlag,
|
|
36
37
|
isIterable,
|
|
37
38
|
} from './shared';
|
|
38
39
|
import type {
|
|
@@ -98,6 +99,7 @@ function generateArrayNode(
|
|
|
98
99
|
a: generateNodeList(ctx, current),
|
|
99
100
|
f: undefined,
|
|
100
101
|
b: undefined,
|
|
102
|
+
o: getObjectFlag(current),
|
|
101
103
|
};
|
|
102
104
|
}
|
|
103
105
|
|
|
@@ -141,6 +143,7 @@ function generateMapNode(
|
|
|
141
143
|
a: undefined,
|
|
142
144
|
f: undefined,
|
|
143
145
|
b: undefined,
|
|
146
|
+
o: undefined,
|
|
144
147
|
};
|
|
145
148
|
}
|
|
146
149
|
|
|
@@ -178,6 +181,7 @@ function generateSetNode(
|
|
|
178
181
|
a: nodes,
|
|
179
182
|
f: undefined,
|
|
180
183
|
b: undefined,
|
|
184
|
+
o: undefined,
|
|
181
185
|
};
|
|
182
186
|
}
|
|
183
187
|
|
|
@@ -283,6 +287,7 @@ function generateObjectNode(
|
|
|
283
287
|
a: undefined,
|
|
284
288
|
f: undefined,
|
|
285
289
|
b: undefined,
|
|
290
|
+
o: getObjectFlag(current),
|
|
286
291
|
};
|
|
287
292
|
}
|
|
288
293
|
|
|
@@ -306,6 +311,7 @@ function generateAggregateErrorNode(
|
|
|
306
311
|
a: undefined,
|
|
307
312
|
f: undefined,
|
|
308
313
|
b: undefined,
|
|
314
|
+
o: undefined,
|
|
309
315
|
};
|
|
310
316
|
}
|
|
311
317
|
|
|
@@ -329,6 +335,7 @@ function generateErrorNode(
|
|
|
329
335
|
a: undefined,
|
|
330
336
|
f: undefined,
|
|
331
337
|
b: undefined,
|
|
338
|
+
o: undefined,
|
|
332
339
|
};
|
|
333
340
|
}
|
|
334
341
|
|
|
@@ -354,6 +361,7 @@ function generateHeadersNode(
|
|
|
354
361
|
a: undefined,
|
|
355
362
|
f: undefined,
|
|
356
363
|
b: undefined,
|
|
364
|
+
o: undefined,
|
|
357
365
|
};
|
|
358
366
|
}
|
|
359
367
|
|
|
@@ -379,6 +387,7 @@ function generateFormDataNode(
|
|
|
379
387
|
a: undefined,
|
|
380
388
|
f: undefined,
|
|
381
389
|
b: undefined,
|
|
390
|
+
o: undefined,
|
|
382
391
|
};
|
|
383
392
|
}
|
|
384
393
|
|
|
@@ -398,6 +407,7 @@ function generateBoxedNode(
|
|
|
398
407
|
a: undefined,
|
|
399
408
|
f: parseSync(ctx, current.valueOf()),
|
|
400
409
|
b: undefined,
|
|
410
|
+
o: undefined,
|
|
401
411
|
};
|
|
402
412
|
}
|
|
403
413
|
|
package/src/tree/types.ts
CHANGED
|
@@ -42,6 +42,13 @@ export const enum SerovalNodeType {
|
|
|
42
42
|
Boxed = 27,
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
export const enum SerovalObjectFlags {
|
|
46
|
+
None = 0,
|
|
47
|
+
NonExtensible = 1,
|
|
48
|
+
Sealed = 2,
|
|
49
|
+
Frozen = 3,
|
|
50
|
+
}
|
|
51
|
+
|
|
45
52
|
export interface SerovalBaseNode {
|
|
46
53
|
// Type of the node
|
|
47
54
|
t: SerovalNodeType;
|
|
@@ -61,8 +68,10 @@ export interface SerovalBaseNode {
|
|
|
61
68
|
a: (SerovalNode | undefined)[] | undefined;
|
|
62
69
|
// fulfilled node
|
|
63
70
|
f: SerovalNode | undefined;
|
|
64
|
-
// byte offset
|
|
71
|
+
// byte offset/object flags
|
|
65
72
|
b: number | undefined;
|
|
73
|
+
// object flag
|
|
74
|
+
o: SerovalObjectFlags | undefined;
|
|
66
75
|
}
|
|
67
76
|
|
|
68
77
|
export const enum SerovalObjectRecordSpecialKey {
|
|
@@ -207,6 +216,7 @@ export interface SerovalArrayNode extends SerovalBaseNode {
|
|
|
207
216
|
// items
|
|
208
217
|
a: (SerovalNode | undefined)[];
|
|
209
218
|
i: number;
|
|
219
|
+
o: SerovalObjectFlags;
|
|
210
220
|
}
|
|
211
221
|
|
|
212
222
|
export interface SerovalObjectNode extends SerovalBaseNode {
|
|
@@ -214,6 +224,7 @@ export interface SerovalObjectNode extends SerovalBaseNode {
|
|
|
214
224
|
// key/value pairs
|
|
215
225
|
d: SerovalObjectRecordNode;
|
|
216
226
|
i: number;
|
|
227
|
+
o: SerovalObjectFlags;
|
|
217
228
|
}
|
|
218
229
|
|
|
219
230
|
export interface SerovalNullConstructorNode extends SerovalBaseNode {
|
|
@@ -221,6 +232,7 @@ export interface SerovalNullConstructorNode extends SerovalBaseNode {
|
|
|
221
232
|
// key/value pairs
|
|
222
233
|
d: SerovalObjectRecordNode;
|
|
223
234
|
i: number;
|
|
235
|
+
o: SerovalObjectFlags;
|
|
224
236
|
}
|
|
225
237
|
|
|
226
238
|
export interface SerovalPromiseNode extends SerovalBaseNode {
|
package/src/tree/web-api.ts
CHANGED
|
@@ -31,6 +31,7 @@ export function createURLNode(
|
|
|
31
31
|
f: undefined,
|
|
32
32
|
a: undefined,
|
|
33
33
|
b: undefined,
|
|
34
|
+
o: undefined,
|
|
34
35
|
};
|
|
35
36
|
}
|
|
36
37
|
|
|
@@ -51,6 +52,7 @@ export function createURLSearchParamsNode(
|
|
|
51
52
|
f: undefined,
|
|
52
53
|
a: undefined,
|
|
53
54
|
b: undefined,
|
|
55
|
+
o: undefined,
|
|
54
56
|
};
|
|
55
57
|
}
|
|
56
58
|
|
|
@@ -71,6 +73,7 @@ export async function createBlobNode(
|
|
|
71
73
|
f: serializeArrayBuffer(ctx, await current.arrayBuffer()),
|
|
72
74
|
a: undefined,
|
|
73
75
|
b: undefined,
|
|
76
|
+
o: undefined,
|
|
74
77
|
};
|
|
75
78
|
}
|
|
76
79
|
|
|
@@ -91,5 +94,6 @@ export async function createFileNode(
|
|
|
91
94
|
f: serializeArrayBuffer(ctx, await current.arrayBuffer()),
|
|
92
95
|
a: undefined,
|
|
93
96
|
b: current.lastModified,
|
|
97
|
+
o: undefined,
|
|
94
98
|
};
|
|
95
99
|
}
|
package/src/tree/iterator.ts
DELETED