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.
@@ -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
- ) throw new Error("Class " + node.name.text + " is missing an @json or @serializable decorator in " + node.range.source.internalPath);
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
- ) return;
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)) schema.deps.push(depSearch);
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 + "(changetype<string>(srcStart)));\n";
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 (node.isGeneric && node.typeParameters.some((p) => stripNull(p.name.text) == type)) {
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 + " console.log(\"Key: \" + JSON.Util.ptrToStr(keyStart, keyEnd));\n";
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 += " console.log(\"Value (string, " + (++id) + "): \" + JSON.Util.ptrToStr(lastIndex, srcStart + 2));";
622
- generateGroups(sortedMembers.string, (group) => {
623
- generateConsts(group);
624
- const first = group[0];
625
- const fName = first.alias || first.name;
626
- DESERIALIZE += indent + " if (" + (first.generic ? "isString<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
627
- DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart + 2), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
628
- DESERIALIZE += indent + " srcStart += 4;\n";
629
- DESERIALIZE += indent + " keyStart = 0;\n";
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
- if (STRICT) {
645
- DESERIALIZE += " else {\n";
646
- 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';
647
- DESERIALIZE += indent + " }\n";
648
- } else {
649
- DESERIALIZE += " else {\n";
650
- DESERIALIZE += indent + " srcStart += 4;\n";
651
- DESERIALIZE += indent + " keyStart = 0;\n";
652
- DESERIALIZE += indent + " break;\n";
653
- DESERIALIZE += indent + " }\n";
654
- }
655
- }, "string");
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 += " console.log(\"Value (number, " + (++id) + "): \" + JSON.Util.ptrToStr(lastIndex, srcStart));";
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(sortedMembers.number, (group) => {
674
- generateConsts(group);
675
- const first = group[0];
676
- const fName = first.alias || first.name;
677
- DESERIALIZE += indent + " if (" + (first.generic ? "(isInteger<" + first.type + ">() || isFloat<" + first.type + ">()) && " : "") + getComparision(fName) + ") { // " + fName + "\n";
678
- DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
679
- DESERIALIZE += indent + " srcStart += 2;\n";
680
- DESERIALIZE += indent + " keyStart = 0;\n";
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
- if (STRICT) {
696
- DESERIALIZE += " else {\n";
697
- 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';
698
- DESERIALIZE += indent + " }\n";
699
- } else {
700
- DESERIALIZE += " else {\n";
701
- DESERIALIZE += indent + " srcStart += 2;\n";
702
- DESERIALIZE += indent + " keyStart = 0;\n";
703
- DESERIALIZE += indent + " break;\n";
704
- DESERIALIZE += indent + " }\n";
705
- }
706
- }, "number");
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 += " console.log(\"Value (object, " + (++id) + "): \" + JSON.Util.ptrToStr(lastIndex, srcStart));";
738
+ if (DEBUG > 1) DESERIALIZE += ' console.log("Value (object, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart));';
728
739
 
729
740
  indent = " ";
730
- generateGroups(sortedMembers.object, (group) => {
731
- generateConsts(group);
732
- const first = group[0];
733
- const fName = first.alias || first.name;
734
- DESERIALIZE += indent + " if (" + (first.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparision(fName) + ") { // " + fName + "\n";
735
- DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
736
- DESERIALIZE += indent + " keyStart = 0;\n";
737
- DESERIALIZE += indent + " break;\n";
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
- if (STRICT) {
751
- DESERIALIZE += " else {\n";
752
- 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';
753
- DESERIALIZE += indent + " }\n";
754
- } else {
755
- DESERIALIZE += " else {\n";
756
- DESERIALIZE += indent + " keyStart = 0;\n";
757
- DESERIALIZE += indent + " break;\n";
758
- DESERIALIZE += indent + " }\n";
759
- }
760
- }, "object");
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 += " console.log(\"Value (object, " + (++id) + "): \" + JSON.Util.ptrToStr(lastIndex, srcStart));";
798
+ if (DEBUG > 1) DESERIALIZE += ' console.log("Value (object, ' + ++id + '): " + JSON.Util.ptrToStr(lastIndex, srcStart));';
784
799
 
785
800
  indent = " ";
786
- generateGroups(sortedMembers.array, (group) => {
787
- generateConsts(group);
788
- const first = group[0];
789
- const fName = first.alias || first.name;
790
- DESERIALIZE += indent + " if (" + (first.generic ? "isArray<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
791
- DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
792
- DESERIALIZE += indent + " keyStart = 0;\n";
793
- DESERIALIZE += indent + " break;\n";
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
- if (STRICT) {
807
- DESERIALIZE += " else {\n";
808
- 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';
809
- DESERIALIZE += indent + " }\n";
810
- } else {
811
- DESERIALIZE += " else {\n";
812
- DESERIALIZE += indent + " keyStart = 0;\n";
813
- DESERIALIZE += indent + " break;\n";
814
- DESERIALIZE += indent + " }\n";
815
- }
816
- }, "array");
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 += " console.log(\"Value (bool, " + (++id) + "): \" + JSON.Util.ptrToStr(lastIndex, srcStart - 8));";
834
- generateGroups(sortedMembers.boolean, (group) => {
835
- generateConsts(group);
836
- const first = group[0];
837
- const fName = first.alias || first.name;
838
- DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
839
- DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
840
- DESERIALIZE += indent + " srcStart += 2;\n";
841
- DESERIALIZE += indent + " keyStart = 0;\n";
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
- if (STRICT) {
857
- DESERIALIZE += " else {\n";
858
- 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';
859
- DESERIALIZE += indent + " }\n";
860
- } else {
861
- DESERIALIZE += " else { \n";
862
- DESERIALIZE += indent + " srcStart += 2;\n";
863
- DESERIALIZE += indent + " keyStart = 0;\n";
864
- DESERIALIZE += indent + " break;\n";
865
- DESERIALIZE += indent + " }\n";
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 += " console.log(\"Value (bool, " + (++id) + "): \" + JSON.Util.ptrToStr(lastIndex, srcStart - 10));";
885
- generateGroups(sortedMembers.boolean, (group) => {
886
- generateConsts(group);
887
-
888
- const first = group[0];
889
- const fName = first.alias || first.name;
890
- DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
891
- DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
892
- DESERIALIZE += indent + " srcStart += 2;\n";
893
- DESERIALIZE += indent + " keyStart = 0;\n";
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
- if (STRICT) {
909
- DESERIALIZE += " else {\n";
910
- 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';
911
- DESERIALIZE += indent + " }\n";
912
- } else {
913
- DESERIALIZE += " else { \n";
914
- DESERIALIZE += indent + " srcStart += 2;\n";
915
- DESERIALIZE += indent + " keyStart = 0;\n";
916
- DESERIALIZE += indent + " break;\n";
917
- DESERIALIZE += indent + " }\n";
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 += " console.log(\"Value (null, " + (++id) + "): \" + JSON.Util.ptrToStr(lastIndex, srcStart - 8));";
938
- generateGroups(sortedMembers.null, (group) => {
939
- generateConsts(group);
940
-
941
- const first = group[0];
942
- const fName = first.alias || first.name;
943
- DESERIALIZE += indent + " if (" + (first.generic ? "isNullable<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
944
- DESERIALIZE += indent + " store<usize>(changetype<usize>(out), 0, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
945
- DESERIALIZE += indent + " srcStart += 2;\n";
946
- DESERIALIZE += indent + " keyStart = 0;\n";
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
- if (STRICT) {
962
- DESERIALIZE += " else {\n";
963
- 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';
964
- DESERIALIZE += indent + " }\n";
965
- } else {
966
- DESERIALIZE += " else { \n";
967
- DESERIALIZE += indent + " srcStart += 2;\n";
968
- DESERIALIZE += indent + " keyStart = 0;\n";
969
- DESERIALIZE += indent + " break;\n";
970
- DESERIALIZE += indent + " }\n";
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
- path.posix.join(
1103
- ...path
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
- "json-as" +
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
- "json-as" +
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) + ".json.ts"), toString(source));
1236
+ writeFileSync(path.join(process.cwd(), this.baseDir, removeExtension(source.normalizedPath) + ".tmp.ts"), toString(source));
1269
1237
  }
1270
1238
  }
1271
1239
  }