json-as 1.1.14 → 1.1.15-preview.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/CHANGELOG.md +9 -0
- package/README.md +19 -1
- package/assembly/__tests__/array.spec.ts +130 -159
- package/assembly/__tests__/generics.spec.ts +32 -23
- package/assembly/__tests__/lib/index.ts +7 -3
- package/assembly/__tests__/resolving.spec.ts +13 -5
- package/assembly/__tests__/staticarray.spec.ts +12 -0
- package/assembly/__tests__/types.spec.ts +3 -2
- package/assembly/deserialize/simple/array/raw.ts +106 -0
- package/assembly/deserialize/simple/array.ts +5 -1
- package/assembly/index.ts +12 -10
- package/assembly/test.tmp.ts +378 -0
- package/assembly/test.ts +71 -28
- package/assembly/types.ts +26 -18
- package/package.json +23 -23
- package/publish.sh +78 -0
- package/transform/lib/builder.js.map +1 -1
- package/transform/lib/index.js +40 -59
- package/transform/lib/index.js.map +1 -1
- package/transform/lib/linkers/custom.js.map +1 -1
- package/transform/lib/types.js +31 -1
- package/transform/lib/types.js.map +1 -1
- package/transform/src/builder.ts +1 -1
- package/transform/src/index.ts +270 -302
- package/transform/src/linkers/alias.ts +1 -2
- package/transform/src/linkers/classes.ts +1 -1
- package/transform/src/linkers/custom.ts +26 -26
- package/transform/src/types.ts +34 -2
- package/assembly/test.json.ts +0 -388
package/transform/src/index.ts
CHANGED
|
@@ -16,17 +16,11 @@ let id = 0;
|
|
|
16
16
|
const WRITE = process.env["JSON_WRITE"];
|
|
17
17
|
const rawValue = process.env["JSON_DEBUG"];
|
|
18
18
|
|
|
19
|
-
const DEBUG = rawValue === "true"
|
|
20
|
-
? 1
|
|
21
|
-
: rawValue === "false" || rawValue === ""
|
|
22
|
-
? 0
|
|
23
|
-
: isNaN(Number(rawValue))
|
|
24
|
-
? 0
|
|
25
|
-
: Number(rawValue);
|
|
19
|
+
const DEBUG = rawValue === "true" ? 1 : rawValue === "false" || rawValue === "" ? 0 : isNaN(Number(rawValue)) ? 0 : Number(rawValue);
|
|
26
20
|
|
|
27
21
|
const STRICT = process.env["JSON_STRICT"] && process.env["JSON_STRICT"] == "true";
|
|
28
22
|
|
|
29
|
-
class JSONTransform extends Visitor {
|
|
23
|
+
export class JSONTransform extends Visitor {
|
|
30
24
|
static SN: JSONTransform = new JSONTransform();
|
|
31
25
|
|
|
32
26
|
public program!: Program;
|
|
@@ -49,7 +43,8 @@ class JSONTransform extends Visitor {
|
|
|
49
43
|
const name = (<IdentifierExpression>decorator.name).text;
|
|
50
44
|
return name === "json" || name === "serializable";
|
|
51
45
|
})
|
|
52
|
-
)
|
|
46
|
+
)
|
|
47
|
+
throw new Error("Class " + node.name.text + " is missing an @json or @serializable decorator in " + node.range.source.internalPath);
|
|
53
48
|
this.visitClassDeclaration(node);
|
|
54
49
|
}
|
|
55
50
|
visitClassDeclaration(node: ClassDeclaration): void {
|
|
@@ -60,7 +55,8 @@ class JSONTransform extends Visitor {
|
|
|
60
55
|
const name = (<IdentifierExpression>decorator.name).text;
|
|
61
56
|
return name === "json" || name === "serializable";
|
|
62
57
|
})
|
|
63
|
-
)
|
|
58
|
+
)
|
|
59
|
+
return;
|
|
64
60
|
|
|
65
61
|
const source = node.range.source;
|
|
66
62
|
if (!this.sources.has(source.internalPath)) {
|
|
@@ -85,7 +81,7 @@ class JSONTransform extends Visitor {
|
|
|
85
81
|
const depSearch = schema.deps.find((v) => v.name == extendsName);
|
|
86
82
|
if (depSearch) {
|
|
87
83
|
if (DEBUG > 0) console.log("Found " + extendsName + " in dependencies of " + source.internalPath);
|
|
88
|
-
if (!schema.deps.some(v => v.name == depSearch.name)) schema.deps.push(depSearch);
|
|
84
|
+
if (!schema.deps.some((v) => v.name == depSearch.name)) schema.deps.push(depSearch);
|
|
89
85
|
schema.parent = depSearch;
|
|
90
86
|
} else {
|
|
91
87
|
const internalSearch = getClass(extendsName, source);
|
|
@@ -97,7 +93,7 @@ class JSONTransform extends Visitor {
|
|
|
97
93
|
this.visitClassDeclaration(node);
|
|
98
94
|
return;
|
|
99
95
|
}
|
|
100
|
-
const schem = this.schemas.get(internalSearch.range.source.internalPath)?.find(s => s.name == internalSearch.name.text);
|
|
96
|
+
const schem = this.schemas.get(internalSearch.range.source.internalPath)?.find((s) => s.name == internalSearch.name.text);
|
|
101
97
|
if (!schem) throw new Error("Could not find schema for " + internalSearch.name.text + " in " + internalSearch.range.source.internalPath);
|
|
102
98
|
schema.deps.push(schem);
|
|
103
99
|
schema.parent = schem;
|
|
@@ -111,7 +107,7 @@ class JSONTransform extends Visitor {
|
|
|
111
107
|
this.visitClassDeclaration(node);
|
|
112
108
|
return;
|
|
113
109
|
}
|
|
114
|
-
const schem = this.schemas.get(externalSearch.range.source.internalPath)?.find(s => s.name == externalSearch.name.text);
|
|
110
|
+
const schem = this.schemas.get(externalSearch.range.source.internalPath)?.find((s) => s.name == externalSearch.name.text);
|
|
115
111
|
if (!schem) throw new Error("Could not find schema for " + externalSearch.name.text + " in " + externalSearch.range.source.internalPath);
|
|
116
112
|
schema.deps.push(schem);
|
|
117
113
|
schema.parent = schem;
|
|
@@ -131,7 +127,7 @@ class JSONTransform extends Visitor {
|
|
|
131
127
|
|
|
132
128
|
const getUnknownTypes = (type: string, types: string[] = []): string[] => {
|
|
133
129
|
type = stripNull(type);
|
|
134
|
-
type = this.src.aliases.find(v => stripNull(v.name) == type)?.getBaseType() || type;
|
|
130
|
+
type = this.src.aliases.find((v) => stripNull(v.name) == type)?.getBaseType() || type;
|
|
135
131
|
if (type.startsWith("Array<")) {
|
|
136
132
|
return getUnknownTypes(type.slice(6, -1));
|
|
137
133
|
} else if (type.startsWith("Map<")) {
|
|
@@ -148,7 +144,7 @@ class JSONTransform extends Visitor {
|
|
|
148
144
|
}
|
|
149
145
|
types.push(type);
|
|
150
146
|
return types;
|
|
151
|
-
}
|
|
147
|
+
};
|
|
152
148
|
|
|
153
149
|
for (const member of members) {
|
|
154
150
|
const type = toString(member.type);
|
|
@@ -158,18 +154,23 @@ class JSONTransform extends Visitor {
|
|
|
158
154
|
const depSearch = schema.deps.find((v) => v.name == unknownType);
|
|
159
155
|
if (depSearch) {
|
|
160
156
|
if (DEBUG > 0) console.log("Found " + unknownType + " in dependencies of " + source.internalPath);
|
|
161
|
-
if (!schema.deps.some(v => v.name == depSearch.name))
|
|
157
|
+
if (!schema.deps.some((v) => v.name == depSearch.name)) {
|
|
158
|
+
schema.deps.push(depSearch);
|
|
159
|
+
}
|
|
162
160
|
} else {
|
|
163
161
|
const internalSearch = getClass(unknownType, source);
|
|
164
162
|
if (internalSearch) {
|
|
165
163
|
if (DEBUG > 0) console.log("Found " + unknownType + " internally from " + source.internalPath);
|
|
166
164
|
if (!this.visitedClasses.has(internalSearch.range.source.internalPath + internalSearch.name.text)) {
|
|
167
165
|
this.visitClassDeclarationRef(internalSearch);
|
|
166
|
+
const internalSchema = this.schemas.get(internalSearch.range.source.internalPath)?.find((s) => s.name == internalSearch.name.text);
|
|
167
|
+
// if (internalSchema.custom) mem.custom = true;
|
|
168
|
+
schema.deps.push(internalSchema);
|
|
168
169
|
this.schemas.get(internalSearch.range.source.internalPath).push(this.schema);
|
|
169
170
|
this.visitClassDeclaration(node);
|
|
170
171
|
return;
|
|
171
172
|
}
|
|
172
|
-
const schem = this.schemas.get(internalSearch.range.source.internalPath)?.find(s => s.name == internalSearch.name.text);
|
|
173
|
+
const schem = this.schemas.get(internalSearch.range.source.internalPath)?.find((s) => s.name == internalSearch.name.text);
|
|
173
174
|
if (!schem) throw new Error("Could not find schema for " + internalSearch.name.text + " in " + internalSearch.range.source.internalPath);
|
|
174
175
|
schema.deps.push(schem);
|
|
175
176
|
} else {
|
|
@@ -178,11 +179,13 @@ class JSONTransform extends Visitor {
|
|
|
178
179
|
if (DEBUG > 0) console.log("Found " + externalSearch.name.text + " externally from " + source.internalPath);
|
|
179
180
|
if (!this.visitedClasses.has(externalSearch.range.source.internalPath + externalSearch.name.text)) {
|
|
180
181
|
this.visitClassDeclarationRef(externalSearch);
|
|
182
|
+
const externalSchema = this.schemas.get(externalSearch.range.source.internalPath)?.find((s) => s.name == externalSearch.name.text);
|
|
183
|
+
schema.deps.push(externalSchema);
|
|
181
184
|
this.schemas.get(externalSearch.range.source.internalPath).push(this.schema);
|
|
182
185
|
this.visitClassDeclaration(node);
|
|
183
186
|
return;
|
|
184
187
|
}
|
|
185
|
-
const schem = this.schemas.get(externalSearch.range.source.internalPath)?.find(s => s.name == externalSearch.name.text);
|
|
188
|
+
const schem = this.schemas.get(externalSearch.range.source.internalPath)?.find((s) => s.name == externalSearch.name.text);
|
|
186
189
|
if (!schem) throw new Error("Could not find schema for " + externalSearch.name.text + " in " + externalSearch.range.source.internalPath);
|
|
187
190
|
schema.deps.push(schem);
|
|
188
191
|
}
|
|
@@ -243,7 +246,7 @@ class JSONTransform extends Visitor {
|
|
|
243
246
|
}
|
|
244
247
|
|
|
245
248
|
DESERIALIZE_CUSTOM += " __DESERIALIZE<__JSON_T>(srcStart: usize, srcEnd: usize, out: __JSON_T): __JSON_T {\n";
|
|
246
|
-
DESERIALIZE_CUSTOM += " return inline.always(this." + deserializer.name.text + "(
|
|
249
|
+
DESERIALIZE_CUSTOM += " return inline.always(this." + deserializer.name.text + "(JSON.Util.ptrToStr(srcStart, srcEnd)));\n";
|
|
247
250
|
DESERIALIZE_CUSTOM += " }\n";
|
|
248
251
|
}
|
|
249
252
|
|
|
@@ -255,7 +258,7 @@ class JSONTransform extends Visitor {
|
|
|
255
258
|
for (const member of members) {
|
|
256
259
|
if (!member.type) throwError("Fields must be strongly typed", node.range);
|
|
257
260
|
let type = toString(member.type!);
|
|
258
|
-
type = this.src.aliases.find(v => stripNull(v.name) == stripNull(type))?.getBaseType() || type;
|
|
261
|
+
type = this.src.aliases.find((v) => stripNull(v.name) == stripNull(type))?.getBaseType() || type;
|
|
259
262
|
|
|
260
263
|
const name = member.name;
|
|
261
264
|
const value = member.initializer ? toString(member.initializer!) : null;
|
|
@@ -265,6 +268,7 @@ class JSONTransform extends Visitor {
|
|
|
265
268
|
if (type.startsWith("(") && type.includes("=>")) continue;
|
|
266
269
|
|
|
267
270
|
const mem = new Property();
|
|
271
|
+
mem.parent = this.schema;
|
|
268
272
|
mem.name = name.text;
|
|
269
273
|
mem.type = type;
|
|
270
274
|
mem.value = value;
|
|
@@ -427,8 +431,7 @@ class JSONTransform extends Visitor {
|
|
|
427
431
|
|
|
428
432
|
for (const member of this.schema.members) {
|
|
429
433
|
const type = stripNull(member.type);
|
|
430
|
-
if (
|
|
431
|
-
member.generic = true;
|
|
434
|
+
if (member.custom) {
|
|
432
435
|
sortedMembers.string.push(member);
|
|
433
436
|
sortedMembers.number.push(member);
|
|
434
437
|
sortedMembers.object.push(member);
|
|
@@ -441,7 +444,7 @@ class JSONTransform extends Visitor {
|
|
|
441
444
|
else if (isBoolean(type) || type.startsWith("JSON.Box<bool")) sortedMembers.boolean.push(member);
|
|
442
445
|
else if (isPrimitive(type) || type.startsWith("JSON.Box<")) sortedMembers.number.push(member);
|
|
443
446
|
else if (isArray(type)) sortedMembers.array.push(member);
|
|
444
|
-
/*else */if (isStruct(type)) sortedMembers.object.push(member);
|
|
447
|
+
/*else */ if (isStruct(type)) sortedMembers.object.push(member);
|
|
445
448
|
// else throw new Error("Could not determine type " + type + " for member " + member.name + " in class " + this.schema.name);
|
|
446
449
|
}
|
|
447
450
|
}
|
|
@@ -469,7 +472,7 @@ class JSONTransform extends Visitor {
|
|
|
469
472
|
DESERIALIZE += indent + " if (isKey) {\n";
|
|
470
473
|
DESERIALIZE += indent + " keyStart = lastIndex;\n";
|
|
471
474
|
DESERIALIZE += indent + " keyEnd = srcStart;\n";
|
|
472
|
-
if (DEBUG > 1) DESERIALIZE += indent +
|
|
475
|
+
if (DEBUG > 1) DESERIALIZE += indent + ' console.log("Key: " + JSON.Util.ptrToStr(keyStart, keyEnd));\n';
|
|
473
476
|
DESERIALIZE += indent + " while (JSON.Util.isSpace((code = load<u16>((srcStart += 2))))) {}\n";
|
|
474
477
|
DESERIALIZE += indent + " if (code !== 58) throw new Error(\"Expected ':' after key at position \" + (srcEnd - srcStart).toString());\n";
|
|
475
478
|
DESERIALIZE += indent + " isKey = false;\n";
|
|
@@ -607,7 +610,7 @@ class JSONTransform extends Visitor {
|
|
|
607
610
|
if (members.some((m) => (m.alias || m.name).length << 1 > 8)) {
|
|
608
611
|
DESERIALIZE += toMemCDecl(Math.max(...members.map((m) => (m.alias || m.name).length << 1)), " ");
|
|
609
612
|
}
|
|
610
|
-
}
|
|
613
|
+
};
|
|
611
614
|
|
|
612
615
|
let mbElse = " ";
|
|
613
616
|
if (!STRICT || sortedMembers.string.length) {
|
|
@@ -618,41 +621,45 @@ class JSONTransform extends Visitor {
|
|
|
618
621
|
DESERIALIZE += " while (srcStart < srcEnd) {\n";
|
|
619
622
|
DESERIALIZE += " const code = load<u16>(srcStart);\n";
|
|
620
623
|
DESERIALIZE += " if (code == 34 && load<u16>(srcStart - 2) !== 92) {\n";
|
|
621
|
-
if (DEBUG > 1) DESERIALIZE +=
|
|
622
|
-
generateGroups(
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
DESERIALIZE += indent + " break;\n";
|
|
631
|
-
DESERIALIZE += indent + " }";
|
|
632
|
-
|
|
633
|
-
for (let i = 1; i < group.length; i++) {
|
|
634
|
-
const mem = group[i];
|
|
635
|
-
const memName = mem.alias || mem.name;
|
|
636
|
-
DESERIALIZE += indent + " else if (" + (mem.generic ? "isString<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
637
|
-
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart + 2), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
624
|
+
if (DEBUG > 1) DESERIALIZE += ' console.log("Value (string, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart + 2));';
|
|
625
|
+
generateGroups(
|
|
626
|
+
sortedMembers.string,
|
|
627
|
+
(group) => {
|
|
628
|
+
generateConsts(group);
|
|
629
|
+
const first = group[0];
|
|
630
|
+
const fName = first.alias || first.name;
|
|
631
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isString<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
|
|
632
|
+
DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart + 2), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
638
633
|
DESERIALIZE += indent + " srcStart += 4;\n";
|
|
639
634
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
640
635
|
DESERIALIZE += indent + " break;\n";
|
|
641
636
|
DESERIALIZE += indent + " }";
|
|
642
|
-
}
|
|
643
637
|
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
638
|
+
for (let i = 1; i < group.length; i++) {
|
|
639
|
+
const mem = group[i];
|
|
640
|
+
const memName = mem.alias || mem.name;
|
|
641
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isString<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
642
|
+
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart + 2), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
643
|
+
DESERIALIZE += indent + " srcStart += 4;\n";
|
|
644
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
645
|
+
DESERIALIZE += indent + " break;\n";
|
|
646
|
+
DESERIALIZE += indent + " }";
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
if (STRICT) {
|
|
650
|
+
DESERIALIZE += " else {\n";
|
|
651
|
+
DESERIALIZE += indent + ' throw new Error("Unexpected key value pair in JSON object \'" + JSON.Util.ptrToStr(keyStart, keyEnd) + ":" + JSON.Util.ptrToStr(lastIndex, srcStart) + "\' at position " + (srcEnd - srcStart).toString());\n';
|
|
652
|
+
DESERIALIZE += indent + " }\n";
|
|
653
|
+
} else {
|
|
654
|
+
DESERIALIZE += " else {\n";
|
|
655
|
+
DESERIALIZE += indent + " srcStart += 4;\n";
|
|
656
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
657
|
+
DESERIALIZE += indent + " break;\n";
|
|
658
|
+
DESERIALIZE += indent + " }\n";
|
|
659
|
+
}
|
|
660
|
+
},
|
|
661
|
+
"string",
|
|
662
|
+
);
|
|
656
663
|
DESERIALIZE += " }\n"; // Close break char check
|
|
657
664
|
DESERIALIZE += " srcStart += 2;\n";
|
|
658
665
|
DESERIALIZE += " }\n"; // Close char scan loop
|
|
@@ -667,43 +674,47 @@ class JSONTransform extends Visitor {
|
|
|
667
674
|
DESERIALIZE += " while (srcStart < srcEnd) {\n";
|
|
668
675
|
DESERIALIZE += " const code = load<u16>(srcStart);\n";
|
|
669
676
|
DESERIALIZE += " if (code == 44 || code == 125 || JSON.Util.isSpace(code)) {\n";
|
|
670
|
-
if (DEBUG > 1) DESERIALIZE +=
|
|
677
|
+
if (DEBUG > 1) DESERIALIZE += ' console.log("Value (number, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart));';
|
|
671
678
|
// DESERIALIZE += " console.log(JSON.Util.ptrToStr(keyStart,keyEnd) + \" = \" + load<u16>(keyStart).toString() + \" val \" + JSON.Util.ptrToStr(lastIndex, srcStart));\n";
|
|
672
679
|
|
|
673
|
-
generateGroups(
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
DESERIALIZE += indent + " break;\n";
|
|
682
|
-
DESERIALIZE += indent + " }";
|
|
683
|
-
|
|
684
|
-
for (let i = 1; i < group.length; i++) {
|
|
685
|
-
const mem = group[i];
|
|
686
|
-
const memName = mem.alias || mem.name;
|
|
687
|
-
DESERIALIZE += indent + " else if (" + (mem.generic ? "(isInteger<" + mem.type + ">() || isFloat<" + mem.type + ">()) && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
688
|
-
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
680
|
+
generateGroups(
|
|
681
|
+
sortedMembers.number,
|
|
682
|
+
(group) => {
|
|
683
|
+
generateConsts(group);
|
|
684
|
+
const first = group[0];
|
|
685
|
+
const fName = first.alias || first.name;
|
|
686
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "(isInteger<" + first.type + ">() || isFloat<" + first.type + ">()) && " : "") + getComparision(fName) + ") { // " + fName + "\n";
|
|
687
|
+
DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
689
688
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
690
689
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
691
690
|
DESERIALIZE += indent + " break;\n";
|
|
692
691
|
DESERIALIZE += indent + " }";
|
|
693
|
-
}
|
|
694
692
|
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
693
|
+
for (let i = 1; i < group.length; i++) {
|
|
694
|
+
const mem = group[i];
|
|
695
|
+
const memName = mem.alias || mem.name;
|
|
696
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "(isInteger<" + mem.type + ">() || isFloat<" + mem.type + ">()) && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
697
|
+
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
698
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
699
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
700
|
+
DESERIALIZE += indent + " break;\n";
|
|
701
|
+
DESERIALIZE += indent + " }";
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
if (STRICT) {
|
|
705
|
+
DESERIALIZE += " else {\n";
|
|
706
|
+
DESERIALIZE += indent + ' throw new Error("Unexpected key value pair in JSON object \'" + JSON.Util.ptrToStr(keyStart, keyEnd) + ":" + JSON.Util.ptrToStr(lastIndex, srcStart) + "\' at position " + (srcEnd - srcStart).toString());\n';
|
|
707
|
+
DESERIALIZE += indent + " }\n";
|
|
708
|
+
} else {
|
|
709
|
+
DESERIALIZE += " else {\n";
|
|
710
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
711
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
712
|
+
DESERIALIZE += indent + " break;\n";
|
|
713
|
+
DESERIALIZE += indent + " }\n";
|
|
714
|
+
}
|
|
715
|
+
},
|
|
716
|
+
"number",
|
|
717
|
+
);
|
|
707
718
|
DESERIALIZE += " }\n"; // Close break char check
|
|
708
719
|
DESERIALIZE += " srcStart += 2;\n";
|
|
709
720
|
DESERIALIZE += " }\n"; // Close char scan loop
|
|
@@ -724,40 +735,44 @@ class JSONTransform extends Visitor {
|
|
|
724
735
|
DESERIALIZE += " } else if (code == 125) {\n";
|
|
725
736
|
DESERIALIZE += " if (--depth == 0) {\n";
|
|
726
737
|
DESERIALIZE += " srcStart += 2;\n";
|
|
727
|
-
if (DEBUG > 1) DESERIALIZE +=
|
|
738
|
+
if (DEBUG > 1) DESERIALIZE += ' console.log("Value (object, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart));';
|
|
728
739
|
|
|
729
740
|
indent = " ";
|
|
730
|
-
generateGroups(
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
DESERIALIZE += indent + " }";
|
|
739
|
-
|
|
740
|
-
for (let i = 1; i < group.length; i++) {
|
|
741
|
-
const mem = group[i];
|
|
742
|
-
const memName = mem.alias || mem.name;
|
|
743
|
-
DESERIALIZE += indent + " else if (" + (mem.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
744
|
-
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
741
|
+
generateGroups(
|
|
742
|
+
sortedMembers.object,
|
|
743
|
+
(group) => {
|
|
744
|
+
generateConsts(group);
|
|
745
|
+
const first = group[0];
|
|
746
|
+
const fName = first.alias || first.name;
|
|
747
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparision(fName) + ") { // " + fName + "\n";
|
|
748
|
+
DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
745
749
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
746
750
|
DESERIALIZE += indent + " break;\n";
|
|
747
751
|
DESERIALIZE += indent + " }";
|
|
748
|
-
}
|
|
749
752
|
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
753
|
+
for (let i = 1; i < group.length; i++) {
|
|
754
|
+
const mem = group[i];
|
|
755
|
+
const memName = mem.alias || mem.name;
|
|
756
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
757
|
+
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
758
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
759
|
+
DESERIALIZE += indent + " break;\n";
|
|
760
|
+
DESERIALIZE += indent + " }";
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
if (STRICT) {
|
|
764
|
+
DESERIALIZE += " else {\n";
|
|
765
|
+
DESERIALIZE += indent + ' throw new Error("Unexpected key value pair in JSON object \'" + JSON.Util.ptrToStr(keyStart, keyEnd) + ":" + JSON.Util.ptrToStr(lastIndex, srcStart) + "\' at position " + (srcEnd - srcStart).toString());\n';
|
|
766
|
+
DESERIALIZE += indent + " }\n";
|
|
767
|
+
} else {
|
|
768
|
+
DESERIALIZE += " else {\n";
|
|
769
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
770
|
+
DESERIALIZE += indent + " break;\n";
|
|
771
|
+
DESERIALIZE += indent + " }\n";
|
|
772
|
+
}
|
|
773
|
+
},
|
|
774
|
+
"object",
|
|
775
|
+
);
|
|
761
776
|
indent = "";
|
|
762
777
|
|
|
763
778
|
DESERIALIZE += " }\n"; // Close break char check
|
|
@@ -780,40 +795,44 @@ class JSONTransform extends Visitor {
|
|
|
780
795
|
DESERIALIZE += " } else if (code == 93) {\n";
|
|
781
796
|
DESERIALIZE += " if (--depth == 0) {\n";
|
|
782
797
|
DESERIALIZE += " srcStart += 2;\n";
|
|
783
|
-
if (DEBUG > 1) DESERIALIZE +=
|
|
798
|
+
if (DEBUG > 1) DESERIALIZE += ' console.log("Value (object, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart));';
|
|
784
799
|
|
|
785
800
|
indent = " ";
|
|
786
|
-
generateGroups(
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
DESERIALIZE += indent + " }";
|
|
795
|
-
|
|
796
|
-
for (let i = 1; i < group.length; i++) {
|
|
797
|
-
const mem = group[i];
|
|
798
|
-
const memName = mem.alias || mem.name;
|
|
799
|
-
DESERIALIZE += indent + " else if (" + (mem.generic ? "isArray" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
800
|
-
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
801
|
+
generateGroups(
|
|
802
|
+
sortedMembers.array,
|
|
803
|
+
(group) => {
|
|
804
|
+
generateConsts(group);
|
|
805
|
+
const first = group[0];
|
|
806
|
+
const fName = first.alias || first.name;
|
|
807
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isArray<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
|
|
808
|
+
DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
801
809
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
802
810
|
DESERIALIZE += indent + " break;\n";
|
|
803
811
|
DESERIALIZE += indent + " }";
|
|
804
|
-
}
|
|
805
812
|
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
813
|
+
for (let i = 1; i < group.length; i++) {
|
|
814
|
+
const mem = group[i];
|
|
815
|
+
const memName = mem.alias || mem.name;
|
|
816
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isArray" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
817
|
+
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
818
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
819
|
+
DESERIALIZE += indent + " break;\n";
|
|
820
|
+
DESERIALIZE += indent + " }";
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
if (STRICT) {
|
|
824
|
+
DESERIALIZE += " else {\n";
|
|
825
|
+
DESERIALIZE += indent + ' throw new Error("Unexpected key value pair in JSON object \'" + JSON.Util.ptrToStr(keyStart, keyEnd) + ":" + JSON.Util.ptrToStr(lastIndex, srcStart) + "\' at position " + (srcEnd - srcStart).toString());\n';
|
|
826
|
+
DESERIALIZE += indent + " }\n";
|
|
827
|
+
} else {
|
|
828
|
+
DESERIALIZE += " else {\n";
|
|
829
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
830
|
+
DESERIALIZE += indent + " break;\n";
|
|
831
|
+
DESERIALIZE += indent + " }\n";
|
|
832
|
+
}
|
|
833
|
+
},
|
|
834
|
+
"array",
|
|
835
|
+
);
|
|
817
836
|
indent = "";
|
|
818
837
|
|
|
819
838
|
DESERIALIZE += " }\n"; // Close break char check
|
|
@@ -830,41 +849,43 @@ class JSONTransform extends Visitor {
|
|
|
830
849
|
|
|
831
850
|
DESERIALIZE += " if (load<u64>(srcStart) == 28429475166421108) {\n";
|
|
832
851
|
DESERIALIZE += " srcStart += 8;\n";
|
|
833
|
-
if (DEBUG > 1) DESERIALIZE +=
|
|
834
|
-
generateGroups(
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
DESERIALIZE += indent + " break;\n";
|
|
843
|
-
DESERIALIZE += indent + " }";
|
|
844
|
-
|
|
845
|
-
for (let i = 1; i < group.length; i++) {
|
|
846
|
-
const mem = group[i];
|
|
847
|
-
const memName = mem.alias || mem.name;
|
|
848
|
-
DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
849
|
-
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
852
|
+
if (DEBUG > 1) DESERIALIZE += ' console.log("Value (bool, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart - 8));';
|
|
853
|
+
generateGroups(
|
|
854
|
+
sortedMembers.boolean,
|
|
855
|
+
(group) => {
|
|
856
|
+
generateConsts(group);
|
|
857
|
+
const first = group[0];
|
|
858
|
+
const fName = first.alias || first.name;
|
|
859
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
|
|
860
|
+
DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
850
861
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
851
862
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
852
863
|
DESERIALIZE += indent + " break;\n";
|
|
853
864
|
DESERIALIZE += indent + " }";
|
|
854
|
-
}
|
|
855
865
|
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
866
|
+
for (let i = 1; i < group.length; i++) {
|
|
867
|
+
const mem = group[i];
|
|
868
|
+
const memName = mem.alias || mem.name;
|
|
869
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
870
|
+
DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
871
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
872
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
873
|
+
DESERIALIZE += indent + " break;\n";
|
|
874
|
+
DESERIALIZE += indent + " }";
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
if (STRICT) {
|
|
878
|
+
DESERIALIZE += " else {\n";
|
|
879
|
+
DESERIALIZE += indent + ' throw new Error("Unexpected key value pair in JSON object \'" + JSON.Util.ptrToStr(keyStart, keyEnd) + ":" + JSON.Util.ptrToStr(lastIndex, srcStart) + "\' at position " + (srcEnd - srcStart).toString());\n';
|
|
880
|
+
DESERIALIZE += indent + " }\n";
|
|
881
|
+
} else {
|
|
882
|
+
DESERIALIZE += " else { \n";
|
|
883
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
884
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
885
|
+
DESERIALIZE += indent + " break;\n";
|
|
886
|
+
DESERIALIZE += indent + " }\n";
|
|
887
|
+
}
|
|
888
|
+
},
|
|
868
889
|
"boolean",
|
|
869
890
|
);
|
|
870
891
|
|
|
@@ -881,42 +902,44 @@ class JSONTransform extends Visitor {
|
|
|
881
902
|
|
|
882
903
|
DESERIALIZE += " if (load<u64>(srcStart, 2) == 28429466576093281) {\n";
|
|
883
904
|
DESERIALIZE += " srcStart += 10;\n";
|
|
884
|
-
if (DEBUG > 1) DESERIALIZE +=
|
|
885
|
-
generateGroups(
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
DESERIALIZE += indent + " break;\n";
|
|
895
|
-
DESERIALIZE += indent + " }";
|
|
896
|
-
|
|
897
|
-
for (let i = 1; i < group.length; i++) {
|
|
898
|
-
const mem = group[i];
|
|
899
|
-
const memName = mem.alias || mem.name;
|
|
900
|
-
DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
901
|
-
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
905
|
+
if (DEBUG > 1) DESERIALIZE += ' console.log("Value (bool, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart - 10));';
|
|
906
|
+
generateGroups(
|
|
907
|
+
sortedMembers.boolean,
|
|
908
|
+
(group) => {
|
|
909
|
+
generateConsts(group);
|
|
910
|
+
|
|
911
|
+
const first = group[0];
|
|
912
|
+
const fName = first.alias || first.name;
|
|
913
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
|
|
914
|
+
DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
902
915
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
903
916
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
904
917
|
DESERIALIZE += indent + " break;\n";
|
|
905
918
|
DESERIALIZE += indent + " }";
|
|
906
|
-
}
|
|
907
919
|
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
+
for (let i = 1; i < group.length; i++) {
|
|
921
|
+
const mem = group[i];
|
|
922
|
+
const memName = mem.alias || mem.name;
|
|
923
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
924
|
+
DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
925
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
926
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
927
|
+
DESERIALIZE += indent + " break;\n";
|
|
928
|
+
DESERIALIZE += indent + " }";
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
if (STRICT) {
|
|
932
|
+
DESERIALIZE += " else {\n";
|
|
933
|
+
DESERIALIZE += indent + ' throw new Error("Unexpected key value pair in JSON object \'" + JSON.Util.ptrToStr(keyStart, keyEnd) + ":" + JSON.Util.ptrToStr(lastIndex, srcStart) + "\' at position " + (srcEnd - srcStart).toString());\n';
|
|
934
|
+
DESERIALIZE += indent + " }\n";
|
|
935
|
+
} else {
|
|
936
|
+
DESERIALIZE += " else { \n";
|
|
937
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
938
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
939
|
+
DESERIALIZE += indent + " break;\n";
|
|
940
|
+
DESERIALIZE += indent + " }\n";
|
|
941
|
+
}
|
|
942
|
+
},
|
|
920
943
|
"boolean",
|
|
921
944
|
);
|
|
922
945
|
|
|
@@ -934,42 +957,44 @@ class JSONTransform extends Visitor {
|
|
|
934
957
|
|
|
935
958
|
DESERIALIZE += " if (load<u64>(srcStart) == 30399761348886638) {\n";
|
|
936
959
|
DESERIALIZE += " srcStart += 8;\n";
|
|
937
|
-
if (DEBUG > 1) DESERIALIZE +=
|
|
938
|
-
generateGroups(
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
DESERIALIZE += indent + " break;\n";
|
|
948
|
-
DESERIALIZE += indent + " }";
|
|
949
|
-
|
|
950
|
-
for (let i = 1; i < group.length; i++) {
|
|
951
|
-
const mem = group[i];
|
|
952
|
-
const memName = mem.alias || mem.name;
|
|
953
|
-
DESERIALIZE += indent + " else if (" + (mem.generic ? "isNullable<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
954
|
-
DESERIALIZE += indent + " store<usize>(changetype<usize>(out), 0, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
960
|
+
if (DEBUG > 1) DESERIALIZE += ' console.log("Value (null, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart - 8));';
|
|
961
|
+
generateGroups(
|
|
962
|
+
sortedMembers.null,
|
|
963
|
+
(group) => {
|
|
964
|
+
generateConsts(group);
|
|
965
|
+
|
|
966
|
+
const first = group[0];
|
|
967
|
+
const fName = first.alias || first.name;
|
|
968
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isNullable<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
|
|
969
|
+
DESERIALIZE += indent + " store<usize>(changetype<usize>(out), 0, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
955
970
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
956
971
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
957
972
|
DESERIALIZE += indent + " break;\n";
|
|
958
973
|
DESERIALIZE += indent + " }";
|
|
959
|
-
}
|
|
960
974
|
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
975
|
+
for (let i = 1; i < group.length; i++) {
|
|
976
|
+
const mem = group[i];
|
|
977
|
+
const memName = mem.alias || mem.name;
|
|
978
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isNullable<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
979
|
+
DESERIALIZE += indent + " store<usize>(changetype<usize>(out), 0, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
980
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
981
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
982
|
+
DESERIALIZE += indent + " break;\n";
|
|
983
|
+
DESERIALIZE += indent + " }";
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
if (STRICT) {
|
|
987
|
+
DESERIALIZE += " else {\n";
|
|
988
|
+
DESERIALIZE += indent + ' throw new Error("Unexpected key value pair in JSON object \'" + JSON.Util.ptrToStr(keyStart, keyEnd) + ":" + JSON.Util.ptrToStr(lastIndex, srcStart) + "\' at position " + (srcEnd - srcStart).toString());\n';
|
|
989
|
+
DESERIALIZE += indent + " }\n";
|
|
990
|
+
} else {
|
|
991
|
+
DESERIALIZE += " else { \n";
|
|
992
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
993
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
994
|
+
DESERIALIZE += indent + " break;\n";
|
|
995
|
+
DESERIALIZE += indent + " }\n";
|
|
996
|
+
}
|
|
997
|
+
},
|
|
973
998
|
"null",
|
|
974
999
|
);
|
|
975
1000
|
|
|
@@ -1077,98 +1102,41 @@ class JSONTransform extends Visitor {
|
|
|
1077
1102
|
super.visitSource(node);
|
|
1078
1103
|
}
|
|
1079
1104
|
addImports(node: Source): void {
|
|
1080
|
-
const baseDir = path.resolve(
|
|
1081
|
-
fileURLToPath(import.meta.url),
|
|
1082
|
-
"..",
|
|
1083
|
-
"..",
|
|
1084
|
-
"..",
|
|
1085
|
-
);
|
|
1105
|
+
const baseDir = path.resolve(fileURLToPath(import.meta.url), "..", "..", "..");
|
|
1086
1106
|
const pkgPath = path.join(this.baseCWD, "node_modules");
|
|
1087
1107
|
const isLibrary = existsSync(path.join(pkgPath, "json-as"));
|
|
1088
1108
|
let fromPath = node.range.source.normalizedPath;
|
|
1089
1109
|
|
|
1090
|
-
fromPath = fromPath.startsWith("~lib/")
|
|
1091
|
-
? existsSync(
|
|
1092
|
-
path.join(pkgPath, fromPath.slice(5, fromPath.indexOf("/", 5))),
|
|
1093
|
-
)
|
|
1094
|
-
? path.join(pkgPath, fromPath.slice(5))
|
|
1095
|
-
: fromPath
|
|
1096
|
-
: path.join(this.baseCWD, fromPath);
|
|
1110
|
+
fromPath = fromPath.startsWith("~lib/") ? (existsSync(path.join(pkgPath, fromPath.slice(5, fromPath.indexOf("/", 5)))) ? path.join(pkgPath, fromPath.slice(5)) : fromPath) : path.join(this.baseCWD, fromPath);
|
|
1097
1111
|
|
|
1098
1112
|
const bsImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "bs" || d.name.text == "bs"));
|
|
1099
1113
|
const jsonImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "JSON" || d.name.text == "JSON"));
|
|
1100
1114
|
|
|
1101
|
-
let bsRel = removeExtension(
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
.relative(path.dirname(fromPath), path.join(baseDir, "lib", "as-bs"))
|
|
1105
|
-
.split(path.sep),
|
|
1106
|
-
),
|
|
1107
|
-
);
|
|
1108
|
-
|
|
1109
|
-
let jsRel = removeExtension(
|
|
1110
|
-
path.posix.join(
|
|
1111
|
-
...path
|
|
1112
|
-
.relative(path.dirname(fromPath), path.join(baseDir, "assembly", "index"))
|
|
1113
|
-
.split(path.sep),
|
|
1114
|
-
),
|
|
1115
|
-
);
|
|
1115
|
+
let bsRel = removeExtension(path.posix.join(...path.relative(path.dirname(fromPath), path.join(baseDir, "lib", "as-bs")).split(path.sep)));
|
|
1116
|
+
|
|
1117
|
+
let jsRel = removeExtension(path.posix.join(...path.relative(path.dirname(fromPath), path.join(baseDir, "assembly", "index")).split(path.sep)));
|
|
1116
1118
|
|
|
1117
1119
|
if (bsRel.includes("node_modules" + path.sep + "json-as")) {
|
|
1118
|
-
bsRel =
|
|
1119
|
-
|
|
1120
|
-
bsRel.slice(
|
|
1121
|
-
bsRel.indexOf("node_modules" + path.sep + "json-as") + 20,
|
|
1122
|
-
)
|
|
1123
|
-
} else if (
|
|
1124
|
-
!bsRel.startsWith(".") &&
|
|
1125
|
-
!bsRel.startsWith("/") &&
|
|
1126
|
-
!bsRel.startsWith("json-as")
|
|
1127
|
-
) {
|
|
1120
|
+
bsRel = "json-as" + bsRel.slice(bsRel.indexOf("node_modules" + path.sep + "json-as") + 20);
|
|
1121
|
+
} else if (!bsRel.startsWith(".") && !bsRel.startsWith("/") && !bsRel.startsWith("json-as")) {
|
|
1128
1122
|
bsRel = "./" + bsRel;
|
|
1129
1123
|
}
|
|
1130
1124
|
|
|
1131
1125
|
if (jsRel.includes("node_modules" + path.sep + "json-as")) {
|
|
1132
|
-
jsRel =
|
|
1133
|
-
|
|
1134
|
-
jsRel.slice(
|
|
1135
|
-
jsRel.indexOf("node_modules" + path.sep + "json-as") + 20,
|
|
1136
|
-
);
|
|
1137
|
-
} else if (
|
|
1138
|
-
!jsRel.startsWith(".") &&
|
|
1139
|
-
!jsRel.startsWith("/") &&
|
|
1140
|
-
!jsRel.startsWith("json-as")
|
|
1141
|
-
) {
|
|
1126
|
+
jsRel = "json-as" + jsRel.slice(jsRel.indexOf("node_modules" + path.sep + "json-as") + 20);
|
|
1127
|
+
} else if (!jsRel.startsWith(".") && !jsRel.startsWith("/") && !jsRel.startsWith("json-as")) {
|
|
1142
1128
|
jsRel = "./" + jsRel;
|
|
1143
1129
|
}
|
|
1144
1130
|
|
|
1145
1131
|
if (!bsImport) {
|
|
1146
|
-
const replaceNode = Node.createImportStatement(
|
|
1147
|
-
[Node.createImportDeclaration(
|
|
1148
|
-
Node.createIdentifierExpression("bs", node.range, false),
|
|
1149
|
-
null,
|
|
1150
|
-
node.range
|
|
1151
|
-
)
|
|
1152
|
-
],
|
|
1153
|
-
Node.createStringLiteralExpression(bsRel, node.range),
|
|
1154
|
-
node.range
|
|
1155
|
-
);
|
|
1132
|
+
const replaceNode = Node.createImportStatement([Node.createImportDeclaration(Node.createIdentifierExpression("bs", node.range, false), null, node.range)], Node.createStringLiteralExpression(bsRel, node.range), node.range);
|
|
1156
1133
|
node.range.source.statements.unshift(replaceNode);
|
|
1157
1134
|
if (DEBUG > 0) console.log("Added import: " + toString(replaceNode) + " to " + node.range.source.normalizedPath + "\n");
|
|
1158
1135
|
}
|
|
1159
1136
|
|
|
1160
1137
|
if (!jsonImport) {
|
|
1161
1138
|
const replaceNode = Node.createImportStatement(
|
|
1162
|
-
[Node.createImportDeclaration(
|
|
1163
|
-
Node.createIdentifierExpression(
|
|
1164
|
-
"JSON",
|
|
1165
|
-
node.range,
|
|
1166
|
-
false
|
|
1167
|
-
),
|
|
1168
|
-
null,
|
|
1169
|
-
node.range
|
|
1170
|
-
)
|
|
1171
|
-
],
|
|
1139
|
+
[Node.createImportDeclaration(Node.createIdentifierExpression("JSON", node.range, false), null, node.range)],
|
|
1172
1140
|
Node.createStringLiteralExpression(jsRel, node.range), // Ensure POSIX-style path for 'assembly'
|
|
1173
1141
|
node.range,
|
|
1174
1142
|
);
|
|
@@ -1265,7 +1233,7 @@ export default class Transformer extends Transform {
|
|
|
1265
1233
|
transformer.addImports(source);
|
|
1266
1234
|
}
|
|
1267
1235
|
if (source.normalizedPath == WRITE) {
|
|
1268
|
-
writeFileSync(path.join(process.cwd(), this.baseDir, removeExtension(source.normalizedPath) + ".
|
|
1236
|
+
writeFileSync(path.join(process.cwd(), this.baseDir, removeExtension(source.normalizedPath) + ".tmp.ts"), toString(source));
|
|
1269
1237
|
}
|
|
1270
1238
|
}
|
|
1271
1239
|
}
|