@scoutello/i18n-magic 0.18.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -45,13 +45,34 @@ Create an `i18n-magic.js` file in your project root with your project-specific s
45
45
 
46
46
  ```js
47
47
  module.exports = {
48
- globPatterns: ['./components/**/*.tsx', './pages/**/*.tsx', './lib/**/*.ts'],
48
+ globPatterns: [
49
+ './components/**/*.tsx',
50
+ './pages/**/*.tsx',
51
+ './lib/**/*.ts',
52
+ // Namespace-specific patterns for automatic namespace assignment
53
+ {
54
+ pattern: './apps/dashboard/**/*.tsx',
55
+ namespaces: ['dashboard'],
56
+ },
57
+ {
58
+ pattern: './apps/dashboard/**/*.ts',
59
+ namespaces: ['dashboard'],
60
+ },
61
+ {
62
+ pattern: './apps/mobile/**/*.tsx',
63
+ namespaces: ['mobile'],
64
+ },
65
+ {
66
+ pattern: './apps/mobile/**/*.ts',
67
+ namespaces: ['mobile'],
68
+ },
69
+ ],
49
70
  loadPath: 'locales/{{lng}}/{{ns}}.json',
50
71
  savePath: 'locales/{{lng}}/{{ns}}.json',
51
72
  locales: ['en', 'de'],
52
73
  defaultLocale: 'de',
53
74
  defaultNamespace: 'common',
54
- namespaces: ['common', 'forms'],
75
+ namespaces: ['common', 'forms', 'dashboard', 'mobile'],
55
76
  context:
56
77
  'This is a context which increases the quality of the translations by giving context to the LLM',
57
78
  // Optional configurations
@@ -60,23 +81,29 @@ module.exports = {
60
81
  GEMINI_API_KEY: '', // Alternative to using .env file
61
82
  disableTranslation: false, // Set to true to skip automatic translations during the scan step. Useful if you want to sync the other languages during CI/CD using sync.
62
83
  autoClear: true, // When using the scan command, always run the clean before
63
-
64
- // Optional: Namespace-specific configurations for pruned translations
65
- pruneNamespaces: [
66
- {
67
- sourceNamespace: 'common',
68
- newNamespace: 'dashboard',
69
- globPatterns: ['./apps/dashboard/**/*.tsx', './apps/dashboard/**/*.ts'],
70
- },
71
- {
72
- sourceNamespace: 'common',
73
- newNamespace: 'mobile',
74
- globPatterns: ['./apps/mobile/**/*.tsx', './apps/mobile/**/*.ts'],
75
- },
76
- ],
77
84
  };
78
85
  ```
79
86
 
87
+ #### Glob Patterns Configuration
88
+
89
+ The `globPatterns` array supports two formats:
90
+
91
+ 1. **String patterns**: Simple glob patterns that apply to all namespaces
92
+
93
+ ```js
94
+ './components/**/*.tsx';
95
+ ```
96
+
97
+ 2. **Object patterns**: Patterns with namespace-specific configuration for automatic namespace assignment
98
+ ```js
99
+ {
100
+ pattern: './apps/dashboard/**/*.tsx',
101
+ namespaces: ['dashboard']
102
+ }
103
+ ```
104
+
105
+ When using object patterns, translation keys found in files matching that pattern will be automatically saved to the specified namespaces. This enables automatic creation of namespace-specific translation files based on where the keys are used in your codebase.
106
+
80
107
  ### 4. Start using i18n Magic
81
108
 
82
109
  ```bash
@@ -152,16 +179,18 @@ Scan your codebase for missing translations and automatically generate them. Thi
152
179
  The command will:
153
180
 
154
181
  1. Scan all files matching your glob patterns for translation usage
155
- 2. Identify missing translation keys in your default locale
156
- 3. Prompt you to provide translations for each missing key
157
- 4. Automatically translate to all other configured locales using AI
158
- 5. Save the new translations to your JSON files
182
+ 2. Automatically determine which namespaces each key belongs to based on the file location
183
+ 3. Identify missing translation keys in your default locale
184
+ 4. Prompt you to provide translations for each missing key
185
+ 5. Automatically translate to all other configured locales using AI
186
+ 6. Save the new translations to the appropriate namespace files
159
187
 
160
188
  This is useful for:
161
189
 
162
190
  - Adding new translations during development
163
191
  - Ensuring all translation keys have corresponding values
164
192
  - Maintaining translation consistency across locales
193
+ - Automatically organizing translations into the correct namespaces
165
194
 
166
195
  ### `replace`
167
196
 
@@ -169,10 +198,11 @@ Update an existing translation key with a new value and automatically translate
169
198
 
170
199
  The command will:
171
200
 
172
- 1. Prompt you to select or specify the translation key to replace
173
- 2. Ask for the new translation value in your default locale
174
- 3. Automatically translate the new value to all other configured locales using AI
175
- 4. Update all translation files with the new values
201
+ 1. Automatically detect which namespaces the key is used in based on your codebase
202
+ 2. Prompt you to select or specify the translation key to replace
203
+ 3. Ask for the new translation value in your default locale
204
+ 4. Automatically translate the new value to all other configured locales using AI
205
+ 5. Update all relevant namespace files with the new values
176
206
 
177
207
  You can specify the key in two ways:
178
208
 
@@ -186,6 +216,7 @@ This is useful for:
186
216
  - Updating existing translations that need changes
187
217
  - Fixing translation errors across all locales
188
218
  - Maintaining consistency when modifying content
219
+ - Automatically updating translations in all relevant namespaces
189
220
 
190
221
  ### `check-missing`
191
222
 
@@ -226,26 +257,6 @@ This is useful for:
226
257
 
227
258
  **Note**: This command works best when used with `disableTranslation: true` in your config to separate the scanning and translation phases.
228
259
 
229
- ### `prune`
230
-
231
- Create a pruned namespace from an existing namespace, containing only the translation keys that are actually used in specific files. This is useful for creating optimized translation bundles for different parts of your application (e.g., dashboard, mobile app, etc.).
232
-
233
- The command will:
234
-
235
- 1. Prompt you to select a source namespace to prune from
236
- 2. Ask for a name for the new namespace
237
- 3. Ask for glob patterns to scan for translation usage
238
- 4. Extract all translation keys used in the matched files
239
- 5. Create new translation files for all locales containing only the used keys
240
-
241
- This is particularly useful for:
242
-
243
- - Creating namespace-specific translation bundles
244
- - Reducing bundle size by including only necessary translations
245
- - Optimizing performance in micro-frontends or modular applications
246
-
247
- You can also automate this process using the `pruneNamespaces` configuration in your `i18n-magic.js` file (see configuration example above).
248
-
249
260
  ### `clean`
250
261
 
251
262
  Remove unused translation keys from all locales. This command scans your codebase to find which translation keys are actually being used and removes any keys that are no longer referenced in your code.
package/dist/cli.js CHANGED
@@ -9,7 +9,6 @@ const dotenv_1 = __importDefault(require("dotenv"));
9
9
  const openai_1 = __importDefault(require("openai"));
10
10
  const check_missing_1 = require("./commands/check-missing");
11
11
  const clean_1 = require("./commands/clean");
12
- const create_pruned_namespace_1 = require("./commands/create-pruned-namespace");
13
12
  const replace_1 = require("./commands/replace");
14
13
  const scan_1 = require("./commands/scan");
15
14
  const sync_locales_1 = require("./commands/sync-locales");
@@ -47,11 +46,6 @@ const commands = [
47
46
  description: "Remove unused translations from all locales. Useful for a CI/CD pipeline or husky hook.",
48
47
  action: clean_1.removeUnusedKeys,
49
48
  },
50
- {
51
- name: "prune",
52
- description: "Create a pruned namespace from the other namespaces.",
53
- action: create_pruned_namespace_1.createPrunedNamespace,
54
- },
55
49
  ];
56
50
  for (const command of commands) {
57
51
  const cmd = program.command(command.name).description(command.description);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAQjD,eAAO,MAAM,gBAAgB,GAAU,QAAQ,aAAa,kBA6F3D,CAAA"}
1
+ {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAQjD,eAAO,MAAM,gBAAgB,GAAU,QAAQ,aAAa,kBAsF3D,CAAA"}
@@ -1,47 +1,35 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.removeUnusedKeys = void 0;
7
- const fast_glob_1 = __importDefault(require("fast-glob"));
8
- const i18next_scanner_1 = require("i18next-scanner");
9
- const node_fs_1 = __importDefault(require("node:fs"));
10
4
  const utils_1 = require("../lib/utils");
11
5
  const removeUnusedKeys = async (config) => {
12
6
  const { globPatterns, namespaces, defaultNamespace, locales, loadPath, savePath, } = config;
13
- // Set up the parser
14
- const parser = new i18next_scanner_1.Parser({
15
- nsSeparator: false,
16
- keySeparator: false,
7
+ // Get all keys with their associated namespaces from the codebase
8
+ const keysWithNamespaces = await (0, utils_1.getKeysWithNamespaces)({
9
+ globPatterns,
10
+ defaultNamespace,
17
11
  });
18
- // Find all files to scan
19
- const files = await (0, fast_glob_1.default)([...globPatterns, "!**/node_modules/**"]);
20
- // Extract all translation keys from the codebase
21
- const extractedKeys = [];
22
- for (const file of files) {
23
- const content = node_fs_1.default.readFileSync(file, "utf-8");
24
- parser.parseFuncFromString(content, { list: ["t"] }, (key) => {
25
- extractedKeys.push(key);
26
- });
27
- }
28
- // Remove duplicates
29
- const uniqueExtractedKeys = (0, utils_1.removeDuplicatesFromArray)(extractedKeys);
30
12
  // Track stats for reporting
31
13
  const stats = {
32
14
  total: 0,
33
15
  removed: 0,
34
16
  };
35
- // Process each namespace and locale
36
- for (const namespace of namespaces) {
37
- // Build a set of pure keys that are actually used in the codebase for this namespace
38
- const usedKeysSet = new Set();
39
- for (const key of uniqueExtractedKeys) {
17
+ // Group keys by namespace
18
+ const keysByNamespace = {};
19
+ for (const { key, namespaces: keyNamespaces } of keysWithNamespaces) {
20
+ for (const namespace of keyNamespaces) {
21
+ if (!keysByNamespace[namespace]) {
22
+ keysByNamespace[namespace] = new Set();
23
+ }
40
24
  const pureKey = (0, utils_1.getPureKey)(key, namespace, namespace === defaultNamespace);
41
25
  if (pureKey) {
42
- usedKeysSet.add(pureKey);
26
+ keysByNamespace[namespace].add(pureKey);
43
27
  }
44
28
  }
29
+ }
30
+ // Process each namespace and locale
31
+ for (const namespace of namespaces) {
32
+ const usedKeysSet = keysByNamespace[namespace] || new Set();
45
33
  // Process each locale
46
34
  for (const locale of locales) {
47
35
  // Load existing keys for this locale and namespace
@@ -1 +1 @@
1
- {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-pruned-namespace.d.ts","sourceRoot":"","sources":["../../src/commands/create-pruned-namespace.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAQjD,eAAO,MAAM,qBAAqB,GAAU,QAAQ,aAAa,kBAwJhE,CAAA"}
1
+ {"version":3,"file":"create-pruned-namespace.d.ts","sourceRoot":"","sources":["../../src/commands/create-pruned-namespace.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAQjD,eAAO,MAAM,qBAAqB,GAAU,QAAQ,aAAa,kBA2JhE,CAAA"}
@@ -51,11 +51,12 @@ const createPrunedNamespace = async (config) => {
51
51
  });
52
52
  const newNamespace = newNamespaceResponse.value;
53
53
  // Step 3: Ask for glob patterns to find relevant keys
54
+ const allPatterns = config.globPatterns.map((pattern) => typeof pattern === "string" ? pattern : pattern.pattern);
54
55
  const globPatternsResponse = await (0, prompts_1.default)({
55
56
  type: "list",
56
57
  name: "value",
57
58
  message: "Enter glob patterns to find relevant keys (comma separated):",
58
- initial: config.globPatterns.join(","),
59
+ initial: allPatterns.join(","),
59
60
  separator: ",",
60
61
  onState: (state) => {
61
62
  if (state.aborted) {
@@ -1 +1 @@
1
- {"version":3,"file":"create-pruned-namespace.js","sourceRoot":"","sources":["../../src/commands/create-pruned-namespace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-pruned-namespace.js","sourceRoot":"","sources":["../../src/commands/create-pruned-namespace.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"replace.d.ts","sourceRoot":"","sources":["../../src/commands/replace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAsBjD,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,aAAa,EACrB,MAAM,MAAM,kBAyEb,CAAA"}
1
+ {"version":3,"file":"replace.d.ts","sourceRoot":"","sources":["../../src/commands/replace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AA6BjD,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,aAAa,EACrB,MAAM,MAAM,kBAqHb,CAAA"}
@@ -2,56 +2,103 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.replaceTranslation = void 0;
4
4
  const utils_1 = require("../lib/utils");
5
- const getKeyToReplace = async (keys) => {
5
+ const getKeyToReplace = async (allAvailableKeys) => {
6
6
  const keyToReplace = await (0, utils_1.getTextInput)("Enter the key to replace the translation for: ");
7
- if (!keys[keyToReplace]) {
7
+ if (!allAvailableKeys[keyToReplace]) {
8
8
  console.log(`The key "${keyToReplace}" does not exist.`);
9
- return await getKeyToReplace(keys);
9
+ return await getKeyToReplace(allAvailableKeys);
10
10
  }
11
- console.log(`The key "${keyToReplace}" exists.`);
12
- return keyToReplace;
11
+ const namespaces = allAvailableKeys[keyToReplace].map((k) => k.namespace);
12
+ console.log(`The key "${keyToReplace}" exists in namespaces: ${namespaces.join(", ")}.`);
13
+ return { key: keyToReplace, namespaces };
13
14
  };
14
15
  const replaceTranslation = async (config, key) => {
15
16
  const { loadPath, savePath, defaultLocale, defaultNamespace, namespaces, locales, globPatterns, context, openai, } = config;
16
- const keys = await (0, utils_1.loadLocalesFile)(config.loadPath, config.defaultLocale, config.defaultNamespace);
17
+ // Find all keys with their namespaces from the codebase
18
+ const keysWithNamespaces = await (0, utils_1.getKeysWithNamespaces)({
19
+ globPatterns,
20
+ defaultNamespace,
21
+ });
22
+ // Build a map of all available keys across all namespaces
23
+ const allAvailableKeys = {};
24
+ for (const namespace of namespaces) {
25
+ const keys = await (0, utils_1.loadLocalesFile)(loadPath, defaultLocale, namespace);
26
+ for (const [keyName, value] of Object.entries(keys)) {
27
+ if (!allAvailableKeys[keyName]) {
28
+ allAvailableKeys[keyName] = [];
29
+ }
30
+ allAvailableKeys[keyName].push({ namespace, value });
31
+ }
32
+ }
17
33
  let keyToReplace;
34
+ let targetNamespaces = [];
18
35
  if (key) {
19
- if (keys[key]) {
36
+ if (allAvailableKeys[key]) {
20
37
  keyToReplace = key;
21
- console.log(`The key "${keyToReplace}" exists.`);
38
+ // Determine which namespaces this key should be updated in based on usage
39
+ const keyUsage = keysWithNamespaces.filter((k) => {
40
+ const pureKey = (0, utils_1.getPureKey)(k.key, defaultNamespace, true);
41
+ return pureKey === key || k.key === key;
42
+ });
43
+ if (keyUsage.length > 0) {
44
+ // Use namespaces from actual usage
45
+ const allNamespaces = [];
46
+ for (const k of keyUsage) {
47
+ allNamespaces.push(...k.namespaces);
48
+ }
49
+ targetNamespaces = [...new Set(allNamespaces)];
50
+ }
51
+ else {
52
+ // Fallback to all namespaces where the key exists
53
+ targetNamespaces = allAvailableKeys[key].map((k) => k.namespace);
54
+ }
55
+ console.log(`The key "${keyToReplace}" exists in namespaces: ${targetNamespaces.join(", ")}.`);
22
56
  }
23
57
  else {
24
58
  console.log(`The key "${key}" does not exist.`);
25
- keyToReplace = await getKeyToReplace(keys);
59
+ const result = await getKeyToReplace(allAvailableKeys);
60
+ keyToReplace = result.key;
61
+ targetNamespaces = result.namespaces;
26
62
  }
27
63
  }
28
64
  else {
29
- keyToReplace = await getKeyToReplace(keys);
65
+ const result = await getKeyToReplace(allAvailableKeys);
66
+ keyToReplace = result.key;
67
+ targetNamespaces = result.namespaces;
30
68
  }
31
- console.log(`The current translation in ${defaultLocale} for "${keyToReplace}" is "${keys[keyToReplace]}".`);
32
- const newTranslation = await (0, utils_1.getTextInput)("Enter the new translation: ");
33
- for (const locale of locales) {
34
- let newValue = "";
35
- if (locale === defaultLocale) {
36
- newValue = newTranslation;
69
+ // Show current translations across namespaces
70
+ for (const namespace of targetNamespaces) {
71
+ const keys = await (0, utils_1.loadLocalesFile)(loadPath, defaultLocale, namespace);
72
+ if (keys[keyToReplace]) {
73
+ console.log(`Current translation in ${defaultLocale} (${namespace}): "${keys[keyToReplace]}"`);
37
74
  }
38
- else {
39
- const translation = await (0, utils_1.translateKey)({
40
- context,
41
- inputLanguage: defaultLocale,
42
- outputLanguage: locale,
43
- object: {
44
- [keyToReplace]: newTranslation,
45
- },
46
- openai,
47
- model: config.model,
48
- });
49
- newValue = translation[keyToReplace];
75
+ }
76
+ const newTranslation = await (0, utils_1.getTextInput)("Enter the new translation: ");
77
+ // Update the key in all relevant namespaces and locales
78
+ for (const namespace of targetNamespaces) {
79
+ for (const locale of locales) {
80
+ let newValue = "";
81
+ if (locale === defaultLocale) {
82
+ newValue = newTranslation;
83
+ }
84
+ else {
85
+ const translation = await (0, utils_1.translateKey)({
86
+ context,
87
+ inputLanguage: defaultLocale,
88
+ outputLanguage: locale,
89
+ object: {
90
+ [keyToReplace]: newTranslation,
91
+ },
92
+ openai,
93
+ model: config.model,
94
+ });
95
+ newValue = translation[keyToReplace];
96
+ }
97
+ const existingKeys = await (0, utils_1.loadLocalesFile)(loadPath, locale, namespace);
98
+ existingKeys[keyToReplace] = newValue;
99
+ await (0, utils_1.writeLocalesFile)(savePath, locale, namespace, existingKeys);
100
+ console.log(`Updated "${keyToReplace}" in ${locale} (${namespace}): "${newValue}"`);
50
101
  }
51
- const existingKeys = await (0, utils_1.loadLocalesFile)(loadPath, locale, defaultNamespace);
52
- existingKeys[keyToReplace] = newValue;
53
- (0, utils_1.writeLocalesFile)(savePath, locale, defaultNamespace, existingKeys);
54
- console.log(`The new translation for "${keyToReplace}" in ${locale} is "${newValue}".`);
55
102
  }
56
103
  };
57
104
  exports.replaceTranslation = replaceTranslation;
@@ -1 +1 @@
1
- {"version":3,"file":"replace.js","sourceRoot":"","sources":["../../src/commands/replace.ts"],"names":[],"mappings":";;;AACA,wCAKqB;AAErB,MAAM,eAAe,GAAG,KAAK,EAAE,IAA4B,EAAE,EAAE;IAC7D,MAAM,YAAY,GAAG,MAAM,IAAA,oBAAY,EACrC,gDAAgD,CACjD,CAAA;IAED,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,YAAY,YAAY,mBAAmB,CAAC,CAAA;QACxD,OAAO,MAAM,eAAe,CAAC,IAAI,CAAC,CAAA;IACpC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,YAAY,WAAW,CAAC,CAAA;IAChD,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA;AAEM,MAAM,kBAAkB,GAAG,KAAK,EACrC,MAAqB,EACrB,GAAY,EACZ,EAAE;IACF,MAAM,EACJ,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,OAAO,EACP,YAAY,EACZ,OAAO,EACP,MAAM,GACP,GAAG,MAAM,CAAA;IAEV,MAAM,IAAI,GAAG,MAAM,IAAA,uBAAe,EAChC,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,gBAAgB,CACxB,CAAA;IAED,IAAI,YAAoB,CAAA;IAExB,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACd,YAAY,GAAG,GAAG,CAAA;YAClB,OAAO,CAAC,GAAG,CAAC,YAAY,YAAY,WAAW,CAAC,CAAA;QAClD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,mBAAmB,CAAC,CAAA;YAC/C,YAAY,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC;IAED,OAAO,CAAC,GAAG,CACT,8BAA8B,aAAa,SAAS,YAAY,SAAS,IAAI,CAAC,YAAY,CAAC,IAAI,CAChG,CAAA;IAED,MAAM,cAAc,GAAG,MAAM,IAAA,oBAAY,EAAC,6BAA6B,CAAC,CAAA;IAExE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,QAAQ,GAAG,EAAE,CAAA;QACjB,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;YAC7B,QAAQ,GAAG,cAAc,CAAA;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,MAAM,IAAA,oBAAY,EAAC;gBACrC,OAAO;gBACP,aAAa,EAAE,aAAa;gBAC5B,cAAc,EAAE,MAAM;gBACtB,MAAM,EAAE;oBACN,CAAC,YAAY,CAAC,EAAE,cAAc;iBAC/B;gBACD,MAAM;gBACN,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAA;YAEF,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAA;QACtC,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAA,uBAAe,EACxC,QAAQ,EACR,MAAM,EACN,gBAAgB,CACjB,CAAA;QAED,YAAY,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAA;QAErC,IAAA,wBAAgB,EAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAA;QAElE,OAAO,CAAC,GAAG,CACT,4BAA4B,YAAY,QAAQ,MAAM,QAAQ,QAAQ,IAAI,CAC3E,CAAA;IACH,CAAC;AACH,CAAC,CAAA;AA3EY,QAAA,kBAAkB,sBA2E9B"}
1
+ {"version":3,"file":"replace.js","sourceRoot":"","sources":["../../src/commands/replace.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,8 @@
1
1
  export { checkMissing } from "./commands/check-missing";
2
2
  export { removeUnusedKeys } from "./commands/clean";
3
- export { createPrunedNamespace } from "./commands/create-pruned-namespace";
4
- export { createPrunedNamespaceAutomated } from "./commands/create-pruned-namespace-automated";
5
3
  export { replaceTranslation } from "./commands/replace";
6
4
  export { translateMissing } from "./commands/scan";
7
5
  export { syncLocales } from "./commands/sync-locales";
8
6
  export { loadConfig } from "./lib/utils";
9
- export type { PruneOptions, PruneResponse, PruneResult, } from "./commands/create-pruned-namespace-automated";
10
- export type { CommandType, Configuration, NamespacePruneConfig, } from "./lib/types";
7
+ export type { CommandType, Configuration, GlobPatternConfig, } from "./lib/types";
11
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,8CAA8C,CAAA;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAGrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,YAAY,EACV,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,8CAA8C,CAAA;AACrD,YAAY,EACV,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAGrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,YAAY,EACV,WAAW,EACX,aAAa,EACb,iBAAiB,GAClB,MAAM,aAAa,CAAA"}
package/dist/index.js CHANGED
@@ -1,15 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loadConfig = exports.syncLocales = exports.translateMissing = exports.replaceTranslation = exports.createPrunedNamespaceAutomated = exports.createPrunedNamespace = exports.removeUnusedKeys = exports.checkMissing = void 0;
3
+ exports.loadConfig = exports.syncLocales = exports.translateMissing = exports.replaceTranslation = exports.removeUnusedKeys = exports.checkMissing = void 0;
4
4
  // Export command functions for programmatic usage
5
5
  var check_missing_1 = require("./commands/check-missing");
6
6
  Object.defineProperty(exports, "checkMissing", { enumerable: true, get: function () { return check_missing_1.checkMissing; } });
7
7
  var clean_1 = require("./commands/clean");
8
8
  Object.defineProperty(exports, "removeUnusedKeys", { enumerable: true, get: function () { return clean_1.removeUnusedKeys; } });
9
- var create_pruned_namespace_1 = require("./commands/create-pruned-namespace");
10
- Object.defineProperty(exports, "createPrunedNamespace", { enumerable: true, get: function () { return create_pruned_namespace_1.createPrunedNamespace; } });
11
- var create_pruned_namespace_automated_1 = require("./commands/create-pruned-namespace-automated");
12
- Object.defineProperty(exports, "createPrunedNamespaceAutomated", { enumerable: true, get: function () { return create_pruned_namespace_automated_1.createPrunedNamespaceAutomated; } });
13
9
  var replace_1 = require("./commands/replace");
14
10
  Object.defineProperty(exports, "replaceTranslation", { enumerable: true, get: function () { return replace_1.replaceTranslation; } });
15
11
  var scan_1 = require("./commands/scan");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,kDAAkD;AAClD,0DAAuD;AAA9C,6GAAA,YAAY,OAAA;AACrB,0CAAmD;AAA1C,yGAAA,gBAAgB,OAAA;AACzB,8EAA0E;AAAjE,gIAAA,qBAAqB,OAAA;AAC9B,kGAA6F;AAApF,mJAAA,8BAA8B,OAAA;AACvC,8CAAuD;AAA9C,6GAAA,kBAAkB,OAAA;AAC3B,wCAAkD;AAAzC,wGAAA,gBAAgB,OAAA;AACzB,wDAAqD;AAA5C,2GAAA,WAAW,OAAA;AAEpB,2BAA2B;AAC3B,qCAAwC;AAA/B,mGAAA,UAAU,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,kDAAkD;AAClD,0DAAuD;AAA9C,6GAAA,YAAY,OAAA;AACrB,0CAAmD;AAA1C,yGAAA,gBAAgB,OAAA;AAEzB,8CAAuD;AAA9C,6GAAA,kBAAkB,OAAA;AAC3B,wCAAkD;AAAzC,wGAAA,gBAAgB,OAAA;AACzB,wDAAqD;AAA5C,2GAAA,WAAW,OAAA;AAEpB,2BAA2B;AAC3B,qCAAwC;AAA/B,mGAAA,UAAU,OAAA"}
@@ -1,10 +1,9 @@
1
1
  import type OpenAI from "openai";
2
2
  import type { ChatModel } from "openai/resources/chat/chat";
3
3
  type Model = ChatModel | "gemini-2.5-pro-exp-03-25" | "gemini-2.0-flash" | "gemini-2.0-flash-lite";
4
- export interface NamespacePruneConfig {
5
- sourceNamespace: string;
6
- newNamespace: string;
7
- globPatterns: string[];
4
+ export interface GlobPatternConfig {
5
+ pattern: string;
6
+ namespaces: string[];
8
7
  }
9
8
  export interface Configuration {
10
9
  loadPath: string | ((locale: string, namespace: string) => Promise<Record<string, string>>);
@@ -13,7 +12,7 @@ export interface Configuration {
13
12
  defaultNamespace: string;
14
13
  namespaces: string[];
15
14
  locales: string[];
16
- globPatterns: string[];
15
+ globPatterns: (string | GlobPatternConfig)[];
17
16
  context?: string;
18
17
  disableTranslation?: boolean;
19
18
  autoClear?: boolean;
@@ -21,7 +20,6 @@ export interface Configuration {
21
20
  GEMINI_API_KEY?: string;
22
21
  model?: Model;
23
22
  openai?: OpenAI;
24
- pruneNamespaces?: NamespacePruneConfig[];
25
23
  }
26
24
  export interface CommandType {
27
25
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAE3D,KAAK,KAAK,GACN,SAAS,GACT,0BAA0B,GAC1B,kBAAkB,GAClB,uBAAuB,CAAA;AAE3B,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EACJ,MAAM,GACN,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAC5E,QAAQ,EACJ,MAAM,GACN,CAAC,CACC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,eAAe,CAAC,EAAE,oBAAoB,EAAE,CAAA;CACzC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACjE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAE3D,KAAK,KAAK,GACN,SAAS,GACT,0BAA0B,GAC1B,kBAAkB,GAClB,uBAAuB,CAAA;AAE3B,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EACJ,MAAM,GACN,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAC5E,QAAQ,EACJ,MAAM,GACN,CAAC,CACC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,YAAY,EAAE,CAAC,MAAM,GAAG,iBAAiB,CAAC,EAAE,CAAA;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACjE"}
@@ -1,5 +1,5 @@
1
1
  import type OpenAI from "openai";
2
- import type { Configuration } from "./types";
2
+ import type { Configuration, GlobPatternConfig } from "./types";
3
3
  export declare const loadConfig: ({ configPath, }: {
4
4
  configPath: string;
5
5
  }) => any;
@@ -15,6 +15,32 @@ export declare const translateKey: ({ inputLanguage, context, object, openai, ou
15
15
  export declare const loadLocalesFile: (loadPath: string | ((locale: string, namespace: string) => Promise<Record<string, string>>), locale: string, namespace: string) => Promise<Record<string, string>>;
16
16
  export declare const writeLocalesFile: (savePath: string | ((locale: string, namespace: string, data: Record<string, string>) => Promise<void>), locale: string, namespace: string, data: Record<string, string>) => Promise<void>;
17
17
  export declare const getPureKey: (key: string, namespace?: string, isDefault?: boolean) => string;
18
+ /**
19
+ * Extracts all glob patterns from the configuration, handling both string and object formats
20
+ */
21
+ export declare const extractGlobPatterns: (globPatterns: (string | GlobPatternConfig)[]) => string[];
22
+ /**
23
+ * Gets the namespaces associated with a specific file path based on glob pattern configuration
24
+ */
25
+ export declare const getNamespacesForFile: (filePath: string, globPatterns: (string | {
26
+ pattern: string;
27
+ namespaces: string[];
28
+ })[], defaultNamespace: string) => string[];
29
+ /**
30
+ * Gets all glob patterns that should be used for a specific namespace
31
+ */
32
+ export declare const getGlobPatternsForNamespace: (namespace: string, globPatterns: (string | {
33
+ pattern: string;
34
+ namespaces: string[];
35
+ })[]) => string[];
36
+ /**
37
+ * Extracts keys with their associated namespaces based on the files they're found in
38
+ */
39
+ export declare const getKeysWithNamespaces: ({ globPatterns, defaultNamespace, }: Pick<Configuration, "globPatterns" | "defaultNamespace">) => Promise<{
40
+ key: string;
41
+ namespaces: string[];
42
+ file: string;
43
+ }[]>;
18
44
  export declare const getMissingKeys: ({ globPatterns, namespaces, defaultNamespace, defaultLocale, loadPath, }: Configuration) => Promise<any[]>;
19
45
  export declare const getTextInput: (prompt: string) => Promise<string>;
20
46
  export declare const checkAllKeysExist: ({ namespaces, defaultLocale, loadPath, locales, context, openai, savePath, disableTranslation, model, }: Configuration) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAGhC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,eAAO,MAAM,UAAU,GAAI,iBAExB;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,QAgBxB,CAAA;AAED,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAE1D;AAED,eAAO,MAAM,YAAY,GAAU,oEAOhC;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,oCAyDA,CAAA;AAED,eAAO,MAAM,eAAe,GAC1B,UACI,MAAM,GACN,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAC5E,QAAQ,MAAM,EACd,WAAW,MAAM,oCAsBlB,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,UACI,MAAM,GACN,CAAC,CACC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACzB,OAAO,CAAC,IAAI,CAAC,CAAC,EACvB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,kBAa7B,CAAA;AAED,eAAO,MAAM,UAAU,GACrB,KAAK,MAAM,EACX,YAAY,MAAM,EAClB,YAAY,OAAO,WAiBpB,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,0EAMlC,aAAa,mBA4Cf,CAAA;AAED,eAAO,MAAM,YAAY,GAAU,QAAQ,MAAM,oBAehD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAU,yGAUrC,aAAa,kBAsDf,CAAA;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IAGhC,MAAM,CAAC,EAAE,MAAM;IACf,SAAS,CAAC,EAAE,MAAM;IAClB,KAAK,CAAC,EAAE,KAAK;gBAHpB,OAAO,EAAE,MAAM,EACR,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,KAAK;CAKvB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAGhC,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAE/D,eAAO,MAAM,UAAU,GAAI,iBAExB;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,QAgBxB,CAAA;AAED,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAE1D;AAED,eAAO,MAAM,YAAY,GAAU,oEAOhC;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,oCAyDA,CAAA;AAED,eAAO,MAAM,eAAe,GAC1B,UACI,MAAM,GACN,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAC5E,QAAQ,MAAM,EACd,WAAW,MAAM,oCAsBlB,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,UACI,MAAM,GACN,CAAC,CACC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACzB,OAAO,CAAC,IAAI,CAAC,CAAC,EACvB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,kBAa7B,CAAA;AAED,eAAO,MAAM,UAAU,GACrB,KAAK,MAAM,EACX,YAAY,MAAM,EAClB,YAAY,OAAO,WAiBpB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,cAAc,CAAC,MAAM,GAAG,iBAAiB,CAAC,EAAE,KAC3C,MAAM,EAIR,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,MAAM,EAChB,cAAc,CAAC,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,EAAE,EACpE,kBAAkB,MAAM,KACvB,MAAM,EAkBR,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,2BAA2B,GACtC,WAAW,MAAM,EACjB,cAAc,CAAC,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,EAAE,KACnE,MAAM,EAcR,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAU,qCAGzC,IAAI,CAAC,aAAa,EAAE,cAAc,GAAG,kBAAkB,CAAC;SAUlD,MAAM;gBACC,MAAM,EAAE;UACd,MAAM;IA6Bf,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,0EAMlC,aAAa,mBA2Cf,CAAA;AAED,eAAO,MAAM,YAAY,GAAU,QAAQ,MAAM,oBAehD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAU,yGAUrC,aAAa,kBAsDf,CAAA;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IAGhC,MAAM,CAAC,EAAE,MAAM;IACf,SAAS,CAAC,EAAE,MAAM;IAClB,KAAK,CAAC,EAAE,KAAK;gBAHpB,OAAO,EAAE,MAAM,EACR,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,KAAK;CAKvB"}