@coolon/i18n-resource-generator 2.0.2 → 2.0.3

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 (95) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/build/main/lib/arguments.class.d.ts +6 -8
  3. package/build/main/lib/arguments.class.js +9 -2
  4. package/build/main/lib/ast/abstractContainerElement.d.ts +4 -4
  5. package/build/main/lib/ast/abstractContainerElement.js +3 -2
  6. package/build/main/lib/ast/abstractElement.d.ts +2 -2
  7. package/build/main/lib/ast/abstractElement.js +1 -1
  8. package/build/main/lib/ast/containerElement.class.d.ts +11 -10
  9. package/build/main/lib/ast/jsonModule.class.d.ts +8 -0
  10. package/build/main/lib/ast/jsonModule.class.js +21 -0
  11. package/build/main/lib/ast/namespaceDef.class.d.ts +1 -0
  12. package/build/main/lib/ast/namespaceDef.class.js +8 -1
  13. package/build/main/lib/ast/objectDef.class.d.ts +9 -8
  14. package/build/main/lib/ast/objectDef.class.js +11 -7
  15. package/build/main/lib/ast/statementDef.class.d.ts +7 -0
  16. package/build/main/lib/ast/statementDef.class.js +14 -0
  17. package/build/main/lib/bin/cli.js +21 -17
  18. package/build/main/lib/customTypeArrayNode.class.d.ts +6 -6
  19. package/build/main/lib/customTypeArrayNode.class.js +8 -11
  20. package/build/main/lib/customTypeNode.class.d.ts +6 -20
  21. package/build/main/lib/customTypeNode.class.js +18 -20
  22. package/build/main/lib/enumNode.class.d.ts +6 -6
  23. package/build/main/lib/enumNode.class.js +28 -45
  24. package/build/main/lib/i18nGenerator.d.ts +2 -10
  25. package/build/main/lib/i18nGenerator.js +39 -78
  26. package/build/main/lib/i18nNode.class.d.ts +10 -12
  27. package/build/main/lib/i18nNode.class.js +30 -44
  28. package/build/main/lib/namespaceNode.class.d.ts +5 -4
  29. package/build/main/lib/namespaceNode.class.js +4 -4
  30. package/build/main/lib/nodeName.d.ts +13 -0
  31. package/build/main/lib/nodeName.js +90 -0
  32. package/build/main/lib/rootNode.class.d.ts +10 -1
  33. package/build/main/lib/rootNode.class.js +42 -6
  34. package/build/main/lib/textArrayNode.class.d.ts +4 -3
  35. package/build/main/lib/textArrayNode.class.js +6 -5
  36. package/build/main/lib/textNode.class.d.ts +4 -2
  37. package/build/main/lib/textNode.class.js +9 -13
  38. package/build/main/lib/valueNode.class.d.ts +5 -4
  39. package/build/main/lib/valueNode.class.js +5 -5
  40. package/build/main/lib/writer.class.js +2 -2
  41. package/build/module/lib/arguments.class.d.ts +6 -8
  42. package/build/module/lib/arguments.class.js +10 -3
  43. package/build/module/lib/ast/abstractContainerElement.d.ts +4 -4
  44. package/build/module/lib/ast/abstractContainerElement.js +4 -3
  45. package/build/module/lib/ast/abstractElement.d.ts +2 -2
  46. package/build/module/lib/ast/abstractElement.js +1 -1
  47. package/build/module/lib/ast/containerElement.class.d.ts +11 -10
  48. package/build/module/lib/ast/jsonModule.class.d.ts +8 -0
  49. package/build/module/lib/ast/jsonModule.class.js +18 -0
  50. package/build/module/lib/ast/namespaceDef.class.d.ts +1 -0
  51. package/build/module/lib/ast/namespaceDef.class.js +8 -1
  52. package/build/module/lib/ast/objectDef.class.d.ts +9 -8
  53. package/build/module/lib/ast/objectDef.class.js +12 -8
  54. package/build/module/lib/ast/statementDef.class.d.ts +7 -0
  55. package/build/module/lib/ast/statementDef.class.js +11 -0
  56. package/build/module/lib/bin/cli.js +21 -17
  57. package/build/module/lib/customTypeArrayNode.class.d.ts +6 -6
  58. package/build/module/lib/customTypeArrayNode.class.js +9 -12
  59. package/build/module/lib/customTypeNode.class.d.ts +6 -20
  60. package/build/module/lib/customTypeNode.class.js +18 -20
  61. package/build/module/lib/enumNode.class.d.ts +6 -6
  62. package/build/module/lib/enumNode.class.js +30 -47
  63. package/build/module/lib/i18nGenerator.d.ts +2 -10
  64. package/build/module/lib/i18nGenerator.js +49 -87
  65. package/build/module/lib/i18nNode.class.d.ts +10 -12
  66. package/build/module/lib/i18nNode.class.js +30 -41
  67. package/build/module/lib/namespaceNode.class.d.ts +5 -4
  68. package/build/module/lib/namespaceNode.class.js +5 -5
  69. package/build/module/lib/nodeName.d.ts +13 -0
  70. package/build/module/lib/nodeName.js +77 -0
  71. package/build/module/lib/rootNode.class.d.ts +10 -1
  72. package/build/module/lib/rootNode.class.js +42 -6
  73. package/build/module/lib/textArrayNode.class.d.ts +4 -3
  74. package/build/module/lib/textArrayNode.class.js +7 -6
  75. package/build/module/lib/textNode.class.d.ts +4 -2
  76. package/build/module/lib/textNode.class.js +9 -13
  77. package/build/module/lib/valueNode.class.d.ts +5 -4
  78. package/build/module/lib/valueNode.class.js +5 -5
  79. package/build/module/lib/writer.class.js +2 -2
  80. package/fixtures/config.json +1 -0
  81. package/fixtures/ui.alarms.en.yml +108 -0
  82. package/fixtures/ui.common.en.yml +23 -0
  83. package/fixtures/ui.date_time.en.yml +94 -0
  84. package/fixtures/ui.devices.en.yml +288 -0
  85. package/fixtures/ui.lux.en.yml +44 -0
  86. package/fixtures/ui.notification.en.yml +238 -0
  87. package/fixtures/ui.places.en.yml +104 -0
  88. package/fixtures/ui.reports.en.yml +138 -0
  89. package/fixtures/ui.scene.en.yml +11 -0
  90. package/fixtures/ui.schedule.en.yml +7 -0
  91. package/fixtures/ui.search.en.yml +73 -0
  92. package/fixtures/ui.validation.en.yml +63 -0
  93. package/fixtures/ui.zones.en.yml +121 -0
  94. package/package.json +7 -4
  95. package/fixtures/test.yml +0 -20
@@ -1,99 +1,66 @@
1
1
  /* tslint:disable */
2
2
  import * as fs from 'fs';
3
3
  import * as yaml from 'js-yaml';
4
- import { Module } from "./ast/moduleDef.class";
5
- import { CustomTypeArrayNode } from "./customTypeArrayNode.class";
6
- import { CustomTypeNode } from "./customTypeNode.class";
7
- import { EnumNode } from "./enumNode.class";
8
- import { NameSpaceNode } from "./namespaceNode.class";
9
- import { RootNode } from "./rootNode.class";
10
- import { TextArrayNode } from "./textArrayNode.class";
11
- import { TextNode } from "./textNode.class";
12
- import { ValueNode } from "./valueNode.class";
13
- import { RootWriter } from "./writer.class";
4
+ import { Module } from './ast/moduleDef.class';
5
+ import { CustomTypeArrayNode } from './customTypeArrayNode.class';
6
+ import { CustomTypeNode } from './customTypeNode.class';
7
+ import { EnumNode } from './enumNode.class';
8
+ import { NameSpaceNode } from './namespaceNode.class';
9
+ import { RootNode } from './rootNode.class';
10
+ import { TextArrayNode } from './textArrayNode.class';
11
+ import { TextNode } from './textNode.class';
12
+ import { ValueNode } from './valueNode.class';
13
+ import { RootWriter } from './writer.class';
14
14
  // TODO: use factories
15
15
  // interface NodeFactory<T extends Node> {
16
16
  // matches(data:any):boolean;
17
17
  // create(name:string, data:any):T;
18
18
  // }
19
- class EnumResourceContainer {
20
- constructor(content) {
21
- this.content = content;
22
- }
23
- }
24
- class CustomTypeContainer {
25
- constructor(customType, content) {
26
- this.customType = customType;
27
- this.content = content;
28
- }
29
- }
30
- class CustomTypeArrayContainer {
31
- constructor(customType, content) {
32
- this.customType = customType;
33
- this.content = content;
34
- }
35
- }
19
+ //
20
+ // class EnumResourceContainer {
21
+ // constructor(public readonly content: any) {
22
+ // }
23
+ // }
24
+ //
25
+ // class CustomTypeContainer {
26
+ // constructor(public readonly customType: NodeName, public readonly content: any) {
27
+ // }
28
+ // }
29
+ //
30
+ // class CustomTypeArrayContainer {
31
+ // constructor(public readonly customType: NodeName, public readonly content: any) {
32
+ // }
33
+ // }
36
34
  // TODO: merge this with nodes, so nodes become a type, not sure if this will be easy to do or not as
37
35
  // we don't have the key name at this point. Might have to put it all in the factory so it can be called
38
36
  // to embed a marker in the data and use that when checking the node type.
39
- const EnumResourceType = new yaml.Type('!Enum', {
40
- kind: 'mapping',
41
- construct: function (data) {
42
- data = data || {}; // in case of empty node
43
- return new EnumResourceContainer(data);
44
- },
45
- instanceOf: EnumResourceContainer
46
- // `represent` is omitted here. So, Space objects will be dumped as is.
47
- // That is regular mapping with three key-value pairs but with !space tag.
48
- });
49
- export class CustomType {
50
- constructor(className, importDeclaration) {
51
- this.className = className;
52
- this.importDeclaration = importDeclaration;
53
- }
54
- asYamlType() {
55
- const self = this;
56
- return new yaml.Type(`!${this.className}`, {
57
- kind: 'mapping',
58
- construct: function (data) {
59
- data = data || {}; // in case of empty node
60
- return new CustomTypeContainer(self, data);
61
- },
62
- instanceOf: CustomTypeContainer
63
- // `represent` is omitted here. So, Space objects will be dumped as is.
64
- // That is regular mapping with three key-value pairs but with !space tag.
65
- });
66
- }
67
- asYamlListType() {
68
- const self = this;
69
- return new yaml.Type(`!List(${this.className})`, {
70
- kind: 'mapping',
71
- construct: function (data) {
72
- data = data || {}; // in case of empty node
73
- return new CustomTypeArrayContainer(self, data);
74
- },
75
- instanceOf: CustomTypeArrayContainer
76
- // `represent` is omitted here. So, Space objects will be dumped as is.
77
- // That is regular mapping with three key-value pairs but with !space tag.
78
- });
79
- }
80
- }
37
+ // const EnumResourceType = new yaml.Type('!Enum', {
38
+ // kind: 'mapping',
39
+ // construct: function (data) {
40
+ // data = data || {}; // in case of empty node
41
+ // return new EnumResourceContainer(data);
42
+ // },
43
+ // instanceOf: EnumResourceContainer
44
+ // // `represent` is omitted here. So, Space objects will be dumped as is.
45
+ // // That is regular mapping with three key-value pairs but with !space tag.
46
+ // });
47
+ //
48
+ //
81
49
  // TODO: replace custom gulp task with https://www.npmjs.com/package/gulp-reduce-file
82
50
  export class I18nGenerator {
83
51
  constructor() {
84
- this.customTypes = [];
85
52
  this.rootNode = new RootNode();
86
53
  this.rootNode.registerNodeTypes([
87
- CustomTypeArrayNode, CustomTypeNode, EnumNode, TextNode, TextArrayNode, ValueNode, NameSpaceNode
54
+ EnumNode, CustomTypeArrayNode, CustomTypeNode, TextNode, TextArrayNode, ValueNode, NameSpaceNode
88
55
  ]);
89
56
  }
90
57
  registerType(typeName, importDeclaration) {
91
- this.customTypes.push(new CustomType(typeName, importDeclaration));
58
+ this.rootNode.registerCustomType({ typeName, importDeclaration });
92
59
  }
93
60
  readFile(fileName) {
94
- let options = { schema: this.getSchema() };
61
+ // let options = {schema: this.getSchema()};
95
62
  console.log(`Loading: ${fileName}`);
96
- const yamlData = yaml.safeLoad(fs.readFileSync(fileName, 'utf8'), { schema: this.getSchema() });
63
+ const yamlData = yaml.safeLoad(fs.readFileSync(fileName, 'utf8'));
97
64
  try {
98
65
  this.rootNode.parse(yamlData);
99
66
  }
@@ -101,22 +68,17 @@ export class I18nGenerator {
101
68
  throw new Error(`Failed to parse file:${fileName}\n-> ${e.message}\n-> ${e.stack}`);
102
69
  }
103
70
  }
104
- getSchema() {
105
- if (!this._schema) {
106
- let types = [].concat(EnumResourceType, this.customTypes.map(type => type.asYamlType()), this.customTypes.map(type => type.asYamlListType()));
107
- this._schema = yaml.Schema.create(types);
108
- }
109
- return this._schema;
110
- }
111
- toString() {
71
+ getApiContent() {
112
72
  const writer = new RootWriter();
113
73
  const module = new Module();
114
- this.customTypes.forEach(type => {
115
- module.addImport(type.importDeclaration);
116
- });
117
- this.rootNode.compile(module);
74
+ this.rootNode.generateApi(module);
118
75
  module.writeBody(writer);
119
76
  return writer.toString();
120
77
  }
78
+ getDefaultBundleContent() {
79
+ const json = {};
80
+ this.rootNode.generateMessageBundle(json);
81
+ return JSON.stringify(json, null, 3);
82
+ }
121
83
  }
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bkdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvaTE4bkdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJMUMsc0JBQXNCO0FBQ3RCLDBDQUEwQztBQUMxQyxpQ0FBaUM7QUFDakMsdUNBQXVDO0FBQ3ZDLElBQUk7QUFFSixNQUFNLHFCQUFxQjtJQUN6QixZQUE0QixPQUFZO1FBQVosWUFBTyxHQUFQLE9BQU8sQ0FBSztJQUN4QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLG1CQUFtQjtJQUN2QixZQUE0QixVQUFzQixFQUFrQixPQUFZO1FBQXBELGVBQVUsR0FBVixVQUFVLENBQVk7UUFBa0IsWUFBTyxHQUFQLE9BQU8sQ0FBSztJQUNoRixDQUFDO0NBQ0Y7QUFFRCxN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
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bkdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvaTE4bkdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJNUMsc0JBQXNCO0FBQ3RCLDBDQUEwQztBQUMxQyxpQ0FBaUM7QUFDakMsdUNBQXVDO0FBQ3ZDLElBQUk7QUFDSixFQUFFO0FBQ0YsZ0NBQWdDO0FBQ2hDLGdEQUFnRDtBQUNoRCxNQUFNO0FBQ04sSUFBSTtBQUNKLEVBQUU7QUFDRiw4QkFBOEI7QUFDOUIsc0ZBQXNGO0FBQ3RGLE1BQU07QUFDTixJQUFJO0FBQ0osRUFBRTtBQUNGLG1DQUFtQztBQUNuQyxzRkFBc0Y7QUFDdEYsTUFBTTtBQUNOLElBQUk7QUFFSixxR0FBcUc7QUFDckcseUdBQXlHO0FBQ3pHLDBFQUEwRTtBQUMxRSxvREFBb0Q7QUFDcEQscUJBQXFCO0FBQ3JCLGlDQUFpQztBQUNqQyxrREFBa0Q7QUFDbEQsOENBQThDO0FBQzlDLE9BQU87QUFDUCxzQ0FBc0M7QUFDdEMsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUMvRSxNQUFNO0FBQ04sRUFBRTtBQUNGLEVBQUU7QUFFRixxRkFBcUY7QUFDckYsTUFBTSxPQUFPLGFBQWE7SUFNeEI7UUFDRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztZQUM5QixRQUFRLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGFBQWE7U0FDakcsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxRQUFnQixFQUFFLGlCQUF5QjtRQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQWdCO1FBQ3ZCLDRDQUE0QztRQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbEUsSUFBSTtZQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQy9CO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixRQUFRLFFBQVEsQ0FBQyxDQUFDLE9BQU8sUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUNyRjtJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekIsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBRUYifQ==
@@ -1,17 +1,18 @@
1
1
  import { Arguments } from './arguments.class';
2
2
  import { ContainerElement } from './ast/containerElement.class';
3
3
  import { Constructor } from './constructor.class';
4
+ import { NodeName } from './nodeName';
4
5
  export declare type NodeConstructor<T extends I18nNode> = {
5
- matches(data: any): boolean;
6
+ matches(name: NodeName, data: any): boolean;
6
7
  new (...args: any[]): T;
7
8
  prototype: T;
8
9
  };
9
10
  export declare class I18nNode {
10
11
  protected parent: I18nNode;
11
- readonly name: string;
12
+ readonly name: NodeName;
12
13
  private childNodes;
13
14
  private templateArgs;
14
- constructor(parent: I18nNode, name: string);
15
+ constructor(parent: I18nNode, name: NodeName);
15
16
  readonly key: string;
16
17
  /**
17
18
  * Returns the full path to this nodes namespace as used in code. Doesn't include the I18n prefix.
@@ -21,23 +22,20 @@ export declare class I18nNode {
21
22
  isRoot(): boolean;
22
23
  pathToRoot(): I18nNode[];
23
24
  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;
25
+ protected parseChild<T extends I18nNode>(name: NodeName, data: any, defaultNodeType: Constructor<T>): I18nNode;
26
+ getOrCreatNode(name: NodeName, type: typeof I18nNode): I18nNode;
26
27
  rootNode(): I18nNode;
27
28
  nodeTypes(): NodeConstructor<any>[];
28
- protected computeNodeTypeOf(data: any): NodeConstructor<any>;
29
+ protected computeNodeTypeOf(name: NodeName, data: any): NodeConstructor<any>;
29
30
  protected supportedChildNodeTypes(): NodeConstructor<any>[];
30
- protected withEachProperty(yamlData: any, cb: (name: string, data: any) => void): void;
31
+ protected withEachProperty(yamlData: any, cb: (name: NodeName, data: any) => void): void;
31
32
  protected readonly children: I18nNode[];
32
33
  protected eachChild(cb: (node: I18nNode) => void): void;
33
34
  getArgs(): Arguments;
34
35
  hasArgs(): boolean;
35
- readonly safeName: string;
36
- readonly javaScriptName: string;
37
- readonly camelCaseName: string;
38
36
  readonly namespaceName: string;
39
37
  readonly className: string;
40
38
  readonly fqClassName: string;
41
- readonly snakeCaseName: string;
42
- compile(parent: ContainerElement): void;
39
+ generateApi(parent: ContainerElement): void;
40
+ generateMessageBundle(parent: {}): void;
43
41
  }
@@ -1,13 +1,6 @@
1
1
  import * as _ from 'lodash';
2
- import S from 'string';
3
2
  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
- }
3
+ import { NodeName } from './nodeName';
11
4
  export class I18nNode {
12
5
  constructor(parent, name) {
13
6
  this.parent = parent;
@@ -16,7 +9,7 @@ export class I18nNode {
16
9
  this.templateArgs = new Arguments();
17
10
  }
18
11
  get key() {
19
- return this.pathToRoot().slice(1).map(a => a.name).join('.');
12
+ return this.pathToRoot().slice(1).map(a => a.name.asJsIdentifier).join('.');
20
13
  }
21
14
  /**
22
15
  * Returns the full path to this nodes namespace as used in code. Doesn't include the I18n prefix.
@@ -37,29 +30,29 @@ export class I18nNode {
37
30
  }
38
31
  parse(yamlData) {
39
32
  this.withEachProperty(yamlData, (name, data) => {
40
- this.parseEntry(name, data, this.computeNodeTypeOf(data));
33
+ this.parseChild(name, data, this.computeNodeTypeOf(name, data));
41
34
  });
42
35
  }
43
- parseEntry(name, data, defaultNodeType) {
44
- const node = this.getOrCreatNode(name, defaultNodeType);
36
+ parseChild(name, data, defaultNodeType) {
37
+ const child = this.getOrCreatNode(name, defaultNodeType);
45
38
  if (this.constructor['acceptsChildNodesOfType']) {
46
39
  const types = this.constructor['acceptsChildNodesOfType']();
47
- if (!_.find(types, type => node instanceof type)) {
40
+ if (!_.find(types, type => child instanceof type)) {
48
41
  throw new Error(`Unsupported child type, must be one of ${types.map(t => t.name).join()}, got ${defaultNodeType.name}.`);
49
42
  }
50
43
  }
51
- node.parse(data);
52
- return node;
44
+ child.parse(data);
45
+ return child;
53
46
  }
54
47
  getOrCreatNode(name, type) {
55
- let node = this.childNodes.get(name);
48
+ let node = this.childNodes.get(name.asJsIdentifier);
56
49
  if (node && node.constructor != type) {
57
- throw new Error(`Existing node named ${name} has different type, expected ${type['name']}, got ${node.constructor['name']}`);
50
+ throw new Error(`Existing node named ${name} has different type, expected ${type['nodeName']}, got ${node.constructor['nodeName']}`);
58
51
  }
59
- // console.log(`--> getOrCreateNode(${name}, ${type}) ${node ? 'found' : 'created'}`);
52
+ // console.log(`--> getOrCreateNode(${nodeName}, ${type}) ${node ? 'found' : 'created'}`);
60
53
  if (!node) {
61
54
  node = new type(this, name);
62
- this.childNodes.set(name, node);
55
+ this.childNodes.set(name.asJsIdentifier, node);
63
56
  }
64
57
  return node;
65
58
  }
@@ -69,8 +62,8 @@ export class I18nNode {
69
62
  nodeTypes() {
70
63
  return this.rootNode().nodeTypes();
71
64
  }
72
- computeNodeTypeOf(data) {
73
- const type = _.find(this.supportedChildNodeTypes(), it => it.matches(data));
65
+ computeNodeTypeOf(name, data) {
66
+ const type = _.find(this.supportedChildNodeTypes(), it => it.matches(name, data));
74
67
  if (!type) {
75
68
  throw new Error(`no matching node type found for ${this.accessor}`);
76
69
  }
@@ -82,10 +75,11 @@ export class I18nNode {
82
75
  withEachProperty(yamlData, cb) {
83
76
  if (yamlData) {
84
77
  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)}'`);
78
+ const name = NodeName.parse(unsafeKey);
79
+ if (name.isReserved()) {
80
+ console.log(`Warning: Yaml key '${unsafeKey}' in ${this.key} is a reserved word, converting to '${name.safeName}'`);
87
81
  }
88
- cb(unsafeKey, yamlData[unsafeKey]);
82
+ cb(name, yamlData[unsafeKey]);
89
83
  });
90
84
  }
91
85
  }
@@ -101,32 +95,27 @@ export class I18nNode {
101
95
  hasArgs() {
102
96
  return this.getArgs().any();
103
97
  }
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
98
  get namespaceName() {
115
- return this.javaScriptName;
99
+ return this.name.asJsIdentifier;
116
100
  }
117
101
  get className() {
118
- return this.javaScriptName[0].toUpperCase() + this.javaScriptName.slice(1);
102
+ return this.name.asClassName;
119
103
  }
120
104
  get fqClassName() {
121
105
  // the root node has no className and the second one is the language
122
106
  let parents = this.pathToRoot().slice(2);
123
107
  return parents.map(n => n.className).join('');
124
108
  }
125
- get snakeCaseName() {
126
- return this.name;
127
- }
128
- compile(parent) {
109
+ generateApi(parent) {
129
110
  throw new Error('abstract method');
130
111
  }
112
+ generateMessageBundle(parent) {
113
+ const me = {};
114
+ parent[this.namespaceName] = me;
115
+ this.eachChild(child => {
116
+ // console.log({child: child.constructor});
117
+ return child.generateMessageBundle(me);
118
+ });
119
+ }
131
120
  }
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bk5vZGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2kxOG5Ob2RlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFLOUMsTUFBTSxhQUFhLEdBQWEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQVFwRSxTQUFTLFFBQVEsQ0FBQyxJQUFZO0lBQzVCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM3RCxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsSUFBWTtJQUM1QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2QyxDQUFDO0FBRUQsTUFBTSxPQUFPLFFBQVE7SUFLbkIsWUFBc0IsTUFBZ0IsRUFBa0IsSUFBWTtRQUE5QyxXQUFNLEdBQU4sTUFBTSxDQUFVO1FBQWtCLFNBQUksR0FBSixJQUFJLENBQVE7UUFINUQsZUFBVSxHQUEwQixJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUNoRSxpQkFBWSxHQUFjLElBQUksU0FBUyxFQUFFLENBQUM7SUFHbEQsQ0FBQztJQUVELElBQUksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9E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
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bk5vZGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2kxOG5Ob2RlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUc5QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBU3RDLE1BQU0sT0FBTyxRQUFRO0lBS25CLFlBQXNCLE1BQWdCLEVBQWtCLElBQWM7UUFBaEQsV0FBTSxHQUFOLE1BQU0sQ0FBVTtRQUFrQixTQUFJLEdBQUosSUFBSSxDQUFVO1FBSDlELGVBQVUsR0FBMEIsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFDaEUsaUJBQVksR0FBYyxJQUFJLFNBQVMsRUFBRSxDQUFDO0lBR2xELENBQUM7SUFHRCxJQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1YsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMxRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLFNBQW1CO1FBQ25DLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFD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
@@ -1,6 +1,7 @@
1
- import { I18nNode } from "./i18nNode.class";
2
- import { ContainerElement } from "./ast/containerElement.class";
1
+ import { ContainerElement } from './ast/containerElement.class';
2
+ import { I18nNode } from './i18nNode.class';
3
+ import { NodeName } from './nodeName';
3
4
  export declare class NameSpaceNode extends I18nNode {
4
- static matches(yamlData: any): boolean;
5
- compile(parent: ContainerElement): void;
5
+ static matches(name: NodeName, yamlData: any): boolean;
6
+ generateApi(parent: ContainerElement): void;
6
7
  }
@@ -1,13 +1,13 @@
1
- import { I18nNode } from "./i18nNode.class";
1
+ import { I18nNode } from './i18nNode.class';
2
2
  export class NameSpaceNode extends I18nNode {
3
- static matches(yamlData) {
3
+ static matches(name, yamlData) {
4
4
  // we're fallback so we're greedy, just make sure I'm last in the list of matchers
5
5
  return true;
6
6
  }
7
- compile(parent) {
7
+ generateApi(parent) {
8
8
  parent.nestedContainer(this.namespaceName, namespace => {
9
- this.eachChild(child => child.compile(namespace));
9
+ this.eachChild(child => child.generateApi(namespace));
10
10
  });
11
11
  }
12
12
  }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNwYWNlTm9kZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbmFtZXNwYWNlTm9kZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFJMUMsTUFBTSxPQUFPLGFBQWMsU0FBUSxRQUFRO0lBRXZDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBYTtRQUN4QixtRkFBbUY7UUFDbkYsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUF3QjtRQUM1QixNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FFSiJ9
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNwYWNlTm9kZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbmFtZXNwYWNlTm9kZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHNUMsTUFBTSxPQUFPLGFBQWMsU0FBUSxRQUFRO0lBRXpDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBYyxFQUFFLFFBQWE7UUFDMUMsbUZBQW1GO1FBQ25GLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUF3QjtRQUNsQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FFRiJ9
@@ -0,0 +1,13 @@
1
+ export declare class NodeName {
2
+ private name;
3
+ readonly customTypeName?: string;
4
+ readonly isArray?: boolean;
5
+ constructor(name: string, customTypeName?: string, isArray?: boolean);
6
+ isReserved(): boolean;
7
+ readonly safeName: string;
8
+ readonly asJsIdentifier: string;
9
+ readonly asClassName: string;
10
+ }
11
+ export declare namespace NodeName {
12
+ function parse(name: string): NodeName;
13
+ }
@@ -0,0 +1,77 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
11
+ import * as _ from 'lodash';
12
+ import S from 'string';
13
+ function safeName(name) {
14
+ return _.includes(reservedWords, name) ? `${name}_` : name;
15
+ }
16
+ function camelize(text) {
17
+ return S(text).camelize().toString();
18
+ }
19
+ const reservedWords = ['default', 'switch', 'if', 'else'];
20
+ export class NodeName {
21
+ constructor(name, customTypeName, isArray) {
22
+ this.name = name;
23
+ this.customTypeName = customTypeName;
24
+ this.isArray = isArray;
25
+ }
26
+ isReserved() {
27
+ return reservedWords.includes(this.name);
28
+ }
29
+ get safeName() {
30
+ let camelName = camelize(this.name);
31
+ let safeName = reservedWords.includes(camelName) ? `${camelName}_` : camelName;
32
+ // console.log({ safeName });
33
+ return safeName;
34
+ }
35
+ get asJsIdentifier() {
36
+ return this.safeName;
37
+ }
38
+ get asClassName() {
39
+ return this.asJsIdentifier[0].toUpperCase() + this.asJsIdentifier.slice(1);
40
+ }
41
+ }
42
+ __decorate([
43
+ Memoize(),
44
+ __metadata("design:type", Function),
45
+ __metadata("design:paramtypes", []),
46
+ __metadata("design:returntype", Boolean)
47
+ ], NodeName.prototype, "isReserved", null);
48
+ __decorate([
49
+ Memoize(),
50
+ __metadata("design:type", String),
51
+ __metadata("design:paramtypes", [])
52
+ ], NodeName.prototype, "safeName", null);
53
+ __decorate([
54
+ Memoize(),
55
+ __metadata("design:type", String),
56
+ __metadata("design:paramtypes", [])
57
+ ], NodeName.prototype, "asJsIdentifier", null);
58
+ __decorate([
59
+ Memoize(),
60
+ __metadata("design:type", String),
61
+ __metadata("design:paramtypes", [])
62
+ ], NodeName.prototype, "asClassName", null);
63
+ (function (NodeName) {
64
+ const CUSTOM_TYPE_NAME_REGEX = /^([^\(]*)\(([^\[)]*)(\[\])?\)\s*$/;
65
+ function parse(name) {
66
+ const match = CUSTOM_TYPE_NAME_REGEX.exec(name);
67
+ if (match) {
68
+ // console.log(match);
69
+ return new NodeName(match[1], match[2], !!match[3]);
70
+ }
71
+ else {
72
+ return new NodeName(name);
73
+ }
74
+ }
75
+ NodeName.parse = parse;
76
+ })(NodeName || (NodeName = {}));
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZU5hbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL25vZGVOYW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMzRSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFFdkIsU0FBUyxRQUFRLENBQUMsSUFBWTtJQUM1QixPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0QsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLElBQVk7SUFDNUIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sYUFBYSxHQUFhLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFcEUsTUFBTSxPQUFPLFFBQVE7SUFFbkIsWUFBb0IsSUFBWSxFQUNYLGNBQXVCLEVBQ3ZCLE9BQWlCO1FBRmxCLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWCxtQkFBYyxHQUFkLGNBQWMsQ0FBUztRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFVO0lBQ3RDLENBQUM7SUFHRCxVQUFVO1FBQ1IsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBR0QsSUFBSSxRQUFRO1FBQ1YsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDL0UsNkJBQTZCO1FBQzdCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFHRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFHRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztDQUVGO0FBdEJDO0lBREMsT0FBTyxFQUFFOzs7OzBDQUdUO0FBR0Q7SUFEQyxPQUFPLEVBQUU7Ozt3Q0FNVDtBQUdEO0lBREMsT0FBTyxFQUFFOzs7OENBR1Q7QUFHRDtJQURDLE9BQU8sRUFBRTs7OzJDQUdUO0FBSUgsV0FBaUIsUUFBUTtJQUN2QixNQUFNLHNCQUFzQixHQUFHLG1DQUFtQyxDQUFDO0lBRW5FLFNBQWdCLEtBQUssQ0FBQyxJQUFZO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLEtBQUssRUFBRTtZQUNULHNCQUFzQjtZQUN0QixPQUFPLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JEO2FBQU07WUFDTCxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQVJlLGNBQUssUUFRcEIsQ0FBQTtBQUNILENBQUMsRUFaZ0IsUUFBUSxLQUFSLFFBQVEsUUFZeEIifQ==
@@ -2,6 +2,7 @@ import { Module } from './ast/moduleDef.class';
2
2
  import { I18nNode, NodeConstructor } from './i18nNode.class';
3
3
  export declare class RootNode extends I18nNode {
4
4
  private _nodeTypes;
5
+ private readonly customTypesImports;
5
6
  constructor();
6
7
  registerNodeTypes(nodeTypes: NodeConstructor<any>[]): void;
7
8
  nodeTypes(): NodeConstructor<any>[];
@@ -10,5 +11,13 @@ export declare class RootNode extends I18nNode {
10
11
  /*********
11
12
  *
12
13
  ********/
13
- compile(module: Module): void;
14
+ generateApi(module: Module): void;
15
+ /*********
16
+ *
17
+ ********/
18
+ generateMessageBundle(object: {}): void;
19
+ registerCustomType(customType: {
20
+ typeName: string;
21
+ importDeclaration: string;
22
+ }): void;
14
23
  }
@@ -1,8 +1,11 @@
1
+ import { Arguments } from './arguments.class';
1
2
  import { I18nNode } from './i18nNode.class';
3
+ import { NodeName } from './nodeName';
2
4
  export class RootNode extends I18nNode {
3
5
  constructor() {
4
- super(null, '');
6
+ super(null, new NodeName(''));
5
7
  this._nodeTypes = [];
8
+ this.customTypesImports = new Map();
6
9
  }
7
10
  registerNodeTypes(nodeTypes) {
8
11
  this._nodeTypes = nodeTypes;
@@ -12,7 +15,7 @@ export class RootNode extends I18nNode {
12
15
  }
13
16
  parse(yamlData) {
14
17
  this.withEachProperty(yamlData, (name, data) => {
15
- const node = this.getOrCreatNode(name, this.computeNodeTypeOf(data));
18
+ const node = this.getOrCreatNode(name, this.computeNodeTypeOf(name, data));
16
19
  node.parse(data);
17
20
  });
18
21
  }
@@ -22,19 +25,52 @@ export class RootNode extends I18nNode {
22
25
  /*********
23
26
  *
24
27
  ********/
25
- compile(module) {
28
+ generateApi(module) {
26
29
  module.addHeader(`/******** IMPORTANT *********`);
27
30
  module.addHeader(` * `);
28
31
  module.addHeader(` * This file is automatically generated. Any edits will be lost.`);
29
32
  module.addHeader(` * `);
30
33
  module.addHeader(' ****/');
31
34
  module.addHeader('/* tslint:disable:no-shadowed-variable */');
32
- module.addImport(`import * as formatMessage from 'format-message'`);
35
+ module.addImport(`import MessageFormat from 'message-format'`);
36
+ this.customTypesImports.forEach((importDeclaration, className) => {
37
+ module.addImport(importDeclaration);
38
+ });
39
+ module.addImport('import defaultBundle from \'./locales/en.json\'');
33
40
  module.nestedContainer('I18n', namespace => {
41
+ namespace.createStatement('let _locale:string = "en"');
42
+ namespace.createStatement('let _activeBundle:any = null');
43
+ namespace.createStatement('const _bundles = new Map<string,any>()');
44
+ const args = Arguments.createAll({
45
+ locale: 'string',
46
+ bundle: 'any'
47
+ });
48
+ namespace.createFunction('registerBundle', args, 'void', writer => {
49
+ writer.println(`if (_bundles.has(locale)) { throw new Error("bundle already registered for: " + locale)}`);
50
+ writer.println(`_bundles.set(locale, bundle);`);
51
+ });
52
+ namespace.createFunction('setLanguage', Arguments.createSingle('locale', 'string'), 'void', writer => {
53
+ writer.println(`if (!_bundles.has(locale)) { throw new Error("No bundle registered for: " + locale)}`);
54
+ writer.println(`_locale = locale;`);
55
+ writer.println(`_activeBundle = _bundles.get(_locale);`);
56
+ });
57
+ namespace.createStatement('registerBundle("en", defaultBundle)');
58
+ namespace.createStatement('setLanguage("en")');
34
59
  this.eachChild(child => {
35
- child.compile(namespace);
60
+ child.generateApi(namespace);
36
61
  });
37
62
  });
38
63
  }
64
+ /*********
65
+ *
66
+ ********/
67
+ generateMessageBundle(object) {
68
+ this.eachChild(child => {
69
+ child.generateMessageBundle(object);
70
+ });
71
+ }
72
+ registerCustomType(customType) {
73
+ this.customTypesImports.set(customType.typeName, customType.importDeclaration);
74
+ }
39
75
  }
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdE5vZGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Jvb3ROb2RlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFFN0QsTUFBTSxPQUFPLFFBQVMsU0FBUSxRQUFRO0lBSXBDO1FBQ0UsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUhWLGVBQVUsR0FBMkIsRUFBRSxDQUFDO0lBSWhELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUFpQztRQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQWE7UUFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLElBQVksRUFBRSxJQUFTLEVBQUUsRUFBRTtZQUMxRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELGlCQUFpQixDQUFDLFNBQW1CO1FBQ25DLFFBQVE7SUFDVixDQUFDO0lBRUQ7O2NBRVU7SUFDVixPQUFPLENBQUMsTUFBYztRQUVwQixNQUFNLENBQUMsU0FBUyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDbEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsU0FBUyxDQUFDLG1FQUFtRSxDQUFDLENBQUM7UUFDdEYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxTQUFTLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUM5RCxNQUFNLENBQUMsU0FBUyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFFcEUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDckIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUVGIn0=
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdE5vZGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Jvb3ROb2RlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUc5QyxPQUFPLEVBQUUsUUFBUSxFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdEMsTUFBTSxPQUFPLFFBQVMsU0FBUSxRQUFRO0lBS3BDO1FBQ0UsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBSnhCLGVBQVUsR0FBMkIsRUFBRSxDQUFDO1FBQy9CLHVCQUFrQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBSWhFLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUFpQztRQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQWE7UUFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLElBQWMsRUFBRSxJQUFTLEVBQUUsRUFBRTtZQUM1RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUFtQjtRQUNuQyxRQUFRO0lBQ1YsQ0FBQztJQUVEOztjQUVVO0lBQ1YsV0FBVyxDQUFDLE1BQWM7UUFDeEIsTUFBTSxD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