i18nsmith 0.1.0 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build.mjs +25 -0
- package/dist/index.js +109367 -22
- package/dist/index.js.map +7 -1
- package/package.json +10 -6
- package/dist/commands/audit.d.ts +0 -3
- package/dist/commands/audit.d.ts.map +0 -1
- package/dist/commands/audit.js +0 -180
- package/dist/commands/audit.js.map +0 -1
- package/dist/commands/backup.d.ts +0 -6
- package/dist/commands/backup.d.ts.map +0 -1
- package/dist/commands/backup.js +0 -85
- package/dist/commands/backup.js.map +0 -1
- package/dist/commands/check.d.ts +0 -3
- package/dist/commands/check.d.ts.map +0 -1
- package/dist/commands/check.js +0 -151
- package/dist/commands/check.js.map +0 -1
- package/dist/commands/config.d.ts +0 -3
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -235
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/debug-patterns.d.ts +0 -3
- package/dist/commands/debug-patterns.d.ts.map +0 -1
- package/dist/commands/debug-patterns.js +0 -192
- package/dist/commands/debug-patterns.js.map +0 -1
- package/dist/commands/debug-patterns.test.d.ts +0 -2
- package/dist/commands/debug-patterns.test.d.ts.map +0 -1
- package/dist/commands/debug-patterns.test.js +0 -109
- package/dist/commands/debug-patterns.test.js.map +0 -1
- package/dist/commands/diagnose.d.ts +0 -3
- package/dist/commands/diagnose.d.ts.map +0 -1
- package/dist/commands/diagnose.js +0 -117
- package/dist/commands/diagnose.js.map +0 -1
- package/dist/commands/init.d.ts +0 -8
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -450
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/init.test.d.ts +0 -2
- package/dist/commands/init.test.d.ts.map +0 -1
- package/dist/commands/init.test.js +0 -74
- package/dist/commands/init.test.js.map +0 -1
- package/dist/commands/install-hooks.d.ts +0 -3
- package/dist/commands/install-hooks.d.ts.map +0 -1
- package/dist/commands/install-hooks.js +0 -52
- package/dist/commands/install-hooks.js.map +0 -1
- package/dist/commands/preflight.d.ts +0 -7
- package/dist/commands/preflight.d.ts.map +0 -1
- package/dist/commands/preflight.js +0 -417
- package/dist/commands/preflight.js.map +0 -1
- package/dist/commands/preflight.test.d.ts +0 -5
- package/dist/commands/preflight.test.d.ts.map +0 -1
- package/dist/commands/preflight.test.js +0 -108
- package/dist/commands/preflight.test.js.map +0 -1
- package/dist/commands/rename.d.ts +0 -6
- package/dist/commands/rename.d.ts.map +0 -1
- package/dist/commands/rename.js +0 -204
- package/dist/commands/rename.js.map +0 -1
- package/dist/commands/scaffold-adapter.d.ts +0 -3
- package/dist/commands/scaffold-adapter.d.ts.map +0 -1
- package/dist/commands/scaffold-adapter.js +0 -204
- package/dist/commands/scaffold-adapter.js.map +0 -1
- package/dist/commands/scaffold-adapter.test.d.ts +0 -2
- package/dist/commands/scaffold-adapter.test.d.ts.map +0 -1
- package/dist/commands/scaffold-adapter.test.js +0 -102
- package/dist/commands/scaffold-adapter.test.js.map +0 -1
- package/dist/commands/scan.d.ts +0 -3
- package/dist/commands/scan.d.ts.map +0 -1
- package/dist/commands/scan.js +0 -93
- package/dist/commands/scan.js.map +0 -1
- package/dist/commands/sync-seed.test.d.ts +0 -2
- package/dist/commands/sync-seed.test.d.ts.map +0 -1
- package/dist/commands/sync-seed.test.js +0 -86
- package/dist/commands/sync-seed.test.js.map +0 -1
- package/dist/commands/sync.d.ts +0 -3
- package/dist/commands/sync.d.ts.map +0 -1
- package/dist/commands/sync.js +0 -590
- package/dist/commands/sync.js.map +0 -1
- package/dist/commands/transform.d.ts +0 -3
- package/dist/commands/transform.d.ts.map +0 -1
- package/dist/commands/transform.js +0 -114
- package/dist/commands/transform.js.map +0 -1
- package/dist/commands/translate/csv-handler.d.ts +0 -21
- package/dist/commands/translate/csv-handler.d.ts.map +0 -1
- package/dist/commands/translate/csv-handler.js +0 -270
- package/dist/commands/translate/csv-handler.js.map +0 -1
- package/dist/commands/translate/executor.d.ts +0 -31
- package/dist/commands/translate/executor.d.ts.map +0 -1
- package/dist/commands/translate/executor.js +0 -117
- package/dist/commands/translate/executor.js.map +0 -1
- package/dist/commands/translate/index.d.ts +0 -10
- package/dist/commands/translate/index.d.ts.map +0 -1
- package/dist/commands/translate/index.js +0 -170
- package/dist/commands/translate/index.js.map +0 -1
- package/dist/commands/translate/reporter.d.ts +0 -29
- package/dist/commands/translate/reporter.d.ts.map +0 -1
- package/dist/commands/translate/reporter.js +0 -103
- package/dist/commands/translate/reporter.js.map +0 -1
- package/dist/commands/translate/types.d.ts +0 -50
- package/dist/commands/translate/types.d.ts.map +0 -1
- package/dist/commands/translate/types.js +0 -5
- package/dist/commands/translate/types.js.map +0 -1
- package/dist/commands/translate.d.ts +0 -7
- package/dist/commands/translate.d.ts.map +0 -1
- package/dist/commands/translate.js +0 -7
- package/dist/commands/translate.js.map +0 -1
- package/dist/commands/translate.test.d.ts +0 -2
- package/dist/commands/translate.test.d.ts.map +0 -1
- package/dist/commands/translate.test.js +0 -118
- package/dist/commands/translate.test.js.map +0 -1
- package/dist/e2e.test.d.ts +0 -6
- package/dist/e2e.test.d.ts.map +0 -1
- package/dist/e2e.test.js +0 -376
- package/dist/e2e.test.js.map +0 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +0 -1
- package/dist/integration.test.d.ts +0 -6
- package/dist/integration.test.d.ts.map +0 -1
- package/dist/integration.test.js +0 -320
- package/dist/integration.test.js.map +0 -1
- package/dist/utils/diagnostics-exit.d.ts +0 -12
- package/dist/utils/diagnostics-exit.d.ts.map +0 -1
- package/dist/utils/diagnostics-exit.js +0 -49
- package/dist/utils/diagnostics-exit.js.map +0 -1
- package/dist/utils/diagnostics-exit.test.d.ts +0 -2
- package/dist/utils/diagnostics-exit.test.d.ts.map +0 -1
- package/dist/utils/diagnostics-exit.test.js +0 -40
- package/dist/utils/diagnostics-exit.test.js.map +0 -1
- package/dist/utils/diff-utils.d.ts +0 -4
- package/dist/utils/diff-utils.d.ts.map +0 -1
- package/dist/utils/diff-utils.js +0 -30
- package/dist/utils/diff-utils.js.map +0 -1
- package/dist/utils/diff-utils.test.d.ts +0 -2
- package/dist/utils/diff-utils.test.d.ts.map +0 -1
- package/dist/utils/diff-utils.test.js +0 -30
- package/dist/utils/diff-utils.test.js.map +0 -1
- package/dist/utils/exit-codes.d.ts +0 -142
- package/dist/utils/exit-codes.d.ts.map +0 -1
- package/dist/utils/exit-codes.js +0 -168
- package/dist/utils/exit-codes.js.map +0 -1
- package/dist/utils/package-manager.d.ts +0 -4
- package/dist/utils/package-manager.d.ts.map +0 -1
- package/dist/utils/package-manager.js +0 -40
- package/dist/utils/package-manager.js.map +0 -1
- package/dist/utils/pkg.d.ts +0 -3
- package/dist/utils/pkg.d.ts.map +0 -1
- package/dist/utils/pkg.js +0 -24
- package/dist/utils/pkg.js.map +0 -1
- package/dist/utils/provider-injector.d.ts +0 -36
- package/dist/utils/provider-injector.d.ts.map +0 -1
- package/dist/utils/provider-injector.js +0 -223
- package/dist/utils/provider-injector.js.map +0 -1
- package/dist/utils/provider-injector.test.d.ts +0 -2
- package/dist/utils/provider-injector.test.d.ts.map +0 -1
- package/dist/utils/provider-injector.test.js +0 -67
- package/dist/utils/provider-injector.test.js.map +0 -1
- package/dist/utils/scaffold.d.ts +0 -20
- package/dist/utils/scaffold.d.ts.map +0 -1
- package/dist/utils/scaffold.js +0 -197
- package/dist/utils/scaffold.js.map +0 -1
package/dist/commands/config.js
DELETED
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
import fs from 'fs/promises';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
|
-
import { loadConfigWithMeta, DEFAULT_CONFIG_FILENAME } from '@i18nsmith/core';
|
|
5
|
-
/**
|
|
6
|
-
* Parse a dot-notation key path into segments.
|
|
7
|
-
* e.g., 'translationAdapter.module' => ['translationAdapter', 'module']
|
|
8
|
-
*/
|
|
9
|
-
function parseKeyPath(keyPath) {
|
|
10
|
-
return keyPath.split('.').filter(Boolean);
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Get a nested value from an object using a key path.
|
|
14
|
-
*/
|
|
15
|
-
function getNestedValue(obj, keyPath) {
|
|
16
|
-
let current = obj;
|
|
17
|
-
for (const key of keyPath) {
|
|
18
|
-
if (current === null || current === undefined || typeof current !== 'object') {
|
|
19
|
-
return undefined;
|
|
20
|
-
}
|
|
21
|
-
current = current[key];
|
|
22
|
-
}
|
|
23
|
-
return current;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Set a nested value in an object using a key path.
|
|
27
|
-
* Creates intermediate objects as needed.
|
|
28
|
-
*/
|
|
29
|
-
function setNestedValue(obj, keyPath, value) {
|
|
30
|
-
let current = obj;
|
|
31
|
-
for (let i = 0; i < keyPath.length - 1; i++) {
|
|
32
|
-
const key = keyPath[i];
|
|
33
|
-
if (!(key in current) || typeof current[key] !== 'object' || current[key] === null) {
|
|
34
|
-
current[key] = {};
|
|
35
|
-
}
|
|
36
|
-
current = current[key];
|
|
37
|
-
}
|
|
38
|
-
const finalKey = keyPath[keyPath.length - 1];
|
|
39
|
-
current[finalKey] = value;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Parse a value string into an appropriate type.
|
|
43
|
-
* Handles booleans, numbers, arrays, and strings.
|
|
44
|
-
*/
|
|
45
|
-
function parseValue(valueStr) {
|
|
46
|
-
// Boolean
|
|
47
|
-
if (valueStr === 'true')
|
|
48
|
-
return true;
|
|
49
|
-
if (valueStr === 'false')
|
|
50
|
-
return false;
|
|
51
|
-
// Null
|
|
52
|
-
if (valueStr === 'null')
|
|
53
|
-
return null;
|
|
54
|
-
// Number
|
|
55
|
-
if (/^-?\d+(\.\d+)?$/.test(valueStr)) {
|
|
56
|
-
return parseFloat(valueStr);
|
|
57
|
-
}
|
|
58
|
-
// JSON array or object
|
|
59
|
-
if ((valueStr.startsWith('[') && valueStr.endsWith(']')) ||
|
|
60
|
-
(valueStr.startsWith('{') && valueStr.endsWith('}'))) {
|
|
61
|
-
try {
|
|
62
|
-
return JSON.parse(valueStr);
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
// Fall through to string
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// Remove surrounding quotes if present
|
|
69
|
-
if ((valueStr.startsWith('"') && valueStr.endsWith('"')) ||
|
|
70
|
-
(valueStr.startsWith("'") && valueStr.endsWith("'"))) {
|
|
71
|
-
return valueStr.slice(1, -1);
|
|
72
|
-
}
|
|
73
|
-
return valueStr;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Read the raw config file content (unparsed JSON with comments preserved formatting).
|
|
77
|
-
*/
|
|
78
|
-
async function readRawConfig(configPath) {
|
|
79
|
-
const content = await fs.readFile(configPath, 'utf-8');
|
|
80
|
-
const parsed = JSON.parse(content);
|
|
81
|
-
return { content, parsed };
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Write config back to file with nice formatting.
|
|
85
|
-
*/
|
|
86
|
-
async function writeConfig(configPath, config) {
|
|
87
|
-
const content = JSON.stringify(config, null, 2);
|
|
88
|
-
await fs.writeFile(configPath, content, 'utf-8');
|
|
89
|
-
}
|
|
90
|
-
export function registerConfig(program) {
|
|
91
|
-
const configCmd = program
|
|
92
|
-
.command('config')
|
|
93
|
-
.description('View or modify i18nsmith configuration');
|
|
94
|
-
// Subcommand: config get <key>
|
|
95
|
-
configCmd
|
|
96
|
-
.command('get <key>')
|
|
97
|
-
.description('Get a configuration value by key path (e.g., translationAdapter.module)')
|
|
98
|
-
.option('-c, --config <path>', 'Path to i18nsmith config file', DEFAULT_CONFIG_FILENAME)
|
|
99
|
-
.option('--json', 'Output as JSON', false)
|
|
100
|
-
.action(async (key, options) => {
|
|
101
|
-
try {
|
|
102
|
-
const { config, configPath } = await loadConfigWithMeta(options.config);
|
|
103
|
-
const keyPath = parseKeyPath(key);
|
|
104
|
-
const value = getNestedValue(config, keyPath);
|
|
105
|
-
if (value === undefined) {
|
|
106
|
-
console.log(chalk.yellow(`Key "${key}" not found in config`));
|
|
107
|
-
process.exitCode = 1;
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
if (options.json) {
|
|
111
|
-
console.log(JSON.stringify({ key, value }, null, 2));
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
if (typeof value === 'object' && value !== null) {
|
|
115
|
-
console.log(JSON.stringify(value, null, 2));
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
console.log(String(value));
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
catch (error) {
|
|
123
|
-
console.error(chalk.red('Failed to get config:'), error.message);
|
|
124
|
-
process.exitCode = 1;
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
// Subcommand: config set <key> <value>
|
|
128
|
-
configCmd
|
|
129
|
-
.command('set <key> <value>')
|
|
130
|
-
.description('Set a configuration value by key path (e.g., translationAdapter.module "src/i18n.ts")')
|
|
131
|
-
.option('-c, --config <path>', 'Path to i18nsmith config file', DEFAULT_CONFIG_FILENAME)
|
|
132
|
-
.option('--json', 'Output result as JSON', false)
|
|
133
|
-
.action(async (key, value, options) => {
|
|
134
|
-
try {
|
|
135
|
-
const { configPath } = await loadConfigWithMeta(options.config);
|
|
136
|
-
const { parsed } = await readRawConfig(configPath);
|
|
137
|
-
const keyPath = parseKeyPath(key);
|
|
138
|
-
const parsedValue = parseValue(value);
|
|
139
|
-
setNestedValue(parsed, keyPath, parsedValue);
|
|
140
|
-
await writeConfig(configPath, parsed);
|
|
141
|
-
if (options.json) {
|
|
142
|
-
console.log(JSON.stringify({ key, value: parsedValue, configPath }, null, 2));
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
console.log(chalk.green(`✓ Set ${key} = ${JSON.stringify(parsedValue)}`));
|
|
146
|
-
console.log(chalk.dim(` Updated: ${configPath}`));
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
catch (error) {
|
|
150
|
-
console.error(chalk.red('Failed to set config:'), error.message);
|
|
151
|
-
process.exitCode = 1;
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
// Subcommand: config list
|
|
155
|
-
configCmd
|
|
156
|
-
.command('list')
|
|
157
|
-
.description('List all configuration values')
|
|
158
|
-
.option('-c, --config <path>', 'Path to i18nsmith config file', DEFAULT_CONFIG_FILENAME)
|
|
159
|
-
.option('--json', 'Output as JSON', false)
|
|
160
|
-
.action(async (options) => {
|
|
161
|
-
try {
|
|
162
|
-
const { config, configPath } = await loadConfigWithMeta(options.config);
|
|
163
|
-
if (options.json) {
|
|
164
|
-
console.log(JSON.stringify(config, null, 2));
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
console.log(chalk.blue(`Configuration from: ${configPath}`));
|
|
168
|
-
console.log();
|
|
169
|
-
console.log(JSON.stringify(config, null, 2));
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
catch (error) {
|
|
173
|
-
console.error(chalk.red('Failed to read config:'), error.message);
|
|
174
|
-
process.exitCode = 1;
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
// Subcommand: config path
|
|
178
|
-
configCmd
|
|
179
|
-
.command('path')
|
|
180
|
-
.description('Print the path to the active config file')
|
|
181
|
-
.option('-c, --config <path>', 'Path to i18nsmith config file', DEFAULT_CONFIG_FILENAME)
|
|
182
|
-
.action(async (options) => {
|
|
183
|
-
try {
|
|
184
|
-
const { configPath } = await loadConfigWithMeta(options.config);
|
|
185
|
-
console.log(configPath);
|
|
186
|
-
}
|
|
187
|
-
catch (error) {
|
|
188
|
-
console.error(chalk.red('Failed to find config:'), error.message);
|
|
189
|
-
process.exitCode = 1;
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
// Subcommand: config init-adapter <path>
|
|
193
|
-
configCmd
|
|
194
|
-
.command('init-adapter <adapterPath>')
|
|
195
|
-
.description('Configure a translation adapter module in the config file')
|
|
196
|
-
.option('-c, --config <path>', 'Path to i18nsmith config file', DEFAULT_CONFIG_FILENAME)
|
|
197
|
-
.option('--hook <name>', 'Name of the translation hook (default: useTranslation)', 'useTranslation')
|
|
198
|
-
.option('--json', 'Output result as JSON', false)
|
|
199
|
-
.action(async (adapterPath, options) => {
|
|
200
|
-
try {
|
|
201
|
-
const { configPath } = await loadConfigWithMeta(options.config);
|
|
202
|
-
const { parsed } = await readRawConfig(configPath);
|
|
203
|
-
// Resolve relative path
|
|
204
|
-
const projectRoot = path.dirname(configPath);
|
|
205
|
-
const relativePath = path.isAbsolute(adapterPath)
|
|
206
|
-
? path.relative(projectRoot, adapterPath)
|
|
207
|
-
: adapterPath;
|
|
208
|
-
// Update translationAdapter
|
|
209
|
-
if (!parsed.translationAdapter || typeof parsed.translationAdapter !== 'object') {
|
|
210
|
-
parsed.translationAdapter = {};
|
|
211
|
-
}
|
|
212
|
-
const adapter = parsed.translationAdapter;
|
|
213
|
-
adapter.module = relativePath;
|
|
214
|
-
adapter.hookName = options.hook;
|
|
215
|
-
await writeConfig(configPath, parsed);
|
|
216
|
-
if (options.json) {
|
|
217
|
-
console.log(JSON.stringify({
|
|
218
|
-
translationAdapter: parsed.translationAdapter,
|
|
219
|
-
configPath,
|
|
220
|
-
}, null, 2));
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
console.log(chalk.green('✓ Translation adapter configured:'));
|
|
224
|
-
console.log(chalk.dim(` module: ${relativePath}`));
|
|
225
|
-
console.log(chalk.dim(` hookName: ${options.hook}`));
|
|
226
|
-
console.log(chalk.dim(` Updated: ${configPath}`));
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
catch (error) {
|
|
230
|
-
console.error(chalk.red('Failed to configure adapter:'), error.message);
|
|
231
|
-
process.exitCode = 1;
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"debug-patterns.d.ts","sourceRoot":"","sources":["../../src/commands/debug-patterns.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QA+BrD"}
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import fg from 'fast-glob';
|
|
4
|
-
import { loadConfigWithMeta } from '@i18nsmith/core';
|
|
5
|
-
export function registerDebugPatterns(program) {
|
|
6
|
-
program
|
|
7
|
-
.command('debug-patterns')
|
|
8
|
-
.description('Debug include/exclude glob patterns to understand file matching')
|
|
9
|
-
.option('-c, --config <path>', 'Path to i18nsmith config file', 'i18n.config.json')
|
|
10
|
-
.option('--json', 'Print raw JSON results', false)
|
|
11
|
-
.option('--verbose', 'Show all matched files for each pattern', false)
|
|
12
|
-
.action(async (options) => {
|
|
13
|
-
try {
|
|
14
|
-
const { config, projectRoot, configPath } = await loadConfigWithMeta(options.config);
|
|
15
|
-
console.log(chalk.blue('Debugging glob patterns...'));
|
|
16
|
-
console.log(chalk.gray(`Config: ${path.relative(process.cwd(), configPath)}`));
|
|
17
|
-
console.log(chalk.gray(`Project root: ${projectRoot}\n`));
|
|
18
|
-
const includePatterns = config.include ?? ['**/*.tsx', '**/*.ts', '**/*.jsx', '**/*.js'];
|
|
19
|
-
const excludePatterns = config.exclude ?? ['**/node_modules/**', '**/dist/**', '**/*.test.*', '**/*.spec.*'];
|
|
20
|
-
const summary = await analyzePatterns(projectRoot, includePatterns, excludePatterns, options.verbose);
|
|
21
|
-
if (options.json) {
|
|
22
|
-
console.log(JSON.stringify(summary, null, 2));
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
printPatternAnalysis(summary, options.verbose);
|
|
26
|
-
}
|
|
27
|
-
catch (error) {
|
|
28
|
-
console.error(chalk.red('Pattern debug failed:'), error.message);
|
|
29
|
-
process.exitCode = 1;
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
async function analyzePatterns(projectRoot, includePatterns, excludePatterns, verbose) {
|
|
34
|
-
const includeMatches = [];
|
|
35
|
-
const excludeMatches = [];
|
|
36
|
-
// Analyze each include pattern individually
|
|
37
|
-
for (const pattern of includePatterns) {
|
|
38
|
-
const files = await fg(pattern, {
|
|
39
|
-
cwd: projectRoot,
|
|
40
|
-
ignore: ['**/node_modules/**'],
|
|
41
|
-
onlyFiles: true,
|
|
42
|
-
absolute: false,
|
|
43
|
-
});
|
|
44
|
-
includeMatches.push({
|
|
45
|
-
pattern,
|
|
46
|
-
type: 'include',
|
|
47
|
-
matchedFiles: files.sort(),
|
|
48
|
-
matchCount: files.length,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
// Analyze each exclude pattern individually
|
|
52
|
-
for (const pattern of excludePatterns) {
|
|
53
|
-
const files = await fg(pattern, {
|
|
54
|
-
cwd: projectRoot,
|
|
55
|
-
onlyFiles: true,
|
|
56
|
-
absolute: false,
|
|
57
|
-
});
|
|
58
|
-
excludeMatches.push({
|
|
59
|
-
pattern,
|
|
60
|
-
type: 'exclude',
|
|
61
|
-
matchedFiles: files.sort(),
|
|
62
|
-
matchCount: files.length,
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
// Calculate effective files (include - exclude)
|
|
66
|
-
const allIncluded = new Set();
|
|
67
|
-
for (const match of includeMatches) {
|
|
68
|
-
for (const file of match.matchedFiles) {
|
|
69
|
-
allIncluded.add(file);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
const allExcluded = new Set();
|
|
73
|
-
for (const match of excludeMatches) {
|
|
74
|
-
for (const file of match.matchedFiles) {
|
|
75
|
-
allExcluded.add(file);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
const effectiveFiles = Array.from(allIncluded)
|
|
79
|
-
.filter(file => !allExcluded.has(file))
|
|
80
|
-
.sort();
|
|
81
|
-
// Generate suggestions for unmatched patterns
|
|
82
|
-
const suggestions = generateSuggestions(includeMatches, excludeMatches, projectRoot);
|
|
83
|
-
return {
|
|
84
|
-
projectRoot,
|
|
85
|
-
includePatterns: includeMatches,
|
|
86
|
-
excludePatterns: excludeMatches,
|
|
87
|
-
totalIncluded: allIncluded.size,
|
|
88
|
-
totalExcluded: allExcluded.size,
|
|
89
|
-
effectiveFiles,
|
|
90
|
-
unmatchedSuggestions: suggestions,
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
function generateSuggestions(includeMatches, excludeMatches, projectRoot) {
|
|
94
|
-
const suggestions = [];
|
|
95
|
-
// Check for patterns with no matches
|
|
96
|
-
for (const match of includeMatches) {
|
|
97
|
-
if (match.matchCount === 0) {
|
|
98
|
-
const suggestion = suggestPatternFix(match.pattern, projectRoot);
|
|
99
|
-
if (suggestion) {
|
|
100
|
-
suggestions.push(`Include pattern "${match.pattern}" matched 0 files. ${suggestion}`);
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
suggestions.push(`Include pattern "${match.pattern}" matched 0 files. Check if files exist or adjust the pattern.`);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
// Check if excludes are too broad
|
|
108
|
-
const totalIncluded = includeMatches.reduce((sum, m) => sum + m.matchCount, 0);
|
|
109
|
-
const totalExcluded = excludeMatches.reduce((sum, m) => sum + m.matchCount, 0);
|
|
110
|
-
if (totalExcluded > totalIncluded * 0.9 && totalIncluded > 0) {
|
|
111
|
-
suggestions.push('Warning: Exclude patterns are filtering out most files. Consider narrowing exclusions.');
|
|
112
|
-
}
|
|
113
|
-
// Check for common pattern mistakes
|
|
114
|
-
for (const match of includeMatches) {
|
|
115
|
-
if (match.pattern.startsWith('/')) {
|
|
116
|
-
suggestions.push(`Pattern "${match.pattern}" starts with "/" which may not match relative paths. Try "${match.pattern.slice(1)}".`);
|
|
117
|
-
}
|
|
118
|
-
if (match.pattern.includes('\\')) {
|
|
119
|
-
suggestions.push(`Pattern "${match.pattern}" contains backslashes. Use forward slashes "/" for glob patterns.`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
return suggestions;
|
|
123
|
-
}
|
|
124
|
-
function suggestPatternFix(pattern, projectRoot) {
|
|
125
|
-
// Common fixes for patterns that don't match
|
|
126
|
-
// If pattern is like "src/**/*.tsx" but files are in "app/**/*.tsx"
|
|
127
|
-
if (pattern.startsWith('src/')) {
|
|
128
|
-
return 'Try "app/**/*" or check your source directory structure.';
|
|
129
|
-
}
|
|
130
|
-
// If pattern uses .tsx but project has .jsx
|
|
131
|
-
if (pattern.includes('.tsx')) {
|
|
132
|
-
return 'Try replacing ".tsx" with ".jsx" if using JavaScript.';
|
|
133
|
-
}
|
|
134
|
-
// If pattern uses double asterisk incorrectly
|
|
135
|
-
if (pattern.includes('/**') && !pattern.includes('/**/')) {
|
|
136
|
-
return 'Use "**/" for recursive matching (e.g., "src/**/*.tsx").';
|
|
137
|
-
}
|
|
138
|
-
return null;
|
|
139
|
-
}
|
|
140
|
-
function printPatternAnalysis(summary, verbose) {
|
|
141
|
-
console.log(chalk.blue('📁 Include Patterns\n'));
|
|
142
|
-
for (const match of summary.includePatterns) {
|
|
143
|
-
const status = match.matchCount > 0 ? chalk.green('✓') : chalk.red('✗');
|
|
144
|
-
console.log(` ${status} ${chalk.cyan(match.pattern)} → ${match.matchCount} file(s)`);
|
|
145
|
-
if (verbose && match.matchCount > 0) {
|
|
146
|
-
const preview = match.matchedFiles.slice(0, 10);
|
|
147
|
-
preview.forEach(file => console.log(chalk.gray(` • ${file}`)));
|
|
148
|
-
if (match.matchedFiles.length > 10) {
|
|
149
|
-
console.log(chalk.gray(` ... and ${match.matchedFiles.length - 10} more`));
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
console.log(chalk.blue('\n🚫 Exclude Patterns\n'));
|
|
154
|
-
for (const match of summary.excludePatterns) {
|
|
155
|
-
const status = match.matchCount > 0 ? chalk.yellow('⚠') : chalk.gray('○');
|
|
156
|
-
console.log(` ${status} ${chalk.cyan(match.pattern)} → ${match.matchCount} file(s)`);
|
|
157
|
-
if (verbose && match.matchCount > 0) {
|
|
158
|
-
const preview = match.matchedFiles.slice(0, 5);
|
|
159
|
-
preview.forEach(file => console.log(chalk.gray(` • ${file}`)));
|
|
160
|
-
if (match.matchedFiles.length > 5) {
|
|
161
|
-
console.log(chalk.gray(` ... and ${match.matchedFiles.length - 5} more`));
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
console.log(chalk.blue('\n📊 Summary\n'));
|
|
166
|
-
console.log(` Total matched by include patterns: ${summary.totalIncluded}`);
|
|
167
|
-
console.log(` Total matched by exclude patterns: ${summary.totalExcluded}`);
|
|
168
|
-
console.log(chalk.green(` Effective files to scan: ${summary.effectiveFiles.length}`));
|
|
169
|
-
if (verbose && summary.effectiveFiles.length > 0) {
|
|
170
|
-
console.log(chalk.blue('\n📄 Effective Files (first 20)\n'));
|
|
171
|
-
summary.effectiveFiles.slice(0, 20).forEach(file => {
|
|
172
|
-
console.log(chalk.gray(` • ${file}`));
|
|
173
|
-
});
|
|
174
|
-
if (summary.effectiveFiles.length > 20) {
|
|
175
|
-
console.log(chalk.gray(` ... and ${summary.effectiveFiles.length - 20} more`));
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
if (summary.unmatchedSuggestions.length > 0) {
|
|
179
|
-
console.log(chalk.yellow('\n💡 Suggestions\n'));
|
|
180
|
-
summary.unmatchedSuggestions.forEach(suggestion => {
|
|
181
|
-
console.log(chalk.yellow(` • ${suggestion}`));
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
if (summary.effectiveFiles.length === 0) {
|
|
185
|
-
console.log(chalk.red('\n⚠️ No files will be scanned! Check your patterns.'));
|
|
186
|
-
console.log(chalk.gray(' Common issues:'));
|
|
187
|
-
console.log(chalk.gray(' • Include patterns don\'t match your source directory'));
|
|
188
|
-
console.log(chalk.gray(' • Exclude patterns are too broad'));
|
|
189
|
-
console.log(chalk.gray(' • File extensions don\'t match (.tsx vs .jsx, .ts vs .js)'));
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
//# sourceMappingURL=debug-patterns.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"debug-patterns.js","sourceRoot":"","sources":["../../src/commands/debug-patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"debug-patterns.test.d.ts","sourceRoot":"","sources":["../../src/commands/debug-patterns.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
-
import fs from 'fs/promises';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import os from 'os';
|
|
5
|
-
import { spawnSync } from 'child_process';
|
|
6
|
-
import { fileURLToPath } from 'url';
|
|
7
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
-
const __dirname = path.dirname(__filename);
|
|
9
|
-
const CLI_PATH = path.resolve(__dirname, '../../dist/index.js');
|
|
10
|
-
function runCli(args, options = {}) {
|
|
11
|
-
const result = spawnSync('node', [CLI_PATH, ...args], {
|
|
12
|
-
cwd: options.cwd ?? process.cwd(),
|
|
13
|
-
encoding: 'utf8',
|
|
14
|
-
timeout: 30000,
|
|
15
|
-
env: {
|
|
16
|
-
...process.env,
|
|
17
|
-
CI: 'true',
|
|
18
|
-
NO_COLOR: '1',
|
|
19
|
-
FORCE_COLOR: '0',
|
|
20
|
-
},
|
|
21
|
-
});
|
|
22
|
-
return {
|
|
23
|
-
stdout: result.stdout ?? '',
|
|
24
|
-
stderr: result.stderr ?? '',
|
|
25
|
-
output: (result.stdout ?? '') + (result.stderr ?? ''),
|
|
26
|
-
exitCode: result.status ?? 1,
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
describe('debug-patterns command', () => {
|
|
30
|
-
let tmpDir;
|
|
31
|
-
beforeEach(async () => {
|
|
32
|
-
tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'i18nsmith-debug-patterns-'));
|
|
33
|
-
// Create a basic config
|
|
34
|
-
const config = {
|
|
35
|
-
sourceLanguage: 'en',
|
|
36
|
-
targetLanguages: ['fr'],
|
|
37
|
-
localesDir: 'locales',
|
|
38
|
-
include: ['src/**/*.tsx', 'src/**/*.ts'],
|
|
39
|
-
exclude: ['**/*.test.ts', '**/node_modules/**'],
|
|
40
|
-
};
|
|
41
|
-
await fs.writeFile(path.join(tmpDir, 'i18n.config.json'), JSON.stringify(config, null, 2));
|
|
42
|
-
// Create some source files
|
|
43
|
-
await fs.mkdir(path.join(tmpDir, 'src'));
|
|
44
|
-
await fs.writeFile(path.join(tmpDir, 'src', 'App.tsx'), 'export function App() { return <div>Hello</div>; }');
|
|
45
|
-
await fs.writeFile(path.join(tmpDir, 'src', 'utils.ts'), 'export const add = (a: number, b: number) => a + b;');
|
|
46
|
-
await fs.writeFile(path.join(tmpDir, 'src', 'utils.test.ts'), 'test("add", () => expect(add(1, 2)).toBe(3));');
|
|
47
|
-
// Create locales directory
|
|
48
|
-
await fs.mkdir(path.join(tmpDir, 'locales'));
|
|
49
|
-
await fs.writeFile(path.join(tmpDir, 'locales', 'en.json'), '{}');
|
|
50
|
-
});
|
|
51
|
-
afterEach(async () => {
|
|
52
|
-
await fs.rm(tmpDir, { recursive: true, force: true });
|
|
53
|
-
});
|
|
54
|
-
it('should show include patterns with file counts', () => {
|
|
55
|
-
const result = runCli(['debug-patterns'], { cwd: tmpDir });
|
|
56
|
-
expect(result.exitCode).toBe(0);
|
|
57
|
-
expect(result.output).toContain('Include Patterns');
|
|
58
|
-
expect(result.output).toContain('src/**/*.tsx');
|
|
59
|
-
expect(result.output).toContain('src/**/*.ts');
|
|
60
|
-
});
|
|
61
|
-
it('should show exclude patterns', () => {
|
|
62
|
-
const result = runCli(['debug-patterns'], { cwd: tmpDir });
|
|
63
|
-
expect(result.output).toContain('Exclude Patterns');
|
|
64
|
-
expect(result.output).toContain('**/*.test.ts');
|
|
65
|
-
});
|
|
66
|
-
it('should show summary with effective file count', () => {
|
|
67
|
-
const result = runCli(['debug-patterns'], { cwd: tmpDir });
|
|
68
|
-
expect(result.output).toContain('Summary');
|
|
69
|
-
expect(result.output).toContain('Effective files to scan');
|
|
70
|
-
});
|
|
71
|
-
it('should list files in verbose mode', () => {
|
|
72
|
-
const result = runCli(['debug-patterns', '--verbose'], { cwd: tmpDir });
|
|
73
|
-
expect(result.output).toContain('App.tsx');
|
|
74
|
-
expect(result.output).toContain('utils.ts');
|
|
75
|
-
});
|
|
76
|
-
it('should output JSON when --json flag is used', () => {
|
|
77
|
-
const result = runCli(['debug-patterns', '--json'], { cwd: tmpDir });
|
|
78
|
-
// Extract JSON from output
|
|
79
|
-
const jsonMatch = result.stdout.match(/\{[\s\S]*\}/);
|
|
80
|
-
expect(jsonMatch).not.toBeNull();
|
|
81
|
-
const parsed = JSON.parse(jsonMatch[0]);
|
|
82
|
-
expect(parsed).toHaveProperty('includePatterns');
|
|
83
|
-
expect(parsed).toHaveProperty('excludePatterns');
|
|
84
|
-
expect(parsed).toHaveProperty('effectiveFiles');
|
|
85
|
-
expect(Array.isArray(parsed.effectiveFiles)).toBe(true);
|
|
86
|
-
});
|
|
87
|
-
it('should detect unmatched patterns and suggest fixes', async () => {
|
|
88
|
-
// Update config with a pattern that won't match
|
|
89
|
-
const config = {
|
|
90
|
-
sourceLanguage: 'en',
|
|
91
|
-
targetLanguages: ['fr'],
|
|
92
|
-
localesDir: 'locales',
|
|
93
|
-
include: ['app/**/*.tsx', 'src/**/*.tsx'], // app/ doesn't exist
|
|
94
|
-
exclude: ['**/node_modules/**'],
|
|
95
|
-
};
|
|
96
|
-
await fs.writeFile(path.join(tmpDir, 'i18n.config.json'), JSON.stringify(config, null, 2));
|
|
97
|
-
const result = runCli(['debug-patterns'], { cwd: tmpDir });
|
|
98
|
-
// Should show the pattern that matched 0 files
|
|
99
|
-
expect(result.output).toContain('app/**/*.tsx');
|
|
100
|
-
expect(result.output).toContain('0 file(s)');
|
|
101
|
-
});
|
|
102
|
-
it('should handle missing config gracefully', async () => {
|
|
103
|
-
await fs.rm(path.join(tmpDir, 'i18n.config.json'));
|
|
104
|
-
const result = runCli(['debug-patterns'], { cwd: tmpDir });
|
|
105
|
-
expect(result.exitCode).toBe(1);
|
|
106
|
-
expect(result.output).toContain('failed');
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
//# sourceMappingURL=debug-patterns.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"debug-patterns.test.js","sourceRoot":"","sources":["../../src/commands/debug-patterns.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diagnose.d.ts","sourceRoot":"","sources":["../../src/commands/diagnose.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+FzC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAqChD"}
|