@localheroai/cli 0.0.74 → 0.0.75-rc.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/dist/api/pull-request-imports.js +9 -1
- package/dist/api/pull-request-imports.js.map +1 -1
- package/dist/api/source-alignments.js +46 -0
- package/dist/api/source-alignments.js.map +1 -0
- package/dist/commands/check.js +1 -4
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/ci.js +4 -1
- package/dist/commands/ci.js.map +1 -1
- package/dist/commands/init.js +11 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/translate.js +127 -39
- package/dist/commands/translate.js.map +1 -1
- package/dist/utils/aligned-import.js +105 -0
- package/dist/utils/aligned-import.js.map +1 -0
- package/dist/utils/aligned-values-on-disk.js +39 -0
- package/dist/utils/aligned-values-on-disk.js.map +1 -0
- package/dist/utils/alignment-candidates.js +75 -0
- package/dist/utils/alignment-candidates.js.map +1 -0
- package/dist/utils/ci-context.js +3 -0
- package/dist/utils/ci-context.js.map +1 -1
- package/dist/utils/git-changes.js +32 -5
- package/dist/utils/git-changes.js.map +1 -1
- package/dist/utils/git.js +21 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/github-graphql.js +31 -14
- package/dist/utils/github-graphql.js.map +1 -1
- package/dist/utils/github.js +220 -50
- package/dist/utils/github.js.map +1 -1
- package/dist/utils/project-detection.js +75 -3
- package/dist/utils/project-detection.js.map +1 -1
- package/dist/utils/source-alignment.js +166 -0
- package/dist/utils/source-alignment.js.map +1 -0
- package/dist/utils/target-changes.js +12 -7
- package/dist/utils/target-changes.js.map +1 -1
- package/dist/utils/unreadable-files.js +24 -0
- package/dist/utils/unreadable-files.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { promises as fs } from 'fs';
|
|
2
|
+
import { glob, escape } from 'glob';
|
|
2
3
|
import { findFirstExistingPath, findFirstGettextCatalogPath, getDirectoryContents } from './files.js';
|
|
3
4
|
export const PROJECT_TYPES = {
|
|
4
5
|
django: {
|
|
@@ -20,7 +21,9 @@ export const PROJECT_TYPES = {
|
|
|
20
21
|
]
|
|
21
22
|
},
|
|
22
23
|
rails: {
|
|
23
|
-
|
|
24
|
+
// Not Gemfile: React Native and other JS apps ship one for CocoaPods and fastlane.
|
|
25
|
+
// A Ruby project without config/application.rb is still found by the generic scan.
|
|
26
|
+
directIndicators: ['config/application.rb'],
|
|
24
27
|
defaults: {
|
|
25
28
|
translationPath: 'config/locales/',
|
|
26
29
|
filePattern: '**/*.{yml,yaml}'
|
|
@@ -63,7 +66,6 @@ export const PROJECT_TYPES = {
|
|
|
63
66
|
]
|
|
64
67
|
},
|
|
65
68
|
nextjs: {
|
|
66
|
-
directIndicators: ['next.config.js', 'next.config.mjs'],
|
|
67
69
|
packageCheck: {
|
|
68
70
|
requires: ['next'],
|
|
69
71
|
oneOf: ['next-i18next', 'next-translate']
|
|
@@ -95,7 +97,7 @@ export const PROJECT_TYPES = {
|
|
|
95
97
|
]
|
|
96
98
|
},
|
|
97
99
|
i18next: {
|
|
98
|
-
directIndicators: ['i18next.config.js', 'i18n.js', 'i18n/index.js'],
|
|
100
|
+
directIndicators: ['i18next.config.ts', 'i18next.config.js', 'i18n.js', 'i18n/index.js'],
|
|
99
101
|
packageCheck: {
|
|
100
102
|
requires: ['i18next']
|
|
101
103
|
},
|
|
@@ -103,8 +105,20 @@ export const PROJECT_TYPES = {
|
|
|
103
105
|
translationPath: 'public/locales/',
|
|
104
106
|
filePattern: '**/*.json'
|
|
105
107
|
},
|
|
108
|
+
outputConfigFiles: [
|
|
109
|
+
'i18next.config.ts',
|
|
110
|
+
'i18next.config.js',
|
|
111
|
+
'i18next.config.mjs',
|
|
112
|
+
'i18next-parser.config.js',
|
|
113
|
+
'i18next-parser.config.mjs',
|
|
114
|
+
'i18next-parser.config.cjs',
|
|
115
|
+
'i18next-parser.config.ts'
|
|
116
|
+
],
|
|
106
117
|
commonPaths: [
|
|
107
118
|
'public/locales',
|
|
119
|
+
'app/i18n/locales',
|
|
120
|
+
'src/app/i18n/locales',
|
|
121
|
+
'src/i18n/locales',
|
|
108
122
|
'src/locales',
|
|
109
123
|
'locales',
|
|
110
124
|
'src/i18n',
|
|
@@ -248,6 +262,35 @@ async function detectFramework(config) {
|
|
|
248
262
|
}
|
|
249
263
|
return false;
|
|
250
264
|
}
|
|
265
|
+
const OUTPUT_PATTERN = /\boutput\s*:\s*['"`]([^'"`]+)['"`]/;
|
|
266
|
+
const OUTPUT_PLACEHOLDER = /\{\{|\$[A-Z]/;
|
|
267
|
+
const COMMENTS = /\/\*[\s\S]*?\*\/|^\s*\/\/.*$/gm;
|
|
268
|
+
const PATTERN_SCAN_IGNORE = ['**/node_modules/**', '**/.git/**', '**/vendor/**', '**/dist/**', '**/build/**'];
|
|
269
|
+
// The directory before the first language or namespace placeholder in an
|
|
270
|
+
// i18next-cli (`{{language}}`) or i18next-parser (`$LOCALE`) output template.
|
|
271
|
+
function localeDirFromOutputTemplate(template) {
|
|
272
|
+
const segments = template.replace(/^\.[\\/]/, '').split(/[\\/]/);
|
|
273
|
+
const firstDynamic = segments.findIndex(segment => OUTPUT_PLACEHOLDER.test(segment));
|
|
274
|
+
if (firstDynamic <= 0)
|
|
275
|
+
return null;
|
|
276
|
+
return segments.slice(0, firstDynamic).join('/');
|
|
277
|
+
}
|
|
278
|
+
async function translationPathFromOutputConfig(configFiles) {
|
|
279
|
+
for (const file of configFiles) {
|
|
280
|
+
let content;
|
|
281
|
+
try {
|
|
282
|
+
content = await fs.readFile(file, 'utf8');
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
const template = content.replace(COMMENTS, '').match(OUTPUT_PATTERN)?.[1];
|
|
288
|
+
const localeDir = template ? localeDirFromOutputTemplate(template) : null;
|
|
289
|
+
if (localeDir && await findFirstExistingPath([localeDir]))
|
|
290
|
+
return localeDir;
|
|
291
|
+
}
|
|
292
|
+
return null;
|
|
293
|
+
}
|
|
251
294
|
export function buildFilePatternFromContents(contents) {
|
|
252
295
|
const formats = [];
|
|
253
296
|
if (contents.jsonFiles.length > 0)
|
|
@@ -264,6 +307,22 @@ export function buildFilePatternFromContents(contents) {
|
|
|
264
307
|
}
|
|
265
308
|
return `**/*.{${formats.join(',')}}`;
|
|
266
309
|
}
|
|
310
|
+
// The pattern for a directory the user chose over the detected one, read from the
|
|
311
|
+
// files actually in it. Null when it holds no translation files to go by.
|
|
312
|
+
export async function filePatternForDirectory(dir) {
|
|
313
|
+
const root = dir.replace(/\/+$/, '');
|
|
314
|
+
const files = await glob(`${escape(root)}/**/*.{json,yml,yaml,po,pot}`, { ignore: PATTERN_SCAN_IGNORE });
|
|
315
|
+
if (files.length === 0)
|
|
316
|
+
return null;
|
|
317
|
+
const pattern = buildFilePatternFromContents({
|
|
318
|
+
files,
|
|
319
|
+
jsonFiles: files.filter(f => f.endsWith('.json')),
|
|
320
|
+
yamlFiles: files.filter(f => f.endsWith('.yml') || f.endsWith('.yaml')),
|
|
321
|
+
poFiles: files.filter(f => f.endsWith('.po') || f.endsWith('.pot'))
|
|
322
|
+
});
|
|
323
|
+
const hasPot = files.some(f => f.endsWith('.pot'));
|
|
324
|
+
return hasPot && pattern === '**/*.po' ? '**/*.{po,pot}' : pattern;
|
|
325
|
+
}
|
|
267
326
|
export async function detectProjectType() {
|
|
268
327
|
for (const [type, config] of Object.entries(PROJECT_TYPES)) {
|
|
269
328
|
if (!config.directIndicators?.length && !config.packageCheck)
|
|
@@ -271,6 +330,19 @@ export async function detectProjectType() {
|
|
|
271
330
|
const isFramework = await detectFramework(config);
|
|
272
331
|
if (!isFramework)
|
|
273
332
|
continue;
|
|
333
|
+
const configuredPath = config.outputConfigFiles
|
|
334
|
+
? await translationPathFromOutputConfig(config.outputConfigFiles)
|
|
335
|
+
: null;
|
|
336
|
+
if (configuredPath) {
|
|
337
|
+
return {
|
|
338
|
+
type,
|
|
339
|
+
defaults: {
|
|
340
|
+
...config.defaults,
|
|
341
|
+
translationPath: `${configuredPath}/`,
|
|
342
|
+
commonPaths: config.commonPaths
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
}
|
|
274
346
|
if (config.commonPaths) {
|
|
275
347
|
// For gettext projects the catalog check is authoritative: falling back to a
|
|
276
348
|
// name-only match would re-propose the directories it just rejected (a Django
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-detection.js","sourceRoot":"","sources":["../../src/utils/project-detection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,oBAAoB,EAAqB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"project-detection.js","sourceRoot":"","sources":["../../src/utils/project-detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { createSourceAlignment, SourceAlignmentRequestError } from '../api/source-alignments.js';
|
|
3
|
+
const MAX_ITEMS_PER_REQUEST = 25;
|
|
4
|
+
const NOT_FOUND_STATUS = 404;
|
|
5
|
+
const INVALID_PARAMETERS_STATUS = 422;
|
|
6
|
+
/**
|
|
7
|
+
* Ask the backend to align the translations of reworded source texts, one
|
|
8
|
+
* locale at a time, and write the aligned values into the target files. A
|
|
9
|
+
* locale that fails is left untouched; the rest of the run carries on.
|
|
10
|
+
*/
|
|
11
|
+
export async function runSourceAlignment(candidates, request, deps) {
|
|
12
|
+
const result = {
|
|
13
|
+
enabled: false,
|
|
14
|
+
alignedCells: [],
|
|
15
|
+
localeSummaries: {},
|
|
16
|
+
notices: [],
|
|
17
|
+
shortUrl: null
|
|
18
|
+
};
|
|
19
|
+
for (const [locale, localeCandidates] of groupBy(candidates, c => c.locale)) {
|
|
20
|
+
let items = [];
|
|
21
|
+
try {
|
|
22
|
+
for (const chunk of chunked(localeCandidates, MAX_ITEMS_PER_REQUEST)) {
|
|
23
|
+
const response = await createSourceAlignment({
|
|
24
|
+
...request,
|
|
25
|
+
locale,
|
|
26
|
+
items: chunk.map(toRequestItem)
|
|
27
|
+
});
|
|
28
|
+
if (!response.enabled)
|
|
29
|
+
return result;
|
|
30
|
+
result.enabled = true;
|
|
31
|
+
result.shortUrl = response.job_group?.short_url ?? result.shortUrl;
|
|
32
|
+
addNotices(result, response.notices ?? []);
|
|
33
|
+
items = items.concat(matchedItems(chunk, response.items));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
if (error instanceof SourceAlignmentRequestError && error.status === NOT_FOUND_STATUS)
|
|
38
|
+
return result;
|
|
39
|
+
logRequestFailure(deps.console, locale, error);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const { summary, aligned } = classifyItems(localeCandidates, items);
|
|
43
|
+
result.localeSummaries[locale] = summary;
|
|
44
|
+
const written = await writeAlignedCells(aligned, locale, deps);
|
|
45
|
+
summary.aligned = written.length;
|
|
46
|
+
result.alignedCells.push(...written);
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
export function summarizeAlignedCells(cells) {
|
|
51
|
+
return {
|
|
52
|
+
keysAligned: new Set(cells.map(cell => `${cell.source_path}\0${cell.key}`)).size,
|
|
53
|
+
alignedLanguages: [...new Set(cells.map(cell => cell.locale))]
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export function reportSourceAlignment(result, logger) {
|
|
57
|
+
if (!result.enabled)
|
|
58
|
+
return;
|
|
59
|
+
const lines = Object.entries(result.localeSummaries)
|
|
60
|
+
.map(([locale, summary]) => describeLocale(locale, summary))
|
|
61
|
+
.filter((line) => line !== null);
|
|
62
|
+
if (lines.length > 0) {
|
|
63
|
+
logger.log('» Translations of reworded source texts:');
|
|
64
|
+
for (const line of lines)
|
|
65
|
+
logger.log(` ${line}`);
|
|
66
|
+
}
|
|
67
|
+
for (const notice of result.notices) {
|
|
68
|
+
logger.log(chalk.blue(`ℹ ${notice}`));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function describeLocale(locale, summary) {
|
|
72
|
+
const parts = [];
|
|
73
|
+
if (summary.aligned > 0)
|
|
74
|
+
parts.push(`${summary.aligned} aligned`);
|
|
75
|
+
if (summary.unchanged > 0)
|
|
76
|
+
parts.push(`${summary.unchanged} already ${summary.unchanged === 1 ? 'fits' : 'fit'}`);
|
|
77
|
+
const reasons = Object.entries(summary.skipped);
|
|
78
|
+
if (reasons.length > 0) {
|
|
79
|
+
const total = reasons.reduce((sum, [, count]) => sum + count, 0);
|
|
80
|
+
const breakdown = reasons.map(([reason, count]) => `${count} ${reason}`).join(', ');
|
|
81
|
+
parts.push(`${total} skipped (${breakdown})`);
|
|
82
|
+
}
|
|
83
|
+
return parts.length > 0 ? `${locale}: ${parts.join(', ')}` : null;
|
|
84
|
+
}
|
|
85
|
+
function classifyItems(candidates, items) {
|
|
86
|
+
const summary = { aligned: 0, unchanged: 0, skipped: {} };
|
|
87
|
+
const aligned = [];
|
|
88
|
+
items.forEach((item, index) => {
|
|
89
|
+
if (item.status === 'aligned' && typeof item.value === 'string') {
|
|
90
|
+
aligned.push({ ...candidates[index], value: item.value });
|
|
91
|
+
}
|
|
92
|
+
else if (item.status === 'unchanged') {
|
|
93
|
+
summary.unchanged += 1;
|
|
94
|
+
}
|
|
95
|
+
else if (item.status === 'skipped') {
|
|
96
|
+
const reason = item.reason || 'unknown';
|
|
97
|
+
summary.skipped[reason] = (summary.skipped[reason] ?? 0) + 1;
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
return { summary, aligned };
|
|
101
|
+
}
|
|
102
|
+
async function writeAlignedCells(cells, locale, deps) {
|
|
103
|
+
const written = [];
|
|
104
|
+
for (const [targetPath, fileCells] of groupBy(cells, cell => cell.target_path)) {
|
|
105
|
+
const values = Object.fromEntries(fileCells.map(cell => [cell.key, cell.value]));
|
|
106
|
+
try {
|
|
107
|
+
await deps.updateTranslationFile(targetPath, values, locale, fileCells[0].source_path, undefined, deps.config);
|
|
108
|
+
written.push(...fileCells);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
deps.console.log(chalk.yellow(`⚠ Could not write aligned translations to ${targetPath}: ${error.message}`));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return written;
|
|
115
|
+
}
|
|
116
|
+
function matchedItems(requested, returned) {
|
|
117
|
+
const matches = returned.length === requested.length && returned.every((item, index) => item.key === requested[index].key &&
|
|
118
|
+
item.source_path === requested[index].source_path &&
|
|
119
|
+
item.target_path === requested[index].target_path);
|
|
120
|
+
if (!matches) {
|
|
121
|
+
throw new Error('the response did not match the request');
|
|
122
|
+
}
|
|
123
|
+
return returned;
|
|
124
|
+
}
|
|
125
|
+
function logRequestFailure(logger, locale, error) {
|
|
126
|
+
const message = error.message;
|
|
127
|
+
if (error instanceof SourceAlignmentRequestError && error.status === INVALID_PARAMETERS_STATUS) {
|
|
128
|
+
logger.log(chalk.yellow(`⚠ Alignment request for ${locale} was rejected: ${message}`));
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
logger.log(chalk.yellow(`⚠ Could not align ${locale} translations to the reworded source texts: ${message}. Existing translations were kept.`));
|
|
132
|
+
}
|
|
133
|
+
function addNotices(result, notices) {
|
|
134
|
+
for (const notice of notices) {
|
|
135
|
+
if (!result.notices.includes(notice))
|
|
136
|
+
result.notices.push(notice);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function toRequestItem(candidate) {
|
|
140
|
+
return {
|
|
141
|
+
source_path: candidate.source_path,
|
|
142
|
+
target_path: candidate.target_path,
|
|
143
|
+
format: candidate.format,
|
|
144
|
+
key: candidate.key,
|
|
145
|
+
previous_source: candidate.previous_source,
|
|
146
|
+
source: candidate.source,
|
|
147
|
+
target_base: candidate.target_base,
|
|
148
|
+
target_current: candidate.target_current
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function groupBy(values, keyOf) {
|
|
152
|
+
const groups = new Map();
|
|
153
|
+
for (const value of values) {
|
|
154
|
+
const key = keyOf(value);
|
|
155
|
+
groups.set(key, [...(groups.get(key) ?? []), value]);
|
|
156
|
+
}
|
|
157
|
+
return groups;
|
|
158
|
+
}
|
|
159
|
+
function chunked(values, size) {
|
|
160
|
+
const chunks = [];
|
|
161
|
+
for (let i = 0; i < values.length; i += size) {
|
|
162
|
+
chunks.push(values.slice(i, i + size));
|
|
163
|
+
}
|
|
164
|
+
return chunks;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=source-alignment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-alignment.js","sourceRoot":"","sources":["../../src/utils/source-alignment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAI5B,MAAM,6BAA6B,CAAC;AAyCrC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAEtC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAgC,EAChC,OAAyB,EACzB,IAA2B;IAE3B,MAAM,MAAM,GAA0B;QACpC,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,EAAE;QACnB,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,IAAI;KACf,CAAC;IAEF,KAAK,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5E,IAAI,KAAK,GAAgC,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,EAAE,CAAC;gBACrE,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC;oBAC3C,GAAG,OAAO;oBACV,MAAM;oBACN,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;iBAChC,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,OAAO;oBAAE,OAAO,MAAM,CAAC;gBAErC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;gBACtB,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,SAAS,EAAE,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC;gBACnE,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBAC3C,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,2BAA2B,IAAI,KAAK,CAAC,MAAM,KAAK,gBAAgB;gBAAE,OAAO,MAAM,CAAC;YACrG,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAC/C,SAAS;QACX,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACpE,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/D,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;QACjC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAoB;IACxD,OAAO;QACL,WAAW,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI;QAChF,gBAAgB,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAA6B,EAAE,MAAc;IACjF,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO;IAE5B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SAC3D,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAEnD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACvD,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAc,EAAE,OAA+B;IACrE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,UAAU,CAAC,CAAC;IAClE,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,SAAS,YAAY,OAAO,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAElH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpF,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,SAAS,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,CAAC;AAED,SAAS,aAAa,CACpB,UAAgC,EAChC,KAAkC;IAElC,MAAM,OAAO,GAA2B,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAClF,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACvC,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;YACxC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,KAAoB,EACpB,MAAc,EACd,IAA2B;IAE3B,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/G,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6CAA6C,UAAU,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CACnB,SAA+B,EAC/B,QAAqC;IAErC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACrF,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG;QACjC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,WAAW;QACjD,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,WAAW,CAClD,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc,EAAE,MAAc,EAAE,KAAc;IACvE,MAAM,OAAO,GAAI,KAAe,CAAC,OAAO,CAAC;IACzC,IAAI,KAAK,YAAY,2BAA2B,IAAI,KAAK,CAAC,MAAM,KAAK,yBAAyB,EAAE,CAAC;QAC/F,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,MAAM,kBAAkB,OAAO,EAAE,CAAC,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,MAAM,+CAA+C,OAAO,oCAAoC,CAAC,CAAC,CAAC;AAClJ,CAAC;AAED,SAAS,UAAU,CAAC,MAA6B,EAAE,OAAiB;IAClE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,SAA6B;IAClD,OAAO;QACL,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,cAAc,EAAE,SAAS,CAAC,cAAc;KACzC,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAI,MAAW,EAAE,KAA2B;IAC1D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAe,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,OAAO,CAAI,MAAW,EAAE,IAAY;IAC3C,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -3,6 +3,7 @@ import chalk from 'chalk';
|
|
|
3
3
|
import { isGitAvailable, getBaseBranch, resolveCompareRef, diffFileKeys, extractLocaleContent } from './git-changes.js';
|
|
4
4
|
import { parseFile, flattenTranslations } from './files.js';
|
|
5
5
|
import { findTargetFile } from './translation-utils.js';
|
|
6
|
+
import { recordUnreadableFile } from './unreadable-files.js';
|
|
6
7
|
const MAX_TOTAL_CHANGES = 1000;
|
|
7
8
|
const PO_FORMATS = new Set(['po', 'pot']);
|
|
8
9
|
/**
|
|
@@ -15,11 +16,12 @@ const PO_FORMATS = new Set(['po', 'pot']);
|
|
|
15
16
|
*/
|
|
16
17
|
export function detectTargetChanges(sourceFiles, targetFilesByLocale, config, verbose, ignoreMatcher) {
|
|
17
18
|
if (!isGitAvailable()) {
|
|
18
|
-
return
|
|
19
|
+
return skipIngestion('git is not available');
|
|
19
20
|
}
|
|
20
|
-
const
|
|
21
|
+
const baseBranch = getBaseBranch(config);
|
|
22
|
+
const resolvedRef = resolveCompareRef(baseBranch, verbose);
|
|
21
23
|
if (!resolvedRef) {
|
|
22
|
-
return
|
|
24
|
+
return skipIngestion(`base branch '${baseBranch}' not found`);
|
|
23
25
|
}
|
|
24
26
|
const result = [];
|
|
25
27
|
let totalChanges = 0;
|
|
@@ -38,8 +40,7 @@ export function detectTargetChanges(sourceFiles, targetFilesByLocale, config, ve
|
|
|
38
40
|
}
|
|
39
41
|
totalChanges += changes.length;
|
|
40
42
|
if (totalChanges > MAX_TOTAL_CHANGES) {
|
|
41
|
-
|
|
42
|
-
return null;
|
|
43
|
+
return skipIngestion(`more than ${MAX_TOTAL_CHANGES} changed values`);
|
|
43
44
|
}
|
|
44
45
|
result.push({
|
|
45
46
|
path: targetFile.path,
|
|
@@ -62,8 +63,7 @@ export function detectTargetChanges(sourceFiles, targetFilesByLocale, config, ve
|
|
|
62
63
|
continue;
|
|
63
64
|
totalChanges += updatedChanges.length;
|
|
64
65
|
if (totalChanges > MAX_TOTAL_CHANGES) {
|
|
65
|
-
|
|
66
|
-
return null;
|
|
66
|
+
return skipIngestion(`more than ${MAX_TOTAL_CHANGES} changed values`);
|
|
67
67
|
}
|
|
68
68
|
result.push({
|
|
69
69
|
path: sourceFile.path,
|
|
@@ -77,6 +77,10 @@ export function detectTargetChanges(sourceFiles, targetFilesByLocale, config, ve
|
|
|
77
77
|
}
|
|
78
78
|
return result;
|
|
79
79
|
}
|
|
80
|
+
function skipIngestion(reason) {
|
|
81
|
+
console.log(chalk.yellow(`Skipping translation ingestion and alignment: ${reason}`));
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
80
84
|
function detectFileChanges(targetFile, resolvedRef, verbose) {
|
|
81
85
|
try {
|
|
82
86
|
const diff = diffFileKeys(targetFile, resolvedRef, verbose);
|
|
@@ -105,6 +109,7 @@ function detectFileChanges(targetFile, resolvedRef, verbose) {
|
|
|
105
109
|
return changes;
|
|
106
110
|
}
|
|
107
111
|
catch (error) {
|
|
112
|
+
recordUnreadableFile(targetFile.path);
|
|
108
113
|
console.log(chalk.yellow(` Skipping ${targetFile.path} from translation ingestion: ${error.message}`));
|
|
109
114
|
return [];
|
|
110
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target-changes.js","sourceRoot":"","sources":["../../src/utils/target-changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"target-changes.js","sourceRoot":"","sources":["../../src/utils/target-changes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Files a run was configured to read but could not.
|
|
3
|
+
*
|
|
4
|
+
* A skip used to be a line on stdout and nothing more, so a run that failed to
|
|
5
|
+
* read every one of its files still printed "No changed keys need translation"
|
|
6
|
+
* and exited 0 (#779). Callers read this to tell "nothing to do" apart from
|
|
7
|
+
* "could not look", and fail the run rather than reporting success.
|
|
8
|
+
*
|
|
9
|
+
* Module state because the skips happen deep inside per-file loops whose
|
|
10
|
+
* signatures are shared by several commands; threading a result through all of
|
|
11
|
+
* them would be a larger change than the bug warrants. Reset at the start of
|
|
12
|
+
* each run.
|
|
13
|
+
*/
|
|
14
|
+
const unreadableFiles = new Set();
|
|
15
|
+
export function resetUnreadableFiles() {
|
|
16
|
+
unreadableFiles.clear();
|
|
17
|
+
}
|
|
18
|
+
export function recordUnreadableFile(path) {
|
|
19
|
+
unreadableFiles.add(path);
|
|
20
|
+
}
|
|
21
|
+
export function getUnreadableFiles() {
|
|
22
|
+
return [...unreadableFiles];
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=unreadable-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unreadable-files.js","sourceRoot":"","sources":["../../src/utils/unreadable-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;AAE1C,MAAM,UAAU,oBAAoB;IAClC,eAAe,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,GAAG,eAAe,CAAC,CAAC;AAC9B,CAAC"}
|