json-as 1.1.13 → 1.1.14-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 +10 -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__/types.spec.ts +3 -2
- package/assembly/deserialize/simple/array/raw.ts +106 -0
- package/assembly/deserialize/simple/array.ts +4 -0
- package/assembly/test.ts +7 -1
- package/assembly/types.ts +26 -18
- package/package.json +23 -22
- package/publish.sh +78 -0
- package/transform/lib/builder.js.map +1 -1
- package/transform/lib/index.js +27 -53
- package/transform/lib/index.js.map +1 -1
- package/transform/lib/linkers/custom.js.map +1 -1
- package/transform/src/builder.ts +1 -1
- package/transform/src/index.ts +259 -298
- 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 +1 -1
- package/assembly/test.json.ts +0 -388
package/transform/src/index.ts
CHANGED
|
@@ -16,13 +16,7 @@ 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
|
|
|
@@ -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,7 +154,7 @@ 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)) schema.deps.push(depSearch);
|
|
157
|
+
if (!schema.deps.some((v) => v.name == depSearch.name)) schema.deps.push(depSearch);
|
|
162
158
|
} else {
|
|
163
159
|
const internalSearch = getClass(unknownType, source);
|
|
164
160
|
if (internalSearch) {
|
|
@@ -169,7 +165,7 @@ class JSONTransform extends Visitor {
|
|
|
169
165
|
this.visitClassDeclaration(node);
|
|
170
166
|
return;
|
|
171
167
|
}
|
|
172
|
-
const schem = this.schemas.get(internalSearch.range.source.internalPath)?.find(s => s.name == internalSearch.name.text);
|
|
168
|
+
const schem = this.schemas.get(internalSearch.range.source.internalPath)?.find((s) => s.name == internalSearch.name.text);
|
|
173
169
|
if (!schem) throw new Error("Could not find schema for " + internalSearch.name.text + " in " + internalSearch.range.source.internalPath);
|
|
174
170
|
schema.deps.push(schem);
|
|
175
171
|
} else {
|
|
@@ -182,7 +178,7 @@ class JSONTransform extends Visitor {
|
|
|
182
178
|
this.visitClassDeclaration(node);
|
|
183
179
|
return;
|
|
184
180
|
}
|
|
185
|
-
const schem = this.schemas.get(externalSearch.range.source.internalPath)?.find(s => s.name == externalSearch.name.text);
|
|
181
|
+
const schem = this.schemas.get(externalSearch.range.source.internalPath)?.find((s) => s.name == externalSearch.name.text);
|
|
186
182
|
if (!schem) throw new Error("Could not find schema for " + externalSearch.name.text + " in " + externalSearch.range.source.internalPath);
|
|
187
183
|
schema.deps.push(schem);
|
|
188
184
|
}
|
|
@@ -255,7 +251,7 @@ class JSONTransform extends Visitor {
|
|
|
255
251
|
for (const member of members) {
|
|
256
252
|
if (!member.type) throwError("Fields must be strongly typed", node.range);
|
|
257
253
|
let type = toString(member.type!);
|
|
258
|
-
type = this.src.aliases.find(v => stripNull(v.name) == stripNull(type))?.getBaseType() || type;
|
|
254
|
+
type = this.src.aliases.find((v) => stripNull(v.name) == stripNull(type))?.getBaseType() || type;
|
|
259
255
|
|
|
260
256
|
const name = member.name;
|
|
261
257
|
const value = member.initializer ? toString(member.initializer!) : null;
|
|
@@ -441,8 +437,8 @@ class JSONTransform extends Visitor {
|
|
|
441
437
|
else if (isBoolean(type) || type.startsWith("JSON.Box<bool")) sortedMembers.boolean.push(member);
|
|
442
438
|
else if (isPrimitive(type) || type.startsWith("JSON.Box<")) sortedMembers.number.push(member);
|
|
443
439
|
else if (isArray(type)) sortedMembers.array.push(member);
|
|
444
|
-
else if (isStruct(type)) sortedMembers.object.push(member);
|
|
445
|
-
else throw new Error("Could not determine type " + type + " for member " + member.name + " in class " + this.schema.name);
|
|
440
|
+
/*else */ if (isStruct(type)) sortedMembers.object.push(member);
|
|
441
|
+
// else throw new Error("Could not determine type " + type + " for member " + member.name + " in class " + this.schema.name);
|
|
446
442
|
}
|
|
447
443
|
}
|
|
448
444
|
|
|
@@ -469,7 +465,7 @@ class JSONTransform extends Visitor {
|
|
|
469
465
|
DESERIALIZE += indent + " if (isKey) {\n";
|
|
470
466
|
DESERIALIZE += indent + " keyStart = lastIndex;\n";
|
|
471
467
|
DESERIALIZE += indent + " keyEnd = srcStart;\n";
|
|
472
|
-
if (DEBUG > 1) DESERIALIZE += indent +
|
|
468
|
+
if (DEBUG > 1) DESERIALIZE += indent + ' console.log("Key: " + JSON.Util.ptrToStr(keyStart, keyEnd));\n';
|
|
473
469
|
DESERIALIZE += indent + " while (JSON.Util.isSpace((code = load<u16>((srcStart += 2))))) {}\n";
|
|
474
470
|
DESERIALIZE += indent + " if (code !== 58) throw new Error(\"Expected ':' after key at position \" + (srcEnd - srcStart).toString());\n";
|
|
475
471
|
DESERIALIZE += indent + " isKey = false;\n";
|
|
@@ -607,7 +603,7 @@ class JSONTransform extends Visitor {
|
|
|
607
603
|
if (members.some((m) => (m.alias || m.name).length << 1 > 8)) {
|
|
608
604
|
DESERIALIZE += toMemCDecl(Math.max(...members.map((m) => (m.alias || m.name).length << 1)), " ");
|
|
609
605
|
}
|
|
610
|
-
}
|
|
606
|
+
};
|
|
611
607
|
|
|
612
608
|
let mbElse = " ";
|
|
613
609
|
if (!STRICT || sortedMembers.string.length) {
|
|
@@ -618,41 +614,45 @@ class JSONTransform extends Visitor {
|
|
|
618
614
|
DESERIALIZE += " while (srcStart < srcEnd) {\n";
|
|
619
615
|
DESERIALIZE += " const code = load<u16>(srcStart);\n";
|
|
620
616
|
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";
|
|
617
|
+
if (DEBUG > 1) DESERIALIZE += ' console.log("Value (string, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart + 2));';
|
|
618
|
+
generateGroups(
|
|
619
|
+
sortedMembers.string,
|
|
620
|
+
(group) => {
|
|
621
|
+
generateConsts(group);
|
|
622
|
+
const first = group[0];
|
|
623
|
+
const fName = first.alias || first.name;
|
|
624
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isString<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
|
|
625
|
+
DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart + 2), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
638
626
|
DESERIALIZE += indent + " srcStart += 4;\n";
|
|
639
627
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
640
628
|
DESERIALIZE += indent + " break;\n";
|
|
641
629
|
DESERIALIZE += indent + " }";
|
|
642
|
-
}
|
|
643
630
|
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
631
|
+
for (let i = 1; i < group.length; i++) {
|
|
632
|
+
const mem = group[i];
|
|
633
|
+
const memName = mem.alias || mem.name;
|
|
634
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isString<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
635
|
+
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart + 2), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
636
|
+
DESERIALIZE += indent + " srcStart += 4;\n";
|
|
637
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
638
|
+
DESERIALIZE += indent + " break;\n";
|
|
639
|
+
DESERIALIZE += indent + " }";
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
if (STRICT) {
|
|
643
|
+
DESERIALIZE += " else {\n";
|
|
644
|
+
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';
|
|
645
|
+
DESERIALIZE += indent + " }\n";
|
|
646
|
+
} else {
|
|
647
|
+
DESERIALIZE += " else {\n";
|
|
648
|
+
DESERIALIZE += indent + " srcStart += 4;\n";
|
|
649
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
650
|
+
DESERIALIZE += indent + " break;\n";
|
|
651
|
+
DESERIALIZE += indent + " }\n";
|
|
652
|
+
}
|
|
653
|
+
},
|
|
654
|
+
"string",
|
|
655
|
+
);
|
|
656
656
|
DESERIALIZE += " }\n"; // Close break char check
|
|
657
657
|
DESERIALIZE += " srcStart += 2;\n";
|
|
658
658
|
DESERIALIZE += " }\n"; // Close char scan loop
|
|
@@ -667,43 +667,47 @@ class JSONTransform extends Visitor {
|
|
|
667
667
|
DESERIALIZE += " while (srcStart < srcEnd) {\n";
|
|
668
668
|
DESERIALIZE += " const code = load<u16>(srcStart);\n";
|
|
669
669
|
DESERIALIZE += " if (code == 44 || code == 125 || JSON.Util.isSpace(code)) {\n";
|
|
670
|
-
if (DEBUG > 1) DESERIALIZE +=
|
|
670
|
+
if (DEBUG > 1) DESERIALIZE += ' console.log("Value (number, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart));';
|
|
671
671
|
// DESERIALIZE += " console.log(JSON.Util.ptrToStr(keyStart,keyEnd) + \" = \" + load<u16>(keyStart).toString() + \" val \" + JSON.Util.ptrToStr(lastIndex, srcStart));\n";
|
|
672
672
|
|
|
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";
|
|
673
|
+
generateGroups(
|
|
674
|
+
sortedMembers.number,
|
|
675
|
+
(group) => {
|
|
676
|
+
generateConsts(group);
|
|
677
|
+
const first = group[0];
|
|
678
|
+
const fName = first.alias || first.name;
|
|
679
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "(isInteger<" + first.type + ">() || isFloat<" + first.type + ">()) && " : "") + getComparision(fName) + ") { // " + fName + "\n";
|
|
680
|
+
DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
689
681
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
690
682
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
691
683
|
DESERIALIZE += indent + " break;\n";
|
|
692
684
|
DESERIALIZE += indent + " }";
|
|
693
|
-
}
|
|
694
685
|
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
686
|
+
for (let i = 1; i < group.length; i++) {
|
|
687
|
+
const mem = group[i];
|
|
688
|
+
const memName = mem.alias || mem.name;
|
|
689
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "(isInteger<" + mem.type + ">() || isFloat<" + mem.type + ">()) && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
690
|
+
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
691
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
692
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
693
|
+
DESERIALIZE += indent + " break;\n";
|
|
694
|
+
DESERIALIZE += indent + " }";
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
if (STRICT) {
|
|
698
|
+
DESERIALIZE += " else {\n";
|
|
699
|
+
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';
|
|
700
|
+
DESERIALIZE += indent + " }\n";
|
|
701
|
+
} else {
|
|
702
|
+
DESERIALIZE += " else {\n";
|
|
703
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
704
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
705
|
+
DESERIALIZE += indent + " break;\n";
|
|
706
|
+
DESERIALIZE += indent + " }\n";
|
|
707
|
+
}
|
|
708
|
+
},
|
|
709
|
+
"number",
|
|
710
|
+
);
|
|
707
711
|
DESERIALIZE += " }\n"; // Close break char check
|
|
708
712
|
DESERIALIZE += " srcStart += 2;\n";
|
|
709
713
|
DESERIALIZE += " }\n"; // Close char scan loop
|
|
@@ -724,40 +728,44 @@ class JSONTransform extends Visitor {
|
|
|
724
728
|
DESERIALIZE += " } else if (code == 125) {\n";
|
|
725
729
|
DESERIALIZE += " if (--depth == 0) {\n";
|
|
726
730
|
DESERIALIZE += " srcStart += 2;\n";
|
|
727
|
-
if (DEBUG > 1) DESERIALIZE +=
|
|
731
|
+
if (DEBUG > 1) DESERIALIZE += ' console.log("Value (object, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart));';
|
|
728
732
|
|
|
729
733
|
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";
|
|
734
|
+
generateGroups(
|
|
735
|
+
sortedMembers.object,
|
|
736
|
+
(group) => {
|
|
737
|
+
generateConsts(group);
|
|
738
|
+
const first = group[0];
|
|
739
|
+
const fName = first.alias || first.name;
|
|
740
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparision(fName) + ") { // " + fName + "\n";
|
|
741
|
+
DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
745
742
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
746
743
|
DESERIALIZE += indent + " break;\n";
|
|
747
744
|
DESERIALIZE += indent + " }";
|
|
748
|
-
}
|
|
749
745
|
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
746
|
+
for (let i = 1; i < group.length; i++) {
|
|
747
|
+
const mem = group[i];
|
|
748
|
+
const memName = mem.alias || mem.name;
|
|
749
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
750
|
+
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
751
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
752
|
+
DESERIALIZE += indent + " break;\n";
|
|
753
|
+
DESERIALIZE += indent + " }";
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
if (STRICT) {
|
|
757
|
+
DESERIALIZE += " else {\n";
|
|
758
|
+
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';
|
|
759
|
+
DESERIALIZE += indent + " }\n";
|
|
760
|
+
} else {
|
|
761
|
+
DESERIALIZE += " else {\n";
|
|
762
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
763
|
+
DESERIALIZE += indent + " break;\n";
|
|
764
|
+
DESERIALIZE += indent + " }\n";
|
|
765
|
+
}
|
|
766
|
+
},
|
|
767
|
+
"object",
|
|
768
|
+
);
|
|
761
769
|
indent = "";
|
|
762
770
|
|
|
763
771
|
DESERIALIZE += " }\n"; // Close break char check
|
|
@@ -780,40 +788,44 @@ class JSONTransform extends Visitor {
|
|
|
780
788
|
DESERIALIZE += " } else if (code == 93) {\n";
|
|
781
789
|
DESERIALIZE += " if (--depth == 0) {\n";
|
|
782
790
|
DESERIALIZE += " srcStart += 2;\n";
|
|
783
|
-
if (DEBUG > 1) DESERIALIZE +=
|
|
791
|
+
if (DEBUG > 1) DESERIALIZE += ' console.log("Value (object, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart));';
|
|
784
792
|
|
|
785
793
|
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";
|
|
794
|
+
generateGroups(
|
|
795
|
+
sortedMembers.array,
|
|
796
|
+
(group) => {
|
|
797
|
+
generateConsts(group);
|
|
798
|
+
const first = group[0];
|
|
799
|
+
const fName = first.alias || first.name;
|
|
800
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isArray<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
|
|
801
|
+
DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
801
802
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
802
803
|
DESERIALIZE += indent + " break;\n";
|
|
803
804
|
DESERIALIZE += indent + " }";
|
|
804
|
-
}
|
|
805
805
|
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
806
|
+
for (let i = 1; i < group.length; i++) {
|
|
807
|
+
const mem = group[i];
|
|
808
|
+
const memName = mem.alias || mem.name;
|
|
809
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isArray" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
810
|
+
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
811
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
812
|
+
DESERIALIZE += indent + " break;\n";
|
|
813
|
+
DESERIALIZE += indent + " }";
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
if (STRICT) {
|
|
817
|
+
DESERIALIZE += " else {\n";
|
|
818
|
+
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';
|
|
819
|
+
DESERIALIZE += indent + " }\n";
|
|
820
|
+
} else {
|
|
821
|
+
DESERIALIZE += " else {\n";
|
|
822
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
823
|
+
DESERIALIZE += indent + " break;\n";
|
|
824
|
+
DESERIALIZE += indent + " }\n";
|
|
825
|
+
}
|
|
826
|
+
},
|
|
827
|
+
"array",
|
|
828
|
+
);
|
|
817
829
|
indent = "";
|
|
818
830
|
|
|
819
831
|
DESERIALIZE += " }\n"; // Close break char check
|
|
@@ -830,41 +842,43 @@ class JSONTransform extends Visitor {
|
|
|
830
842
|
|
|
831
843
|
DESERIALIZE += " if (load<u64>(srcStart) == 28429475166421108) {\n";
|
|
832
844
|
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";
|
|
845
|
+
if (DEBUG > 1) DESERIALIZE += ' console.log("Value (bool, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart - 8));';
|
|
846
|
+
generateGroups(
|
|
847
|
+
sortedMembers.boolean,
|
|
848
|
+
(group) => {
|
|
849
|
+
generateConsts(group);
|
|
850
|
+
const first = group[0];
|
|
851
|
+
const fName = first.alias || first.name;
|
|
852
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
|
|
853
|
+
DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
850
854
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
851
855
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
852
856
|
DESERIALIZE += indent + " break;\n";
|
|
853
857
|
DESERIALIZE += indent + " }";
|
|
854
|
-
}
|
|
855
858
|
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
859
|
+
for (let i = 1; i < group.length; i++) {
|
|
860
|
+
const mem = group[i];
|
|
861
|
+
const memName = mem.alias || mem.name;
|
|
862
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
863
|
+
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
864
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
865
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
866
|
+
DESERIALIZE += indent + " break;\n";
|
|
867
|
+
DESERIALIZE += indent + " }";
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
if (STRICT) {
|
|
871
|
+
DESERIALIZE += " else {\n";
|
|
872
|
+
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';
|
|
873
|
+
DESERIALIZE += indent + " }\n";
|
|
874
|
+
} else {
|
|
875
|
+
DESERIALIZE += " else { \n";
|
|
876
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
877
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
878
|
+
DESERIALIZE += indent + " break;\n";
|
|
879
|
+
DESERIALIZE += indent + " }\n";
|
|
880
|
+
}
|
|
881
|
+
},
|
|
868
882
|
"boolean",
|
|
869
883
|
);
|
|
870
884
|
|
|
@@ -881,42 +895,44 @@ class JSONTransform extends Visitor {
|
|
|
881
895
|
|
|
882
896
|
DESERIALIZE += " if (load<u64>(srcStart, 2) == 28429466576093281) {\n";
|
|
883
897
|
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";
|
|
898
|
+
if (DEBUG > 1) DESERIALIZE += ' console.log("Value (bool, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart - 10));';
|
|
899
|
+
generateGroups(
|
|
900
|
+
sortedMembers.boolean,
|
|
901
|
+
(group) => {
|
|
902
|
+
generateConsts(group);
|
|
903
|
+
|
|
904
|
+
const first = group[0];
|
|
905
|
+
const fName = first.alias || first.name;
|
|
906
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
|
|
907
|
+
DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
902
908
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
903
909
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
904
910
|
DESERIALIZE += indent + " break;\n";
|
|
905
911
|
DESERIALIZE += indent + " }";
|
|
906
|
-
}
|
|
907
912
|
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
913
|
+
for (let i = 1; i < group.length; i++) {
|
|
914
|
+
const mem = group[i];
|
|
915
|
+
const memName = mem.alias || mem.name;
|
|
916
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
917
|
+
DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
918
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
919
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
920
|
+
DESERIALIZE += indent + " break;\n";
|
|
921
|
+
DESERIALIZE += indent + " }";
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
if (STRICT) {
|
|
925
|
+
DESERIALIZE += " else {\n";
|
|
926
|
+
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';
|
|
927
|
+
DESERIALIZE += indent + " }\n";
|
|
928
|
+
} else {
|
|
929
|
+
DESERIALIZE += " else { \n";
|
|
930
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
931
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
932
|
+
DESERIALIZE += indent + " break;\n";
|
|
933
|
+
DESERIALIZE += indent + " }\n";
|
|
934
|
+
}
|
|
935
|
+
},
|
|
920
936
|
"boolean",
|
|
921
937
|
);
|
|
922
938
|
|
|
@@ -934,42 +950,44 @@ class JSONTransform extends Visitor {
|
|
|
934
950
|
|
|
935
951
|
DESERIALIZE += " if (load<u64>(srcStart) == 30399761348886638) {\n";
|
|
936
952
|
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";
|
|
953
|
+
if (DEBUG > 1) DESERIALIZE += ' console.log("Value (null, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart - 8));';
|
|
954
|
+
generateGroups(
|
|
955
|
+
sortedMembers.null,
|
|
956
|
+
(group) => {
|
|
957
|
+
generateConsts(group);
|
|
958
|
+
|
|
959
|
+
const first = group[0];
|
|
960
|
+
const fName = first.alias || first.name;
|
|
961
|
+
DESERIALIZE += indent + " if (" + (first.generic ? "isNullable<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
|
|
962
|
+
DESERIALIZE += indent + " store<usize>(changetype<usize>(out), 0, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
|
|
955
963
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
956
964
|
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
957
965
|
DESERIALIZE += indent + " break;\n";
|
|
958
966
|
DESERIALIZE += indent + " }";
|
|
959
|
-
}
|
|
960
967
|
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
968
|
+
for (let i = 1; i < group.length; i++) {
|
|
969
|
+
const mem = group[i];
|
|
970
|
+
const memName = mem.alias || mem.name;
|
|
971
|
+
DESERIALIZE += indent + " else if (" + (mem.generic ? "isNullable<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
|
|
972
|
+
DESERIALIZE += indent + " store<usize>(changetype<usize>(out), 0, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
|
|
973
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
974
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
975
|
+
DESERIALIZE += indent + " break;\n";
|
|
976
|
+
DESERIALIZE += indent + " }";
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
if (STRICT) {
|
|
980
|
+
DESERIALIZE += " else {\n";
|
|
981
|
+
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';
|
|
982
|
+
DESERIALIZE += indent + " }\n";
|
|
983
|
+
} else {
|
|
984
|
+
DESERIALIZE += " else { \n";
|
|
985
|
+
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
986
|
+
DESERIALIZE += indent + " keyStart = 0;\n";
|
|
987
|
+
DESERIALIZE += indent + " break;\n";
|
|
988
|
+
DESERIALIZE += indent + " }\n";
|
|
989
|
+
}
|
|
990
|
+
},
|
|
973
991
|
"null",
|
|
974
992
|
);
|
|
975
993
|
|
|
@@ -1077,98 +1095,41 @@ class JSONTransform extends Visitor {
|
|
|
1077
1095
|
super.visitSource(node);
|
|
1078
1096
|
}
|
|
1079
1097
|
addImports(node: Source): void {
|
|
1080
|
-
const baseDir = path.resolve(
|
|
1081
|
-
fileURLToPath(import.meta.url),
|
|
1082
|
-
"..",
|
|
1083
|
-
"..",
|
|
1084
|
-
"..",
|
|
1085
|
-
);
|
|
1098
|
+
const baseDir = path.resolve(fileURLToPath(import.meta.url), "..", "..", "..");
|
|
1086
1099
|
const pkgPath = path.join(this.baseCWD, "node_modules");
|
|
1087
1100
|
const isLibrary = existsSync(path.join(pkgPath, "json-as"));
|
|
1088
1101
|
let fromPath = node.range.source.normalizedPath;
|
|
1089
1102
|
|
|
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);
|
|
1103
|
+
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
1104
|
|
|
1098
1105
|
const bsImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "bs" || d.name.text == "bs"));
|
|
1099
1106
|
const jsonImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "JSON" || d.name.text == "JSON"));
|
|
1100
1107
|
|
|
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
|
-
);
|
|
1108
|
+
let bsRel = removeExtension(path.posix.join(...path.relative(path.dirname(fromPath), path.join(baseDir, "lib", "as-bs")).split(path.sep)));
|
|
1109
|
+
|
|
1110
|
+
let jsRel = removeExtension(path.posix.join(...path.relative(path.dirname(fromPath), path.join(baseDir, "assembly", "index")).split(path.sep)));
|
|
1116
1111
|
|
|
1117
1112
|
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
|
-
) {
|
|
1113
|
+
bsRel = "json-as" + bsRel.slice(bsRel.indexOf("node_modules" + path.sep + "json-as") + 20);
|
|
1114
|
+
} else if (!bsRel.startsWith(".") && !bsRel.startsWith("/") && !bsRel.startsWith("json-as")) {
|
|
1128
1115
|
bsRel = "./" + bsRel;
|
|
1129
1116
|
}
|
|
1130
1117
|
|
|
1131
1118
|
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
|
-
) {
|
|
1119
|
+
jsRel = "json-as" + jsRel.slice(jsRel.indexOf("node_modules" + path.sep + "json-as") + 20);
|
|
1120
|
+
} else if (!jsRel.startsWith(".") && !jsRel.startsWith("/") && !jsRel.startsWith("json-as")) {
|
|
1142
1121
|
jsRel = "./" + jsRel;
|
|
1143
1122
|
}
|
|
1144
1123
|
|
|
1145
1124
|
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
|
-
);
|
|
1125
|
+
const replaceNode = Node.createImportStatement([Node.createImportDeclaration(Node.createIdentifierExpression("bs", node.range, false), null, node.range)], Node.createStringLiteralExpression(bsRel, node.range), node.range);
|
|
1156
1126
|
node.range.source.statements.unshift(replaceNode);
|
|
1157
1127
|
if (DEBUG > 0) console.log("Added import: " + toString(replaceNode) + " to " + node.range.source.normalizedPath + "\n");
|
|
1158
1128
|
}
|
|
1159
1129
|
|
|
1160
1130
|
if (!jsonImport) {
|
|
1161
1131
|
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
|
-
],
|
|
1132
|
+
[Node.createImportDeclaration(Node.createIdentifierExpression("JSON", node.range, false), null, node.range)],
|
|
1172
1133
|
Node.createStringLiteralExpression(jsRel, node.range), // Ensure POSIX-style path for 'assembly'
|
|
1173
1134
|
node.range,
|
|
1174
1135
|
);
|