@colyseus/schema 2.0.4 → 2.0.6

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.
Files changed (107) hide show
  1. package/README.md +0 -4
  2. package/build/cjs/index.js +48 -48
  3. package/build/cjs/index.js.map +1 -1
  4. package/build/esm/index.mjs +130 -104
  5. package/build/esm/index.mjs.map +1 -1
  6. package/build/umd/index.js +50 -50
  7. package/lib/Reflection.js +87 -119
  8. package/lib/Reflection.js.map +1 -1
  9. package/lib/Schema.js +195 -257
  10. package/lib/Schema.js.map +1 -1
  11. package/lib/annotations.d.ts +6 -6
  12. package/lib/annotations.js +64 -92
  13. package/lib/annotations.js.map +1 -1
  14. package/lib/changes/ChangeTree.d.ts +1 -1
  15. package/lib/changes/ChangeTree.js +63 -70
  16. package/lib/changes/ChangeTree.js.map +1 -1
  17. package/lib/changes/ReferenceTracker.js +24 -27
  18. package/lib/changes/ReferenceTracker.js.map +1 -1
  19. package/lib/codegen/api.js +9 -9
  20. package/lib/codegen/api.js.map +1 -1
  21. package/lib/codegen/argv.d.ts +1 -1
  22. package/lib/codegen/argv.js +11 -11
  23. package/lib/codegen/argv.js.map +1 -1
  24. package/lib/codegen/cli.js +21 -10
  25. package/lib/codegen/cli.js.map +1 -1
  26. package/lib/codegen/languages/cpp.js +126 -77
  27. package/lib/codegen/languages/cpp.js.map +1 -1
  28. package/lib/codegen/languages/csharp.js +121 -62
  29. package/lib/codegen/languages/csharp.js.map +1 -1
  30. package/lib/codegen/languages/haxe.js +34 -26
  31. package/lib/codegen/languages/haxe.js.map +1 -1
  32. package/lib/codegen/languages/java.js +39 -27
  33. package/lib/codegen/languages/java.js.map +1 -1
  34. package/lib/codegen/languages/js.js +48 -32
  35. package/lib/codegen/languages/js.js.map +1 -1
  36. package/lib/codegen/languages/lua.js +35 -24
  37. package/lib/codegen/languages/lua.js.map +1 -1
  38. package/lib/codegen/languages/ts.js +63 -68
  39. package/lib/codegen/languages/ts.js.map +1 -1
  40. package/lib/codegen/parser.d.ts +9 -1
  41. package/lib/codegen/parser.js +88 -46
  42. package/lib/codegen/parser.js.map +1 -1
  43. package/lib/codegen/types.d.ts +8 -0
  44. package/lib/codegen/types.js +64 -54
  45. package/lib/codegen/types.js.map +1 -1
  46. package/lib/encoding/decode.js +15 -15
  47. package/lib/encoding/decode.js.map +1 -1
  48. package/lib/encoding/encode.js +14 -14
  49. package/lib/encoding/encode.js.map +1 -1
  50. package/lib/events/EventEmitter.d.ts +1 -1
  51. package/lib/events/EventEmitter.js +16 -47
  52. package/lib/events/EventEmitter.js.map +1 -1
  53. package/lib/filters/index.js +7 -8
  54. package/lib/filters/index.js.map +1 -1
  55. package/lib/index.js +11 -11
  56. package/lib/index.js.map +1 -1
  57. package/lib/types/ArraySchema.d.ts +1 -1
  58. package/lib/types/ArraySchema.js +161 -219
  59. package/lib/types/ArraySchema.js.map +1 -1
  60. package/lib/types/CollectionSchema.d.ts +1 -1
  61. package/lib/types/CollectionSchema.js +63 -71
  62. package/lib/types/CollectionSchema.js.map +1 -1
  63. package/lib/types/HelperTypes.d.ts +9 -9
  64. package/lib/types/MapSchema.d.ts +16 -16
  65. package/lib/types/MapSchema.js +68 -78
  66. package/lib/types/MapSchema.js.map +1 -1
  67. package/lib/types/SetSchema.js +62 -71
  68. package/lib/types/SetSchema.js.map +1 -1
  69. package/lib/types/index.js +1 -1
  70. package/lib/types/index.js.map +1 -1
  71. package/lib/types/typeRegistry.js +1 -1
  72. package/lib/types/typeRegistry.js.map +1 -1
  73. package/lib/types/utils.js +9 -10
  74. package/lib/types/utils.js.map +1 -1
  75. package/lib/utils.js +10 -13
  76. package/lib/utils.js.map +1 -1
  77. package/package.json +18 -15
  78. package/src/Reflection.ts +159 -0
  79. package/src/Schema.ts +1024 -0
  80. package/src/annotations.ts +400 -0
  81. package/src/changes/ChangeTree.ts +295 -0
  82. package/src/changes/ReferenceTracker.ts +81 -0
  83. package/src/codegen/api.ts +46 -0
  84. package/src/codegen/argv.ts +40 -0
  85. package/src/codegen/cli.ts +65 -0
  86. package/src/codegen/languages/cpp.ts +297 -0
  87. package/src/codegen/languages/csharp.ts +208 -0
  88. package/src/codegen/languages/haxe.ts +110 -0
  89. package/src/codegen/languages/java.ts +115 -0
  90. package/src/codegen/languages/js.ts +115 -0
  91. package/src/codegen/languages/lua.ts +125 -0
  92. package/src/codegen/languages/ts.ts +129 -0
  93. package/src/codegen/parser.ts +299 -0
  94. package/src/codegen/types.ts +177 -0
  95. package/src/encoding/decode.ts +278 -0
  96. package/src/encoding/encode.ts +283 -0
  97. package/src/filters/index.ts +23 -0
  98. package/src/index.ts +59 -0
  99. package/src/spec.ts +49 -0
  100. package/src/types/ArraySchema.ts +612 -0
  101. package/src/types/CollectionSchema.ts +199 -0
  102. package/src/types/HelperTypes.ts +34 -0
  103. package/src/types/MapSchema.ts +268 -0
  104. package/src/types/SetSchema.ts +208 -0
  105. package/src/types/typeRegistry.ts +19 -0
  106. package/src/types/utils.ts +62 -0
  107. package/src/utils.ts +28 -0
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generate = void 0;
4
- var types_1 = require("../types");
5
- var typeMaps = {
4
+ const types_1 = require("../types");
5
+ const typeMaps = {
6
6
  "string": "string",
7
7
  "number": "number",
8
8
  "boolean": "boolean",
@@ -17,73 +17,89 @@ var typeMaps = {
17
17
  "float32": "number",
18
18
  "float64": "number",
19
19
  };
20
- var distinct = function (value, index, self) { return self.indexOf(value) === index; };
20
+ const distinct = (value, index, self) => self.indexOf(value) === index;
21
21
  function generate(context, options) {
22
- return context.classes.map(function (klass) { return ({
22
+ return context.classes.map(klass => ({
23
23
  name: klass.name + ".js",
24
24
  content: generateClass(klass, options.namespace, context.classes)
25
- }); });
25
+ }));
26
26
  }
27
27
  exports.generate = generate;
28
28
  function generateClass(klass, namespace, allClasses) {
29
- var allRefs = [];
30
- klass.properties.forEach(function (property) {
31
- var type = property.type;
29
+ const allRefs = [];
30
+ klass.properties.forEach(property => {
31
+ let type = property.type;
32
32
  // keep all refs list
33
33
  if ((type === "ref" || type === "array" || type === "map")) {
34
34
  allRefs.push(property);
35
35
  }
36
36
  });
37
- return types_1.getCommentHeader() + "\n\nconst schema = require(\"@colyseus/schema\");\nconst Schema = schema.Schema;\nconst type = schema.type;\n" + allRefs.
38
- filter(function (ref) { return ref.childType && typeMaps[ref.childType] === undefined; }).
39
- map(function (ref) { return ref.childType; }).
40
- concat(types_1.getInheritanceTree(klass, allClasses, false).map(function (klass) { return klass.name; })).
37
+ return `${(0, types_1.getCommentHeader)()}
38
+
39
+ const schema = require("@colyseus/schema");
40
+ const Schema = schema.Schema;
41
+ const type = schema.type;
42
+ ${allRefs.
43
+ filter(ref => ref.childType && typeMaps[ref.childType] === undefined).
44
+ map(ref => ref.childType).
45
+ concat((0, types_1.getInheritanceTree)(klass, allClasses, false).map(klass => klass.name)).
41
46
  filter(distinct).
42
- map(function (childType) { return "const " + childType + " = require(\"./" + childType + "\");"; }).
43
- join("\n") + "\n\nclass " + klass.name + " extends " + klass.extends + " {\n constructor () {\n super();\n" + klass.properties.
44
- filter(function (prop) { return prop.childType !== undefined; }).
45
- map(function (prop) { return " " + generatePropertyInitializer(prop); }).join("\n") + "\n }\n}\n" + klass.properties.map(function (prop) { return generatePropertyDeclaration(klass.name, prop); }).join("\n") + "\n\nexport default " + klass.name + ";\n";
47
+ map(childType => `const ${childType} = require("./${childType}");`).
48
+ join("\n")}
49
+
50
+ class ${klass.name} extends ${klass.extends} {
51
+ constructor () {
52
+ super();
53
+ ${klass.properties.
54
+ filter(prop => prop.childType !== undefined).
55
+ map(prop => " " + generatePropertyInitializer(prop)).join("\n")}
56
+ }
57
+ }
58
+ ${klass.properties.map(prop => generatePropertyDeclaration(klass.name, prop)).join("\n")}
59
+
60
+ export default ${klass.name};
61
+ `;
46
62
  }
47
63
  function generatePropertyDeclaration(className, prop) {
48
- var typeArgs;
64
+ let typeArgs;
49
65
  if (prop.childType) {
50
- var isUpcaseFirst = prop.childType.match(/^[A-Z]/);
66
+ const isUpcaseFirst = prop.childType.match(/^[A-Z]/);
51
67
  if (isUpcaseFirst) {
52
- typeArgs += ", " + prop.childType;
68
+ typeArgs += `, ${prop.childType}`;
53
69
  }
54
70
  else {
55
- typeArgs += ", \"" + prop.childType + "\"";
71
+ typeArgs += `, "${prop.childType}"`;
56
72
  }
57
73
  if (prop.type === "ref") {
58
- typeArgs = "" + prop.childType;
74
+ typeArgs = `${prop.childType}`;
59
75
  }
60
76
  else if (prop.type === "array") {
61
77
  typeArgs = (isUpcaseFirst)
62
- ? "[ " + prop.childType + " ]"
63
- : "[ \"" + prop.childType + "\" ]";
78
+ ? `[ ${prop.childType} ]`
79
+ : `[ "${prop.childType}" ]`;
64
80
  }
65
81
  else if (prop.type === "map") {
66
82
  typeArgs = (isUpcaseFirst)
67
- ? "{ map: " + prop.childType + " }"
68
- : "{ map: \"" + prop.childType + "\" }";
83
+ ? `{ map: ${prop.childType} }`
84
+ : `{ map: "${prop.childType}" }`;
69
85
  }
70
86
  }
71
87
  else {
72
- typeArgs = "\"" + prop.type + "\"";
88
+ typeArgs = `"${prop.type}"`;
73
89
  }
74
- return "type(" + typeArgs + ")(" + className + ".prototype, \"" + prop.name + "\");";
90
+ return `type(${typeArgs})(${className}.prototype, "${prop.name}");`;
75
91
  }
76
92
  function generatePropertyInitializer(prop) {
77
- var initializer = "";
93
+ let initializer = "";
78
94
  if (prop.type === "ref") {
79
- initializer = "new " + prop.childType + "()";
95
+ initializer = `new ${prop.childType}()`;
80
96
  }
81
97
  else if (prop.type === "array") {
82
- initializer = "new schema.ArraySchema()";
98
+ initializer = `new schema.ArraySchema()`;
83
99
  }
84
100
  else if (prop.type === "map") {
85
- initializer = "new schema.MapSchema()";
101
+ initializer = `new schema.MapSchema()`;
86
102
  }
87
- return "this." + prop.name + " = " + initializer;
103
+ return `this.${prop.name} = ${initializer}`;
88
104
  }
89
105
  //# sourceMappingURL=js.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"js.js","sourceRoot":"","sources":["../../../src/codegen/languages/js.ts"],"names":[],"mappings":"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","sourcesContent":["import { Class, Property, File, getCommentHeader, getInheritanceTree, Context } from \"../types\";\nimport { GenerateOptions } from \"../api\";\n\nconst typeMaps = {\n \"string\": \"string\",\n \"number\": \"number\",\n \"boolean\": \"boolean\",\n \"int8\": \"number\",\n \"uint8\": \"number\",\n \"int16\": \"number\",\n \"uint16\": \"number\",\n \"int32\": \"number\",\n \"uint32\": \"number\",\n \"int64\": \"number\",\n \"uint64\": \"number\",\n \"float32\": \"number\",\n \"float64\": \"number\",\n}\n\nconst distinct = (value, index, self) => self.indexOf(value) === index;\n\nexport function generate (context: Context, options: GenerateOptions): File[] {\n return context.classes.map(klass => ({\n name: klass.name + \".js\",\n content: generateClass(klass, options.namespace, context.classes)\n }));\n}\n\nfunction generateClass(klass: Class, namespace: string, allClasses: Class[]) {\n const allRefs: Property[] = [];\n klass.properties.forEach(property => {\n let type = property.type;\n\n // keep all refs list\n if ((type === \"ref\" || type === \"array\" || type === \"map\")) {\n allRefs.push(property);\n }\n });\n\n return `${getCommentHeader()}\n\nconst schema = require(\"@colyseus/schema\");\nconst Schema = schema.Schema;\nconst type = schema.type;\n${allRefs.\n filter(ref => ref.childType && typeMaps[ref.childType] === undefined).\n map(ref => ref.childType).\n concat(getInheritanceTree(klass, allClasses, false).map(klass => klass.name)).\n filter(distinct).\n map(childType => `const ${childType} = require(\"./${childType}\");`).\n join(\"\\n\")}\n\nclass ${klass.name} extends ${klass.extends} {\n constructor () {\n super();\n${klass.properties.\n filter(prop => prop.childType !== undefined).\n map(prop => \" \" + generatePropertyInitializer(prop)).join(\"\\n\")}\n }\n}\n${klass.properties.map(prop => generatePropertyDeclaration(klass.name, prop)).join(\"\\n\")}\n\nexport default ${klass.name};\n`;\n}\n\nfunction generatePropertyDeclaration(className: string, prop: Property) {\n let typeArgs: string;\n\n if (prop.childType) {\n const isUpcaseFirst = prop.childType.match(/^[A-Z]/);\n\n if (isUpcaseFirst) {\n typeArgs += `, ${prop.childType}`;\n\n } else {\n typeArgs += `, \"${prop.childType}\"`;\n }\n\n if(prop.type === \"ref\") {\n typeArgs = `${prop.childType}`;\n\n } else if(prop.type === \"array\") {\n typeArgs = (isUpcaseFirst)\n ? `[ ${prop.childType} ]`\n : `[ \"${prop.childType}\" ]`;\n\n } else if(prop.type === \"map\") {\n typeArgs = (isUpcaseFirst)\n ? `{ map: ${prop.childType} }`\n : `{ map: \"${prop.childType}\" }`;\n }\n\n } else {\n typeArgs = `\"${prop.type}\"`;\n }\n\n return `type(${typeArgs})(${className}.prototype, \"${prop.name}\");`;\n}\n\nfunction generatePropertyInitializer(prop: Property) {\n let initializer = \"\";\n\n if(prop.type === \"ref\") {\n initializer = `new ${prop.childType}()`;\n\n } else if(prop.type === \"array\") {\n initializer = `new schema.ArraySchema()`;\n\n } else if(prop.type === \"map\") {\n initializer = `new schema.MapSchema()`;\n }\n\n return `this.${prop.name} = ${initializer}`;\n}\n"]}
1
+ {"version":3,"file":"js.js","sourceRoot":"","sources":["../../../src/codegen/languages/js.ts"],"names":[],"mappings":";;;AAAA,oCAAgG;AAGhG,MAAM,QAAQ,GAAG;IACb,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,SAAS;IACpB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;CACtB,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;AAEvE,SAAgB,QAAQ,CAAE,OAAgB,EAAE,OAAwB;IAChE,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,KAAK;QACxB,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC;KACpE,CAAC,CAAC,CAAC;AACR,CAAC;AALD,4BAKC;AAED,SAAS,aAAa,CAAC,KAAY,EAAE,SAAiB,EAAE,UAAmB;IACvE,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAChC,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAEzB,qBAAqB;QACrB,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;YACxD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC1B;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,IAAA,wBAAgB,GAAE;;;;;EAK9B,OAAO;QACL,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC;QACrE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC;QACzB,MAAM,CAAC,IAAA,0BAAkB,EAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,CAAC,QAAQ,CAAC;QAChB,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,SAAS,iBAAiB,SAAS,KAAK,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC;;QAEN,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,OAAO;;;EAGzC,KAAK,CAAC,UAAU;QACd,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC;QAC5C,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAGxE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,2BAA2B,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;iBAEvE,KAAK,CAAC,IAAI;CAC1B,CAAC;AACF,CAAC;AAED,SAAS,2BAA2B,CAAC,SAAiB,EAAE,IAAc;IAClE,IAAI,QAAgB,CAAC;IAErB,IAAI,IAAI,CAAC,SAAS,EAAE;QAChB,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAErD,IAAI,aAAa,EAAE;YACf,QAAQ,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;SAErC;aAAM;YACH,QAAQ,IAAI,MAAM,IAAI,CAAC,SAAS,GAAG,CAAC;SACvC;QAED,IAAG,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;YACpB,QAAQ,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;SAElC;aAAM,IAAG,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YAC7B,QAAQ,GAAG,CAAC,aAAa,CAAC;gBACtB,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,IAAI;gBACzB,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,KAAK,CAAC;SAEnC;aAAM,IAAG,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;YAC3B,QAAQ,GAAG,CAAC,aAAa,CAAC;gBACtB,CAAC,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI;gBAC9B,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,KAAK,CAAC;SACxC;KAEJ;SAAM;QACH,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;KAC/B;IAED,OAAO,QAAQ,QAAQ,KAAK,SAAS,gBAAgB,IAAI,CAAC,IAAI,KAAK,CAAC;AACxE,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAc;IAC/C,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,IAAG,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;QACpB,WAAW,GAAG,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC;KAE3C;SAAM,IAAG,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;QAC7B,WAAW,GAAG,0BAA0B,CAAC;KAE5C;SAAM,IAAG,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;QAC3B,WAAW,GAAG,wBAAwB,CAAC;KAC1C;IAED,OAAO,QAAQ,IAAI,CAAC,IAAI,MAAM,WAAW,EAAE,CAAC;AAChD,CAAC","sourcesContent":["import { Class, Property, File, getCommentHeader, getInheritanceTree, Context } from \"../types\";\nimport { GenerateOptions } from \"../api\";\n\nconst typeMaps = {\n \"string\": \"string\",\n \"number\": \"number\",\n \"boolean\": \"boolean\",\n \"int8\": \"number\",\n \"uint8\": \"number\",\n \"int16\": \"number\",\n \"uint16\": \"number\",\n \"int32\": \"number\",\n \"uint32\": \"number\",\n \"int64\": \"number\",\n \"uint64\": \"number\",\n \"float32\": \"number\",\n \"float64\": \"number\",\n}\n\nconst distinct = (value, index, self) => self.indexOf(value) === index;\n\nexport function generate (context: Context, options: GenerateOptions): File[] {\n return context.classes.map(klass => ({\n name: klass.name + \".js\",\n content: generateClass(klass, options.namespace, context.classes)\n }));\n}\n\nfunction generateClass(klass: Class, namespace: string, allClasses: Class[]) {\n const allRefs: Property[] = [];\n klass.properties.forEach(property => {\n let type = property.type;\n\n // keep all refs list\n if ((type === \"ref\" || type === \"array\" || type === \"map\")) {\n allRefs.push(property);\n }\n });\n\n return `${getCommentHeader()}\n\nconst schema = require(\"@colyseus/schema\");\nconst Schema = schema.Schema;\nconst type = schema.type;\n${allRefs.\n filter(ref => ref.childType && typeMaps[ref.childType] === undefined).\n map(ref => ref.childType).\n concat(getInheritanceTree(klass, allClasses, false).map(klass => klass.name)).\n filter(distinct).\n map(childType => `const ${childType} = require(\"./${childType}\");`).\n join(\"\\n\")}\n\nclass ${klass.name} extends ${klass.extends} {\n constructor () {\n super();\n${klass.properties.\n filter(prop => prop.childType !== undefined).\n map(prop => \" \" + generatePropertyInitializer(prop)).join(\"\\n\")}\n }\n}\n${klass.properties.map(prop => generatePropertyDeclaration(klass.name, prop)).join(\"\\n\")}\n\nexport default ${klass.name};\n`;\n}\n\nfunction generatePropertyDeclaration(className: string, prop: Property) {\n let typeArgs: string;\n\n if (prop.childType) {\n const isUpcaseFirst = prop.childType.match(/^[A-Z]/);\n\n if (isUpcaseFirst) {\n typeArgs += `, ${prop.childType}`;\n\n } else {\n typeArgs += `, \"${prop.childType}\"`;\n }\n\n if(prop.type === \"ref\") {\n typeArgs = `${prop.childType}`;\n\n } else if(prop.type === \"array\") {\n typeArgs = (isUpcaseFirst)\n ? `[ ${prop.childType} ]`\n : `[ \"${prop.childType}\" ]`;\n\n } else if(prop.type === \"map\") {\n typeArgs = (isUpcaseFirst)\n ? `{ map: ${prop.childType} }`\n : `{ map: \"${prop.childType}\" }`;\n }\n\n } else {\n typeArgs = `\"${prop.type}\"`;\n }\n\n return `type(${typeArgs})(${className}.prototype, \"${prop.name}\");`;\n}\n\nfunction generatePropertyInitializer(prop: Property) {\n let initializer = \"\";\n\n if(prop.type === \"ref\") {\n initializer = `new ${prop.childType}()`;\n\n } else if(prop.type === \"array\") {\n initializer = `new schema.ArraySchema()`;\n\n } else if(prop.type === \"map\") {\n initializer = `new schema.MapSchema()`;\n }\n\n return `this.${prop.name} = ${initializer}`;\n}\n"]}
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generate = void 0;
4
- var types_1 = require("../types");
4
+ const types_1 = require("../types");
5
5
  /**
6
6
  TODO:
7
7
  - Support inheritance
8
8
  - Support importing Schema dependencies
9
9
  */
10
- var typeMaps = {
10
+ const typeMaps = {
11
11
  "string": "string",
12
12
  "number": "number",
13
13
  "boolean": "boolean",
@@ -22,31 +22,42 @@ var typeMaps = {
22
22
  "float32": "number",
23
23
  "float64": "number",
24
24
  };
25
- var distinct = function (value, index, self) { return self.indexOf(value) === index; };
25
+ const distinct = (value, index, self) => self.indexOf(value) === index;
26
26
  function generate(context, options) {
27
- return context.classes.map(function (klass) { return ({
27
+ return context.classes.map(klass => ({
28
28
  name: klass.name + ".lua",
29
29
  content: generateClass(klass, options.namespace, context.classes)
30
- }); });
30
+ }));
31
31
  }
32
32
  exports.generate = generate;
33
33
  function generateClass(klass, namespace, allClasses) {
34
- var allRefs = [];
35
- klass.properties.forEach(function (property) {
36
- var type = property.type;
34
+ const allRefs = [];
35
+ klass.properties.forEach(property => {
36
+ let type = property.type;
37
37
  // keep all refs list
38
38
  if ((type === "ref" || type === "array" || type === "map")) {
39
39
  allRefs.push(property);
40
40
  }
41
41
  });
42
42
  // TOOD: inheritance
43
- return types_1.getCommentHeader().replace(/\/\//mg, "--") + "\n\nlocal schema = require 'colyseus.serialization.schema.schema'\n" + allRefs.
44
- filter(function (ref) { return ref.childType && typeMaps[ref.childType] === undefined; }).
45
- map(function (ref) { return ref.childType; }).
46
- concat(types_1.getInheritanceTree(klass, allClasses, false).map(function (klass) { return klass.name; })).
43
+ return `${(0, types_1.getCommentHeader)().replace(/\/\//mg, "--")}
44
+
45
+ local schema = require 'colyseus.serialization.schema.schema'
46
+ ${allRefs.
47
+ filter(ref => ref.childType && typeMaps[ref.childType] === undefined).
48
+ map(ref => ref.childType).
49
+ concat((0, types_1.getInheritanceTree)(klass, allClasses, false).map(klass => klass.name)).
47
50
  filter(distinct).
48
- map(function (childType) { return "local " + childType + " = require '" + (namespace ? namespace + "." : '') + childType + "'"; }).
49
- join("\n") + "\n\nlocal " + klass.name + " = schema.define({\n" + klass.properties.map(function (prop) { return generatePropertyDeclaration(prop); }).join(",\n") + ",\n [\"_fields_by_index\"] = { " + klass.properties.map(function (prop) { return "\"" + prop.name + "\""; }).join(", ") + " },\n})\n\nreturn " + klass.name + "\n";
51
+ map(childType => `local ${childType} = require '${(namespace ? `${namespace}.` : '')}${childType}'`).
52
+ join("\n")}
53
+
54
+ local ${klass.name} = schema.define({
55
+ ${klass.properties.map(prop => generatePropertyDeclaration(prop)).join(",\n")},
56
+ ["_fields_by_index"] = { ${klass.properties.map(prop => `"${prop.name}"`).join(", ")} },
57
+ })
58
+
59
+ return ${klass.name}
60
+ `;
50
61
  // ["on_change"] = function(changes)
51
62
  // -- on change logic here
52
63
  // end,
@@ -58,30 +69,30 @@ function generateClass(klass, namespace, allClasses) {
58
69
  // end,
59
70
  }
60
71
  function generatePropertyDeclaration(prop) {
61
- var typeArgs;
72
+ let typeArgs;
62
73
  if (prop.childType) {
63
- var isUpcaseFirst = prop.childType.match(/^[A-Z]/);
74
+ const isUpcaseFirst = prop.childType.match(/^[A-Z]/);
64
75
  if (isUpcaseFirst) {
65
- typeArgs += "" + prop.childType;
76
+ typeArgs += `${prop.childType}`;
66
77
  }
67
78
  else {
68
- typeArgs += "\"" + prop.childType + "\"";
79
+ typeArgs += `"${prop.childType}"`;
69
80
  }
70
81
  if (prop.type === "ref") {
71
82
  typeArgs = (isUpcaseFirst)
72
- ? "" + prop.childType
73
- : "\"" + prop.childType + "\"";
83
+ ? `${prop.childType}`
84
+ : `"${prop.childType}"`;
74
85
  }
75
86
  else {
76
87
  typeArgs = (isUpcaseFirst)
77
- ? "{ " + prop.type + " = " + prop.childType + " }"
78
- : "{ " + prop.type + " = \"" + prop.childType + "\" }";
88
+ ? `{ ${prop.type} = ${prop.childType} }`
89
+ : `{ ${prop.type} = "${prop.childType}" }`;
79
90
  }
80
91
  }
81
92
  else {
82
- typeArgs = "\"" + prop.type + "\"";
93
+ typeArgs = `"${prop.type}"`;
83
94
  }
84
- return " [\"" + prop.name + "\"] = " + typeArgs;
95
+ return ` ["${prop.name}"] = ${typeArgs}`;
85
96
  }
86
97
  // function generatePropertyInitializer(prop: Property) {
87
98
  // let initializer = "";
@@ -1 +1 @@
1
- {"version":3,"file":"lua.js","sourceRoot":"","sources":["../../../src/codegen/languages/lua.ts"],"names":[],"mappings":"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","sourcesContent":["import { Class, Property, File, getCommentHeader, getInheritanceTree, Context } from \"../types\";\nimport { GenerateOptions } from \"../api\";\n\n/**\n TODO:\n - Support inheritance\n - Support importing Schema dependencies\n*/\n\nconst typeMaps = {\n \"string\": \"string\",\n \"number\": \"number\",\n \"boolean\": \"boolean\",\n \"int8\": \"number\",\n \"uint8\": \"number\",\n \"int16\": \"number\",\n \"uint16\": \"number\",\n \"int32\": \"number\",\n \"uint32\": \"number\",\n \"int64\": \"number\",\n \"uint64\": \"number\",\n \"float32\": \"number\",\n \"float64\": \"number\",\n}\n\nconst distinct = (value, index, self) => self.indexOf(value) === index;\n\nexport function generate (context: Context, options: GenerateOptions): File[] {\n return context.classes.map(klass => ({\n name: klass.name + \".lua\",\n content: generateClass(klass, options.namespace, context.classes)\n }));\n}\n\nfunction generateClass(klass: Class, namespace: string, allClasses: Class[]) {\n const allRefs: Property[] = [];\n klass.properties.forEach(property => {\n let type = property.type;\n\n // keep all refs list\n if ((type === \"ref\" || type === \"array\" || type === \"map\")) {\n allRefs.push(property);\n }\n });\n\n// TOOD: inheritance\n\n return `${getCommentHeader().replace(/\\/\\//mg, \"--\")}\n\nlocal schema = require 'colyseus.serialization.schema.schema'\n${allRefs.\n filter(ref => ref.childType && typeMaps[ref.childType] === undefined).\n map(ref => ref.childType).\n concat(getInheritanceTree(klass, allClasses, false).map(klass => klass.name)).\n filter(distinct).\n map(childType => `local ${childType} = require '${(namespace ? `${namespace}.` : '')}${childType}'`).\n join(\"\\n\")}\n\nlocal ${klass.name} = schema.define({\n${klass.properties.map(prop => generatePropertyDeclaration(prop)).join(\",\\n\")},\n [\"_fields_by_index\"] = { ${klass.properties.map(prop => `\"${prop.name}\"`).join(\", \")} },\n})\n\nreturn ${klass.name}\n`;\n\n // [\"on_change\"] = function(changes)\n // -- on change logic here\n // end,\n\n // [\"on_add\"] = function()\n // -- on add logic here\n // end,\n\n // [\"on_remove\"] = function()\n // -- on remove logic here\n // end,\n}\n\nfunction generatePropertyDeclaration(prop: Property) {\n let typeArgs: string;\n\n if (prop.childType) {\n const isUpcaseFirst = prop.childType.match(/^[A-Z]/);\n\n if (isUpcaseFirst) {\n typeArgs += `${prop.childType}`;\n\n } else {\n typeArgs += `\"${prop.childType}\"`;\n }\n\n if(prop.type === \"ref\") {\n typeArgs = (isUpcaseFirst)\n ? `${prop.childType}`\n : `\"${prop.childType}\"`;\n\n } else {\n typeArgs = (isUpcaseFirst)\n ? `{ ${prop.type} = ${prop.childType} }`\n : `{ ${prop.type} = \"${prop.childType}\" }`;\n }\n\n } else {\n typeArgs = `\"${prop.type}\"`;\n }\n\n return ` [\"${prop.name}\"] = ${typeArgs}`;\n}\n\n// function generatePropertyInitializer(prop: Property) {\n// let initializer = \"\";\n\n// if(prop.type === \"ref\") {\n// initializer = `new ${prop.childType}()`;\n\n// } else if(prop.type === \"array\") {\n// initializer = `new schema.ArraySchema()`;\n\n// } else if(prop.type === \"map\") {\n// initializer = `new schema.MapSchema()`;\n// }\n\n// return `this.${prop.name} = ${initializer}`;\n// }\n"]}
1
+ {"version":3,"file":"lua.js","sourceRoot":"","sources":["../../../src/codegen/languages/lua.ts"],"names":[],"mappings":"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","sourcesContent":["import { Class, Property, File, getCommentHeader, getInheritanceTree, Context } from \"../types\";\nimport { GenerateOptions } from \"../api\";\n\n/**\n TODO:\n - Support inheritance\n - Support importing Schema dependencies\n*/\n\nconst typeMaps = {\n \"string\": \"string\",\n \"number\": \"number\",\n \"boolean\": \"boolean\",\n \"int8\": \"number\",\n \"uint8\": \"number\",\n \"int16\": \"number\",\n \"uint16\": \"number\",\n \"int32\": \"number\",\n \"uint32\": \"number\",\n \"int64\": \"number\",\n \"uint64\": \"number\",\n \"float32\": \"number\",\n \"float64\": \"number\",\n}\n\nconst distinct = (value, index, self) => self.indexOf(value) === index;\n\nexport function generate (context: Context, options: GenerateOptions): File[] {\n return context.classes.map(klass => ({\n name: klass.name + \".lua\",\n content: generateClass(klass, options.namespace, context.classes)\n }));\n}\n\nfunction generateClass(klass: Class, namespace: string, allClasses: Class[]) {\n const allRefs: Property[] = [];\n klass.properties.forEach(property => {\n let type = property.type;\n\n // keep all refs list\n if ((type === \"ref\" || type === \"array\" || type === \"map\")) {\n allRefs.push(property);\n }\n });\n\n// TOOD: inheritance\n\n return `${getCommentHeader().replace(/\\/\\//mg, \"--\")}\n\nlocal schema = require 'colyseus.serialization.schema.schema'\n${allRefs.\n filter(ref => ref.childType && typeMaps[ref.childType] === undefined).\n map(ref => ref.childType).\n concat(getInheritanceTree(klass, allClasses, false).map(klass => klass.name)).\n filter(distinct).\n map(childType => `local ${childType} = require '${(namespace ? `${namespace}.` : '')}${childType}'`).\n join(\"\\n\")}\n\nlocal ${klass.name} = schema.define({\n${klass.properties.map(prop => generatePropertyDeclaration(prop)).join(\",\\n\")},\n [\"_fields_by_index\"] = { ${klass.properties.map(prop => `\"${prop.name}\"`).join(\", \")} },\n})\n\nreturn ${klass.name}\n`;\n\n // [\"on_change\"] = function(changes)\n // -- on change logic here\n // end,\n\n // [\"on_add\"] = function()\n // -- on add logic here\n // end,\n\n // [\"on_remove\"] = function()\n // -- on remove logic here\n // end,\n}\n\nfunction generatePropertyDeclaration(prop: Property) {\n let typeArgs: string;\n\n if (prop.childType) {\n const isUpcaseFirst = prop.childType.match(/^[A-Z]/);\n\n if (isUpcaseFirst) {\n typeArgs += `${prop.childType}`;\n\n } else {\n typeArgs += `\"${prop.childType}\"`;\n }\n\n if(prop.type === \"ref\") {\n typeArgs = (isUpcaseFirst)\n ? `${prop.childType}`\n : `\"${prop.childType}\"`;\n\n } else {\n typeArgs = (isUpcaseFirst)\n ? `{ ${prop.type} = ${prop.childType} }`\n : `{ ${prop.type} = \"${prop.childType}\" }`;\n }\n\n } else {\n typeArgs = `\"${prop.type}\"`;\n }\n\n return ` [\"${prop.name}\"] = ${typeArgs}`;\n}\n\n// function generatePropertyInitializer(prop: Property) {\n// let initializer = \"\";\n\n// if(prop.type === \"ref\") {\n// initializer = `new ${prop.childType}()`;\n\n// } else if(prop.type === \"array\") {\n// initializer = `new schema.ArraySchema()`;\n\n// } else if(prop.type === \"map\") {\n// initializer = `new schema.MapSchema()`;\n// }\n\n// return `this.${prop.name} = ${initializer}`;\n// }\n"]}
@@ -1,29 +1,8 @@
1
1
  "use strict";
2
- var __read = (this && this.__read) || function (o, n) {
3
- var m = typeof Symbol === "function" && o[Symbol.iterator];
4
- if (!m) return o;
5
- var i = m.call(o), r, ar = [], e;
6
- try {
7
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
- }
9
- catch (error) { e = { error: error }; }
10
- finally {
11
- try {
12
- if (r && !r.done && (m = i["return"])) m.call(i);
13
- }
14
- finally { if (e) throw e.error; }
15
- }
16
- return ar;
17
- };
18
- var __spreadArray = (this && this.__spreadArray) || function (to, from) {
19
- for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
20
- to[j] = from[i];
21
- return to;
22
- };
23
2
  Object.defineProperty(exports, "__esModule", { value: true });
24
3
  exports.generate = void 0;
25
- var types_1 = require("../types");
26
- var typeMaps = {
4
+ const types_1 = require("../types");
5
+ const typeMaps = {
27
6
  "string": "string",
28
7
  "number": "number",
29
8
  "boolean": "boolean",
@@ -38,88 +17,104 @@ var typeMaps = {
38
17
  "float32": "number",
39
18
  "float64": "number",
40
19
  };
41
- var distinct = function (value, index, self) { return self.indexOf(value) === index; };
20
+ const distinct = (value, index, self) => self.indexOf(value) === index;
42
21
  function generate(context, options) {
43
- return __spreadArray(__spreadArray([], __read(context.classes.map(function (structure) { return ({
44
- name: structure.name + ".ts",
45
- content: generateClass(structure, options.namespace, context.classes)
46
- }); }))), __read(context.interfaces.map(function (structure) { return ({
47
- name: structure.name + ".ts",
48
- content: generateInterface(structure, options.namespace, context.classes),
49
- }); })));
22
+ return [
23
+ ...context.classes.map(structure => ({
24
+ name: structure.name + ".ts",
25
+ content: generateClass(structure, options.namespace, context.classes)
26
+ })),
27
+ ...context.interfaces.map(structure => ({
28
+ name: structure.name + ".ts",
29
+ content: generateInterface(structure, options.namespace, context.classes),
30
+ }))
31
+ ];
50
32
  }
51
33
  exports.generate = generate;
52
34
  function generateClass(klass, namespace, allClasses) {
53
- var allRefs = [];
54
- klass.properties.forEach(function (property) {
55
- var type = property.type;
35
+ const allRefs = [];
36
+ klass.properties.forEach(property => {
37
+ let type = property.type;
56
38
  // keep all refs list
57
39
  if ((type === "ref" || type === "array" || type === "map" || type === "set")) {
58
40
  allRefs.push(property);
59
41
  }
60
42
  });
61
- return types_1.getCommentHeader() + "\n\nimport { Schema, type, ArraySchema, MapSchema, SetSchema, DataChange } from '@colyseus/schema';\n" + allRefs.
62
- filter(function (ref) { return ref.childType && typeMaps[ref.childType] === undefined; }).
63
- map(function (ref) { return ref.childType; }).
64
- concat(types_1.getInheritanceTree(klass, allClasses, false).map(function (klass) { return klass.name; })).
43
+ return `${(0, types_1.getCommentHeader)()}
44
+
45
+ import { Schema, type, ArraySchema, MapSchema, SetSchema, DataChange } from '@colyseus/schema';
46
+ ${allRefs.
47
+ filter(ref => ref.childType && typeMaps[ref.childType] === undefined).
48
+ map(ref => ref.childType).
49
+ concat((0, types_1.getInheritanceTree)(klass, allClasses, false).map(klass => klass.name)).
65
50
  filter(distinct).
66
- map(function (childType) { return "import { " + childType + " } from './" + childType + "'"; }).
67
- join("\n") + "\n\nexport class " + klass.name + " extends " + klass.extends + " {\n" + klass.properties.map(function (prop) { return " " + generateProperty(prop); }).join("\n") + "\n}\n";
51
+ map(childType => `import { ${childType} } from './${childType}'`).
52
+ join("\n")}
53
+
54
+ export class ${klass.name} extends ${klass.extends} {
55
+ ${klass.properties.map(prop => ` ${generateProperty(prop)}`).join("\n")}
56
+ }
57
+ `;
68
58
  }
69
59
  function generateProperty(prop) {
70
- var langType;
71
- var initializer = "";
72
- var typeArgs;
60
+ let langType;
61
+ let initializer = "";
62
+ let typeArgs;
73
63
  if (prop.childType) {
74
- var isUpcaseFirst = prop.childType.match(/^[A-Z]/);
64
+ const isUpcaseFirst = prop.childType.match(/^[A-Z]/);
75
65
  if (isUpcaseFirst) {
76
- typeArgs += ", " + prop.childType;
66
+ typeArgs += `, ${prop.childType}`;
77
67
  }
78
68
  else {
79
- typeArgs += ", \"" + prop.childType + "\"";
69
+ typeArgs += `, "${prop.childType}"`;
80
70
  }
81
71
  if (prop.type === "ref") {
82
- langType = "" + prop.childType;
83
- initializer = "new " + prop.childType + "()";
84
- typeArgs = "" + prop.childType;
72
+ langType = `${prop.childType}`;
73
+ initializer = `new ${prop.childType}()`;
74
+ typeArgs = `${prop.childType}`;
85
75
  }
86
76
  else if (prop.type === "array") {
87
77
  langType = (isUpcaseFirst)
88
- ? "ArraySchema<" + prop.childType + ">"
89
- : "ArraySchema<" + typeMaps[prop.childType] + ">";
90
- initializer = "new " + langType + "()";
78
+ ? `ArraySchema<${prop.childType}>`
79
+ : `ArraySchema<${typeMaps[prop.childType]}>`;
80
+ initializer = `new ${langType}()`;
91
81
  typeArgs = (isUpcaseFirst)
92
- ? "[ " + prop.childType + " ]"
93
- : "[ \"" + prop.childType + "\" ]";
82
+ ? `[ ${prop.childType} ]`
83
+ : `[ "${prop.childType}" ]`;
94
84
  }
95
85
  else if (prop.type === "map") {
96
86
  langType = (isUpcaseFirst)
97
- ? "MapSchema<" + prop.childType + ">"
98
- : "MapSchema<" + typeMaps[prop.childType] + ">";
99
- initializer = "new " + langType + "()";
87
+ ? `MapSchema<${prop.childType}>`
88
+ : `MapSchema<${typeMaps[prop.childType]}>`;
89
+ initializer = `new ${langType}()`;
100
90
  typeArgs = (isUpcaseFirst)
101
- ? "{ map: " + prop.childType + " }"
102
- : "{ map: \"" + prop.childType + "\" }";
91
+ ? `{ map: ${prop.childType} }`
92
+ : `{ map: "${prop.childType}" }`;
103
93
  }
104
94
  else if (prop.type === "set") {
105
95
  langType = (isUpcaseFirst)
106
- ? "SetSchema<" + prop.childType + ">"
107
- : "SetSchema<" + typeMaps[prop.childType] + ">";
108
- initializer = "new " + langType + "()";
96
+ ? `SetSchema<${prop.childType}>`
97
+ : `SetSchema<${typeMaps[prop.childType]}>`;
98
+ initializer = `new ${langType}()`;
109
99
  typeArgs = (isUpcaseFirst)
110
- ? "{ set: " + prop.childType + " }"
111
- : "{ set: \"" + prop.childType + "\" }";
100
+ ? `{ set: ${prop.childType} }`
101
+ : `{ set: "${prop.childType}" }`;
112
102
  }
113
103
  }
114
104
  else {
115
105
  langType = typeMaps[prop.type];
116
- typeArgs = "\"" + prop.type + "\"";
106
+ typeArgs = `"${prop.type}"`;
117
107
  }
118
108
  // TS1263: "Declarations with initializers cannot also have definite assignment assertions"
119
- var definiteAssertion = initializer ? "" : "!";
120
- return "@type(" + typeArgs + ") public " + prop.name + definiteAssertion + ": " + langType + ((initializer) ? " = " + initializer : "") + ";";
109
+ const definiteAssertion = initializer ? "" : "!";
110
+ return `@type(${typeArgs}) public ${prop.name}${definiteAssertion}: ${langType}${(initializer) ? ` = ${initializer}` : ""};`;
121
111
  }
122
112
  function generateInterface(structure, namespace, allClasses) {
123
- return types_1.getCommentHeader() + "\n\nexport interface " + structure.name + " {\n" + structure.properties.map(function (prop) { return " " + prop.name + ": " + prop.type + ";"; }).join("\n") + "\n}\n";
113
+ return `${(0, types_1.getCommentHeader)()}
114
+
115
+ export interface ${structure.name} {
116
+ ${structure.properties.map(prop => ` ${prop.name}: ${prop.type};`).join("\n")}
117
+ }
118
+ `;
124
119
  }
125
120
  //# sourceMappingURL=ts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ts.js","sourceRoot":"","sources":["../../../src/codegen/languages/ts.ts"],"names":[],"mappings":"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","sourcesContent":["import { Class, Property, File, getCommentHeader, getInheritanceTree, Context, Interface } from \"../types\";\nimport { GenerateOptions } from \"../api\";\n\nconst typeMaps = {\n \"string\": \"string\",\n \"number\": \"number\",\n \"boolean\": \"boolean\",\n \"int8\": \"number\",\n \"uint8\": \"number\",\n \"int16\": \"number\",\n \"uint16\": \"number\",\n \"int32\": \"number\",\n \"uint32\": \"number\",\n \"int64\": \"number\",\n \"uint64\": \"number\",\n \"float32\": \"number\",\n \"float64\": \"number\",\n}\n\nconst distinct = (value, index, self) => self.indexOf(value) === index;\n\nexport function generate (context: Context, options: GenerateOptions): File[] {\n return [\n ...context.classes.map(structure => ({\n name: structure.name + \".ts\",\n content: generateClass(structure, options.namespace, context.classes)\n })),\n ...context.interfaces.map(structure => ({\n name: structure.name + \".ts\",\n content: generateInterface(structure, options.namespace, context.classes),\n }))\n ];\n}\n\nfunction generateClass(klass: Class, namespace: string, allClasses: Class[]) {\n const allRefs: Property[] = [];\n klass.properties.forEach(property => {\n let type = property.type;\n\n // keep all refs list\n if ((type === \"ref\" || type === \"array\" || type === \"map\" || type === \"set\")) {\n allRefs.push(property);\n }\n });\n\n return `${getCommentHeader()}\n\nimport { Schema, type, ArraySchema, MapSchema, SetSchema, DataChange } from '@colyseus/schema';\n${allRefs.\n filter(ref => ref.childType && typeMaps[ref.childType] === undefined).\n map(ref => ref.childType).\n concat(getInheritanceTree(klass, allClasses, false).map(klass => klass.name)).\n filter(distinct).\n map(childType => `import { ${childType} } from './${childType}'`).\n join(\"\\n\")}\n\nexport class ${klass.name} extends ${klass.extends} {\n${klass.properties.map(prop => ` ${generateProperty(prop)}`).join(\"\\n\")}\n}\n`;\n}\n\nfunction generateProperty(prop: Property) {\n let langType: string;\n let initializer = \"\";\n let typeArgs: string;\n\n if (prop.childType) {\n const isUpcaseFirst = prop.childType.match(/^[A-Z]/);\n\n if (isUpcaseFirst) {\n typeArgs += `, ${prop.childType}`;\n\n } else {\n typeArgs += `, \"${prop.childType}\"`;\n }\n\n if(prop.type === \"ref\") {\n langType = `${prop.childType}`;\n initializer = `new ${prop.childType}()`;\n typeArgs = `${prop.childType}`;\n\n } else if(prop.type === \"array\") {\n langType = (isUpcaseFirst)\n ? `ArraySchema<${prop.childType}>`\n : `ArraySchema<${typeMaps[prop.childType]}>`;\n initializer = `new ${langType}()`;\n typeArgs = (isUpcaseFirst)\n ? `[ ${prop.childType} ]`\n : `[ \"${prop.childType}\" ]`;\n\n } else if(prop.type === \"map\") {\n langType = (isUpcaseFirst)\n ? `MapSchema<${prop.childType}>`\n : `MapSchema<${typeMaps[prop.childType]}>`;\n initializer = `new ${langType}()`;\n typeArgs = (isUpcaseFirst)\n ? `{ map: ${prop.childType} }`\n : `{ map: \"${prop.childType}\" }`;\n } else if (prop.type === \"set\") {\n langType = (isUpcaseFirst)\n ? `SetSchema<${prop.childType}>`\n : `SetSchema<${typeMaps[prop.childType]}>`;\n initializer = `new ${langType}()`;\n typeArgs = (isUpcaseFirst)\n ? `{ set: ${prop.childType} }`\n : `{ set: \"${prop.childType}\" }`;\n }\n\n } else {\n langType = typeMaps[prop.type];\n typeArgs = `\"${prop.type}\"`;\n }\n\n // TS1263: \"Declarations with initializers cannot also have definite assignment assertions\"\n const definiteAssertion = initializer ? \"\" : \"!\";\n\n return `@type(${typeArgs}) public ${prop.name}${definiteAssertion}: ${langType}${(initializer) ? ` = ${initializer}` : \"\"};`\n}\n\n\nfunction generateInterface(structure: Interface, namespace: string, allClasses: Class[]) {\n return `${getCommentHeader()}\n\nexport interface ${structure.name} {\n${structure.properties.map(prop => ` ${prop.name}: ${prop.type};`).join(\"\\n\")}\n}\n`;\n}\n"]}
1
+ {"version":3,"file":"ts.js","sourceRoot":"","sources":["../../../src/codegen/languages/ts.ts"],"names":[],"mappings":"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","sourcesContent":["import { Class, Property, File, getCommentHeader, getInheritanceTree, Context, Interface } from \"../types\";\nimport { GenerateOptions } from \"../api\";\n\nconst typeMaps = {\n \"string\": \"string\",\n \"number\": \"number\",\n \"boolean\": \"boolean\",\n \"int8\": \"number\",\n \"uint8\": \"number\",\n \"int16\": \"number\",\n \"uint16\": \"number\",\n \"int32\": \"number\",\n \"uint32\": \"number\",\n \"int64\": \"number\",\n \"uint64\": \"number\",\n \"float32\": \"number\",\n \"float64\": \"number\",\n}\n\nconst distinct = (value, index, self) => self.indexOf(value) === index;\n\nexport function generate (context: Context, options: GenerateOptions): File[] {\n return [\n ...context.classes.map(structure => ({\n name: structure.name + \".ts\",\n content: generateClass(structure, options.namespace, context.classes)\n })),\n ...context.interfaces.map(structure => ({\n name: structure.name + \".ts\",\n content: generateInterface(structure, options.namespace, context.classes),\n }))\n ];\n}\n\nfunction generateClass(klass: Class, namespace: string, allClasses: Class[]) {\n const allRefs: Property[] = [];\n klass.properties.forEach(property => {\n let type = property.type;\n\n // keep all refs list\n if ((type === \"ref\" || type === \"array\" || type === \"map\" || type === \"set\")) {\n allRefs.push(property);\n }\n });\n\n return `${getCommentHeader()}\n\nimport { Schema, type, ArraySchema, MapSchema, SetSchema, DataChange } from '@colyseus/schema';\n${allRefs.\n filter(ref => ref.childType && typeMaps[ref.childType] === undefined).\n map(ref => ref.childType).\n concat(getInheritanceTree(klass, allClasses, false).map(klass => klass.name)).\n filter(distinct).\n map(childType => `import { ${childType} } from './${childType}'`).\n join(\"\\n\")}\n\nexport class ${klass.name} extends ${klass.extends} {\n${klass.properties.map(prop => ` ${generateProperty(prop)}`).join(\"\\n\")}\n}\n`;\n}\n\nfunction generateProperty(prop: Property) {\n let langType: string;\n let initializer = \"\";\n let typeArgs: string;\n\n if (prop.childType) {\n const isUpcaseFirst = prop.childType.match(/^[A-Z]/);\n\n if (isUpcaseFirst) {\n typeArgs += `, ${prop.childType}`;\n\n } else {\n typeArgs += `, \"${prop.childType}\"`;\n }\n\n if(prop.type === \"ref\") {\n langType = `${prop.childType}`;\n initializer = `new ${prop.childType}()`;\n typeArgs = `${prop.childType}`;\n\n } else if(prop.type === \"array\") {\n langType = (isUpcaseFirst)\n ? `ArraySchema<${prop.childType}>`\n : `ArraySchema<${typeMaps[prop.childType]}>`;\n initializer = `new ${langType}()`;\n typeArgs = (isUpcaseFirst)\n ? `[ ${prop.childType} ]`\n : `[ \"${prop.childType}\" ]`;\n\n } else if(prop.type === \"map\") {\n langType = (isUpcaseFirst)\n ? `MapSchema<${prop.childType}>`\n : `MapSchema<${typeMaps[prop.childType]}>`;\n initializer = `new ${langType}()`;\n typeArgs = (isUpcaseFirst)\n ? `{ map: ${prop.childType} }`\n : `{ map: \"${prop.childType}\" }`;\n } else if (prop.type === \"set\") {\n langType = (isUpcaseFirst)\n ? `SetSchema<${prop.childType}>`\n : `SetSchema<${typeMaps[prop.childType]}>`;\n initializer = `new ${langType}()`;\n typeArgs = (isUpcaseFirst)\n ? `{ set: ${prop.childType} }`\n : `{ set: \"${prop.childType}\" }`;\n }\n\n } else {\n langType = typeMaps[prop.type];\n typeArgs = `\"${prop.type}\"`;\n }\n\n // TS1263: \"Declarations with initializers cannot also have definite assignment assertions\"\n const definiteAssertion = initializer ? \"\" : \"!\";\n\n return `@type(${typeArgs}) public ${prop.name}${definiteAssertion}: ${langType}${(initializer) ? ` = ${initializer}` : \"\"};`\n}\n\n\nfunction generateInterface(structure: Interface, namespace: string, allClasses: Class[]) {\n return `${getCommentHeader()}\n\nexport interface ${structure.name} {\n${structure.properties.map(prop => ` ${prop.name}: ${prop.type};`).join(\"\\n\")}\n}\n`;\n}\n"]}
@@ -1,5 +1,13 @@
1
- import { Class, Interface, Context } from "./types";
1
+ import * as ts from "typescript";
2
+ import { Class, Interface, Context, Enum } from "./types";
2
3
  export declare function parseFiles(fileNames: string[], decoratorName?: string, context?: Context): {
3
4
  classes: Class[];
4
5
  interfaces: Interface[];
6
+ enums: Enum[];
5
7
  };
8
+ /**
9
+ * TypeScript 4.8+ has introduced a change on how to access decorators.
10
+ * - https://github.com/microsoft/TypeScript/pull/49089
11
+ * - https://devblogs.microsoft.com/typescript/announcing-typescript-4-8/#decorators-are-placed-on-modifiers-on-typescripts-syntax-trees
12
+ */
13
+ export declare function getDecorators(node: ts.Node | null | undefined): undefined | ts.Decorator[];