@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.
- package/.editorconfig +15 -0
- package/CHANGELOG.md +6 -0
- package/LICENSE +21 -0
- package/README.md +3 -0
- package/build/main/index.d.ts +1 -0
- package/build/main/index.js +7 -0
- package/build/main/lib/arg.class.d.ts +11 -0
- package/build/main/lib/arg.class.js +27 -0
- package/build/main/lib/arguments.class.d.ts +20 -0
- package/build/main/lib/arguments.class.js +55 -0
- package/build/main/lib/ast/abstractContainerElement.d.ts +9 -0
- package/build/main/lib/ast/abstractContainerElement.js +31 -0
- package/build/main/lib/ast/abstractElement.d.ts +16 -0
- package/build/main/lib/ast/abstractElement.js +39 -0
- package/build/main/lib/ast/classDef.class.d.ts +9 -0
- package/build/main/lib/ast/classDef.class.js +25 -0
- package/build/main/lib/ast/containerElement.class.d.ts +17 -0
- package/build/main/lib/ast/containerElement.class.js +3 -0
- package/build/main/lib/ast/element.class.d.ts +12 -0
- package/build/main/lib/ast/element.class.js +3 -0
- package/build/main/lib/ast/functionDef.class.d.ts +10 -0
- package/build/main/lib/ast/functionDef.class.js +16 -0
- package/build/main/lib/ast/interfaceDef.class.d.ts +9 -0
- package/build/main/lib/ast/interfaceDef.class.js +26 -0
- package/build/main/lib/ast/moduleDef.class.d.ts +8 -0
- package/build/main/lib/ast/moduleDef.class.js +42 -0
- package/build/main/lib/ast/namespaceDef.class.d.ts +18 -0
- package/build/main/lib/ast/namespaceDef.class.js +63 -0
- package/build/main/lib/ast/objectDef.class.d.ts +24 -0
- package/build/main/lib/ast/objectDef.class.js +69 -0
- package/build/main/lib/ast/tempContainer.class.d.ts +4 -0
- package/build/main/lib/ast/tempContainer.class.js +12 -0
- package/build/main/lib/ast/typeDef.class.d.ts +7 -0
- package/build/main/lib/ast/typeDef.class.js +14 -0
- package/build/main/lib/bin/cli.d.ts +2 -0
- package/build/main/lib/bin/cli.js +54 -0
- package/build/main/lib/constructor.class.d.ts +3 -0
- package/build/main/lib/constructor.class.js +3 -0
- package/build/main/lib/customTypeArrayNode.class.d.ts +10 -0
- package/build/main/lib/customTypeArrayNode.class.js +25 -0
- package/build/main/lib/customTypeNode.class.d.ts +23 -0
- package/build/main/lib/customTypeNode.class.js +71 -0
- package/build/main/lib/enumNode.class.d.ts +10 -0
- package/build/main/lib/enumNode.class.js +108 -0
- package/build/main/lib/i18nGenerator.d.ts +18 -0
- package/build/main/lib/i18nGenerator.js +135 -0
- package/build/main/lib/i18nNode.class.d.ts +43 -0
- package/build/main/lib/i18nNode.class.js +145 -0
- package/build/main/lib/index.d.ts +31 -0
- package/build/main/lib/index.js +34 -0
- package/build/main/lib/languageNode.class.d.ts +7 -0
- package/build/main/lib/languageNode.class.js +16 -0
- package/build/main/lib/namespaceNode.class.d.ts +6 -0
- package/build/main/lib/namespaceNode.class.js +16 -0
- package/build/main/lib/rootNode.class.d.ts +15 -0
- package/build/main/lib/rootNode.class.js +46 -0
- package/build/main/lib/stringUtil.d.ts +1 -0
- package/build/main/lib/stringUtil.js +7 -0
- package/build/main/lib/textArrayNode.class.d.ts +9 -0
- package/build/main/lib/textArrayNode.class.js +48 -0
- package/build/main/lib/textNode.class.d.ts +17 -0
- package/build/main/lib/textNode.class.js +117 -0
- package/build/main/lib/valueNode.class.d.ts +12 -0
- package/build/main/lib/valueNode.class.js +47 -0
- package/build/main/lib/writer.class.d.ts +10 -0
- package/build/main/lib/writer.class.js +29 -0
- package/build/module/index.d.ts +1 -0
- package/build/module/index.js +2 -0
- package/build/module/lib/arg.class.d.ts +11 -0
- package/build/module/lib/arg.class.js +24 -0
- package/build/module/lib/arguments.class.d.ts +20 -0
- package/build/module/lib/arguments.class.js +52 -0
- package/build/module/lib/ast/abstractContainerElement.d.ts +9 -0
- package/build/module/lib/ast/abstractContainerElement.js +21 -0
- package/build/module/lib/ast/abstractElement.d.ts +16 -0
- package/build/module/lib/ast/abstractElement.js +36 -0
- package/build/module/lib/ast/classDef.class.d.ts +9 -0
- package/build/module/lib/ast/classDef.class.js +22 -0
- package/build/module/lib/ast/containerElement.class.d.ts +17 -0
- package/build/module/lib/ast/containerElement.class.js +1 -0
- package/build/module/lib/ast/element.class.d.ts +12 -0
- package/build/module/lib/ast/element.class.js +1 -0
- package/build/module/lib/ast/functionDef.class.d.ts +10 -0
- package/build/module/lib/ast/functionDef.class.js +13 -0
- package/build/module/lib/ast/interfaceDef.class.d.ts +9 -0
- package/build/module/lib/ast/interfaceDef.class.js +23 -0
- package/build/module/lib/ast/moduleDef.class.d.ts +8 -0
- package/build/module/lib/ast/moduleDef.class.js +39 -0
- package/build/module/lib/ast/namespaceDef.class.d.ts +18 -0
- package/build/module/lib/ast/namespaceDef.class.js +60 -0
- package/build/module/lib/ast/objectDef.class.d.ts +24 -0
- package/build/module/lib/ast/objectDef.class.js +59 -0
- package/build/module/lib/ast/tempContainer.class.d.ts +4 -0
- package/build/module/lib/ast/tempContainer.class.js +9 -0
- package/build/module/lib/ast/typeDef.class.d.ts +7 -0
- package/build/module/lib/ast/typeDef.class.js +11 -0
- package/build/module/lib/bin/cli.d.ts +2 -0
- package/build/module/lib/bin/cli.js +42 -0
- package/build/module/lib/constructor.class.d.ts +3 -0
- package/build/module/lib/constructor.class.js +1 -0
- package/build/module/lib/customTypeArrayNode.class.d.ts +10 -0
- package/build/module/lib/customTypeArrayNode.class.js +22 -0
- package/build/module/lib/customTypeNode.class.d.ts +23 -0
- package/build/module/lib/customTypeNode.class.js +68 -0
- package/build/module/lib/enumNode.class.d.ts +10 -0
- package/build/module/lib/enumNode.class.js +105 -0
- package/build/module/lib/i18nGenerator.d.ts +18 -0
- package/build/module/lib/i18nGenerator.js +124 -0
- package/build/module/lib/i18nNode.class.d.ts +43 -0
- package/build/module/lib/i18nNode.class.js +132 -0
- package/build/module/lib/index.d.ts +31 -0
- package/build/module/lib/index.js +29 -0
- package/build/module/lib/languageNode.class.d.ts +7 -0
- package/build/module/lib/languageNode.class.js +13 -0
- package/build/module/lib/namespaceNode.class.d.ts +6 -0
- package/build/module/lib/namespaceNode.class.js +13 -0
- package/build/module/lib/rootNode.class.d.ts +15 -0
- package/build/module/lib/rootNode.class.js +43 -0
- package/build/module/lib/stringUtil.d.ts +1 -0
- package/build/module/lib/stringUtil.js +4 -0
- package/build/module/lib/textArrayNode.class.d.ts +9 -0
- package/build/module/lib/textArrayNode.class.js +38 -0
- package/build/module/lib/textNode.class.d.ts +17 -0
- package/build/module/lib/textNode.class.js +104 -0
- package/build/module/lib/valueNode.class.d.ts +12 -0
- package/build/module/lib/valueNode.class.js +37 -0
- package/build/module/lib/writer.class.d.ts +10 -0
- package/build/module/lib/writer.class.js +26 -0
- 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,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,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,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 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bkdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvaTE4bkdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDN0MsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRXRELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUkxQyxzQkFBc0I7QUFDdEIsMENBQTBDO0FBQzFDLGlDQUFpQztBQUNqQyx1Q0FBdUM7QUFDdkMsSUFBSTtBQUVKLE1BQU0scUJBQXFCO0lBQ3pCLFlBQTRCLE9BQVk7UUFBWixZQUFPLEdBQVAsT0FBTyxDQUFLO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQU0sbUJBQW1CO0lBQ3ZCLFlBQTRCLFVBQXNCLEVBQWtCLE9BQVk7UUFBcEQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFrQixZQUFPLEdBQVAsT0FBTyxDQUFLO0lBQ2hGLENBQUM7Q0FDRjtBQUVELE1BQU0sd0JBQXdCO0lB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
|
|
@@ -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
|
+
}
|