@translated/lara-cli 0.2.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/README.md +212 -0
- package/build/cli/cmd/glossary/glossary.js +55 -0
- package/build/cli/cmd/glossary/glossary.js.map +1 -0
- package/build/cli/cmd/init/init.input.js +177 -0
- package/build/cli/cmd/init/init.input.js.map +1 -0
- package/build/cli/cmd/init/init.js +158 -0
- package/build/cli/cmd/init/init.js.map +1 -0
- package/build/cli/cmd/init/init.types.js +2 -0
- package/build/cli/cmd/init/init.types.js.map +1 -0
- package/build/cli/cmd/init/init.utils.js +99 -0
- package/build/cli/cmd/init/init.utils.js.map +1 -0
- package/build/cli/cmd/memory/memory.js +55 -0
- package/build/cli/cmd/memory/memory.js.map +1 -0
- package/build/cli/cmd/translate/translate.js +149 -0
- package/build/cli/cmd/translate/translate.js.map +1 -0
- package/build/index.js +25 -0
- package/build/index.js.map +1 -0
- package/build/interface/parser.js +2 -0
- package/build/interface/parser.js.map +1 -0
- package/build/messages/messages.js +120 -0
- package/build/messages/messages.js.map +1 -0
- package/build/modules/common/common.const.js +424 -0
- package/build/modules/common/common.const.js.map +1 -0
- package/build/modules/common/common.types.js +15 -0
- package/build/modules/common/common.types.js.map +1 -0
- package/build/modules/config/config.provider.js +47 -0
- package/build/modules/config/config.provider.js.map +1 -0
- package/build/modules/config/config.types.js +95 -0
- package/build/modules/config/config.types.js.map +1 -0
- package/build/modules/translation/translation.engine.js +165 -0
- package/build/modules/translation/translation.engine.js.map +1 -0
- package/build/modules/translation/translation.service.js +45 -0
- package/build/modules/translation/translation.service.js.map +1 -0
- package/build/parsers/android-xml.parser.js +308 -0
- package/build/parsers/android-xml.parser.js.map +1 -0
- package/build/parsers/json.parser.js +18 -0
- package/build/parsers/json.parser.js.map +1 -0
- package/build/parsers/markdown.parser.js +74 -0
- package/build/parsers/markdown.parser.js.map +1 -0
- package/build/parsers/parser.factory.js +52 -0
- package/build/parsers/parser.factory.js.map +1 -0
- package/build/parsers/parser.types.js +2 -0
- package/build/parsers/parser.types.js.map +1 -0
- package/build/parsers/po.parser.js +175 -0
- package/build/parsers/po.parser.js.map +1 -0
- package/build/parsers/ts.parser.js +176 -0
- package/build/parsers/ts.parser.js.map +1 -0
- package/build/parsers/vue.parser.js +156 -0
- package/build/parsers/vue.parser.js.map +1 -0
- package/build/utils/checksum.js +80 -0
- package/build/utils/checksum.js.map +1 -0
- package/build/utils/cli.js +4 -0
- package/build/utils/cli.js.map +1 -0
- package/build/utils/display.js +60 -0
- package/build/utils/display.js.map +1 -0
- package/build/utils/error.js +18 -0
- package/build/utils/error.js.map +1 -0
- package/build/utils/locale.js +108 -0
- package/build/utils/locale.js.map +1 -0
- package/build/utils/parser.js +25 -0
- package/build/utils/parser.js.map +1 -0
- package/build/utils/path.js +173 -0
- package/build/utils/path.js.map +1 -0
- package/build/utils/progressWithOra.js +72 -0
- package/build/utils/progressWithOra.js.map +1 -0
- package/build/utils/prompt.js +205 -0
- package/build/utils/prompt.js.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import crypto from 'crypto';
|
|
4
|
+
import yaml from 'yaml';
|
|
5
|
+
import { ParserFactory } from '../parsers/parser.factory.js';
|
|
6
|
+
var ChecksumState;
|
|
7
|
+
(function (ChecksumState) {
|
|
8
|
+
ChecksumState["NEW"] = "new";
|
|
9
|
+
ChecksumState["UPDATED"] = "updated";
|
|
10
|
+
ChecksumState["UNCHANGED"] = "unchanged";
|
|
11
|
+
})(ChecksumState || (ChecksumState = {}));
|
|
12
|
+
const CHECKSUM_FILE = 'lara.lock';
|
|
13
|
+
const checksumFilePath = path.join(process.cwd(), CHECKSUM_FILE);
|
|
14
|
+
let cachedChecksumFile = null;
|
|
15
|
+
function calculateChecksum(fileName, parser, locale) {
|
|
16
|
+
const checksumFile = getChecksumFile();
|
|
17
|
+
const checksum = checksumFile.files[getHash(fileName)] || {};
|
|
18
|
+
const changelog = {};
|
|
19
|
+
const fileParser = parser || new ParserFactory(fileName);
|
|
20
|
+
const fileContent = fileParser.parse(fs.readFileSync(fileName, 'utf8'), { targetLocale: locale });
|
|
21
|
+
let changed = false;
|
|
22
|
+
for (const key in fileContent) {
|
|
23
|
+
if (!checksum[key]) {
|
|
24
|
+
changelog[key] = {
|
|
25
|
+
value: fileContent[key],
|
|
26
|
+
state: ChecksumState.NEW,
|
|
27
|
+
};
|
|
28
|
+
changed = true;
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const newHash = getHash(fileContent[key]);
|
|
32
|
+
const oldHash = checksum[key];
|
|
33
|
+
if (newHash === oldHash) {
|
|
34
|
+
changelog[key] = {
|
|
35
|
+
value: fileContent[key],
|
|
36
|
+
state: ChecksumState.UNCHANGED,
|
|
37
|
+
};
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
changelog[key] = {
|
|
41
|
+
value: fileContent[key],
|
|
42
|
+
state: ChecksumState.UPDATED,
|
|
43
|
+
};
|
|
44
|
+
changed = true;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (changed) {
|
|
48
|
+
updateChecksum(fileName, fileContent);
|
|
49
|
+
}
|
|
50
|
+
return changelog;
|
|
51
|
+
}
|
|
52
|
+
function updateChecksum(fileName, values) {
|
|
53
|
+
const checksumFile = getChecksumFile();
|
|
54
|
+
const fileNameHash = getHash(fileName);
|
|
55
|
+
const hashedValues = Object.fromEntries(Object.entries(values).map(([key, value]) => [key, getHash(value)]));
|
|
56
|
+
checksumFile.files[fileNameHash] = hashedValues;
|
|
57
|
+
cachedChecksumFile = checksumFile;
|
|
58
|
+
fs.writeFileSync(checksumFilePath, yaml.stringify(checksumFile));
|
|
59
|
+
}
|
|
60
|
+
function getChecksumFile() {
|
|
61
|
+
if (cachedChecksumFile) {
|
|
62
|
+
return cachedChecksumFile;
|
|
63
|
+
}
|
|
64
|
+
if (!fs.existsSync(checksumFilePath)) {
|
|
65
|
+
cachedChecksumFile = {
|
|
66
|
+
version: '1.0.0',
|
|
67
|
+
files: {},
|
|
68
|
+
};
|
|
69
|
+
fs.writeFileSync(checksumFilePath, yaml.stringify(cachedChecksumFile));
|
|
70
|
+
return cachedChecksumFile;
|
|
71
|
+
}
|
|
72
|
+
cachedChecksumFile = yaml.parse(fs.readFileSync(checksumFilePath, 'utf8'));
|
|
73
|
+
return cachedChecksumFile;
|
|
74
|
+
}
|
|
75
|
+
function getHash(s) {
|
|
76
|
+
const data = typeof s === 'string' ? s : JSON.stringify(s);
|
|
77
|
+
return crypto.createHash('md5').update(data).digest('hex');
|
|
78
|
+
}
|
|
79
|
+
export { calculateChecksum };
|
|
80
|
+
//# sourceMappingURL=checksum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checksum.js","sourceRoot":"/","sources":["utils/checksum.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"/","sources":["utils/cli.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,OAAO,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,cAAc,KAAK,KAAK,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import Ora from 'ora';
|
|
2
|
+
import stringWidth from 'string-width';
|
|
3
|
+
export function formatLocaleList(locales, maxDisplay = 5) {
|
|
4
|
+
if (locales.length === 0) {
|
|
5
|
+
return '';
|
|
6
|
+
}
|
|
7
|
+
if (locales.length <= maxDisplay) {
|
|
8
|
+
return locales.join(', ');
|
|
9
|
+
}
|
|
10
|
+
const displayed = locales.slice(0, maxDisplay);
|
|
11
|
+
const remaining = locales.length - maxDisplay;
|
|
12
|
+
return `${displayed.join(', ')} (+${remaining} more)`;
|
|
13
|
+
}
|
|
14
|
+
export function displayLocaleTable({ locales, title, columns = 4, spinner, type = 'info', }) {
|
|
15
|
+
const rows = [];
|
|
16
|
+
for (let i = 0; i < locales.length; i += columns) {
|
|
17
|
+
rows.push(locales.slice(i, i + columns));
|
|
18
|
+
}
|
|
19
|
+
const formattedRows = rows.map((row) => ` ${row.map((locale) => locale.padEnd(8)).join('')}`);
|
|
20
|
+
const tableOutput = `${title}:\n${formattedRows.join('\n')}`;
|
|
21
|
+
if (spinner) {
|
|
22
|
+
spinner[type](tableOutput);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
Ora()[type](tableOutput);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function displaySummaryBox({ title, items, footer }) {
|
|
29
|
+
const boxWidth = 50;
|
|
30
|
+
const topBorder = `╔${'═'.repeat(boxWidth - 1)}╗`;
|
|
31
|
+
const bottomBorder = `╚${'═'.repeat(boxWidth - 1)}╝`;
|
|
32
|
+
const separator = `╠${'═'.repeat(boxWidth - 1)}╣`;
|
|
33
|
+
const centerText = (text) => {
|
|
34
|
+
const visualLength = stringWidth(text);
|
|
35
|
+
const padding = boxWidth - 4 - visualLength;
|
|
36
|
+
const leftPad = Math.floor(padding / 2);
|
|
37
|
+
const rightPad = padding - leftPad;
|
|
38
|
+
return `║ ${' '.repeat(leftPad)}${text}${' '.repeat(rightPad + 1)} ║`;
|
|
39
|
+
};
|
|
40
|
+
const alignText = (label, value) => {
|
|
41
|
+
const content = `${label}: ${value}`;
|
|
42
|
+
const visualLength = stringWidth(content);
|
|
43
|
+
const padding = boxWidth - 4 - visualLength;
|
|
44
|
+
return `║ ${content}${' '.repeat(padding)} ║`;
|
|
45
|
+
};
|
|
46
|
+
const lines = [
|
|
47
|
+
'',
|
|
48
|
+
topBorder,
|
|
49
|
+
centerText(title),
|
|
50
|
+
separator,
|
|
51
|
+
...items.map(([label, value]) => alignText(label, value)),
|
|
52
|
+
separator,
|
|
53
|
+
centerText(footer),
|
|
54
|
+
bottomBorder,
|
|
55
|
+
'',
|
|
56
|
+
];
|
|
57
|
+
const summaryBox = lines.join('\n');
|
|
58
|
+
console.log(summaryBox);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display.js","sourceRoot":"/","sources":["utils/display.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Messages } from '#messages/messages.js';
|
|
2
|
+
export function handleLaraApiError(error, context, spinner) {
|
|
3
|
+
if (error.statusCode === 401) {
|
|
4
|
+
displayErrorAndExit(Messages.errors.apiAuthFailed(context), spinner);
|
|
5
|
+
}
|
|
6
|
+
if (error.statusCode >= 500) {
|
|
7
|
+
displayErrorAndExit(Messages.errors.serviceUnavailable(context, error.statusCode), spinner);
|
|
8
|
+
}
|
|
9
|
+
displayError(Messages.errors.translationFailed(context, error.message || ''), spinner);
|
|
10
|
+
}
|
|
11
|
+
function displayErrorAndExit(message, spinner) {
|
|
12
|
+
spinner.fail(message);
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
15
|
+
function displayError(message, spinner) {
|
|
16
|
+
spinner.fail(message);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"/","sources":["utils/error.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAUjD,MAAM,UAAU,kBAAkB,CAAC,KAAmB,EAAE,OAAe,EAAE,OAAY;IAEnF,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;QAC7B,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;IAGD,IAAI,KAAK,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;QAC5B,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9F,CAAC;IAGD,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AACzF,CAAC;AAQD,SAAS,mBAAmB,CAAC,OAAe,EAAE,OAAY;IACxD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,OAAY;IACjD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { AVAILABLE_LOCALES } from '#modules/common/common.const.js';
|
|
2
|
+
import { extractLocaleFromFilename, searchPaths, readSafe } from './path.js';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { ParserFactory } from '../parsers/parser.factory.js';
|
|
5
|
+
import { SupportedExtensionEnum } from '#modules/common/common.types.js';
|
|
6
|
+
const availableLocales = new Set(AVAILABLE_LOCALES);
|
|
7
|
+
async function extractLocalesFromFile(filePath, filterOutLocale) {
|
|
8
|
+
try {
|
|
9
|
+
const content = await readSafe(filePath);
|
|
10
|
+
const parser = new ParserFactory(filePath);
|
|
11
|
+
const parsed = parser.parse(content);
|
|
12
|
+
const locales = new Set();
|
|
13
|
+
for (const key of Object.keys(parsed)) {
|
|
14
|
+
const root = key.split('/')[0];
|
|
15
|
+
if (root && availableLocales.has(root) && (!filterOutLocale || root !== filterOutLocale)) {
|
|
16
|
+
locales.add(root);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return Array.from(locales);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async function extractLocaleFromPath(source) {
|
|
26
|
+
const paths = await searchPaths();
|
|
27
|
+
const targetLocales = new Set();
|
|
28
|
+
for (const filePath of paths) {
|
|
29
|
+
if (filePath.endsWith(SupportedExtensionEnum.TS)) {
|
|
30
|
+
const locales = await extractLocalesFromFile(filePath, source);
|
|
31
|
+
for (const locale of locales) {
|
|
32
|
+
targetLocales.add(locale);
|
|
33
|
+
}
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (filePath.endsWith(SupportedExtensionEnum.VUE)) {
|
|
37
|
+
const locales = await extractLocalesFromFile(filePath, source);
|
|
38
|
+
for (const locale of locales) {
|
|
39
|
+
targetLocales.add(locale);
|
|
40
|
+
}
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const relativeFilePath = path.relative(process.cwd(), filePath);
|
|
44
|
+
const parts = relativeFilePath.split('/');
|
|
45
|
+
for (let i = 0; i < parts.length; i++) {
|
|
46
|
+
const part = parts[i];
|
|
47
|
+
if (!part) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (i === parts.length - 1) {
|
|
51
|
+
const locale = extractLocaleFromFilename(part);
|
|
52
|
+
if (!locale) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (availableLocales.has(locale) && locale !== source) {
|
|
56
|
+
targetLocales.add(locale);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (availableLocales.has(part) && part !== source) {
|
|
60
|
+
targetLocales.add(part);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return Array.from(targetLocales);
|
|
65
|
+
}
|
|
66
|
+
async function extractAllLocalesFromProject() {
|
|
67
|
+
const paths = await searchPaths();
|
|
68
|
+
const foundLocales = new Set();
|
|
69
|
+
for (const filePath of paths) {
|
|
70
|
+
if (filePath.endsWith(SupportedExtensionEnum.TS)) {
|
|
71
|
+
const locales = await extractLocalesFromFile(filePath);
|
|
72
|
+
for (const locale of locales) {
|
|
73
|
+
foundLocales.add(locale);
|
|
74
|
+
}
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (filePath.endsWith(SupportedExtensionEnum.VUE)) {
|
|
78
|
+
const locales = await extractLocalesFromFile(filePath);
|
|
79
|
+
for (const locale of locales) {
|
|
80
|
+
foundLocales.add(locale);
|
|
81
|
+
}
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const relativeFilePath = path.relative(process.cwd(), filePath);
|
|
85
|
+
const parts = relativeFilePath.split('/');
|
|
86
|
+
for (let i = 0; i < parts.length; i++) {
|
|
87
|
+
const part = parts[i];
|
|
88
|
+
if (!part) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
if (i === parts.length - 1) {
|
|
92
|
+
const locale = extractLocaleFromFilename(part);
|
|
93
|
+
if (!locale) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (availableLocales.has(locale)) {
|
|
97
|
+
foundLocales.add(locale);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (availableLocales.has(part)) {
|
|
101
|
+
foundLocales.add(part);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return Array.from(foundLocales);
|
|
106
|
+
}
|
|
107
|
+
export { extractLocaleFromPath, extractAllLocalesFromProject };
|
|
108
|
+
//# sourceMappingURL=locale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale.js","sourceRoot":"/","sources":["utils/locale.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
function isPlainObject(value) {
|
|
2
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
3
|
+
}
|
|
4
|
+
export function deepMerge(target, source) {
|
|
5
|
+
if (typeof target !== 'object' || target === null)
|
|
6
|
+
return source;
|
|
7
|
+
if (typeof source !== 'object' || source === null)
|
|
8
|
+
return source;
|
|
9
|
+
const output = { ...target };
|
|
10
|
+
for (const key in source) {
|
|
11
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
12
|
+
if (Array.isArray(target[key]) && Array.isArray(source[key])) {
|
|
13
|
+
output[key] = [...target[key], ...source[key]];
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if (key in target && isPlainObject(target[key]) && isPlainObject(source[key])) {
|
|
17
|
+
output[key] = deepMerge(target[key], source[key]);
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
output[key] = source[key];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return output;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"/","sources":["utils/parser.ts"],"names":[],"mappings":"AAMA,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AASD,MAAM,UAAU,SAAS,CACvB,MAA+B,EAC/B,MAA+B;IAE/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IACjE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAEjE,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;YAEtD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC7D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAI,MAAM,CAAC,GAAG,CAAe,EAAE,GAAI,MAAM,CAAC,GAAG,CAAe,CAAC,CAAC;gBAC7E,SAAS;YACX,CAAC;YAED,IAAI,GAAG,IAAI,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC9E,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CACrB,MAAM,CAAC,GAAG,CAA4B,EACtC,MAAM,CAAC,GAAG,CAA4B,CACvC,CAAC;gBACF,SAAS;YACX,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { glob } from 'glob';
|
|
4
|
+
import { AVAILABLE_LOCALES, DEFAULT_EXCLUDED_DIRECTORIES, SUPPORTED_FILE_TYPES, } from '#modules/common/common.const.js';
|
|
5
|
+
import { Messages } from '#messages/messages.js';
|
|
6
|
+
import { SupportedExtensionEnum } from '#modules/common/common.types.js';
|
|
7
|
+
import { VueParser } from '../parsers/vue.parser.js';
|
|
8
|
+
const availableLocales = new Set(AVAILABLE_LOCALES);
|
|
9
|
+
function isRelative(path) {
|
|
10
|
+
return !path.startsWith('/') && !path.startsWith('./') && !path.startsWith('../');
|
|
11
|
+
}
|
|
12
|
+
function getFileExtension(path) {
|
|
13
|
+
return path.split('.').pop() ?? '';
|
|
14
|
+
}
|
|
15
|
+
async function readSafe(filePath, fallback = '') {
|
|
16
|
+
try {
|
|
17
|
+
return await fs.readFile(filePath, 'utf8');
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return fallback;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async function ensureDirectoryExists(filePath) {
|
|
24
|
+
const directory = path.dirname(filePath);
|
|
25
|
+
try {
|
|
26
|
+
await fs.access(directory);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
await fs.mkdir(directory, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function buildLocalePath(filePath, locale) {
|
|
33
|
+
return filePath.replaceAll('[locale]', locale);
|
|
34
|
+
}
|
|
35
|
+
async function searchLocalePathsByPattern(pattern) {
|
|
36
|
+
const localePattern = pattern.replaceAll('[locale]', `{${AVAILABLE_LOCALES.join(',')}}`);
|
|
37
|
+
const paths = await glob(localePattern, {
|
|
38
|
+
cwd: process.cwd(),
|
|
39
|
+
ignore: DEFAULT_EXCLUDED_DIRECTORIES.map((dir) => `${dir}/**`),
|
|
40
|
+
});
|
|
41
|
+
const localePaths = [];
|
|
42
|
+
for (const path of paths) {
|
|
43
|
+
const normalizedPath = normalizePath(path);
|
|
44
|
+
if (normalizedPath !== null) {
|
|
45
|
+
localePaths.push(normalizedPath);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return Array.from(new Set(localePaths));
|
|
49
|
+
}
|
|
50
|
+
async function searchLocalePaths(options) {
|
|
51
|
+
const { source } = options;
|
|
52
|
+
const allPaths = await searchPaths();
|
|
53
|
+
const initiallyFilteredPaths = allPaths.filter((path) => {
|
|
54
|
+
if (path.endsWith(`i18n.${SupportedExtensionEnum.TS}`)) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
if (path.endsWith(SupportedExtensionEnum.VUE)) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
if (path.endsWith(SupportedExtensionEnum.MD) || path.endsWith(SupportedExtensionEnum.MDX)) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
if (path.endsWith(SupportedExtensionEnum.XML)) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
return path.match(buildLocaleRegex([source]));
|
|
67
|
+
});
|
|
68
|
+
const filteredPaths = [];
|
|
69
|
+
const fileChecks = initiallyFilteredPaths.map(async (filePath) => {
|
|
70
|
+
if (filePath.endsWith(SupportedExtensionEnum.VUE)) {
|
|
71
|
+
const content = await readSafe(filePath);
|
|
72
|
+
if (VueParser.hasI18nTag(content)) {
|
|
73
|
+
return filePath;
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
if (filePath.endsWith(SupportedExtensionEnum.MD) ||
|
|
78
|
+
filePath.endsWith(SupportedExtensionEnum.MDX)) {
|
|
79
|
+
return filePath;
|
|
80
|
+
}
|
|
81
|
+
if (filePath.endsWith(SupportedExtensionEnum.XML)) {
|
|
82
|
+
return filePath;
|
|
83
|
+
}
|
|
84
|
+
if (filePath.endsWith(`i18n.${SupportedExtensionEnum.TS}`) ||
|
|
85
|
+
filePath.match(buildLocaleRegex([source]))) {
|
|
86
|
+
return filePath;
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
});
|
|
90
|
+
const checkedPaths = await Promise.all(fileChecks);
|
|
91
|
+
for (const p of checkedPaths) {
|
|
92
|
+
if (p)
|
|
93
|
+
filteredPaths.push(p);
|
|
94
|
+
}
|
|
95
|
+
const pathsWithLocales = [];
|
|
96
|
+
for (const jsonPath of filteredPaths) {
|
|
97
|
+
const normalizedPath = normalizePath(jsonPath);
|
|
98
|
+
if (!normalizedPath) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
pathsWithLocales.push(normalizedPath);
|
|
102
|
+
}
|
|
103
|
+
return Array.from(new Set(pathsWithLocales));
|
|
104
|
+
}
|
|
105
|
+
function normalizePath(filePath) {
|
|
106
|
+
const relativeFilePath = path.relative(process.cwd(), filePath);
|
|
107
|
+
if (relativeFilePath.endsWith(`i18n.${SupportedExtensionEnum.TS}`)) {
|
|
108
|
+
return relativeFilePath;
|
|
109
|
+
}
|
|
110
|
+
const parts = relativeFilePath.split('/');
|
|
111
|
+
let currentLocale = '';
|
|
112
|
+
let normalizedPath = '';
|
|
113
|
+
for (let i = 0; i < parts.length; i++) {
|
|
114
|
+
const part = parts[i];
|
|
115
|
+
if (!part) {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if (i === parts.length - 1) {
|
|
119
|
+
const locale = extractLocaleFromFilename(part);
|
|
120
|
+
if (!currentLocale && locale && availableLocales.has(locale)) {
|
|
121
|
+
currentLocale = locale;
|
|
122
|
+
normalizedPath += part.replace(locale, '[locale]');
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
normalizedPath += part;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (!currentLocale && availableLocales.has(part)) {
|
|
129
|
+
currentLocale = part;
|
|
130
|
+
}
|
|
131
|
+
if (part === currentLocale) {
|
|
132
|
+
normalizedPath += '[locale]/';
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
normalizedPath += part + '/';
|
|
136
|
+
}
|
|
137
|
+
if (!currentLocale) {
|
|
138
|
+
if (normalizedPath.includes(`i18n.${SupportedExtensionEnum.TS}`) ||
|
|
139
|
+
normalizedPath.endsWith(SupportedExtensionEnum.VUE) ||
|
|
140
|
+
normalizedPath.endsWith(SupportedExtensionEnum.MD) ||
|
|
141
|
+
normalizedPath.endsWith(SupportedExtensionEnum.MDX) ||
|
|
142
|
+
normalizedPath.endsWith(SupportedExtensionEnum.XML)) {
|
|
143
|
+
return normalizedPath;
|
|
144
|
+
}
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
return normalizedPath;
|
|
148
|
+
}
|
|
149
|
+
async function searchPaths() {
|
|
150
|
+
if (SUPPORTED_FILE_TYPES.length === 0) {
|
|
151
|
+
throw new Error(Messages.errors.noSupportedFileTypes);
|
|
152
|
+
}
|
|
153
|
+
const pattern = SUPPORTED_FILE_TYPES.length === 1
|
|
154
|
+
? `**/*.${SUPPORTED_FILE_TYPES[0]}`
|
|
155
|
+
: `**/*.{${SUPPORTED_FILE_TYPES.join(',')}}`;
|
|
156
|
+
return glob(pattern, {
|
|
157
|
+
cwd: process.cwd(),
|
|
158
|
+
ignore: DEFAULT_EXCLUDED_DIRECTORIES.map((dir) => `${dir}/**`),
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
function extractLocaleFromFilename(filename) {
|
|
162
|
+
const sortedLocales = [...AVAILABLE_LOCALES].sort((a, b) => b.length - a.length);
|
|
163
|
+
const match = filename.match(buildLocaleRegex(sortedLocales));
|
|
164
|
+
if (!match || !match[2]) {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
return match[2];
|
|
168
|
+
}
|
|
169
|
+
function buildLocaleRegex(locales = AVAILABLE_LOCALES) {
|
|
170
|
+
return new RegExp(`(^|[^a-zA-Z])(${locales.join('|')})(?=[^a-zA-Z]|$)`, 'i');
|
|
171
|
+
}
|
|
172
|
+
export { getFileExtension, isRelative, readSafe, ensureDirectoryExists, buildLocalePath, searchLocalePathsByPattern, searchLocalePaths, searchPaths, extractLocaleFromFilename, };
|
|
173
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"/","sources":["utils/path.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import Ora from 'ora';
|
|
2
|
+
import { Messages } from '#messages/messages.js';
|
|
3
|
+
class ProgressWithOra {
|
|
4
|
+
spinner;
|
|
5
|
+
done = 0;
|
|
6
|
+
total = 0;
|
|
7
|
+
width = 40;
|
|
8
|
+
init({ message, spinner }) {
|
|
9
|
+
if (spinner) {
|
|
10
|
+
this.spinner = spinner;
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
this.spinner = Ora({ text: message ?? Messages.errors.processing, color: 'yellow' }).start();
|
|
14
|
+
}
|
|
15
|
+
start({ message, total }) {
|
|
16
|
+
if (!this.spinner) {
|
|
17
|
+
this.init({ message });
|
|
18
|
+
}
|
|
19
|
+
if (total <= 0) {
|
|
20
|
+
throw new Error(Messages.errors.progressTotalInvalid);
|
|
21
|
+
}
|
|
22
|
+
this.total = total;
|
|
23
|
+
this.done = 0;
|
|
24
|
+
this.setText(message);
|
|
25
|
+
process.stdout.write('\n');
|
|
26
|
+
this.renderProgress();
|
|
27
|
+
}
|
|
28
|
+
tick(count = 1) {
|
|
29
|
+
this.done = Math.min(this.done + count, this.total);
|
|
30
|
+
this.renderProgress();
|
|
31
|
+
}
|
|
32
|
+
setText(text) {
|
|
33
|
+
this.spinner.text = text;
|
|
34
|
+
}
|
|
35
|
+
reset({ total, done }) {
|
|
36
|
+
if (total <= 0) {
|
|
37
|
+
throw new Error(Messages.errors.progressTotalInvalid);
|
|
38
|
+
}
|
|
39
|
+
this.total = total;
|
|
40
|
+
this.done = done ?? 0;
|
|
41
|
+
this.renderProgress();
|
|
42
|
+
}
|
|
43
|
+
renderProgress() {
|
|
44
|
+
const ratio = this.done / this.total;
|
|
45
|
+
const filled = Math.round(ratio * this.width);
|
|
46
|
+
const empty = this.width - filled;
|
|
47
|
+
const percent = (ratio * 100).toFixed(1);
|
|
48
|
+
const progress = `${this.done}/${this.total}`;
|
|
49
|
+
const bar = `|${'█'.repeat(filled)}${'-'.repeat(empty)}| ${percent}% (${progress})`;
|
|
50
|
+
process.stdout.write('\x1b[1B');
|
|
51
|
+
process.stdout.write('\x1b[2K\r');
|
|
52
|
+
process.stdout.write(`Progress: ${bar}`);
|
|
53
|
+
process.stdout.write('\x1b[1A');
|
|
54
|
+
}
|
|
55
|
+
stop(message = Messages.success.completed, type = 'succeed') {
|
|
56
|
+
this.done = this.total;
|
|
57
|
+
this.renderProgress();
|
|
58
|
+
process.stdout.write('\x1b[1B');
|
|
59
|
+
process.stdout.write('\x1b[2K\r');
|
|
60
|
+
process.stdout.write('\x1b[1A');
|
|
61
|
+
if (Array.isArray(message)) {
|
|
62
|
+
for (const msg of message) {
|
|
63
|
+
this.spinner[type](msg);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
this.spinner[type](message);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export const progressWithOra = new ProgressWithOra();
|
|
72
|
+
//# sourceMappingURL=progressWithOra.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progressWithOra.js","sourceRoot":"/","sources":["utils/progressWithOra.ts"],"names":[],"mappings":"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"}
|