@tolgee/cli 2.10.2 → 2.12.0
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/dist/config/tolgeerc.js +9 -8
- package/dist/extractor/parser/parser.js +7 -5
- package/dist/extractor/{parserVue → parser}/rules/globalTFunction.js +1 -1
- package/dist/extractor/parser/tokenMergers/customTCallMerger.js +23 -0
- package/dist/extractor/parser/tokenMergers/{typesAsMergerer.js → typesAsMerger.js} +1 -1
- package/dist/extractor/parser/tokenMergers/typesCastMerger.js +1 -1
- package/dist/extractor/parserNgx/ParserNgx.js +4 -3
- package/dist/extractor/parserReact/ParserReact.js +10 -3
- package/dist/extractor/parserSvelte/ParserSvelte.js +4 -3
- package/dist/extractor/parserVue/ParserVue.js +5 -5
- package/package.json +3 -2
- package/dist/extractor/parserVue/tokenMergers/globalTFunctionMerger.js +0 -36
package/dist/config/tolgeerc.js
CHANGED
@@ -8,13 +8,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
8
8
|
});
|
9
9
|
};
|
10
10
|
import { cosmiconfig, defaultLoaders } from 'cosmiconfig';
|
11
|
-
import { Validator } from 'jsonschema';
|
12
11
|
import { readFile } from 'fs/promises';
|
13
12
|
import { fileURLToPath } from 'url';
|
14
13
|
import { dirname, join, resolve } from 'path';
|
15
14
|
import { error, exitWithError } from '../utils/logger.js';
|
16
15
|
import { existsSync } from 'fs';
|
17
16
|
import { valueToArray } from '../utils/valueToArray.js';
|
17
|
+
import { Ajv } from 'ajv';
|
18
18
|
const explorer = cosmiconfig('tolgee', {
|
19
19
|
loaders: {
|
20
20
|
noExt: defaultLoaders['.json'],
|
@@ -34,7 +34,7 @@ function parseConfig(input, configDir) {
|
|
34
34
|
if (rc.projectId !== undefined) {
|
35
35
|
rc.projectId = Number(rc.projectId); // Number("") returns 0
|
36
36
|
if (!Number.isInteger(rc.projectId) || rc.projectId <= 0) {
|
37
|
-
throw new Error(
|
37
|
+
throw new Error("Invalid config: 'projectId' should be an integer representing your project Id");
|
38
38
|
}
|
39
39
|
}
|
40
40
|
// convert relative paths in config to absolute
|
@@ -70,6 +70,7 @@ function getSchema() {
|
|
70
70
|
}
|
71
71
|
export default function loadTolgeeRc(path) {
|
72
72
|
return __awaiter(this, void 0, void 0, function* () {
|
73
|
+
var _a;
|
73
74
|
let res;
|
74
75
|
if (path) {
|
75
76
|
try {
|
@@ -86,12 +87,12 @@ export default function loadTolgeeRc(path) {
|
|
86
87
|
if (!res || res.isEmpty)
|
87
88
|
return null;
|
88
89
|
const config = parseConfig(res.config, dirname(path || '.'));
|
89
|
-
const
|
90
|
-
const
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
const errMessage = `Tolgee config: '${
|
90
|
+
const ajv = new Ajv({ allowUnionTypes: true });
|
91
|
+
const validate = ajv.compile(yield getSchema());
|
92
|
+
validate(config);
|
93
|
+
const firstErr = (_a = validate.errors) === null || _a === void 0 ? void 0 : _a[0];
|
94
|
+
if (firstErr) {
|
95
|
+
const errMessage = `Tolgee config: '${firstErr.instancePath.replaceAll('/', '.').replace(/^\./, '')}' ${firstErr.message}`;
|
95
96
|
exitWithError(errMessage);
|
96
97
|
}
|
97
98
|
return config;
|
@@ -7,8 +7,9 @@ import { createMachine } from './mergerMachine.js';
|
|
7
7
|
import { stringMerger } from './tokenMergers/stringMerger.js';
|
8
8
|
import { templateStringMerger } from './tokenMergers/templateStringMerger.js';
|
9
9
|
import { closingTagMerger } from './tokenMergers/closingTagMerger.js';
|
10
|
-
import {
|
11
|
-
import {
|
10
|
+
import { typesAsMerger } from './tokenMergers/typesAsMerger.js';
|
11
|
+
import { typesCastMerger } from './tokenMergers/typesCastMerger.js';
|
12
|
+
import { customTCallMerger } from './tokenMergers/customTCallMerger.js';
|
12
13
|
export const DEFAULT_BLOCKS = {
|
13
14
|
'block.begin': ['block.end'],
|
14
15
|
'expression.begin': ['expression.end'],
|
@@ -19,12 +20,13 @@ export const DEFAULT_BLOCKS = {
|
|
19
20
|
'tag.closing.begin',
|
20
21
|
],
|
21
22
|
};
|
22
|
-
export const
|
23
|
+
export const DEFAULT_MERGERS = [
|
23
24
|
stringMerger,
|
24
25
|
templateStringMerger,
|
25
26
|
closingTagMerger,
|
26
|
-
|
27
|
-
|
27
|
+
typesAsMerger,
|
28
|
+
typesCastMerger,
|
29
|
+
customTCallMerger(['tolgee.t']),
|
28
30
|
];
|
29
31
|
export const Parser = ({ mappers, blocks, rules, merger, treeTransform, }) => {
|
30
32
|
const ruleMap = new Map();
|
@@ -0,0 +1,23 @@
|
|
1
|
+
export const customTCallMerger = (customExpressions) => {
|
2
|
+
return {
|
3
|
+
initial: '',
|
4
|
+
step: (state, t, end) => {
|
5
|
+
const type = t.customType;
|
6
|
+
const token = t.token;
|
7
|
+
if (type === 'variable' || type === 'function.call') {
|
8
|
+
if (customExpressions.find((e) => e.startsWith(state + token))) {
|
9
|
+
return state + token;
|
10
|
+
}
|
11
|
+
}
|
12
|
+
else if (type === 'acessor.dot') {
|
13
|
+
return state + '.';
|
14
|
+
}
|
15
|
+
else if (state !== '' && type === 'expression.begin') {
|
16
|
+
if (customExpressions.includes(state)) {
|
17
|
+
return end.MERGE_ALL;
|
18
|
+
}
|
19
|
+
}
|
20
|
+
},
|
21
|
+
customType: 'trigger.global.t.function',
|
22
|
+
};
|
23
|
+
};
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { pipeMachines } from '../parser/mergerMachine.js';
|
2
|
-
import { DEFAULT_BLOCKS,
|
2
|
+
import { DEFAULT_BLOCKS, DEFAULT_MERGERS, Parser } from '../parser/parser.js';
|
3
3
|
import { generalMapper } from '../parser/generalMapper.js';
|
4
4
|
import { ngxMapper } from './ngxMapper.js';
|
5
5
|
import { ngxTreeTransform } from './ngxTreeTransform.js';
|
@@ -9,9 +9,10 @@ import { pipeMerger } from './tokenMergers/pipeMerger.js';
|
|
9
9
|
import { componentWithT } from './rules/componentWithT.js';
|
10
10
|
import { translatePipe } from './rules/translatePipe.js';
|
11
11
|
import { translateFunction } from './rules/translateFunction.js';
|
12
|
+
import { globalTFunction } from '../parser/rules/globalTFunction.js';
|
12
13
|
const ngxMappers = [ngxMapper, generalMapper];
|
13
14
|
export const ngxMergers = pipeMachines([
|
14
|
-
...
|
15
|
+
...DEFAULT_MERGERS,
|
15
16
|
componentWithTMerger,
|
16
17
|
pipeMerger,
|
17
18
|
translateMerger,
|
@@ -20,7 +21,7 @@ export const ParserNgx = () => {
|
|
20
21
|
return Parser({
|
21
22
|
mappers: ngxMappers,
|
22
23
|
blocks: Object.assign({}, DEFAULT_BLOCKS),
|
23
|
-
rules: [componentWithT, translatePipe, translateFunction],
|
24
|
+
rules: [globalTFunction, componentWithT, translatePipe, translateFunction],
|
24
25
|
merger: ngxMergers,
|
25
26
|
treeTransform: ngxTreeTransform,
|
26
27
|
});
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { pipeMachines } from '../parser/mergerMachine.js';
|
2
|
-
import { DEFAULT_BLOCKS,
|
2
|
+
import { DEFAULT_BLOCKS, DEFAULT_MERGERS, Parser } from '../parser/parser.js';
|
3
3
|
import { generalMapper } from '../parser/generalMapper.js';
|
4
4
|
import { reactMapper } from './jsxMapper.js';
|
5
5
|
import { createElementMerger } from './tokenMergers/createElementMerger.js';
|
@@ -10,9 +10,10 @@ import { reactCreateElement } from './rules/createElement.js';
|
|
10
10
|
import { tComponent } from './rules/tComponent.js';
|
11
11
|
import { tFunction } from './rules/tFunction.js';
|
12
12
|
import { useTranslate } from './rules/useTranslate.js';
|
13
|
+
import { globalTFunction } from '../parser/rules/globalTFunction.js';
|
13
14
|
const reactMappers = [generalMapper, reactMapper];
|
14
15
|
export const reactMergers = pipeMachines([
|
15
|
-
...
|
16
|
+
...DEFAULT_MERGERS,
|
16
17
|
createElementMerger,
|
17
18
|
useTranslateMerger,
|
18
19
|
tFunctionMerger,
|
@@ -22,7 +23,13 @@ export const ParserReact = () => {
|
|
22
23
|
return Parser({
|
23
24
|
mappers: reactMappers,
|
24
25
|
blocks: Object.assign({}, DEFAULT_BLOCKS),
|
25
|
-
rules: [
|
26
|
+
rules: [
|
27
|
+
globalTFunction,
|
28
|
+
reactCreateElement,
|
29
|
+
tComponent,
|
30
|
+
tFunction,
|
31
|
+
useTranslate,
|
32
|
+
],
|
26
33
|
merger: reactMergers,
|
27
34
|
});
|
28
35
|
};
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { pipeMachines } from '../parser/mergerMachine.js';
|
2
|
-
import { DEFAULT_BLOCKS,
|
2
|
+
import { DEFAULT_BLOCKS, DEFAULT_MERGERS, Parser } from '../parser/parser.js';
|
3
3
|
import { svelteMapper } from './svelteMapper.js';
|
4
4
|
import { generalMapper } from '../parser/generalMapper.js';
|
5
5
|
import { tFunctionMerger } from './tokenMergers/tFunctionMerger.js';
|
@@ -11,9 +11,10 @@ import { getTranslate } from './rules/useTranslate.js';
|
|
11
11
|
import { tComponent } from './rules/tComponent.js';
|
12
12
|
import { scriptTag } from './rules/scriptTag.js';
|
13
13
|
import { svelteTreeTransform } from './svelteTreeTransform.js';
|
14
|
+
import { globalTFunction } from '../parser/rules/globalTFunction.js';
|
14
15
|
const svelteMappers = [generalMapper, svelteMapper];
|
15
16
|
export const svelteMergers = pipeMachines([
|
16
|
-
...
|
17
|
+
...DEFAULT_MERGERS,
|
17
18
|
tFunctionMerger,
|
18
19
|
getTranslateMerger,
|
19
20
|
tComponentMerger,
|
@@ -23,7 +24,7 @@ export const ParserSvelte = () => {
|
|
23
24
|
return Parser({
|
24
25
|
mappers: svelteMappers,
|
25
26
|
blocks: Object.assign({}, DEFAULT_BLOCKS),
|
26
|
-
rules: [tFunction, getTranslate, tComponent, scriptTag],
|
27
|
+
rules: [globalTFunction, tFunction, getTranslate, tComponent, scriptTag],
|
27
28
|
treeTransform: svelteTreeTransform,
|
28
29
|
merger: svelteMergers,
|
29
30
|
});
|
@@ -1,26 +1,26 @@
|
|
1
1
|
import { pipeMachines } from '../parser/mergerMachine.js';
|
2
|
-
import { DEFAULT_BLOCKS,
|
2
|
+
import { DEFAULT_BLOCKS, DEFAULT_MERGERS, Parser } from '../parser/parser.js';
|
3
3
|
import { generalMapper } from '../parser/generalMapper.js';
|
4
4
|
import { vueMapper } from './vueMapper.js';
|
5
5
|
import { vueTreeTransform } from './vueTreeTransform.js';
|
6
|
-
import { globalTFunctionMerger } from './tokenMergers/globalTFunctionMerger.js';
|
7
6
|
import { tFunctionMerger } from './tokenMergers/tFunctionMerger.js';
|
8
7
|
import { useTranslateMerger } from './tokenMergers/useTranslateMerger.js';
|
9
8
|
import { exportDefaultObjectMerger } from './tokenMergers/exportDefaultObjectMerger.js';
|
10
9
|
import { scriptTagMerger } from './tokenMergers/scriptTagMerger.js';
|
11
10
|
import { tComponentMerger } from './tokenMergers/tComponentMerger.js';
|
12
|
-
import { globalTFunction } from '
|
11
|
+
import { globalTFunction } from '../parser/rules/globalTFunction.js';
|
13
12
|
import { tFunction } from './rules/tFunction.js';
|
14
13
|
import { useTranslate } from './rules/useTranslate.js';
|
15
14
|
import { tComponent } from './rules/tComponent.js';
|
16
15
|
import { scriptTag } from './rules/scriptTag.js';
|
17
16
|
import { exportDefaultObject } from './rules/exportDefaultObject.js';
|
18
17
|
import { hyphenPropsMerger } from './tokenMergers/hyphenPropsMerger.js';
|
18
|
+
import { customTCallMerger } from '../parser/tokenMergers/customTCallMerger.js';
|
19
19
|
const vueMappers = [generalMapper, vueMapper];
|
20
20
|
export const vueMergers = pipeMachines([
|
21
|
-
...
|
21
|
+
...DEFAULT_MERGERS,
|
22
22
|
hyphenPropsMerger,
|
23
|
-
|
23
|
+
customTCallMerger(['$t', 'this.$t']),
|
24
24
|
tFunctionMerger,
|
25
25
|
useTranslateMerger,
|
26
26
|
tComponentMerger,
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@tolgee/cli",
|
3
|
-
"version": "2.
|
3
|
+
"version": "2.12.0",
|
4
4
|
"type": "module",
|
5
5
|
"description": "A tool to interact with the Tolgee Platform through CLI",
|
6
6
|
"repository": {
|
@@ -30,12 +30,13 @@
|
|
30
30
|
"author": "Jan Cizmar",
|
31
31
|
"license": "MIT",
|
32
32
|
"dependencies": {
|
33
|
+
"ajv": "^8.17.1",
|
33
34
|
"ansi-colors": "^4.1.3",
|
34
35
|
"base32-decode": "^1.0.0",
|
35
36
|
"commander": "^12.1.0",
|
36
37
|
"cosmiconfig": "^9.0.0",
|
37
38
|
"json5": "^2.2.3",
|
38
|
-
"jsonschema": "^1.
|
39
|
+
"jsonschema": "^1.5.0",
|
39
40
|
"openapi-fetch": "0.13.1",
|
40
41
|
"tinyglobby": "^0.2.12",
|
41
42
|
"unescape-js": "^1.1.4",
|
@@ -1,36 +0,0 @@
|
|
1
|
-
// $t(
|
2
|
-
export const globalTFunctionMerger = {
|
3
|
-
initial: 0 /* S.Idle */,
|
4
|
-
step: (state, t, end) => {
|
5
|
-
const type = t.customType;
|
6
|
-
const token = t.token;
|
7
|
-
switch (state) {
|
8
|
-
case 0 /* S.Idle */:
|
9
|
-
if (type === 'function.call' && token === '$t') {
|
10
|
-
return 1 /* S.ExpectBracket */;
|
11
|
-
}
|
12
|
-
else if (type === 'variable' && token === 'this') {
|
13
|
-
return 2 /* S.ExpectDot */;
|
14
|
-
}
|
15
|
-
else if (type === 'acessor.dot') {
|
16
|
-
return 4 /* S.Ignore */;
|
17
|
-
}
|
18
|
-
break;
|
19
|
-
case 2 /* S.ExpectDot */:
|
20
|
-
if (type === 'acessor.dot') {
|
21
|
-
return 3 /* S.ExpectCall */;
|
22
|
-
}
|
23
|
-
break;
|
24
|
-
case 3 /* S.ExpectCall */:
|
25
|
-
if (type === 'function.call' && token === '$t') {
|
26
|
-
return 1 /* S.ExpectBracket */;
|
27
|
-
}
|
28
|
-
break;
|
29
|
-
case 1 /* S.ExpectBracket */:
|
30
|
-
if (type === 'expression.begin') {
|
31
|
-
return end.MERGE_ALL;
|
32
|
-
}
|
33
|
-
}
|
34
|
-
},
|
35
|
-
customType: 'trigger.global.t.function',
|
36
|
-
};
|