@localheroai/cli 0.0.74-rc.4 → 0.0.75-rc.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/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 +5 -7
- 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/check-utils.js +24 -9
- package/dist/utils/check-utils.js.map +1 -1
- 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 +144 -46
- 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
|
@@ -9,15 +9,21 @@ import { checkAuth } from '../utils/auth.js';
|
|
|
9
9
|
import { fetchSettings } from '../api/settings.js';
|
|
10
10
|
import { localeCodesMatch } from '../utils/translation-processor.js';
|
|
11
11
|
import { filterByGitChanges, isGitAvailable, getManifestForFinalize, getRemovedKeysManifestForFinalize } from '../utils/git-changes.js';
|
|
12
|
-
import { getCurrentBranch } from '../utils/git.js';
|
|
12
|
+
import { getCurrentBranch, getHeadSha } from '../utils/git.js';
|
|
13
13
|
import { findMissingTranslations, batchKeysWithMissing, findMissingTranslationsByLocale } from '../utils/translation-utils.js';
|
|
14
|
-
import { autoCommitChanges, buildMakemessagesCommand } from '../utils/github.js';
|
|
14
|
+
import { autoCommitChanges, buildMakemessagesCommand, MISSING_BRANCH_ERROR, MISSING_TOKEN_ERROR } from '../utils/github.js';
|
|
15
|
+
import { escapeAnnotationData } from '../utils/ci-context.js';
|
|
15
16
|
import { detectTargetChanges } from '../utils/target-changes.js';
|
|
17
|
+
import { resetUnreadableFiles, getUnreadableFiles } from '../utils/unreadable-files.js';
|
|
16
18
|
import { createPullRequestImport } from '../api/pull-request-imports.js';
|
|
17
19
|
import { summarizeImport } from '../utils/import-summary.js';
|
|
18
20
|
import { processTranslationBatches } from '../utils/translation-processor.js';
|
|
19
21
|
import { createIgnoreMatcher, summarizeRemoved } from '../utils/ignore-keys.js';
|
|
20
22
|
import { logIgnoreSummary } from '../utils/ignore-keys-logging.js';
|
|
23
|
+
import { collectAlignmentCandidates } from '../utils/alignment-candidates.js';
|
|
24
|
+
import { runSourceAlignment, reportSourceAlignment, summarizeAlignedCells } from '../utils/source-alignment.js';
|
|
25
|
+
import { sendAlignedImport } from '../utils/aligned-import.js';
|
|
26
|
+
import { keepAlignedCellsOnDisk } from '../utils/aligned-values-on-disk.js';
|
|
21
27
|
import { ApiResponseError } from '../types/index.js';
|
|
22
28
|
const defaultDeps = {
|
|
23
29
|
console,
|
|
@@ -40,6 +46,25 @@ const PROJECT_NOT_FOUND_CODE = 'project_not_found';
|
|
|
40
46
|
function pluralize(count, noun) {
|
|
41
47
|
return `${count} ${noun}${count === 1 ? '' : 's'}`;
|
|
42
48
|
}
|
|
49
|
+
const COMMIT_FAILURE_FIXES = {
|
|
50
|
+
[MISSING_TOKEN_ERROR]: 'Pass `GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}` in the step env, or install the Localhero GitHub App.'
|
|
51
|
+
};
|
|
52
|
+
const NOT_A_PULL_REQUEST_WARNING = '::warning::Translations were not committed: this is not a pull request run. Only pull_request runs commit translations.';
|
|
53
|
+
const PUSH_PERMISSION_FIX = 'Check that the workflow grants `permissions: contents: write`. On a pull request from a fork, GITHUB_TOKEN is read-only.';
|
|
54
|
+
function commitFailedAnnotation(reason) {
|
|
55
|
+
const fix = COMMIT_FAILURE_FIXES[reason] ?? PUSH_PERMISSION_FIX;
|
|
56
|
+
return `::error::${escapeAnnotationData(`Translations were not committed: ${reason}. ${fix}`)}`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* A file we were configured to read but could not is a failure, not a note.
|
|
60
|
+
* Reporting success over it is how a run that saw none of its files still
|
|
61
|
+
* went green (#779).
|
|
62
|
+
*/
|
|
63
|
+
function reportUnreadableFiles(unreadable) {
|
|
64
|
+
console.error(chalk.red(`\n\u2716 Could not read ${pluralize(unreadable.length, 'translation file')}:\n`));
|
|
65
|
+
unreadable.forEach(file => console.error(chalk.yellow(` ${file}`)));
|
|
66
|
+
console.error(chalk.yellow('\nNothing was sent for translation. Check that the paths in localhero.json resolve from the directory holding that file.\n'));
|
|
67
|
+
}
|
|
43
68
|
function isProjectNotFound(error) {
|
|
44
69
|
return error instanceof ApiResponseError && error.code === PROJECT_NOT_FOUND_CODE;
|
|
45
70
|
}
|
|
@@ -174,7 +199,10 @@ export async function translate(options = {}, deps = defaultDeps) {
|
|
|
174
199
|
}
|
|
175
200
|
const projectId = config.projectId;
|
|
176
201
|
const sourceLocale = config.sourceLocale;
|
|
177
|
-
|
|
202
|
+
const translationPaths = config.translationFiles.paths.join(' ');
|
|
203
|
+
const jobGroupId = nanoid();
|
|
204
|
+
let alignment = null;
|
|
205
|
+
async function sendPullRequestImport(targetChanges) {
|
|
178
206
|
if (targetChanges.length === 0)
|
|
179
207
|
return;
|
|
180
208
|
const branch = await getCurrentBranch();
|
|
@@ -207,11 +235,11 @@ export async function translate(options = {}, deps = defaultDeps) {
|
|
|
207
235
|
for (const skipped of importResult.skipped) {
|
|
208
236
|
console.log(chalk.yellow(` Skipped ${skipped.path}: ${skipped.key} (${skipped.reason})`));
|
|
209
237
|
}
|
|
210
|
-
if (summary.sourceTextsImported > 0) {
|
|
238
|
+
if (summary.sourceTextsImported > 0 && !alignment?.enabled) {
|
|
211
239
|
console.log(chalk.blue(`ℹ ${pluralize(summary.sourceTextsImported, 'source text')} changed. Existing translations were kept; review or align them from the Localhero comment on the PR.`));
|
|
212
240
|
}
|
|
213
241
|
}
|
|
214
|
-
async function sendFinalize(manifest,
|
|
242
|
+
async function sendFinalize(manifest, removedManifest) {
|
|
215
243
|
try {
|
|
216
244
|
const branch = await getCurrentBranch();
|
|
217
245
|
await finalizeTranslationJobs({
|
|
@@ -232,6 +260,72 @@ export async function translate(options = {}, deps = defaultDeps) {
|
|
|
232
260
|
}
|
|
233
261
|
}
|
|
234
262
|
}
|
|
263
|
+
async function alignRewordedSourceTexts(candidates, projectConfig) {
|
|
264
|
+
if (candidates.length === 0)
|
|
265
|
+
return null;
|
|
266
|
+
const branch = await getCurrentBranch();
|
|
267
|
+
if (!branch)
|
|
268
|
+
return null;
|
|
269
|
+
const headSha = await getHeadSha();
|
|
270
|
+
const result = await runSourceAlignment(candidates, { projectId, branch, jobGroupId, ...(headSha && { headSha }) }, { console, config: projectConfig, updateTranslationFile: translationUtils.updateTranslationFile });
|
|
271
|
+
reportSourceAlignment(result, console);
|
|
272
|
+
return result;
|
|
273
|
+
}
|
|
274
|
+
function runPostTranslateCommand(command) {
|
|
275
|
+
if (!command)
|
|
276
|
+
return;
|
|
277
|
+
try {
|
|
278
|
+
if (verbose) {
|
|
279
|
+
console.log(chalk.blue(`\nℹ Executing postTranslateCommand: ${command}`));
|
|
280
|
+
}
|
|
281
|
+
execUtils.execSync(command, { stdio: verbose ? 'inherit' : 'pipe' });
|
|
282
|
+
if (verbose) {
|
|
283
|
+
console.log(chalk.green('✓ postTranslateCommand completed successfully'));
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
const err = error;
|
|
288
|
+
console.warn(chalk.yellow(`\nℹ postTranslateCommand failed: ${err.message}`));
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// Aligned values are staged on the PR only once they are in the branch: after a
|
|
292
|
+
// commit that landed, or right after writing when the pipeline commits itself.
|
|
293
|
+
async function commitChanges(summary) {
|
|
294
|
+
const alignedCells = keepAlignedCellsOnDisk(alignment?.alignedCells ?? [], sourceLocale, console);
|
|
295
|
+
let inBranch = false;
|
|
296
|
+
if (options.skipCommit) {
|
|
297
|
+
inBranch = process.env.GITHUB_ACTIONS === 'true';
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
try {
|
|
301
|
+
const result = await gitUtils.autoCommitChanges(translationPaths, {
|
|
302
|
+
...summary,
|
|
303
|
+
...summarizeAlignedCells(alignedCells),
|
|
304
|
+
viewUrl: summary.viewUrl || alignment?.shortUrl || undefined
|
|
305
|
+
});
|
|
306
|
+
inBranch = result === 'new';
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
const err = error;
|
|
310
|
+
if (process.env.GITHUB_ACTIONS !== 'true') {
|
|
311
|
+
console.warn(chalk.yellow(`\nℹ Could not auto-commit changes: ${err.message}`));
|
|
312
|
+
}
|
|
313
|
+
else if (err.message === MISSING_BRANCH_ERROR) {
|
|
314
|
+
console.log(NOT_A_PULL_REQUEST_WARNING);
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
console.log(commitFailedAnnotation(err.message));
|
|
318
|
+
process.exitCode = 1;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
if (!inBranch || alignedCells.length === 0)
|
|
323
|
+
return;
|
|
324
|
+
const branch = await getCurrentBranch();
|
|
325
|
+
if (!branch)
|
|
326
|
+
return;
|
|
327
|
+
await sendAlignedImport(alignedCells, { projectId, branch, jobGroupId }, { console });
|
|
328
|
+
}
|
|
235
329
|
if (options.changedOnly && !isGitAvailable()) {
|
|
236
330
|
console.error(chalk.red('\n✖ Git is required for the --changed-only flag but is not available.\n'));
|
|
237
331
|
console.error(chalk.yellow('Please ensure you are in a git repository.\n'));
|
|
@@ -251,17 +345,32 @@ export async function translate(options = {}, deps = defaultDeps) {
|
|
|
251
345
|
let removedManifest = null;
|
|
252
346
|
let targetChanges = [];
|
|
253
347
|
if (options.changedOnly) {
|
|
348
|
+
resetUnreadableFiles();
|
|
254
349
|
manifest = getManifestForFinalize(sourceFiles, config, !!verbose, ignoreMatcher);
|
|
255
350
|
removedManifest = getRemovedKeysManifestForFinalize(sourceFiles, config, !!verbose);
|
|
256
351
|
targetChanges = detectTargetChanges(sourceFiles, targetFilesByLocale, config, !!verbose, ignoreMatcher) ?? [];
|
|
352
|
+
const alignmentCandidates = collectAlignmentCandidates(targetChanges, sourceFiles, targetFilesByLocale, config, !!verbose);
|
|
257
353
|
const filtered = filterByGitChanges(sourceFiles, missingByLocale, config, !!verbose);
|
|
354
|
+
// Before anything is sent: a run that could not read its files knows only
|
|
355
|
+
// part of the story, and finalizing on a partial manifest would record that
|
|
356
|
+
// partial view as the truth (#779).
|
|
357
|
+
const unreadable = getUnreadableFiles();
|
|
358
|
+
if (unreadable.length > 0) {
|
|
359
|
+
reportUnreadableFiles(unreadable);
|
|
360
|
+
process.exitCode = 1;
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
258
363
|
if (filtered !== null) {
|
|
364
|
+
alignment = await alignRewordedSourceTexts(alignmentCandidates, config);
|
|
259
365
|
if (Object.keys(filtered).length === 0) {
|
|
260
|
-
const jobGroupId = nanoid();
|
|
261
366
|
if (manifest !== null) {
|
|
262
|
-
await sendFinalize(manifest,
|
|
367
|
+
await sendFinalize(manifest, removedManifest);
|
|
368
|
+
}
|
|
369
|
+
await sendPullRequestImport(targetChanges);
|
|
370
|
+
if (alignment?.alignedCells.length) {
|
|
371
|
+
runPostTranslateCommand(config.postTranslateCommand);
|
|
372
|
+
await commitChanges({ keysTranslated: 0, languages: [] });
|
|
263
373
|
}
|
|
264
|
-
await sendPullRequestImport(targetChanges, jobGroupId);
|
|
265
374
|
console.log(chalk.green('✓ No changed keys need translation'));
|
|
266
375
|
return;
|
|
267
376
|
}
|
|
@@ -304,12 +413,11 @@ export async function translate(options = {}, deps = defaultDeps) {
|
|
|
304
413
|
return;
|
|
305
414
|
}
|
|
306
415
|
try {
|
|
307
|
-
const jobGroupId = nanoid();
|
|
308
416
|
const translationResult = await processTranslationBatches(batches, missingByLocale, config, !!verbose, { console, translationUtils }, jobGroupId);
|
|
309
417
|
if (manifest !== null) {
|
|
310
|
-
await sendFinalize(manifest,
|
|
418
|
+
await sendFinalize(manifest, removedManifest);
|
|
311
419
|
}
|
|
312
|
-
await sendPullRequestImport(targetChanges
|
|
420
|
+
await sendPullRequestImport(targetChanges);
|
|
313
421
|
const translatedLocales = new Set(translationResult.languages);
|
|
314
422
|
const onlySkipped = translationResult.skippedLanguages.filter((locale) => !translatedLocales.has(locale));
|
|
315
423
|
if (onlySkipped.length > 0) {
|
|
@@ -342,34 +450,14 @@ export async function translate(options = {}, deps = defaultDeps) {
|
|
|
342
450
|
const jobIdsParam = translationResult.allJobIds.join(',');
|
|
343
451
|
console.log(`» View results at: ${translationResult.resultsBaseUrl}?job_ids=${jobIdsParam}`);
|
|
344
452
|
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
catch (error) {
|
|
356
|
-
const err = error;
|
|
357
|
-
console.warn(chalk.yellow(`\nℹ postTranslateCommand failed: ${err.message}`));
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
if (!options.skipCommit) {
|
|
361
|
-
try {
|
|
362
|
-
await gitUtils.autoCommitChanges(config.translationFiles.paths.join(' '), {
|
|
363
|
-
keysTranslated: translationResult.uniqueKeysTranslated.size,
|
|
364
|
-
languages: translationResult.languages,
|
|
365
|
-
viewUrl: translationResult.jobGroupShortUrl || translationResult.resultsBaseUrl || undefined
|
|
366
|
-
});
|
|
367
|
-
}
|
|
368
|
-
catch (error) {
|
|
369
|
-
const err = error;
|
|
370
|
-
console.warn(chalk.yellow(`\nℹ Could not auto-commit changes: ${err.message}`));
|
|
371
|
-
}
|
|
372
|
-
}
|
|
453
|
+
}
|
|
454
|
+
if (translationResult.uniqueKeysTranslated.size > 0 || alignment?.alignedCells.length) {
|
|
455
|
+
runPostTranslateCommand(config.postTranslateCommand);
|
|
456
|
+
await commitChanges({
|
|
457
|
+
keysTranslated: translationResult.uniqueKeysTranslated.size,
|
|
458
|
+
languages: translationResult.languages,
|
|
459
|
+
viewUrl: translationResult.jobGroupShortUrl || translationResult.resultsBaseUrl || undefined
|
|
460
|
+
});
|
|
373
461
|
}
|
|
374
462
|
if (translationResult.failedLanguages.length > 0 && translationResult.uniqueKeysTranslated.size === 0) {
|
|
375
463
|
process.exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translate.js","sourceRoot":"","sources":["../../src/commands/translate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"translate.js","sourceRoot":"","sources":["../../src/commands/translate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { createPullRequestImport, PullRequestImportError } from '../api/pull-request-imports.js';
|
|
3
|
+
const MAX_FILES_PER_REQUEST = 50;
|
|
4
|
+
const MAX_CHANGES_PER_REQUEST = 1000;
|
|
5
|
+
const RETRIES = 3;
|
|
6
|
+
const RETRY_DELAY_MS = 1000;
|
|
7
|
+
const SERVER_ERROR_STATUS = 500;
|
|
8
|
+
const FETCH_FAILED_MESSAGE = 'fetch failed';
|
|
9
|
+
const TIMEOUT_ERROR_NAMES = new Set(['TimeoutError', 'AbortError']);
|
|
10
|
+
/**
|
|
11
|
+
* Stage the aligned values on the pull request, marked with the source text
|
|
12
|
+
* they were aligned to. Sent only once they are in the branch. A failure is not
|
|
13
|
+
* fatal: the next push brings the committed values in as ordinary edits.
|
|
14
|
+
*/
|
|
15
|
+
export async function sendAlignedImport(cells, request, deps) {
|
|
16
|
+
const sleep = deps.sleep ?? defaultSleep;
|
|
17
|
+
let importedCount = 0;
|
|
18
|
+
for (const files of chunkFiles(buildImportFiles(cells))) {
|
|
19
|
+
const changeCount = files.reduce((sum, file) => sum + file.changes.length, 0);
|
|
20
|
+
try {
|
|
21
|
+
const response = await withRetries(() => createPullRequestImport({ ...request, files }), sleep);
|
|
22
|
+
importedCount += response.imported_count;
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
deps.console.log(chalk.yellow(`⚠ Could not send ${changeCount} aligned values to Localhero: ${error.message}. They are committed to the branch and will be picked up on the next push.`));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (importedCount > 0) {
|
|
29
|
+
deps.console.log(`» Sent ${importedCount} aligned ${importedCount === 1 ? 'value' : 'values'} for review`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function buildImportFiles(cells) {
|
|
33
|
+
const files = new Map();
|
|
34
|
+
for (const cell of cells) {
|
|
35
|
+
const id = `${cell.locale}\0${cell.target_path}`;
|
|
36
|
+
if (!files.has(id)) {
|
|
37
|
+
files.set(id, {
|
|
38
|
+
path: cell.target_path,
|
|
39
|
+
source_path: cell.source_path,
|
|
40
|
+
locale: cell.locale,
|
|
41
|
+
format: cell.format,
|
|
42
|
+
changes: []
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
files.get(id).changes.push({
|
|
46
|
+
key: cell.key,
|
|
47
|
+
status: 'updated',
|
|
48
|
+
value: cell.value,
|
|
49
|
+
old_value: cell.target_base,
|
|
50
|
+
source_value: cell.source,
|
|
51
|
+
aligned_source: cell.source
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return [...files.values()];
|
|
55
|
+
}
|
|
56
|
+
function chunkFiles(files) {
|
|
57
|
+
const chunks = [];
|
|
58
|
+
let current = [];
|
|
59
|
+
let currentChanges = 0;
|
|
60
|
+
for (const file of files) {
|
|
61
|
+
for (let start = 0; start < file.changes.length; start += MAX_CHANGES_PER_REQUEST) {
|
|
62
|
+
const piece = { ...file, changes: file.changes.slice(start, start + MAX_CHANGES_PER_REQUEST) };
|
|
63
|
+
const full = current.length === MAX_FILES_PER_REQUEST ||
|
|
64
|
+
currentChanges + piece.changes.length > MAX_CHANGES_PER_REQUEST;
|
|
65
|
+
if (full) {
|
|
66
|
+
chunks.push(current);
|
|
67
|
+
current = [];
|
|
68
|
+
currentChanges = 0;
|
|
69
|
+
}
|
|
70
|
+
current.push(piece);
|
|
71
|
+
currentChanges += piece.changes.length;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (current.length > 0)
|
|
75
|
+
chunks.push(current);
|
|
76
|
+
return chunks;
|
|
77
|
+
}
|
|
78
|
+
async function withRetries(call, sleep) {
|
|
79
|
+
for (let attempt = 0;; attempt++) {
|
|
80
|
+
try {
|
|
81
|
+
return await call();
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
if (attempt === RETRIES || !isRetryable(error))
|
|
85
|
+
throw error;
|
|
86
|
+
await sleep(RETRY_DELAY_MS * (attempt + 1));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function isRetryable(error) {
|
|
91
|
+
if (error instanceof PullRequestImportError)
|
|
92
|
+
return error.status >= SERVER_ERROR_STATUS;
|
|
93
|
+
return isNetworkError(error);
|
|
94
|
+
}
|
|
95
|
+
// Node's fetch rejects with a TypeError('fetch failed') for connection errors,
|
|
96
|
+
// and with a TimeoutError or AbortError when a request times out.
|
|
97
|
+
function isNetworkError(error) {
|
|
98
|
+
if (error instanceof TypeError)
|
|
99
|
+
return error.message === FETCH_FAILED_MESSAGE;
|
|
100
|
+
return error instanceof Error && TIMEOUT_ERROR_NAMES.has(error.name);
|
|
101
|
+
}
|
|
102
|
+
function defaultSleep(ms) {
|
|
103
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=aligned-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aligned-import.js","sourceRoot":"","sources":["../../src/utils/aligned-import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { parseFile, flattenTranslations } from './files.js';
|
|
5
|
+
import { extractLocaleContent } from './git-changes.js';
|
|
6
|
+
/**
|
|
7
|
+
* Keep only the aligned cells whose value and source text are still in the
|
|
8
|
+
* files as they were aligned. A postTranslateCommand can reformat or drop a
|
|
9
|
+
* value, and Localhero must not stage a value the commit doesn't contain.
|
|
10
|
+
*/
|
|
11
|
+
export function keepAlignedCellsOnDisk(cells, sourceLocale, logger) {
|
|
12
|
+
const valuesByFile = new Map();
|
|
13
|
+
const valuesFor = (filePath, locale) => {
|
|
14
|
+
const id = `${locale}\0${filePath}`;
|
|
15
|
+
if (!valuesByFile.has(id)) {
|
|
16
|
+
valuesByFile.set(id, readValues(filePath, locale));
|
|
17
|
+
}
|
|
18
|
+
return valuesByFile.get(id);
|
|
19
|
+
};
|
|
20
|
+
const kept = cells.filter((cell) => valuesFor(cell.target_path, cell.locale)?.[cell.key] === cell.value &&
|
|
21
|
+
valuesFor(cell.source_path, sourceLocale)?.[cell.key] === cell.source);
|
|
22
|
+
const dropped = cells.length - kept.length;
|
|
23
|
+
if (dropped > 0) {
|
|
24
|
+
const noun = dropped === 1 ? 'value' : 'values';
|
|
25
|
+
logger.log(chalk.dim(`» ${dropped} aligned ${noun} changed after they were written (postTranslateCommand?); not sent for review`));
|
|
26
|
+
}
|
|
27
|
+
return kept;
|
|
28
|
+
}
|
|
29
|
+
function readValues(filePath, locale) {
|
|
30
|
+
try {
|
|
31
|
+
const format = path.extname(filePath).slice(1);
|
|
32
|
+
const parsed = parseFile(readFileSync(filePath, 'utf-8'), format, filePath);
|
|
33
|
+
return flattenTranslations(extractLocaleContent(parsed, locale));
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=aligned-values-on-disk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aligned-values-on-disk.js","sourceRoot":"","sources":["../../src/utils/aligned-values-on-disk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxD;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAoB,EAAE,YAAoB,EAAE,MAAc;IAC/F,MAAM,YAAY,GAAG,IAAI,GAAG,EAA0C,CAAC;IACvE,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,MAAc,EAAE,EAAE;QACrD,MAAM,EAAE,GAAG,GAAG,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACjC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK;QACnE,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,CACtE,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,YAAY,IAAI,+EAA+E,CAAC,CAAC,CAAC;IACrI,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB,EAAE,MAAc;IAClD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5E,OAAO,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getBaseBranch, resolveCompareRef, diffFileKeys } from './git-changes.js';
|
|
3
|
+
import { findTargetFile } from './translation-utils.js';
|
|
4
|
+
const ALIGNABLE_FORMATS = new Set(['yml', 'yaml', 'json']);
|
|
5
|
+
/**
|
|
6
|
+
* Pair every source text reworded in this branch with each target locale's
|
|
7
|
+
* translation of it. Keys a target doesn't have are left to the missing-key flow.
|
|
8
|
+
*/
|
|
9
|
+
export function collectAlignmentCandidates(targetChanges, sourceFiles, targetFilesByLocale, config, verbose) {
|
|
10
|
+
const rewordedFiles = targetChanges
|
|
11
|
+
.filter(file => isSourcePass(file, config.sourceLocale))
|
|
12
|
+
.map(file => ({ ...file, changes: file.changes.filter(isRewording) }))
|
|
13
|
+
.filter(file => file.changes.length > 0);
|
|
14
|
+
if (rewordedFiles.length === 0)
|
|
15
|
+
return [];
|
|
16
|
+
const resolvedRef = resolveCompareRef(getBaseBranch(config), verbose);
|
|
17
|
+
if (!resolvedRef)
|
|
18
|
+
return [];
|
|
19
|
+
const candidates = [];
|
|
20
|
+
for (const locale of config.outputLocales) {
|
|
21
|
+
for (const rewordedFile of rewordedFiles) {
|
|
22
|
+
const sourceFile = sourceFiles.find(file => file.path === rewordedFile.path);
|
|
23
|
+
if (!sourceFile)
|
|
24
|
+
continue;
|
|
25
|
+
const targetFile = findTargetFile(targetFilesByLocale[locale] ?? [], locale, sourceFile, config.sourceLocale);
|
|
26
|
+
if (!targetFile)
|
|
27
|
+
continue;
|
|
28
|
+
const diff = readTargetDiff(targetFile, resolvedRef, verbose);
|
|
29
|
+
if (!diff)
|
|
30
|
+
continue;
|
|
31
|
+
for (const change of rewordedFile.changes) {
|
|
32
|
+
const targetCurrent = diff.newFlat[change.key];
|
|
33
|
+
// An absent or empty target is filled by the missing-key flow, which would overwrite an aligned value.
|
|
34
|
+
if (!isFilledString(targetCurrent))
|
|
35
|
+
continue;
|
|
36
|
+
const targetBase = diff.oldFlat[change.key];
|
|
37
|
+
candidates.push({
|
|
38
|
+
locale,
|
|
39
|
+
source_path: sourceFile.path,
|
|
40
|
+
target_path: targetFile.path,
|
|
41
|
+
format: targetFile.format,
|
|
42
|
+
key: change.key,
|
|
43
|
+
previous_source: change.old_value,
|
|
44
|
+
source: change.value,
|
|
45
|
+
target_base: typeof targetBase === 'string' ? targetBase : null,
|
|
46
|
+
target_current: targetCurrent
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return candidates;
|
|
52
|
+
}
|
|
53
|
+
function isSourcePass(file, sourceLocale) {
|
|
54
|
+
return file.locale === sourceLocale &&
|
|
55
|
+
file.path === file.source_path &&
|
|
56
|
+
ALIGNABLE_FORMATS.has(file.format.toLowerCase());
|
|
57
|
+
}
|
|
58
|
+
function isRewording(change) {
|
|
59
|
+
return change.status === 'updated' && isFilledString(change.old_value) && isFilledString(change.value);
|
|
60
|
+
}
|
|
61
|
+
function isFilledString(value) {
|
|
62
|
+
return typeof value === 'string' && value !== '';
|
|
63
|
+
}
|
|
64
|
+
function readTargetDiff(targetFile, resolvedRef, verbose) {
|
|
65
|
+
try {
|
|
66
|
+
return diffFileKeys(targetFile, resolvedRef, verbose);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (verbose) {
|
|
70
|
+
console.log(chalk.dim(` ${targetFile.path}: skipping alignment, ${error.message}`));
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=alignment-candidates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alignment-candidates.js","sourceRoot":"","sources":["../../src/utils/alignment-candidates.ts"],"names":[],"mappings":"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"}
|
|
@@ -192,7 +192,10 @@ function pluralParentsOf(keys) {
|
|
|
192
192
|
return parents;
|
|
193
193
|
}
|
|
194
194
|
/** A source plural group the target has content for but no plural forms; with no content it is simply missing. */
|
|
195
|
-
export function findPluralShapeMismatches(sourceKeys, targetKeys) {
|
|
195
|
+
export function findPluralShapeMismatches(sourceKeys, targetKeys, locale) {
|
|
196
|
+
// Japanese or Chinese only have `other`, so a single string is the right shape there.
|
|
197
|
+
if (locale !== undefined && usedPluralCategories(locale)?.join() === 'other')
|
|
198
|
+
return [];
|
|
196
199
|
const sourceParents = pluralParentsOf(Object.keys(sourceKeys));
|
|
197
200
|
const targetParents = pluralParentsOf(Object.keys(targetKeys));
|
|
198
201
|
const targetKeyList = Object.keys(targetKeys);
|
|
@@ -208,6 +211,13 @@ export function findPluralShapeMismatches(sourceKeys, targetKeys) {
|
|
|
208
211
|
return mismatches;
|
|
209
212
|
}
|
|
210
213
|
/** Identical text is only a hint, never an error: short words and proper nouns are often the same across languages. */
|
|
214
|
+
const NON_TEXT = /%\{[^}]*\}|%<[^>]*>\w|\{\{[^}]*\}\}|\{[^}]*\}|%[-_0^#]?[a-zA-Z%]/g;
|
|
215
|
+
// A delimiter, a strftime format or `false` is meant to be the same in every language.
|
|
216
|
+
function isText(raw, value) {
|
|
217
|
+
if (typeof raw === 'number' || typeof raw === 'boolean')
|
|
218
|
+
return false;
|
|
219
|
+
return /\p{L}/u.test(value.replace(NON_TEXT, ''));
|
|
220
|
+
}
|
|
211
221
|
export function findEmptyAndIdentical(sourceKeys, targetKeys) {
|
|
212
222
|
const empty = [];
|
|
213
223
|
const identical = [];
|
|
@@ -221,7 +231,7 @@ export function findEmptyAndIdentical(sourceKeys, targetKeys) {
|
|
|
221
231
|
if (target === '') {
|
|
222
232
|
empty.push({ key, source });
|
|
223
233
|
}
|
|
224
|
-
else if (target === source) {
|
|
234
|
+
else if (target === source && isText(targetKeys[key], target)) {
|
|
225
235
|
identical.push({ key, value: source });
|
|
226
236
|
}
|
|
227
237
|
}
|
|
@@ -293,14 +303,19 @@ function railsPluralGroups(keys) {
|
|
|
293
303
|
* Null for an unknown locale. Only categories reached by 0..1000 count: CLDR gives es/fr/it/pt
|
|
294
304
|
* a `many` for 1,000,000 that rails-i18n does not implement and no one writes.
|
|
295
305
|
*/
|
|
306
|
+
// Rails-style codes (zh_cn) and custom variants (ja_easy) fall back to their language.
|
|
296
307
|
export function usedPluralCategories(locale) {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
308
|
+
const candidates = [locale, locale.replace(/_/g, '-'), locale.split(/[-_]/)[0]];
|
|
309
|
+
for (const candidate of candidates) {
|
|
310
|
+
try {
|
|
311
|
+
const rules = new Intl.PluralRules(candidate);
|
|
312
|
+
const reached = new Set(Array.from({ length: 1001 }, (_, n) => rules.select(n)));
|
|
313
|
+
return rules.resolvedOptions().pluralCategories.filter((category) => reached.has(category));
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
304
318
|
}
|
|
319
|
+
return null;
|
|
305
320
|
}
|
|
306
321
|
//# sourceMappingURL=check-utils.js.map
|