i18next-cli 1.64.2 → 1.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -5
- package/dist/cjs/cli.js +1 -1
- package/dist/cjs/extractor/core/extractor.js +3 -9
- package/dist/cjs/extractor/core/translation-manager.js +139 -0
- package/dist/cjs/status.js +20 -9
- package/dist/cjs/types-generator.js +5 -1
- package/dist/cjs/utils/funnel-msg-tracker.js +4 -0
- package/dist/esm/cli.js +1 -1
- package/dist/esm/extractor/core/extractor.js +3 -9
- package/dist/esm/extractor/core/translation-manager.js +139 -0
- package/dist/esm/status.js +20 -9
- package/dist/esm/types-generator.js +5 -1
- package/dist/esm/utils/funnel-msg-tracker.js +4 -0
- package/package.json +1 -1
- package/types/extractor/core/extractor.d.ts.map +1 -1
- package/types/extractor/core/translation-manager.d.ts.map +1 -1
- package/types/types-generator.d.ts.map +1 -1
- package/types/types.d.ts +14 -4
- package/types/types.d.ts.map +1 -1
- package/types/utils/funnel-msg-tracker.d.ts.map +1 -1
package/README.md
CHANGED
|
@@ -58,7 +58,7 @@ npm install --save-dev i18next-cli
|
|
|
58
58
|
|
|
59
59
|
## Quick Start
|
|
60
60
|
|
|
61
|
-
> **Zero-to-localized in one command:** starting from an app with hardcoded strings (e.g. generated with v0, Lovable, Bolt or Cursor)? Run `npx i18next-cli localize` — it detects your setup, wraps hardcoded strings in `t()` calls, extracts keys, connects to [Locize](https://www.locize.com) and AI-translates your app. See [the `localize` command](#localize). The steps below are the manual path.
|
|
61
|
+
> **Zero-to-localized in one command:** starting from an app with hardcoded strings (e.g. generated with v0, Lovable, Bolt or Cursor)? Run `npx i18next-cli localize` — it detects your setup, wraps hardcoded strings in `t()` calls, extracts keys, connects to [Locize](https://www.locize.com) and AI-translates your app. See [the `localize` command](#localize). Working with an AI coding agent (Claude Code, Cursor, ...)? `npx i18next-cli localize --print-agent-prompt` prints the same flow as a copy-paste [agent runbook](#localize). The steps below are the manual path.
|
|
62
62
|
|
|
63
63
|
### 1. Initialize Configuration
|
|
64
64
|
|
|
@@ -604,6 +604,8 @@ npx i18next-cli migrate-config
|
|
|
604
604
|
npx i18next-cli migrate-config i18next-parser.config.mjs
|
|
605
605
|
```
|
|
606
606
|
|
|
607
|
+
> ℹ️ Coming from `i18next-parser`? Note that i18next-cli requires **Node.js >= 22** (i18next-parser still ran on Node 18/20), so CI images may need a runtime bump alongside the config migration.
|
|
608
|
+
|
|
607
609
|
### `rename-key`
|
|
608
610
|
|
|
609
611
|
Safely refactor translation keys across your entire codebase. This command updates both source files and translation files atomically.
|
|
@@ -800,7 +802,7 @@ export default defineConfig({
|
|
|
800
802
|
|
|
801
803
|
// Namespace and key configuration
|
|
802
804
|
defaultNS: 'translation', // If set to false it will not generate any namespace, useful if i.e. the output is a single language json with 1 namespace (and no nesting).
|
|
803
|
-
fallbackNS: 'fallback', // Namespace to use as fallback when a key is missing in the current namespace for a locale. (default undefined)
|
|
805
|
+
fallbackNS: 'fallback', // Namespace(s) (string or array, like the i18next option) to use as fallback when a key is missing in the current namespace for a locale. Keys already translated in a fallback namespace are not duplicated into other namespace files by `extract`. (default undefined)
|
|
804
806
|
nsSeparator: ':',
|
|
805
807
|
keySeparator: '.', // Or `false` to disable nesting and use flat keys
|
|
806
808
|
contextSeparator: '_',
|
|
@@ -1330,13 +1332,35 @@ export default defineConfig({
|
|
|
1330
1332
|
}
|
|
1331
1333
|
```
|
|
1332
1334
|
|
|
1333
|
-
### Dynamic
|
|
1335
|
+
### Dynamic Keys
|
|
1336
|
+
|
|
1337
|
+
Many "dynamic" keys don't need any configuration: since v1.49 the extractor
|
|
1338
|
+
performs TypeScript type-aware resolution of **finite** dynamic keys and
|
|
1339
|
+
expands every possible variant automatically ([#210](https://github.com/i18next/i18next-cli/issues/210)):
|
|
1340
|
+
|
|
1341
|
+
```typescript
|
|
1342
|
+
// Template literals with unions / ternaries / nullish coalescing:
|
|
1343
|
+
t(`state.${isDone ? 'done' : 'notDone'}.title`) // -> state.done.title + state.notDone.title
|
|
1344
|
+
type Status = 'active' | 'inactive'
|
|
1345
|
+
declare const status: Status
|
|
1346
|
+
t(`status.${status}`) // -> status.active + status.inactive
|
|
1347
|
+
|
|
1348
|
+
// `as const` maps and arrays (also when imported from another file):
|
|
1349
|
+
const KEYS = ['a', 'b'] as const
|
|
1350
|
+
KEYS.map((k) => t(`item.${k}`)) // -> item.a + item.b
|
|
1351
|
+
const MAP = { ok: 'result.ok', err: 'result.err' } as const
|
|
1352
|
+
t(MAP[someCondition ? 'ok' : 'err']) // -> result.ok + result.err
|
|
1353
|
+
|
|
1354
|
+
// Helper-function return types and `satisfies`-constrained values
|
|
1355
|
+
```
|
|
1334
1356
|
|
|
1335
|
-
|
|
1357
|
+
Only keys that are **truly runtime-dynamic** (e.g. built from API data) cannot
|
|
1358
|
+
be statically resolved by any tool. For those, use `preservePatterns` to keep
|
|
1359
|
+
the existing entries in your translation files:
|
|
1336
1360
|
|
|
1337
1361
|
```typescript
|
|
1338
1362
|
// Code like this:
|
|
1339
|
-
const key = `user.${role}.permission`;
|
|
1363
|
+
const key = `user.${role}.permission`; // role comes from the server
|
|
1340
1364
|
t(key);
|
|
1341
1365
|
|
|
1342
1366
|
// With this config:
|
package/dist/cjs/cli.js
CHANGED
|
@@ -37,7 +37,7 @@ const program = new commander.Command();
|
|
|
37
37
|
program
|
|
38
38
|
.name('i18next-cli')
|
|
39
39
|
.description('A unified, high-performance i18next CLI.')
|
|
40
|
-
.version('1.
|
|
40
|
+
.version('1.66.0'); // This string is replaced with the actual version at build time by rollup
|
|
41
41
|
// new: global config override option
|
|
42
42
|
program.option('-c, --config <path>', 'Path to i18next-cli config file (overrides detection)');
|
|
43
43
|
program
|
|
@@ -63,13 +63,9 @@ async function runExtractor(config, options = {}) {
|
|
|
63
63
|
logger: options.logger
|
|
64
64
|
});
|
|
65
65
|
let anyFileUpdated = false;
|
|
66
|
-
let anyNewFile = false;
|
|
67
66
|
for (const result of results) {
|
|
68
67
|
if (result.updated) {
|
|
69
68
|
anyFileUpdated = true;
|
|
70
|
-
if (Object.keys(result.existingTranslations || {}).length === 0) {
|
|
71
|
-
anyNewFile = true;
|
|
72
|
-
}
|
|
73
69
|
if (!options.isDryRun) {
|
|
74
70
|
// prefer explicit outputFormat; otherwise infer from file extension per-file
|
|
75
71
|
const effectiveFormat = config.extract.outputFormat ?? fileUtils.inferFormatFromPath(result.path);
|
|
@@ -95,10 +91,8 @@ async function runExtractor(config, options = {}) {
|
|
|
95
91
|
: node_util.styleText('bold', 'Extraction complete!');
|
|
96
92
|
spinner.succeed(completionMessage);
|
|
97
93
|
// Show the funnel message only if files were actually changed.
|
|
98
|
-
// When new translation files are created (new namespace or first extraction),
|
|
99
|
-
// always show the funnel regardless of cooldown.
|
|
100
94
|
if (anyFileUpdated && !options.isDryRun && !options.quiet)
|
|
101
|
-
await printLocizeFunnel(options.logger
|
|
95
|
+
await printLocizeFunnel(options.logger);
|
|
102
96
|
return { anyFileUpdated, hasErrors: fileErrors.length > 0, results };
|
|
103
97
|
}
|
|
104
98
|
catch (error) {
|
|
@@ -397,8 +391,8 @@ async function extract(config, { syncPrimaryWithDefaults = false } = {}) {
|
|
|
397
391
|
* Prints a promotional message for the locize saveMissing workflow.
|
|
398
392
|
* This message is shown after a successful extraction that resulted in changes.
|
|
399
393
|
*/
|
|
400
|
-
async function printLocizeFunnel(logger$1
|
|
401
|
-
if (!
|
|
394
|
+
async function printLocizeFunnel(logger$1) {
|
|
395
|
+
if (!(await funnelMsgTracker.shouldShowFunnel('extract')))
|
|
402
396
|
return;
|
|
403
397
|
const internalLogger = logger$1 ?? new logger.ConsoleLogger();
|
|
404
398
|
const lines = [
|
|
@@ -156,6 +156,21 @@ function sortObject(obj, config, customSort) {
|
|
|
156
156
|
}
|
|
157
157
|
return sortedObj;
|
|
158
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Recursively sorts object keys in plain UTF-16 code-unit order
|
|
161
|
+
* (Array.prototype.sort without comparator) — the exact order locize uses
|
|
162
|
+
* when publishing namespace files.
|
|
163
|
+
*/
|
|
164
|
+
function sortObjectCodeUnit(obj) {
|
|
165
|
+
if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {
|
|
166
|
+
return obj;
|
|
167
|
+
}
|
|
168
|
+
const sorted = {};
|
|
169
|
+
for (const key of Object.keys(obj).sort()) {
|
|
170
|
+
sorted[key] = sortObjectCodeUnit(obj[key]);
|
|
171
|
+
}
|
|
172
|
+
return sorted;
|
|
173
|
+
}
|
|
159
174
|
/**
|
|
160
175
|
* A helper function to build a new translation object for a single namespace.
|
|
161
176
|
* This centralizes the core logic of merging keys.
|
|
@@ -897,6 +912,14 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
|
|
|
897
912
|
if (sort === true) {
|
|
898
913
|
return sortObject(newTranslations, config);
|
|
899
914
|
}
|
|
915
|
+
// 'locize' preset: mirror the key order of locize-published files, which sort
|
|
916
|
+
// flat keys with Array.prototype.sort (UTF-16 code-unit order) before
|
|
917
|
+
// unflattening. Unlike the default sort, this is case-sensitive and applies
|
|
918
|
+
// no canonical plural-form ordering, so extract → locize-sync/-download
|
|
919
|
+
// round-trips without spurious reorder diffs.
|
|
920
|
+
if (sort === 'locize') {
|
|
921
|
+
return sortObjectCodeUnit(newTranslations);
|
|
922
|
+
}
|
|
900
923
|
// Custom sort function logic remains as a future enhancement if needed,
|
|
901
924
|
// but for now, this robustly handles the most common `sort: true` case.
|
|
902
925
|
if (typeof sort === 'function') {
|
|
@@ -940,6 +963,115 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
|
|
|
940
963
|
}
|
|
941
964
|
return newTranslations;
|
|
942
965
|
}
|
|
966
|
+
/**
|
|
967
|
+
* Moves extracted keys that are already translated in a fallback namespace out
|
|
968
|
+
* of their extracted namespace bucket and into the fallback namespace bucket.
|
|
969
|
+
*
|
|
970
|
+
* Mirrors the i18next runtime lookup order: the requested namespace wins when
|
|
971
|
+
* it has a value for the key, otherwise the fallback namespaces are consulted
|
|
972
|
+
* in order (`fallbackNS` may be a string or an array of strings).
|
|
973
|
+
*
|
|
974
|
+
* Existence is decided against the primary language files on disk:
|
|
975
|
+
* - A key that already has a non-empty value in its own namespace file is an
|
|
976
|
+
* intentional per-namespace override and stays where it was extracted.
|
|
977
|
+
* - Otherwise, the first fallback namespace containing a non-empty value for
|
|
978
|
+
* the key claims it. The key is re-bucketed there so `removeUnusedKeys`
|
|
979
|
+
* treats it as used and preserves it.
|
|
980
|
+
* - Keys found in no fallback namespace are new and stay in their extracted
|
|
981
|
+
* namespace, matching the i18next `saveMissing` behavior.
|
|
982
|
+
*/
|
|
983
|
+
async function reattributeFallbackNsKeys(keysByNS, noNsToken, config, primaryLanguage) {
|
|
984
|
+
const rawFallbackNS = config.extract.fallbackNS;
|
|
985
|
+
const fallbackNamespaces = !rawFallbackNS
|
|
986
|
+
? []
|
|
987
|
+
: (Array.isArray(rawFallbackNS) ? rawFallbackNS : [rawFallbackNS]).filter((ns) => typeof ns === 'string' && ns.length > 0);
|
|
988
|
+
if (fallbackNamespaces.length === 0)
|
|
989
|
+
return;
|
|
990
|
+
const keySeparator = config.extract.keySeparator ?? '.';
|
|
991
|
+
const pluralSeparator = config.extract.pluralSeparator ?? '_';
|
|
992
|
+
// Same merged-output detection as the per-locale loop in getTranslations.
|
|
993
|
+
const shouldMerge = config.extract.mergeNamespaces || (typeof config.extract.output === 'string' ? !config.extract.output.includes('{{namespace}}') : false);
|
|
994
|
+
const mergedPrimaryFile = shouldMerge
|
|
995
|
+
? (await fileUtils.loadTranslationFile(node_path.resolve(process.cwd(), fileUtils.getOutputPath(config.extract.output, primaryLanguage))) || {})
|
|
996
|
+
: null;
|
|
997
|
+
const catalogCache = new Map();
|
|
998
|
+
const loadPrimaryCatalog = async (ns, isFallback) => {
|
|
999
|
+
const cacheKey = `${isFallback ? 'fb' : 'own'}:${ns}`;
|
|
1000
|
+
let catalog = catalogCache.get(cacheKey);
|
|
1001
|
+
if (!catalog) {
|
|
1002
|
+
if (mergedPrimaryFile) {
|
|
1003
|
+
// In merged mode the fallback keys may live at the top level when the
|
|
1004
|
+
// file is not namespaced (same resolution as the status command).
|
|
1005
|
+
catalog = mergedPrimaryFile[ns] ?? (isFallback ? mergedPrimaryFile : {});
|
|
1006
|
+
}
|
|
1007
|
+
else {
|
|
1008
|
+
catalog = await fileUtils.loadTranslationFile(node_path.resolve(process.cwd(), fileUtils.getOutputPath(config.extract.output, primaryLanguage, ns))) || {};
|
|
1009
|
+
}
|
|
1010
|
+
catalogCache.set(cacheKey, catalog);
|
|
1011
|
+
}
|
|
1012
|
+
return catalog;
|
|
1013
|
+
};
|
|
1014
|
+
// Plural categories of the primary language, used to recognise a base
|
|
1015
|
+
// count-key (e.g. "item") through its expanded variants ("item_one", …).
|
|
1016
|
+
const primaryCardinalCategories = pluralRules.safePluralRules(primaryLanguage, { type: 'cardinal' }).resolvedOptions().pluralCategories;
|
|
1017
|
+
const primaryOrdinalCategories = pluralRules.safePluralRules(primaryLanguage, { type: 'ordinal' }).resolvedOptions().pluralCategories;
|
|
1018
|
+
const hasTranslation = (catalog, extractedKey) => {
|
|
1019
|
+
const isTranslated = (value) => value !== undefined && value !== null && value !== '';
|
|
1020
|
+
if (isTranslated(nestedObject.getNestedValue(catalog, extractedKey.key, keySeparator)))
|
|
1021
|
+
return true;
|
|
1022
|
+
if (extractedKey.hasCount && !config.extract.disablePlurals && !extractedKey.isExpandedPlural) {
|
|
1023
|
+
const categories = extractedKey.isOrdinal ? primaryOrdinalCategories : primaryCardinalCategories;
|
|
1024
|
+
return categories.some(category => {
|
|
1025
|
+
const variant = extractedKey.isOrdinal
|
|
1026
|
+
? `${extractedKey.key}${pluralSeparator}ordinal${pluralSeparator}${category}`
|
|
1027
|
+
: `${extractedKey.key}${pluralSeparator}${category}`;
|
|
1028
|
+
return isTranslated(nestedObject.getNestedValue(catalog, variant, keySeparator));
|
|
1029
|
+
});
|
|
1030
|
+
}
|
|
1031
|
+
return false;
|
|
1032
|
+
};
|
|
1033
|
+
for (const [nsKey, nsKeys] of [...keysByNS.entries()]) {
|
|
1034
|
+
if (nsKey === noNsToken || fallbackNamespaces.includes(nsKey))
|
|
1035
|
+
continue;
|
|
1036
|
+
const ownCatalog = await loadPrimaryCatalog(nsKey, false);
|
|
1037
|
+
const keptKeys = [];
|
|
1038
|
+
for (const extractedKey of nsKeys) {
|
|
1039
|
+
// A key with a real value in its own namespace file is an intentional
|
|
1040
|
+
// per-namespace override — keep extracting it into that namespace.
|
|
1041
|
+
if (hasTranslation(ownCatalog, extractedKey)) {
|
|
1042
|
+
keptKeys.push(extractedKey);
|
|
1043
|
+
continue;
|
|
1044
|
+
}
|
|
1045
|
+
let claimedBy;
|
|
1046
|
+
for (const fallbackNs of fallbackNamespaces) {
|
|
1047
|
+
if (hasTranslation(await loadPrimaryCatalog(fallbackNs, true), extractedKey)) {
|
|
1048
|
+
claimedBy = fallbackNs;
|
|
1049
|
+
break;
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
if (claimedBy) {
|
|
1053
|
+
if (!keysByNS.has(claimedBy))
|
|
1054
|
+
keysByNS.set(claimedBy, []);
|
|
1055
|
+
keysByNS.get(claimedBy).push({ ...extractedKey, ns: claimedBy, nsIsImplicit: false });
|
|
1056
|
+
}
|
|
1057
|
+
else {
|
|
1058
|
+
keptKeys.push(extractedKey);
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
if (keptKeys.length !== nsKeys.length) {
|
|
1062
|
+
if (keptKeys.length > 0) {
|
|
1063
|
+
keysByNS.set(nsKey, keptKeys);
|
|
1064
|
+
}
|
|
1065
|
+
else {
|
|
1066
|
+
// Every key moved to a fallback namespace: drop the bucket so a brand
|
|
1067
|
+
// new (empty) namespace file is not created. If the file already
|
|
1068
|
+
// exists on disk it is still processed via the on-disk namespace scan
|
|
1069
|
+
// and cleaned up by `removeUnusedKeys`.
|
|
1070
|
+
keysByNS.delete(nsKey);
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
}
|
|
1074
|
+
}
|
|
943
1075
|
/**
|
|
944
1076
|
* Processes extracted translation keys and generates translation files for all configured locales.
|
|
945
1077
|
*
|
|
@@ -1000,6 +1132,13 @@ async function getTranslations(keys, objectKeys, config, { syncPrimaryWithDefaul
|
|
|
1000
1132
|
for (const ns of ignoreNamespaces) {
|
|
1001
1133
|
keysByNS.delete(ns);
|
|
1002
1134
|
}
|
|
1135
|
+
// Respect fallbackNS (#272): a key extracted for another namespace that is
|
|
1136
|
+
// already translated in a fallback namespace resolves at runtime through the
|
|
1137
|
+
// fallback chain, so it must not be duplicated into that namespace's file.
|
|
1138
|
+
// Re-attribute such keys to the fallback namespace bucket instead — this both
|
|
1139
|
+
// suppresses the duplicate and marks the key as "used" in the fallback
|
|
1140
|
+
// namespace so `removeUnusedKeys` does not prune it there.
|
|
1141
|
+
await reattributeFallbackNsKeys(keysByNS, NO_NS_TOKEN, config, primaryLanguage);
|
|
1003
1142
|
const results = [];
|
|
1004
1143
|
const userIgnore = Array.isArray(config.extract.ignore)
|
|
1005
1144
|
? config.extract.ignore
|
package/dist/cjs/status.js
CHANGED
|
@@ -166,6 +166,10 @@ async function generateStatusReport(config) {
|
|
|
166
166
|
const { allKeys: allExtractedKeys } = await keyFinder.findKeys(config);
|
|
167
167
|
const { secondaryLanguages, keySeparator = '.', defaultNS = 'translation', mergeNamespaces = false, pluralSeparator = '_', contextSeparator = '_', fallbackNS } = config.extract;
|
|
168
168
|
const primaryLanguage = config.extract.primaryLanguage || config.locales[0] || 'en';
|
|
169
|
+
// Normalize fallbackNS like the i18next runtime: string | string[] -> string[]
|
|
170
|
+
const fallbackNamespaces = !fallbackNS
|
|
171
|
+
? []
|
|
172
|
+
: (Array.isArray(fallbackNS) ? fallbackNS : [fallbackNS]).filter((ns) => typeof ns === 'string' && ns.length > 0);
|
|
169
173
|
const keysByNs = new Map();
|
|
170
174
|
for (const key of allExtractedKeys.values()) {
|
|
171
175
|
const ns = key.ns || defaultNS || 'translation';
|
|
@@ -308,15 +312,17 @@ async function generateStatusReport(config) {
|
|
|
308
312
|
// when mergedTranslations[ns] is missing.
|
|
309
313
|
? (mergedTranslations?.[ns] ?? mergedTranslations ?? {})
|
|
310
314
|
: await fileUtils.loadTranslationFile(node_path.resolve(process.cwd(), fileUtils.getOutputPath(config.extract.output, locale, ns))) || {};
|
|
311
|
-
// Load fallbackNS translations if configured
|
|
312
|
-
|
|
313
|
-
|
|
315
|
+
// Load fallbackNS translations if configured (looked up in order, like the i18next runtime)
|
|
316
|
+
const fallbackTranslationsList = [];
|
|
317
|
+
for (const fallbackNs of fallbackNamespaces) {
|
|
318
|
+
if (ns === fallbackNs)
|
|
319
|
+
continue;
|
|
314
320
|
if (mergeNamespaces) {
|
|
315
|
-
// In merged mode, fallbackNS keys are in mergedTranslations under
|
|
316
|
-
|
|
321
|
+
// In merged mode, fallbackNS keys are in mergedTranslations under the fallback namespace
|
|
322
|
+
fallbackTranslationsList.push(mergedTranslations?.[fallbackNs] ?? mergedTranslations ?? {});
|
|
317
323
|
}
|
|
318
324
|
else {
|
|
319
|
-
|
|
325
|
+
fallbackTranslationsList.push(await fileUtils.loadTranslationFile(node_path.resolve(process.cwd(), fileUtils.getOutputPath(config.extract.output, locale, fallbackNs))) || {});
|
|
320
326
|
}
|
|
321
327
|
}
|
|
322
328
|
let translatedInNs = 0;
|
|
@@ -353,9 +359,14 @@ async function generateStatusReport(config) {
|
|
|
353
359
|
// Only fall back when the key is genuinely absent from the primary file.
|
|
354
360
|
// An empty string is intentional (placeholder from extract) — don't hide it.
|
|
355
361
|
let state = primaryState;
|
|
356
|
-
if (primaryState === 'absent'
|
|
357
|
-
const
|
|
358
|
-
|
|
362
|
+
if (primaryState === 'absent') {
|
|
363
|
+
for (const fallbackTranslations of fallbackTranslationsList) {
|
|
364
|
+
const fallbackState = classifyValue(nestedObject.getNestedValue(fallbackTranslations, key, sep));
|
|
365
|
+
if (fallbackState !== 'absent') {
|
|
366
|
+
state = fallbackState;
|
|
367
|
+
break;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
359
370
|
}
|
|
360
371
|
// For the primary language the file itself is the source of values, so an
|
|
361
372
|
// empty placeholder still means the key is present. Only a truly absent
|
|
@@ -191,7 +191,11 @@ ${i18nextResourcesForTs.mergeResourcesAsInterface(resources, { optimize: !!enabl
|
|
|
191
191
|
const importPath = node_path.relative(node_path.dirname(outputPath), resourcesOutputPath)
|
|
192
192
|
.replace(/\\/g, '/').replace(/\.d\.ts$/, ''); // Make it a valid module path
|
|
193
193
|
const defaultNS = config.extract.defaultNS === false ? 'false' : `'${config.extract.defaultNS || 'translation'}'`;
|
|
194
|
-
const fallbackNS = config.extract.fallbackNS === false
|
|
194
|
+
const fallbackNS = config.extract.fallbackNS === false
|
|
195
|
+
? 'false'
|
|
196
|
+
: Array.isArray(config.extract.fallbackNS)
|
|
197
|
+
? `[${config.extract.fallbackNS.map(ns => `'${ns}'`).join(', ')}]`
|
|
198
|
+
: `'${config.extract.fallbackNS}'`;
|
|
195
199
|
const fileContent = `// This file is automatically generated by i18next-cli, because it was not existing. You can edit it based on your needs: https://www.i18next.com/overview/typescript#custom-type-options
|
|
196
200
|
import type Resources from './${importPath}';
|
|
197
201
|
|
|
@@ -29,6 +29,10 @@ const TIP_COOLDOWN_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
|
29
29
|
* @returns Promise that resolves to true if the message should be shown, false otherwise
|
|
30
30
|
*/
|
|
31
31
|
async function shouldShowFunnel(funnelMessage) {
|
|
32
|
+
// Never show funnel messages in non-interactive contexts (CI pipelines, piped output):
|
|
33
|
+
// ephemeral CI containers lose the cooldown file, so they would see the tip on every run.
|
|
34
|
+
if (process.env.CI === 'true' || !process.stdout.isTTY)
|
|
35
|
+
return false;
|
|
32
36
|
if (hasLocizeFunnelBeenShown[funnelMessage])
|
|
33
37
|
return false;
|
|
34
38
|
try {
|
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.
|
|
34
|
+
.version('1.66.0'); // This string is replaced with the actual version at build time by rollup
|
|
35
35
|
// new: global config override option
|
|
36
36
|
program.option('-c, --config <path>', 'Path to i18next-cli config file (overrides detection)');
|
|
37
37
|
program
|
|
@@ -61,13 +61,9 @@ async function runExtractor(config, options = {}) {
|
|
|
61
61
|
logger: options.logger
|
|
62
62
|
});
|
|
63
63
|
let anyFileUpdated = false;
|
|
64
|
-
let anyNewFile = false;
|
|
65
64
|
for (const result of results) {
|
|
66
65
|
if (result.updated) {
|
|
67
66
|
anyFileUpdated = true;
|
|
68
|
-
if (Object.keys(result.existingTranslations || {}).length === 0) {
|
|
69
|
-
anyNewFile = true;
|
|
70
|
-
}
|
|
71
67
|
if (!options.isDryRun) {
|
|
72
68
|
// prefer explicit outputFormat; otherwise infer from file extension per-file
|
|
73
69
|
const effectiveFormat = config.extract.outputFormat ?? inferFormatFromPath(result.path);
|
|
@@ -93,10 +89,8 @@ async function runExtractor(config, options = {}) {
|
|
|
93
89
|
: styleText('bold', 'Extraction complete!');
|
|
94
90
|
spinner.succeed(completionMessage);
|
|
95
91
|
// Show the funnel message only if files were actually changed.
|
|
96
|
-
// When new translation files are created (new namespace or first extraction),
|
|
97
|
-
// always show the funnel regardless of cooldown.
|
|
98
92
|
if (anyFileUpdated && !options.isDryRun && !options.quiet)
|
|
99
|
-
await printLocizeFunnel(options.logger
|
|
93
|
+
await printLocizeFunnel(options.logger);
|
|
100
94
|
return { anyFileUpdated, hasErrors: fileErrors.length > 0, results };
|
|
101
95
|
}
|
|
102
96
|
catch (error) {
|
|
@@ -395,8 +389,8 @@ async function extract(config, { syncPrimaryWithDefaults = false } = {}) {
|
|
|
395
389
|
* Prints a promotional message for the locize saveMissing workflow.
|
|
396
390
|
* This message is shown after a successful extraction that resulted in changes.
|
|
397
391
|
*/
|
|
398
|
-
async function printLocizeFunnel(logger
|
|
399
|
-
if (!
|
|
392
|
+
async function printLocizeFunnel(logger) {
|
|
393
|
+
if (!(await shouldShowFunnel('extract')))
|
|
400
394
|
return;
|
|
401
395
|
const internalLogger = logger ?? new ConsoleLogger();
|
|
402
396
|
const lines = [
|
|
@@ -154,6 +154,21 @@ function sortObject(obj, config, customSort) {
|
|
|
154
154
|
}
|
|
155
155
|
return sortedObj;
|
|
156
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Recursively sorts object keys in plain UTF-16 code-unit order
|
|
159
|
+
* (Array.prototype.sort without comparator) — the exact order locize uses
|
|
160
|
+
* when publishing namespace files.
|
|
161
|
+
*/
|
|
162
|
+
function sortObjectCodeUnit(obj) {
|
|
163
|
+
if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {
|
|
164
|
+
return obj;
|
|
165
|
+
}
|
|
166
|
+
const sorted = {};
|
|
167
|
+
for (const key of Object.keys(obj).sort()) {
|
|
168
|
+
sorted[key] = sortObjectCodeUnit(obj[key]);
|
|
169
|
+
}
|
|
170
|
+
return sorted;
|
|
171
|
+
}
|
|
157
172
|
/**
|
|
158
173
|
* A helper function to build a new translation object for a single namespace.
|
|
159
174
|
* This centralizes the core logic of merging keys.
|
|
@@ -895,6 +910,14 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
|
|
|
895
910
|
if (sort === true) {
|
|
896
911
|
return sortObject(newTranslations, config);
|
|
897
912
|
}
|
|
913
|
+
// 'locize' preset: mirror the key order of locize-published files, which sort
|
|
914
|
+
// flat keys with Array.prototype.sort (UTF-16 code-unit order) before
|
|
915
|
+
// unflattening. Unlike the default sort, this is case-sensitive and applies
|
|
916
|
+
// no canonical plural-form ordering, so extract → locize-sync/-download
|
|
917
|
+
// round-trips without spurious reorder diffs.
|
|
918
|
+
if (sort === 'locize') {
|
|
919
|
+
return sortObjectCodeUnit(newTranslations);
|
|
920
|
+
}
|
|
898
921
|
// Custom sort function logic remains as a future enhancement if needed,
|
|
899
922
|
// but for now, this robustly handles the most common `sort: true` case.
|
|
900
923
|
if (typeof sort === 'function') {
|
|
@@ -938,6 +961,115 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
|
|
|
938
961
|
}
|
|
939
962
|
return newTranslations;
|
|
940
963
|
}
|
|
964
|
+
/**
|
|
965
|
+
* Moves extracted keys that are already translated in a fallback namespace out
|
|
966
|
+
* of their extracted namespace bucket and into the fallback namespace bucket.
|
|
967
|
+
*
|
|
968
|
+
* Mirrors the i18next runtime lookup order: the requested namespace wins when
|
|
969
|
+
* it has a value for the key, otherwise the fallback namespaces are consulted
|
|
970
|
+
* in order (`fallbackNS` may be a string or an array of strings).
|
|
971
|
+
*
|
|
972
|
+
* Existence is decided against the primary language files on disk:
|
|
973
|
+
* - A key that already has a non-empty value in its own namespace file is an
|
|
974
|
+
* intentional per-namespace override and stays where it was extracted.
|
|
975
|
+
* - Otherwise, the first fallback namespace containing a non-empty value for
|
|
976
|
+
* the key claims it. The key is re-bucketed there so `removeUnusedKeys`
|
|
977
|
+
* treats it as used and preserves it.
|
|
978
|
+
* - Keys found in no fallback namespace are new and stay in their extracted
|
|
979
|
+
* namespace, matching the i18next `saveMissing` behavior.
|
|
980
|
+
*/
|
|
981
|
+
async function reattributeFallbackNsKeys(keysByNS, noNsToken, config, primaryLanguage) {
|
|
982
|
+
const rawFallbackNS = config.extract.fallbackNS;
|
|
983
|
+
const fallbackNamespaces = !rawFallbackNS
|
|
984
|
+
? []
|
|
985
|
+
: (Array.isArray(rawFallbackNS) ? rawFallbackNS : [rawFallbackNS]).filter((ns) => typeof ns === 'string' && ns.length > 0);
|
|
986
|
+
if (fallbackNamespaces.length === 0)
|
|
987
|
+
return;
|
|
988
|
+
const keySeparator = config.extract.keySeparator ?? '.';
|
|
989
|
+
const pluralSeparator = config.extract.pluralSeparator ?? '_';
|
|
990
|
+
// Same merged-output detection as the per-locale loop in getTranslations.
|
|
991
|
+
const shouldMerge = config.extract.mergeNamespaces || (typeof config.extract.output === 'string' ? !config.extract.output.includes('{{namespace}}') : false);
|
|
992
|
+
const mergedPrimaryFile = shouldMerge
|
|
993
|
+
? (await loadTranslationFile(resolve(process.cwd(), getOutputPath(config.extract.output, primaryLanguage))) || {})
|
|
994
|
+
: null;
|
|
995
|
+
const catalogCache = new Map();
|
|
996
|
+
const loadPrimaryCatalog = async (ns, isFallback) => {
|
|
997
|
+
const cacheKey = `${isFallback ? 'fb' : 'own'}:${ns}`;
|
|
998
|
+
let catalog = catalogCache.get(cacheKey);
|
|
999
|
+
if (!catalog) {
|
|
1000
|
+
if (mergedPrimaryFile) {
|
|
1001
|
+
// In merged mode the fallback keys may live at the top level when the
|
|
1002
|
+
// file is not namespaced (same resolution as the status command).
|
|
1003
|
+
catalog = mergedPrimaryFile[ns] ?? (isFallback ? mergedPrimaryFile : {});
|
|
1004
|
+
}
|
|
1005
|
+
else {
|
|
1006
|
+
catalog = await loadTranslationFile(resolve(process.cwd(), getOutputPath(config.extract.output, primaryLanguage, ns))) || {};
|
|
1007
|
+
}
|
|
1008
|
+
catalogCache.set(cacheKey, catalog);
|
|
1009
|
+
}
|
|
1010
|
+
return catalog;
|
|
1011
|
+
};
|
|
1012
|
+
// Plural categories of the primary language, used to recognise a base
|
|
1013
|
+
// count-key (e.g. "item") through its expanded variants ("item_one", …).
|
|
1014
|
+
const primaryCardinalCategories = safePluralRules(primaryLanguage, { type: 'cardinal' }).resolvedOptions().pluralCategories;
|
|
1015
|
+
const primaryOrdinalCategories = safePluralRules(primaryLanguage, { type: 'ordinal' }).resolvedOptions().pluralCategories;
|
|
1016
|
+
const hasTranslation = (catalog, extractedKey) => {
|
|
1017
|
+
const isTranslated = (value) => value !== undefined && value !== null && value !== '';
|
|
1018
|
+
if (isTranslated(getNestedValue(catalog, extractedKey.key, keySeparator)))
|
|
1019
|
+
return true;
|
|
1020
|
+
if (extractedKey.hasCount && !config.extract.disablePlurals && !extractedKey.isExpandedPlural) {
|
|
1021
|
+
const categories = extractedKey.isOrdinal ? primaryOrdinalCategories : primaryCardinalCategories;
|
|
1022
|
+
return categories.some(category => {
|
|
1023
|
+
const variant = extractedKey.isOrdinal
|
|
1024
|
+
? `${extractedKey.key}${pluralSeparator}ordinal${pluralSeparator}${category}`
|
|
1025
|
+
: `${extractedKey.key}${pluralSeparator}${category}`;
|
|
1026
|
+
return isTranslated(getNestedValue(catalog, variant, keySeparator));
|
|
1027
|
+
});
|
|
1028
|
+
}
|
|
1029
|
+
return false;
|
|
1030
|
+
};
|
|
1031
|
+
for (const [nsKey, nsKeys] of [...keysByNS.entries()]) {
|
|
1032
|
+
if (nsKey === noNsToken || fallbackNamespaces.includes(nsKey))
|
|
1033
|
+
continue;
|
|
1034
|
+
const ownCatalog = await loadPrimaryCatalog(nsKey, false);
|
|
1035
|
+
const keptKeys = [];
|
|
1036
|
+
for (const extractedKey of nsKeys) {
|
|
1037
|
+
// A key with a real value in its own namespace file is an intentional
|
|
1038
|
+
// per-namespace override — keep extracting it into that namespace.
|
|
1039
|
+
if (hasTranslation(ownCatalog, extractedKey)) {
|
|
1040
|
+
keptKeys.push(extractedKey);
|
|
1041
|
+
continue;
|
|
1042
|
+
}
|
|
1043
|
+
let claimedBy;
|
|
1044
|
+
for (const fallbackNs of fallbackNamespaces) {
|
|
1045
|
+
if (hasTranslation(await loadPrimaryCatalog(fallbackNs, true), extractedKey)) {
|
|
1046
|
+
claimedBy = fallbackNs;
|
|
1047
|
+
break;
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
if (claimedBy) {
|
|
1051
|
+
if (!keysByNS.has(claimedBy))
|
|
1052
|
+
keysByNS.set(claimedBy, []);
|
|
1053
|
+
keysByNS.get(claimedBy).push({ ...extractedKey, ns: claimedBy, nsIsImplicit: false });
|
|
1054
|
+
}
|
|
1055
|
+
else {
|
|
1056
|
+
keptKeys.push(extractedKey);
|
|
1057
|
+
}
|
|
1058
|
+
}
|
|
1059
|
+
if (keptKeys.length !== nsKeys.length) {
|
|
1060
|
+
if (keptKeys.length > 0) {
|
|
1061
|
+
keysByNS.set(nsKey, keptKeys);
|
|
1062
|
+
}
|
|
1063
|
+
else {
|
|
1064
|
+
// Every key moved to a fallback namespace: drop the bucket so a brand
|
|
1065
|
+
// new (empty) namespace file is not created. If the file already
|
|
1066
|
+
// exists on disk it is still processed via the on-disk namespace scan
|
|
1067
|
+
// and cleaned up by `removeUnusedKeys`.
|
|
1068
|
+
keysByNS.delete(nsKey);
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
941
1073
|
/**
|
|
942
1074
|
* Processes extracted translation keys and generates translation files for all configured locales.
|
|
943
1075
|
*
|
|
@@ -998,6 +1130,13 @@ async function getTranslations(keys, objectKeys, config, { syncPrimaryWithDefaul
|
|
|
998
1130
|
for (const ns of ignoreNamespaces) {
|
|
999
1131
|
keysByNS.delete(ns);
|
|
1000
1132
|
}
|
|
1133
|
+
// Respect fallbackNS (#272): a key extracted for another namespace that is
|
|
1134
|
+
// already translated in a fallback namespace resolves at runtime through the
|
|
1135
|
+
// fallback chain, so it must not be duplicated into that namespace's file.
|
|
1136
|
+
// Re-attribute such keys to the fallback namespace bucket instead — this both
|
|
1137
|
+
// suppresses the duplicate and marks the key as "used" in the fallback
|
|
1138
|
+
// namespace so `removeUnusedKeys` does not prune it there.
|
|
1139
|
+
await reattributeFallbackNsKeys(keysByNS, NO_NS_TOKEN, config, primaryLanguage);
|
|
1001
1140
|
const results = [];
|
|
1002
1141
|
const userIgnore = Array.isArray(config.extract.ignore)
|
|
1003
1142
|
? config.extract.ignore
|
package/dist/esm/status.js
CHANGED
|
@@ -160,6 +160,10 @@ async function generateStatusReport(config) {
|
|
|
160
160
|
const { allKeys: allExtractedKeys } = await findKeys(config);
|
|
161
161
|
const { secondaryLanguages, keySeparator = '.', defaultNS = 'translation', mergeNamespaces = false, pluralSeparator = '_', contextSeparator = '_', fallbackNS } = config.extract;
|
|
162
162
|
const primaryLanguage = config.extract.primaryLanguage || config.locales[0] || 'en';
|
|
163
|
+
// Normalize fallbackNS like the i18next runtime: string | string[] -> string[]
|
|
164
|
+
const fallbackNamespaces = !fallbackNS
|
|
165
|
+
? []
|
|
166
|
+
: (Array.isArray(fallbackNS) ? fallbackNS : [fallbackNS]).filter((ns) => typeof ns === 'string' && ns.length > 0);
|
|
163
167
|
const keysByNs = new Map();
|
|
164
168
|
for (const key of allExtractedKeys.values()) {
|
|
165
169
|
const ns = key.ns || defaultNS || 'translation';
|
|
@@ -302,15 +306,17 @@ async function generateStatusReport(config) {
|
|
|
302
306
|
// when mergedTranslations[ns] is missing.
|
|
303
307
|
? (mergedTranslations?.[ns] ?? mergedTranslations ?? {})
|
|
304
308
|
: await loadTranslationFile(resolve(process.cwd(), getOutputPath(config.extract.output, locale, ns))) || {};
|
|
305
|
-
// Load fallbackNS translations if configured
|
|
306
|
-
|
|
307
|
-
|
|
309
|
+
// Load fallbackNS translations if configured (looked up in order, like the i18next runtime)
|
|
310
|
+
const fallbackTranslationsList = [];
|
|
311
|
+
for (const fallbackNs of fallbackNamespaces) {
|
|
312
|
+
if (ns === fallbackNs)
|
|
313
|
+
continue;
|
|
308
314
|
if (mergeNamespaces) {
|
|
309
|
-
// In merged mode, fallbackNS keys are in mergedTranslations under
|
|
310
|
-
|
|
315
|
+
// In merged mode, fallbackNS keys are in mergedTranslations under the fallback namespace
|
|
316
|
+
fallbackTranslationsList.push(mergedTranslations?.[fallbackNs] ?? mergedTranslations ?? {});
|
|
311
317
|
}
|
|
312
318
|
else {
|
|
313
|
-
|
|
319
|
+
fallbackTranslationsList.push(await loadTranslationFile(resolve(process.cwd(), getOutputPath(config.extract.output, locale, fallbackNs))) || {});
|
|
314
320
|
}
|
|
315
321
|
}
|
|
316
322
|
let translatedInNs = 0;
|
|
@@ -347,9 +353,14 @@ async function generateStatusReport(config) {
|
|
|
347
353
|
// Only fall back when the key is genuinely absent from the primary file.
|
|
348
354
|
// An empty string is intentional (placeholder from extract) — don't hide it.
|
|
349
355
|
let state = primaryState;
|
|
350
|
-
if (primaryState === 'absent'
|
|
351
|
-
const
|
|
352
|
-
|
|
356
|
+
if (primaryState === 'absent') {
|
|
357
|
+
for (const fallbackTranslations of fallbackTranslationsList) {
|
|
358
|
+
const fallbackState = classifyValue(getNestedValue(fallbackTranslations, key, sep));
|
|
359
|
+
if (fallbackState !== 'absent') {
|
|
360
|
+
state = fallbackState;
|
|
361
|
+
break;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
353
364
|
}
|
|
354
365
|
// For the primary language the file itself is the source of values, so an
|
|
355
366
|
// empty placeholder still means the key is present. Only a truly absent
|
|
@@ -184,7 +184,11 @@ ${mergeResourcesAsInterface(resources, { optimize: !!enableSelector, indentation
|
|
|
184
184
|
const importPath = relative(dirname(outputPath), resourcesOutputPath)
|
|
185
185
|
.replace(/\\/g, '/').replace(/\.d\.ts$/, ''); // Make it a valid module path
|
|
186
186
|
const defaultNS = config.extract.defaultNS === false ? 'false' : `'${config.extract.defaultNS || 'translation'}'`;
|
|
187
|
-
const fallbackNS = config.extract.fallbackNS === false
|
|
187
|
+
const fallbackNS = config.extract.fallbackNS === false
|
|
188
|
+
? 'false'
|
|
189
|
+
: Array.isArray(config.extract.fallbackNS)
|
|
190
|
+
? `[${config.extract.fallbackNS.map(ns => `'${ns}'`).join(', ')}]`
|
|
191
|
+
: `'${config.extract.fallbackNS}'`;
|
|
188
192
|
const fileContent = `// This file is automatically generated by i18next-cli, because it was not existing. You can edit it based on your needs: https://www.i18next.com/overview/typescript#custom-type-options
|
|
189
193
|
import type Resources from './${importPath}';
|
|
190
194
|
|
|
@@ -27,6 +27,10 @@ const TIP_COOLDOWN_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
|
27
27
|
* @returns Promise that resolves to true if the message should be shown, false otherwise
|
|
28
28
|
*/
|
|
29
29
|
async function shouldShowFunnel(funnelMessage) {
|
|
30
|
+
// Never show funnel messages in non-interactive contexts (CI pipelines, piped output):
|
|
31
|
+
// ephemeral CI containers lose the cooldown file, so they would see the tip on every run.
|
|
32
|
+
if (process.env.CI === 'true' || !process.stdout.isTTY)
|
|
33
|
+
return false;
|
|
30
34
|
if (hasLocizeFunnelBeenShown[funnelMessage])
|
|
31
35
|
return false;
|
|
32
36
|
try {
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../../src/extractor/core/extractor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAO5G,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAK/C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CACX,GACL,OAAO,CAAC;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../../src/extractor/core/extractor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAO5G,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAK/C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CACX,GACL,OAAO,CAAC;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAAC,CAwExF;AAwBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,MAAM,GAAE,MAA4B,EACpC,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CAoJf;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,MAAM,GAAE,MAA4B,EACpC,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CA6Df;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,OAAO,CAAE,MAAM,EAAE,oBAAoB,EAAE,EAAE,uBAA+B,EAAE,GAAE;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAO1K"}
|
|
@@ -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;
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-generator.d.ts","sourceRoot":"","sources":["../src/types-generator.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AA6E9D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACtE,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"types-generator.d.ts","sourceRoot":"","sources":["../src/types-generator.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AA6E9D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACtE,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA2IvD"}
|
package/types/types.d.ts
CHANGED
|
@@ -36,8 +36,13 @@ export interface I18nextToolkitConfig {
|
|
|
36
36
|
* Set to false will not generate any namespace, useful if i.e. the output is a single language json with 1 namespace (and no nesting).
|
|
37
37
|
*/
|
|
38
38
|
defaultNS?: string | false;
|
|
39
|
-
/**
|
|
40
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Namespace(s) to use as fallback when a key is missing in the current namespace for a locale
|
|
41
|
+
* (like the i18next runtime option, a string or an array of namespaces looked up in order).
|
|
42
|
+
* When set, `extract` will not add a key to another namespace's file if it is already
|
|
43
|
+
* translated in a fallback namespace, and `status` counts such keys as translated.
|
|
44
|
+
*/
|
|
45
|
+
fallbackNS?: string | string[] | false;
|
|
41
46
|
/** Separator for nested keys, or false for flat keys (default: '.') */
|
|
42
47
|
keySeparator?: string | false | null;
|
|
43
48
|
/** Separator between namespace and key, or false to disable (default: ':') */
|
|
@@ -90,8 +95,13 @@ export interface I18nextToolkitConfig {
|
|
|
90
95
|
* (default: false)
|
|
91
96
|
*/
|
|
92
97
|
preserveContextVariants?: boolean;
|
|
93
|
-
/**
|
|
94
|
-
|
|
98
|
+
/**
|
|
99
|
+
* Whether to sort keys alphabetically in output files, or a comparator function to customize the order (default: true).
|
|
100
|
+
* The string preset 'locize' mirrors the key order of locize-published files (plain UTF-16 code-unit sort,
|
|
101
|
+
* as used when locize publishes namespaces), so `extract` followed by `locize-sync`/`locize-download`
|
|
102
|
+
* round-trips without spurious reorder diffs.
|
|
103
|
+
*/
|
|
104
|
+
sort?: boolean | 'locize' | ((a: ExtractedKey, b: ExtractedKey) => number);
|
|
95
105
|
/** Number of spaces for JSON indentation (default: 2) */
|
|
96
106
|
indentation?: number | string;
|
|
97
107
|
/** Default value to use for missing translations in secondary languages */
|
package/types/types.d.ts.map
CHANGED
|
@@ -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,gGAAgG;QAChG,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAE5B,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,2HAA2H;QAC3H,IAAI,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,KAAK,MAAM,CAAC,CAAC;QAEhE,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;KACpC,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,CAAC;CACtC;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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funnel-msg-tracker.d.ts","sourceRoot":"","sources":["../../src/utils/funnel-msg-tracker.ts"],"names":[],"mappings":"AAqBA;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"funnel-msg-tracker.d.ts","sourceRoot":"","sources":["../../src/utils/funnel-msg-tracker.ts"],"names":[],"mappings":"AAqBA;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgB/E;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe7E;AAED;;;;;;;GAOG;AAEH,wBAAgB,KAAK,CAAE,aAAa,EAAE,MAAM,QAE3C"}
|