json-as 1.1.21 → 1.1.23

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.
@@ -44,6 +44,44 @@ export class JSONTransform extends Visitor {
44
44
  this.visitClassDeclaration(node);
45
45
  }
46
46
 
47
+ resolveType(type: string, source: Src, visited = new Set<string>()): string {
48
+ const stripped = stripNull(type);
49
+
50
+ if (visited.has(stripped)) {
51
+ return stripped;
52
+ }
53
+ visited.add(stripped);
54
+
55
+ const resolvedType = source.aliases.find((v) => stripNull(v.name) === stripped)?.getBaseType();
56
+
57
+ if (resolvedType) {
58
+ return this.resolveType(resolvedType, source, visited);
59
+ }
60
+
61
+ for (const imp of source.imports) {
62
+ if (!imp.declarations) continue;
63
+
64
+ for (const decl of imp.declarations) {
65
+ if (decl.name.text === stripped) {
66
+ const externalSource = this.parser.sources.find((s) => s.internalPath === imp.internalPath);
67
+ if (externalSource) {
68
+ const externalSrc = this.sources.get(externalSource);
69
+ if (!externalSrc) continue;
70
+
71
+ const externalAlias = externalSrc.aliases.find((a) => a.name === decl.foreignName.text);
72
+
73
+ if (externalAlias) {
74
+ const externalType = externalAlias.getBaseType();
75
+ return this.resolveType(externalType, externalSrc, visited);
76
+ }
77
+ }
78
+ }
79
+ }
80
+ }
81
+
82
+ return type;
83
+ }
84
+
47
85
  visitClassDeclaration(node: ClassDeclaration): void {
48
86
  if (!node.decorators?.length) return;
49
87
 
@@ -124,7 +162,7 @@ export class JSONTransform extends Visitor {
124
162
 
125
163
  const getUnknownTypes = (type: string, types: string[] = []): string[] => {
126
164
  type = stripNull(type);
127
- type = source.aliases.find((v) => stripNull(v.name) == type)?.getBaseType() || type;
165
+ type = this.resolveType(type, source);
128
166
  if (type.startsWith("Array<")) {
129
167
  return getUnknownTypes(type.slice(6, -1));
130
168
  } else if (type.startsWith("Map<")) {
@@ -256,7 +294,7 @@ export class JSONTransform extends Visitor {
256
294
  for (const member of members) {
257
295
  if (!member.type) throwError("Fields must be strongly typed", node.range);
258
296
  let type = toString(member.type!);
259
- type = source.aliases.find((v) => stripNull(v.name) == stripNull(type))?.getBaseType() || type;
297
+ type = this.resolveType(type, source);
260
298
 
261
299
  const name = member.name;
262
300
  const value = member.initializer ? toString(member.initializer!) : null;
@@ -620,7 +658,7 @@ export class JSONTransform extends Visitor {
620
658
 
621
659
  let mbElse = " ";
622
660
  if (!STRICT || sortedMembers.string.length) {
623
- // generateGroups(sortedMembers.string, generateComparisions)
661
+ // generateGroups(sortedMembers.string, generateComparisons)
624
662
  DESERIALIZE += mbElse + "if (code == 34) {\n";
625
663
  DESERIALIZE += " lastIndex = srcStart;\n";
626
664
  DESERIALIZE += " srcStart += 2;\n";
@@ -634,7 +672,7 @@ export class JSONTransform extends Visitor {
634
672
  generateConsts(group);
635
673
  const first = group[0];
636
674
  const fName = first.alias || first.name;
637
- DESERIALIZE += indent + " if (" + (first.generic ? "isString<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
675
+ DESERIALIZE += indent + " if (" + (first.generic ? "isString<" + first.type + ">() && " : "") + getComparison(fName) + ") { // " + fName + "\n";
638
676
  DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart + 2), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
639
677
  DESERIALIZE += indent + " srcStart += 4;\n";
640
678
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -644,7 +682,7 @@ export class JSONTransform extends Visitor {
644
682
  for (let i = 1; i < group.length; i++) {
645
683
  const mem = group[i];
646
684
  const memName = mem.alias || mem.name;
647
- DESERIALIZE += indent + " else if (" + (mem.generic ? "isString<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
685
+ DESERIALIZE += indent + " else if (" + (mem.generic ? "isString<" + mem.type + ">() && " : "") + getComparison(memName) + ") { // " + memName + "\n";
648
686
  DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart + 2), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
649
687
  DESERIALIZE += indent + " srcStart += 4;\n";
650
688
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -689,7 +727,7 @@ export class JSONTransform extends Visitor {
689
727
  generateConsts(group);
690
728
  const first = group[0];
691
729
  const fName = first.alias || first.name;
692
- DESERIALIZE += indent + " if (" + (first.generic ? "(isInteger<" + first.type + ">() || isFloat<" + first.type + ">()) && " : "") + getComparision(fName) + ") { // " + fName + "\n";
730
+ DESERIALIZE += indent + " if (" + (first.generic ? "(isInteger<" + first.type + ">() || isFloat<" + first.type + ">()) && " : "") + getComparison(fName) + ") { // " + fName + "\n";
693
731
  DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
694
732
  DESERIALIZE += indent + " srcStart += 2;\n";
695
733
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -699,7 +737,7 @@ export class JSONTransform extends Visitor {
699
737
  for (let i = 1; i < group.length; i++) {
700
738
  const mem = group[i];
701
739
  const memName = mem.alias || mem.name;
702
- DESERIALIZE += indent + " else if (" + (mem.generic ? "(isInteger<" + mem.type + ">() || isFloat<" + mem.type + ">()) && " : "") + getComparision(memName) + ") { // " + memName + "\n";
740
+ DESERIALIZE += indent + " else if (" + (mem.generic ? "(isInteger<" + mem.type + ">() || isFloat<" + mem.type + ">()) && " : "") + getComparison(memName) + ") { // " + memName + "\n";
703
741
  DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
704
742
  DESERIALIZE += indent + " srcStart += 2;\n";
705
743
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -750,7 +788,7 @@ export class JSONTransform extends Visitor {
750
788
  generateConsts(group);
751
789
  const first = group[0];
752
790
  const fName = first.alias || first.name;
753
- DESERIALIZE += indent + " if (" + (first.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparision(fName) + ") { // " + fName + "\n";
791
+ DESERIALIZE += indent + " if (" + (first.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparison(fName) + ") { // " + fName + "\n";
754
792
  DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
755
793
  DESERIALIZE += indent + " keyStart = 0;\n";
756
794
  DESERIALIZE += indent + " break;\n";
@@ -759,7 +797,7 @@ export class JSONTransform extends Visitor {
759
797
  for (let i = 1; i < group.length; i++) {
760
798
  const mem = group[i];
761
799
  const memName = mem.alias || mem.name;
762
- DESERIALIZE += indent + " else if (" + (mem.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparision(memName) + ") { // " + memName + "\n";
800
+ DESERIALIZE += indent + " else if (" + (mem.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparison(memName) + ") { // " + memName + "\n";
763
801
  DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
764
802
  DESERIALIZE += indent + " keyStart = 0;\n";
765
803
  DESERIALIZE += indent + " break;\n";
@@ -810,7 +848,7 @@ export class JSONTransform extends Visitor {
810
848
  generateConsts(group);
811
849
  const first = group[0];
812
850
  const fName = first.alias || first.name;
813
- DESERIALIZE += indent + " if (" + (first.generic ? "isArray<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
851
+ DESERIALIZE += indent + " if (" + (first.generic ? "isArray<" + first.type + ">() && " : "") + getComparison(fName) + ") { // " + fName + "\n";
814
852
  DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
815
853
  DESERIALIZE += indent + " keyStart = 0;\n";
816
854
  DESERIALIZE += indent + " break;\n";
@@ -819,7 +857,7 @@ export class JSONTransform extends Visitor {
819
857
  for (let i = 1; i < group.length; i++) {
820
858
  const mem = group[i];
821
859
  const memName = mem.alias || mem.name;
822
- DESERIALIZE += indent + " else if (" + (mem.generic ? "isArray" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
860
+ DESERIALIZE += indent + " else if (" + (mem.generic ? "isArray" + mem.type + ">() && " : "") + getComparison(memName) + ") { // " + memName + "\n";
823
861
  DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
824
862
  DESERIALIZE += indent + " keyStart = 0;\n";
825
863
  DESERIALIZE += indent + " break;\n";
@@ -862,7 +900,7 @@ export class JSONTransform extends Visitor {
862
900
  generateConsts(group);
863
901
  const first = group[0];
864
902
  const fName = first.alias || first.name;
865
- DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
903
+ DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparison(fName) + ") { // " + fName + "\n";
866
904
  DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
867
905
  DESERIALIZE += indent + " srcStart += 2;\n";
868
906
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -872,7 +910,7 @@ export class JSONTransform extends Visitor {
872
910
  for (let i = 1; i < group.length; i++) {
873
911
  const mem = group[i];
874
912
  const memName = mem.alias || mem.name;
875
- DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
913
+ DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparison(memName) + ") { // " + memName + "\n";
876
914
  DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
877
915
  DESERIALIZE += indent + " srcStart += 2;\n";
878
916
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -916,7 +954,7 @@ export class JSONTransform extends Visitor {
916
954
 
917
955
  const first = group[0];
918
956
  const fName = first.alias || first.name;
919
- DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
957
+ DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparison(fName) + ") { // " + fName + "\n";
920
958
  DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
921
959
  DESERIALIZE += indent + " srcStart += 2;\n";
922
960
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -926,7 +964,7 @@ export class JSONTransform extends Visitor {
926
964
  for (let i = 1; i < group.length; i++) {
927
965
  const mem = group[i];
928
966
  const memName = mem.alias || mem.name;
929
- DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
967
+ DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparison(memName) + ") { // " + memName + "\n";
930
968
  DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
931
969
  DESERIALIZE += indent + " srcStart += 2;\n";
932
970
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -971,7 +1009,7 @@ export class JSONTransform extends Visitor {
971
1009
 
972
1010
  const first = group[0];
973
1011
  const fName = first.alias || first.name;
974
- DESERIALIZE += indent + " if (" + (first.generic ? "isNullable<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
1012
+ DESERIALIZE += indent + " if (" + (first.generic ? "isNullable<" + first.type + ">() && " : "") + getComparison(fName) + ") { // " + fName + "\n";
975
1013
  DESERIALIZE += indent + " store<usize>(changetype<usize>(out), 0, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
976
1014
  DESERIALIZE += indent + " srcStart += 2;\n";
977
1015
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -981,7 +1019,7 @@ export class JSONTransform extends Visitor {
981
1019
  for (let i = 1; i < group.length; i++) {
982
1020
  const mem = group[i];
983
1021
  const memName = mem.alias || mem.name;
984
- DESERIALIZE += indent + " else if (" + (mem.generic ? "isNullable<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
1022
+ DESERIALIZE += indent + " else if (" + (mem.generic ? "isNullable<" + mem.type + ">() && " : "") + getComparison(memName) + ") { // " + memName + "\n";
985
1023
  DESERIALIZE += indent + " store<usize>(changetype<usize>(out), 0, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
986
1024
  DESERIALIZE += indent + " srcStart += 2;\n";
987
1025
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -1427,7 +1465,7 @@ export function stripNull(type: string): string {
1427
1465
  return type;
1428
1466
  }
1429
1467
 
1430
- function getComparision(data: string) {
1468
+ function getComparison(data: string) {
1431
1469
  switch (data.length << 1) {
1432
1470
  case 2: {
1433
1471
  return "code16 == " + data.charCodeAt(0);
@@ -100,10 +100,10 @@ export class Src {
100
100
  public schemas: Schema[];
101
101
  public aliases: TypeAlias[];
102
102
  public exports: Schema[];
103
+ public imports: ImportStatement[] = [];
103
104
  private nodeMap: Map<Node, NamespaceDeclaration[]> = new Map<Node, NamespaceDeclaration[]>();
104
105
  private classes: Record<string, ClassDeclaration> = {};
105
106
  private enums: Record<string, EnumDeclaration> = {};
106
- private imports: ImportStatement[] = [];
107
107
 
108
108
  constructor(
109
109
  source: Source,