i18next-cli 1.67.9 → 1.69.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 +9 -1
- package/dist/cjs/cli.js +6 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/linter.js +7 -3
- package/dist/cjs/status.js +84 -3
- package/dist/esm/cli.js +7 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/linter.js +7 -3
- package/dist/esm/status.js +84 -4
- package/package.json +1 -1
- package/types/cli.d.ts.map +1 -1
- package/types/index.d.ts +1 -1
- package/types/index.d.ts.map +1 -1
- package/types/status.d.ts +24 -0
- package/types/status.d.ts.map +1 -1
- package/types/types.d.ts +6 -2
- package/types/types.d.ts.map +1 -1
package/README.md
CHANGED
|
@@ -240,6 +240,7 @@ The primary language is checked too: any key used in your code but absent from t
|
|
|
240
240
|
**Options:**
|
|
241
241
|
- `--namespace <ns>, -n <ns>`: Filter the report by a specific namespace.
|
|
242
242
|
- `--hide-translated`: Hide already translated keys in the detailed view, showing only missing translations.
|
|
243
|
+
- `--unused`: Report only unused translation keys — keys present in your translation files that are no longer used in your source code (i.e. what `extract` with `removeUnusedKeys` would delete). Never modifies any files and exits with a non-zero status code when unused keys are found, so it can serve as a dedicated CI check alongside the regular missing-translations check. Note that static analysis cannot detect dynamically constructed keys (e.g. ``t(`error.${code}`)``); to find keys that are truly unused at runtime, see [find unused translations with locize](https://www.locize.com/docs/guides/find-unused-translations).
|
|
243
244
|
|
|
244
245
|
**Usage Examples:**
|
|
245
246
|
|
|
@@ -261,6 +262,12 @@ npx i18next-cli status de --hide-translated
|
|
|
261
262
|
|
|
262
263
|
# Combine options to see only missing translations in a specific namespace
|
|
263
264
|
npx i18next-cli status de --namespace common --hide-translated
|
|
265
|
+
|
|
266
|
+
# Report only unused keys across all locales (read-only, exits 1 when any are found)
|
|
267
|
+
npx i18next-cli status --unused
|
|
268
|
+
|
|
269
|
+
# Report only unused keys in the 'en' files — e.g. as a separate CI check
|
|
270
|
+
npx i18next-cli status en --unused
|
|
264
271
|
```
|
|
265
272
|
|
|
266
273
|
The detailed view provides a rich, at-a-glance summary for each namespace, followed by a list of every key and its translation status.
|
|
@@ -961,7 +968,8 @@ export default defineConfig({
|
|
|
961
968
|
/** Optional accept-list of JSX attribute names to exclusively lint (takes precedence over ignoredAttributes). */
|
|
962
969
|
acceptedAttributes: ['title'],
|
|
963
970
|
|
|
964
|
-
/** Optional accept-list of JSX tag names to exclusively lint (takes precedence over ignoredTags).
|
|
971
|
+
/** Optional accept-list of JSX tag names to exclusively lint (takes precedence over ignoredTags).
|
|
972
|
+
* Pass 'all' to lint every tag (including custom JSX components); ignoredTags still apply. */
|
|
965
973
|
acceptedTags: ['p'],
|
|
966
974
|
|
|
967
975
|
// Optional custom JSX attributes to ignore during linting
|
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.
|
|
40
|
+
.version('1.69.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
|
|
@@ -118,6 +118,7 @@ program
|
|
|
118
118
|
.description('Display translation status. Provide a locale for a detailed key-by-key view.')
|
|
119
119
|
.option('-n, --namespace <ns>', 'Filter the status report by a specific namespace')
|
|
120
120
|
.option('--hide-translated', 'Hide already translated keys in the detailed view')
|
|
121
|
+
.option('--unused', 'Report only unused translation keys (read-only; exits 1 when any are found)')
|
|
121
122
|
.action(async (locale, options) => {
|
|
122
123
|
const cfgPath = program.opts().config;
|
|
123
124
|
let config$1 = await config.loadConfig(cfgPath);
|
|
@@ -132,6 +133,10 @@ program
|
|
|
132
133
|
console.log(node_util.styleText('green', 'Project structure detected successfully!'));
|
|
133
134
|
config$1 = detected;
|
|
134
135
|
}
|
|
136
|
+
if (options.unused) {
|
|
137
|
+
await status.runUnusedReport(config$1, { locale, namespace: options.namespace });
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
135
140
|
await status.runStatus(config$1, { detail: locale, namespace: options.namespace, hideTranslated: !!options.hideTranslated });
|
|
136
141
|
});
|
|
137
142
|
program
|
package/dist/cjs/index.js
CHANGED
|
@@ -30,6 +30,7 @@ exports.recommendedAcceptedTags = linter.recommendedAcceptedTags;
|
|
|
30
30
|
exports.runLinter = linter.runLinter;
|
|
31
31
|
exports.runSyncer = syncer.runSyncer;
|
|
32
32
|
exports.runStatus = status.runStatus;
|
|
33
|
+
exports.runUnusedReport = status.runUnusedReport;
|
|
33
34
|
exports.runTypesGenerator = typesGenerator.runTypesGenerator;
|
|
34
35
|
exports.runRenameKey = renameKey.runRenameKey;
|
|
35
36
|
exports.runInstrumenter = instrumenter.runInstrumenter;
|
package/dist/cjs/linter.js
CHANGED
|
@@ -845,7 +845,10 @@ function findHardcodedStrings(ast, code, config) {
|
|
|
845
845
|
const ignoredAttributes = new Set([...defaultIgnoredAttributes, ...customIgnoredAttributes]);
|
|
846
846
|
const lintAcceptedTags = config?.lint?.acceptedTags ? config.lint.acceptedTags : null;
|
|
847
847
|
const extractAcceptedTags = config?.extract?.acceptedTags ? config.extract.acceptedTags : null;
|
|
848
|
-
const
|
|
848
|
+
const rawAcceptedTags = lintAcceptedTags ?? extractAcceptedTags ?? recommendedAcceptedTags;
|
|
849
|
+
// 'all' disables tag filtering entirely: lint text and attributes in every tag (ignoredTags still win)
|
|
850
|
+
const acceptAllTags = rawAcceptedTags === 'all';
|
|
851
|
+
const acceptedTagsList = acceptAllTags ? null : (rawAcceptedTags?.map((s) => s.toLowerCase()) ?? null);
|
|
849
852
|
const lintAcceptedAttrs = config?.lint?.acceptedAttributes ? config.lint.acceptedAttributes : null;
|
|
850
853
|
const extractAcceptedAttrs = config?.extract?.acceptedAttributes ? config.extract.acceptedAttributes : null;
|
|
851
854
|
const acceptedAttributesList = (lintAcceptedAttrs ?? extractAcceptedAttrs ?? recommendedAcceptedAttributes)?.map((s) => s.toLowerCase()) ?? null;
|
|
@@ -963,7 +966,8 @@ function findHardcodedStrings(ast, code, config) {
|
|
|
963
966
|
if (node.type === 'JSXText') {
|
|
964
967
|
// If acceptedAttributesSet exists but acceptedTagsSet does not, we're in attribute-only mode:
|
|
965
968
|
// do not collect JSXText nodes when attribute-only mode is active.
|
|
966
|
-
|
|
969
|
+
// (acceptedTags: 'all' is not attribute-only mode — it lints text in every tag.)
|
|
970
|
+
if (acceptedAttributesSet && !acceptedTagsSet && !acceptAllTags) ;
|
|
967
971
|
else {
|
|
968
972
|
const isIgnored = isWithinIgnoredElement(currentAncestors);
|
|
969
973
|
if (!isIgnored) {
|
|
@@ -1023,7 +1027,7 @@ function findHardcodedStrings(ast, code, config) {
|
|
|
1023
1027
|
if (isJsxChildExpression && !insideIgnored) {
|
|
1024
1028
|
// Respect attribute-only mode: when acceptedAttributes is set without acceptedTags,
|
|
1025
1029
|
// only attribute strings are linted — skip JSX child text.
|
|
1026
|
-
if (!(acceptedAttributesSet && !acceptedTagsSet)) {
|
|
1030
|
+
if (!(acceptedAttributesSet && !acceptedTagsSet && !acceptAllTags)) {
|
|
1027
1031
|
const text = node.value.trim();
|
|
1028
1032
|
if (text && text.length > 1 && text !== '...' && !isUrlOrPath(text) && isNaN(Number(text)) && !text.startsWith('{{')) {
|
|
1029
1033
|
nodesToLint.push(node);
|
package/dist/cjs/status.js
CHANGED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
var node_util = require('node:util');
|
|
4
4
|
var ora = require('ora');
|
|
5
5
|
var node_path = require('node:path');
|
|
6
|
-
require('
|
|
7
|
-
require('node:fs/promises');
|
|
6
|
+
var extractor = require('./extractor/core/extractor.js');
|
|
8
7
|
var keyFinder = require('./extractor/core/key-finder.js');
|
|
9
8
|
require('glob');
|
|
10
9
|
var nestedObject = require('./utils/nested-object.js');
|
|
@@ -12,8 +11,8 @@ var fileUtils = require('./utils/file-utils.js');
|
|
|
12
11
|
var pluralRules = require('./utils/plural-rules.js');
|
|
13
12
|
var nesting = require('./utils/nesting.js');
|
|
14
13
|
var contextVariants = require('./utils/context-variants.js');
|
|
15
|
-
var funnelMsgTracker = require('./utils/funnel-msg-tracker.js');
|
|
16
14
|
require('node:module');
|
|
15
|
+
var funnelMsgTracker = require('./utils/funnel-msg-tracker.js');
|
|
17
16
|
|
|
18
17
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
18
|
|
|
@@ -738,6 +737,87 @@ function generateProgressBarText(percentage) {
|
|
|
738
737
|
const emptyBars = totalBars - filledBars;
|
|
739
738
|
return `[${node_util.styleText('green', ''.padStart(filledBars, '■'))}${''.padStart(emptyBars, '□')}]`;
|
|
740
739
|
}
|
|
740
|
+
/**
|
|
741
|
+
* Reports translation keys that exist in the translation files but are no
|
|
742
|
+
* longer used in the source code (see issue #281).
|
|
743
|
+
*
|
|
744
|
+
* "Unused" is defined as "what `extract` with `removeUnusedKeys` would delete":
|
|
745
|
+
* the report runs the extractor in dry-run mode and diffs the existing key set
|
|
746
|
+
* against the pruned result. This inherits all of extract's edge-case handling
|
|
747
|
+
* (plural variants, context variants, `preservePatterns`, `ignoreNamespaces`)
|
|
748
|
+
* instead of re-implementing usedness detection that could drift from it.
|
|
749
|
+
*
|
|
750
|
+
* The command never writes any files and exits with a non-zero status code
|
|
751
|
+
* when unused keys are found, so it can serve as a dedicated CI check
|
|
752
|
+
* alongside `status <locale>` (missing translations).
|
|
753
|
+
*/
|
|
754
|
+
async function runUnusedReport(config, options = {}) {
|
|
755
|
+
if (options.locale && !config.locales.includes(options.locale)) {
|
|
756
|
+
console.error(node_util.styleText('red', `Error: Locale "${options.locale}" is not defined in your configuration.`));
|
|
757
|
+
process.exit(1);
|
|
758
|
+
return;
|
|
759
|
+
}
|
|
760
|
+
// Work on a copy with `removeUnusedKeys` forced on: the dry-run diff below
|
|
761
|
+
// derives "unused" from what extract would prune, which requires pruning to
|
|
762
|
+
// be active regardless of the user's config. The caller's config object
|
|
763
|
+
// stays untouched.
|
|
764
|
+
const cfg = { ...config, extract: { ...config.extract, removeUnusedKeys: true } };
|
|
765
|
+
const spinner = ora__default.default('Analyzing project for unused translation keys...\n').start();
|
|
766
|
+
let extraction;
|
|
767
|
+
try {
|
|
768
|
+
extraction = await extractor.runExtractor(cfg, { isDryRun: true, quiet: true });
|
|
769
|
+
spinner.succeed('Analysis complete.');
|
|
770
|
+
}
|
|
771
|
+
catch (error) {
|
|
772
|
+
spinner.fail('Failed to analyze unused translation keys.');
|
|
773
|
+
console.error(error);
|
|
774
|
+
process.exit(1);
|
|
775
|
+
return;
|
|
776
|
+
}
|
|
777
|
+
const { results, hasErrors } = extraction;
|
|
778
|
+
const rawSep = cfg.extract.keySeparator;
|
|
779
|
+
const keySeparator = rawSep === false ? false : (rawSep ?? '.');
|
|
780
|
+
let totalUnused = 0;
|
|
781
|
+
for (const result of results) {
|
|
782
|
+
if (options.locale && result.locale !== options.locale)
|
|
783
|
+
continue;
|
|
784
|
+
if (options.namespace && result.namespace && result.namespace !== options.namespace)
|
|
785
|
+
continue;
|
|
786
|
+
const keptKeys = new Set(nestedObject.getNestedKeys(result.newTranslations || {}, keySeparator));
|
|
787
|
+
const unusedKeys = nestedObject.getNestedKeys(result.existingTranslations || {}, keySeparator)
|
|
788
|
+
.filter(key => !keptKeys.has(key))
|
|
789
|
+
.sort();
|
|
790
|
+
if (unusedKeys.length === 0)
|
|
791
|
+
continue;
|
|
792
|
+
totalUnused += unusedKeys.length;
|
|
793
|
+
const label = result.namespace ? `${result.locale}/${result.namespace}` : result.locale;
|
|
794
|
+
console.log(node_util.styleText(['cyan', 'bold'], `\n[${label}] ${result.path}`));
|
|
795
|
+
for (const key of unusedKeys) {
|
|
796
|
+
console.log(` ${node_util.styleText('red', '✗')} ${key}`);
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
if (hasErrors) {
|
|
800
|
+
console.log(node_util.styleText(['yellow', 'bold'], '\n⚠ Some source files could not be parsed — keys used only in those files may be falsely reported as unused.'));
|
|
801
|
+
}
|
|
802
|
+
if (totalUnused > 0) {
|
|
803
|
+
console.log(node_util.styleText(['yellow', 'bold'], `\nSummary: Found ${totalUnused} unused key(s)${options.locale ? ` for "${options.locale}"` : ''}. No files were modified.`));
|
|
804
|
+
console.log(`Run ${node_util.styleText('cyan', 'npx i18next-cli extract')} to remove them.`);
|
|
805
|
+
}
|
|
806
|
+
else {
|
|
807
|
+
console.log(node_util.styleText(['green', 'bold'], '\nSummary: 🎉 No unused keys found.'));
|
|
808
|
+
}
|
|
809
|
+
// Static analysis has an inherent blind spot for dynamically constructed
|
|
810
|
+
// keys, so this link doubles as an accuracy disclaimer. Gated like the other
|
|
811
|
+
// funnel messages (never in CI/non-TTY, 24h cooldown).
|
|
812
|
+
if (await funnelMsgTracker.shouldShowFunnel('status-unused')) {
|
|
813
|
+
console.log(node_util.styleText('gray', "\nℹ Static analysis cannot detect dynamically constructed keys (e.g. t('error.' + code))."));
|
|
814
|
+
console.log(node_util.styleText('gray', ' To find keys that are truly unused at runtime, see https://www.locize.com/docs/guides/find-unused-translations'));
|
|
815
|
+
await funnelMsgTracker.recordFunnelShown('status-unused');
|
|
816
|
+
}
|
|
817
|
+
if (totalUnused > 0 || hasErrors) {
|
|
818
|
+
process.exit(1);
|
|
819
|
+
}
|
|
820
|
+
}
|
|
741
821
|
async function printLocizeFunnel() {
|
|
742
822
|
if (!(await funnelMsgTracker.shouldShowFunnel('status')))
|
|
743
823
|
return;
|
|
@@ -748,3 +828,4 @@ async function printLocizeFunnel() {
|
|
|
748
828
|
}
|
|
749
829
|
|
|
750
830
|
exports.runStatus = runStatus;
|
|
831
|
+
exports.runUnusedReport = runUnusedReport;
|
package/dist/esm/cli.js
CHANGED
|
@@ -19,7 +19,7 @@ import { runSyncer } from './syncer.js';
|
|
|
19
19
|
import { runMigrator } from './migrator.js';
|
|
20
20
|
import { runInit } from './init.js';
|
|
21
21
|
import { runLinterCli } from './linter.js';
|
|
22
|
-
import { runStatus } from './status.js';
|
|
22
|
+
import { runUnusedReport, runStatus } from './status.js';
|
|
23
23
|
import { runLocizeSync, runLocizeDownload, runLocizeMigrate } from './locize.js';
|
|
24
24
|
import { runRenameKey } from './rename-key.js';
|
|
25
25
|
import { runInstrumenter } from './instrumenter/core/instrumenter.js';
|
|
@@ -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.
|
|
34
|
+
.version('1.69.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
|
|
@@ -112,6 +112,7 @@ program
|
|
|
112
112
|
.description('Display translation status. Provide a locale for a detailed key-by-key view.')
|
|
113
113
|
.option('-n, --namespace <ns>', 'Filter the status report by a specific namespace')
|
|
114
114
|
.option('--hide-translated', 'Hide already translated keys in the detailed view')
|
|
115
|
+
.option('--unused', 'Report only unused translation keys (read-only; exits 1 when any are found)')
|
|
115
116
|
.action(async (locale, options) => {
|
|
116
117
|
const cfgPath = program.opts().config;
|
|
117
118
|
let config = await loadConfig(cfgPath);
|
|
@@ -126,6 +127,10 @@ program
|
|
|
126
127
|
console.log(styleText('green', 'Project structure detected successfully!'));
|
|
127
128
|
config = detected;
|
|
128
129
|
}
|
|
130
|
+
if (options.unused) {
|
|
131
|
+
await runUnusedReport(config, { locale, namespace: options.namespace });
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
129
134
|
await runStatus(config, { detail: locale, namespace: options.namespace, hideTranslated: !!options.hideTranslated });
|
|
130
135
|
});
|
|
131
136
|
program
|
package/dist/esm/index.js
CHANGED
|
@@ -5,7 +5,7 @@ export { getTranslations } from './extractor/core/translation-manager.js';
|
|
|
5
5
|
import 'node:module';
|
|
6
6
|
export { recommendedAcceptedAttributes, recommendedAcceptedTags, runLinter } from './linter.js';
|
|
7
7
|
export { runSyncer } from './syncer.js';
|
|
8
|
-
export { runStatus } from './status.js';
|
|
8
|
+
export { runStatus, runUnusedReport } from './status.js';
|
|
9
9
|
export { runTypesGenerator } from './types-generator.js';
|
|
10
10
|
export { runRenameKey } from './rename-key.js';
|
|
11
11
|
export { runInstrumenter, writeExtractedKeys } from './instrumenter/core/instrumenter.js';
|
package/dist/esm/linter.js
CHANGED
|
@@ -843,7 +843,10 @@ function findHardcodedStrings(ast, code, config) {
|
|
|
843
843
|
const ignoredAttributes = new Set([...defaultIgnoredAttributes, ...customIgnoredAttributes]);
|
|
844
844
|
const lintAcceptedTags = config?.lint?.acceptedTags ? config.lint.acceptedTags : null;
|
|
845
845
|
const extractAcceptedTags = config?.extract?.acceptedTags ? config.extract.acceptedTags : null;
|
|
846
|
-
const
|
|
846
|
+
const rawAcceptedTags = lintAcceptedTags ?? extractAcceptedTags ?? recommendedAcceptedTags;
|
|
847
|
+
// 'all' disables tag filtering entirely: lint text and attributes in every tag (ignoredTags still win)
|
|
848
|
+
const acceptAllTags = rawAcceptedTags === 'all';
|
|
849
|
+
const acceptedTagsList = acceptAllTags ? null : (rawAcceptedTags?.map((s) => s.toLowerCase()) ?? null);
|
|
847
850
|
const lintAcceptedAttrs = config?.lint?.acceptedAttributes ? config.lint.acceptedAttributes : null;
|
|
848
851
|
const extractAcceptedAttrs = config?.extract?.acceptedAttributes ? config.extract.acceptedAttributes : null;
|
|
849
852
|
const acceptedAttributesList = (lintAcceptedAttrs ?? extractAcceptedAttrs ?? recommendedAcceptedAttributes)?.map((s) => s.toLowerCase()) ?? null;
|
|
@@ -961,7 +964,8 @@ function findHardcodedStrings(ast, code, config) {
|
|
|
961
964
|
if (node.type === 'JSXText') {
|
|
962
965
|
// If acceptedAttributesSet exists but acceptedTagsSet does not, we're in attribute-only mode:
|
|
963
966
|
// do not collect JSXText nodes when attribute-only mode is active.
|
|
964
|
-
|
|
967
|
+
// (acceptedTags: 'all' is not attribute-only mode — it lints text in every tag.)
|
|
968
|
+
if (acceptedAttributesSet && !acceptedTagsSet && !acceptAllTags) ;
|
|
965
969
|
else {
|
|
966
970
|
const isIgnored = isWithinIgnoredElement(currentAncestors);
|
|
967
971
|
if (!isIgnored) {
|
|
@@ -1021,7 +1025,7 @@ function findHardcodedStrings(ast, code, config) {
|
|
|
1021
1025
|
if (isJsxChildExpression && !insideIgnored) {
|
|
1022
1026
|
// Respect attribute-only mode: when acceptedAttributes is set without acceptedTags,
|
|
1023
1027
|
// only attribute strings are linted — skip JSX child text.
|
|
1024
|
-
if (!(acceptedAttributesSet && !acceptedTagsSet)) {
|
|
1028
|
+
if (!(acceptedAttributesSet && !acceptedTagsSet && !acceptAllTags)) {
|
|
1025
1029
|
const text = node.value.trim();
|
|
1026
1030
|
if (text && text.length > 1 && text !== '...' && !isUrlOrPath(text) && isNaN(Number(text)) && !text.startsWith('{{')) {
|
|
1027
1031
|
nodesToLint.push(node);
|
package/dist/esm/status.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { styleText } from 'node:util';
|
|
2
2
|
import ora from 'ora';
|
|
3
3
|
import { resolve } from 'node:path';
|
|
4
|
-
import '
|
|
5
|
-
import 'node:fs/promises';
|
|
4
|
+
import { runExtractor } from './extractor/core/extractor.js';
|
|
6
5
|
import { findKeys } from './extractor/core/key-finder.js';
|
|
7
6
|
import 'glob';
|
|
8
7
|
import { getNestedKeys, getNestedValue } from './utils/nested-object.js';
|
|
@@ -10,8 +9,8 @@ import { loadTranslationFile, getOutputPath } from './utils/file-utils.js';
|
|
|
10
9
|
import { safePluralRules } from './utils/plural-rules.js';
|
|
11
10
|
import { parseNestedReferences } from './utils/nesting.js';
|
|
12
11
|
import { isContextVariantOfAcceptingKey } from './utils/context-variants.js';
|
|
13
|
-
import { shouldShowFunnel, recordFunnelShown } from './utils/funnel-msg-tracker.js';
|
|
14
12
|
import 'node:module';
|
|
13
|
+
import { shouldShowFunnel, recordFunnelShown } from './utils/funnel-msg-tracker.js';
|
|
15
14
|
|
|
16
15
|
function classifyValue(value) {
|
|
17
16
|
if (value === undefined || value === null)
|
|
@@ -732,6 +731,87 @@ function generateProgressBarText(percentage) {
|
|
|
732
731
|
const emptyBars = totalBars - filledBars;
|
|
733
732
|
return `[${styleText('green', ''.padStart(filledBars, '■'))}${''.padStart(emptyBars, '□')}]`;
|
|
734
733
|
}
|
|
734
|
+
/**
|
|
735
|
+
* Reports translation keys that exist in the translation files but are no
|
|
736
|
+
* longer used in the source code (see issue #281).
|
|
737
|
+
*
|
|
738
|
+
* "Unused" is defined as "what `extract` with `removeUnusedKeys` would delete":
|
|
739
|
+
* the report runs the extractor in dry-run mode and diffs the existing key set
|
|
740
|
+
* against the pruned result. This inherits all of extract's edge-case handling
|
|
741
|
+
* (plural variants, context variants, `preservePatterns`, `ignoreNamespaces`)
|
|
742
|
+
* instead of re-implementing usedness detection that could drift from it.
|
|
743
|
+
*
|
|
744
|
+
* The command never writes any files and exits with a non-zero status code
|
|
745
|
+
* when unused keys are found, so it can serve as a dedicated CI check
|
|
746
|
+
* alongside `status <locale>` (missing translations).
|
|
747
|
+
*/
|
|
748
|
+
async function runUnusedReport(config, options = {}) {
|
|
749
|
+
if (options.locale && !config.locales.includes(options.locale)) {
|
|
750
|
+
console.error(styleText('red', `Error: Locale "${options.locale}" is not defined in your configuration.`));
|
|
751
|
+
process.exit(1);
|
|
752
|
+
return;
|
|
753
|
+
}
|
|
754
|
+
// Work on a copy with `removeUnusedKeys` forced on: the dry-run diff below
|
|
755
|
+
// derives "unused" from what extract would prune, which requires pruning to
|
|
756
|
+
// be active regardless of the user's config. The caller's config object
|
|
757
|
+
// stays untouched.
|
|
758
|
+
const cfg = { ...config, extract: { ...config.extract, removeUnusedKeys: true } };
|
|
759
|
+
const spinner = ora('Analyzing project for unused translation keys...\n').start();
|
|
760
|
+
let extraction;
|
|
761
|
+
try {
|
|
762
|
+
extraction = await runExtractor(cfg, { isDryRun: true, quiet: true });
|
|
763
|
+
spinner.succeed('Analysis complete.');
|
|
764
|
+
}
|
|
765
|
+
catch (error) {
|
|
766
|
+
spinner.fail('Failed to analyze unused translation keys.');
|
|
767
|
+
console.error(error);
|
|
768
|
+
process.exit(1);
|
|
769
|
+
return;
|
|
770
|
+
}
|
|
771
|
+
const { results, hasErrors } = extraction;
|
|
772
|
+
const rawSep = cfg.extract.keySeparator;
|
|
773
|
+
const keySeparator = rawSep === false ? false : (rawSep ?? '.');
|
|
774
|
+
let totalUnused = 0;
|
|
775
|
+
for (const result of results) {
|
|
776
|
+
if (options.locale && result.locale !== options.locale)
|
|
777
|
+
continue;
|
|
778
|
+
if (options.namespace && result.namespace && result.namespace !== options.namespace)
|
|
779
|
+
continue;
|
|
780
|
+
const keptKeys = new Set(getNestedKeys(result.newTranslations || {}, keySeparator));
|
|
781
|
+
const unusedKeys = getNestedKeys(result.existingTranslations || {}, keySeparator)
|
|
782
|
+
.filter(key => !keptKeys.has(key))
|
|
783
|
+
.sort();
|
|
784
|
+
if (unusedKeys.length === 0)
|
|
785
|
+
continue;
|
|
786
|
+
totalUnused += unusedKeys.length;
|
|
787
|
+
const label = result.namespace ? `${result.locale}/${result.namespace}` : result.locale;
|
|
788
|
+
console.log(styleText(['cyan', 'bold'], `\n[${label}] ${result.path}`));
|
|
789
|
+
for (const key of unusedKeys) {
|
|
790
|
+
console.log(` ${styleText('red', '✗')} ${key}`);
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
if (hasErrors) {
|
|
794
|
+
console.log(styleText(['yellow', 'bold'], '\n⚠ Some source files could not be parsed — keys used only in those files may be falsely reported as unused.'));
|
|
795
|
+
}
|
|
796
|
+
if (totalUnused > 0) {
|
|
797
|
+
console.log(styleText(['yellow', 'bold'], `\nSummary: Found ${totalUnused} unused key(s)${options.locale ? ` for "${options.locale}"` : ''}. No files were modified.`));
|
|
798
|
+
console.log(`Run ${styleText('cyan', 'npx i18next-cli extract')} to remove them.`);
|
|
799
|
+
}
|
|
800
|
+
else {
|
|
801
|
+
console.log(styleText(['green', 'bold'], '\nSummary: 🎉 No unused keys found.'));
|
|
802
|
+
}
|
|
803
|
+
// Static analysis has an inherent blind spot for dynamically constructed
|
|
804
|
+
// keys, so this link doubles as an accuracy disclaimer. Gated like the other
|
|
805
|
+
// funnel messages (never in CI/non-TTY, 24h cooldown).
|
|
806
|
+
if (await shouldShowFunnel('status-unused')) {
|
|
807
|
+
console.log(styleText('gray', "\nℹ Static analysis cannot detect dynamically constructed keys (e.g. t('error.' + code))."));
|
|
808
|
+
console.log(styleText('gray', ' To find keys that are truly unused at runtime, see https://www.locize.com/docs/guides/find-unused-translations'));
|
|
809
|
+
await recordFunnelShown('status-unused');
|
|
810
|
+
}
|
|
811
|
+
if (totalUnused > 0 || hasErrors) {
|
|
812
|
+
process.exit(1);
|
|
813
|
+
}
|
|
814
|
+
}
|
|
735
815
|
async function printLocizeFunnel() {
|
|
736
816
|
if (!(await shouldShowFunnel('status')))
|
|
737
817
|
return;
|
|
@@ -741,4 +821,4 @@ async function printLocizeFunnel() {
|
|
|
741
821
|
return recordFunnelShown('status');
|
|
742
822
|
}
|
|
743
823
|
|
|
744
|
-
export { runStatus };
|
|
824
|
+
export { runStatus, runUnusedReport };
|
package/package.json
CHANGED
package/types/cli.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/types/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export { defineConfig } from './config.js';
|
|
|
3
3
|
export { extract, findKeys, getTranslations, runExtractor } from './extractor.js';
|
|
4
4
|
export { runLinter, recommendedAcceptedTags, recommendedAcceptedAttributes } from './linter.js';
|
|
5
5
|
export { runSyncer } from './syncer.js';
|
|
6
|
-
export { runStatus } from './status.js';
|
|
6
|
+
export { runStatus, runUnusedReport } from './status.js';
|
|
7
7
|
export { runTypesGenerator } from './types-generator.js';
|
|
8
8
|
export { runRenameKey } from './rename-key.js';
|
|
9
9
|
export { runInstrumenter, writeExtractedKeys } from './instrumenter/index.js';
|
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,oBAAoB,EACpB,MAAM,EACN,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,MAAM,EACN,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EACL,OAAO,EACP,QAAQ,EACR,eAAe,EACf,YAAY,EACb,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAC/F,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,oBAAoB,EACpB,MAAM,EACN,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,MAAM,EACN,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EACL,OAAO,EACP,QAAQ,EACR,eAAe,EACf,YAAY,EACb,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAC/F,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC7E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAC/D,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA"}
|
package/types/status.d.ts
CHANGED
|
@@ -30,5 +30,29 @@ interface StatusOptions {
|
|
|
30
30
|
* @throws {Error} When unable to extract keys or read translation files
|
|
31
31
|
*/
|
|
32
32
|
export declare function runStatus(config: I18nextToolkitConfig, options?: StatusOptions): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Options for the unused-keys report.
|
|
35
|
+
*/
|
|
36
|
+
interface UnusedOptions {
|
|
37
|
+
/** Restrict the report to a single locale */
|
|
38
|
+
locale?: string;
|
|
39
|
+
/** Restrict the report to a single namespace */
|
|
40
|
+
namespace?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Reports translation keys that exist in the translation files but are no
|
|
44
|
+
* longer used in the source code (see issue #281).
|
|
45
|
+
*
|
|
46
|
+
* "Unused" is defined as "what `extract` with `removeUnusedKeys` would delete":
|
|
47
|
+
* the report runs the extractor in dry-run mode and diffs the existing key set
|
|
48
|
+
* against the pruned result. This inherits all of extract's edge-case handling
|
|
49
|
+
* (plural variants, context variants, `preservePatterns`, `ignoreNamespaces`)
|
|
50
|
+
* instead of re-implementing usedness detection that could drift from it.
|
|
51
|
+
*
|
|
52
|
+
* The command never writes any files and exits with a non-zero status code
|
|
53
|
+
* when unused keys are found, so it can serve as a dedicated CI check
|
|
54
|
+
* alongside `status <locale>` (missing translations).
|
|
55
|
+
*/
|
|
56
|
+
export declare function runUnusedReport(config: I18nextToolkitConfig, options?: UnusedOptions): Promise<void>;
|
|
33
57
|
export {};
|
|
34
58
|
//# sourceMappingURL=status.d.ts.map
|
package/types/status.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAmC,MAAM,YAAY,CAAA;AAOvF;;GAEG;AACH,UAAU,aAAa;IACrB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAyHD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,SAAS,CAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,GAAE,aAAkB,iBAoDzF;AAsnBD;;GAEG;AACH,UAAU,aAAa;IACrB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,GAAE,aAAkB,iBAuE/F"}
|
package/types/types.d.ts
CHANGED
|
@@ -83,8 +83,10 @@ export interface I18nextToolkitConfig {
|
|
|
83
83
|
* If not provided (and no `extract.acceptedTags` is set), the linter will fall back to a recommended
|
|
84
84
|
* built-in accepted-list of common content-bearing tags (e.g. `p`, `span`, `div`, `button`, `label`, ...).
|
|
85
85
|
* See README for the exact recommended list.
|
|
86
|
+
*
|
|
87
|
+
* Pass `'all'` to lint every tag (including custom JSX components); `ignoredTags` still apply.
|
|
86
88
|
*/
|
|
87
|
-
acceptedTags?: string[];
|
|
89
|
+
acceptedTags?: string[] | 'all';
|
|
88
90
|
/** HTML tags to preserve in Trans component serialization (default: ['br', 'strong', 'i']) */
|
|
89
91
|
transKeepBasicHtmlNodesFor?: string[];
|
|
90
92
|
/** Glob patterns for keys to preserve even if not found in source (for dynamic keys) */
|
|
@@ -214,8 +216,10 @@ export interface I18nextToolkitConfig {
|
|
|
214
216
|
* If not provided (and no `extract.acceptedTags` is set), the linter will fall back to a recommended
|
|
215
217
|
* built-in accepted-list of common content-bearing tags (e.g. `p`, `span`, `div`, `button`, `label`, ...).
|
|
216
218
|
* See README for the exact recommended list.
|
|
219
|
+
*
|
|
220
|
+
* Pass `'all'` to lint every tag (including custom JSX components); `ignoredTags` still apply.
|
|
217
221
|
*/
|
|
218
|
-
acceptedTags?: string[];
|
|
222
|
+
acceptedTags?: string[] | 'all';
|
|
219
223
|
/** Glob pattern(s) for files to ignore during lint (in addition to those defined during extract) */
|
|
220
224
|
ignore?: string | string[];
|
|
221
225
|
/** Enable linting for interpolation parameter errors in translation calls (default: true) */
|
package/types/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|