@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,132 @@
1
+ import * as _ from 'lodash';
2
+ import S from 'string';
3
+ import { Arguments } from "./arguments.class";
4
+ const reservedWords = ['default', 'switch', 'if', 'else'];
5
+ function safeName(name) {
6
+ return _.includes(reservedWords, name) ? `${name}_` : name;
7
+ }
8
+ function camelize(text) {
9
+ return S(text).camelize().toString();
10
+ }
11
+ export class I18nNode {
12
+ constructor(parent, name) {
13
+ this.parent = parent;
14
+ this.name = name;
15
+ this.childNodes = new Map();
16
+ this.templateArgs = new Arguments();
17
+ }
18
+ get key() {
19
+ return this.pathToRoot().map(a => a.name).join('.');
20
+ }
21
+ /**
22
+ * Returns the full path to this nodes namespace as used in code. Doesn't include the I18n prefix.
23
+ */
24
+ get accessor() {
25
+ const result = [];
26
+ this.pathToRoot().forEach(ancestor => ancestor.appendNamespaceTo(result));
27
+ return result.join('.');
28
+ }
29
+ appendNamespaceTo(collector) {
30
+ collector.push(this.namespaceName);
31
+ }
32
+ isRoot() {
33
+ return !this.parent;
34
+ }
35
+ pathToRoot() {
36
+ return this.isRoot() ? [this] : this.parent.pathToRoot().concat(this);
37
+ }
38
+ parse(yamlData) {
39
+ this.withEachProperty(yamlData, (name, data) => {
40
+ this.parseEntry(name, data, this.computeNodeTypeOf(data));
41
+ });
42
+ }
43
+ parseEntry(name, data, defaultNodeType) {
44
+ const node = this.getOrCreatNode(name, defaultNodeType);
45
+ if (this.constructor['acceptsChildNodesOfType']) {
46
+ const types = this.constructor['acceptsChildNodesOfType']();
47
+ if (!_.find(types, type => node instanceof type)) {
48
+ throw new Error(`Unsupported child type, must be one of ${types.map(t => t.name).join()}, got ${defaultNodeType.name}.`);
49
+ }
50
+ }
51
+ node.parse(data);
52
+ return node;
53
+ }
54
+ getOrCreatNode(name, type) {
55
+ let node = this.childNodes.get(name);
56
+ if (node && node.constructor != type) {
57
+ throw new Error(`Existing node named ${name} has different type, expected ${type['name']}, got ${node.constructor['name']}`);
58
+ }
59
+ // console.log(`--> getOrCreateNode(${name}, ${type}) ${node ? 'found' : 'created'}`);
60
+ if (!node) {
61
+ node = new type(this, name);
62
+ this.childNodes.set(name, node);
63
+ }
64
+ return node;
65
+ }
66
+ rootNode() {
67
+ return this.parent ? this.parent.rootNode() : this;
68
+ }
69
+ nodeTypes() {
70
+ return this.rootNode().nodeTypes();
71
+ }
72
+ computeNodeTypeOf(data) {
73
+ const type = _.find(this.supportedChildNodeTypes(), it => it.matches(data));
74
+ if (!type) {
75
+ throw new Error(`no matching node type found for ${this.accessor}`);
76
+ }
77
+ return type;
78
+ }
79
+ supportedChildNodeTypes() {
80
+ return this.rootNode().nodeTypes();
81
+ }
82
+ withEachProperty(yamlData, cb) {
83
+ if (yamlData) {
84
+ Object.getOwnPropertyNames(yamlData).forEach(unsafeKey => {
85
+ if (reservedWords.includes(unsafeKey)) {
86
+ console.log(`Warning: Yaml key '${unsafeKey}' in ${this.key} is a reserved word, converting to '${safeName(unsafeKey)}'`);
87
+ }
88
+ cb(unsafeKey, yamlData[unsafeKey]);
89
+ });
90
+ }
91
+ }
92
+ get children() {
93
+ return Array.from(this.childNodes.values());
94
+ }
95
+ eachChild(cb) {
96
+ Array.from(this.childNodes.values()).forEach(node => cb(node));
97
+ }
98
+ getArgs() {
99
+ return this.templateArgs;
100
+ }
101
+ hasArgs() {
102
+ return this.getArgs().any();
103
+ }
104
+ get safeName() {
105
+ return safeName(this.name);
106
+ }
107
+ get javaScriptName() {
108
+ const name = this.camelCaseName;
109
+ return reservedWords.includes(this.name) ? `${name}_` : name;
110
+ }
111
+ get camelCaseName() {
112
+ return camelize(this.name);
113
+ }
114
+ get namespaceName() {
115
+ return this.javaScriptName;
116
+ }
117
+ get className() {
118
+ return this.javaScriptName[0].toUpperCase() + this.javaScriptName.slice(1);
119
+ }
120
+ get fqClassName() {
121
+ // the root node has no className and the second one is the language
122
+ let parents = this.pathToRoot().slice(2);
123
+ return parents.map(n => n.className).join('');
124
+ }
125
+ get snakeCaseName() {
126
+ return this.name;
127
+ }
128
+ compile(parent) {
129
+ throw new Error('abstract method');
130
+ }
131
+ }
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bk5vZGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2kxOG5Ob2RlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFLNUMsTUFBTSxhQUFhLEdBQWEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQVFwRSxTQUFTLFFBQVEsQ0FBQyxJQUFZO0lBQzFCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMvRCxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsSUFBWTtJQUMxQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN6QyxDQUFDO0FBRUQsTUFBTSxPQUFPLFFBQVE7SUFLakIsWUFBc0IsTUFBZ0IsRUFBa0IsSUFBWTtRQUE5QyxXQUFNLEdBQU4sTUFBTSxDQUFVO1FBQWtCLFNBQUksR0FBSixJQUFJLENBQVE7UUFINUQsZUFBVSxHQUEwQixJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUNoRSxpQkFBWSxHQUFjLElBQUksU0FBUyxFQUFFLENBQUM7SUFHbEQsQ0FBQztJQUVELElBQUksR0FBRztRQUNILE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFB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
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @file Automatically generated by barrelsby.
3
+ */
4
+ export * from "./arg.class";
5
+ export * from "./arguments.class";
6
+ export * from "./constructor.class";
7
+ export * from "./customTypeArrayNode.class";
8
+ export * from "./customTypeNode.class";
9
+ export * from "./enumNode.class";
10
+ export * from "./i18nGenerator";
11
+ export * from "./i18nNode.class";
12
+ export * from "./languageNode.class";
13
+ export * from "./namespaceNode.class";
14
+ export * from "./rootNode.class";
15
+ export * from "./stringUtil";
16
+ export * from "./textArrayNode.class";
17
+ export * from "./textNode.class";
18
+ export * from "./valueNode.class";
19
+ export * from "./writer.class";
20
+ export * from "./ast/abstractContainerElement";
21
+ export * from "./ast/abstractElement";
22
+ export * from "./ast/classDef.class";
23
+ export * from "./ast/containerElement.class";
24
+ export * from "./ast/element.class";
25
+ export * from "./ast/functionDef.class";
26
+ export * from "./ast/interfaceDef.class";
27
+ export * from "./ast/moduleDef.class";
28
+ export * from "./ast/namespaceDef.class";
29
+ export * from "./ast/objectDef.class";
30
+ export * from "./ast/tempContainer.class";
31
+ export * from "./ast/typeDef.class";
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @file Automatically generated by barrelsby.
3
+ */
4
+ export * from "./arg.class";
5
+ export * from "./arguments.class";
6
+ export * from "./customTypeArrayNode.class";
7
+ export * from "./customTypeNode.class";
8
+ export * from "./enumNode.class";
9
+ export * from "./i18nGenerator";
10
+ export * from "./i18nNode.class";
11
+ export * from "./languageNode.class";
12
+ export * from "./namespaceNode.class";
13
+ export * from "./rootNode.class";
14
+ export * from "./stringUtil";
15
+ export * from "./textArrayNode.class";
16
+ export * from "./textNode.class";
17
+ export * from "./valueNode.class";
18
+ export * from "./writer.class";
19
+ export * from "./ast/abstractContainerElement";
20
+ export * from "./ast/abstractElement";
21
+ export * from "./ast/classDef.class";
22
+ export * from "./ast/functionDef.class";
23
+ export * from "./ast/interfaceDef.class";
24
+ export * from "./ast/moduleDef.class";
25
+ export * from "./ast/namespaceDef.class";
26
+ export * from "./ast/objectDef.class";
27
+ export * from "./ast/tempContainer.class";
28
+ export * from "./ast/typeDef.class";
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxtQkFBbUIsQ0FBQztBQUVsQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxzQkFBc0IsQ0FBQztBQUdyQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHFCQUFxQixDQUFDIn0=
@@ -0,0 +1,7 @@
1
+ import { I18nNode } from './i18nNode.class';
2
+ import { ContainerElement } from "./ast/containerElement.class";
3
+ export declare class LanguageNode extends I18nNode {
4
+ static matches(yamlData: any): boolean;
5
+ appendNamespaceTo(collector: string[]): void;
6
+ compile(parent: ContainerElement): void;
7
+ }
@@ -0,0 +1,13 @@
1
+ import { I18nNode } from './i18nNode.class';
2
+ export class LanguageNode extends I18nNode {
3
+ static matches(yamlData) {
4
+ return false;
5
+ }
6
+ appendNamespaceTo(collector) {
7
+ // noop.
8
+ }
9
+ compile(parent) {
10
+ this.eachChild(child => child.compile(parent));
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2VOb2RlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9sYW5ndWFnZU5vZGUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRzFDLE1BQU0sT0FBTyxZQUFhLFNBQVEsUUFBUTtJQUV0QyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQWE7UUFDeEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELGlCQUFpQixDQUFDLFNBQW1CO1FBQ2pDLFFBQVE7SUFDWixDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQXdCO1FBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztDQUVKIn0=
@@ -0,0 +1,6 @@
1
+ import { I18nNode } from "./i18nNode.class";
2
+ import { ContainerElement } from "./ast/containerElement.class";
3
+ export declare class NameSpaceNode extends I18nNode {
4
+ static matches(yamlData: any): boolean;
5
+ compile(parent: ContainerElement): void;
6
+ }
@@ -0,0 +1,13 @@
1
+ import { I18nNode } from "./i18nNode.class";
2
+ export class NameSpaceNode extends I18nNode {
3
+ static matches(yamlData) {
4
+ // we're fallback so we're greedy, just make sure I'm last in the list of matchers
5
+ return true;
6
+ }
7
+ compile(parent) {
8
+ parent.nestedContainer(this.namespaceName, namespace => {
9
+ this.eachChild(child => child.compile(namespace));
10
+ });
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNwYWNlTm9kZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbmFtZXNwYWNlTm9kZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFJMUMsTUFBTSxPQUFPLGFBQWMsU0FBUSxRQUFRO0lBRXZDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBYTtRQUN4QixtRkFBbUY7UUFDbkYsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUF3QjtRQUM1QixNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FFSiJ9
@@ -0,0 +1,15 @@
1
+ import { I18nNode, NodeConstructor } from "./i18nNode.class";
2
+ import { Module } from "./ast/moduleDef.class";
3
+ export declare class RootNode extends I18nNode {
4
+ private _nodeTypes;
5
+ constructor();
6
+ registerNodeTypes(nodeTypes: NodeConstructor<any>[]): void;
7
+ nodeTypes(): NodeConstructor<any>[];
8
+ protected computeNodeTypeOf(data: any): NodeConstructor<any>;
9
+ parse(yamlData: any): void;
10
+ appendNamespaceTo(collector: string[]): void;
11
+ /*********
12
+ *
13
+ ********/
14
+ compile(module: Module): void;
15
+ }
@@ -0,0 +1,43 @@
1
+ import { I18nNode } from "./i18nNode.class";
2
+ import { LanguageNode } from "./languageNode.class";
3
+ export class RootNode extends I18nNode {
4
+ constructor() {
5
+ super(null, '');
6
+ this._nodeTypes = [];
7
+ }
8
+ registerNodeTypes(nodeTypes) {
9
+ this._nodeTypes = nodeTypes;
10
+ }
11
+ nodeTypes() {
12
+ return this._nodeTypes;
13
+ }
14
+ computeNodeTypeOf(data) {
15
+ // All top level children are language nodes. en.blah etc.
16
+ return LanguageNode;
17
+ }
18
+ parse(yamlData) {
19
+ this.withEachProperty(yamlData, (name, data) => {
20
+ const node = this.getOrCreatNode(name, this.computeNodeTypeOf(data));
21
+ node.parse(data);
22
+ });
23
+ }
24
+ appendNamespaceTo(collector) {
25
+ // noop.
26
+ }
27
+ /*********
28
+ *
29
+ ********/
30
+ compile(module) {
31
+ module.addHeader(`/******** IMPORTANT *********`);
32
+ module.addHeader(` * `);
33
+ module.addHeader(` * This file is automatically generated. Any edits will be lost.`);
34
+ module.addHeader(` * `);
35
+ module.addHeader(' ****/');
36
+ module.addHeader('/* tslint:disable:no-shadowed-variable */');
37
+ module.addImport(`import {interpret} "@coolon/i18n-resource"`);
38
+ module.nestedContainer('I18n', namespace => {
39
+ this.eachChild(child => child.compile(namespace));
40
+ });
41
+ }
42
+ }
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdE5vZGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Jvb3ROb2RlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQWtCLE1BQU0sa0JBQWtCLENBQUM7QUFDM0QsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBR2xELE1BQU0sT0FBTyxRQUFTLFNBQVEsUUFBUTtJQUlsQztRQUNJLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFIWixlQUFVLEdBQTBCLEVBQUUsQ0FBQztJQUkvQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBZ0M7UUFDOUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVTLGlCQUFpQixDQUFDLElBQVM7UUFDakMsMERBQTBEO1FBQzFELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBYTtRQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFZLEVBQUUsSUFBUyxFQUFFLEVBQUU7WUFDeEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFHRCxpQkFBaUIsQ0FBQyxTQUFtQjtRQUNqQyxRQUFRO0lBQ1osQ0FBQztJQUVEOztjQUVVO0lBQ1YsT0FBTyxDQUFDLE1BQWE7UUFFakIsTUFBTSxDQUFDLFNBQVMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsU0FBUyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFFOUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBRUoifQ==
@@ -0,0 +1 @@
1
+ export declare function capitalize(name: string): string;
@@ -0,0 +1,4 @@
1
+ export function capitalize(name) {
2
+ return name[0].toUpperCase() + name.slice(1);
3
+ }
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nVXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvc3RyaW5nVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQVc7SUFDbEMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDIn0=
@@ -0,0 +1,9 @@
1
+ import { I18nNode } from './i18nNode.class';
2
+ import { ContainerElement } from "./ast/containerElement.class";
3
+ export declare class TextArrayNode extends I18nNode {
4
+ private args;
5
+ static matches(yamlData: any): boolean;
6
+ parse(data: any): void;
7
+ compile(container: ContainerElement): void;
8
+ createFunctionBody(out: any): void;
9
+ }
@@ -0,0 +1,38 @@
1
+ import * as _ from 'lodash';
2
+ import { I18nNode } from './i18nNode.class';
3
+ import { TextNode } from "./textNode.class";
4
+ export class TextArrayNode extends I18nNode {
5
+ static matches(yamlData) {
6
+ return _.isArray(yamlData) && _.reject(yamlData, entry => _.isString(entry)).length == 0;
7
+ }
8
+ parse(data) {
9
+ data.forEach((text, index) => {
10
+ this.parseEntry(`_${index}`, text, TextNode);
11
+ });
12
+ this.eachChild(child => {
13
+ this.getArgs().merge(child.getArgs());
14
+ });
15
+ }
16
+ compile(container) {
17
+ container.createFunction(this.javaScriptName, this.getArgs(), 'string[]', out => {
18
+ this.createFunctionBody(out);
19
+ });
20
+ }
21
+ createFunctionBody(out) {
22
+ out.println(`return [`);
23
+ this.eachChild(node => {
24
+ out.indent(out => {
25
+ if (node.getArgs().any()) {
26
+ out.println(`function(${node.getArgs().asArgsObject()}) {`);
27
+ }
28
+ else {
29
+ out.println(`function() {`);
30
+ }
31
+ out.indent(out => node.createFunctionBody(out));
32
+ out.println(`}(),`);
33
+ });
34
+ });
35
+ out.println(`];`);
36
+ }
37
+ }
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dEFycmF5Tm9kZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdGV4dEFycmF5Tm9kZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsUUFBUSxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUkxQyxNQUFNLE9BQU8sYUFBYyxTQUFRLFFBQVE7SUFJdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFhO1FBQ3hCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBUztRQUNWLElBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsT0FBTyxDQUFDLFNBQTJCO1FBQy9CLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQzVFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFHO1FBQ2xCLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNiLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUN0QixHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDL0Q7cUJBQU07b0JBQ0gsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDL0I7Z0JBQ0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFFLElBQWlCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDOUQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ0gsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QixDQUFDO0NBRUoifQ==
@@ -0,0 +1,17 @@
1
+ import { I18nNode } from './i18nNode.class';
2
+ import { ContainerElement } from "./ast/containerElement.class";
3
+ import { Arg } from "./arg.class";
4
+ export declare class TextNode extends I18nNode {
5
+ private text;
6
+ private messageSchema;
7
+ static matches(yamlData: any): boolean;
8
+ parse(data: any): void;
9
+ compile(container: ContainerElement): void;
10
+ createFunctionBody(out: any): void;
11
+ valueString(value: any): string;
12
+ protected scanContainer(elements: Element[]): void;
13
+ protected scanFormatOptions(options: any): void;
14
+ createArgument(messagePart: any[]): void;
15
+ createSelectArgument(name: string, formatOptions: any): void;
16
+ addArgument(arg: Arg): void;
17
+ }
@@ -0,0 +1,104 @@
1
+ import * as _ from 'lodash';
2
+ import { I18nNode } from './i18nNode.class';
3
+ import parseMessageFormat from 'format-message-parse';
4
+ import { Arg } from "./arg.class";
5
+ // the result is an array. <message_container> = <message_part>[]
6
+ // <message_part> == string | [argument_element]
7
+ // <argument_element> =
8
+ // ["<argName>"] OR
9
+ // ["<argName>", "<argFormat>"] OR
10
+ // ["<argName>", "<argFormat>", "<formatOptions>"] for argFormat == date|time|number
11
+ // ["<argName>", "<argFormat>", {option_a: <message_container>, option_b: <message_container>, other: <messsage_container>] for argFormat == select, plural
12
+ //
13
+ export class TextNode extends I18nNode {
14
+ static matches(yamlData) {
15
+ return _.isString(yamlData);
16
+ }
17
+ parse(data) {
18
+ this.text = data;
19
+ try {
20
+ this.messageSchema = parseMessageFormat(this.text);
21
+ this.scanContainer(this.messageSchema);
22
+ }
23
+ catch (e) {
24
+ throw new Error(`Invalid message format ${this.key}=${data} -> ${e.message}`);
25
+ }
26
+ }
27
+ compile(container) {
28
+ // TODO: Make this take the args as an interface so callers use it like I18n.hello({name: 'World'}) with type safety.
29
+ container.createFunction(this.javaScriptName, this.getArgs(), 'string', out => {
30
+ this.createFunctionBody(out);
31
+ });
32
+ }
33
+ createFunctionBody(out) {
34
+ if (this.getArgs().any()) {
35
+ out.println(`// TODO: get the generator to put this in a locale specific file`);
36
+ out.println(`return interpret('en', ${JSON.stringify(this.messageSchema)})(${this.getArgs().asArgsObject()});`);
37
+ }
38
+ else {
39
+ out.println(`return ${this.valueString(this.text)};`);
40
+ }
41
+ }
42
+ valueString(value) {
43
+ return `"${value}"`;
44
+ }
45
+ scanContainer(elements) {
46
+ elements.forEach(element => {
47
+ if (_.isArray(element)) {
48
+ this.createArgument(element);
49
+ }
50
+ });
51
+ }
52
+ scanFormatOptions(options) {
53
+ _.forOwn(options, (val, key) => {
54
+ this.scanContainer(val);
55
+ });
56
+ }
57
+ createArgument(messagePart) {
58
+ const [argName, argType] = messagePart;
59
+ if (argName == "#")
60
+ return;
61
+ switch (argType) {
62
+ case 'number':
63
+ this.addArgument(new Arg(argName, 'number'));
64
+ break;
65
+ case 'date':
66
+ this.addArgument(new Arg(argName, 'Date'));
67
+ break;
68
+ case 'time':
69
+ this.addArgument(new Arg(argName, 'Time'));
70
+ break;
71
+ case 'plural':
72
+ this.addArgument(new Arg(argName, 'number'));
73
+ // console.log(`plural bits: ${JSON.stringify(messagePart[3])}`);
74
+ this.scanFormatOptions(messagePart[3]);
75
+ break;
76
+ case 'select':
77
+ const formatOptions = messagePart[2];
78
+ this.createSelectArgument(argName, formatOptions);
79
+ // console.log(`select bits: ${JSON.stringify(formatOptions)}`);
80
+ this.scanFormatOptions(formatOptions);
81
+ break;
82
+ default:
83
+ this.addArgument(new Arg(argName, 'string'));
84
+ break;
85
+ }
86
+ }
87
+ createSelectArgument(name, formatOptions) {
88
+ // check if it's a boolean option.
89
+ const arg = new Arg(name, 'string');
90
+ const options = Object.keys(formatOptions);
91
+ if (options.length == 2) {
92
+ const optionName = formatOptions[options[0]] == 'other' ? options[1] : options[0];
93
+ this.addArgument(arg.asBooleanOptionNamed(optionName));
94
+ }
95
+ else {
96
+ this.addArgument(arg);
97
+ }
98
+ }
99
+ addArgument(arg) {
100
+ // console.log(`created -> ${JSON.stringify(arg)}`);
101
+ this.getArgs().add(arg);
102
+ }
103
+ }
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dE5vZGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RleHROb2RlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQyxPQUFPLGtCQUFrQixNQUFNLHNCQUFzQixDQUFBO0FBRXJELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFHaEMsaUVBQWlFO0FBQ2pFLGdEQUFnRDtBQUNoRCx1QkFBdUI7QUFDdkIsc0JBQXNCO0FBQ3RCLHFDQUFxQztBQUNyQyx1RkFBdUY7QUFDdkYsOEpBQThKO0FBQzlKLEVBQUU7QUFHRixNQUFNLE9BQU8sUUFBUyxTQUFRLFFBQVE7SUFLbEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFhO1FBQ3hCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQVM7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQWMsQ0FBQztRQUMzQixJQUFJO1lBQ0EsSUFBSSxDQUFDLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDMUM7UUFBQyxPQUFNLENBQUMsRUFBRTtZQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ2pGO0lBQ0wsQ0FBQztJQUVELE9BQU8sQ0FBQyxTQUEyQjtRQUMvQixxSEFBcUg7UUFDckgsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUks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
@@ -0,0 +1,12 @@
1
+ import { I18nNode } from './i18nNode.class';
2
+ import { ContainerElement } from "./ast/containerElement.class";
3
+ export declare class ValueNode extends I18nNode {
4
+ private data;
5
+ static matches(yamlData: any): boolean;
6
+ static isValue(thing: any): boolean;
7
+ parse(data: any): void;
8
+ compile(out: ContainerElement): void;
9
+ returnType(): string;
10
+ valueType(value: any): "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
11
+ valueString(value: any): string;
12
+ }
@@ -0,0 +1,37 @@
1
+ import * as _ from 'lodash';
2
+ import { I18nNode } from './i18nNode.class';
3
+ import { Arguments } from "./arguments.class";
4
+ export class ValueNode extends I18nNode {
5
+ static matches(yamlData) {
6
+ return this.isValue(yamlData) || (_.isArray(yamlData) && _.reject(yamlData, entry => this.isValue(entry)).length == 0);
7
+ }
8
+ static isValue(thing) {
9
+ return _.isNumber(thing) || _.isNil(thing);
10
+ }
11
+ // constructor(parent: Node, private name: String, private children: any) {
12
+ // super(parent);
13
+ // }
14
+ parse(data) {
15
+ this.data = data;
16
+ }
17
+ compile(out) {
18
+ out.createFunction(this.javaScriptName, Arguments.empty(), this.returnType(), out => {
19
+ if (_.isArray(this.data)) {
20
+ out.println(` return [${this.data.map(d => this.valueString(d)).join(', ')}];`);
21
+ }
22
+ else {
23
+ out.println(` return ${this.valueString(this.data)};`);
24
+ }
25
+ });
26
+ }
27
+ returnType() {
28
+ return _.isArray(this.data) ? `${this.valueType(this.data[0])}[]` : this.valueType(this.data);
29
+ }
30
+ valueType(value) {
31
+ return _.isNil(value) ? 'string' : typeof value;
32
+ }
33
+ valueString(value) {
34
+ return value;
35
+ }
36
+ }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWVOb2RlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi92YWx1ZU5vZGUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRTFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUU1QyxNQUFNLE9BQU8sU0FBVSxTQUFRLFFBQVE7SUFHbkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFhO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNILENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQVU7UUFDckIsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxxQkFBcUI7SUFDckIsSUFBSTtJQUVKLEtBQUssQ0FBQyxJQUFTO1FBQ1gsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFxQjtRQUN6QixHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNoRixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0QixHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyRjtpQkFBTTtnQkFDSCxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzVEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsVUFBVTtRQUNOLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFVO1FBQ2hCLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQztJQUNwRCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDbEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKIn0=
@@ -0,0 +1,10 @@
1
+ export interface Writer {
2
+ println(it: string): any;
3
+ indent(func: (nested: Writer) => void): any;
4
+ }
5
+ export declare class RootWriter implements Writer {
6
+ private lines;
7
+ println(it: string): void;
8
+ indent(func: (nested: Writer) => void): void;
9
+ toString(): string;
10
+ }
@@ -0,0 +1,26 @@
1
+ export class RootWriter {
2
+ constructor() {
3
+ this.lines = [];
4
+ }
5
+ println(it) {
6
+ this.lines.push(it);
7
+ }
8
+ indent(func) {
9
+ func(new ChildWriter(this));
10
+ }
11
+ toString() {
12
+ return this.lines.join("\n");
13
+ }
14
+ }
15
+ class ChildWriter {
16
+ constructor(parent) {
17
+ this.parent = parent;
18
+ }
19
+ println(it) {
20
+ return this.parent.println(' ' + it);
21
+ }
22
+ indent(func) {
23
+ func(new ChildWriter(this));
24
+ }
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi93cml0ZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxPQUFPLFVBQVU7SUFBdkI7UUFDWSxVQUFLLEdBQWEsRUFBRSxDQUFDO0lBYWpDLENBQUM7SUFYRyxPQUFPLENBQUMsRUFBVTtRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBMEI7UUFDN0IsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDSjtBQUVELE1BQU0sV0FBVztJQUViLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ2xDLENBQUM7SUFFRCxPQUFPLENBQUMsRUFBVTtRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBMEI7UUFDN0IsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNKIn0=