seroval 1.4.0 → 1.4.2
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 +553 -350
- package/dist/cjs/development/index.cjs.map +3 -3
- package/dist/cjs/production/index.cjs +3 -3
- package/dist/esm/development/index.mjs +553 -350
- package/dist/esm/development/index.mjs.map +3 -3
- package/dist/esm/production/index.mjs +3 -3
- package/dist/types/core/base-primitives.d.ts +2 -2
- package/dist/types/core/base-primitives.d.ts.map +1 -1
- package/dist/types/core/compat.d.ts +2 -1
- package/dist/types/core/compat.d.ts.map +1 -1
- package/dist/types/core/constants.d.ts +2 -2
- package/dist/types/core/constants.d.ts.map +1 -1
- package/dist/types/core/constructors.d.ts +1 -1
- package/dist/types/core/constructors.d.ts.map +1 -1
- package/dist/types/core/context/async-parser.d.ts +5 -4
- package/dist/types/core/context/async-parser.d.ts.map +1 -1
- package/dist/types/core/context/deserializer.d.ts +7 -2
- package/dist/types/core/context/deserializer.d.ts.map +1 -1
- package/dist/types/core/context/parser.d.ts +3 -1
- package/dist/types/core/context/parser.d.ts.map +1 -1
- package/dist/types/core/context/serializer.d.ts.map +1 -1
- package/dist/types/core/context/sync-parser.d.ts +5 -5
- package/dist/types/core/context/sync-parser.d.ts.map +1 -1
- package/dist/types/core/cross/index.d.ts.map +1 -1
- package/dist/types/core/errors.d.ts +9 -0
- package/dist/types/core/errors.d.ts.map +1 -1
- package/dist/types/core/node.d.ts +1 -1
- package/dist/types/core/string.d.ts.map +1 -1
- package/dist/types/core/tree/index.d.ts +4 -1
- package/dist/types/core/tree/index.d.ts.map +1 -1
- package/dist/types/core/types.d.ts +6 -11
- package/dist/types/core/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/core/base-primitives.ts +17 -18
- package/src/core/compat.ts +3 -1
- package/src/core/constants.ts +18 -4
- package/src/core/constructors.ts +2 -1
- package/src/core/context/async-parser.ts +102 -50
- package/src/core/context/deserializer.ts +269 -105
- package/src/core/context/parser.ts +12 -10
- package/src/core/context/serializer.ts +31 -36
- package/src/core/context/sync-parser.ts +149 -75
- package/src/core/cross/index.ts +2 -0
- package/src/core/errors.ts +33 -0
- package/src/core/node.ts +2 -2
- package/src/core/string.ts +3 -1
- package/src/core/tree/index.ts +10 -1
- package/src/core/types.ts +10 -19
package/src/core/errors.ts
CHANGED
|
@@ -78,6 +78,9 @@ const enum SpecificErrorCodes {
|
|
|
78
78
|
MissingReference = 5,
|
|
79
79
|
MissingReferenceForId = 6,
|
|
80
80
|
UnknownTypedArray = 7,
|
|
81
|
+
MalformedNode = 8,
|
|
82
|
+
ConflictedNodeId = 9,
|
|
83
|
+
DepthLimit = 10,
|
|
81
84
|
}
|
|
82
85
|
|
|
83
86
|
function getSpecificErrorMessage(code: SpecificErrorCodes): string {
|
|
@@ -161,3 +164,33 @@ export class SerovalUnknownTypedArrayError extends Error {
|
|
|
161
164
|
);
|
|
162
165
|
}
|
|
163
166
|
}
|
|
167
|
+
|
|
168
|
+
export class SerovalMalformedNodeError extends Error {
|
|
169
|
+
constructor(node: SerovalNode) {
|
|
170
|
+
super(
|
|
171
|
+
import.meta.env.PROD
|
|
172
|
+
? getSpecificErrorMessage(SpecificErrorCodes.MalformedNode)
|
|
173
|
+
: 'Malformed node type "' + node.t + '".',
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export class SerovalConflictedNodeIdError extends Error {
|
|
179
|
+
constructor(node: SerovalNode) {
|
|
180
|
+
super(
|
|
181
|
+
import.meta.env.PROD
|
|
182
|
+
? getSpecificErrorMessage(SpecificErrorCodes.ConflictedNodeId)
|
|
183
|
+
: 'Conflicted node id "' + node.i + '".',
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export class SerovalDepthLimitError extends Error {
|
|
189
|
+
constructor(limit: number) {
|
|
190
|
+
super(
|
|
191
|
+
import.meta.env.PROD
|
|
192
|
+
? getSpecificErrorMessage(SpecificErrorCodes.ConflictedNodeId)
|
|
193
|
+
: 'Depth limit of ' + limit + ' reached',
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
}
|
package/src/core/node.ts
CHANGED
|
@@ -13,7 +13,6 @@ export function createSerovalNode<
|
|
|
13
13
|
t: T,
|
|
14
14
|
i: N['i'],
|
|
15
15
|
s: N['s'],
|
|
16
|
-
l: N['l'],
|
|
17
16
|
c: N['c'],
|
|
18
17
|
m: N['m'],
|
|
19
18
|
p: N['p'],
|
|
@@ -22,12 +21,12 @@ export function createSerovalNode<
|
|
|
22
21
|
f: N['f'],
|
|
23
22
|
b: N['b'],
|
|
24
23
|
o: N['o'],
|
|
24
|
+
l: N['l'],
|
|
25
25
|
): N {
|
|
26
26
|
return {
|
|
27
27
|
t,
|
|
28
28
|
i,
|
|
29
29
|
s,
|
|
30
|
-
l,
|
|
31
30
|
c,
|
|
32
31
|
m,
|
|
33
32
|
p,
|
|
@@ -36,5 +35,6 @@ export function createSerovalNode<
|
|
|
36
35
|
f,
|
|
37
36
|
b,
|
|
38
37
|
o,
|
|
38
|
+
l,
|
|
39
39
|
} as N;
|
|
40
40
|
}
|
package/src/core/string.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { NIL } from './constants';
|
|
2
|
+
|
|
1
3
|
export function serializeChar(str: string): string | undefined {
|
|
2
4
|
switch (str) {
|
|
3
5
|
case '"':
|
|
@@ -21,7 +23,7 @@ export function serializeChar(str: string): string | undefined {
|
|
|
21
23
|
case '\u2029':
|
|
22
24
|
return '\\u2029';
|
|
23
25
|
default:
|
|
24
|
-
return
|
|
26
|
+
return NIL;
|
|
25
27
|
}
|
|
26
28
|
}
|
|
27
29
|
|
package/src/core/tree/index.ts
CHANGED
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
SerovalMode,
|
|
19
19
|
} from '../plugin';
|
|
20
20
|
import type { SerovalNode } from '../types';
|
|
21
|
+
import { ALL_ENABLED } from '../compat';
|
|
21
22
|
export type SyncParserContextOptions = Omit<BaseParserContextOptions, 'refs'>;
|
|
22
23
|
export type AsyncParserContextOptions = Omit<BaseParserContextOptions, 'refs'>;
|
|
23
24
|
|
|
@@ -67,6 +68,10 @@ export interface SerovalJSON {
|
|
|
67
68
|
m: number[];
|
|
68
69
|
}
|
|
69
70
|
|
|
71
|
+
export interface FromJSONOptions extends PluginAccessOptions {
|
|
72
|
+
disabledFeatures?: number;
|
|
73
|
+
}
|
|
74
|
+
|
|
70
75
|
export function toJSON<T>(
|
|
71
76
|
source: T,
|
|
72
77
|
options: SyncParserContextOptions = {},
|
|
@@ -114,12 +119,16 @@ export function compileJSON(
|
|
|
114
119
|
|
|
115
120
|
export function fromJSON<T>(
|
|
116
121
|
source: SerovalJSON,
|
|
117
|
-
options:
|
|
122
|
+
options: FromJSONOptions = {},
|
|
118
123
|
): T {
|
|
119
124
|
const plugins = resolvePlugins(options.plugins);
|
|
125
|
+
const disabledFeatures = options.disabledFeatures || 0;
|
|
126
|
+
const sourceFeatures = source.f ?? ALL_ENABLED;
|
|
120
127
|
const ctx = createVanillaDeserializerContext({
|
|
121
128
|
plugins,
|
|
122
129
|
markedRefs: source.m,
|
|
130
|
+
features: sourceFeatures & ~disabledFeatures,
|
|
131
|
+
disabledFeatures,
|
|
123
132
|
});
|
|
124
133
|
return deserializeTop(ctx, source.t) as T;
|
|
125
134
|
}
|
package/src/core/types.ts
CHANGED
|
@@ -14,8 +14,6 @@ export interface SerovalBaseNode {
|
|
|
14
14
|
i: number | undefined;
|
|
15
15
|
// Serialized value
|
|
16
16
|
s: unknown;
|
|
17
|
-
// size/length
|
|
18
|
-
l: number | undefined;
|
|
19
17
|
// Constructor name / RegExp source
|
|
20
18
|
c: string | undefined;
|
|
21
19
|
// message/flags
|
|
@@ -25,13 +23,15 @@ export interface SerovalBaseNode {
|
|
|
25
23
|
// entries (for Map, etc.)
|
|
26
24
|
e: SerovalMapRecordNode | undefined;
|
|
27
25
|
// array of nodes
|
|
28
|
-
a: (SerovalNode |
|
|
26
|
+
a: (SerovalNode | 0)[] | undefined;
|
|
29
27
|
// fulfilled node
|
|
30
28
|
f: SerovalNode | undefined;
|
|
31
29
|
// byte offset/object flags
|
|
32
30
|
b: number | undefined;
|
|
33
31
|
// object flag
|
|
34
32
|
o: SerovalObjectFlags | undefined;
|
|
33
|
+
// length
|
|
34
|
+
l: number | undefined;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export type SerovalObjectRecordKey = string | SerovalNode;
|
|
@@ -39,13 +39,11 @@ export type SerovalObjectRecordKey = string | SerovalNode;
|
|
|
39
39
|
export interface SerovalObjectRecordNode {
|
|
40
40
|
k: SerovalObjectRecordKey[];
|
|
41
41
|
v: SerovalNode[];
|
|
42
|
-
s: number;
|
|
43
42
|
}
|
|
44
43
|
|
|
45
44
|
export interface SerovalMapRecordNode {
|
|
46
45
|
k: SerovalNode[];
|
|
47
46
|
v: SerovalNode[];
|
|
48
|
-
s: number;
|
|
49
47
|
}
|
|
50
48
|
|
|
51
49
|
export interface SerovalNumberNode extends SerovalBaseNode {
|
|
@@ -104,38 +102,35 @@ export interface SerovalArrayBufferNode extends SerovalBaseNode {
|
|
|
104
102
|
i: number;
|
|
105
103
|
// byte string
|
|
106
104
|
s: string;
|
|
107
|
-
// length
|
|
108
|
-
l: number;
|
|
109
105
|
// array buffer constructor
|
|
110
106
|
f: SerovalNodeWithID;
|
|
111
107
|
}
|
|
112
108
|
|
|
113
|
-
|
|
114
109
|
export interface SerovalTypedArrayNode extends SerovalBaseNode {
|
|
115
110
|
t: SerovalNodeType.TypedArray;
|
|
116
111
|
// id
|
|
117
112
|
i: number;
|
|
118
|
-
// length
|
|
119
|
-
l: number;
|
|
120
113
|
// TypedArray Constructor
|
|
121
114
|
c: string;
|
|
122
115
|
// ArrayBuffer reference
|
|
123
116
|
f: SerovalNode;
|
|
124
117
|
// Byte Offset
|
|
125
118
|
b: number;
|
|
119
|
+
// length
|
|
120
|
+
l: number;
|
|
126
121
|
}
|
|
127
122
|
|
|
128
123
|
export interface SerovalBigIntTypedArrayNode extends SerovalBaseNode {
|
|
129
124
|
t: SerovalNodeType.BigIntTypedArray;
|
|
130
125
|
i: number;
|
|
131
|
-
// length
|
|
132
|
-
l: number;
|
|
133
126
|
// TypedArray Constructor
|
|
134
127
|
c: string;
|
|
135
128
|
// ArrayBuffer reference
|
|
136
129
|
f: SerovalNode;
|
|
137
130
|
// Byte Offset
|
|
138
131
|
b: number;
|
|
132
|
+
// length
|
|
133
|
+
l: number;
|
|
139
134
|
}
|
|
140
135
|
|
|
141
136
|
export type SerovalSemiPrimitiveNode =
|
|
@@ -149,8 +144,6 @@ export interface SerovalSetNode extends SerovalBaseNode {
|
|
|
149
144
|
t: SerovalNodeType.Set;
|
|
150
145
|
// id
|
|
151
146
|
i: number;
|
|
152
|
-
// Size of Set
|
|
153
|
-
l: number;
|
|
154
147
|
// Items in Set (as array)
|
|
155
148
|
a: SerovalNode[];
|
|
156
149
|
}
|
|
@@ -165,10 +158,8 @@ export interface SerovalMapNode extends SerovalBaseNode {
|
|
|
165
158
|
|
|
166
159
|
export interface SerovalArrayNode extends SerovalBaseNode {
|
|
167
160
|
t: SerovalNodeType.Array;
|
|
168
|
-
// size of array
|
|
169
|
-
l: number;
|
|
170
161
|
// items
|
|
171
|
-
a: (SerovalNode |
|
|
162
|
+
a: (SerovalNode | 0)[];
|
|
172
163
|
i: number;
|
|
173
164
|
o: SerovalObjectFlags;
|
|
174
165
|
}
|
|
@@ -233,12 +224,12 @@ export interface SerovalReferenceNode extends SerovalBaseNode {
|
|
|
233
224
|
export interface SerovalDataViewNode extends SerovalBaseNode {
|
|
234
225
|
t: SerovalNodeType.DataView;
|
|
235
226
|
i: number;
|
|
236
|
-
// byte length
|
|
237
|
-
l: number;
|
|
238
227
|
// reference to array buffer
|
|
239
228
|
f: SerovalNode;
|
|
240
229
|
// byte offset
|
|
241
230
|
b: number;
|
|
231
|
+
// byte length
|
|
232
|
+
l: number;
|
|
242
233
|
}
|
|
243
234
|
|
|
244
235
|
export interface SerovalBoxedNode extends SerovalBaseNode {
|