i18next-cli 1.67.6 → 1.67.8

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
@@ -451,6 +451,21 @@ The instrumenter uses confidence heuristics to avoid transforming:
451
451
  - HTML attribute values that appear technical
452
452
  - Template literals with only expressions (no static text)
453
453
  - Strings already inside `t()` calls or `<Trans>` components
454
+ - **Module-scope strings** — anything outside a function body, e.g. a top-level config/registry array:
455
+ ```ts
456
+ export const SETTINGS_SECTIONS = [
457
+ { id: 'appearance', label: 'Appearance' }, // left untouched
458
+ ]
459
+ ```
460
+ A `t()` call there would be evaluated once, when the module is first imported — possibly before i18next
461
+ is initialized, and never again when the language changes. Move the text into a component, or expose the
462
+ registry as a hook that calls `useTranslation()` internally:
463
+ ```ts
464
+ export const useSettingsSections = () => {
465
+ const { t } = useTranslation()
466
+ return [{ id: 'appearance', label: t('appearance', 'Appearance') }]
467
+ }
468
+ ```
454
469
 
455
470
  **Auto-injection:**
456
471
 
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.67.6'); // This string is replaced with the actual version at build time by rollup
40
+ .version('1.67.8'); // 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
@@ -175,6 +175,7 @@ class ASTVisitors {
175
175
  let isNewClassScope = false;
176
176
  let paramTemporaries;
177
177
  let paramObjectTemporaries;
178
+ let paramArrayTemporaries;
178
179
  // ENTER CLASS SCOPE for class declarations / expressions and pre-register
179
180
  // class field initializers so that later `this.<field>` references inside
180
181
  // method bodies can inherit the namespace/keyPrefix from the field.
@@ -409,6 +410,17 @@ class ASTVisitors {
409
410
  paramObjectTemporaries = [];
410
411
  paramObjectTemporaries.push(paramKey);
411
412
  }
413
+ else {
414
+ // Array-of-object param (`items: IProps[]`) so the callback
415
+ // parameter of `items.map(...)` can be bound to the element type.
416
+ const elementMembers = this.expressionResolver.resolveArrayElementMembers(typeAnn);
417
+ if (elementMembers) {
418
+ this.expressionResolver.setArrayElementMembers(paramKey, elementMembers);
419
+ if (!paramArrayTemporaries)
420
+ paramArrayTemporaries = [];
421
+ paramArrayTemporaries.push(paramKey);
422
+ }
423
+ }
412
424
  }
413
425
  }
414
426
  }
@@ -473,6 +485,11 @@ class ASTVisitors {
473
485
  this.expressionResolver.setTemporaryVariable(info.paramName, info.values);
474
486
  arrayCallbackCleanup = () => this.expressionResolver.deleteTemporaryVariable(info.paramName);
475
487
  }
488
+ else {
489
+ // `items.map(({ size }) => ...)` / `items.map(item => ...t(`${item.size}`))`
490
+ // where `items` is typed as an array of an object shape.
491
+ arrayCallbackCleanup = this.tryBindObjectArrayCallback(node);
492
+ }
476
493
  }
477
494
  // --- RECURSION ---
478
495
  // Recurse into the children of the current node
@@ -621,6 +638,11 @@ class ASTVisitors {
621
638
  this.expressionResolver.deleteTemporaryObjectVariable(name);
622
639
  }
623
640
  }
641
+ if (paramArrayTemporaries) {
642
+ for (const name of paramArrayTemporaries) {
643
+ this.expressionResolver.deleteArrayElementMembers(name);
644
+ }
645
+ }
624
646
  this.scopeManager.exitScope();
625
647
  }
626
648
  // LEAVE CLASS SCOPE for classes
@@ -687,6 +709,66 @@ class ASTVisitors {
687
709
  return undefined;
688
710
  }
689
711
  }
712
+ /**
713
+ * If `node` is `items.map(cb)` (or forEach/flatMap/…) where `items` is typed
714
+ * as an array of an object shape (`items: IProps[]`), binds the callback
715
+ * parameter to the element type for the duration of the callback body:
716
+ *
717
+ * items.map(({ size }) => t(`some|${size}`)) → `size` bound to the union
718
+ * items.map(item => t(`some|${item.size}`)) → `item` bound to the members
719
+ *
720
+ * Returns a cleanup function, or undefined when nothing was bound.
721
+ */
722
+ tryBindObjectArrayCallback(node) {
723
+ try {
724
+ const callee = node.callee;
725
+ if (callee?.type !== 'MemberExpression')
726
+ return undefined;
727
+ const prop = callee.property;
728
+ if (prop?.type !== 'Identifier')
729
+ return undefined;
730
+ if (!['map', 'forEach', 'flatMap', 'filter', 'find', 'some', 'every'].includes(prop.value))
731
+ return undefined;
732
+ if (callee.object?.type !== 'Identifier')
733
+ return undefined;
734
+ const members = this.expressionResolver.getArrayElementMembers(callee.object.value);
735
+ if (!members)
736
+ return undefined;
737
+ const callbackArg = node.arguments?.[0]?.expression;
738
+ const params = callbackArg?.params ?? callbackArg?.parameters ?? [];
739
+ const firstParam = params[0];
740
+ if (!firstParam)
741
+ return undefined;
742
+ const pat = firstParam.pat ?? firstParam.pattern ?? firstParam;
743
+ // Destructured element: `({ size }) => …` / `({ size: s }) => …`
744
+ if (pat.type === 'ObjectPattern') {
745
+ const bound = [];
746
+ for (const patProp of (pat.properties ?? [])) {
747
+ const memberName = patProp?.key?.value;
748
+ let localNode = patProp?.type === 'KeyValuePatternProperty' ? patProp.value : patProp?.key;
749
+ if (localNode?.type === 'AssignmentPattern')
750
+ localNode = localNode.left;
751
+ const localName = localNode?.type === 'Identifier' ? localNode.value : undefined;
752
+ if (!memberName || !localName || !members[memberName])
753
+ continue;
754
+ this.expressionResolver.setTemporaryVariable(localName, members[memberName]);
755
+ bound.push(localName);
756
+ }
757
+ if (bound.length === 0)
758
+ return undefined;
759
+ return () => bound.forEach(name => this.expressionResolver.deleteTemporaryVariable(name));
760
+ }
761
+ // Whole element: `item => …` so `item.size` resolves
762
+ if (pat.type === 'Identifier') {
763
+ this.expressionResolver.setTemporaryObjectVariable(pat.value, members);
764
+ return () => this.expressionResolver.deleteTemporaryObjectVariable(pat.value);
765
+ }
766
+ return undefined;
767
+ }
768
+ catch {
769
+ return undefined;
770
+ }
771
+ }
690
772
  /**
691
773
  * Extracts the first callback parameter identifier from an iteration call node
692
774
  * and pairs it with the provided values array.
@@ -95,61 +95,52 @@ function sortObject(obj, config, customSort) {
95
95
  const pluralSeparator = config?.extract?.pluralSeparator ?? '_';
96
96
  // Define the canonical order for plural forms
97
97
  const ordinalPluralOrder = pluralForms.map(form => `ordinal${pluralSeparator}${form}`);
98
- const keys = Object.keys(obj).sort((a, b) => {
99
- // Helper function to extract base key and form info
100
- const getKeyInfo = (key) => {
101
- // Handle ordinal plurals: key_ordinal_form or key_context_ordinal_form
102
- for (const form of ordinalPluralOrder) {
103
- if (key.endsWith(`${pluralSeparator}${form}`)) {
104
- const base = key.slice(0, -(pluralSeparator.length + form.length));
105
- return { base, form, isOrdinal: true, isPlural: true, fullKey: key };
106
- }
107
- }
108
- // Handle cardinal plurals: key_form or key_context_form
109
- for (const form of pluralForms) {
110
- if (key.endsWith(`${pluralSeparator}${form}`)) {
111
- const base = key.slice(0, -(pluralSeparator.length + form.length));
112
- return { base, form, isOrdinal: false, isPlural: true, fullKey: key };
113
- }
114
- }
115
- return { base: key, form: '', isOrdinal: false, isPlural: false, fullKey: key };
116
- };
117
- const aInfo = getKeyInfo(a);
118
- const bInfo = getKeyInfo(b);
119
- // If both are plural forms
120
- if (aInfo.isPlural && bInfo.isPlural) {
121
- // First compare by base key
122
- const baseComparison = customSort
123
- ? customSort(aInfo.base, bInfo.base)
124
- : aInfo.base.localeCompare(bInfo.base, undefined, { sensitivity: 'base' });
125
- if (baseComparison !== 0) {
126
- return baseComparison;
98
+ // Helper function to extract base key and its rank within that base.
99
+ // Rank orders the variants of one base key: the plain key first, then the
100
+ // cardinal plural forms in canonical order, then the ordinal ones.
101
+ const getKeyInfo = (key) => {
102
+ // Handle ordinal plurals: key_ordinal_form or key_context_ordinal_form
103
+ for (const form of ordinalPluralOrder) {
104
+ if (key.endsWith(`${pluralSeparator}${form}`)) {
105
+ const base = key.slice(0, -(pluralSeparator.length + form.length));
106
+ return { base, rank: pluralForms.length + ordinalPluralOrder.indexOf(form) };
127
107
  }
128
- // Same base key - now sort by plural form order
129
- // Ordinal forms come after cardinal forms
130
- if (aInfo.isOrdinal !== bInfo.isOrdinal) {
131
- return aInfo.isOrdinal ? 1 : -1;
132
- }
133
- // Both same type (cardinal or ordinal), sort by canonical order
134
- const orderArray = aInfo.isOrdinal ? ordinalPluralOrder : pluralForms;
135
- const aIndex = orderArray.indexOf(aInfo.form);
136
- const bIndex = orderArray.indexOf(bInfo.form);
137
- if (aIndex !== -1 && bIndex !== -1) {
138
- return aIndex - bIndex;
108
+ }
109
+ // Handle cardinal plurals: key_form or key_context_form
110
+ for (const form of pluralForms) {
111
+ if (key.endsWith(`${pluralSeparator}${form}`)) {
112
+ const base = key.slice(0, -(pluralSeparator.length + form.length));
113
+ return { base, rank: pluralForms.indexOf(form) };
139
114
  }
140
- // Fallback to alphabetical if forms not found in order array
141
- return aInfo.form.localeCompare(bInfo.form);
142
115
  }
143
- // Use custom sort if provided, otherwise default sorting
144
- if (customSort) {
116
+ return { base: key, rank: -1 };
117
+ };
118
+ const compareKeys = (a, b) => {
119
+ if (customSort)
145
120
  return customSort(a, b);
146
- }
147
121
  // Default: case-insensitive, then by case
148
122
  const caseInsensitiveComparison = a.localeCompare(b, undefined, { sensitivity: 'base' });
149
123
  if (caseInsensitiveComparison === 0) {
150
124
  return a.localeCompare(b, undefined, { sensitivity: 'case' });
151
125
  }
152
126
  return caseInsensitiveComparison;
127
+ };
128
+ const keys = Object.keys(obj).sort((a, b) => {
129
+ const aInfo = getKeyInfo(a);
130
+ const bInfo = getKeyInfo(b);
131
+ // Always compare by base key first. Comparing base keys for plural/plural
132
+ // pairs but full keys for every other pair made the comparator
133
+ // intransitive, so the result depended on the input order and `extract`
134
+ // was not idempotent (#279).
135
+ if (aInfo.base !== bInfo.base) {
136
+ const baseComparison = compareKeys(aInfo.base, bInfo.base);
137
+ if (baseComparison !== 0)
138
+ return baseComparison;
139
+ }
140
+ // Same base key: plain key, cardinal plurals, then ordinal plurals
141
+ if (aInfo.rank !== bInfo.rank)
142
+ return aInfo.rank - bInfo.rank;
143
+ return compareKeys(a, b);
153
144
  });
154
145
  for (const key of keys) {
155
146
  sortedObj[key] = sortObject(obj[key], config, customSort);
@@ -33,6 +33,10 @@ class ExpressionResolver {
33
33
  // Temporary per-scope bindings for identifiers holding an object-shaped type,
34
34
  // e.g. `function f(props: IProps)` -> { props: { size: ['all','next'] } }.
35
35
  temporaryObjectVariables = new Map();
36
+ // Identifiers holding an array of an object-shaped type, e.g.
37
+ // `items: IProps[]` -> { items: { size: ['all','next'] } }, so that the
38
+ // callback parameter of `items.map(...)` can be bound to the element type.
39
+ arrayElementMembers = new Map();
36
40
  constructor(hooks) {
37
41
  this.hooks = hooks;
38
42
  }
@@ -43,6 +47,7 @@ class ExpressionResolver {
43
47
  this.variableTable.clear();
44
48
  this.typeAliasTable.clear();
45
49
  this.temporaryVariables.clear();
50
+ this.arrayElementMembers.clear();
46
51
  }
47
52
  /**
48
53
  * Capture a VariableDeclarator node to record simple statically analyzable
@@ -97,6 +102,14 @@ class ExpressionResolver {
97
102
  if (node.id.type !== 'Identifier')
98
103
  return;
99
104
  const name = node.id.value;
105
+ // `const items: IProps[] = …` → remember the element's member map so
106
+ // `items.map(({ size }) => …)` can bind the callback parameter.
107
+ const idTypeAnnotation = this.extractTypeAnnotation(node.id);
108
+ if (idTypeAnnotation) {
109
+ const elementMembers = this.resolveArrayElementMembers(idTypeAnnotation);
110
+ if (elementMembers)
111
+ this.arrayElementMembers.set(name, elementMembers);
112
+ }
100
113
  // pattern 1:
101
114
  // Handle `declare const x: 'a' | 'b'` and `declare const x: SomeUnion`
102
115
  // where there is no initializer but a TypeScript type annotation.
@@ -301,6 +314,42 @@ class ExpressionResolver {
301
314
  catch { }
302
315
  return undefined;
303
316
  }
317
+ /**
318
+ * Resolve a type annotation for an array of an object shape (`IProps[]`,
319
+ * `Array<IProps>`, `ReadonlyArray<IProps>`) to the element's member map, so
320
+ * that `items.map(({ size }) => …)` can bind the callback parameter.
321
+ */
322
+ resolveArrayElementMembers(tsType) {
323
+ try {
324
+ if (!tsType)
325
+ return undefined;
326
+ if (tsType.type === 'TsArrayType') {
327
+ return this.resolveTypeMembers(tsType.elemType);
328
+ }
329
+ if (tsType.type === 'TsTypeReference' && tsType.typeName?.type === 'Identifier') {
330
+ const name = tsType.typeName.value;
331
+ if (name !== 'Array' && name !== 'ReadonlyArray')
332
+ return undefined;
333
+ const arg = tsType.typeParams?.params?.[0] ?? tsType.typeArguments?.params?.[0];
334
+ return this.resolveTypeMembers(arg);
335
+ }
336
+ }
337
+ catch { }
338
+ return undefined;
339
+ }
340
+ /**
341
+ * Bind an identifier to the member map of its array element type
342
+ * (`items: IProps[]`).
343
+ */
344
+ setArrayElementMembers(name, members) {
345
+ this.arrayElementMembers.set(name, members);
346
+ }
347
+ getArrayElementMembers(name) {
348
+ return this.arrayElementMembers.get(name);
349
+ }
350
+ deleteArrayElementMembers(name) {
351
+ this.arrayElementMembers.delete(name);
352
+ }
304
353
  /**
305
354
  * Temporarily bind an identifier to an object-shaped type's members, so that
306
355
  * `props.size` inside the function body resolves to the member's values.
@@ -79,6 +79,14 @@ async function runInstrumenter(config, options, logger$1 = new logger.ConsoleLog
79
79
  const { components, languageChangeSites } = scanResult;
80
80
  // Run instrumentOnResult plugin pipeline
81
81
  candidates = await runInstrumentOnResultPipeline(file, candidates, plugins, logger$1);
82
+ if (scanResult.moduleScopeSkipped > 0) {
83
+ totalCandidates += scanResult.moduleScopeSkipped;
84
+ totalSkipped += scanResult.moduleScopeSkipped;
85
+ logger$1.warn(`${file}: skipped ${scanResult.moduleScopeSkipped} module-scope string(s). ` +
86
+ 'A t() call there runs once at import time — before i18next may be initialized — and never updates on language change. ' +
87
+ 'Move the text into a component/hook (e.g. a useSections() hook calling useTranslation()), or read the key at render time. ' +
88
+ 'See: https://www.locize.com/blog/how-to-use-i18next-t-outside-react-components/');
89
+ }
82
90
  if (candidates.length === 0 && languageChangeSites.length === 0) {
83
91
  continue;
84
92
  }
@@ -217,6 +225,7 @@ async function scanFileForCandidates(content, file, config) {
217
225
  const candidates = [];
218
226
  const components = [];
219
227
  const languageChangeSites = [];
228
+ let moduleScopeSkipped = 0;
220
229
  const fileExt = node_path.extname(file).toLowerCase();
221
230
  const isTypeScriptFile = ['.ts', '.tsx', '.mts', '.cts'].includes(fileExt);
222
231
  const isTSX = fileExt === '.tsx';
@@ -265,6 +274,9 @@ async function scanFileForCandidates(content, file, config) {
265
274
  astUtils.normalizeSpansToCharIndices(ast, content);
266
275
  // Detect React function component boundaries
267
276
  detectComponentBoundaries(ast, content, components);
277
+ // Collect function spans so module-scope strings can be excluded below
278
+ const functionSpans = [];
279
+ collectFunctionSpans(ast, functionSpans);
268
280
  // Visit AST to find string literals
269
281
  visitNodeForStrings(ast, content, file, config, candidates);
270
282
  // Detect JSX interpolation patterns (merge adjacent text + expression children)
@@ -282,6 +294,16 @@ async function scanFileForCandidates(content, file, config) {
282
294
  }
283
295
  }
284
296
  }
297
+ // Drop module-scope candidates: wrapping them yields a t() call evaluated
298
+ // once at import time — possibly before i18next is initialized, and never
299
+ // re-evaluated on language change. See issue #278.
300
+ const moduleScoped = candidates.filter(c => !functionSpans.some(span => c.offset >= span.start && c.endOffset <= span.end));
301
+ if (moduleScoped.length > 0) {
302
+ moduleScopeSkipped = moduleScoped.length;
303
+ const keep = candidates.filter(c => !moduleScoped.includes(c));
304
+ candidates.length = 0;
305
+ candidates.push(...keep);
306
+ }
285
307
  // Annotate language change sites with their enclosing component (if any)
286
308
  for (const site of languageChangeSites) {
287
309
  for (const comp of components) {
@@ -315,7 +337,45 @@ async function scanFileForCandidates(content, file, config) {
315
337
  catch (err) {
316
338
  // Silently skip files that can't be parsed
317
339
  }
318
- return { candidates, components, languageChangeSites };
340
+ return { candidates, components, languageChangeSites, moduleScopeSkipped };
341
+ }
342
+ /**
343
+ * Node types whose span delimits deferred (call-time) evaluation. A string
344
+ * outside all of them is evaluated when the module is first imported.
345
+ */
346
+ const FUNCTION_NODE_TYPES = new Set([
347
+ 'FunctionDeclaration',
348
+ 'FunctionExpression',
349
+ 'ArrowFunctionExpression',
350
+ 'ClassMethod',
351
+ 'PrivateMethod',
352
+ 'MethodProperty',
353
+ 'GetterProperty',
354
+ 'SetterProperty',
355
+ 'Constructor'
356
+ ]);
357
+ /**
358
+ * Recursively collects the spans of every function-like node in the AST.
359
+ */
360
+ function collectFunctionSpans(node, spans) {
361
+ if (!node || typeof node !== 'object')
362
+ return;
363
+ if (FUNCTION_NODE_TYPES.has(node.type) && node.span) {
364
+ spans.push({ start: node.span.start, end: node.span.end });
365
+ // No need to recurse: nested functions are inside this span already.
366
+ return;
367
+ }
368
+ for (const key in node) {
369
+ const value = node[key];
370
+ if (value && typeof value === 'object') {
371
+ if (Array.isArray(value)) {
372
+ value.forEach(item => collectFunctionSpans(item, spans));
373
+ }
374
+ else {
375
+ collectFunctionSpans(value, spans);
376
+ }
377
+ }
378
+ }
319
379
  }
320
380
  /**
321
381
  * Returns the 1-based line number for a character offset.
@@ -344,6 +344,9 @@ function addImportStatements(s, content, needs) {
344
344
  // Skip past this statement so we don't match `import` lines inside it.
345
345
  importStartRegex.lastIndex = endOfImport;
346
346
  }
347
+ // Last import may end at EOF without a trailing newline
348
+ if (insertPos > 0 && content[insertPos - 1] !== '\n')
349
+ importStatement = `\n${importStatement}`;
347
350
  s.appendRight(insertPos, importStatement);
348
351
  }
349
352
  /**
@@ -383,7 +386,12 @@ function findImportStatementEnd(content, start) {
383
386
  continue;
384
387
  }
385
388
  if (depth === 0 && sawString && (ch === '\n' || ch === ';')) {
386
- return i + 1;
389
+ if (ch === '\n')
390
+ return i + 1;
391
+ // Terminated by `;` — consume the rest of the line so the next statement
392
+ // is inserted on its own line rather than appended after the semicolon.
393
+ const newlinePos = content.indexOf('\n', i);
394
+ return newlinePos === -1 ? content.length : newlinePos + 1;
387
395
  }
388
396
  }
389
397
  return content.length;
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.67.6'); // This string is replaced with the actual version at build time by rollup
34
+ .version('1.67.8'); // 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
@@ -173,6 +173,7 @@ class ASTVisitors {
173
173
  let isNewClassScope = false;
174
174
  let paramTemporaries;
175
175
  let paramObjectTemporaries;
176
+ let paramArrayTemporaries;
176
177
  // ENTER CLASS SCOPE for class declarations / expressions and pre-register
177
178
  // class field initializers so that later `this.<field>` references inside
178
179
  // method bodies can inherit the namespace/keyPrefix from the field.
@@ -407,6 +408,17 @@ class ASTVisitors {
407
408
  paramObjectTemporaries = [];
408
409
  paramObjectTemporaries.push(paramKey);
409
410
  }
411
+ else {
412
+ // Array-of-object param (`items: IProps[]`) so the callback
413
+ // parameter of `items.map(...)` can be bound to the element type.
414
+ const elementMembers = this.expressionResolver.resolveArrayElementMembers(typeAnn);
415
+ if (elementMembers) {
416
+ this.expressionResolver.setArrayElementMembers(paramKey, elementMembers);
417
+ if (!paramArrayTemporaries)
418
+ paramArrayTemporaries = [];
419
+ paramArrayTemporaries.push(paramKey);
420
+ }
421
+ }
410
422
  }
411
423
  }
412
424
  }
@@ -471,6 +483,11 @@ class ASTVisitors {
471
483
  this.expressionResolver.setTemporaryVariable(info.paramName, info.values);
472
484
  arrayCallbackCleanup = () => this.expressionResolver.deleteTemporaryVariable(info.paramName);
473
485
  }
486
+ else {
487
+ // `items.map(({ size }) => ...)` / `items.map(item => ...t(`${item.size}`))`
488
+ // where `items` is typed as an array of an object shape.
489
+ arrayCallbackCleanup = this.tryBindObjectArrayCallback(node);
490
+ }
474
491
  }
475
492
  // --- RECURSION ---
476
493
  // Recurse into the children of the current node
@@ -619,6 +636,11 @@ class ASTVisitors {
619
636
  this.expressionResolver.deleteTemporaryObjectVariable(name);
620
637
  }
621
638
  }
639
+ if (paramArrayTemporaries) {
640
+ for (const name of paramArrayTemporaries) {
641
+ this.expressionResolver.deleteArrayElementMembers(name);
642
+ }
643
+ }
622
644
  this.scopeManager.exitScope();
623
645
  }
624
646
  // LEAVE CLASS SCOPE for classes
@@ -685,6 +707,66 @@ class ASTVisitors {
685
707
  return undefined;
686
708
  }
687
709
  }
710
+ /**
711
+ * If `node` is `items.map(cb)` (or forEach/flatMap/…) where `items` is typed
712
+ * as an array of an object shape (`items: IProps[]`), binds the callback
713
+ * parameter to the element type for the duration of the callback body:
714
+ *
715
+ * items.map(({ size }) => t(`some|${size}`)) → `size` bound to the union
716
+ * items.map(item => t(`some|${item.size}`)) → `item` bound to the members
717
+ *
718
+ * Returns a cleanup function, or undefined when nothing was bound.
719
+ */
720
+ tryBindObjectArrayCallback(node) {
721
+ try {
722
+ const callee = node.callee;
723
+ if (callee?.type !== 'MemberExpression')
724
+ return undefined;
725
+ const prop = callee.property;
726
+ if (prop?.type !== 'Identifier')
727
+ return undefined;
728
+ if (!['map', 'forEach', 'flatMap', 'filter', 'find', 'some', 'every'].includes(prop.value))
729
+ return undefined;
730
+ if (callee.object?.type !== 'Identifier')
731
+ return undefined;
732
+ const members = this.expressionResolver.getArrayElementMembers(callee.object.value);
733
+ if (!members)
734
+ return undefined;
735
+ const callbackArg = node.arguments?.[0]?.expression;
736
+ const params = callbackArg?.params ?? callbackArg?.parameters ?? [];
737
+ const firstParam = params[0];
738
+ if (!firstParam)
739
+ return undefined;
740
+ const pat = firstParam.pat ?? firstParam.pattern ?? firstParam;
741
+ // Destructured element: `({ size }) => …` / `({ size: s }) => …`
742
+ if (pat.type === 'ObjectPattern') {
743
+ const bound = [];
744
+ for (const patProp of (pat.properties ?? [])) {
745
+ const memberName = patProp?.key?.value;
746
+ let localNode = patProp?.type === 'KeyValuePatternProperty' ? patProp.value : patProp?.key;
747
+ if (localNode?.type === 'AssignmentPattern')
748
+ localNode = localNode.left;
749
+ const localName = localNode?.type === 'Identifier' ? localNode.value : undefined;
750
+ if (!memberName || !localName || !members[memberName])
751
+ continue;
752
+ this.expressionResolver.setTemporaryVariable(localName, members[memberName]);
753
+ bound.push(localName);
754
+ }
755
+ if (bound.length === 0)
756
+ return undefined;
757
+ return () => bound.forEach(name => this.expressionResolver.deleteTemporaryVariable(name));
758
+ }
759
+ // Whole element: `item => …` so `item.size` resolves
760
+ if (pat.type === 'Identifier') {
761
+ this.expressionResolver.setTemporaryObjectVariable(pat.value, members);
762
+ return () => this.expressionResolver.deleteTemporaryObjectVariable(pat.value);
763
+ }
764
+ return undefined;
765
+ }
766
+ catch {
767
+ return undefined;
768
+ }
769
+ }
688
770
  /**
689
771
  * Extracts the first callback parameter identifier from an iteration call node
690
772
  * and pairs it with the provided values array.
@@ -93,61 +93,52 @@ function sortObject(obj, config, customSort) {
93
93
  const pluralSeparator = config?.extract?.pluralSeparator ?? '_';
94
94
  // Define the canonical order for plural forms
95
95
  const ordinalPluralOrder = pluralForms.map(form => `ordinal${pluralSeparator}${form}`);
96
- const keys = Object.keys(obj).sort((a, b) => {
97
- // Helper function to extract base key and form info
98
- const getKeyInfo = (key) => {
99
- // Handle ordinal plurals: key_ordinal_form or key_context_ordinal_form
100
- for (const form of ordinalPluralOrder) {
101
- if (key.endsWith(`${pluralSeparator}${form}`)) {
102
- const base = key.slice(0, -(pluralSeparator.length + form.length));
103
- return { base, form, isOrdinal: true, isPlural: true, fullKey: key };
104
- }
105
- }
106
- // Handle cardinal plurals: key_form or key_context_form
107
- for (const form of pluralForms) {
108
- if (key.endsWith(`${pluralSeparator}${form}`)) {
109
- const base = key.slice(0, -(pluralSeparator.length + form.length));
110
- return { base, form, isOrdinal: false, isPlural: true, fullKey: key };
111
- }
112
- }
113
- return { base: key, form: '', isOrdinal: false, isPlural: false, fullKey: key };
114
- };
115
- const aInfo = getKeyInfo(a);
116
- const bInfo = getKeyInfo(b);
117
- // If both are plural forms
118
- if (aInfo.isPlural && bInfo.isPlural) {
119
- // First compare by base key
120
- const baseComparison = customSort
121
- ? customSort(aInfo.base, bInfo.base)
122
- : aInfo.base.localeCompare(bInfo.base, undefined, { sensitivity: 'base' });
123
- if (baseComparison !== 0) {
124
- return baseComparison;
96
+ // Helper function to extract base key and its rank within that base.
97
+ // Rank orders the variants of one base key: the plain key first, then the
98
+ // cardinal plural forms in canonical order, then the ordinal ones.
99
+ const getKeyInfo = (key) => {
100
+ // Handle ordinal plurals: key_ordinal_form or key_context_ordinal_form
101
+ for (const form of ordinalPluralOrder) {
102
+ if (key.endsWith(`${pluralSeparator}${form}`)) {
103
+ const base = key.slice(0, -(pluralSeparator.length + form.length));
104
+ return { base, rank: pluralForms.length + ordinalPluralOrder.indexOf(form) };
125
105
  }
126
- // Same base key - now sort by plural form order
127
- // Ordinal forms come after cardinal forms
128
- if (aInfo.isOrdinal !== bInfo.isOrdinal) {
129
- return aInfo.isOrdinal ? 1 : -1;
130
- }
131
- // Both same type (cardinal or ordinal), sort by canonical order
132
- const orderArray = aInfo.isOrdinal ? ordinalPluralOrder : pluralForms;
133
- const aIndex = orderArray.indexOf(aInfo.form);
134
- const bIndex = orderArray.indexOf(bInfo.form);
135
- if (aIndex !== -1 && bIndex !== -1) {
136
- return aIndex - bIndex;
106
+ }
107
+ // Handle cardinal plurals: key_form or key_context_form
108
+ for (const form of pluralForms) {
109
+ if (key.endsWith(`${pluralSeparator}${form}`)) {
110
+ const base = key.slice(0, -(pluralSeparator.length + form.length));
111
+ return { base, rank: pluralForms.indexOf(form) };
137
112
  }
138
- // Fallback to alphabetical if forms not found in order array
139
- return aInfo.form.localeCompare(bInfo.form);
140
113
  }
141
- // Use custom sort if provided, otherwise default sorting
142
- if (customSort) {
114
+ return { base: key, rank: -1 };
115
+ };
116
+ const compareKeys = (a, b) => {
117
+ if (customSort)
143
118
  return customSort(a, b);
144
- }
145
119
  // Default: case-insensitive, then by case
146
120
  const caseInsensitiveComparison = a.localeCompare(b, undefined, { sensitivity: 'base' });
147
121
  if (caseInsensitiveComparison === 0) {
148
122
  return a.localeCompare(b, undefined, { sensitivity: 'case' });
149
123
  }
150
124
  return caseInsensitiveComparison;
125
+ };
126
+ const keys = Object.keys(obj).sort((a, b) => {
127
+ const aInfo = getKeyInfo(a);
128
+ const bInfo = getKeyInfo(b);
129
+ // Always compare by base key first. Comparing base keys for plural/plural
130
+ // pairs but full keys for every other pair made the comparator
131
+ // intransitive, so the result depended on the input order and `extract`
132
+ // was not idempotent (#279).
133
+ if (aInfo.base !== bInfo.base) {
134
+ const baseComparison = compareKeys(aInfo.base, bInfo.base);
135
+ if (baseComparison !== 0)
136
+ return baseComparison;
137
+ }
138
+ // Same base key: plain key, cardinal plurals, then ordinal plurals
139
+ if (aInfo.rank !== bInfo.rank)
140
+ return aInfo.rank - bInfo.rank;
141
+ return compareKeys(a, b);
151
142
  });
152
143
  for (const key of keys) {
153
144
  sortedObj[key] = sortObject(obj[key], config, customSort);
@@ -31,6 +31,10 @@ class ExpressionResolver {
31
31
  // Temporary per-scope bindings for identifiers holding an object-shaped type,
32
32
  // e.g. `function f(props: IProps)` -> { props: { size: ['all','next'] } }.
33
33
  temporaryObjectVariables = new Map();
34
+ // Identifiers holding an array of an object-shaped type, e.g.
35
+ // `items: IProps[]` -> { items: { size: ['all','next'] } }, so that the
36
+ // callback parameter of `items.map(...)` can be bound to the element type.
37
+ arrayElementMembers = new Map();
34
38
  constructor(hooks) {
35
39
  this.hooks = hooks;
36
40
  }
@@ -41,6 +45,7 @@ class ExpressionResolver {
41
45
  this.variableTable.clear();
42
46
  this.typeAliasTable.clear();
43
47
  this.temporaryVariables.clear();
48
+ this.arrayElementMembers.clear();
44
49
  }
45
50
  /**
46
51
  * Capture a VariableDeclarator node to record simple statically analyzable
@@ -95,6 +100,14 @@ class ExpressionResolver {
95
100
  if (node.id.type !== 'Identifier')
96
101
  return;
97
102
  const name = node.id.value;
103
+ // `const items: IProps[] = …` → remember the element's member map so
104
+ // `items.map(({ size }) => …)` can bind the callback parameter.
105
+ const idTypeAnnotation = this.extractTypeAnnotation(node.id);
106
+ if (idTypeAnnotation) {
107
+ const elementMembers = this.resolveArrayElementMembers(idTypeAnnotation);
108
+ if (elementMembers)
109
+ this.arrayElementMembers.set(name, elementMembers);
110
+ }
98
111
  // pattern 1:
99
112
  // Handle `declare const x: 'a' | 'b'` and `declare const x: SomeUnion`
100
113
  // where there is no initializer but a TypeScript type annotation.
@@ -299,6 +312,42 @@ class ExpressionResolver {
299
312
  catch { }
300
313
  return undefined;
301
314
  }
315
+ /**
316
+ * Resolve a type annotation for an array of an object shape (`IProps[]`,
317
+ * `Array<IProps>`, `ReadonlyArray<IProps>`) to the element's member map, so
318
+ * that `items.map(({ size }) => …)` can bind the callback parameter.
319
+ */
320
+ resolveArrayElementMembers(tsType) {
321
+ try {
322
+ if (!tsType)
323
+ return undefined;
324
+ if (tsType.type === 'TsArrayType') {
325
+ return this.resolveTypeMembers(tsType.elemType);
326
+ }
327
+ if (tsType.type === 'TsTypeReference' && tsType.typeName?.type === 'Identifier') {
328
+ const name = tsType.typeName.value;
329
+ if (name !== 'Array' && name !== 'ReadonlyArray')
330
+ return undefined;
331
+ const arg = tsType.typeParams?.params?.[0] ?? tsType.typeArguments?.params?.[0];
332
+ return this.resolveTypeMembers(arg);
333
+ }
334
+ }
335
+ catch { }
336
+ return undefined;
337
+ }
338
+ /**
339
+ * Bind an identifier to the member map of its array element type
340
+ * (`items: IProps[]`).
341
+ */
342
+ setArrayElementMembers(name, members) {
343
+ this.arrayElementMembers.set(name, members);
344
+ }
345
+ getArrayElementMembers(name) {
346
+ return this.arrayElementMembers.get(name);
347
+ }
348
+ deleteArrayElementMembers(name) {
349
+ this.arrayElementMembers.delete(name);
350
+ }
302
351
  /**
303
352
  * Temporarily bind an identifier to an object-shaped type's members, so that
304
353
  * `props.size` inside the function body resolves to the member's values.
@@ -73,6 +73,14 @@ async function runInstrumenter(config, options, logger = new ConsoleLogger()) {
73
73
  const { components, languageChangeSites } = scanResult;
74
74
  // Run instrumentOnResult plugin pipeline
75
75
  candidates = await runInstrumentOnResultPipeline(file, candidates, plugins, logger);
76
+ if (scanResult.moduleScopeSkipped > 0) {
77
+ totalCandidates += scanResult.moduleScopeSkipped;
78
+ totalSkipped += scanResult.moduleScopeSkipped;
79
+ logger.warn(`${file}: skipped ${scanResult.moduleScopeSkipped} module-scope string(s). ` +
80
+ 'A t() call there runs once at import time — before i18next may be initialized — and never updates on language change. ' +
81
+ 'Move the text into a component/hook (e.g. a useSections() hook calling useTranslation()), or read the key at render time. ' +
82
+ 'See: https://www.locize.com/blog/how-to-use-i18next-t-outside-react-components/');
83
+ }
76
84
  if (candidates.length === 0 && languageChangeSites.length === 0) {
77
85
  continue;
78
86
  }
@@ -211,6 +219,7 @@ async function scanFileForCandidates(content, file, config) {
211
219
  const candidates = [];
212
220
  const components = [];
213
221
  const languageChangeSites = [];
222
+ let moduleScopeSkipped = 0;
214
223
  const fileExt = extname(file).toLowerCase();
215
224
  const isTypeScriptFile = ['.ts', '.tsx', '.mts', '.cts'].includes(fileExt);
216
225
  const isTSX = fileExt === '.tsx';
@@ -259,6 +268,9 @@ async function scanFileForCandidates(content, file, config) {
259
268
  normalizeSpansToCharIndices(ast, content);
260
269
  // Detect React function component boundaries
261
270
  detectComponentBoundaries(ast, content, components);
271
+ // Collect function spans so module-scope strings can be excluded below
272
+ const functionSpans = [];
273
+ collectFunctionSpans(ast, functionSpans);
262
274
  // Visit AST to find string literals
263
275
  visitNodeForStrings(ast, content, file, config, candidates);
264
276
  // Detect JSX interpolation patterns (merge adjacent text + expression children)
@@ -276,6 +288,16 @@ async function scanFileForCandidates(content, file, config) {
276
288
  }
277
289
  }
278
290
  }
291
+ // Drop module-scope candidates: wrapping them yields a t() call evaluated
292
+ // once at import time — possibly before i18next is initialized, and never
293
+ // re-evaluated on language change. See issue #278.
294
+ const moduleScoped = candidates.filter(c => !functionSpans.some(span => c.offset >= span.start && c.endOffset <= span.end));
295
+ if (moduleScoped.length > 0) {
296
+ moduleScopeSkipped = moduleScoped.length;
297
+ const keep = candidates.filter(c => !moduleScoped.includes(c));
298
+ candidates.length = 0;
299
+ candidates.push(...keep);
300
+ }
279
301
  // Annotate language change sites with their enclosing component (if any)
280
302
  for (const site of languageChangeSites) {
281
303
  for (const comp of components) {
@@ -309,7 +331,45 @@ async function scanFileForCandidates(content, file, config) {
309
331
  catch (err) {
310
332
  // Silently skip files that can't be parsed
311
333
  }
312
- return { candidates, components, languageChangeSites };
334
+ return { candidates, components, languageChangeSites, moduleScopeSkipped };
335
+ }
336
+ /**
337
+ * Node types whose span delimits deferred (call-time) evaluation. A string
338
+ * outside all of them is evaluated when the module is first imported.
339
+ */
340
+ const FUNCTION_NODE_TYPES = new Set([
341
+ 'FunctionDeclaration',
342
+ 'FunctionExpression',
343
+ 'ArrowFunctionExpression',
344
+ 'ClassMethod',
345
+ 'PrivateMethod',
346
+ 'MethodProperty',
347
+ 'GetterProperty',
348
+ 'SetterProperty',
349
+ 'Constructor'
350
+ ]);
351
+ /**
352
+ * Recursively collects the spans of every function-like node in the AST.
353
+ */
354
+ function collectFunctionSpans(node, spans) {
355
+ if (!node || typeof node !== 'object')
356
+ return;
357
+ if (FUNCTION_NODE_TYPES.has(node.type) && node.span) {
358
+ spans.push({ start: node.span.start, end: node.span.end });
359
+ // No need to recurse: nested functions are inside this span already.
360
+ return;
361
+ }
362
+ for (const key in node) {
363
+ const value = node[key];
364
+ if (value && typeof value === 'object') {
365
+ if (Array.isArray(value)) {
366
+ value.forEach(item => collectFunctionSpans(item, spans));
367
+ }
368
+ else {
369
+ collectFunctionSpans(value, spans);
370
+ }
371
+ }
372
+ }
313
373
  }
314
374
  /**
315
375
  * Returns the 1-based line number for a character offset.
@@ -338,6 +338,9 @@ function addImportStatements(s, content, needs) {
338
338
  // Skip past this statement so we don't match `import` lines inside it.
339
339
  importStartRegex.lastIndex = endOfImport;
340
340
  }
341
+ // Last import may end at EOF without a trailing newline
342
+ if (insertPos > 0 && content[insertPos - 1] !== '\n')
343
+ importStatement = `\n${importStatement}`;
341
344
  s.appendRight(insertPos, importStatement);
342
345
  }
343
346
  /**
@@ -377,7 +380,12 @@ function findImportStatementEnd(content, start) {
377
380
  continue;
378
381
  }
379
382
  if (depth === 0 && sawString && (ch === '\n' || ch === ';')) {
380
- return i + 1;
383
+ if (ch === '\n')
384
+ return i + 1;
385
+ // Terminated by `;` — consume the rest of the line so the next statement
386
+ // is inserted on its own line rather than appended after the semicolon.
387
+ const newlinePos = content.indexOf('\n', i);
388
+ return newlinePos === -1 ? content.length : newlinePos + 1;
381
389
  }
382
390
  }
383
391
  return content.length;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "i18next-cli",
3
- "version": "1.67.6",
3
+ "version": "1.67.8",
4
4
  "description": "A unified, high-performance i18next CLI.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -95,6 +95,17 @@ export declare class ASTVisitors {
95
95
  * `Object.values(MAP).map/forEach(v => ...)` → param bound to MAP's values
96
96
  */
97
97
  private tryGetArrayIterationCallbackInfo;
98
+ /**
99
+ * If `node` is `items.map(cb)` (or forEach/flatMap/…) where `items` is typed
100
+ * as an array of an object shape (`items: IProps[]`), binds the callback
101
+ * parameter to the element type for the duration of the callback body:
102
+ *
103
+ * items.map(({ size }) => t(`some|${size}`)) → `size` bound to the union
104
+ * items.map(item => t(`some|${item.size}`)) → `item` bound to the members
105
+ *
106
+ * Returns a cleanup function, or undefined when nothing was bound.
107
+ */
108
+ private tryBindObjectArrayCallback;
98
109
  /**
99
110
  * Extracts the first callback parameter identifier from an iteration call node
100
111
  * and pairs it with the provided values array.
@@ -1 +1 @@
1
- {"version":3,"file":"ast-visitors.d.ts","sourceRoot":"","sources":["../../../src/extractor/core/ast-visitors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAQ,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAItE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,KAAK,CAAiB;IAE9B,IAAW,UAAU,gBAEpB;IAED,SAAgB,YAAY,EAAE,YAAY,CAAA;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAuB;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAa;IAEhC;;;;;;OAMG;gBAED,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,eAAe,EACvB,kBAAkB,CAAC,EAAE,kBAAkB;IAiCzC;;;;;;;;;;;;;OAaG;IACI,mBAAmB,CAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAK/C;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAqDzB;;;;;OAKG;IACI,KAAK,CAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAUjC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,IAAI;IAocZ;;;;;;;;OAQG;IACH,OAAO,CAAC,gCAAgC;IAqDxC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;;;;;;;OAQG;IACI,eAAe,CAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI5D;;OAEG;IACI,cAAc,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxD;;;;;;OAMG;IACI,cAAc,IAAK,MAAM;IAIhC;;OAEG;IACI,cAAc,IAAK,MAAM;CAGjC"}
1
+ {"version":3,"file":"ast-visitors.d.ts","sourceRoot":"","sources":["../../../src/extractor/core/ast-visitors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAQ,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAItE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,KAAK,CAAiB;IAE9B,IAAW,UAAU,gBAEpB;IAED,SAAgB,YAAY,EAAE,YAAY,CAAA;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAuB;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAa;IAEhC;;;;;;OAMG;gBAED,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,eAAe,EACvB,kBAAkB,CAAC,EAAE,kBAAkB;IAiCzC;;;;;;;;;;;;;OAaG;IACI,mBAAmB,CAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAK/C;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAqDzB;;;;;OAKG;IACI,KAAK,CAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAUjC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,IAAI;IAudZ;;;;;;;;OAQG;IACH,OAAO,CAAC,gCAAgC;IAqDxC;;;;;;;;;OASG;IACH,OAAO,CAAC,0BAA0B;IA+ClC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;;;;;;;OAQG;IACI,eAAe,CAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI5D;;OAEG;IACI,cAAc,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxD;;;;;;OAMG;IACI,cAAc,IAAK,MAAM;IAIhC;;OAEG;IACI,cAAc,IAAK,MAAM;CAGjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"translation-manager.d.ts","sourceRoot":"","sources":["../../../src/extractor/core/translation-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AA0sC9F;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAC/B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,MAAM,EAAE,oBAAoB,EAC5B,EACE,uBAA+B,EAC/B,OAAe,EACf,oBAA4B,EAC5B,MAA4B,EAC7B,GAAE;IACD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;CACX,GACL,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAyK9B"}
1
+ {"version":3,"file":"translation-manager.d.ts","sourceRoot":"","sources":["../../../src/extractor/core/translation-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AA2rC9F;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAC/B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,MAAM,EAAE,oBAAoB,EAC5B,EACE,uBAA+B,EAC/B,OAAe,EACf,oBAA4B,EAC5B,MAA4B,EAC7B,GAAE;IACD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;CACX,GACL,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAyK9B"}
@@ -11,6 +11,7 @@ export declare class ExpressionResolver {
11
11
  private temporaryVariables;
12
12
  private objectTypeTable;
13
13
  private temporaryObjectVariables;
14
+ private arrayElementMembers;
14
15
  constructor(hooks: ASTVisitorHooks);
15
16
  /**
16
17
  * Clear per-file captured variables. Enums / shared maps are kept.
@@ -55,6 +56,19 @@ export declare class ExpressionResolver {
55
56
  * type alias, or inline type literal) to its member → string values map.
56
57
  */
57
58
  resolveTypeMembers(tsType: any): Record<string, string[]> | undefined;
59
+ /**
60
+ * Resolve a type annotation for an array of an object shape (`IProps[]`,
61
+ * `Array<IProps>`, `ReadonlyArray<IProps>`) to the element's member map, so
62
+ * that `items.map(({ size }) => …)` can bind the callback parameter.
63
+ */
64
+ resolveArrayElementMembers(tsType: any): Record<string, string[]> | undefined;
65
+ /**
66
+ * Bind an identifier to the member map of its array element type
67
+ * (`items: IProps[]`).
68
+ */
69
+ setArrayElementMembers(name: string, members: Record<string, string[]>): void;
70
+ getArrayElementMembers(name: string): Record<string, string[]> | undefined;
71
+ deleteArrayElementMembers(name: string): void;
58
72
  /**
59
73
  * Temporarily bind an identifier to an object-shaped type's members, so that
60
74
  * `props.size` inside the function body resolves to the member's values.
@@ -1 +1 @@
1
- {"version":3,"file":"expression-resolver.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/expression-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAkD,MAAM,WAAW,CAAA;AAC3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAAiB;IAK9B,OAAO,CAAC,aAAa,CAA4D;IAGjF,OAAO,CAAC,eAAe,CAAiD;IAIxE,OAAO,CAAC,cAAc,CAAmC;IAIzD,OAAO,CAAC,mBAAmB,CAAmC;IAI9D,OAAO,CAAC,oBAAoB,CAAmC;IAM/D,OAAO,CAAC,yBAAyB,CAAmC;IAIpE,OAAO,CAAC,kBAAkB,CAAmC;IAK7D,OAAO,CAAC,eAAe,CAAmD;IAI1E,OAAO,CAAC,wBAAwB,CAAmD;gBAEtE,KAAK,EAAE,eAAe;IAInC;;OAEG;IACI,gBAAgB,IAAK,IAAI;IAMhC;;;;;;;;;OASG;IACH,yBAAyB,CAAE,IAAI,EAAE,GAAG,GAAG,IAAI;IA2J3C;;;;;;;OAOG;IACH,2BAA2B,CAAE,IAAI,EAAE,GAAG,GAAG,IAAI;IAwB7C;;;;;;OAMG;IACH,2BAA2B,CAAE,IAAI,EAAE,GAAG,GAAG,IAAI;IAW7C;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAehC;;;OAGG;IACI,kBAAkB,CAAE,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS;IAa7E;;;OAGG;IACI,0BAA0B,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI;IAIlF,6BAA6B,CAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzD;;;;;;;;;OASG;IACH,0BAA0B,CAAE,IAAI,EAAE,GAAG,GAAG,IAAI;IAqC5C;;;;;;;;OAQG;IACH,OAAO,CAAC,iCAAiC;IA6CzC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;;;OAIG;IACI,oBAAoB,CAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAIlE;;OAEG;IACI,uBAAuB,CAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAInD;;;;OAIG;IACI,yBAAyB,CAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE;IAQxD;;;OAGG;IACI,iBAAiB,CAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAQ7D;;;;OAIG;IACI,YAAY,CAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;IAQtE;;;;;OAKG;IACH,sBAAsB,CAAE,IAAI,EAAE,GAAG,GAAG,IAAI;IAwBxC;;;;;;;OAOG;IACH,kCAAkC,CAAE,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE;IAKrE;;;;;;;OAOG;IACH,8BAA8B,CAAE,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE;IAKjE;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,yCAAyC;IAqOjD,OAAO,CAAC,mCAAmC;IAiH3C;;;;;;OAMG;IACH,OAAO,CAAC,6CAA6C;IAyBrD;;;;;;OAMG;IACH,OAAO,CAAC,kDAAkD;CAwB3D"}
1
+ {"version":3,"file":"expression-resolver.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/expression-resolver.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"instrumenter.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/core/instrumenter.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,eAAe,EAA6B,sBAAsB,EAAiE,MAAM,gBAAgB,CAAA;AAU1N;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,mBAAmB,EAC5B,MAAM,GAAE,MAA4B,GACnC,OAAO,CAAC,sBAAsB,CAAC,CAoNjC;AA2uCD;;GAEG;AACH,wBAAsB,mBAAmB,IAAK,OAAO,CAAC,OAAO,CAAC,CAU7D;AAID,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,GAAG,SAAS,CAAA;AA6B/E;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,IAAK,OAAO,CAAC,kBAAkB,CAAC,CA8B7E;AAED;;GAEG;AACH,wBAAsB,wBAAwB,IAAK,OAAO,CAAC,OAAO,CAAC,CAOlE;AAwBD;;;;;;GAMG;AACH,wBAAsB,wBAAwB,IAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWxE;AAmYD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,EAAE,EAC7B,MAAM,EAAE,oBAAoB,EAC5B,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,GAAE,MAA4B,GACnC,OAAO,CAAC,IAAI,CAAC,CAoDf"}
1
+ {"version":3,"file":"instrumenter.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/core/instrumenter.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,eAAe,EAA6B,sBAAsB,EAAiE,MAAM,gBAAgB,CAAA;AAU1N;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,mBAAmB,EAC5B,MAAM,GAAE,MAA4B,GACnC,OAAO,CAAC,sBAAsB,CAAC,CA+NjC;AAqyCD;;GAEG;AACH,wBAAsB,mBAAmB,IAAK,OAAO,CAAC,OAAO,CAAC,CAU7D;AAID,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,GAAG,SAAS,CAAA;AA6B/E;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,IAAK,OAAO,CAAC,kBAAkB,CAAC,CA8B7E;AAED;;GAEG;AACH,wBAAsB,wBAAwB,IAAK,OAAO,CAAC,OAAO,CAAC,CAOlE;AAwBD;;;;;;GAMG;AACH,wBAAsB,wBAAwB,IAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWxE;AAmYD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,EAAE,EAC7B,MAAM,EAAE,oBAAoB,EAC5B,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,GAAE,MAA4B,GACnC,OAAO,CAAC,IAAI,CAAC,CAoDf"}
@@ -1 +1 @@
1
- {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/core/transformer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAGnI,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,qBAAqB,EAAE,OAAO,CAAA;IAC9B,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAA;IAC7C,6EAA6E;IAC7E,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAChC,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAC3C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,eAAe,EAAE,EAC7B,OAAO,EAAE,kBAAkB,GAC1B,eAAe,CAyLjB;AAkPD;;GAEG;AACH,wBAAgB,YAAY,CAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAwB1F"}
1
+ {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/core/transformer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAGnI,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,qBAAqB,EAAE,OAAO,CAAA;IAC9B,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAA;IAC7C,6EAA6E;IAC7E,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAChC,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAC3C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,eAAe,EAAE,EAC7B,OAAO,EAAE,kBAAkB,GAC1B,eAAe,CAyLjB;AAyPD;;GAEG;AACH,wBAAgB,YAAY,CAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAwB1F"}
package/types/types.d.ts CHANGED
@@ -1075,6 +1075,8 @@ export interface FileScanResult {
1075
1075
  components: ComponentBoundary[];
1076
1076
  /** Detected language-change call sites */
1077
1077
  languageChangeSites: LanguageChangeSite[];
1078
+ /** Number of candidates dropped because they live at module scope */
1079
+ moduleScopeSkipped: number;
1078
1080
  }
1079
1081
  /**
1080
1082
  * Custom scorer function for the instrument command.
@@ -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;;;WAGG;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;;;;;WAKG;QACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QAExB,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;;;;;WAKG;QACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QAExB,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,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;CAC1C;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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"}