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