@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.
- package/CHANGELOG.md +5 -0
- package/build/main/lib/arguments.class.d.ts +6 -8
- package/build/main/lib/arguments.class.js +9 -2
- package/build/main/lib/ast/abstractContainerElement.d.ts +4 -4
- package/build/main/lib/ast/abstractContainerElement.js +3 -2
- package/build/main/lib/ast/abstractElement.d.ts +2 -2
- package/build/main/lib/ast/abstractElement.js +1 -1
- package/build/main/lib/ast/containerElement.class.d.ts +11 -10
- package/build/main/lib/ast/jsonModule.class.d.ts +8 -0
- package/build/main/lib/ast/jsonModule.class.js +21 -0
- package/build/main/lib/ast/namespaceDef.class.d.ts +1 -0
- package/build/main/lib/ast/namespaceDef.class.js +8 -1
- package/build/main/lib/ast/objectDef.class.d.ts +9 -8
- package/build/main/lib/ast/objectDef.class.js +11 -7
- package/build/main/lib/ast/statementDef.class.d.ts +7 -0
- package/build/main/lib/ast/statementDef.class.js +14 -0
- package/build/main/lib/bin/cli.js +21 -17
- package/build/main/lib/customTypeArrayNode.class.d.ts +6 -6
- package/build/main/lib/customTypeArrayNode.class.js +8 -11
- package/build/main/lib/customTypeNode.class.d.ts +6 -20
- package/build/main/lib/customTypeNode.class.js +18 -20
- package/build/main/lib/enumNode.class.d.ts +6 -6
- package/build/main/lib/enumNode.class.js +28 -45
- package/build/main/lib/i18nGenerator.d.ts +2 -10
- package/build/main/lib/i18nGenerator.js +39 -78
- package/build/main/lib/i18nNode.class.d.ts +10 -12
- package/build/main/lib/i18nNode.class.js +30 -44
- package/build/main/lib/namespaceNode.class.d.ts +5 -4
- package/build/main/lib/namespaceNode.class.js +4 -4
- package/build/main/lib/nodeName.d.ts +13 -0
- package/build/main/lib/nodeName.js +90 -0
- package/build/main/lib/rootNode.class.d.ts +10 -1
- package/build/main/lib/rootNode.class.js +42 -6
- package/build/main/lib/textArrayNode.class.d.ts +4 -3
- package/build/main/lib/textArrayNode.class.js +6 -5
- package/build/main/lib/textNode.class.d.ts +4 -2
- package/build/main/lib/textNode.class.js +9 -13
- package/build/main/lib/valueNode.class.d.ts +5 -4
- package/build/main/lib/valueNode.class.js +5 -5
- package/build/main/lib/writer.class.js +2 -2
- package/build/module/lib/arguments.class.d.ts +6 -8
- package/build/module/lib/arguments.class.js +10 -3
- package/build/module/lib/ast/abstractContainerElement.d.ts +4 -4
- package/build/module/lib/ast/abstractContainerElement.js +4 -3
- package/build/module/lib/ast/abstractElement.d.ts +2 -2
- package/build/module/lib/ast/abstractElement.js +1 -1
- package/build/module/lib/ast/containerElement.class.d.ts +11 -10
- package/build/module/lib/ast/jsonModule.class.d.ts +8 -0
- package/build/module/lib/ast/jsonModule.class.js +18 -0
- package/build/module/lib/ast/namespaceDef.class.d.ts +1 -0
- package/build/module/lib/ast/namespaceDef.class.js +8 -1
- package/build/module/lib/ast/objectDef.class.d.ts +9 -8
- package/build/module/lib/ast/objectDef.class.js +12 -8
- package/build/module/lib/ast/statementDef.class.d.ts +7 -0
- package/build/module/lib/ast/statementDef.class.js +11 -0
- package/build/module/lib/bin/cli.js +21 -17
- package/build/module/lib/customTypeArrayNode.class.d.ts +6 -6
- package/build/module/lib/customTypeArrayNode.class.js +9 -12
- package/build/module/lib/customTypeNode.class.d.ts +6 -20
- package/build/module/lib/customTypeNode.class.js +18 -20
- package/build/module/lib/enumNode.class.d.ts +6 -6
- package/build/module/lib/enumNode.class.js +30 -47
- package/build/module/lib/i18nGenerator.d.ts +2 -10
- package/build/module/lib/i18nGenerator.js +49 -87
- package/build/module/lib/i18nNode.class.d.ts +10 -12
- package/build/module/lib/i18nNode.class.js +30 -41
- package/build/module/lib/namespaceNode.class.d.ts +5 -4
- package/build/module/lib/namespaceNode.class.js +5 -5
- package/build/module/lib/nodeName.d.ts +13 -0
- package/build/module/lib/nodeName.js +77 -0
- package/build/module/lib/rootNode.class.d.ts +10 -1
- package/build/module/lib/rootNode.class.js +42 -6
- package/build/module/lib/textArrayNode.class.d.ts +4 -3
- package/build/module/lib/textArrayNode.class.js +7 -6
- package/build/module/lib/textNode.class.d.ts +4 -2
- package/build/module/lib/textNode.class.js +9 -13
- package/build/module/lib/valueNode.class.d.ts +5 -4
- package/build/module/lib/valueNode.class.js +5 -5
- package/build/module/lib/writer.class.js +2 -2
- package/fixtures/config.json +1 -0
- package/fixtures/ui.alarms.en.yml +108 -0
- package/fixtures/ui.common.en.yml +23 -0
- package/fixtures/ui.date_time.en.yml +94 -0
- package/fixtures/ui.devices.en.yml +288 -0
- package/fixtures/ui.lux.en.yml +44 -0
- package/fixtures/ui.notification.en.yml +238 -0
- package/fixtures/ui.places.en.yml +104 -0
- package/fixtures/ui.reports.en.yml +138 -0
- package/fixtures/ui.scene.en.yml +11 -0
- package/fixtures/ui.schedule.en.yml +7 -0
- package/fixtures/ui.search.en.yml +73 -0
- package/fixtures/ui.validation.en.yml +63 -0
- package/fixtures/ui.zones.en.yml +121 -0
- package/package.json +7 -4
- package/fixtures/test.yml +0 -20
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { ContainerElement } from './ast/containerElement.class';
|
|
1
2
|
import { I18nNode } from './i18nNode.class';
|
|
2
|
-
import {
|
|
3
|
+
import { NodeName } from './nodeName';
|
|
3
4
|
export declare class TextArrayNode extends I18nNode {
|
|
4
5
|
private args;
|
|
5
|
-
static matches(yamlData: any): boolean;
|
|
6
|
+
static matches(name: NodeName, yamlData: any): boolean;
|
|
6
7
|
parse(data: any): void;
|
|
7
|
-
|
|
8
|
+
generateApi(container: ContainerElement): void;
|
|
8
9
|
createFunctionBody(out: any): void;
|
|
9
10
|
}
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
import * as _ from 'lodash';
|
|
2
2
|
import { I18nNode } from './i18nNode.class';
|
|
3
|
-
import {
|
|
3
|
+
import { NodeName } from './nodeName';
|
|
4
|
+
import { TextNode } from './textNode.class';
|
|
4
5
|
export class TextArrayNode extends I18nNode {
|
|
5
|
-
static matches(yamlData) {
|
|
6
|
+
static matches(name, yamlData) {
|
|
6
7
|
return _.isArray(yamlData) && _.reject(yamlData, entry => _.isString(entry)).length == 0;
|
|
7
8
|
}
|
|
8
9
|
parse(data) {
|
|
9
10
|
data.forEach((text, index) => {
|
|
10
|
-
this.
|
|
11
|
+
this.parseChild(NodeName.parse(`line_${index + 1}`), text, TextNode);
|
|
11
12
|
});
|
|
12
13
|
this.eachChild(child => {
|
|
13
14
|
this.getArgs().merge(child.getArgs());
|
|
14
15
|
});
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
container.createFunction(this.
|
|
17
|
+
generateApi(container) {
|
|
18
|
+
container.createFunction(this.name.asJsIdentifier, this.getArgs(), 'string[]', out => {
|
|
18
19
|
this.createFunctionBody(out);
|
|
19
20
|
});
|
|
20
21
|
}
|
|
@@ -35,4 +36,4 @@ export class TextArrayNode extends I18nNode {
|
|
|
35
36
|
out.println(`];`);
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dEFycmF5Tm9kZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdGV4dEFycmF5Tm9kZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUc1QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsTUFBTSxPQUFPLGFBQWMsU0FBUSxRQUFRO0lBSXpDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBYyxFQUFFLFFBQWE7UUFDMUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFTO1FBQ1osSUFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxTQUEyQjtRQUNyQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDbkYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLEdBQUc7UUFDcEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2YsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ3hCLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUM3RDtxQkFBTTtvQkFDTCxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUM3QjtnQkFDRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUUsSUFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Q0FFRiJ9
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { Arg } from './arg.class';
|
|
2
2
|
import { ContainerElement } from './ast/containerElement.class';
|
|
3
3
|
import { I18nNode } from './i18nNode.class';
|
|
4
|
+
import { NodeName } from './nodeName';
|
|
4
5
|
export declare class TextNode extends I18nNode {
|
|
5
6
|
private text;
|
|
6
7
|
private messageSchema;
|
|
7
|
-
static matches(yamlData: any): boolean;
|
|
8
|
+
static matches(name: NodeName, yamlData: any): boolean;
|
|
8
9
|
parse(data: any): void;
|
|
9
|
-
|
|
10
|
+
generateApi(container: ContainerElement): void;
|
|
11
|
+
generateMessageBundle(parent: object): void;
|
|
10
12
|
createFunctionBody(out: any): void;
|
|
11
13
|
valueString(value: any): string;
|
|
12
14
|
protected scanContainer(elements: Element[]): void;
|
|
@@ -11,7 +11,7 @@ import { I18nNode } from './i18nNode.class';
|
|
|
11
11
|
// ["<argName>", "<argFormat>", {option_a: <message_container>, option_b: <message_container>, other: <messsage_container>] for argFormat == select, plural
|
|
12
12
|
//
|
|
13
13
|
export class TextNode extends I18nNode {
|
|
14
|
-
static matches(yamlData) {
|
|
14
|
+
static matches(name, yamlData) {
|
|
15
15
|
return _.isString(yamlData);
|
|
16
16
|
}
|
|
17
17
|
parse(data) {
|
|
@@ -24,25 +24,21 @@ export class TextNode extends I18nNode {
|
|
|
24
24
|
throw new Error(`Invalid message format ${this.key}=${data} -> ${e.message}`);
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
generateApi(container) {
|
|
28
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.
|
|
29
|
+
container.createFunction(this.name.asJsIdentifier, this.getArgs(), 'string', out => {
|
|
30
30
|
this.createFunctionBody(out);
|
|
31
31
|
});
|
|
32
32
|
}
|
|
33
|
+
generateMessageBundle(parent) {
|
|
34
|
+
parent[this.name.asJsIdentifier] = this.text;
|
|
35
|
+
}
|
|
33
36
|
createFunctionBody(out) {
|
|
34
|
-
// const id = this.pathToRoot().slice(1).map(a => a.name).join('_');
|
|
35
37
|
if (this.getArgs().any()) {
|
|
36
|
-
out.println(`return
|
|
37
|
-
id: '${this.key}',
|
|
38
|
-
default: ${this.valueString(this.text)},
|
|
39
|
-
}, ${this.getArgs().asArgsObject()})`);
|
|
38
|
+
out.println(`return new MessageFormat(_locale, _activeBundle.${this.key}).format(${this.getArgs().asArgsObject()});`);
|
|
40
39
|
}
|
|
41
40
|
else {
|
|
42
|
-
out.println(`return
|
|
43
|
-
id: '${this.key}',
|
|
44
|
-
default: ${this.valueString(this.text)},
|
|
45
|
-
})`);
|
|
41
|
+
out.println(`return _activeBundle.${this.key};`);
|
|
46
42
|
}
|
|
47
43
|
}
|
|
48
44
|
valueString(value) {
|
|
@@ -108,4 +104,4 @@ export class TextNode extends I18nNode {
|
|
|
108
104
|
this.getArgs().add(arg);
|
|
109
105
|
}
|
|
110
106
|
}
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dE5vZGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RleHROb2RlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sa0JBQWtCLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHNUMsaUVBQWlFO0FBQ2pFLGdEQUFnRDtBQUNoRCx1QkFBdUI7QUFDdkIsc0JBQXNCO0FBQ3RCLHFDQUFxQztBQUNyQyx1RkFBdUY7QUFDdkYsOEpBQThKO0FBQzlKLEVBQUU7QUFHRixNQUFNLE9BQU8sUUFBUyxTQUFRLFFBQVE7SUFLcEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFjLEVBQUUsUUFBYTtRQUMxQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFTO1FBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFjLENBQUM7UUFDM0IsSUFBSTtZQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3hDO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUMvRTtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsU0FBMkI7UUFDckMscUhBQXFIO1FBQ3JILFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUks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
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
import { ContainerElement } from './ast/containerElement.class';
|
|
1
2
|
import { I18nNode } from './i18nNode.class';
|
|
2
|
-
import {
|
|
3
|
+
import { NodeName } from './nodeName';
|
|
3
4
|
export declare class ValueNode extends I18nNode {
|
|
4
5
|
private data;
|
|
5
|
-
static matches(yamlData: any): boolean;
|
|
6
|
+
static matches(name: NodeName, yamlData: any): boolean;
|
|
6
7
|
static isValue(thing: any): boolean;
|
|
7
8
|
parse(data: any): void;
|
|
8
|
-
|
|
9
|
+
generateApi(out: ContainerElement): void;
|
|
9
10
|
returnType(): string;
|
|
10
|
-
valueType(value: any):
|
|
11
|
+
valueType(value: any): string;
|
|
11
12
|
valueString(value: any): string;
|
|
12
13
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as _ from 'lodash';
|
|
2
|
+
import { Arguments } from './arguments.class';
|
|
2
3
|
import { I18nNode } from './i18nNode.class';
|
|
3
|
-
import { Arguments } from "./arguments.class";
|
|
4
4
|
export class ValueNode extends I18nNode {
|
|
5
|
-
static matches(yamlData) {
|
|
5
|
+
static matches(name, yamlData) {
|
|
6
6
|
return this.isValue(yamlData) || (_.isArray(yamlData) && _.reject(yamlData, entry => this.isValue(entry)).length == 0);
|
|
7
7
|
}
|
|
8
8
|
static isValue(thing) {
|
|
@@ -14,8 +14,8 @@ export class ValueNode extends I18nNode {
|
|
|
14
14
|
parse(data) {
|
|
15
15
|
this.data = data;
|
|
16
16
|
}
|
|
17
|
-
|
|
18
|
-
out.createFunction(this.
|
|
17
|
+
generateApi(out) {
|
|
18
|
+
out.createFunction(this.name.asJsIdentifier, Arguments.empty(), this.returnType(), out => {
|
|
19
19
|
if (_.isArray(this.data)) {
|
|
20
20
|
out.println(` return [${this.data.map(d => this.valueString(d)).join(', ')}];`);
|
|
21
21
|
}
|
|
@@ -34,4 +34,4 @@ export class ValueNode extends I18nNode {
|
|
|
34
34
|
return value;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWVOb2RlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi92YWx1ZU5vZGUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUc1QyxNQUFNLE9BQU8sU0FBVSxTQUFRLFFBQVE7SUFHckMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFjLEVBQUUsUUFBYTtRQUMxQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6SCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFVO1FBQ3ZCLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxxQkFBcUI7SUFDckIsSUFBSTtJQUVKLEtBQUssQ0FBQyxJQUFTO1FBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFxQjtRQUUvQixHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDdkYsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDeEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkY7aUJBQU07Z0JBQ0wsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMxRDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBVTtRQUNsQixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUM7SUFDbEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIn0=
|
|
@@ -9,7 +9,7 @@ export class RootWriter {
|
|
|
9
9
|
func(new ChildWriter(this));
|
|
10
10
|
}
|
|
11
11
|
toString() {
|
|
12
|
-
return this.lines.join(
|
|
12
|
+
return this.lines.join('\n');
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
class ChildWriter {
|
|
@@ -23,4 +23,4 @@ class ChildWriter {
|
|
|
23
23
|
func(new ChildWriter(this));
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi93cml0ZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxPQUFPLFVBQVU7SUFBdkI7UUFDVSxVQUFLLEdBQWEsRUFBRSxDQUFDO0lBYS9CLENBQUM7SUFYQyxPQUFPLENBQUMsRUFBVTtRQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQThCO1FBQ25DLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFdBQVc7SUFFZixZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUNsQyxDQUFDO0lBRUQsT0FBTyxDQUFDLEVBQVU7UUFDaEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUE4QjtRQUNuQyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0YifQ==
|
package/fixtures/config.json
CHANGED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Files in the config/locales directory are used for internationalization
|
|
2
|
+
# and are automatically loaded by Rails. If you want to use locales other
|
|
3
|
+
# than English, add the necessary files in this directory.
|
|
4
|
+
#
|
|
5
|
+
# To use the locales, use `I18n.t`:
|
|
6
|
+
#
|
|
7
|
+
# I18n.t 'hello'
|
|
8
|
+
#
|
|
9
|
+
# In views, this is aliased to just `t`:
|
|
10
|
+
#
|
|
11
|
+
# <%= t('hello') %>
|
|
12
|
+
#
|
|
13
|
+
# To use a different locale, set it with `I18n.locale`:
|
|
14
|
+
#
|
|
15
|
+
# I18n.locale = :es
|
|
16
|
+
#
|
|
17
|
+
# This would use the information in config/locales/es.yml.
|
|
18
|
+
#
|
|
19
|
+
# To learn more, please read the Rails Internationalization guide
|
|
20
|
+
# available at http://guides.rubyonrails.org/i18n.html.
|
|
21
|
+
|
|
22
|
+
ui:
|
|
23
|
+
alarm:
|
|
24
|
+
category(Enum):
|
|
25
|
+
system:
|
|
26
|
+
label: 'System'
|
|
27
|
+
lighting_network:
|
|
28
|
+
label: 'Lighting Network'
|
|
29
|
+
facility_configuration:
|
|
30
|
+
label: 'Configuration'
|
|
31
|
+
|
|
32
|
+
state(Enum):
|
|
33
|
+
active:
|
|
34
|
+
label: 'Active'
|
|
35
|
+
cleared:
|
|
36
|
+
label: 'Cleared'
|
|
37
|
+
everything:
|
|
38
|
+
label: 'All'
|
|
39
|
+
|
|
40
|
+
severity(Enum):
|
|
41
|
+
critical:
|
|
42
|
+
label: 'Critical'
|
|
43
|
+
major:
|
|
44
|
+
label: 'Major'
|
|
45
|
+
minor:
|
|
46
|
+
label: 'Minor'
|
|
47
|
+
warn:
|
|
48
|
+
label: 'Warning'
|
|
49
|
+
|
|
50
|
+
badge:
|
|
51
|
+
tooltip: '{count, plural, =1 {1 active alarm} other {# active alarms}}. Click to view.'
|
|
52
|
+
codeAndDuration: '{code} raised {raisedAt}'
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
system(Enum):
|
|
56
|
+
end_point_configuration_missing:
|
|
57
|
+
label: 'Facility controller endpoint configuration undefined'
|
|
58
|
+
configuration_failure:
|
|
59
|
+
label: 'Configuration failure'
|
|
60
|
+
web_socket_configuration_missing:
|
|
61
|
+
label: 'Web socket configuration undefined'
|
|
62
|
+
web_socket_connection_failure:
|
|
63
|
+
label: 'Web socket connection failure'
|
|
64
|
+
invalid_device:
|
|
65
|
+
label: 'Invalid device definition detected'
|
|
66
|
+
invalid_gateway:
|
|
67
|
+
label: 'Invalid gateway definition detected'
|
|
68
|
+
invalid_area_state:
|
|
69
|
+
label: 'Invalid area state detected'
|
|
70
|
+
invalid_usage_record:
|
|
71
|
+
label: 'Invalid usage record detected'
|
|
72
|
+
invalid_alarm_event_record:
|
|
73
|
+
label: 'Invalid alarm event record detected'
|
|
74
|
+
invalid_device_event_record:
|
|
75
|
+
label: 'Invalid device event record detected'
|
|
76
|
+
invalid_zigbee_joining_session_record:
|
|
77
|
+
label: 'Invalid zigbee joining session record detected'
|
|
78
|
+
invalid_zigbee_network_map_record:
|
|
79
|
+
label: 'Invalid zigbee network map record detected'
|
|
80
|
+
illegal_device_event_type:
|
|
81
|
+
label: 'Illegal device event type'
|
|
82
|
+
orphaned_device_event:
|
|
83
|
+
label: 'Orphaned device event'
|
|
84
|
+
|
|
85
|
+
lighting_network(Enum):
|
|
86
|
+
no_response_from_gateway:
|
|
87
|
+
label: 'Gateway not responding'
|
|
88
|
+
gateway_unreachable:
|
|
89
|
+
label: 'Gateway offline'
|
|
90
|
+
unknown_gateway:
|
|
91
|
+
label: 'Unknown gateway'
|
|
92
|
+
gateway_returned_error:
|
|
93
|
+
label: 'Gateway returned error'
|
|
94
|
+
no_response:
|
|
95
|
+
label: 'No response'
|
|
96
|
+
no_matching_zigbee_device:
|
|
97
|
+
label: 'No matching zigbee device'
|
|
98
|
+
no_alarm_code_for_exception:
|
|
99
|
+
label: 'No alarm code for exception'
|
|
100
|
+
no_such_capability:
|
|
101
|
+
label: 'No such capability'
|
|
102
|
+
unknown_device:
|
|
103
|
+
label: 'Unknown device'
|
|
104
|
+
malformed_response_from_gateway:
|
|
105
|
+
label: 'Malformed response from gateway'
|
|
106
|
+
incompatible_device:
|
|
107
|
+
label: 'Incompatible device detected'
|
|
108
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
ui:
|
|
2
|
+
component:
|
|
3
|
+
form:
|
|
4
|
+
date_picker:
|
|
5
|
+
format: '%-d %b %Y'
|
|
6
|
+
date_range_picker:
|
|
7
|
+
format:
|
|
8
|
+
days: '%-d %b %Y'
|
|
9
|
+
weeks: '%-d %b %Y'
|
|
10
|
+
months: '%b %Y'
|
|
11
|
+
years: '%Y'
|
|
12
|
+
zone:
|
|
13
|
+
zone_navigator:
|
|
14
|
+
drop_down_crumbs: 'In %{crumbs}'
|
|
15
|
+
common:
|
|
16
|
+
labels:
|
|
17
|
+
all_zones: 'All Zones'
|
|
18
|
+
all_areas: 'All Rooms'
|
|
19
|
+
crumbs:
|
|
20
|
+
separator: '/'
|
|
21
|
+
components:
|
|
22
|
+
loading_message:
|
|
23
|
+
simple: 'Loading...'
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
date_time:
|
|
2
|
+
day_names:
|
|
3
|
+
- 'Sunday'
|
|
4
|
+
- 'Monday'
|
|
5
|
+
- 'Tuesday'
|
|
6
|
+
- 'Wednesday'
|
|
7
|
+
- 'Thursday'
|
|
8
|
+
- 'Friday'
|
|
9
|
+
- 'Saturday'
|
|
10
|
+
|
|
11
|
+
day_initials:
|
|
12
|
+
- 'S'
|
|
13
|
+
- 'M'
|
|
14
|
+
- 'T'
|
|
15
|
+
- 'W'
|
|
16
|
+
- 'T'
|
|
17
|
+
- 'F'
|
|
18
|
+
- 'S'
|
|
19
|
+
|
|
20
|
+
date_range(Enum):
|
|
21
|
+
today:
|
|
22
|
+
label: 'Today'
|
|
23
|
+
this_week:
|
|
24
|
+
label: 'This Week'
|
|
25
|
+
last_week:
|
|
26
|
+
label: 'Last Week'
|
|
27
|
+
last_two_weeks:
|
|
28
|
+
label: 'Last 2 Weeks'
|
|
29
|
+
last_six_weeks:
|
|
30
|
+
label: 'Last 6 Weeks'
|
|
31
|
+
this_month:
|
|
32
|
+
label: 'This Month'
|
|
33
|
+
last_month:
|
|
34
|
+
label: 'Last Month'
|
|
35
|
+
last_three_months:
|
|
36
|
+
label: 'Last 3 Months'
|
|
37
|
+
last_six_months:
|
|
38
|
+
label: 'Last 6 Months'
|
|
39
|
+
this_year:
|
|
40
|
+
label: 'This Year'
|
|
41
|
+
last_year:
|
|
42
|
+
label: 'Last Year'
|
|
43
|
+
last_two_years:
|
|
44
|
+
label: 'Last 2 Years'
|
|
45
|
+
last_five_years:
|
|
46
|
+
label: 'Last 5 Years'
|
|
47
|
+
custom:
|
|
48
|
+
label: 'Custom'
|
|
49
|
+
|
|
50
|
+
time_period(Enum):
|
|
51
|
+
millisecond:
|
|
52
|
+
label: 'Milli Second'
|
|
53
|
+
date_format: '%-d %b %Y'
|
|
54
|
+
format: '%{start} – %{end}'
|
|
55
|
+
humanize: '{amount, number} milliseconds'
|
|
56
|
+
second:
|
|
57
|
+
label: 'Second'
|
|
58
|
+
date_format: '%-d %b %Y'
|
|
59
|
+
format: '%{start} – %{end}'
|
|
60
|
+
humanize: '{amount, number} seconds'
|
|
61
|
+
minute:
|
|
62
|
+
label: 'Minute'
|
|
63
|
+
date_format: '%-d %b %Y'
|
|
64
|
+
format: '%{start} – %{end}'
|
|
65
|
+
humanize: '{amount, number} minutes'
|
|
66
|
+
hour:
|
|
67
|
+
label: 'Hour'
|
|
68
|
+
date_format: '%-d %b %Y'
|
|
69
|
+
format: '%{start} – %{end}'
|
|
70
|
+
humanize: '{amount, number} hours'
|
|
71
|
+
day:
|
|
72
|
+
label: 'Day'
|
|
73
|
+
date_format: '%-d %b %Y'
|
|
74
|
+
format: '%{start} – %{end}'
|
|
75
|
+
humanize: '{amount, number} days'
|
|
76
|
+
week:
|
|
77
|
+
label: 'Week'
|
|
78
|
+
date_format: '%d %b %Y'
|
|
79
|
+
format: '%{start} – %{end}'
|
|
80
|
+
humanize: '{amount, number} weeks'
|
|
81
|
+
month:
|
|
82
|
+
label: 'Month'
|
|
83
|
+
date_format: '%b %Y'
|
|
84
|
+
format: '%{start} – %{end}'
|
|
85
|
+
humanize: '{amount, number} months'
|
|
86
|
+
year:
|
|
87
|
+
label: 'Year'
|
|
88
|
+
date_format: '%Y'
|
|
89
|
+
format: '%{start} – %{end}'
|
|
90
|
+
humanize: '{amount, number} years'
|
|
91
|
+
|
|
92
|
+
time_of_day:
|
|
93
|
+
am: "{time} am"
|
|
94
|
+
pm: "{time} pm"
|