i18next-cli 1.56.9 → 1.56.11

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
@@ -44,7 +44,7 @@ A unified, high-performance i18next CLI toolchain, powered by SWC.
44
44
  - **Translation Status**: Get a high-level overview or a detailed, key-by-key report of your project's translation completeness.
45
45
  - **Plugin System**: Extensible architecture for custom extraction patterns and file types (e.g., HTML, Handlebars).
46
46
  - **Legacy Migration**: Automatic migration from `i18next-parser` configurations.
47
- - **Cloud Integration**: Seamless integration with the [Locize](https://locize.com) translation management platform.
47
+ - **Cloud Integration**: Seamless integration with the [Locize](https://www.locize.com?utm_source=i18next_cli_readme&utm_medium=github&utm_campaign=readme) translation management platform.
48
48
 
49
49
  ## Installation
50
50
 
@@ -253,7 +253,7 @@ npx i18next-cli lint
253
253
 
254
254
  ### `instrument`
255
255
 
256
- Scans your source code for hardcoded user-facing strings and instruments them with i18next translation calls. This is useful for adding i18next instrumentation to an existing codebase that wasn't built with internationalization in mind. You can see this in action in [this video](https://youtu.be/aWZnZXwGg34) or in [this blog post](https://www.locize.com/blog/i18next-cli-instrument).
256
+ Scans your source code for hardcoded user-facing strings and instruments them with i18next translation calls. This is useful for adding i18next instrumentation to an existing codebase that wasn't built with internationalization in mind. You can see this in action in [this video](https://youtu.be/aWZnZXwGg34) or in [this blog post](https://www.locize.com/blog/i18next-cli-instrument?utm_source=i18next_cli_readme&utm_medium=github&utm_campaign=readme).
257
257
 
258
258
  > **⚠️ First-Step Tool:** The `instrument` command uses heuristic-based detection and is designed as a **first pass** to identify and suggest transformation candidates. It will **not catch 100% of cases**, and you should expect both false positives and false negatives. Always review the suggested transformations carefully before committing them to your codebase. Think of it as an intelligent code assistant, not an automated compiler.
259
259
 
@@ -1386,6 +1386,40 @@ const fixedT = getFixedT('en', 'namespace');
1386
1386
  fixedT('key');
1387
1387
  ```
1388
1388
 
1389
+ ### Selector API
1390
+
1391
+ The extractor handles the type-safe Selector API and mirrors the runtime
1392
+ namespace-routing rule from i18next v25.8.19. With a single-namespace hook,
1393
+ selector paths are extracted into the bound namespace as-is:
1394
+
1395
+ ```ts
1396
+ const { t } = useTranslation('common');
1397
+
1398
+ t($ => $.button.save); // → common.json: button.save
1399
+ t($ => $.button.save, { ns: 'auth' }); // → auth.json: button.save
1400
+ ```
1401
+
1402
+ When the hook is called with a multi-namespace array, a leading path segment
1403
+ that matches a **secondary** namespace is treated as a namespace prefix and
1404
+ the rest of the path is routed to that namespace's file. The primary
1405
+ namespace (the array's first entry) is **never** rewritten — its keys are
1406
+ exposed flat on the selector proxy:
1407
+
1408
+ ```ts
1409
+ const { t } = useTranslation(['auth', 'validation']);
1410
+
1411
+ t($ => $.login['Welcome Back!']); // → auth.json: login.Welcome Back!
1412
+ t($ => $.validation.email['Required']); // → validation.json: email.Required
1413
+ t($ => $.email['Required'], { ns: 'validation'}); // → validation.json: email.Required
1414
+ ```
1415
+
1416
+ This matches the behavior of `i18next/src/selector.js` exactly: paths whose
1417
+ first segment is the primary namespace, or doesn't appear in the hook's
1418
+ namespace list at all, are joined with the configured `keySeparator` and
1419
+ routed to the primary. Secondary-prefixed paths are joined as
1420
+ `<ns><nsSeparator><rest>` so the standard `ns:key` routing places them in
1421
+ the correct file.
1422
+
1389
1423
  ## Programmatic Usage
1390
1424
 
1391
1425
  In addition to the CLI commands, `i18next-cli` can be used programmatically in your build scripts, Gulp tasks, or any Node.js application:
@@ -1507,21 +1541,21 @@ This programmatic API gives you the same power as the CLI but with full control
1507
1541
  <h3 align="center">Gold Sponsors</h3>
1508
1542
 
1509
1543
  <p align="center">
1510
- <a href="https://www.locize.com/" target="_blank">
1544
+ <a href="https://www.locize.com/?utm_source=i18next_cli_readme&utm_medium=github&utm_campaign=readme" target="_blank">
1511
1545
  <img src="https://raw.githubusercontent.com/i18next/i18next/master/assets/locize_sponsor_240.gif" width="240px">
1512
1546
  </a>
1513
1547
  </p>
1514
1548
 
1515
1549
  ---
1516
1550
 
1517
- **From the creators of i18next: localization as a service - [Locize](https://www.locize.com)**
1551
+ **From the creators of i18next: localization as a service - [Locize](https://www.locize.com?utm_source=i18next_cli_readme&utm_medium=github&utm_campaign=readme)**
1518
1552
 
1519
- A translation management system built around the i18next ecosystem - [Locize](https://locize.com).
1553
+ A translation management system built around the i18next ecosystem - [Locize](https://www.locize.com?utm_source=i18next_cli_readme&utm_medium=github&utm_campaign=readme).
1520
1554
 
1521
- **Now with a [Free plan](https://locize.com/pricing) for small projects!** Perfect for hobbyists or getting started.
1555
+ **Now with a [Free plan](https://www.locize.com/pricing?utm_source=i18next_cli_readme&utm_medium=github&utm_campaign=readme) for small projects!** Perfect for hobbyists or getting started.
1522
1556
 
1523
1557
  ![Locize](https://www.locize.com/img/ads/github_locize.png)
1524
1558
 
1525
- With using [Locize](https://www.locize.com/?utm_source=i18next_cli_readme&utm_medium=github) you directly support the future of i18next.
1559
+ With using [Locize](https://www.locize.com/?utm_source=i18next_cli_readme&utm_medium=github&utm_campaign=readme) you directly support the future of i18next.
1526
1560
 
1527
1561
  ---
package/dist/cjs/cli.js CHANGED
@@ -32,7 +32,7 @@ const program = new commander.Command();
32
32
  program
33
33
  .name('i18next-cli')
34
34
  .description('A unified, high-performance i18next CLI.')
35
- .version('1.56.9'); // This string is replaced with the actual version at build time by rollup
35
+ .version('1.56.11'); // This string is replaced with the actual version at build time by rollup
36
36
  // new: global config override option
37
37
  program.option('-c, --config <path>', 'Path to i18next-cli config file (overrides detection)');
38
38
  program
@@ -107,7 +107,7 @@ class CallExpressionHandler {
107
107
  }
108
108
  }
109
109
  }
110
- const { keysToProcess, isSelectorAPI } = this.handleCallExpressionArgument(node, 0);
110
+ const { keysToProcess, originalKeysToProcess, isSelectorAPI } = this.handleCallExpressionArgument(node, 0, scopeInfo);
111
111
  if (keysToProcess.length === 0)
112
112
  return;
113
113
  let isOrdinalByKey = false;
@@ -172,7 +172,11 @@ class CallExpressionHandler {
172
172
  const explicitPluralForVariants = Boolean(explicitPluralDefaultsInOptions || (typeof finalDefaultValue === 'string' && !containsCountPlaceholder(finalDefaultValue)));
173
173
  // Loop through each key found (could be one or more) and process it
174
174
  for (let i = 0; i < keysToProcess.length; i++) {
175
- const originalKey = keysToProcess[i]; // preserve original (possibly namespaced) form
175
+ // For the dv heuristic we want the user-typed shape, not the post-rewrite
176
+ // form: a synthetic `validation:email` (rewritten from a `$.validation.email`
177
+ // selector) shouldn't leak into the default value. originalKeysToProcess
178
+ // is the pre-rewrite path; for non-selector calls it's the same as keysToProcess.
179
+ const originalKey = originalKeysToProcess[i];
176
180
  let key = keysToProcess[i];
177
181
  let ns;
178
182
  // Determine namespace (explicit ns > ns:key > scope ns > default)
@@ -555,32 +559,90 @@ class CallExpressionHandler {
555
559
  * @param argIndex - The index of the argument to process
556
560
  * @returns An object containing the keys to process and a flag indicating if the selector API is used
557
561
  */
558
- handleCallExpressionArgument(node, argIndex) {
562
+ handleCallExpressionArgument(node, argIndex, scopeInfo) {
559
563
  const firstArg = node.arguments[argIndex].expression;
560
564
  const keysToProcess = [];
565
+ // Mirror of keysToProcess BEFORE selector-ns rewriting. For non-selector
566
+ // calls and selector calls that don't trigger a rewrite, both arrays hold
567
+ // identical strings. Used by the default-value heuristic so a synthetic
568
+ // `ns:key` from selector rewriting doesn't surface as the dv.
569
+ const originalKeysToProcess = [];
561
570
  let isSelectorAPI = false;
562
571
  if (firstArg.type === 'ArrowFunctionExpression') {
563
572
  const keys = this.extractKeysFromSelector(firstArg);
564
573
  if (keys.length > 0) {
565
- keysToProcess.push(...keys);
574
+ for (const k of keys) {
575
+ originalKeysToProcess.push(k);
576
+ keysToProcess.push(this.applySelectorNsRewrite(k, scopeInfo));
577
+ }
566
578
  isSelectorAPI = true;
567
579
  }
568
580
  }
569
581
  else if (firstArg.type === 'ArrayExpression') {
570
582
  for (const element of firstArg.elements) {
571
583
  if (element?.expression) {
572
- keysToProcess.push(...this.expressionResolver.resolvePossibleKeyStringValues(element.expression));
584
+ const resolved = this.expressionResolver.resolvePossibleKeyStringValues(element.expression);
585
+ keysToProcess.push(...resolved);
586
+ originalKeysToProcess.push(...resolved);
573
587
  }
574
588
  }
575
589
  }
576
590
  else {
577
- keysToProcess.push(...this.expressionResolver.resolvePossibleKeyStringValues(firstArg));
591
+ const resolved = this.expressionResolver.resolvePossibleKeyStringValues(firstArg);
592
+ keysToProcess.push(...resolved);
593
+ originalKeysToProcess.push(...resolved);
594
+ }
595
+ // Filter empties on both arrays in lockstep to keep them index-aligned.
596
+ const filteredKeys = [];
597
+ const filteredOriginals = [];
598
+ for (let i = 0; i < keysToProcess.length; i++) {
599
+ if (keysToProcess[i]) {
600
+ filteredKeys.push(keysToProcess[i]);
601
+ filteredOriginals.push(originalKeysToProcess[i]);
602
+ }
578
603
  }
579
604
  return {
580
- keysToProcess: keysToProcess.filter((key) => !!key),
605
+ keysToProcess: filteredKeys,
606
+ originalKeysToProcess: filteredOriginals,
581
607
  isSelectorAPI,
582
608
  };
583
609
  }
610
+ /**
611
+ * Mirror i18next v25.8.19's runtime selector rule: when the hook was called
612
+ * with a multi-element namespace array (e.g. `useTranslation(['nsA', 'nsB'])`)
613
+ * and a selector path's first segment matches a *secondary* namespace,
614
+ * rewrite the joined key to `ns<nsSeparator>rest` so the downstream
615
+ * extractor's standard `ns:key` split routes the key to the right file.
616
+ *
617
+ * The primary namespace is intentionally never rewritten — its keys are
618
+ * exposed flat on `$`, so a leading segment matching the primary name means
619
+ * a literal sub-key (see #2405). This matches the runtime behavior in
620
+ * i18next/src/selector.js exactly.
621
+ *
622
+ * Falls through to the input string when:
623
+ * - the call had no selector (string keys go through this path unchanged),
624
+ * - scope has < 2 namespaces, or
625
+ * - first segment is the primary or not in the scope's namespaces list.
626
+ */
627
+ applySelectorNsRewrite(key, scopeInfo) {
628
+ const ns = scopeInfo?.namespaces;
629
+ if (!ns || ns.length < 2)
630
+ return key;
631
+ const keySeparator = this.config.extract.keySeparator;
632
+ const joiner = typeof keySeparator === 'string' ? keySeparator : '.';
633
+ const nsSeparator = this.config.extract.nsSeparator ?? ':';
634
+ if (keySeparator === false || !nsSeparator)
635
+ return key;
636
+ const firstSepAt = key.indexOf(joiner);
637
+ if (firstSepAt < 0)
638
+ return key;
639
+ const head = key.slice(0, firstSepAt);
640
+ if (head === ns[0])
641
+ return key;
642
+ if (!ns.includes(head))
643
+ return key;
644
+ return `${head}${nsSeparator}${key.slice(firstSepAt + joiner.length)}`;
645
+ }
584
646
  /**
585
647
  * Extracts translation key(s) from selector API arrow function.
586
648
  *
@@ -380,25 +380,9 @@ class ScopeManager {
380
380
  else {
381
381
  // Position-driven extraction: respect hookConfig positions (nsArg/keyPrefixArg).
382
382
  if (nsArgIndex !== -1) {
383
- const nsNode = callExpr.arguments?.[nsArgIndex]?.expression;
384
- if (nsNode?.type === 'StringLiteral') {
385
- defaultNs = nsNode.value;
386
- }
387
- else if (nsNode?.type === 'Identifier') {
388
- defaultNs = this.resolveSimpleStringIdentifier(nsNode.value);
389
- }
390
- else if (nsNode?.type === 'MemberExpression') {
391
- defaultNs = this.resolveSimpleMemberExpression(nsNode);
392
- }
393
- else if (nsNode?.type === 'ArrayExpression') {
394
- const first = nsNode.elements[0]?.expression;
395
- if (first?.type === 'StringLiteral') {
396
- defaultNs = first.value;
397
- }
398
- else if (first?.type === 'Identifier') {
399
- defaultNs = this.resolveSimpleStringIdentifier(first.value);
400
- }
401
- }
383
+ // Comment scope only cares about the primary ns — selector multi-ns
384
+ // rewriting is handled by the runtime extractor scope, not comments.
385
+ defaultNs = this.resolveNsArg(callExpr.arguments?.[nsArgIndex]?.expression).defaultNs;
402
386
  }
403
387
  kpArg = kpArgIndex === -1 ? undefined : callExpr.arguments?.[kpArgIndex]?.expression;
404
388
  }
@@ -448,6 +432,7 @@ class ScopeManager {
448
432
  const nsArgIndex = hookConfig.nsArg ?? 0;
449
433
  const kpArgIndex = hookConfig.keyPrefixArg ?? 1;
450
434
  let defaultNs;
435
+ let namespaces;
451
436
  let keyPrefix;
452
437
  // Early detect useTranslation(lng, ns) for built-in hook name only
453
438
  const first = callExpr.arguments?.[0]?.expression;
@@ -465,25 +450,9 @@ class ScopeManager {
465
450
  }
466
451
  else {
467
452
  if (nsArgIndex !== -1) {
468
- const nsNode = callExpr.arguments?.[nsArgIndex]?.expression;
469
- if (nsNode?.type === 'StringLiteral') {
470
- defaultNs = nsNode.value;
471
- }
472
- else if (nsNode?.type === 'Identifier') {
473
- defaultNs = this.resolveSimpleStringIdentifier(nsNode.value);
474
- }
475
- else if (nsNode?.type === 'MemberExpression') {
476
- defaultNs = this.resolveSimpleMemberExpression(nsNode);
477
- }
478
- else if (nsNode?.type === 'ArrayExpression') {
479
- const first = nsNode.elements[0]?.expression;
480
- if (first?.type === 'StringLiteral') {
481
- defaultNs = first.value;
482
- }
483
- else if (first?.type === 'Identifier') {
484
- defaultNs = this.resolveSimpleStringIdentifier(first.value);
485
- }
486
- }
453
+ const resolved = this.resolveNsArg(callExpr.arguments?.[nsArgIndex]?.expression);
454
+ defaultNs = resolved.defaultNs;
455
+ namespaces = resolved.namespaces;
487
456
  }
488
457
  kpArg = kpArgIndex === -1 ? undefined : callExpr.arguments?.[kpArgIndex]?.expression;
489
458
  }
@@ -505,24 +474,25 @@ class ScopeManager {
505
474
  keyPrefix = tpl.quasis?.[0]?.cooked ?? undefined;
506
475
  }
507
476
  }
477
+ const info = { defaultNs, namespaces, keyPrefix };
508
478
  // Attach scope info to all destructured properties (custom functions, t, getFixedT, etc.)
509
479
  if (node.id.type === 'ObjectPattern') {
510
480
  for (const prop of node.id.properties) {
511
481
  if (prop.type === 'AssignmentPatternProperty' && prop.key.type === 'Identifier') {
512
- this.setVarInScope(prop.key.value, { defaultNs, keyPrefix });
482
+ this.setVarInScope(prop.key.value, info);
513
483
  }
514
484
  if (prop.type === 'KeyValuePatternProperty' && prop.value.type === 'Identifier') {
515
- this.setVarInScope(prop.value.value, { defaultNs, keyPrefix });
485
+ this.setVarInScope(prop.value.value, info);
516
486
  }
517
487
  }
518
488
  }
519
489
  else if (node.id.type === 'Identifier') {
520
- this.setVarInScope(node.id.value, { defaultNs, keyPrefix });
490
+ this.setVarInScope(node.id.value, info);
521
491
  }
522
492
  else if (node.id.type === 'ArrayPattern') {
523
493
  const firstElement = node.id.elements[0];
524
494
  if (firstElement?.type === 'Identifier') {
525
- this.setVarInScope(firstElement.value, { defaultNs, keyPrefix });
495
+ this.setVarInScope(firstElement.value, info);
526
496
  }
527
497
  }
528
498
  }
@@ -558,6 +528,51 @@ class ScopeManager {
558
528
  * without interpolation. Returns undefined when the expression cannot be
559
529
  * resolved statically.
560
530
  */
531
+ /**
532
+ * Resolve the `ns` argument of useTranslation to `{ defaultNs, namespaces }`.
533
+ *
534
+ * - String literal / identifier / member-expr → single `defaultNs`, no array.
535
+ * - Array expression → first element becomes `defaultNs`, every statically
536
+ * resolvable element ends up in `namespaces` (preserving order).
537
+ *
538
+ * `namespaces` is only set when the input was an array form, so consumers can
539
+ * distinguish `useTranslation('a')` (single, `namespaces` undefined) from
540
+ * `useTranslation(['a'])` (single-element array, `namespaces = ['a']`).
541
+ * The runtime selector rule from v25.8.19 only applies when length > 1, so
542
+ * either single form behaves identically downstream.
543
+ */
544
+ resolveNsArg(nsNode) {
545
+ if (!nsNode)
546
+ return {};
547
+ if (nsNode.type === 'StringLiteral')
548
+ return { defaultNs: nsNode.value };
549
+ if (nsNode.type === 'Identifier')
550
+ return { defaultNs: this.resolveSimpleStringIdentifier(nsNode.value) };
551
+ if (nsNode.type === 'MemberExpression')
552
+ return { defaultNs: this.resolveSimpleMemberExpression(nsNode) };
553
+ if (nsNode.type === 'ArrayExpression') {
554
+ const namespaces = [];
555
+ for (const el of nsNode.elements) {
556
+ const expr = el?.expression;
557
+ if (!expr)
558
+ continue;
559
+ if (expr.type === 'StringLiteral')
560
+ namespaces.push(expr.value);
561
+ else if (expr.type === 'Identifier') {
562
+ const resolved = this.resolveSimpleStringIdentifier(expr.value);
563
+ if (resolved !== undefined)
564
+ namespaces.push(resolved);
565
+ }
566
+ else if (expr.type === 'MemberExpression') {
567
+ const resolved = this.resolveSimpleMemberExpression(expr);
568
+ if (resolved !== undefined)
569
+ namespaces.push(resolved);
570
+ }
571
+ }
572
+ return { defaultNs: namespaces[0], namespaces: namespaces.length > 0 ? namespaces : undefined };
573
+ }
574
+ return {};
575
+ }
561
576
  resolveStringArg(node) {
562
577
  if (!node)
563
578
  return undefined;
@@ -835,6 +835,7 @@ function findHardcodedStrings(ast, code, config) {
835
835
  issues.push({
836
836
  text: node.value.trim(),
837
837
  line: getLineNumber(position),
838
+ type: 'hardcoded',
838
839
  });
839
840
  lastSearchIndex = position + searchText.length;
840
841
  }
package/dist/esm/cli.js CHANGED
@@ -30,7 +30,7 @@ const program = new Command();
30
30
  program
31
31
  .name('i18next-cli')
32
32
  .description('A unified, high-performance i18next CLI.')
33
- .version('1.56.9'); // This string is replaced with the actual version at build time by rollup
33
+ .version('1.56.11'); // This string is replaced with the actual version at build time by rollup
34
34
  // new: global config override option
35
35
  program.option('-c, --config <path>', 'Path to i18next-cli config file (overrides detection)');
36
36
  program
@@ -105,7 +105,7 @@ class CallExpressionHandler {
105
105
  }
106
106
  }
107
107
  }
108
- const { keysToProcess, isSelectorAPI } = this.handleCallExpressionArgument(node, 0);
108
+ const { keysToProcess, originalKeysToProcess, isSelectorAPI } = this.handleCallExpressionArgument(node, 0, scopeInfo);
109
109
  if (keysToProcess.length === 0)
110
110
  return;
111
111
  let isOrdinalByKey = false;
@@ -170,7 +170,11 @@ class CallExpressionHandler {
170
170
  const explicitPluralForVariants = Boolean(explicitPluralDefaultsInOptions || (typeof finalDefaultValue === 'string' && !containsCountPlaceholder(finalDefaultValue)));
171
171
  // Loop through each key found (could be one or more) and process it
172
172
  for (let i = 0; i < keysToProcess.length; i++) {
173
- const originalKey = keysToProcess[i]; // preserve original (possibly namespaced) form
173
+ // For the dv heuristic we want the user-typed shape, not the post-rewrite
174
+ // form: a synthetic `validation:email` (rewritten from a `$.validation.email`
175
+ // selector) shouldn't leak into the default value. originalKeysToProcess
176
+ // is the pre-rewrite path; for non-selector calls it's the same as keysToProcess.
177
+ const originalKey = originalKeysToProcess[i];
174
178
  let key = keysToProcess[i];
175
179
  let ns;
176
180
  // Determine namespace (explicit ns > ns:key > scope ns > default)
@@ -553,32 +557,90 @@ class CallExpressionHandler {
553
557
  * @param argIndex - The index of the argument to process
554
558
  * @returns An object containing the keys to process and a flag indicating if the selector API is used
555
559
  */
556
- handleCallExpressionArgument(node, argIndex) {
560
+ handleCallExpressionArgument(node, argIndex, scopeInfo) {
557
561
  const firstArg = node.arguments[argIndex].expression;
558
562
  const keysToProcess = [];
563
+ // Mirror of keysToProcess BEFORE selector-ns rewriting. For non-selector
564
+ // calls and selector calls that don't trigger a rewrite, both arrays hold
565
+ // identical strings. Used by the default-value heuristic so a synthetic
566
+ // `ns:key` from selector rewriting doesn't surface as the dv.
567
+ const originalKeysToProcess = [];
559
568
  let isSelectorAPI = false;
560
569
  if (firstArg.type === 'ArrowFunctionExpression') {
561
570
  const keys = this.extractKeysFromSelector(firstArg);
562
571
  if (keys.length > 0) {
563
- keysToProcess.push(...keys);
572
+ for (const k of keys) {
573
+ originalKeysToProcess.push(k);
574
+ keysToProcess.push(this.applySelectorNsRewrite(k, scopeInfo));
575
+ }
564
576
  isSelectorAPI = true;
565
577
  }
566
578
  }
567
579
  else if (firstArg.type === 'ArrayExpression') {
568
580
  for (const element of firstArg.elements) {
569
581
  if (element?.expression) {
570
- keysToProcess.push(...this.expressionResolver.resolvePossibleKeyStringValues(element.expression));
582
+ const resolved = this.expressionResolver.resolvePossibleKeyStringValues(element.expression);
583
+ keysToProcess.push(...resolved);
584
+ originalKeysToProcess.push(...resolved);
571
585
  }
572
586
  }
573
587
  }
574
588
  else {
575
- keysToProcess.push(...this.expressionResolver.resolvePossibleKeyStringValues(firstArg));
589
+ const resolved = this.expressionResolver.resolvePossibleKeyStringValues(firstArg);
590
+ keysToProcess.push(...resolved);
591
+ originalKeysToProcess.push(...resolved);
592
+ }
593
+ // Filter empties on both arrays in lockstep to keep them index-aligned.
594
+ const filteredKeys = [];
595
+ const filteredOriginals = [];
596
+ for (let i = 0; i < keysToProcess.length; i++) {
597
+ if (keysToProcess[i]) {
598
+ filteredKeys.push(keysToProcess[i]);
599
+ filteredOriginals.push(originalKeysToProcess[i]);
600
+ }
576
601
  }
577
602
  return {
578
- keysToProcess: keysToProcess.filter((key) => !!key),
603
+ keysToProcess: filteredKeys,
604
+ originalKeysToProcess: filteredOriginals,
579
605
  isSelectorAPI,
580
606
  };
581
607
  }
608
+ /**
609
+ * Mirror i18next v25.8.19's runtime selector rule: when the hook was called
610
+ * with a multi-element namespace array (e.g. `useTranslation(['nsA', 'nsB'])`)
611
+ * and a selector path's first segment matches a *secondary* namespace,
612
+ * rewrite the joined key to `ns<nsSeparator>rest` so the downstream
613
+ * extractor's standard `ns:key` split routes the key to the right file.
614
+ *
615
+ * The primary namespace is intentionally never rewritten — its keys are
616
+ * exposed flat on `$`, so a leading segment matching the primary name means
617
+ * a literal sub-key (see #2405). This matches the runtime behavior in
618
+ * i18next/src/selector.js exactly.
619
+ *
620
+ * Falls through to the input string when:
621
+ * - the call had no selector (string keys go through this path unchanged),
622
+ * - scope has < 2 namespaces, or
623
+ * - first segment is the primary or not in the scope's namespaces list.
624
+ */
625
+ applySelectorNsRewrite(key, scopeInfo) {
626
+ const ns = scopeInfo?.namespaces;
627
+ if (!ns || ns.length < 2)
628
+ return key;
629
+ const keySeparator = this.config.extract.keySeparator;
630
+ const joiner = typeof keySeparator === 'string' ? keySeparator : '.';
631
+ const nsSeparator = this.config.extract.nsSeparator ?? ':';
632
+ if (keySeparator === false || !nsSeparator)
633
+ return key;
634
+ const firstSepAt = key.indexOf(joiner);
635
+ if (firstSepAt < 0)
636
+ return key;
637
+ const head = key.slice(0, firstSepAt);
638
+ if (head === ns[0])
639
+ return key;
640
+ if (!ns.includes(head))
641
+ return key;
642
+ return `${head}${nsSeparator}${key.slice(firstSepAt + joiner.length)}`;
643
+ }
582
644
  /**
583
645
  * Extracts translation key(s) from selector API arrow function.
584
646
  *
@@ -378,25 +378,9 @@ class ScopeManager {
378
378
  else {
379
379
  // Position-driven extraction: respect hookConfig positions (nsArg/keyPrefixArg).
380
380
  if (nsArgIndex !== -1) {
381
- const nsNode = callExpr.arguments?.[nsArgIndex]?.expression;
382
- if (nsNode?.type === 'StringLiteral') {
383
- defaultNs = nsNode.value;
384
- }
385
- else if (nsNode?.type === 'Identifier') {
386
- defaultNs = this.resolveSimpleStringIdentifier(nsNode.value);
387
- }
388
- else if (nsNode?.type === 'MemberExpression') {
389
- defaultNs = this.resolveSimpleMemberExpression(nsNode);
390
- }
391
- else if (nsNode?.type === 'ArrayExpression') {
392
- const first = nsNode.elements[0]?.expression;
393
- if (first?.type === 'StringLiteral') {
394
- defaultNs = first.value;
395
- }
396
- else if (first?.type === 'Identifier') {
397
- defaultNs = this.resolveSimpleStringIdentifier(first.value);
398
- }
399
- }
381
+ // Comment scope only cares about the primary ns — selector multi-ns
382
+ // rewriting is handled by the runtime extractor scope, not comments.
383
+ defaultNs = this.resolveNsArg(callExpr.arguments?.[nsArgIndex]?.expression).defaultNs;
400
384
  }
401
385
  kpArg = kpArgIndex === -1 ? undefined : callExpr.arguments?.[kpArgIndex]?.expression;
402
386
  }
@@ -446,6 +430,7 @@ class ScopeManager {
446
430
  const nsArgIndex = hookConfig.nsArg ?? 0;
447
431
  const kpArgIndex = hookConfig.keyPrefixArg ?? 1;
448
432
  let defaultNs;
433
+ let namespaces;
449
434
  let keyPrefix;
450
435
  // Early detect useTranslation(lng, ns) for built-in hook name only
451
436
  const first = callExpr.arguments?.[0]?.expression;
@@ -463,25 +448,9 @@ class ScopeManager {
463
448
  }
464
449
  else {
465
450
  if (nsArgIndex !== -1) {
466
- const nsNode = callExpr.arguments?.[nsArgIndex]?.expression;
467
- if (nsNode?.type === 'StringLiteral') {
468
- defaultNs = nsNode.value;
469
- }
470
- else if (nsNode?.type === 'Identifier') {
471
- defaultNs = this.resolveSimpleStringIdentifier(nsNode.value);
472
- }
473
- else if (nsNode?.type === 'MemberExpression') {
474
- defaultNs = this.resolveSimpleMemberExpression(nsNode);
475
- }
476
- else if (nsNode?.type === 'ArrayExpression') {
477
- const first = nsNode.elements[0]?.expression;
478
- if (first?.type === 'StringLiteral') {
479
- defaultNs = first.value;
480
- }
481
- else if (first?.type === 'Identifier') {
482
- defaultNs = this.resolveSimpleStringIdentifier(first.value);
483
- }
484
- }
451
+ const resolved = this.resolveNsArg(callExpr.arguments?.[nsArgIndex]?.expression);
452
+ defaultNs = resolved.defaultNs;
453
+ namespaces = resolved.namespaces;
485
454
  }
486
455
  kpArg = kpArgIndex === -1 ? undefined : callExpr.arguments?.[kpArgIndex]?.expression;
487
456
  }
@@ -503,24 +472,25 @@ class ScopeManager {
503
472
  keyPrefix = tpl.quasis?.[0]?.cooked ?? undefined;
504
473
  }
505
474
  }
475
+ const info = { defaultNs, namespaces, keyPrefix };
506
476
  // Attach scope info to all destructured properties (custom functions, t, getFixedT, etc.)
507
477
  if (node.id.type === 'ObjectPattern') {
508
478
  for (const prop of node.id.properties) {
509
479
  if (prop.type === 'AssignmentPatternProperty' && prop.key.type === 'Identifier') {
510
- this.setVarInScope(prop.key.value, { defaultNs, keyPrefix });
480
+ this.setVarInScope(prop.key.value, info);
511
481
  }
512
482
  if (prop.type === 'KeyValuePatternProperty' && prop.value.type === 'Identifier') {
513
- this.setVarInScope(prop.value.value, { defaultNs, keyPrefix });
483
+ this.setVarInScope(prop.value.value, info);
514
484
  }
515
485
  }
516
486
  }
517
487
  else if (node.id.type === 'Identifier') {
518
- this.setVarInScope(node.id.value, { defaultNs, keyPrefix });
488
+ this.setVarInScope(node.id.value, info);
519
489
  }
520
490
  else if (node.id.type === 'ArrayPattern') {
521
491
  const firstElement = node.id.elements[0];
522
492
  if (firstElement?.type === 'Identifier') {
523
- this.setVarInScope(firstElement.value, { defaultNs, keyPrefix });
493
+ this.setVarInScope(firstElement.value, info);
524
494
  }
525
495
  }
526
496
  }
@@ -556,6 +526,51 @@ class ScopeManager {
556
526
  * without interpolation. Returns undefined when the expression cannot be
557
527
  * resolved statically.
558
528
  */
529
+ /**
530
+ * Resolve the `ns` argument of useTranslation to `{ defaultNs, namespaces }`.
531
+ *
532
+ * - String literal / identifier / member-expr → single `defaultNs`, no array.
533
+ * - Array expression → first element becomes `defaultNs`, every statically
534
+ * resolvable element ends up in `namespaces` (preserving order).
535
+ *
536
+ * `namespaces` is only set when the input was an array form, so consumers can
537
+ * distinguish `useTranslation('a')` (single, `namespaces` undefined) from
538
+ * `useTranslation(['a'])` (single-element array, `namespaces = ['a']`).
539
+ * The runtime selector rule from v25.8.19 only applies when length > 1, so
540
+ * either single form behaves identically downstream.
541
+ */
542
+ resolveNsArg(nsNode) {
543
+ if (!nsNode)
544
+ return {};
545
+ if (nsNode.type === 'StringLiteral')
546
+ return { defaultNs: nsNode.value };
547
+ if (nsNode.type === 'Identifier')
548
+ return { defaultNs: this.resolveSimpleStringIdentifier(nsNode.value) };
549
+ if (nsNode.type === 'MemberExpression')
550
+ return { defaultNs: this.resolveSimpleMemberExpression(nsNode) };
551
+ if (nsNode.type === 'ArrayExpression') {
552
+ const namespaces = [];
553
+ for (const el of nsNode.elements) {
554
+ const expr = el?.expression;
555
+ if (!expr)
556
+ continue;
557
+ if (expr.type === 'StringLiteral')
558
+ namespaces.push(expr.value);
559
+ else if (expr.type === 'Identifier') {
560
+ const resolved = this.resolveSimpleStringIdentifier(expr.value);
561
+ if (resolved !== undefined)
562
+ namespaces.push(resolved);
563
+ }
564
+ else if (expr.type === 'MemberExpression') {
565
+ const resolved = this.resolveSimpleMemberExpression(expr);
566
+ if (resolved !== undefined)
567
+ namespaces.push(resolved);
568
+ }
569
+ }
570
+ return { defaultNs: namespaces[0], namespaces: namespaces.length > 0 ? namespaces : undefined };
571
+ }
572
+ return {};
573
+ }
559
574
  resolveStringArg(node) {
560
575
  if (!node)
561
576
  return undefined;
@@ -833,6 +833,7 @@ function findHardcodedStrings(ast, code, config) {
833
833
  issues.push({
834
834
  text: node.value.trim(),
835
835
  line: getLineNumber(position),
836
+ type: 'hardcoded',
836
837
  });
837
838
  lastSearchIndex = position + searchText.length;
838
839
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "i18next-cli",
3
- "version": "1.56.9",
3
+ "version": "1.56.11",
4
4
  "description": "A unified, high-performance i18next CLI.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -85,7 +85,7 @@
85
85
  "minimatch": "^10.2.5",
86
86
  "ora": "^9.3.0",
87
87
  "react": "^19.2.5",
88
- "react-i18next": "^17.0.6",
88
+ "react-i18next": "^17.0.7",
89
89
  "yaml": "^2.8.3"
90
90
  }
91
91
  }
@@ -49,6 +49,24 @@ export declare class CallExpressionHandler {
49
49
  * @returns An object containing the keys to process and a flag indicating if the selector API is used
50
50
  */
51
51
  private handleCallExpressionArgument;
52
+ /**
53
+ * Mirror i18next v25.8.19's runtime selector rule: when the hook was called
54
+ * with a multi-element namespace array (e.g. `useTranslation(['nsA', 'nsB'])`)
55
+ * and a selector path's first segment matches a *secondary* namespace,
56
+ * rewrite the joined key to `ns<nsSeparator>rest` so the downstream
57
+ * extractor's standard `ns:key` split routes the key to the right file.
58
+ *
59
+ * The primary namespace is intentionally never rewritten — its keys are
60
+ * exposed flat on `$`, so a leading segment matching the primary name means
61
+ * a literal sub-key (see #2405). This matches the runtime behavior in
62
+ * i18next/src/selector.js exactly.
63
+ *
64
+ * Falls through to the input string when:
65
+ * - the call had no selector (string keys go through this path unchanged),
66
+ * - scope has < 2 namespaces, or
67
+ * - first segment is the primary or not in the scope's namespaces list.
68
+ */
69
+ private applySelectorNsRewrite;
52
70
  /**
53
71
  * Extracts translation key(s) from selector API arrow function.
54
72
  *
@@ -1 +1 @@
1
- {"version":3,"file":"call-expression-handler.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/call-expression-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA6C,MAAM,WAAW,CAAA;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,EAAgB,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAa7D,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,kBAAkB,CAAoB;IACvC,UAAU,cAAoB;IACrC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,iBAAiB,CAAsC;gBAG7D,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,MAAM,MAAM,EAC5B,cAAc,EAAE,MAAM,MAAM,EAC5B,iBAAiB,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAA2B;IAW3E;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,GAAG,IAAI;IA4ZxG;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,wBAAwB;IAyEhC;;;;;;OAMG;IACH,OAAO,CAAC,4BAA4B;IA8BpC;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;;;;;;;OAQG;IACH,OAAO,CAAC,iCAAiC;IAwFzC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,gBAAgB;IAyMxB;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;CA2BxB"}
1
+ {"version":3,"file":"call-expression-handler.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/call-expression-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA6C,MAAM,WAAW,CAAA;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,EAAgB,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAa7D,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,kBAAkB,CAAoB;IACvC,UAAU,cAAoB;IACrC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,iBAAiB,CAAsC;gBAG7D,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,MAAM,MAAM,EAC5B,cAAc,EAAE,MAAM,MAAM,EAC5B,iBAAiB,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAA2B;IAW3E;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,GAAG,IAAI;IAgaxG;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,wBAAwB;IAyEhC;;;;;;OAMG;IACH,OAAO,CAAC,4BAA4B;IAsDpC;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;;;;;;;OAQG;IACH,OAAO,CAAC,iCAAiC;IAwFzC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,gBAAgB;IAyMxB;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;CA2BxB"}
@@ -147,6 +147,20 @@ export declare class ScopeManager {
147
147
  * without interpolation. Returns undefined when the expression cannot be
148
148
  * resolved statically.
149
149
  */
150
+ /**
151
+ * Resolve the `ns` argument of useTranslation to `{ defaultNs, namespaces }`.
152
+ *
153
+ * - String literal / identifier / member-expr → single `defaultNs`, no array.
154
+ * - Array expression → first element becomes `defaultNs`, every statically
155
+ * resolvable element ends up in `namespaces` (preserving order).
156
+ *
157
+ * `namespaces` is only set when the input was an array form, so consumers can
158
+ * distinguish `useTranslation('a')` (single, `namespaces` undefined) from
159
+ * `useTranslation(['a'])` (single-element array, `namespaces = ['a']`).
160
+ * The runtime selector rule from v25.8.19 only applies when length > 1, so
161
+ * either single form behaves identically downstream.
162
+ */
163
+ private resolveNsArg;
150
164
  private resolveStringArg;
151
165
  /**
152
166
  * Handles cases where a getFixedT-like function is a variable (from a custom hook)
@@ -1 +1 @@
1
- {"version":3,"file":"scope-manager.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/scope-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAEV,kBAAkB,EAMnB,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EAAE,SAAS,EAA4B,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAG/F,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,KAAK,CAAqE;IAMlF,OAAO,CAAC,cAAc,CAAoC;IAG1D,OAAO,CAAC,eAAe,CAAiC;IAGxD,OAAO,CAAC,qBAAqB,CAAiD;IAI9E,OAAO,CAAC,eAAe,CAAiC;IACxD,OAAO,CAAC,qBAAqB,CAAiD;gBAEjE,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC;IAI1D;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAcjC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,+BAA+B;IAgB9C;;;;;;OAMG;IACI,KAAK,IAAK,IAAI;IAQrB;;;;OAIG;IACH,eAAe,IAAK,IAAI;IAIxB;;;OAGG;IACH,cAAc,IAAK,IAAI;IAIvB;;;;;;;OAOG;IACH,YAAY,CAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAMvD;;;;;OAKG;IACH,YAAY,CAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IASvD;;;OAGG;IACH,UAAU,IAAK,IAAI;IAInB;;;OAGG;IACH,SAAS,IAAK,IAAI;IAIlB;;;;;;OAMG;IACH,aAAa,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAUnD;;;;;;OAMG;IACH,eAAe,CAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAkBrD,OAAO,CAAC,uBAAuB;IAoB/B;;OAEG;IACI,6BAA6B,CAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvE;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAqBrC;;;;;;;;;;OAUG;IACH,wBAAwB,CAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI;IAsGzD;;;;;;;;OAQG;IACH,OAAO,CAAC,+BAA+B;IA0GvC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,8BAA8B;IAmFtC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,yBAAyB;IAiBjC;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAexB;;;;;;;;;OASG;IACH,OAAO,CAAC,qCAAqC;IAqB7C;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAgBnC;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAyBrC;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;IAwBlF;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;CA+DrC"}
1
+ {"version":3,"file":"scope-manager.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/scope-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAEV,kBAAkB,EAMnB,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EAAE,SAAS,EAA4B,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAG/F,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,KAAK,CAAqE;IAMlF,OAAO,CAAC,cAAc,CAAoC;IAG1D,OAAO,CAAC,eAAe,CAAiC;IAGxD,OAAO,CAAC,qBAAqB,CAAiD;IAI9E,OAAO,CAAC,eAAe,CAAiC;IACxD,OAAO,CAAC,qBAAqB,CAAiD;gBAEjE,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC;IAI1D;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAcjC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,+BAA+B;IAgB9C;;;;;;OAMG;IACI,KAAK,IAAK,IAAI;IAQrB;;;;OAIG;IACH,eAAe,IAAK,IAAI;IAIxB;;;OAGG;IACH,cAAc,IAAK,IAAI;IAIvB;;;;;;;OAOG;IACH,YAAY,CAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAMvD;;;;;OAKG;IACH,YAAY,CAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IASvD;;;OAGG;IACH,UAAU,IAAK,IAAI;IAInB;;;OAGG;IACH,SAAS,IAAK,IAAI;IAIlB;;;;;;OAMG;IACH,aAAa,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAUnD;;;;;;OAMG;IACH,eAAe,CAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAkBrD,OAAO,CAAC,uBAAuB;IAoB/B;;OAEG;IACI,6BAA6B,CAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvE;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAqBrC;;;;;;;;;;OAUG;IACH,wBAAwB,CAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI;IAsGzD;;;;;;;;OAQG;IACH,OAAO,CAAC,+BAA+B;IA8FvC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,8BAA8B;IA0EtC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,yBAAyB;IAiBjC;;;;;;OAMG;IACH;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,gBAAgB;IAexB;;;;;;;;;OASG;IACH,OAAO,CAAC,qCAAqC;IAqB7C;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAgBnC;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAyBrC;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;IAwBlF;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;CA+DrC"}
package/types/types.d.ts CHANGED
@@ -678,6 +678,17 @@ export interface PluginContext {
678
678
  export interface ScopeInfo {
679
679
  /** Default namespace for translation calls in this scope */
680
680
  defaultNs?: string;
681
+ /**
682
+ * Full namespace list when the hook was called with an array
683
+ * (e.g. `useTranslation(['nsA', 'nsB'])`).
684
+ *
685
+ * Mirrors the runtime selector rule from i18next v25.8.19: when a selector
686
+ * path's first segment matches a secondary namespace in this list, the
687
+ * extractor rewrites the key to `ns:rest` so it routes to the right file.
688
+ * `defaultNs` is the primary (`namespaces[0]`); subsequent entries are
689
+ * "secondary" and eligible for the rewrite.
690
+ */
691
+ namespaces?: string[];
681
692
  /** Key prefix to prepend to all translation keys in this scope */
682
693
  keyPrefix?: string;
683
694
  }
@@ -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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"}