json-as 0.9.23 → 0.9.25
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/CHANGELOG +2 -1
- package/README.md +1 -1
- package/assembly/__benches__/misc.bench.ts +33 -0
- package/assembly/custom/util.ts +14 -11
- package/assembly/deserialize/array.ts +8 -0
- package/assembly/deserialize/bool.ts +16 -0
- package/assembly/deserialize/date.ts +17 -9
- package/assembly/deserialize/float.ts +12 -0
- package/assembly/deserialize/integer.ts +9 -0
- package/assembly/deserialize/map.ts +7 -0
- package/assembly/deserialize/object.ts +135 -0
- package/assembly/deserialize/string.ts +8 -2
- package/assembly/index.ts +59 -11
- package/assembly/serialize/bool.ts +0 -12
- package/assembly/serialize/string.ts +0 -11
- package/assembly/test.ts +23 -23
- package/package.json +3 -2
- package/transform/lib/index.js +155 -172
- package/transform/lib/index.js.map +1 -0
- package/transform/package.json +1 -1
- package/transform/src/index.ts +235 -189
- package/transform/tsconfig.json +6 -26
- package/assembly/__benches__/bool.bench.ts +0 -14
- package/assembly/__benches__/simd.bench.ts +0 -36
- package/assembly/__benches__/string.bench.ts +0 -21
- package/assembly/util/strings.ts +0 -0
package/transform/lib/index.js
CHANGED
|
@@ -1,86 +1,81 @@
|
|
|
1
|
-
import { FieldDeclaration, IdentifierExpression, StringLiteralExpression, IntegerLiteralExpression, FloatLiteralExpression, NullExpression, TrueExpression, FalseExpression,
|
|
1
|
+
import { FieldDeclaration, IdentifierExpression, StringLiteralExpression, IntegerLiteralExpression, FloatLiteralExpression, NullExpression, TrueExpression, FalseExpression, } from "assemblyscript/dist/assemblyscript.js";
|
|
2
2
|
import { toString, isStdlib } from "visitor-as/dist/utils.js";
|
|
3
3
|
import { BaseVisitor, SimpleParser } from "visitor-as/dist/index.js";
|
|
4
4
|
import { Transform } from "assemblyscript/dist/transform.js";
|
|
5
|
-
import chalk from "chalk";
|
|
6
|
-
const json_types = ["Array", "string", "String", "u8", "i8", "u16", "i16", "u32", "i32", "u64", "i64", "f32", "f64", "bool", "boolean", "Map", "Date"];
|
|
7
5
|
class JSONTransform extends BaseVisitor {
|
|
8
|
-
types = json_types;
|
|
9
6
|
schemasList = [];
|
|
10
7
|
currentClass;
|
|
11
8
|
sources = new Set();
|
|
12
|
-
|
|
13
|
-
if (node.extendsType) {
|
|
14
|
-
if (schema.parent?.members) {
|
|
15
|
-
for (let i = schema.parent.members.length - 1; i >= 0; i--) {
|
|
16
|
-
const replace = schema.members.find((v) => v.name == schema.parent?.members[i]?.name);
|
|
17
|
-
if (!replace) {
|
|
18
|
-
members.unshift(schema.parent?.members[i].node);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
this.appendParentFields(schema.parent.node, schema, members);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
handleEmptyClass(node, schema, members) {
|
|
26
|
-
let SERIALIZE_RAW_EMPTY = '__SERIALIZE(): string {\n return "{}";\n}';
|
|
27
|
-
let SERIALIZE_PRETTY_EMPTY = '__SERIALIZE_PRETTY(): string {\n return "{}";\n}';
|
|
28
|
-
let INITIALIZE_EMPTY = "__INITIALIZE(): this {\n return this;\n}";
|
|
29
|
-
let DESERIALIZE_EMPTY = "__DESERIALIZE(data: string, key_start: i32, key_end: i32, value_start: i32, value_end: i32): boolean {\n return false;\n}";
|
|
30
|
-
if (process.env["JSON_DEBUG"]) {
|
|
31
|
-
console.log(SERIALIZE_RAW_EMPTY);
|
|
32
|
-
console.log(SERIALIZE_PRETTY_EMPTY);
|
|
33
|
-
console.log(INITIALIZE_EMPTY);
|
|
34
|
-
console.log(DESERIALIZE_EMPTY);
|
|
35
|
-
}
|
|
36
|
-
const SERIALIZE_RAW_METHOD_EMPTY = SimpleParser.parseClassMember(SERIALIZE_RAW_EMPTY, node);
|
|
37
|
-
const SERIALIZE_PRETTY_METHOD_EMPTY = SimpleParser.parseClassMember(SERIALIZE_PRETTY_EMPTY, node);
|
|
38
|
-
const INITIALIZE_METHOD_EMPTY = SimpleParser.parseClassMember(INITIALIZE_EMPTY, node);
|
|
39
|
-
const DESERIALIZE_METHOD_EMPTY = SimpleParser.parseClassMember(DESERIALIZE_EMPTY, node);
|
|
40
|
-
if (!node.members.find((v) => v.name.text == "__SERIALIZE"))
|
|
41
|
-
node.members.push(SERIALIZE_RAW_METHOD_EMPTY);
|
|
42
|
-
if (!node.members.find((v) => v.name.text == "__SERIALIZE_PRETTY"))
|
|
43
|
-
node.members.push(SERIALIZE_PRETTY_METHOD_EMPTY);
|
|
44
|
-
if (!node.members.find((v) => v.name.text == "__INITIALIZE"))
|
|
45
|
-
node.members.push(INITIALIZE_METHOD_EMPTY);
|
|
46
|
-
if (!node.members.find((v) => v.name.text == "__DESERIALIZE"))
|
|
47
|
-
node.members.push(DESERIALIZE_METHOD_EMPTY);
|
|
48
|
-
}
|
|
49
|
-
filterMembers(members) {
|
|
50
|
-
return members.filter((v) => v instanceof FieldDeclaration && !v.decorators?.find((v) => v.name.text == "omit"));
|
|
51
|
-
}
|
|
9
|
+
visitMethodDeclaration() { }
|
|
52
10
|
visitClassDeclaration(node) {
|
|
53
11
|
if (!node.decorators?.length)
|
|
54
12
|
return;
|
|
55
|
-
|
|
13
|
+
let found = false;
|
|
14
|
+
for (const decorator of node.decorators) {
|
|
15
|
+
const name = decorator.name.text;
|
|
16
|
+
if (name === "json" || name === "serializable") {
|
|
17
|
+
found = true;
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (!found)
|
|
56
22
|
return;
|
|
57
|
-
this.types = json_types;
|
|
58
23
|
const schema = new SchemaData();
|
|
59
24
|
schema.node = node;
|
|
60
25
|
schema.name = node.name.text;
|
|
26
|
+
const members = [
|
|
27
|
+
...node.members.filter((v) => v.kind === 54),
|
|
28
|
+
];
|
|
61
29
|
if (node.extendsType) {
|
|
62
30
|
schema.parent = this.schemasList.find((v) => v.name == node.extendsType?.name.identifier.text);
|
|
31
|
+
if (schema.parent?.members) {
|
|
32
|
+
for (let i = schema.parent.members.length - 1; i >= 0; i--) {
|
|
33
|
+
const replace = schema.members.find((v) => v.name == schema.parent?.members[i]?.name);
|
|
34
|
+
if (!replace) {
|
|
35
|
+
members.unshift(schema.parent?.members[i].node);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
63
39
|
}
|
|
64
|
-
const _members = [...node.members];
|
|
65
|
-
this.appendParentFields(node, schema, _members);
|
|
66
|
-
const members = this.filterMembers(_members);
|
|
67
40
|
if (!members.length) {
|
|
68
|
-
|
|
41
|
+
let SERIALIZE_RAW_EMPTY = '__SERIALIZE(): string {\n return "{}";\n}';
|
|
42
|
+
let INITIALIZE_EMPTY = "__INITIALIZE(): this {\n return this;\n}";
|
|
43
|
+
let DESERIALIZE_EMPTY = "__DESERIALIZE(data: string, key_start: i32, key_end: i32, value_start: i32, value_end: i32): boolean {\n return false;\n}";
|
|
44
|
+
if (process.env["JSON_DEBUG"]) {
|
|
45
|
+
console.log(SERIALIZE_RAW_EMPTY);
|
|
46
|
+
console.log(INITIALIZE_EMPTY);
|
|
47
|
+
console.log(DESERIALIZE_EMPTY);
|
|
48
|
+
}
|
|
49
|
+
const SERIALIZE_RAW_METHOD_EMPTY = SimpleParser.parseClassMember(SERIALIZE_RAW_EMPTY, node);
|
|
50
|
+
const INITIALIZE_METHOD_EMPTY = SimpleParser.parseClassMember(INITIALIZE_EMPTY, node);
|
|
51
|
+
const DESERIALIZE_METHOD_EMPTY = SimpleParser.parseClassMember(DESERIALIZE_EMPTY, node);
|
|
52
|
+
if (!node.members.find((v) => v.name.text == "__SERIALIZE"))
|
|
53
|
+
node.members.push(SERIALIZE_RAW_METHOD_EMPTY);
|
|
54
|
+
if (!node.members.find((v) => v.name.text == "__INITIALIZE"))
|
|
55
|
+
node.members.push(INITIALIZE_METHOD_EMPTY);
|
|
56
|
+
if (!node.members.find((v) => v.name.text == "__DESERIALIZE"))
|
|
57
|
+
node.members.push(DESERIALIZE_METHOD_EMPTY);
|
|
58
|
+
this.schemasList.push(schema);
|
|
69
59
|
}
|
|
70
60
|
for (const member of members) {
|
|
71
61
|
const name = member.name;
|
|
62
|
+
if (!(member instanceof FieldDeclaration))
|
|
63
|
+
continue;
|
|
72
64
|
if (!member.type) {
|
|
73
|
-
throw new Error("Fields must be strongly typed! Found " +
|
|
65
|
+
throw new Error("Fields must be strongly typed! Found " +
|
|
66
|
+
toString(member) +
|
|
67
|
+
" at " +
|
|
68
|
+
node.range.source.normalizedPath);
|
|
74
69
|
}
|
|
75
70
|
const type = toString(member.type);
|
|
76
71
|
if (type.startsWith("(") && type.includes("=>"))
|
|
77
72
|
continue;
|
|
78
73
|
const value = member.initializer ? toString(member.initializer) : null;
|
|
79
|
-
if (member.flags == 32
|
|
74
|
+
if (member.flags == 32)
|
|
80
75
|
continue;
|
|
81
|
-
if (member.flags === 512
|
|
76
|
+
if (member.flags === 512)
|
|
82
77
|
continue;
|
|
83
|
-
if (member.flags === 1024
|
|
78
|
+
if (member.flags === 1024)
|
|
84
79
|
continue;
|
|
85
80
|
const mem = new Property();
|
|
86
81
|
mem.name = name.text;
|
|
@@ -100,7 +95,8 @@ class JSONTransform extends BaseVisitor {
|
|
|
100
95
|
switch (decoratorName) {
|
|
101
96
|
case "alias": {
|
|
102
97
|
if (!args.length)
|
|
103
|
-
throw new Error("Expected 1 argument but got zero at @alias in " +
|
|
98
|
+
throw new Error("Expected 1 argument but got zero at @alias in " +
|
|
99
|
+
node.range.source.normalizedPath);
|
|
104
100
|
mem.alias = args[0];
|
|
105
101
|
mem.flags.set(PropertyFlags.Alias, args);
|
|
106
102
|
break;
|
|
@@ -111,7 +107,8 @@ class JSONTransform extends BaseVisitor {
|
|
|
111
107
|
}
|
|
112
108
|
case "omitif": {
|
|
113
109
|
if (!decorator.args?.length)
|
|
114
|
-
throw new Error("Expected 1 argument but got zero at @omitif in " +
|
|
110
|
+
throw new Error("Expected 1 argument but got zero at @omitif in " +
|
|
111
|
+
node.range.source.normalizedPath);
|
|
115
112
|
mem.flags.set(PropertyFlags.OmitIf, args);
|
|
116
113
|
break;
|
|
117
114
|
}
|
|
@@ -122,10 +119,22 @@ class JSONTransform extends BaseVisitor {
|
|
|
122
119
|
}
|
|
123
120
|
}
|
|
124
121
|
}
|
|
125
|
-
|
|
126
|
-
mem.generate();
|
|
122
|
+
mem.generate(false);
|
|
127
123
|
if (this.schemasList.find((v) => v.name == type)) {
|
|
128
|
-
mem.initialize =
|
|
124
|
+
mem.initialize =
|
|
125
|
+
"this." +
|
|
126
|
+
name.text +
|
|
127
|
+
" = changetype<nonnull<" +
|
|
128
|
+
mem.type +
|
|
129
|
+
">>(__new(offsetof<nonnull<" +
|
|
130
|
+
mem.type +
|
|
131
|
+
">>(), idof<nonnull<" +
|
|
132
|
+
mem.type +
|
|
133
|
+
">>()));\n changetype<nonnull<" +
|
|
134
|
+
mem.type +
|
|
135
|
+
">>(this." +
|
|
136
|
+
name.text +
|
|
137
|
+
").__INITIALIZE()";
|
|
129
138
|
}
|
|
130
139
|
else if (mem.value) {
|
|
131
140
|
mem.initialize = "this." + name.text + " = " + mem.value;
|
|
@@ -137,7 +146,8 @@ class JSONTransform extends BaseVisitor {
|
|
|
137
146
|
mem.initialize = "this." + name.text + ' = ""';
|
|
138
147
|
}
|
|
139
148
|
else if (type === "Array") {
|
|
140
|
-
mem.initialize =
|
|
149
|
+
mem.initialize =
|
|
150
|
+
"this." + name.text + " = instantiate<" + mem.type + ">()";
|
|
141
151
|
}
|
|
142
152
|
else if (type === "bool" || type === "boolean") {
|
|
143
153
|
mem.initialize = "this." + name.text + " = false";
|
|
@@ -145,7 +155,14 @@ class JSONTransform extends BaseVisitor {
|
|
|
145
155
|
else if (type === "JSON.Raw") {
|
|
146
156
|
mem.initialize = "this." + name.text + ' = ""';
|
|
147
157
|
}
|
|
148
|
-
else if (type === "u8" ||
|
|
158
|
+
else if (type === "u8" ||
|
|
159
|
+
type === "u16" ||
|
|
160
|
+
type === "u32" ||
|
|
161
|
+
type === "u64" ||
|
|
162
|
+
type === "i8" ||
|
|
163
|
+
type === "i16" ||
|
|
164
|
+
type === "i32" ||
|
|
165
|
+
type === "i64") {
|
|
149
166
|
mem.initialize = "this." + name.text + " = 0";
|
|
150
167
|
}
|
|
151
168
|
else if (type === "f32" || type === "f64") {
|
|
@@ -160,14 +177,15 @@ class JSONTransform extends BaseVisitor {
|
|
|
160
177
|
let indent = " ";
|
|
161
178
|
if (!schema.members.length)
|
|
162
179
|
return;
|
|
163
|
-
|
|
164
|
-
if (schema.members[0]?.flags.has(PropertyFlags.OmitNull) ||
|
|
180
|
+
found = false;
|
|
181
|
+
if (schema.members[0]?.flags.has(PropertyFlags.OmitNull) ||
|
|
182
|
+
schema.members[0]?.flags.has(PropertyFlags.OmitIf)) {
|
|
165
183
|
SERIALIZE_RAW += schema.members[0]?.serialize;
|
|
166
|
-
SERIALIZE_PRETTY += "\\n" +
|
|
184
|
+
SERIALIZE_PRETTY += "\\n" + schema.members[0]?.serialize;
|
|
167
185
|
}
|
|
168
186
|
else {
|
|
169
187
|
SERIALIZE_RAW += schema.members[0]?.serialize + ",";
|
|
170
|
-
SERIALIZE_PRETTY += "\\n" +
|
|
188
|
+
SERIALIZE_PRETTY += "\\n" + schema.members[0]?.serialize + ",\\n";
|
|
171
189
|
found = true;
|
|
172
190
|
}
|
|
173
191
|
if (schema.members[0]?.initialize)
|
|
@@ -176,21 +194,22 @@ class JSONTransform extends BaseVisitor {
|
|
|
176
194
|
const member = schema.members[i];
|
|
177
195
|
if (member.initialize)
|
|
178
196
|
INITIALIZE += " " + member.initialize + ";\n";
|
|
179
|
-
if (member.flags.has(PropertyFlags.
|
|
180
|
-
|
|
181
|
-
if (member.flags.has(PropertyFlags.OmitNull) || member.flags.has(PropertyFlags.OmitIf)) {
|
|
197
|
+
if (member.flags.has(PropertyFlags.OmitNull) ||
|
|
198
|
+
member.flags.has(PropertyFlags.OmitIf)) {
|
|
182
199
|
SERIALIZE_RAW += member.serialize;
|
|
183
|
-
SERIALIZE_PRETTY += member.
|
|
200
|
+
SERIALIZE_PRETTY += member.serialize;
|
|
184
201
|
}
|
|
185
202
|
else {
|
|
186
203
|
SERIALIZE_RAW += member.serialize + ",";
|
|
187
|
-
SERIALIZE_PRETTY += indent + member.
|
|
204
|
+
SERIALIZE_PRETTY += indent + member.serialize + ",\\n";
|
|
188
205
|
found = true;
|
|
189
206
|
}
|
|
190
207
|
}
|
|
191
208
|
if (found) {
|
|
192
|
-
SERIALIZE_RAW +=
|
|
193
|
-
|
|
209
|
+
SERIALIZE_RAW +=
|
|
210
|
+
"`;\n store<u16>(changetype<usize>(out) + ((out.length - 1) << 1), 125);\n return out;\n}";
|
|
211
|
+
SERIALIZE_PRETTY +=
|
|
212
|
+
"`;\n store<u32>(changetype<usize>(out) + ((out.length - 2) << 1), 8192010);\n return out;\n}";
|
|
194
213
|
}
|
|
195
214
|
else {
|
|
196
215
|
SERIALIZE_RAW += "}`;\n return out;\n}";
|
|
@@ -219,29 +238,35 @@ class JSONTransform extends BaseVisitor {
|
|
|
219
238
|
const _name = encodeKey(firstMember.alias || firstMember.name);
|
|
220
239
|
if (_name.length === 1) {
|
|
221
240
|
if (first) {
|
|
222
|
-
DESERIALIZE +=
|
|
241
|
+
DESERIALIZE +=
|
|
242
|
+
" if (1 === len) {\n switch (load<u16>(changetype<usize>(data) + (key_start << 1))) {\n";
|
|
223
243
|
first = false;
|
|
224
244
|
}
|
|
225
245
|
else {
|
|
226
|
-
DESERIALIZE +=
|
|
246
|
+
DESERIALIZE +=
|
|
247
|
+
"else if (1 === len) {\n switch (load<u16>(changetype<usize>(data) + (key_start << 1))) {\n";
|
|
227
248
|
}
|
|
228
249
|
}
|
|
229
250
|
else if (_name.length === 2) {
|
|
230
251
|
if (first) {
|
|
231
|
-
DESERIALIZE +=
|
|
252
|
+
DESERIALIZE +=
|
|
253
|
+
" if (2 === len) {\n switch (load<u32>(changetype<usize>(data) + (key_start << 1))) {\n";
|
|
232
254
|
first = false;
|
|
233
255
|
}
|
|
234
256
|
else {
|
|
235
|
-
DESERIALIZE +=
|
|
257
|
+
DESERIALIZE +=
|
|
258
|
+
"else if (2 === len) {\n switch (load<u32>(changetype<usize>(data) + (key_start << 1))) {\n";
|
|
236
259
|
}
|
|
237
260
|
}
|
|
238
261
|
else if (_name.length === 4) {
|
|
239
262
|
if (first) {
|
|
240
|
-
DESERIALIZE +=
|
|
263
|
+
DESERIALIZE +=
|
|
264
|
+
" if (4 === len) {\n const code = load<u64>(changetype<usize>(data) + (key_start << 1));\n";
|
|
241
265
|
first = false;
|
|
242
266
|
}
|
|
243
267
|
else {
|
|
244
|
-
DESERIALIZE +=
|
|
268
|
+
DESERIALIZE +=
|
|
269
|
+
"else if (4 === len) {\n const code = load<u64>(changetype<usize>(data) + (key_start << 1));\n";
|
|
245
270
|
}
|
|
246
271
|
}
|
|
247
272
|
else {
|
|
@@ -271,7 +296,9 @@ class JSONTransform extends BaseVisitor {
|
|
|
271
296
|
DESERIALIZE += ` if (${charCodeAt64(_name, 0)} === code) { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`;
|
|
272
297
|
}
|
|
273
298
|
else {
|
|
274
|
-
DESERIALIZE =
|
|
299
|
+
DESERIALIZE =
|
|
300
|
+
DESERIALIZE.slice(0, DESERIALIZE.length - 1) +
|
|
301
|
+
`else if (${charCodeAt64(_name, 0)} === code) {\n ${member.deserialize}\n return true;\n }\n`;
|
|
275
302
|
}
|
|
276
303
|
}
|
|
277
304
|
else {
|
|
@@ -280,7 +307,9 @@ class JSONTransform extends BaseVisitor {
|
|
|
280
307
|
DESERIALIZE += ` if (0 === memory.compare(changetype<usize>("${escapeQuote(escapeSlash(_name))}"), changetype<usize>(data) + (key_start << 1), ${_name.length << 1})) { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`;
|
|
281
308
|
}
|
|
282
309
|
else {
|
|
283
|
-
DESERIALIZE =
|
|
310
|
+
DESERIALIZE =
|
|
311
|
+
DESERIALIZE.slice(0, DESERIALIZE.length - 1) +
|
|
312
|
+
` else if (0 === memory.compare(changetype<usize>("${escapeQuote(escapeSlash(_name))}"), changetype<usize>(data) + (key_start << 1), ${_name.length << 1})) { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`;
|
|
284
313
|
}
|
|
285
314
|
}
|
|
286
315
|
}
|
|
@@ -288,136 +317,78 @@ class JSONTransform extends BaseVisitor {
|
|
|
288
317
|
DESERIALIZE += ` default: {\n return false;\n }\n }\n`;
|
|
289
318
|
}
|
|
290
319
|
else if (_name.length == 4) {
|
|
291
|
-
DESERIALIZE =
|
|
320
|
+
DESERIALIZE =
|
|
321
|
+
DESERIALIZE.slice(0, DESERIALIZE.length - 1) +
|
|
322
|
+
` else {\n return false;\n }\n`;
|
|
292
323
|
}
|
|
293
324
|
else {
|
|
294
|
-
DESERIALIZE =
|
|
325
|
+
DESERIALIZE =
|
|
326
|
+
DESERIALIZE.slice(0, DESERIALIZE.length - 1) +
|
|
327
|
+
` else {\n return false;\n }\n`;
|
|
295
328
|
}
|
|
296
329
|
DESERIALIZE += " } ";
|
|
297
330
|
}
|
|
298
331
|
DESERIALIZE += "\n return false;\n}";
|
|
299
|
-
//console.log(sortedMembers);
|
|
300
332
|
if (process.env["JSON_DEBUG"]) {
|
|
301
333
|
console.log(SERIALIZE_RAW);
|
|
302
|
-
console.log(SERIALIZE_PRETTY);
|
|
303
334
|
console.log(INITIALIZE);
|
|
304
335
|
console.log(DESERIALIZE);
|
|
305
336
|
}
|
|
306
337
|
const SERIALIZE_RAW_METHOD = SimpleParser.parseClassMember(SERIALIZE_RAW, node);
|
|
307
|
-
const
|
|
338
|
+
const DESERIALIZE_SAFE = DESERIALIZE.replaceAll("__DESERIALIZE", "__DESERIALIZE_SAFE");
|
|
308
339
|
const INITIALIZE_METHOD = SimpleParser.parseClassMember(INITIALIZE, node);
|
|
309
340
|
const DESERIALIZE_METHOD = SimpleParser.parseClassMember(DESERIALIZE, node);
|
|
341
|
+
const DESERIALIZE_SAFE_METHOD = SimpleParser.parseClassMember(DESERIALIZE_SAFE, node);
|
|
310
342
|
if (!node.members.find((v) => v.name.text == "__SERIALIZE"))
|
|
311
343
|
node.members.push(SERIALIZE_RAW_METHOD);
|
|
312
|
-
if (!node.members.find((v) => v.name.text == "__SERIALIZE_PRETTY"))
|
|
313
|
-
node.members.push(SERIALIZE_PRETTY_METHOD);
|
|
314
344
|
if (!node.members.find((v) => v.name.text == "__INITIALIZE"))
|
|
315
345
|
node.members.push(INITIALIZE_METHOD);
|
|
316
346
|
if (!node.members.find((v) => v.name.text == "__DESERIALIZE"))
|
|
317
347
|
node.members.push(DESERIALIZE_METHOD);
|
|
348
|
+
if (!node.members.find((v) => v.name.text == "__DESERIALIZE_SAFE"))
|
|
349
|
+
node.members.push(DESERIALIZE_SAFE_METHOD);
|
|
318
350
|
this.schemasList.push(schema);
|
|
319
351
|
}
|
|
320
352
|
visitSource(node) {
|
|
321
353
|
super.visitSource(node);
|
|
322
|
-
// Only add the import statement to sources that have JSON decorated classes.
|
|
323
354
|
if (!this.sources.has(node)) {
|
|
324
355
|
return;
|
|
325
356
|
}
|
|
326
357
|
}
|
|
327
358
|
}
|
|
328
359
|
export default class Transformer extends Transform {
|
|
329
|
-
// Trigger the transform after parse.
|
|
330
360
|
afterParse(parser) {
|
|
331
|
-
// Create new transform
|
|
332
361
|
const transformer = new JSONTransform();
|
|
333
|
-
// Sort the sources so that user scripts are visited last
|
|
334
362
|
const sources = parser.sources
|
|
335
363
|
.filter((source) => !isStdlib(source))
|
|
336
364
|
.sort((_a, _b) => {
|
|
337
365
|
const a = _a.internalPath;
|
|
338
366
|
const b = _b.internalPath;
|
|
339
|
-
if (a[0] !== "~" && b[0] === "~") {
|
|
340
|
-
return 1;
|
|
341
|
-
}
|
|
342
367
|
if (a[0] === "~" && b[0] !== "~") {
|
|
343
368
|
return -1;
|
|
344
369
|
}
|
|
345
|
-
|
|
370
|
+
else if (a[0] !== "~" && b[0] === "~") {
|
|
371
|
+
return 1;
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
return 0;
|
|
375
|
+
}
|
|
346
376
|
});
|
|
347
|
-
// Loop over every source
|
|
348
377
|
for (const source of sources) {
|
|
349
|
-
// Ignore all lib and std. Visit everything else.
|
|
350
378
|
if (!isStdlib(source)) {
|
|
351
379
|
transformer.visit(source);
|
|
352
380
|
}
|
|
353
381
|
}
|
|
354
|
-
// Check that every parent and child class is hooked up correctly
|
|
355
382
|
const schemas = transformer.schemasList;
|
|
356
383
|
for (const schema of schemas) {
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
384
|
+
if (schema.parent) {
|
|
385
|
+
const parent = schemas.find((v) => v.name === schema.parent?.name);
|
|
386
|
+
if (!parent)
|
|
387
|
+
throw new Error(`Class ${schema.name} extends its parent class ${schema.parent}, but ${schema.parent} does not include a @json or @serializable decorator! Add the decorator and rebuild.`);
|
|
361
388
|
}
|
|
362
389
|
}
|
|
363
390
|
}
|
|
364
391
|
}
|
|
365
|
-
function checkInheritance(schema, schemas) {
|
|
366
|
-
if (!schema.parent && schema.node.extendsType) {
|
|
367
|
-
if (schemas.find(v => v.node.name.text === schema.node.extendsType?.name.identifier.text))
|
|
368
|
-
return;
|
|
369
|
-
const extending = toString(schema.node.extendsType);
|
|
370
|
-
logError(`Schema ${schema.name} extends ${extending}, but ${extending} does not include the @json decorator!`);
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
function checkTypeCorrectness(schema, schemas) {
|
|
374
|
-
const parent = schemas.find((v) => v.name === schema.parent?.name);
|
|
375
|
-
const generic_types = [...(schema?.node.typeParameters?.map((v) => v.name.text) || []), ...(parent?.node.typeParameters?.map((v) => v.name.text) || [])];
|
|
376
|
-
const member_types = [...(schema.members.map((v) => v.node.type.name.identifier.text) || [])];
|
|
377
|
-
const scopeTypes = new Set([...json_types, ...generic_types, ...member_types]);
|
|
378
|
-
for (const typ of member_types) {
|
|
379
|
-
if (typ === "JSON")
|
|
380
|
-
continue; // JSON.Raw, JSON.Box, JSON.Any, ect...
|
|
381
|
-
if (json_types.includes(typ))
|
|
382
|
-
continue;
|
|
383
|
-
if (generic_types.includes(typ))
|
|
384
|
-
continue;
|
|
385
|
-
const check = schemas.find((v) => v.name == typ);
|
|
386
|
-
if (!check)
|
|
387
|
-
logError(`Type ${typ} is not a JSON compatible type or does not include the @json flag!`);
|
|
388
|
-
}
|
|
389
|
-
for (const member of schema.members) {
|
|
390
|
-
const invalidType = checkType(schema, schemas, member.node.type, member, scopeTypes, schema.name);
|
|
391
|
-
if (invalidType)
|
|
392
|
-
logError(`Type ${invalidType.type} in ${invalidType.path} does not implement a JSON compatible type!\n${chalk.dim(` at ${member.node.range.source.normalizedPath.replace("~lib/", "./node_modules/")}`)}`);
|
|
393
|
-
}
|
|
394
|
-
return null;
|
|
395
|
-
}
|
|
396
|
-
function checkType(schema, schemas, typ, member, scopeTypes, path) {
|
|
397
|
-
path += "." + member.name;
|
|
398
|
-
if (schemas.find(v => v.node.name.text === typ.name.identifier.text))
|
|
399
|
-
scopeTypes.add(typ.name.identifier.text);
|
|
400
|
-
if (!scopeTypes.has(typ.name.identifier.text))
|
|
401
|
-
return { type: toString(typ), path };
|
|
402
|
-
if (typ.isNullable && isPrimitive(typ))
|
|
403
|
-
return { type: toString(typ), path };
|
|
404
|
-
if (typ.typeArguments?.length && typ.typeArguments?.length > 0) {
|
|
405
|
-
for (const ty of typ.typeArguments.filter((v) => v instanceof NamedTypeNode)) {
|
|
406
|
-
const check = checkType(schema, schemas, ty, member, scopeTypes, path);
|
|
407
|
-
if (check)
|
|
408
|
-
return { type: toString(typ), path };
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
else {
|
|
412
|
-
if (scopeTypes.has(typ.name.identifier.text))
|
|
413
|
-
return null;
|
|
414
|
-
}
|
|
415
|
-
return null;
|
|
416
|
-
}
|
|
417
|
-
function logError(message) {
|
|
418
|
-
console.log("\n" + chalk.bold.bgRed(" Error ") + chalk.dim(":") + " " + message + "\n");
|
|
419
|
-
process.exit(1);
|
|
420
|
-
}
|
|
421
392
|
var PropertyFlags;
|
|
422
393
|
(function (PropertyFlags) {
|
|
423
394
|
PropertyFlags[PropertyFlags["Null"] = 0] = "Null";
|
|
@@ -434,13 +405,12 @@ class Property {
|
|
|
434
405
|
value = null;
|
|
435
406
|
flags = new Map();
|
|
436
407
|
serialize = null;
|
|
437
|
-
serialize_pretty = null;
|
|
438
408
|
deserialize = null;
|
|
439
409
|
initialize = null;
|
|
440
410
|
node;
|
|
441
411
|
right_s = "";
|
|
442
412
|
right_d = "";
|
|
443
|
-
generate() {
|
|
413
|
+
generate(safe) {
|
|
444
414
|
const name = this.name;
|
|
445
415
|
const escapedName = escapeString(JSON.stringify(this.alias || this.name));
|
|
446
416
|
const type = this.type;
|
|
@@ -448,7 +418,7 @@ class Property {
|
|
|
448
418
|
return;
|
|
449
419
|
if (this.flags.has(PropertyFlags.JSON_Raw)) {
|
|
450
420
|
if (this.flags.has(PropertyFlags.Null)) {
|
|
451
|
-
this.right_s = "(this." + name +
|
|
421
|
+
this.right_s = "(this." + name + " || \"null\")";
|
|
452
422
|
this.right_d = "value_start === value_end - 4 && 30399761348886638 === load<u64>(changetype<usize>(data) + (value_start << 1)) ? null : data.substring(value_start, value_end)";
|
|
453
423
|
}
|
|
454
424
|
else {
|
|
@@ -458,24 +428,37 @@ class Property {
|
|
|
458
428
|
}
|
|
459
429
|
else {
|
|
460
430
|
this.right_s = "__SERIALIZE<" + type + ">(this." + name + ")";
|
|
461
|
-
this.right_d =
|
|
431
|
+
this.right_d =
|
|
432
|
+
(safe ? "__DESERIALIZE_SAFE" : "__DESERIALIZE") + "<" + type + ">(data.substring(value_start, value_end))";
|
|
462
433
|
}
|
|
463
434
|
if (this.flags.has(PropertyFlags.OmitIf)) {
|
|
464
435
|
const condition = this.flags.get(PropertyFlags.OmitIf)[0];
|
|
465
436
|
if (!condition)
|
|
466
437
|
throw new Error("Could not find condition when using decorator @omitif! Provide at least one condition");
|
|
467
|
-
this.serialize =
|
|
468
|
-
|
|
438
|
+
this.serialize =
|
|
439
|
+
"${" +
|
|
440
|
+
condition +
|
|
441
|
+
' ? "" : \'' +
|
|
442
|
+
escapedName +
|
|
443
|
+
":' + " +
|
|
444
|
+
this.right_s +
|
|
445
|
+
' + ","}';
|
|
469
446
|
this.deserialize = "this." + name + " = " + this.right_d + ";";
|
|
470
447
|
}
|
|
471
448
|
else if (this.flags.has(PropertyFlags.OmitNull)) {
|
|
472
|
-
this.serialize =
|
|
473
|
-
|
|
449
|
+
this.serialize =
|
|
450
|
+
"${changetype<usize>(this." +
|
|
451
|
+
name +
|
|
452
|
+
") == <usize>0" +
|
|
453
|
+
' ? "" : \'' +
|
|
454
|
+
escapedName +
|
|
455
|
+
":' + " +
|
|
456
|
+
this.right_s +
|
|
457
|
+
' + ","}';
|
|
474
458
|
this.deserialize = "this." + name + " = " + this.right_d + ";";
|
|
475
459
|
}
|
|
476
460
|
else {
|
|
477
461
|
this.serialize = escapedName + ":${" + this.right_s + "}";
|
|
478
|
-
this.serialize_pretty = escapedName + ": ${" + this.right_s + "}";
|
|
479
462
|
this.deserialize = "this." + name + " = " + this.right_d + ";";
|
|
480
463
|
}
|
|
481
464
|
}
|
|
@@ -497,7 +480,10 @@ function charCodeAt64(data, offset) {
|
|
|
497
480
|
const secondCharCode = BigInt(data.charCodeAt(offset + 1));
|
|
498
481
|
const thirdCharCode = BigInt(data.charCodeAt(offset + 2));
|
|
499
482
|
const fourthCharCode = BigInt(data.charCodeAt(offset + 3));
|
|
500
|
-
const u64Value = (fourthCharCode << 48n) |
|
|
483
|
+
const u64Value = (fourthCharCode << 48n) |
|
|
484
|
+
(thirdCharCode << 32n) |
|
|
485
|
+
(secondCharCode << 16n) |
|
|
486
|
+
firstCharCode;
|
|
501
487
|
return u64Value;
|
|
502
488
|
}
|
|
503
489
|
function encodeKey(key) {
|
|
@@ -542,7 +528,4 @@ function getArgs(args) {
|
|
|
542
528
|
}
|
|
543
529
|
return out;
|
|
544
530
|
}
|
|
545
|
-
|
|
546
|
-
const primitives = new Set(["u8", "i8", "u16", "i16", "u32", "i32", "u64", "i64", "f32", "f64", "bool", "boolean"]);
|
|
547
|
-
return primitives.has(type.name.identifier.text);
|
|
548
|
-
}
|
|
531
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|