i18next-cli 1.71.3 → 1.72.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/README.md CHANGED
@@ -316,6 +316,10 @@ Synchronizes secondary language files against your primary language file, adding
316
316
  npx i18next-cli sync
317
317
  ```
318
318
 
319
+ **Options:**
320
+ - `--changed-only`: Only sync the keys that changed on the current git branch. The primary-language files are diffed against the merge-base with the base branch, and only added/modified keys are propagated to the secondary languages; nothing is removed. Changed keys are scoped per source file (the same bare key name in another namespace does not match), and when any plural variant of a key changed, all its plural forms are included (target languages often need more CLDR plural forms than the source). Requires git and JSON/JSON5/YAML translation files
321
+ - `--base <ref>`: Base branch/ref for `--changed-only` (default: auto-detect `origin/HEAD`, then `main`, then `master`). In CI, make sure the base branch is fetched — e.g. `actions/checkout` with `fetch-depth: 0`
322
+
319
323
  ### `lint`
320
324
  Analyzes your source code for internationalization issues. Can run without a config file.
321
325
 
@@ -741,6 +745,8 @@ npx i18next-cli locize-sync [options]
741
745
  - `--auto-translate <true|false>`: Trigger AI/MT auto-translation of newly synced keys. Requires auto-translation in your Locize project (enabled by default for new projects; runs once the project is subscribed or an AI/MT provider is configured)
742
746
  - `--auto-translate-review <true|false>`: Route auto-translated segments through the review workflow for languages that have review enabled
743
747
  - `--auto-translate-languages <lng1,lng2>`: Restrict auto-translation to these target languages (defaults to all)
748
+ - `--changed-only`: Only sync and auto-translate the keys that changed on the current git branch compared to the base branch — ideal for translating just a pull request's diff instead of the whole project. The source-language files are diffed against the merge-base with the base branch; key creation, value updates and auto-translation are restricted to those keys, and deletions are skipped. Keys are scoped per namespace file, and when any plural variant of a key changed, all its plural forms are included. Requires git and locize-cli >= 12.7
749
+ - `--base <ref>`: Base branch/ref for `--changed-only` (default: auto-detect `origin/HEAD`, then `main`, then `master`). In CI, make sure the base branch is fetched — e.g. `actions/checkout` with `fetch-depth: 0`
744
750
 
745
751
  The same options can be set persistently in the `locize` block of your config:
746
752
 
@@ -753,6 +759,8 @@ export default defineConfig({
753
759
  autoTranslate: true,
754
760
  autoTranslateReview: false,
755
761
  autoTranslateLanguages: ['de', 'fr'],
762
+ changedOnly: true, // only sync keys changed vs. the base branch
763
+ changedOnlyBase: 'main', // optional; auto-detected when omitted
756
764
  },
757
765
  });
758
766
  ```
package/dist/cjs/cli.js CHANGED
@@ -37,7 +37,7 @@ const program = new commander.Command();
37
37
  program
38
38
  .name('i18next-cli')
39
39
  .description('A unified, high-performance i18next CLI.')
40
- .version('1.71.3'); // This string is replaced with the actual version at build time by rollup
40
+ .version('1.72.0'); // This string is replaced with the actual version at build time by rollup
41
41
  // new: global config override option
42
42
  program.option('-c, --config <path>', 'Path to i18next-cli config file (overrides detection)');
43
43
  program
@@ -187,10 +187,18 @@ program
187
187
  .command('sync')
188
188
  .description('Synchronize secondary language files with the primary language file.')
189
189
  .option('-q, --quiet', 'Suppress spinner and output')
190
+ .option('--changed-only', 'Only sync keys that changed on the current git branch compared to the base branch (requires git). Removals are skipped.')
191
+ .option('--base <ref>', 'Base git branch/ref for --changed-only (default: auto-detect origin/HEAD, then main, then master).')
190
192
  .action(async (options) => {
191
193
  const cfgPath = program.opts().config;
192
194
  const config$1 = await config.ensureConfig(cfgPath);
193
- await syncer.runSyncer(config$1, { quiet: !!options.quiet });
195
+ try {
196
+ await syncer.runSyncer(config$1, { quiet: !!options.quiet, changedOnly: !!options.changedOnly, base: options.base });
197
+ }
198
+ catch (error) {
199
+ console.error(node_util.styleText('red', error instanceof Error ? error.message : String(error)));
200
+ process.exit(1);
201
+ }
194
202
  });
195
203
  program
196
204
  .command('migrate-config [configPath]')
@@ -331,6 +339,8 @@ program
331
339
  .option('--auto-translate <true|false>', 'Trigger AI/MT auto-translation of newly synced keys (requires auto-translation enabled in your Locize project; on by default for new projects).')
332
340
  .option('--auto-translate-review <true|false>', 'Route auto-translated segments through the review workflow for languages that have review enabled.')
333
341
  .option('--auto-translate-languages <lng1,lng2>', 'Restrict auto-translation to these target languages (comma separated; defaults to all languages).')
342
+ .option('--changed-only', 'Only sync and auto-translate keys that changed on the current git branch compared to the base branch (requires git; deletions are skipped).')
343
+ .option('--base <ref>', 'Base git branch/ref for --changed-only (default: auto-detect origin/HEAD, then main, then master).')
334
344
  .action(async (options) => {
335
345
  const cfgPath = program.opts().config;
336
346
  const config$1 = await config.ensureConfig(cfgPath);
@@ -236,6 +236,14 @@ function buildArgs(command, config, cliOptions) {
236
236
  if (languages)
237
237
  commandArgs.push('--auto-translate-languages', languages);
238
238
  }
239
+ // Requires locize-cli >= 12.7 (older versions reject the unknown option).
240
+ const changedOnly = cliOptions.changedOnly ?? locizeConfig.changedOnly;
241
+ if (changedOnly === true || changedOnly === 'true') {
242
+ commandArgs.push('--changed-only', 'true');
243
+ const gitBase = cliOptions.base ?? locizeConfig.changedOnlyBase;
244
+ if (gitBase)
245
+ commandArgs.push('--base', gitBase);
246
+ }
239
247
  }
240
248
  // Derive a sensible base path for locize from the configured output.
241
249
  // If output is a string template we can strip the language placeholder.
@@ -11,6 +11,7 @@ var fileUtils = require('./utils/file-utils.js');
11
11
  var funnelMsgTracker = require('./utils/funnel-msg-tracker.js');
12
12
  var nestedObject = require('./utils/nested-object.js');
13
13
  var pluralRules = require('./utils/plural-rules.js');
14
+ var gitChangedKeys = require('./utils/git-changed-keys.js');
14
15
 
15
16
  /**
16
17
  * Synchronizes translation files across different locales by ensuring all secondary
@@ -44,6 +45,10 @@ var pluralRules = require('./utils/plural-rules.js');
44
45
  */
45
46
  async function runSyncer(config, options = {}) {
46
47
  const internalLogger = options.logger ?? new logger.ConsoleLogger();
48
+ // Resolved before the try/catch below on purpose: an unusable git setup
49
+ // must fail the command (clear message, non-zero exit) instead of being
50
+ // logged and swallowed like a regular sync error.
51
+ const gitCompare = options.changedOnly ? gitChangedKeys.resolveGitCompareRef(options.base) : null;
47
52
  const spinner = wrapOra.createSpinnerLike('Running i18next locale synchronizer...\n', { quiet: !!options.quiet, logger: options.logger });
48
53
  try {
49
54
  const primaryLanguage = config.extract.primaryLanguage || config.locales[0] || 'en';
@@ -81,6 +86,23 @@ async function runSyncer(config, options = {}) {
81
86
  }
82
87
  const primaryKeys = nestedObject.getNestedKeys(primaryTranslations, keySeparator ?? '.');
83
88
  const primaryKeySet = new Set(primaryKeys);
89
+ // --changed-only: diff this primary file against its state at the git
90
+ // compare ref. The changed set is scoped to THIS file so the same bare
91
+ // key name in another namespace does not cross-match.
92
+ let isChangedKey = null;
93
+ if (gitCompare) {
94
+ const oldContent = gitChangedKeys.readFileAtRef(gitCompare.compareRef, primaryPath);
95
+ const oldTranslations = oldContent === null ? {} : gitChangedKeys.parseTranslationContent(oldContent, primaryPath);
96
+ const changedKeys = new Set();
97
+ for (const key of primaryKeys) {
98
+ const newValue = nestedObject.getNestedValue(primaryTranslations, key, keySeparator ?? '.');
99
+ const oldValue = nestedObject.getNestedValue(oldTranslations, key, keySeparator ?? '.');
100
+ if (oldValue === undefined || JSON.stringify(oldValue) !== JSON.stringify(newValue)) {
101
+ changedKeys.add(key);
102
+ }
103
+ }
104
+ isChangedKey = gitChangedKeys.makeChangedKeyMatcher(changedKeys, config.extract.pluralSeparator ?? '_');
105
+ }
84
106
  // 3. For each secondary language, sync the current namespace
85
107
  for (const lang of secondaryLanguages) {
86
108
  const secondaryPath = fileUtils.getOutputPath(output, lang, ns);
@@ -170,17 +192,25 @@ async function runSyncer(config, options = {}) {
170
192
  const existingValue = nestedObject.getNestedValue(existingSecondaryTranslations, key, keySeparator ?? '.');
171
193
  // Only preserve non-empty values; an empty string was likely a
172
194
  // placeholder left by a previous (buggy) sync run and should not
173
- // be perpetuated.
174
- if (existingValue !== '' && existingValue != null) {
195
+ // be perpetuated. Under --changed-only nothing is ever dropped.
196
+ if ((existingValue !== '' && existingValue != null) || isChangedKey) {
175
197
  nestedObject.setNestedValue(newSecondaryTranslations, key, existingValue, keySeparator ?? '.');
176
198
  handledKeys.add(key);
177
199
  }
178
200
  }
201
+ else if (isChangedKey) {
202
+ // --changed-only: removals are out of scope, keep obsolete keys as-is
203
+ const existingValue = nestedObject.getNestedValue(existingSecondaryTranslations, key, keySeparator ?? '.');
204
+ nestedObject.setNestedValue(newSecondaryTranslations, key, existingValue, keySeparator ?? '.');
205
+ }
179
206
  // else: obsolete key — omit it from the output
180
207
  }
181
208
  // Pass 2: new primary keys not yet in the secondary file
182
209
  for (const key of primaryKeys) {
183
210
  if (!handledKeys.has(key)) {
211
+ // --changed-only: only propagate keys that changed on this branch
212
+ if (isChangedKey && !isChangedKey(key))
213
+ continue;
184
214
  const primaryValue = nestedObject.getNestedValue(primaryTranslations, key, keySeparator ?? '.');
185
215
  const valueToSet = defaultValue.resolveDefaultValue(defaultValue$1, key, ns, lang, primaryValue);
186
216
  nestedObject.setNestedValue(newSecondaryTranslations, key, valueToSet, keySeparator ?? '.');
@@ -0,0 +1,139 @@
1
+ 'use strict';
2
+
3
+ var node_child_process = require('node:child_process');
4
+ var node_util = require('node:util');
5
+ var node_path = require('node:path');
6
+ var json5Parser = require('@croct/json5-parser');
7
+ var yaml = require('yaml');
8
+
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ var yaml__default = /*#__PURE__*/_interopDefault(yaml);
12
+
13
+ const runGit = (args) => node_child_process.execFileSync('git', args, {
14
+ stdio: ['ignore', 'pipe', 'pipe'],
15
+ encoding: 'utf8',
16
+ maxBuffer: 50 * 1024 * 1024,
17
+ });
18
+ const CI_FETCH_HINT = 'In CI, make sure the checkout is not shallow and includes the base branch — e.g. actions/checkout with "fetch-depth: 0".';
19
+ /**
20
+ * Resolves the git ref to compare against for --changed-only.
21
+ *
22
+ * Returns the resolved base branch (for messaging) and the merge-base of that
23
+ * ref and HEAD — the commit where the current branch diverged — so commits
24
+ * landing on the base branch after the branch point are not attributed to this
25
+ * branch (the semantics of `git diff base...HEAD`). Falls back to the base tip
26
+ * when merge-base cannot be computed (e.g. shallow clones).
27
+ *
28
+ * Throws with an actionable message when git is unavailable, the cwd is not
29
+ * inside a repository, or no base ref can be resolved.
30
+ */
31
+ function resolveGitCompareRef(base) {
32
+ try {
33
+ runGit(['--version']);
34
+ }
35
+ catch {
36
+ throw new Error('--changed-only requires git, but the "git" command was not found. Install git or remove --changed-only to sync the whole project.');
37
+ }
38
+ try {
39
+ runGit(['rev-parse', '--git-dir']);
40
+ }
41
+ catch {
42
+ throw new Error(`--changed-only requires a git repository, but "${process.cwd()}" is not inside one. Run the sync inside your repository or remove --changed-only to sync the whole project.`);
43
+ }
44
+ const candidates = base
45
+ ? [base, `origin/${base}`]
46
+ : ['origin/HEAD', 'main', 'origin/main', 'master', 'origin/master'];
47
+ let resolvedBase;
48
+ for (const candidate of candidates) {
49
+ try {
50
+ runGit(['rev-parse', '--verify', '--quiet', `${candidate}^{commit}`]);
51
+ resolvedBase = candidate;
52
+ break;
53
+ }
54
+ catch { /* try the next candidate */ }
55
+ }
56
+ if (!resolvedBase) {
57
+ if (base) {
58
+ throw new Error(`--changed-only could not resolve the base ref "${base}" (also tried "origin/${base}"). Fetch it first (git fetch origin ${base}). ${CI_FETCH_HINT}`);
59
+ }
60
+ throw new Error(`--changed-only could not auto-detect a base branch (tried origin/HEAD, main and master). Pass one explicitly with --base <ref>. ${CI_FETCH_HINT}`);
61
+ }
62
+ let compareRef;
63
+ try {
64
+ compareRef = runGit(['merge-base', resolvedBase, 'HEAD']).trim();
65
+ }
66
+ catch { /* fall back to the base tip below */ }
67
+ if (!compareRef) {
68
+ console.warn(node_util.styleText('yellow', `could not find the merge-base of ${resolvedBase} and HEAD — comparing against ${resolvedBase} directly. On shallow CI clones (actions/checkout default fetch-depth: 1) deepen the fetch for exact results.`));
69
+ compareRef = resolvedBase;
70
+ }
71
+ return { base: resolvedBase, compareRef };
72
+ }
73
+ /**
74
+ * Returns the content of a file at the given ref, or `null` when the file did
75
+ * not exist there (a file new on this branch). Existence is checked via
76
+ * cat-file's exit code instead of matching `git show`'s stderr, which is
77
+ * localized.
78
+ */
79
+ function readFileAtRef(compareRef, filePath) {
80
+ const rel = node_path.isAbsolute(filePath) ? node_path.relative(process.cwd(), filePath) : filePath;
81
+ // "./" makes the path relative to the cwd instead of the repo root
82
+ const gitPath = `${compareRef}:./${rel.split(node_path.sep).join('/')}`;
83
+ try {
84
+ runGit(['cat-file', '-e', gitPath]);
85
+ }
86
+ catch {
87
+ return null;
88
+ }
89
+ return runGit(['show', gitPath]);
90
+ }
91
+ /**
92
+ * Parses translation file content from a string (git blob) using the same
93
+ * parsers as loadTranslationFile. JS/TS resource modules cannot be evaluated
94
+ * from git history, so --changed-only does not support them.
95
+ */
96
+ function parseTranslationContent(content, filePath) {
97
+ const ext = node_path.extname(filePath).toLowerCase();
98
+ if (ext === '.json')
99
+ return JSON.parse(content);
100
+ if (ext === '.json5')
101
+ return json5Parser.JsonParser.parse(content, json5Parser.JsonObjectNode).toJSON();
102
+ if (ext === '.yaml' || ext === '.yml')
103
+ return yaml__default.default.parse(content);
104
+ throw new Error(`--changed-only cannot diff "${filePath}": only JSON, JSON5 and YAML translation files are supported (JS/TS resource modules cannot be parsed from git history).`);
105
+ }
106
+ const escapeRegExp = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
107
+ /**
108
+ * Builds a matcher deciding whether a key belongs to the changed set.
109
+ *
110
+ * Plural grouping: when ANY variant of a base key changed, ALL variants of
111
+ * that base key match. Source and target languages have different CLDR plural
112
+ * category counts (en: one/other; ar: zero..other), so an exact-key match
113
+ * would drop the target-only forms. Covers cardinal and ordinal CLDR suffixes
114
+ * plus the legacy v3 forms (_plural, _0, _1, ...). Kept in sync with the
115
+ * sister copy in locize-cli (src/gitChangedKeys.js).
116
+ *
117
+ * The caller is expected to keep changed sets scoped per source FILE: the same
118
+ * bare key name in two files (e.g. each email template having its own
119
+ * `subject`) must not cross-match.
120
+ */
121
+ function makeChangedKeyMatcher(changedKeys, pluralSeparator = '_') {
122
+ const s = escapeRegExp(pluralSeparator);
123
+ const pluralSuffixRegex = new RegExp(`(?:${s}ordinal)?${s}(?:zero|one|two|few|many|other|plural|\\d+)$`);
124
+ const baseChanged = new Set();
125
+ for (const key of changedKeys) {
126
+ baseChanged.add(key.replace(pluralSuffixRegex, ''));
127
+ }
128
+ return (key) => {
129
+ if (changedKeys.has(key))
130
+ return true;
131
+ const base = key.replace(pluralSuffixRegex, '');
132
+ return base !== key && baseChanged.has(base);
133
+ };
134
+ }
135
+
136
+ exports.makeChangedKeyMatcher = makeChangedKeyMatcher;
137
+ exports.parseTranslationContent = parseTranslationContent;
138
+ exports.readFileAtRef = readFileAtRef;
139
+ exports.resolveGitCompareRef = resolveGitCompareRef;
package/dist/esm/cli.js CHANGED
@@ -31,7 +31,7 @@ const program = new Command();
31
31
  program
32
32
  .name('i18next-cli')
33
33
  .description('A unified, high-performance i18next CLI.')
34
- .version('1.71.3'); // This string is replaced with the actual version at build time by rollup
34
+ .version('1.72.0'); // This string is replaced with the actual version at build time by rollup
35
35
  // new: global config override option
36
36
  program.option('-c, --config <path>', 'Path to i18next-cli config file (overrides detection)');
37
37
  program
@@ -181,10 +181,18 @@ program
181
181
  .command('sync')
182
182
  .description('Synchronize secondary language files with the primary language file.')
183
183
  .option('-q, --quiet', 'Suppress spinner and output')
184
+ .option('--changed-only', 'Only sync keys that changed on the current git branch compared to the base branch (requires git). Removals are skipped.')
185
+ .option('--base <ref>', 'Base git branch/ref for --changed-only (default: auto-detect origin/HEAD, then main, then master).')
184
186
  .action(async (options) => {
185
187
  const cfgPath = program.opts().config;
186
188
  const config = await ensureConfig(cfgPath);
187
- await runSyncer(config, { quiet: !!options.quiet });
189
+ try {
190
+ await runSyncer(config, { quiet: !!options.quiet, changedOnly: !!options.changedOnly, base: options.base });
191
+ }
192
+ catch (error) {
193
+ console.error(styleText('red', error instanceof Error ? error.message : String(error)));
194
+ process.exit(1);
195
+ }
188
196
  });
189
197
  program
190
198
  .command('migrate-config [configPath]')
@@ -325,6 +333,8 @@ program
325
333
  .option('--auto-translate <true|false>', 'Trigger AI/MT auto-translation of newly synced keys (requires auto-translation enabled in your Locize project; on by default for new projects).')
326
334
  .option('--auto-translate-review <true|false>', 'Route auto-translated segments through the review workflow for languages that have review enabled.')
327
335
  .option('--auto-translate-languages <lng1,lng2>', 'Restrict auto-translation to these target languages (comma separated; defaults to all languages).')
336
+ .option('--changed-only', 'Only sync and auto-translate keys that changed on the current git branch compared to the base branch (requires git; deletions are skipped).')
337
+ .option('--base <ref>', 'Base git branch/ref for --changed-only (default: auto-detect origin/HEAD, then main, then master).')
328
338
  .action(async (options) => {
329
339
  const cfgPath = program.opts().config;
330
340
  const config = await ensureConfig(cfgPath);
@@ -229,6 +229,14 @@ function buildArgs(command, config, cliOptions) {
229
229
  if (languages)
230
230
  commandArgs.push('--auto-translate-languages', languages);
231
231
  }
232
+ // Requires locize-cli >= 12.7 (older versions reject the unknown option).
233
+ const changedOnly = cliOptions.changedOnly ?? locizeConfig.changedOnly;
234
+ if (changedOnly === true || changedOnly === 'true') {
235
+ commandArgs.push('--changed-only', 'true');
236
+ const gitBase = cliOptions.base ?? locizeConfig.changedOnlyBase;
237
+ if (gitBase)
238
+ commandArgs.push('--base', gitBase);
239
+ }
232
240
  }
233
241
  // Derive a sensible base path for locize from the configured output.
234
242
  // If output is a string template we can strip the language placeholder.
@@ -9,6 +9,7 @@ import { getOutputPath, loadTranslationFile, inferFormatFromPath, loadRawJson5Co
9
9
  import { shouldShowFunnel, recordFunnelShown } from './utils/funnel-msg-tracker.js';
10
10
  import { getNestedKeys, getNestedValue, setNestedValue } from './utils/nested-object.js';
11
11
  import { safePluralRules } from './utils/plural-rules.js';
12
+ import { resolveGitCompareRef, readFileAtRef, parseTranslationContent, makeChangedKeyMatcher } from './utils/git-changed-keys.js';
12
13
 
13
14
  /**
14
15
  * Synchronizes translation files across different locales by ensuring all secondary
@@ -42,6 +43,10 @@ import { safePluralRules } from './utils/plural-rules.js';
42
43
  */
43
44
  async function runSyncer(config, options = {}) {
44
45
  const internalLogger = options.logger ?? new ConsoleLogger();
46
+ // Resolved before the try/catch below on purpose: an unusable git setup
47
+ // must fail the command (clear message, non-zero exit) instead of being
48
+ // logged and swallowed like a regular sync error.
49
+ const gitCompare = options.changedOnly ? resolveGitCompareRef(options.base) : null;
45
50
  const spinner = createSpinnerLike('Running i18next locale synchronizer...\n', { quiet: !!options.quiet, logger: options.logger });
46
51
  try {
47
52
  const primaryLanguage = config.extract.primaryLanguage || config.locales[0] || 'en';
@@ -79,6 +84,23 @@ async function runSyncer(config, options = {}) {
79
84
  }
80
85
  const primaryKeys = getNestedKeys(primaryTranslations, keySeparator ?? '.');
81
86
  const primaryKeySet = new Set(primaryKeys);
87
+ // --changed-only: diff this primary file against its state at the git
88
+ // compare ref. The changed set is scoped to THIS file so the same bare
89
+ // key name in another namespace does not cross-match.
90
+ let isChangedKey = null;
91
+ if (gitCompare) {
92
+ const oldContent = readFileAtRef(gitCompare.compareRef, primaryPath);
93
+ const oldTranslations = oldContent === null ? {} : parseTranslationContent(oldContent, primaryPath);
94
+ const changedKeys = new Set();
95
+ for (const key of primaryKeys) {
96
+ const newValue = getNestedValue(primaryTranslations, key, keySeparator ?? '.');
97
+ const oldValue = getNestedValue(oldTranslations, key, keySeparator ?? '.');
98
+ if (oldValue === undefined || JSON.stringify(oldValue) !== JSON.stringify(newValue)) {
99
+ changedKeys.add(key);
100
+ }
101
+ }
102
+ isChangedKey = makeChangedKeyMatcher(changedKeys, config.extract.pluralSeparator ?? '_');
103
+ }
82
104
  // 3. For each secondary language, sync the current namespace
83
105
  for (const lang of secondaryLanguages) {
84
106
  const secondaryPath = getOutputPath(output, lang, ns);
@@ -168,17 +190,25 @@ async function runSyncer(config, options = {}) {
168
190
  const existingValue = getNestedValue(existingSecondaryTranslations, key, keySeparator ?? '.');
169
191
  // Only preserve non-empty values; an empty string was likely a
170
192
  // placeholder left by a previous (buggy) sync run and should not
171
- // be perpetuated.
172
- if (existingValue !== '' && existingValue != null) {
193
+ // be perpetuated. Under --changed-only nothing is ever dropped.
194
+ if ((existingValue !== '' && existingValue != null) || isChangedKey) {
173
195
  setNestedValue(newSecondaryTranslations, key, existingValue, keySeparator ?? '.');
174
196
  handledKeys.add(key);
175
197
  }
176
198
  }
199
+ else if (isChangedKey) {
200
+ // --changed-only: removals are out of scope, keep obsolete keys as-is
201
+ const existingValue = getNestedValue(existingSecondaryTranslations, key, keySeparator ?? '.');
202
+ setNestedValue(newSecondaryTranslations, key, existingValue, keySeparator ?? '.');
203
+ }
177
204
  // else: obsolete key — omit it from the output
178
205
  }
179
206
  // Pass 2: new primary keys not yet in the secondary file
180
207
  for (const key of primaryKeys) {
181
208
  if (!handledKeys.has(key)) {
209
+ // --changed-only: only propagate keys that changed on this branch
210
+ if (isChangedKey && !isChangedKey(key))
211
+ continue;
182
212
  const primaryValue = getNestedValue(primaryTranslations, key, keySeparator ?? '.');
183
213
  const valueToSet = resolveDefaultValue(defaultValue, key, ns, lang, primaryValue);
184
214
  setNestedValue(newSecondaryTranslations, key, valueToSet, keySeparator ?? '.');
@@ -0,0 +1,130 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { styleText } from 'node:util';
3
+ import { isAbsolute, relative, sep, extname } from 'node:path';
4
+ import { JsonParser, JsonObjectNode } from '@croct/json5-parser';
5
+ import yaml from 'yaml';
6
+
7
+ const runGit = (args) => execFileSync('git', args, {
8
+ stdio: ['ignore', 'pipe', 'pipe'],
9
+ encoding: 'utf8',
10
+ maxBuffer: 50 * 1024 * 1024,
11
+ });
12
+ const CI_FETCH_HINT = 'In CI, make sure the checkout is not shallow and includes the base branch — e.g. actions/checkout with "fetch-depth: 0".';
13
+ /**
14
+ * Resolves the git ref to compare against for --changed-only.
15
+ *
16
+ * Returns the resolved base branch (for messaging) and the merge-base of that
17
+ * ref and HEAD — the commit where the current branch diverged — so commits
18
+ * landing on the base branch after the branch point are not attributed to this
19
+ * branch (the semantics of `git diff base...HEAD`). Falls back to the base tip
20
+ * when merge-base cannot be computed (e.g. shallow clones).
21
+ *
22
+ * Throws with an actionable message when git is unavailable, the cwd is not
23
+ * inside a repository, or no base ref can be resolved.
24
+ */
25
+ function resolveGitCompareRef(base) {
26
+ try {
27
+ runGit(['--version']);
28
+ }
29
+ catch {
30
+ throw new Error('--changed-only requires git, but the "git" command was not found. Install git or remove --changed-only to sync the whole project.');
31
+ }
32
+ try {
33
+ runGit(['rev-parse', '--git-dir']);
34
+ }
35
+ catch {
36
+ throw new Error(`--changed-only requires a git repository, but "${process.cwd()}" is not inside one. Run the sync inside your repository or remove --changed-only to sync the whole project.`);
37
+ }
38
+ const candidates = base
39
+ ? [base, `origin/${base}`]
40
+ : ['origin/HEAD', 'main', 'origin/main', 'master', 'origin/master'];
41
+ let resolvedBase;
42
+ for (const candidate of candidates) {
43
+ try {
44
+ runGit(['rev-parse', '--verify', '--quiet', `${candidate}^{commit}`]);
45
+ resolvedBase = candidate;
46
+ break;
47
+ }
48
+ catch { /* try the next candidate */ }
49
+ }
50
+ if (!resolvedBase) {
51
+ if (base) {
52
+ throw new Error(`--changed-only could not resolve the base ref "${base}" (also tried "origin/${base}"). Fetch it first (git fetch origin ${base}). ${CI_FETCH_HINT}`);
53
+ }
54
+ throw new Error(`--changed-only could not auto-detect a base branch (tried origin/HEAD, main and master). Pass one explicitly with --base <ref>. ${CI_FETCH_HINT}`);
55
+ }
56
+ let compareRef;
57
+ try {
58
+ compareRef = runGit(['merge-base', resolvedBase, 'HEAD']).trim();
59
+ }
60
+ catch { /* fall back to the base tip below */ }
61
+ if (!compareRef) {
62
+ console.warn(styleText('yellow', `could not find the merge-base of ${resolvedBase} and HEAD — comparing against ${resolvedBase} directly. On shallow CI clones (actions/checkout default fetch-depth: 1) deepen the fetch for exact results.`));
63
+ compareRef = resolvedBase;
64
+ }
65
+ return { base: resolvedBase, compareRef };
66
+ }
67
+ /**
68
+ * Returns the content of a file at the given ref, or `null` when the file did
69
+ * not exist there (a file new on this branch). Existence is checked via
70
+ * cat-file's exit code instead of matching `git show`'s stderr, which is
71
+ * localized.
72
+ */
73
+ function readFileAtRef(compareRef, filePath) {
74
+ const rel = isAbsolute(filePath) ? relative(process.cwd(), filePath) : filePath;
75
+ // "./" makes the path relative to the cwd instead of the repo root
76
+ const gitPath = `${compareRef}:./${rel.split(sep).join('/')}`;
77
+ try {
78
+ runGit(['cat-file', '-e', gitPath]);
79
+ }
80
+ catch {
81
+ return null;
82
+ }
83
+ return runGit(['show', gitPath]);
84
+ }
85
+ /**
86
+ * Parses translation file content from a string (git blob) using the same
87
+ * parsers as loadTranslationFile. JS/TS resource modules cannot be evaluated
88
+ * from git history, so --changed-only does not support them.
89
+ */
90
+ function parseTranslationContent(content, filePath) {
91
+ const ext = extname(filePath).toLowerCase();
92
+ if (ext === '.json')
93
+ return JSON.parse(content);
94
+ if (ext === '.json5')
95
+ return JsonParser.parse(content, JsonObjectNode).toJSON();
96
+ if (ext === '.yaml' || ext === '.yml')
97
+ return yaml.parse(content);
98
+ throw new Error(`--changed-only cannot diff "${filePath}": only JSON, JSON5 and YAML translation files are supported (JS/TS resource modules cannot be parsed from git history).`);
99
+ }
100
+ const escapeRegExp = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
101
+ /**
102
+ * Builds a matcher deciding whether a key belongs to the changed set.
103
+ *
104
+ * Plural grouping: when ANY variant of a base key changed, ALL variants of
105
+ * that base key match. Source and target languages have different CLDR plural
106
+ * category counts (en: one/other; ar: zero..other), so an exact-key match
107
+ * would drop the target-only forms. Covers cardinal and ordinal CLDR suffixes
108
+ * plus the legacy v3 forms (_plural, _0, _1, ...). Kept in sync with the
109
+ * sister copy in locize-cli (src/gitChangedKeys.js).
110
+ *
111
+ * The caller is expected to keep changed sets scoped per source FILE: the same
112
+ * bare key name in two files (e.g. each email template having its own
113
+ * `subject`) must not cross-match.
114
+ */
115
+ function makeChangedKeyMatcher(changedKeys, pluralSeparator = '_') {
116
+ const s = escapeRegExp(pluralSeparator);
117
+ const pluralSuffixRegex = new RegExp(`(?:${s}ordinal)?${s}(?:zero|one|two|few|many|other|plural|\\d+)$`);
118
+ const baseChanged = new Set();
119
+ for (const key of changedKeys) {
120
+ baseChanged.add(key.replace(pluralSuffixRegex, ''));
121
+ }
122
+ return (key) => {
123
+ if (changedKeys.has(key))
124
+ return true;
125
+ const base = key.replace(pluralSuffixRegex, '');
126
+ return base !== key && baseChanged.has(base);
127
+ };
128
+ }
129
+
130
+ export { makeChangedKeyMatcher, parseTranslationContent, readFileAtRef, resolveGitCompareRef };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "i18next-cli",
3
- "version": "1.71.3",
3
+ "version": "1.72.0",
4
4
  "description": "A unified, high-performance i18next CLI.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAqBnC,QAAA,MAAM,OAAO,SAAgB,CAAA;AAid7B,OAAO,EAAE,OAAO,EAAE,CAAA"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAqBnC,QAAA,MAAM,OAAO,SAAgB,CAAA;AA0d7B,OAAO,EAAE,OAAO,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"locize.d.ts","sourceRoot":"","sources":["../src/locize.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AA0HtD;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;gBAED,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;CAMhF;AAOD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAiBlD;AAoND,eAAO,MAAM,aAAa,GAAI,QAAQ,oBAAoB,EAAE,aAAa,GAAG,kBAAiD,CAAA;AAC7H,eAAO,MAAM,iBAAiB,GAAI,QAAQ,oBAAoB,EAAE,aAAa,GAAG,kBAAqD,CAAA;AACrI,eAAO,MAAM,gBAAgB,GAAI,QAAQ,oBAAoB,EAAE,aAAa,GAAG,kBAAoD,CAAA"}
1
+ {"version":3,"file":"locize.d.ts","sourceRoot":"","sources":["../src/locize.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AA0HtD;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;gBAED,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;CAMhF;AAOD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAiBlD;AA2ND,eAAO,MAAM,aAAa,GAAI,QAAQ,oBAAoB,EAAE,aAAa,GAAG,kBAAiD,CAAA;AAC7H,eAAO,MAAM,iBAAiB,GAAI,QAAQ,oBAAoB,EAAE,aAAa,GAAG,kBAAqD,CAAA;AACrI,eAAO,MAAM,gBAAgB,GAAI,QAAQ,oBAAoB,EAAE,aAAa,GAAG,kBAAoD,CAAA"}
package/types/syncer.d.ts CHANGED
@@ -32,5 +32,7 @@ import type { I18nextToolkitConfig, Logger } from './types.js';
32
32
  export declare function runSyncer(config: I18nextToolkitConfig, options?: {
33
33
  quiet?: boolean;
34
34
  logger?: Logger;
35
+ changedOnly?: boolean;
36
+ base?: string;
35
37
  }): Promise<void>;
36
38
  //# sourceMappingURL=syncer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../src/syncer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAO9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,iBA+LnD"}
1
+ {"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../src/syncer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAQ9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,iBA2NzF"}
package/types/types.d.ts CHANGED
@@ -342,6 +342,14 @@ export interface I18nextToolkitConfig {
342
342
  autoTranslateReview?: boolean;
343
343
  /** Restrict auto-translation to these target languages (sync only; defaults to all languages) */
344
344
  autoTranslateLanguages?: string[];
345
+ /**
346
+ * Only sync and auto-translate keys that changed on the current git branch
347
+ * compared to the base branch (sync only; requires git and locize-cli >= 12.7).
348
+ * Deletions are skipped.
349
+ */
350
+ changedOnly?: boolean;
351
+ /** Base git branch/ref for changedOnly (default: auto-detect origin/HEAD, then main, then master) */
352
+ changedOnlyBase?: string;
345
353
  };
346
354
  }
347
355
  type MaybePromise<T> = T | Promise<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAEnE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,2DAA2D;IAC3D,OAAO,EAAE;QACP,oEAAoE;QACpE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAEzB,4DAA4D;QAC5D,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAE3B,mGAAmG;QACnG,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;QAEpE;;;;WAIG;QACH,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAE3B;;;;;WAKG;QACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC;QAEvC,uEAAuE;QACvE,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;QAErC,8EAA8E;QAC9E,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;QAEpC,oDAAoD;QACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAE1B,mDAAmD;QACnD,eAAe,CAAC,EAAE,MAAM,CAAC;QAEzB,+EAA+E;QAC/E,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QAErB,4EAA4E;QAC5E,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAE3B;;;;;WAKG;QACH,mBAAmB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG;YACnC,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,YAAY,CAAC,EAAE,MAAM,CAAC;SACvB,CAAC,CAAC;QAEH,kFAAkF;QAClF,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;QAE7B,kGAAkG;QAClG,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QAEvB;;;;;WAKG;QACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;QAE9B;;;;;;;WAOG;QACH,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QAEhC,8FAA8F;QAC9F,0BAA0B,CAAC,EAAE,MAAM,EAAE,CAAC;QAEtC,wFAAwF;QACxF,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QAE5B;;;;;WAKG;QACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;QAElC;;;;;WAKG;QACH,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,KAAK,MAAM,CAAC,CAAC;QAE3E,yDAAyD;QACzD,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAE9B,2EAA2E;QAC3E,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;QAEtG,4EAA4E;QAC5E,eAAe,CAAC,EAAE,MAAM,CAAC;QAEzB,0DAA0D;QAC1D,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;QAE9B;;;;;;;;;WASG;QACH,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;QAEpF;;;;;WAKG;QACH,eAAe,CAAC,EAAE,OAAO,CAAC;QAE1B,kHAAkH;QAClH,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAE3B;;;;;WAKG;QACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QAE5B;;;WAGG;QACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAG9B,uBAAuB,CAAC,EAAE,OAAO,CAAA;QAGjC,cAAc,CAAC,EAAE,OAAO,CAAA;QAExB;;;;;;WAMG;QACH,cAAc,CAAC,EAAE,OAAO,CAAA;QAExB;;;WAGG;QACH,aAAa,CAAC,EAAE,MAAM,CAAC;QAEvB;;;WAGG;QACH,aAAa,CAAC,EAAE,MAAM,CAAC;QAEvB;;;WAGG;QACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;QAEjC;;;WAGG;QACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAE7B;;;WAGG;QACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAE7B;;;;;;;;WAQG;QACH,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;QAEzC;;;;;WAKG;QACH,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;KAC9C,CAAC;IAEF,uCAAuC;IACvC,IAAI,CAAC,EAAE;QACL,kFAAkF;QAClF,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;QAE7B,kGAAkG;QAClG,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QAEvB;;;;;WAKG;QACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;QAE9B;;;;;;;WAOG;QACH,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QAEhC,oGAAoG;QACpG,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAE3B,6FAA6F;QAC7F,wBAAwB,CAAC,EAAE,OAAO,CAAC;QAEnC;;;;;;;;;;WAUG;QACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;QAExD;;;;;;;;;;WAUG;QACH,6BAA6B,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;KACpE,CAAC;IAEF,qDAAqD;IACrD,MAAM,CAAC,EAAE;QACP;;;;;;WAMG;QACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IAEF,2DAA2D;IAC3D,KAAK,CAAC,EAAE;QACN;;;;;;;;;;;WAWG;QACH,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAEzB;;;;;;;;;;WAUG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAElB,0DAA0D;QAC1D,MAAM,EAAE,MAAM,CAAC;QAEf;;;;;;;;;;;WAWG;QACH,cAAc,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;QAEjD,qDAAqD;QACrD,aAAa,CAAC,EAAE,MAAM,CAAC;QAEvB;;;WAGG;QACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;KAC/B,CAAC;IAEF,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,2CAA2C;IAC3C,MAAM,CAAC,EAAE;QACP,wBAAwB;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QAEnB,gEAAgE;QAChE,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,+CAA+C;QAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;QAEjB,yEAAyE;QACzE,WAAW,CAAC,EAAE,MAAM,CAAC;QAErB,8DAA8D;QAC9D,YAAY,CAAC,EAAE,OAAO,CAAC;QAEvB,8CAA8C;QAC9C,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAE7B,8CAA8C;QAC9C,uBAAuB,CAAC,EAAE,OAAO,CAAC;QAElC,6GAA6G;QAC7G,OAAO,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;QAE7B,0CAA0C;QAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;QAEjB;;;;WAIG;QACH,aAAa,CAAC,EAAE,OAAO,CAAC;QAExB,oHAAoH;QACpH,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAE9B,iGAAiG;QACjG,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;KACnC,CAAC;CACH;AAED,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAErC;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,IAAI,CAAC,EAAE,WAAW,GAAG,eAAe,GAAG,eAAe,CAAC;IACvD;4FACwF;IACxF,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,MAAM,EAAE,oBAAoB,CAAC;IAE7B,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,oDAAoD;IACpD,MAAM,EAAE,oBAAoB,CAAC;IAE7B,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAE/D;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,YAAY,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAEzF;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,YAAY,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC,CAAC;CACjG;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhC;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAE3E;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,YAAY,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAE/F;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,YAAY,CAAC,eAAe,EAAE,GAAG,SAAS,CAAC,CAAC;CACvH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,WAAW,MAAO,SAAQ,YAAY,EAAE,kBAAkB;IAC9D,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;;;;;;OAUG;IACH,yBAAyB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAEhI;;;;;;;;;;OAUG;IACH,4BAA4B,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAEnI;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAEjC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAE1E;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAE3D;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IAEvD;;;;;OAKG;IACH,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAEvD;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,oBAAoB,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CAChG;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,YAAY;IAC3B,0DAA0D;IAC1D,GAAG,EAAE,MAAM,CAAC;IAEZ,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,oCAAoC;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAEpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAE/B,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAE/B,qGAAqG;IACrG,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAE1B,iFAAiF;IACjF,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAC,CAAA;IAEF;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IAEb,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IAEf,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IAEjB,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAErC,kEAAkE;IAClE,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3C;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,MAAM;IACrB;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAExC;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IAExC,oDAAoD;IACpD,MAAM,EAAE,oBAAoB,CAAC;IAE7B,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,CAAC;IAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;CACvD;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,wBAAwB;IACvC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAExC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAEvC;;;;;;;OAOG;IACH,kCAAkC,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,kBAAkB,CAAC,EAAE,OAAO,KAAK,MAAM,EAAE,CAAA;IAEvG;;;;;;;OAOG;IACH,8BAA8B,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,kBAAkB,CAAC,EAAE,OAAO,KAAK,MAAM,EAAE,CAAA;CACpG;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;AAExD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACrD,gBAAgB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAC3D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,IAAI,EAAE,gBAAgB,GAAG,UAAU,GAAG,eAAe,GAAG,WAAW,GAAG,kBAAkB,CAAA;IAExF;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,OAAO,CAAC,EAAE;QACR,WAAW,EAAE,OAAO,CAAA;QACpB,aAAa,EAAE,MAAM,CAAA;QACrB,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;IAED;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;;;OAIG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,6DAA6D;QAC7D,IAAI,EAAE,MAAM,CAAA;QACZ,4DAA4D;QAC5D,UAAU,EAAE,MAAM,CAAA;KACnB,CAAC,CAAA;IAEF;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;;OAIG;IACH,WAAW,CAAC,EAAE;QACZ,6DAA6D;QAC7D,eAAe,EAAE,MAAM,CAAA;QACvB,6EAA6E;QAC7E,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,iCAAiC;QACjC,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,4EAA4E;QAC5E,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAA;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,MAAM,EAAE,MAAM,EAAE,CAAA;IAEhB;;OAEG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAA;IAElB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAA;IAEtB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAA;IAE3B;;OAEG;IACH,UAAU,EAAE;QACV,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,YAAY,CAAC,EAAE,OAAO,CAAA;KACvB,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,MAAM,EAAE,eAAe,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,yBAAyB,EAAE,CAAA;IAClC,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACjF;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAA;IACZ,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAA;IACjB,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAA;IACf,2DAA2D;IAC3D,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,UAAU,EAAE,iBAAiB,EAAE,CAAA;IAC/B,0CAA0C;IAC1C,mBAAmB,EAAE,kBAAkB,EAAE,CAAA;IACzC,qEAAqE;IACrE,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;CACrB,KACE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Resolves the git ref to compare against for --changed-only.
3
+ *
4
+ * Returns the resolved base branch (for messaging) and the merge-base of that
5
+ * ref and HEAD — the commit where the current branch diverged — so commits
6
+ * landing on the base branch after the branch point are not attributed to this
7
+ * branch (the semantics of `git diff base...HEAD`). Falls back to the base tip
8
+ * when merge-base cannot be computed (e.g. shallow clones).
9
+ *
10
+ * Throws with an actionable message when git is unavailable, the cwd is not
11
+ * inside a repository, or no base ref can be resolved.
12
+ */
13
+ export declare function resolveGitCompareRef(base?: string): {
14
+ base: string;
15
+ compareRef: string;
16
+ };
17
+ /**
18
+ * Returns the content of a file at the given ref, or `null` when the file did
19
+ * not exist there (a file new on this branch). Existence is checked via
20
+ * cat-file's exit code instead of matching `git show`'s stderr, which is
21
+ * localized.
22
+ */
23
+ export declare function readFileAtRef(compareRef: string, filePath: string): string | null;
24
+ /**
25
+ * Parses translation file content from a string (git blob) using the same
26
+ * parsers as loadTranslationFile. JS/TS resource modules cannot be evaluated
27
+ * from git history, so --changed-only does not support them.
28
+ */
29
+ export declare function parseTranslationContent(content: string, filePath: string): Record<string, any>;
30
+ /**
31
+ * Builds a matcher deciding whether a key belongs to the changed set.
32
+ *
33
+ * Plural grouping: when ANY variant of a base key changed, ALL variants of
34
+ * that base key match. Source and target languages have different CLDR plural
35
+ * category counts (en: one/other; ar: zero..other), so an exact-key match
36
+ * would drop the target-only forms. Covers cardinal and ordinal CLDR suffixes
37
+ * plus the legacy v3 forms (_plural, _0, _1, ...). Kept in sync with the
38
+ * sister copy in locize-cli (src/gitChangedKeys.js).
39
+ *
40
+ * The caller is expected to keep changed sets scoped per source FILE: the same
41
+ * bare key name in two files (e.g. each email template having its own
42
+ * `subject`) must not cross-match.
43
+ */
44
+ export declare function makeChangedKeyMatcher(changedKeys: Set<string>, pluralSeparator?: string): (key: string) => boolean;
45
+ //# sourceMappingURL=git-changed-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-changed-keys.d.ts","sourceRoot":"","sources":["../../src/utils/git-changed-keys.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAE,IAAI,CAAC,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CA2CzF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUlF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAM/F;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,eAAe,SAAM,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAYhH"}