@coolon/i18n-resource-generator 1.0.1

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 (129) hide show
  1. package/.editorconfig +15 -0
  2. package/CHANGELOG.md +6 -0
  3. package/LICENSE +21 -0
  4. package/README.md +3 -0
  5. package/build/main/index.d.ts +1 -0
  6. package/build/main/index.js +7 -0
  7. package/build/main/lib/arg.class.d.ts +11 -0
  8. package/build/main/lib/arg.class.js +27 -0
  9. package/build/main/lib/arguments.class.d.ts +20 -0
  10. package/build/main/lib/arguments.class.js +55 -0
  11. package/build/main/lib/ast/abstractContainerElement.d.ts +9 -0
  12. package/build/main/lib/ast/abstractContainerElement.js +31 -0
  13. package/build/main/lib/ast/abstractElement.d.ts +16 -0
  14. package/build/main/lib/ast/abstractElement.js +39 -0
  15. package/build/main/lib/ast/classDef.class.d.ts +9 -0
  16. package/build/main/lib/ast/classDef.class.js +25 -0
  17. package/build/main/lib/ast/containerElement.class.d.ts +17 -0
  18. package/build/main/lib/ast/containerElement.class.js +3 -0
  19. package/build/main/lib/ast/element.class.d.ts +12 -0
  20. package/build/main/lib/ast/element.class.js +3 -0
  21. package/build/main/lib/ast/functionDef.class.d.ts +10 -0
  22. package/build/main/lib/ast/functionDef.class.js +16 -0
  23. package/build/main/lib/ast/interfaceDef.class.d.ts +9 -0
  24. package/build/main/lib/ast/interfaceDef.class.js +26 -0
  25. package/build/main/lib/ast/moduleDef.class.d.ts +8 -0
  26. package/build/main/lib/ast/moduleDef.class.js +42 -0
  27. package/build/main/lib/ast/namespaceDef.class.d.ts +18 -0
  28. package/build/main/lib/ast/namespaceDef.class.js +63 -0
  29. package/build/main/lib/ast/objectDef.class.d.ts +24 -0
  30. package/build/main/lib/ast/objectDef.class.js +69 -0
  31. package/build/main/lib/ast/tempContainer.class.d.ts +4 -0
  32. package/build/main/lib/ast/tempContainer.class.js +12 -0
  33. package/build/main/lib/ast/typeDef.class.d.ts +7 -0
  34. package/build/main/lib/ast/typeDef.class.js +14 -0
  35. package/build/main/lib/bin/cli.d.ts +2 -0
  36. package/build/main/lib/bin/cli.js +54 -0
  37. package/build/main/lib/constructor.class.d.ts +3 -0
  38. package/build/main/lib/constructor.class.js +3 -0
  39. package/build/main/lib/customTypeArrayNode.class.d.ts +10 -0
  40. package/build/main/lib/customTypeArrayNode.class.js +25 -0
  41. package/build/main/lib/customTypeNode.class.d.ts +23 -0
  42. package/build/main/lib/customTypeNode.class.js +71 -0
  43. package/build/main/lib/enumNode.class.d.ts +10 -0
  44. package/build/main/lib/enumNode.class.js +108 -0
  45. package/build/main/lib/i18nGenerator.d.ts +18 -0
  46. package/build/main/lib/i18nGenerator.js +135 -0
  47. package/build/main/lib/i18nNode.class.d.ts +43 -0
  48. package/build/main/lib/i18nNode.class.js +145 -0
  49. package/build/main/lib/index.d.ts +31 -0
  50. package/build/main/lib/index.js +34 -0
  51. package/build/main/lib/languageNode.class.d.ts +7 -0
  52. package/build/main/lib/languageNode.class.js +16 -0
  53. package/build/main/lib/namespaceNode.class.d.ts +6 -0
  54. package/build/main/lib/namespaceNode.class.js +16 -0
  55. package/build/main/lib/rootNode.class.d.ts +15 -0
  56. package/build/main/lib/rootNode.class.js +46 -0
  57. package/build/main/lib/stringUtil.d.ts +1 -0
  58. package/build/main/lib/stringUtil.js +7 -0
  59. package/build/main/lib/textArrayNode.class.d.ts +9 -0
  60. package/build/main/lib/textArrayNode.class.js +48 -0
  61. package/build/main/lib/textNode.class.d.ts +17 -0
  62. package/build/main/lib/textNode.class.js +117 -0
  63. package/build/main/lib/valueNode.class.d.ts +12 -0
  64. package/build/main/lib/valueNode.class.js +47 -0
  65. package/build/main/lib/writer.class.d.ts +10 -0
  66. package/build/main/lib/writer.class.js +29 -0
  67. package/build/module/index.d.ts +1 -0
  68. package/build/module/index.js +2 -0
  69. package/build/module/lib/arg.class.d.ts +11 -0
  70. package/build/module/lib/arg.class.js +24 -0
  71. package/build/module/lib/arguments.class.d.ts +20 -0
  72. package/build/module/lib/arguments.class.js +52 -0
  73. package/build/module/lib/ast/abstractContainerElement.d.ts +9 -0
  74. package/build/module/lib/ast/abstractContainerElement.js +21 -0
  75. package/build/module/lib/ast/abstractElement.d.ts +16 -0
  76. package/build/module/lib/ast/abstractElement.js +36 -0
  77. package/build/module/lib/ast/classDef.class.d.ts +9 -0
  78. package/build/module/lib/ast/classDef.class.js +22 -0
  79. package/build/module/lib/ast/containerElement.class.d.ts +17 -0
  80. package/build/module/lib/ast/containerElement.class.js +1 -0
  81. package/build/module/lib/ast/element.class.d.ts +12 -0
  82. package/build/module/lib/ast/element.class.js +1 -0
  83. package/build/module/lib/ast/functionDef.class.d.ts +10 -0
  84. package/build/module/lib/ast/functionDef.class.js +13 -0
  85. package/build/module/lib/ast/interfaceDef.class.d.ts +9 -0
  86. package/build/module/lib/ast/interfaceDef.class.js +23 -0
  87. package/build/module/lib/ast/moduleDef.class.d.ts +8 -0
  88. package/build/module/lib/ast/moduleDef.class.js +39 -0
  89. package/build/module/lib/ast/namespaceDef.class.d.ts +18 -0
  90. package/build/module/lib/ast/namespaceDef.class.js +60 -0
  91. package/build/module/lib/ast/objectDef.class.d.ts +24 -0
  92. package/build/module/lib/ast/objectDef.class.js +59 -0
  93. package/build/module/lib/ast/tempContainer.class.d.ts +4 -0
  94. package/build/module/lib/ast/tempContainer.class.js +9 -0
  95. package/build/module/lib/ast/typeDef.class.d.ts +7 -0
  96. package/build/module/lib/ast/typeDef.class.js +11 -0
  97. package/build/module/lib/bin/cli.d.ts +2 -0
  98. package/build/module/lib/bin/cli.js +42 -0
  99. package/build/module/lib/constructor.class.d.ts +3 -0
  100. package/build/module/lib/constructor.class.js +1 -0
  101. package/build/module/lib/customTypeArrayNode.class.d.ts +10 -0
  102. package/build/module/lib/customTypeArrayNode.class.js +22 -0
  103. package/build/module/lib/customTypeNode.class.d.ts +23 -0
  104. package/build/module/lib/customTypeNode.class.js +68 -0
  105. package/build/module/lib/enumNode.class.d.ts +10 -0
  106. package/build/module/lib/enumNode.class.js +105 -0
  107. package/build/module/lib/i18nGenerator.d.ts +18 -0
  108. package/build/module/lib/i18nGenerator.js +124 -0
  109. package/build/module/lib/i18nNode.class.d.ts +43 -0
  110. package/build/module/lib/i18nNode.class.js +132 -0
  111. package/build/module/lib/index.d.ts +31 -0
  112. package/build/module/lib/index.js +29 -0
  113. package/build/module/lib/languageNode.class.d.ts +7 -0
  114. package/build/module/lib/languageNode.class.js +13 -0
  115. package/build/module/lib/namespaceNode.class.d.ts +6 -0
  116. package/build/module/lib/namespaceNode.class.js +13 -0
  117. package/build/module/lib/rootNode.class.d.ts +15 -0
  118. package/build/module/lib/rootNode.class.js +43 -0
  119. package/build/module/lib/stringUtil.d.ts +1 -0
  120. package/build/module/lib/stringUtil.js +4 -0
  121. package/build/module/lib/textArrayNode.class.d.ts +9 -0
  122. package/build/module/lib/textArrayNode.class.js +38 -0
  123. package/build/module/lib/textNode.class.d.ts +17 -0
  124. package/build/module/lib/textNode.class.js +104 -0
  125. package/build/module/lib/valueNode.class.d.ts +12 -0
  126. package/build/module/lib/valueNode.class.js +37 -0
  127. package/build/module/lib/writer.class.d.ts +10 -0
  128. package/build/module/lib/writer.class.js +26 -0
  129. package/package.json +122 -0
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __importStar = (this && this.__importStar) || function (mod) {
3
+ if (mod && mod.__esModule) return mod;
4
+ var result = {};
5
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
6
+ result["default"] = mod;
7
+ return result;
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const _ = __importStar(require("lodash"));
11
+ const abstractContainerElement_1 = require("./abstractContainerElement");
12
+ const namespaceDef_class_1 = require("./namespaceDef.class");
13
+ const functionDef_class_1 = require("./functionDef.class");
14
+ const stringUtil_1 = require("../stringUtil");
15
+ class ObjectDef extends abstractContainerElement_1.AbstractContainerElement {
16
+ constructor(name) {
17
+ super(name);
18
+ this._typeName = null;
19
+ }
20
+ asType(typeName) {
21
+ this._typeName = typeName;
22
+ return this;
23
+ }
24
+ typeName() {
25
+ return this._typeName;
26
+ }
27
+ nestedContainer(name, configure) {
28
+ this.addElement(new ObjectDef(name), configure);
29
+ }
30
+ defineInterface(name, configure) {
31
+ return this.nearestNamespace().defineInterface(this.fqName(name), configure);
32
+ }
33
+ defineClass(name, args, configure) {
34
+ return this.nearestNamespace().defineClass(this.fqName(name), null, configure);
35
+ }
36
+ defineType(name, value) {
37
+ return this.nearestNamespace().defineType(name, value);
38
+ }
39
+ createObject(name, configure) {
40
+ return this.addElement(new ObjectDef(name), configure);
41
+ }
42
+ createFunction(name, args, returnType, bodyContent) {
43
+ this.addElement(new functionDef_class_1.FunctionDef(name, args, returnType, bodyContent));
44
+ }
45
+ nearestNamespace() {
46
+ return _.findLast(this.pathToRoot(), element => element instanceof namespaceDef_class_1.NamespaceDef);
47
+ }
48
+ fqName(rawName) {
49
+ const namespaceDef = this.nearestNamespace();
50
+ return this.pathTo(namespaceDef).slice(1, -1).map(e => stringUtil_1.capitalize(e.name)).join('') + rawName;
51
+ }
52
+ asTypeDecl() {
53
+ return this.typeName() ? ` as ${this.typeName()}` : '';
54
+ }
55
+ writeBody(writer) {
56
+ this.forEach(functionDef_class_1.FunctionDef, def => {
57
+ writer.println(`${def.name}(${def.args.asParameterDeclaration()}):${def.returnType} {`);
58
+ writer.indent(writer => def.writeBody(writer));
59
+ writer.println(`},`);
60
+ });
61
+ this.forEach(ObjectDef, def => {
62
+ writer.println(`${def.name}: {`);
63
+ writer.indent(writer => def.writeBody(writer));
64
+ writer.println(`}${def.asTypeDecl()},`);
65
+ });
66
+ }
67
+ }
68
+ exports.ObjectDef = ObjectDef;
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0RGVmLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9hc3Qvb2JqZWN0RGVmLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDBDQUE0QjtBQUk1Qix5RUFBb0U7QUFJcEUsNkRBQWtEO0FBQ2xELDJEQUFnRDtBQUNoRCw4Q0FBeUM7QUFHekMsTUFBYSxTQUFVLFNBQVEsbURBQXdCO0lBSW5ELFlBQVksSUFBVztRQUNuQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFIUixjQUFTLEdBQVUsSUFBSSxDQUFDO0lBSWhDLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBZTtRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsUUFBUTtRQUNKLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsZUFBZSxDQUFDLElBQVksRUFBRSxTQUE4QztRQUN4RSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQ25ELENBQUM7SUFFRCxlQUFlLENBQUMsSUFBWSxFQUFFLFNBQXNDO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZLEVBQUUsSUFBZSxFQUFFLFNBQWtDO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBWSxFQUFFLEtBQVk7UUFDakMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxZQUFZLENBQUMsSUFBWSxFQUFFLFNBQW1DO1FBQzFELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVksRUFBRSxJQUFlLEVBQUUsVUFBa0IsRUFBRSxXQUFrQztRQUNoRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksK0JBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFBO0lBQ3pFLENBQUM7SUFFUyxnQkFBZ0I7UUFDdEIsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sWUFBWSxpQ0FBWSxDQUFpQixDQUFDO0lBQ3JHLENBQUM7SUFFUyxNQUFNLENBQUMsT0FBYztRQUMzQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHVCQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUNqRyxDQUFDO0lBRUQsVUFBVTtRQUNOLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFjO1FBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsK0JBQVcsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUM1QixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEtBQUssR0FBRyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUM7WUFDeEYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDL0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0NBRUo7QUFwRUQsOEJBb0VDIn0=
@@ -0,0 +1,4 @@
1
+ import { ObjectDef } from "./objectDef.class";
2
+ export declare class TempContainer extends ObjectDef {
3
+ constructor();
4
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const objectDef_class_1 = require("./objectDef.class");
4
+ // Exists to create structures that don't automatically get
5
+ // written out by their parents.
6
+ class TempContainer extends objectDef_class_1.ObjectDef {
7
+ constructor() {
8
+ super('!!temp!!');
9
+ }
10
+ }
11
+ exports.TempContainer = TempContainer;
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcENvbnRhaW5lci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYXN0L3RlbXBDb250YWluZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSx1REFBNEM7QUFFNUMsMkRBQTJEO0FBQzNELGdDQUFnQztBQUNoQyxNQUFhLGFBQWMsU0FBUSwyQkFBUztJQUN4QztRQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QixDQUFDO0NBQ0o7QUFKRCxzQ0FJQyJ9
@@ -0,0 +1,7 @@
1
+ import { Writer } from "../writer.class";
2
+ import { AbstractElement } from "./abstractElement";
3
+ export declare class TypeDef extends AbstractElement {
4
+ readonly value: string;
5
+ constructor(name: string, value: string);
6
+ writeBody(writer: Writer): void;
7
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const abstractElement_1 = require("./abstractElement");
4
+ class TypeDef extends abstractElement_1.AbstractElement {
5
+ constructor(name, value) {
6
+ super(name);
7
+ this.value = value;
8
+ }
9
+ writeBody(writer) {
10
+ // noop
11
+ }
12
+ }
13
+ exports.TypeDef = TypeDef;
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZURlZi5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYXN0L3R5cGVEZWYuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSx1REFBa0Q7QUFFbEQsTUFBYSxPQUFRLFNBQVEsaUNBQWU7SUFFeEMsWUFBWSxJQUFZLEVBQWtCLEtBQVk7UUFDbEQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRDBCLFVBQUssR0FBTCxLQUFLLENBQU87SUFFdEQsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFjO1FBQ3BCLE9BQU87SUFDWCxDQUFDO0NBQ0o7QUFURCwwQkFTQyJ9
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importStar = (this && this.__importStar) || function (mod) {
4
+ if (mod && mod.__esModule) return mod;
5
+ var result = {};
6
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
7
+ result["default"] = mod;
8
+ return result;
9
+ };
10
+ var __importDefault = (this && this.__importDefault) || function (mod) {
11
+ return (mod && mod.__esModule) ? mod : { "default": mod };
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ const fs = __importStar(require("fs"));
15
+ const commander_1 = __importDefault(require("commander"));
16
+ const glob_1 = __importDefault(require("glob"));
17
+ const i18nGenerator_1 = require("../i18nGenerator");
18
+ let globPattern;
19
+ let outputFile;
20
+ commander_1.default
21
+ .version('0.1.0')
22
+ .arguments('<glob> <out>')
23
+ .action(function (glob, out) {
24
+ globPattern = glob;
25
+ outputFile = out;
26
+ })
27
+ .parse(process.argv);
28
+ if (typeof globPattern === 'undefined') {
29
+ console.error('no glob pattern specified!');
30
+ process.exit(1);
31
+ }
32
+ if (typeof outputFile === 'undefined') {
33
+ console.error('no output file specified!');
34
+ process.exit(1);
35
+ }
36
+ glob_1.default(`${globPattern}`, {}, function (error, files) {
37
+ // files is an array of filenames.
38
+ // If the `nonull` option is set, and nothing
39
+ // was found, then files is ["**/*.js"]
40
+ // er is an error object or null.
41
+ if (error) {
42
+ console.error(error);
43
+ process.exit(1);
44
+ }
45
+ if (files.length < 1) {
46
+ console.log('no files found.');
47
+ }
48
+ else {
49
+ const gen = new i18nGenerator_1.I18nGenerator();
50
+ files.forEach(f => gen.readFile(f));
51
+ fs.writeFileSync(outputFile, gen.toString());
52
+ }
53
+ });
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9iaW4vY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFDQSx1Q0FBeUI7QUFDekIsMERBQWdDO0FBQ2hDLGdEQUF3QjtBQUV4QixvREFBK0M7QUFFL0MsSUFBSSxXQUFXLENBQUM7QUFDaEIsSUFBSSxVQUFVLENBQUM7QUFFZixtQkFBTztLQUNKLE9BQU8sQ0FBQyxPQUFPLENBQUM7S0FDaEIsU0FBUyxDQUFDLGNBQWMsQ0FBQztLQUN6QixNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsR0FBRztJQUN6QixXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ25CLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0tBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUV2QixJQUFJLE9BQU8sV0FBVyxLQUFLLFdBQVcsRUFBRTtJQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDNUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqQjtBQUVELElBQUksT0FBTyxVQUFVLEtBQUssV0FBVyxFQUFFO0lBQ3JDLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pCO0FBRUQsY0FBSSxDQUFDLEdBQUcsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsS0FBSyxFQUFFLEtBQUs7SUFDL0Msa0NBQWtDO0lBQ2xDLDZDQUE2QztJQUM3Qyx1Q0FBdUM7SUFDdkMsaUNBQWlDO0lBQ2pDLElBQUksS0FBSyxFQUFFO1FBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pCO0lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUE7S0FDL0I7U0FBTTtRQUNMLE1BQU0sR0FBRyxHQUFHLElBQUksNkJBQWEsRUFBRSxDQUFDO1FBQ2hDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7S0FDOUM7QUFDSCxDQUFDLENBQUMsQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ export declare type Constructor<T> = {
2
+ new (...args: any[]): T;
3
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3IuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbnN0cnVjdG9yLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,10 @@
1
+ import { ContainerElement } from "./ast/containerElement.class";
2
+ import { Constructor } from "./constructor.class";
3
+ import { I18nNode } from './i18nNode.class';
4
+ export declare class CustomTypeArrayNode extends I18nNode {
5
+ private customType;
6
+ static matches(yamlData: any): boolean;
7
+ parse(container: any): any;
8
+ protected parseEntry<T extends I18nNode>(name: string, data: any, defaultNodeType: Constructor<T>): I18nNode;
9
+ compile(parent: ContainerElement): void;
10
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const customTypeNode_class_1 = require("./customTypeNode.class");
4
+ const i18nNode_class_1 = require("./i18nNode.class");
5
+ class CustomTypeArrayNode extends i18nNode_class_1.I18nNode {
6
+ static matches(yamlData) {
7
+ return yamlData && yamlData['constructor'] && yamlData['constructor'].name == 'CustomTypeArrayContainer';
8
+ }
9
+ parse(container) {
10
+ this.customType = container['customType'];
11
+ return super.parse(container['content']);
12
+ }
13
+ parseEntry(name, data, defaultNodeType) {
14
+ return super.parseEntry(name, { customType: this.customType, content: data }, customTypeNode_class_1.CustomTypeNode);
15
+ }
16
+ compile(parent) {
17
+ parent.nestedContainer(this.namespaceName, namespace => {
18
+ this.eachChild(child => {
19
+ child.compile(namespace);
20
+ });
21
+ });
22
+ }
23
+ }
24
+ exports.CustomTypeArrayNode = CustomTypeArrayNode;
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tVHlwZUFycmF5Tm9kZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY3VzdG9tVHlwZUFycmF5Tm9kZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGlFQUFzRDtBQUV0RCxxREFBMEM7QUFHMUMsTUFBYSxtQkFBb0IsU0FBUSx5QkFBUTtJQUcvQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQWE7UUFDMUIsT0FBTyxRQUFRLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLElBQUksMEJBQTBCLENBQUE7SUFDMUcsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFjO1FBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBZSxDQUFDO1FBQ3hELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRVMsVUFBVSxDQUFxQixJQUFZLEVBQUUsSUFBUyxFQUFFLGVBQStCO1FBQy9GLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLEVBQUUscUNBQWMsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxPQUFPLENBQUMsTUFBd0I7UUFDOUIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3JCLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FFRjtBQXhCRCxrREF3QkMifQ==
@@ -0,0 +1,23 @@
1
+ import { I18nNode } from "./i18nNode.class";
2
+ import { TextNode } from "./textNode.class";
3
+ import { TextArrayNode } from "./textArrayNode.class";
4
+ import { ContainerElement } from "./ast/containerElement.class";
5
+ import { Constructor } from "./constructor.class";
6
+ declare class CustomTextNode extends TextNode {
7
+ static matches(yamlData: any): boolean;
8
+ compile(container: ContainerElement): void;
9
+ }
10
+ declare class CustomTextArrayNode extends TextArrayNode {
11
+ static matches(yamlData: any): boolean;
12
+ compile(container: ContainerElement): void;
13
+ createFunctionBody(out: any): void;
14
+ }
15
+ export declare class CustomTypeNode extends I18nNode {
16
+ private customType;
17
+ static matches(yamlData: any): boolean;
18
+ supportedChildNodeTypes(): (typeof CustomTextArrayNode | typeof CustomTextNode)[];
19
+ parse(container: any): void;
20
+ protected parseEntry<T extends I18nNode>(name: string, data: any, defaultNodeType: Constructor<T>): I18nNode;
21
+ compile(parent: ContainerElement): any;
22
+ }
23
+ export {};
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const i18nNode_class_1 = require("./i18nNode.class");
4
+ const textNode_class_1 = require("./textNode.class");
5
+ const textArrayNode_class_1 = require("./textArrayNode.class");
6
+ const arguments_class_1 = require("./arguments.class");
7
+ const objectDef_class_1 = require("./ast/objectDef.class");
8
+ class CustomTextNode extends textNode_class_1.TextNode {
9
+ static matches(yamlData) {
10
+ return textNode_class_1.TextNode.matches(yamlData);
11
+ }
12
+ compile(container) {
13
+ // we get our args from our outer function.
14
+ container.createFunction(this.javaScriptName, arguments_class_1.Arguments.empty(), 'string', out => {
15
+ this.createFunctionBody(out);
16
+ });
17
+ }
18
+ }
19
+ class CustomTextArrayNode extends textArrayNode_class_1.TextArrayNode {
20
+ static matches(yamlData) {
21
+ return textArrayNode_class_1.TextArrayNode.matches(yamlData);
22
+ }
23
+ compile(container) {
24
+ container.createFunction(this.javaScriptName, arguments_class_1.Arguments.empty(), 'string[]', out => {
25
+ this.createFunctionBody(out);
26
+ });
27
+ }
28
+ createFunctionBody(out) {
29
+ out.println(`return [`);
30
+ this.eachChild(node => {
31
+ out.indent(out => {
32
+ out.println(`function() {`); // we get our args from our outer function.
33
+ out.indent(out => node.createFunctionBody(out));
34
+ out.println(`}(),`);
35
+ });
36
+ });
37
+ out.println(`];`);
38
+ }
39
+ }
40
+ class CustomTypeNode extends i18nNode_class_1.I18nNode {
41
+ static matches(yamlData) {
42
+ return yamlData && yamlData['constructor'] && yamlData['constructor'].name == 'CustomTypeContainer';
43
+ }
44
+ supportedChildNodeTypes() {
45
+ return [CustomTextArrayNode, CustomTextNode];
46
+ }
47
+ parse(container) {
48
+ this.customType = container['customType'];
49
+ super.parse(container['content']);
50
+ this.eachChild(child => this.getArgs().merge(child.getArgs()));
51
+ }
52
+ parseEntry(name, data, defaultNodeType) {
53
+ // console.log(defaultNodeType);
54
+ return super.parseEntry(name, data, defaultNodeType);
55
+ }
56
+ compile(parent) {
57
+ const tempContainer = new objectDef_class_1.ObjectDef('!temp!');
58
+ this.eachChild(child => {
59
+ child.compile(tempContainer);
60
+ });
61
+ parent.createFunction(this.javaScriptName, this.getArgs(), this.customType.className, body => {
62
+ body.println('return {');
63
+ body.indent(out => {
64
+ tempContainer.writeBody(out);
65
+ });
66
+ body.println('}');
67
+ });
68
+ }
69
+ }
70
+ exports.CustomTypeNode = CustomTypeNode;
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tVHlwZU5vZGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2N1c3RvbVR5cGVOb2RlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscURBQTJEO0FBQzNELHFEQUEwQztBQUMxQywrREFBb0Q7QUFJcEQsdURBQTRDO0FBRTVDLDJEQUFnRDtBQUdoRCxNQUFNLGNBQWUsU0FBUSx5QkFBUTtJQUVqQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQWE7UUFDeEIsT0FBTyx5QkFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRUQsT0FBTyxDQUFDLFNBQTJCO1FBQy9CLDJDQUEyQztRQUMzQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsMkJBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDN0UsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBRUQsTUFBTSxtQkFBb0IsU0FBUSxtQ0FBYTtJQUUzQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQWE7UUFDeEIsT0FBTyxtQ0FBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUMxQyxDQUFDO0lBRUQsT0FBTyxDQUFDLFNBQTJCO1FBQy9CLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSwyQkFBUyxDQUFDLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUMvRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBRztRQUNsQixHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxD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
@@ -0,0 +1,10 @@
1
+ import { I18nNode } from './i18nNode.class';
2
+ import { ContainerElement } from "./ast/containerElement.class";
3
+ import { Constructor } from "./constructor.class";
4
+ export declare class EnumNode extends I18nNode {
5
+ static matches(yamlData: any): boolean;
6
+ parse(enumResourceContainer: any): any;
7
+ protected parseEntry<T extends I18nNode>(name: string, data: any, defaultNodeType: Constructor<T>): I18nNode;
8
+ compile(parent: ContainerElement): void;
9
+ lookupKeys(): string[];
10
+ }
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const i18nNode_class_1 = require("./i18nNode.class");
4
+ const textNode_class_1 = require("./textNode.class");
5
+ const arguments_class_1 = require("./arguments.class");
6
+ const objectDef_class_1 = require("./ast/objectDef.class");
7
+ const functionDef_class_1 = require("./ast/functionDef.class");
8
+ const namespaceNode_class_1 = require("./namespaceNode.class");
9
+ class EnumMethodNode extends textNode_class_1.TextNode {
10
+ }
11
+ class EnumEntryNode extends i18nNode_class_1.I18nNode {
12
+ // static matches(data:any) {
13
+ // return true;
14
+ // }
15
+ compile(parent, typeName) {
16
+ parent.createObject(this.namespaceName, def => {
17
+ def.asType(typeName);
18
+ this.eachChild(child => child.compile(def));
19
+ });
20
+ }
21
+ }
22
+ class EnumNode extends i18nNode_class_1.I18nNode {
23
+ static matches(yamlData) {
24
+ return yamlData && yamlData['constructor'] && yamlData['constructor'].name === 'EnumResourceContainer';
25
+ }
26
+ // protected supportedChildNodeTypes(): NodeConstructor<any>[] {
27
+ // return [EnumEntryNode];
28
+ // }
29
+ parse(enumResourceContainer) {
30
+ return super.parse(enumResourceContainer['content']);
31
+ }
32
+ parseEntry(name, data, defaultNodeType) {
33
+ if (defaultNodeType['name'] === namespaceNode_class_1.NameSpaceNode['name']) {
34
+ return super.parseEntry(name, data, EnumEntryNode);
35
+ }
36
+ else {
37
+ throw new Error(`entry '${name}' in '${this.accessor}' is not an object. !Enum children to be an object.`);
38
+ }
39
+ }
40
+ compile(parent) {
41
+ parent.nestedContainer(this.namespaceName, namespace => {
42
+ const enumType = namespace.defineInterface(`${this.className}Entry`);
43
+ // only process enum entry nodes for now so we guarantee all the children
44
+ // are enum types.
45
+ this.eachChild(child => {
46
+ child.compile(namespace, enumType.name);
47
+ });
48
+ const enums = namespace.allOfType(objectDef_class_1.ObjectDef);
49
+ enums[0].forEach(functionDef_class_1.FunctionDef, f => {
50
+ enumType.createFunction(f.name, f.args, f.returnType);
51
+ });
52
+ enums[0].forEach(objectDef_class_1.ObjectDef, f => {
53
+ enumType.createObject(f.name, f.typeName());
54
+ });
55
+ // compile the rest of the children.
56
+ // this.eachChild(child => {
57
+ // if (!(child instanceof EnumEntryNode)) {
58
+ // child.compile(namespace);
59
+ // }
60
+ // });
61
+ const enumKeyType = `${this.fqClassName}Key`;
62
+ namespace.defineType(enumKeyType, this.children.map(child => `'${child.camelCaseName}'`).join('|'));
63
+ // now create our lookup functions for the enum notes
64
+ namespace.createFunction('lookup', arguments_class_1.Arguments.create('key', enumKeyType), enumType.name, out => {
65
+ // this.eachChild(child => {
66
+ // if (child instanceof EnumEntryNode) {
67
+ // out.println(`if (key === '${child.camelCaseName}') { return I18n.${child.accessor}; }`);
68
+ // }
69
+ // });
70
+ out.println(`const result = this.tryLookup(key);`);
71
+ out.println(`if (!result) {`);
72
+ out.println(` throw new Error("Unknown enum key '" + key + "'. Must be one of ${this.lookupKeys().join(', ')}")`);
73
+ out.println(`}`);
74
+ out.println(`return result;`);
75
+ });
76
+ namespace.createFunction('tryLookup', arguments_class_1.Arguments.create('key', 'string'), enumType.name, out => {
77
+ this.eachChild(child => {
78
+ // if (child instanceof EnumEntryNode) {
79
+ out.println(`if (key === '${child.camelCaseName}') { return I18n.${child.accessor}; }`);
80
+ // }
81
+ });
82
+ out.println(`return null;`);
83
+ });
84
+ namespace.createFunction('nameOf', arguments_class_1.Arguments.create('option', enumType.name), enumKeyType, out => {
85
+ this.eachChild(child => {
86
+ // if (child instanceof EnumEntryNode) {
87
+ out.println(`if (option === I18n.${child.accessor}) { return '${child.camelCaseName}'; }`);
88
+ // }
89
+ });
90
+ out.println(`throw new Error("Unknown enum")`);
91
+ });
92
+ namespace.createFunction('asArray', arguments_class_1.Arguments.empty(), `${enumType.name}[]`, out => {
93
+ out.println(`return [`);
94
+ this.eachChild(child => {
95
+ // if (child instanceof EnumEntryNode) {
96
+ out.indent(_out => _out.println(`I18n.${child.accessor},`));
97
+ // }
98
+ });
99
+ out.println(']');
100
+ });
101
+ });
102
+ }
103
+ lookupKeys() {
104
+ return this.children.map(child => child.camelCaseName);
105
+ }
106
+ }
107
+ exports.EnumNode = EnumNode;
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bU5vZGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2VudW1Ob2RlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscURBQTJEO0FBQzNELHFEQUEwQztBQUUxQyx1REFBNEM7QUFDNUMsMkRBQWdEO0FBQ2hELCtEQUFvRDtBQUVwRCwrREFBb0Q7QUFHcEQsTUFBTSxjQUFlLFNBQVEseUJBQVE7Q0FJcEM7QUFFRCxNQUFNLGFBQWMsU0FBUSx5QkFBUTtJQUVoQyw2QkFBNkI7SUFDN0IsbUJBQW1CO0lBQ25CLElBQUk7SUFFSixPQUFPLENBQUMsTUFBd0IsRUFBRSxRQUFnQjtRQUM5QyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDMUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBR0QsTUFBYSxRQUFTLFNBQVEseUJBQVE7SUFFbEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFhO1FBQ3hCLE9BQU8sUUFBUSxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxLQUFLLHVCQUF1QixDQUFBO0lBQzFHLENBQUM7SUFHRCxnRUFBZ0U7SUFDaEUsOEJBQThCO0lBQzlCLElBQUk7SUFFSixLQUFLLENBQUMscUJBQTBCO1FBQzVCLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFUyxVQUFVLENBQXFCLElBQVksRUFBRSxJQUFTLEVBQUUsZUFBOEI7UUFDNUYs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
@@ -0,0 +1,18 @@
1
+ import * as yaml from 'js-yaml';
2
+ export declare class CustomType {
3
+ readonly className: string;
4
+ readonly importDeclaration: string;
5
+ constructor(className: string, importDeclaration: string);
6
+ asYamlType(): yaml.Type;
7
+ asYamlListType(): yaml.Type;
8
+ }
9
+ export declare class I18nGenerator {
10
+ private rootNode;
11
+ private customTypes;
12
+ private _schema;
13
+ constructor();
14
+ registerType(typeName: string, importDeclaration: string): void;
15
+ readFile(fileName: string): void;
16
+ getSchema(): yaml.Schema;
17
+ toString(): string;
18
+ }
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __importStar = (this && this.__importStar) || function (mod) {
3
+ if (mod && mod.__esModule) return mod;
4
+ var result = {};
5
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
6
+ result["default"] = mod;
7
+ return result;
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const fs = __importStar(require("fs"));
11
+ const yaml = __importStar(require("js-yaml"));
12
+ const moduleDef_class_1 = require("./ast/moduleDef.class");
13
+ const customTypeArrayNode_class_1 = require("./customTypeArrayNode.class");
14
+ const customTypeNode_class_1 = require("./customTypeNode.class");
15
+ const enumNode_class_1 = require("./enumNode.class");
16
+ const namespaceNode_class_1 = require("./namespaceNode.class");
17
+ const rootNode_class_1 = require("./rootNode.class");
18
+ const textArrayNode_class_1 = require("./textArrayNode.class");
19
+ const textNode_class_1 = require("./textNode.class");
20
+ const valueNode_class_1 = require("./valueNode.class");
21
+ const writer_class_1 = require("./writer.class");
22
+ // TODO: use factories
23
+ // interface NodeFactory<T extends Node> {
24
+ // matches(data:any):boolean;
25
+ // create(name:string, data:any):T;
26
+ // }
27
+ class EnumResourceContainer {
28
+ constructor(content) {
29
+ this.content = content;
30
+ }
31
+ }
32
+ class CustomTypeContainer {
33
+ constructor(customType, content) {
34
+ this.customType = customType;
35
+ this.content = content;
36
+ }
37
+ }
38
+ class CustomTypeArrayContainer {
39
+ constructor(customType, content) {
40
+ this.customType = customType;
41
+ this.content = content;
42
+ }
43
+ }
44
+ // TODO: merge this with nodes, so nodes become a type, not sure if this will be easy to do or not as
45
+ // we don't have the key name at this point. Might have to put it all in the factory so it can be called
46
+ // to embed a marker in the data and use that when checking the node type.
47
+ const EnumResourceType = new yaml.Type('!Enum', {
48
+ kind: 'mapping',
49
+ construct: function (data) {
50
+ data = data || {}; // in case of empty node
51
+ return new EnumResourceContainer(data);
52
+ },
53
+ instanceOf: EnumResourceContainer
54
+ // `represent` is omitted here. So, Space objects will be dumped as is.
55
+ // That is regular mapping with three key-value pairs but with !space tag.
56
+ });
57
+ class CustomType {
58
+ constructor(className, importDeclaration) {
59
+ this.className = className;
60
+ this.importDeclaration = importDeclaration;
61
+ }
62
+ asYamlType() {
63
+ const self = this;
64
+ return new yaml.Type(`!${this.className}`, {
65
+ kind: 'mapping',
66
+ construct: function (data) {
67
+ data = data || {}; // in case of empty node
68
+ return new CustomTypeContainer(self, data);
69
+ },
70
+ instanceOf: CustomTypeContainer
71
+ // `represent` is omitted here. So, Space objects will be dumped as is.
72
+ // That is regular mapping with three key-value pairs but with !space tag.
73
+ });
74
+ }
75
+ asYamlListType() {
76
+ const self = this;
77
+ return new yaml.Type(`!List(${this.className})`, {
78
+ kind: 'mapping',
79
+ construct: function (data) {
80
+ data = data || {}; // in case of empty node
81
+ return new CustomTypeArrayContainer(self, data);
82
+ },
83
+ instanceOf: CustomTypeArrayContainer
84
+ // `represent` is omitted here. So, Space objects will be dumped as is.
85
+ // That is regular mapping with three key-value pairs but with !space tag.
86
+ });
87
+ }
88
+ }
89
+ exports.CustomType = CustomType;
90
+ // TODO: replace custom gulp task with https://www.npmjs.com/package/gulp-reduce-file
91
+ class I18nGenerator {
92
+ constructor() {
93
+ this.customTypes = [];
94
+ this.rootNode = new rootNode_class_1.RootNode();
95
+ this.rootNode.registerNodeTypes([
96
+ customTypeArrayNode_class_1.CustomTypeArrayNode, customTypeNode_class_1.CustomTypeNode, enumNode_class_1.EnumNode, textNode_class_1.TextNode, textArrayNode_class_1.TextArrayNode, valueNode_class_1.ValueNode, namespaceNode_class_1.NameSpaceNode
97
+ ]);
98
+ this.registerType('Alert', 'import {Alert} from "@coolon/i18n-resource"');
99
+ this.registerType('Confirm', 'import {Confirm} from "@coolon/i18n-resource"');
100
+ }
101
+ registerType(typeName, importDeclaration) {
102
+ this.customTypes.push(new CustomType(typeName, importDeclaration));
103
+ }
104
+ readFile(fileName) {
105
+ let options = { schema: this.getSchema() };
106
+ console.log(`Loading: ${fileName}`);
107
+ const yamlData = yaml.safeLoad(fs.readFileSync(fileName, 'utf8'), { schema: this.getSchema() });
108
+ try {
109
+ this.rootNode.parse(yamlData);
110
+ }
111
+ catch (e) {
112
+ throw new Error(`Failed to parse file:${fileName}\n-> ${e.message}\n-> ${e.stack}`);
113
+ }
114
+ }
115
+ getSchema() {
116
+ if (!this._schema) {
117
+ let types = [].concat(EnumResourceType, this.customTypes.map(type => type.asYamlType()), this.customTypes.map(type => type.asYamlListType()));
118
+ this._schema = yaml.Schema.create(types);
119
+ console.log(`using schema: ${JSON.stringify(this._schema)}`);
120
+ }
121
+ return this._schema;
122
+ }
123
+ toString() {
124
+ const writer = new writer_class_1.RootWriter();
125
+ const module = new moduleDef_class_1.Module();
126
+ this.customTypes.forEach(type => {
127
+ module.addImport(type.importDeclaration);
128
+ });
129
+ this.rootNode.compile(module);
130
+ module.writeBody(writer);
131
+ return writer.toString();
132
+ }
133
+ }
134
+ exports.I18nGenerator = I18nGenerator;
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bkdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvaTE4bkdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsOENBQWdDO0FBQ2hDLDJEQUE2QztBQUM3QywyRUFBZ0U7QUFDaEUsaUVBQXNEO0FBRXRELHFEQUEwQztBQUMxQywrREFBb0Q7QUFDcEQscURBQTBDO0FBQzFDLCtEQUFvRDtBQUNwRCxxREFBMEM7QUFDMUMsdURBQTRDO0FBQzVDLGlEQUEwQztBQUkxQyxzQkFBc0I7QUFDdEIsMENBQTBDO0FBQzFDLGlDQUFpQztBQUNqQyx1Q0FBdUM7QUFDdkMsSUFBSTtBQUVKLE1BQU0scUJBQXFCO0lBQ3pCLFlBQTRCLE9BQVk7UUFBWixZQUFPLEdBQVAsT0FBTyxDQUFLO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQU0sbUJBQW1CO0lBQ3ZCLFlBQTRCLFVBQXNCLEVBQWtCLE9BQVk7UUFBcEQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFrQixZQUFPLEdBQVAsT0FBTyxDQUFLO0lBQ2hGLENBQUM7Q0FDRjtBQUVELE1BQU0sd0JBQXdCO0lBQzVCLFlBQTRCLFVBQXNCLEVBQWtCLE9BQVk7UUFBcEQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFrQixZQUFPLEdBQVAsT0FBTyxDQUFLO0lBQ2hGLENBQUM7Q0FDRjtBQUVELHFHQUFxRztBQUNyRyx5R0FBeUc7QUFDekcsMEVBQTBFO0FBQzFFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtJQUM5QyxJQUFJLEVBQUUsU0FBUztJQUNmLFNBQVMsRUFBRSxVQUFVLElBQUk7UUFDdkIsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyx3QkFBd0I7UUFDM0MsT0FBTyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7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