i18nsmith 0.1.7 → 0.1.9
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 +31 -0
- package/dist/index.js +109365 -22
- package/package.json +12 -7
- package/dist/commands/audit.js +0 -180
- package/dist/commands/audit.js.map +0 -1
- package/dist/commands/backup.js +0 -85
- package/dist/commands/backup.js.map +0 -1
- package/dist/commands/check.js +0 -151
- package/dist/commands/check.js.map +0 -1
- package/dist/commands/config.js +0 -235
- package/dist/commands/config.js.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.js +0 -109
- package/dist/commands/debug-patterns.test.js.map +0 -1
- package/dist/commands/diagnose.js +0 -117
- package/dist/commands/diagnose.js.map +0 -1
- package/dist/commands/init.js +0 -450
- package/dist/commands/init.js.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.js +0 -52
- package/dist/commands/install-hooks.js.map +0 -1
- package/dist/commands/preflight.js +0 -417
- package/dist/commands/preflight.js.map +0 -1
- package/dist/commands/preflight.test.js +0 -108
- package/dist/commands/preflight.test.js.map +0 -1
- package/dist/commands/rename.js +0 -204
- package/dist/commands/rename.js.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.js +0 -102
- package/dist/commands/scaffold-adapter.test.js.map +0 -1
- package/dist/commands/scan.js +0 -93
- package/dist/commands/scan.js.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.js +0 -590
- package/dist/commands/sync.js.map +0 -1
- package/dist/commands/transform.js +0 -114
- package/dist/commands/transform.js.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.js +0 -117
- package/dist/commands/translate/executor.js.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.js +0 -103
- package/dist/commands/translate/reporter.js.map +0 -1
- package/dist/commands/translate/types.js +0 -5
- package/dist/commands/translate/types.js.map +0 -1
- package/dist/commands/translate.js +0 -7
- package/dist/commands/translate.js.map +0 -1
- package/dist/commands/translate.test.js +0 -118
- package/dist/commands/translate.test.js.map +0 -1
- package/dist/e2e.test.js +0 -376
- package/dist/e2e.test.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/integration.test.js +0 -320
- package/dist/integration.test.js.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.js +0 -40
- package/dist/utils/diagnostics-exit.test.js.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.js +0 -30
- package/dist/utils/diff-utils.test.js.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.js +0 -40
- package/dist/utils/package-manager.js.map +0 -1
- package/dist/utils/pkg.js +0 -24
- package/dist/utils/pkg.js.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.js +0 -67
- package/dist/utils/provider-injector.test.js.map +0 -1
- package/dist/utils/scaffold.js +0 -197
- package/dist/utils/scaffold.js.map +0 -1
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import fs from 'fs/promises';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
|
-
import { loadConfig, diagnoseWorkspace } from '@i18nsmith/core';
|
|
5
|
-
import { getDiagnosisExitSignal } from '../utils/diagnostics-exit.js';
|
|
6
|
-
function printDiagnosisReport(report) {
|
|
7
|
-
console.log(chalk.green(`Locales directory: ${report.localesDir}`));
|
|
8
|
-
console.log(chalk.blue('\nLocales'));
|
|
9
|
-
if (report.localeFiles.length === 0) {
|
|
10
|
-
console.log(chalk.yellow(' • No locale files detected.'));
|
|
11
|
-
}
|
|
12
|
-
else {
|
|
13
|
-
for (const entry of report.localeFiles) {
|
|
14
|
-
const relPath = path.relative(process.cwd(), entry.path);
|
|
15
|
-
const status = entry.missing
|
|
16
|
-
? chalk.red('missing')
|
|
17
|
-
: entry.parseError
|
|
18
|
-
? chalk.red('invalid JSON')
|
|
19
|
-
: `${entry.keyCount} keys`;
|
|
20
|
-
console.log(` • ${entry.locale} — ${status}${entry.missing ? '' : ` (${relPath})`}`);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
console.log(chalk.blue('\nRuntime packages'));
|
|
24
|
-
if (report.runtimePackages.length === 0) {
|
|
25
|
-
console.log(chalk.yellow(' • None detected in package.json.'));
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
for (const pkg of report.runtimePackages) {
|
|
29
|
-
console.log(` • ${pkg.name}@${pkg.version ?? 'latest'} (${pkg.source})`);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
console.log(chalk.blue('\nProvider candidates'));
|
|
33
|
-
if (report.providerFiles.length === 0) {
|
|
34
|
-
console.log(chalk.gray(' • No provider files discovered.'));
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
for (const provider of report.providerFiles) {
|
|
38
|
-
const flags = [];
|
|
39
|
-
if (provider.frameworkHint !== 'unknown') {
|
|
40
|
-
flags.push(provider.frameworkHint);
|
|
41
|
-
}
|
|
42
|
-
if (provider.hasI18nProvider) {
|
|
43
|
-
flags.push('wraps <I18nProvider>');
|
|
44
|
-
}
|
|
45
|
-
if (provider.usesTranslationHook) {
|
|
46
|
-
flags.push('imports translation hook');
|
|
47
|
-
}
|
|
48
|
-
const flagLabel = flags.length ? ` (${flags.join(', ')})` : '';
|
|
49
|
-
console.log(` • ${provider.relativePath}${flagLabel}`);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
console.log(chalk.blue('\nTranslation usage'));
|
|
53
|
-
console.log(` • Files scanned: ${report.translationUsage.filesExamined} — ` +
|
|
54
|
-
`${report.translationUsage.hookOccurrences} ${report.translationUsage.hookName} hooks, ` +
|
|
55
|
-
`${report.translationUsage.identifierOccurrences} ${report.translationUsage.translationIdentifier}() calls`);
|
|
56
|
-
if (report.translationUsage.hookExampleFiles.length) {
|
|
57
|
-
console.log(chalk.gray(` Examples: ${report.translationUsage.hookExampleFiles.concat(report.translationUsage.identifierExampleFiles).slice(0, 5).join(', ')}`));
|
|
58
|
-
}
|
|
59
|
-
if (report.actionableItems.length) {
|
|
60
|
-
console.log(chalk.blue('\nActionable items'));
|
|
61
|
-
for (const item of report.actionableItems) {
|
|
62
|
-
const label = item.severity === 'error' ? chalk.red('ERROR') : item.severity === 'warn' ? chalk.yellow('WARN') : chalk.cyan('INFO');
|
|
63
|
-
console.log(` • [${label}] ${item.message}`);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
if (report.recommendations.length) {
|
|
67
|
-
console.log(chalk.blue('\nRecommendations'));
|
|
68
|
-
for (const rec of report.recommendations) {
|
|
69
|
-
console.log(` • ${rec}`);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (report.conflicts.length) {
|
|
73
|
-
console.log(chalk.red('\nConflicts'));
|
|
74
|
-
for (const conflict of report.conflicts) {
|
|
75
|
-
const files = conflict.files?.length ? ` (${conflict.files.join(', ')})` : '';
|
|
76
|
-
console.log(` • ${conflict.message}${files}`);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
export function registerDiagnose(program) {
|
|
81
|
-
program
|
|
82
|
-
.command('diagnose')
|
|
83
|
-
.description('Detect existing i18n assets and potential merge conflicts')
|
|
84
|
-
.option('-c, --config <path>', 'Path to i18nsmith config file', 'i18n.config.json')
|
|
85
|
-
.option('--json', 'Print raw JSON results', false)
|
|
86
|
-
.option('--report <path>', 'Write JSON report to a file (for CI or editors)')
|
|
87
|
-
.action(async (options) => {
|
|
88
|
-
console.log(chalk.blue('Running repository diagnostics...'));
|
|
89
|
-
try {
|
|
90
|
-
const config = await loadConfig(options.config);
|
|
91
|
-
const report = await diagnoseWorkspace(config);
|
|
92
|
-
if (options.report) {
|
|
93
|
-
const outputPath = path.resolve(process.cwd(), options.report);
|
|
94
|
-
await fs.mkdir(path.dirname(outputPath), { recursive: true });
|
|
95
|
-
await fs.writeFile(outputPath, JSON.stringify(report, null, 2));
|
|
96
|
-
console.log(chalk.green(`Diagnosis report written to ${outputPath}`));
|
|
97
|
-
}
|
|
98
|
-
if (options.json) {
|
|
99
|
-
console.log(JSON.stringify(report, null, 2));
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
printDiagnosisReport(report);
|
|
103
|
-
}
|
|
104
|
-
const exitSignal = getDiagnosisExitSignal(report);
|
|
105
|
-
if (exitSignal) {
|
|
106
|
-
console.error(chalk.red(`\nBlocking conflicts detected (${report.conflicts.length}).`));
|
|
107
|
-
console.error(chalk.red(`Exit code ${exitSignal.code}: ${exitSignal.reason}`));
|
|
108
|
-
process.exitCode = exitSignal.code;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
catch (error) {
|
|
112
|
-
console.error(chalk.red('Diagnose failed:'), error.message);
|
|
113
|
-
process.exitCode = 1;
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=diagnose.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/commands/diagnose.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.js
DELETED
|
@@ -1,450 +0,0 @@
|
|
|
1
|
-
import inquirer from 'inquirer';
|
|
2
|
-
import fs from 'fs/promises';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import chalk from 'chalk';
|
|
5
|
-
import { diagnoseWorkspace, ensureGitignore } from '@i18nsmith/core';
|
|
6
|
-
import { scaffoldTranslationContext, scaffoldI18next } from '../utils/scaffold.js';
|
|
7
|
-
import { hasDependency, readPackageJson } from '../utils/pkg.js';
|
|
8
|
-
/**
|
|
9
|
-
* Parse a comma-separated list of glob patterns, respecting brace expansions.
|
|
10
|
-
* Brace-expanded globs like `src/**\/*.{ts,tsx}` are kept as a single token.
|
|
11
|
-
*/
|
|
12
|
-
export function parseGlobList(value) {
|
|
13
|
-
const result = [];
|
|
14
|
-
let current = '';
|
|
15
|
-
let braceDepth = 0;
|
|
16
|
-
for (const char of value) {
|
|
17
|
-
if (char === '{') {
|
|
18
|
-
braceDepth++;
|
|
19
|
-
current += char;
|
|
20
|
-
}
|
|
21
|
-
else if (char === '}') {
|
|
22
|
-
braceDepth = Math.max(0, braceDepth - 1);
|
|
23
|
-
current += char;
|
|
24
|
-
}
|
|
25
|
-
else if (char === ',' && braceDepth === 0) {
|
|
26
|
-
const trimmed = current.trim();
|
|
27
|
-
if (trimmed)
|
|
28
|
-
result.push(trimmed);
|
|
29
|
-
current = '';
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
current += char;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
const trimmed = current.trim();
|
|
36
|
-
if (trimmed)
|
|
37
|
-
result.push(trimmed);
|
|
38
|
-
return result;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Run init in non-interactive mode with sensible defaults.
|
|
42
|
-
* Auto-detects existing adapters and locales.
|
|
43
|
-
*/
|
|
44
|
-
async function runNonInteractiveInit(commandOptions) {
|
|
45
|
-
const workspaceRoot = process.cwd();
|
|
46
|
-
const configPath = path.join(workspaceRoot, 'i18n.config.json');
|
|
47
|
-
// Check if config already exists
|
|
48
|
-
try {
|
|
49
|
-
await fs.access(configPath);
|
|
50
|
-
if (!commandOptions.merge) {
|
|
51
|
-
console.log(chalk.yellow('Config file already exists. Use --merge to update existing config.'));
|
|
52
|
-
console.log(chalk.dim(` ${configPath}`));
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
catch {
|
|
57
|
-
// Config doesn't exist, proceed
|
|
58
|
-
}
|
|
59
|
-
// Create a minimal config for diagnostics
|
|
60
|
-
const minimalConfig = {
|
|
61
|
-
version: 1,
|
|
62
|
-
sourceLanguage: 'en',
|
|
63
|
-
targetLanguages: [],
|
|
64
|
-
localesDir: 'locales',
|
|
65
|
-
include: ['src/**/*.{ts,tsx,js,jsx}'],
|
|
66
|
-
exclude: ['node_modules/**'],
|
|
67
|
-
minTextLength: 1,
|
|
68
|
-
translation: { provider: 'manual' },
|
|
69
|
-
translationAdapter: { module: 'react-i18next', hookName: 'useTranslation' },
|
|
70
|
-
keyGeneration: { namespace: 'common', shortHashLen: 6 },
|
|
71
|
-
seedTargetLocales: false,
|
|
72
|
-
};
|
|
73
|
-
// Try to detect existing setup
|
|
74
|
-
let detectedAdapter;
|
|
75
|
-
let detectedLocales = [];
|
|
76
|
-
try {
|
|
77
|
-
const report = await diagnoseWorkspace(minimalConfig, { workspaceRoot });
|
|
78
|
-
// Detect adapter files
|
|
79
|
-
if (report.adapterFiles.length > 0) {
|
|
80
|
-
detectedAdapter = report.adapterFiles[0].path;
|
|
81
|
-
console.log(chalk.blue(`Detected adapter: ${detectedAdapter}`));
|
|
82
|
-
}
|
|
83
|
-
// Detect existing locales
|
|
84
|
-
const existingLocales = report.localeFiles.filter((entry) => !entry.missing && !entry.parseError);
|
|
85
|
-
if (existingLocales.length > 0) {
|
|
86
|
-
detectedLocales = existingLocales.map((entry) => entry.locale);
|
|
87
|
-
console.log(chalk.blue(`Detected locales: ${detectedLocales.join(', ')}`));
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
console.log(chalk.dim(`Could not run diagnostics: ${error.message}`));
|
|
92
|
-
}
|
|
93
|
-
// Determine source and target languages from detected locales
|
|
94
|
-
let sourceLanguage = 'en';
|
|
95
|
-
let targetLanguages = [];
|
|
96
|
-
if (detectedLocales.length > 0) {
|
|
97
|
-
// Use 'en' as source if present, otherwise first detected locale
|
|
98
|
-
if (detectedLocales.includes('en')) {
|
|
99
|
-
sourceLanguage = 'en';
|
|
100
|
-
targetLanguages = detectedLocales.filter((l) => l !== 'en');
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
sourceLanguage = detectedLocales[0];
|
|
104
|
-
targetLanguages = detectedLocales.slice(1);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
// Build the config
|
|
108
|
-
const config = {
|
|
109
|
-
version: 1,
|
|
110
|
-
sourceLanguage,
|
|
111
|
-
targetLanguages,
|
|
112
|
-
localesDir: 'locales',
|
|
113
|
-
include: [
|
|
114
|
-
'src/**/*.{ts,tsx,js,jsx}',
|
|
115
|
-
'app/**/*.{ts,tsx,js,jsx}',
|
|
116
|
-
'pages/**/*.{ts,tsx,js,jsx}',
|
|
117
|
-
'components/**/*.{ts,tsx,js,jsx}',
|
|
118
|
-
],
|
|
119
|
-
exclude: ['node_modules/**', '**/*.test.*'],
|
|
120
|
-
minTextLength: 1,
|
|
121
|
-
translation: { provider: 'manual' },
|
|
122
|
-
translationAdapter: {
|
|
123
|
-
module: detectedAdapter ?? 'react-i18next',
|
|
124
|
-
hookName: 'useTranslation',
|
|
125
|
-
},
|
|
126
|
-
keyGeneration: {
|
|
127
|
-
namespace: 'common',
|
|
128
|
-
shortHashLen: 6,
|
|
129
|
-
},
|
|
130
|
-
seedTargetLocales: false,
|
|
131
|
-
};
|
|
132
|
-
try {
|
|
133
|
-
await fs.writeFile(configPath, JSON.stringify(config, null, 2));
|
|
134
|
-
console.log(chalk.green(`\n✓ Configuration created at ${configPath}`));
|
|
135
|
-
console.log(chalk.dim(' Source language: ' + sourceLanguage));
|
|
136
|
-
if (targetLanguages.length > 0) {
|
|
137
|
-
console.log(chalk.dim(' Target languages: ' + targetLanguages.join(', ')));
|
|
138
|
-
}
|
|
139
|
-
if (detectedAdapter) {
|
|
140
|
-
console.log(chalk.dim(' Adapter: ' + detectedAdapter));
|
|
141
|
-
}
|
|
142
|
-
// Ensure .gitignore has i18nsmith artifacts
|
|
143
|
-
const gitignoreResult = await ensureGitignore(workspaceRoot);
|
|
144
|
-
if (gitignoreResult.updated) {
|
|
145
|
-
console.log(chalk.green(`✓ Updated .gitignore with i18nsmith artifacts`));
|
|
146
|
-
}
|
|
147
|
-
console.log(chalk.blue('\nRun "i18nsmith check" to verify your setup.'));
|
|
148
|
-
}
|
|
149
|
-
catch (error) {
|
|
150
|
-
console.error(chalk.red('Failed to write configuration file:'), error);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
export function registerInit(program) {
|
|
154
|
-
program
|
|
155
|
-
.command('init')
|
|
156
|
-
.description('Initialize i18nsmith configuration')
|
|
157
|
-
.option('--merge', 'Merge with existing locales/runtimes when detected', false)
|
|
158
|
-
.option('-y, --yes', 'Skip prompts and use defaults (non-interactive mode)', false)
|
|
159
|
-
.action(async (commandOptions) => {
|
|
160
|
-
console.log(chalk.blue('Initializing i18nsmith configuration...'));
|
|
161
|
-
// Non-interactive mode with sensible defaults
|
|
162
|
-
if (commandOptions.yes) {
|
|
163
|
-
await runNonInteractiveInit(commandOptions);
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
const answers = await inquirer.prompt([
|
|
167
|
-
{
|
|
168
|
-
type: 'input',
|
|
169
|
-
name: 'sourceLanguage',
|
|
170
|
-
message: 'What is the source language?',
|
|
171
|
-
default: 'en',
|
|
172
|
-
},
|
|
173
|
-
{
|
|
174
|
-
type: 'input',
|
|
175
|
-
name: 'targetLanguages',
|
|
176
|
-
message: 'Which target languages do you need? (comma separated)',
|
|
177
|
-
default: 'fr',
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
type: 'input',
|
|
181
|
-
name: 'localesDir',
|
|
182
|
-
message: 'Where should locale files be stored?',
|
|
183
|
-
default: 'locales',
|
|
184
|
-
},
|
|
185
|
-
{
|
|
186
|
-
type: 'input',
|
|
187
|
-
name: 'include',
|
|
188
|
-
message: 'Which files should be scanned? (comma separated glob patterns)',
|
|
189
|
-
default: 'src/**/*.{ts,tsx,js,jsx}, app/**/*.{ts,tsx,js,jsx}, pages/**/*.{ts,tsx,js,jsx}, components/**/*.{ts,tsx,js,jsx}',
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
type: 'input',
|
|
193
|
-
name: 'exclude',
|
|
194
|
-
message: 'Which files should be excluded? (comma separated glob patterns)',
|
|
195
|
-
default: 'node_modules/**,**/*.test.*',
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
type: 'input',
|
|
199
|
-
name: 'minTextLength',
|
|
200
|
-
message: 'Minimum length for translatable text?',
|
|
201
|
-
default: '1',
|
|
202
|
-
validate: (input) => {
|
|
203
|
-
const num = parseInt(input, 10);
|
|
204
|
-
return !isNaN(num) && num >= 0 ? true : 'Please enter a non-negative number';
|
|
205
|
-
},
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
type: 'list',
|
|
209
|
-
name: 'service',
|
|
210
|
-
message: 'Which translation service do you want to use?',
|
|
211
|
-
choices: ['google', 'deepl', 'manual'],
|
|
212
|
-
default: 'google',
|
|
213
|
-
},
|
|
214
|
-
{
|
|
215
|
-
type: 'input',
|
|
216
|
-
name: 'translationSecretEnvVar',
|
|
217
|
-
message: 'Name of the environment variable containing your translation API key',
|
|
218
|
-
when: (answers) => answers.service !== 'manual',
|
|
219
|
-
default: (answers) => answers.service === 'deepl' ? 'DEEPL_API_KEY' : 'GOOGLE_TRANSLATE_API_KEY',
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
type: 'list',
|
|
223
|
-
name: 'adapterPreset',
|
|
224
|
-
message: 'How should transformed components access translations?',
|
|
225
|
-
choices: [
|
|
226
|
-
{ name: 'react-i18next (default)', value: 'react-i18next' },
|
|
227
|
-
{ name: 'Custom hook/module', value: 'custom' },
|
|
228
|
-
],
|
|
229
|
-
default: 'react-i18next',
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
type: 'input',
|
|
233
|
-
name: 'customAdapterModule',
|
|
234
|
-
message: 'Provide the module specifier for your translation hook (e.g. "@/contexts/translation-context")',
|
|
235
|
-
when: (answers) => answers.adapterPreset === 'custom',
|
|
236
|
-
validate: (input) => (input && input.trim().length > 0 ? true : 'Module specifier cannot be empty'),
|
|
237
|
-
},
|
|
238
|
-
{
|
|
239
|
-
type: 'input',
|
|
240
|
-
name: 'customAdapterHook',
|
|
241
|
-
message: 'Name of the hook/function to import (default: useTranslation)',
|
|
242
|
-
when: (answers) => answers.adapterPreset === 'custom',
|
|
243
|
-
default: 'useTranslation',
|
|
244
|
-
},
|
|
245
|
-
{
|
|
246
|
-
type: 'confirm',
|
|
247
|
-
name: 'scaffoldAdapter',
|
|
248
|
-
message: 'Scaffold a lightweight translation context file?',
|
|
249
|
-
when: (answers) => answers.adapterPreset === 'custom',
|
|
250
|
-
default: true,
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
type: 'input',
|
|
254
|
-
name: 'scaffoldAdapterPath',
|
|
255
|
-
message: 'Path to scaffold the translation context file (relative to project root)',
|
|
256
|
-
when: (answers) => answers.scaffoldAdapter,
|
|
257
|
-
default: 'src/contexts/translation-context.tsx',
|
|
258
|
-
},
|
|
259
|
-
{
|
|
260
|
-
type: 'confirm',
|
|
261
|
-
name: 'scaffoldReactRuntime',
|
|
262
|
-
message: 'Scaffold i18next initializer and provider?',
|
|
263
|
-
when: (answers) => answers.adapterPreset === 'react-i18next',
|
|
264
|
-
default: true,
|
|
265
|
-
},
|
|
266
|
-
{
|
|
267
|
-
type: 'input',
|
|
268
|
-
name: 'reactI18nPath',
|
|
269
|
-
message: 'Path for i18next initializer (e.g. src/lib/i18n.ts)',
|
|
270
|
-
when: (answers) => answers.scaffoldReactRuntime,
|
|
271
|
-
default: 'src/lib/i18n.ts',
|
|
272
|
-
},
|
|
273
|
-
{
|
|
274
|
-
type: 'input',
|
|
275
|
-
name: 'reactProviderPath',
|
|
276
|
-
message: 'Path for I18nProvider component (e.g. src/components/i18n-provider.tsx)',
|
|
277
|
-
when: (answers) => answers.scaffoldReactRuntime,
|
|
278
|
-
default: 'src/components/i18n-provider.tsx',
|
|
279
|
-
},
|
|
280
|
-
{
|
|
281
|
-
type: 'input',
|
|
282
|
-
name: 'keyNamespace',
|
|
283
|
-
message: 'Namespace prefix for generated keys',
|
|
284
|
-
default: 'common',
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
type: 'input',
|
|
288
|
-
name: 'shortHashLen',
|
|
289
|
-
message: 'Length of short hash suffix for keys',
|
|
290
|
-
default: '6',
|
|
291
|
-
validate: (input) => {
|
|
292
|
-
const num = parseInt(input, 10);
|
|
293
|
-
return !isNaN(num) && num > 0 ? true : 'Please enter a positive number';
|
|
294
|
-
},
|
|
295
|
-
},
|
|
296
|
-
{
|
|
297
|
-
type: 'confirm',
|
|
298
|
-
name: 'seedTargetLocales',
|
|
299
|
-
message: 'Seed target locale files with empty values?',
|
|
300
|
-
default: false,
|
|
301
|
-
},
|
|
302
|
-
]);
|
|
303
|
-
const adapterModule = answers.adapterPreset === 'custom'
|
|
304
|
-
? answers.customAdapterModule?.trim()
|
|
305
|
-
: 'react-i18next';
|
|
306
|
-
const adapterHook = answers.adapterPreset === 'custom'
|
|
307
|
-
? (answers.customAdapterHook?.trim() || 'useTranslation')
|
|
308
|
-
: 'useTranslation';
|
|
309
|
-
const translationConfig = answers.service === 'manual'
|
|
310
|
-
? { provider: 'manual' }
|
|
311
|
-
: {
|
|
312
|
-
provider: answers.service,
|
|
313
|
-
secretEnvVar: answers.translationSecretEnvVar?.trim() || undefined,
|
|
314
|
-
concurrency: 5,
|
|
315
|
-
};
|
|
316
|
-
const config = {
|
|
317
|
-
version: 1,
|
|
318
|
-
sourceLanguage: answers.sourceLanguage,
|
|
319
|
-
targetLanguages: parseGlobList(answers.targetLanguages),
|
|
320
|
-
localesDir: answers.localesDir,
|
|
321
|
-
include: parseGlobList(answers.include),
|
|
322
|
-
exclude: parseGlobList(answers.exclude),
|
|
323
|
-
minTextLength: parseInt(answers.minTextLength, 10),
|
|
324
|
-
translation: translationConfig,
|
|
325
|
-
translationAdapter: {
|
|
326
|
-
module: adapterModule ?? 'react-i18next',
|
|
327
|
-
hookName: adapterHook,
|
|
328
|
-
},
|
|
329
|
-
keyGeneration: {
|
|
330
|
-
namespace: answers.keyNamespace,
|
|
331
|
-
shortHashLen: parseInt(answers.shortHashLen, 10),
|
|
332
|
-
},
|
|
333
|
-
seedTargetLocales: answers.seedTargetLocales,
|
|
334
|
-
};
|
|
335
|
-
const workspaceRoot = process.cwd();
|
|
336
|
-
const mergeDecision = await maybePromptMergeStrategy(config, workspaceRoot, Boolean(commandOptions.merge));
|
|
337
|
-
if (mergeDecision?.aborted) {
|
|
338
|
-
console.log(chalk.yellow('Aborting init to avoid overwriting existing i18n assets. Re-run with --merge to bypass.'));
|
|
339
|
-
return;
|
|
340
|
-
}
|
|
341
|
-
const configPath = path.join(workspaceRoot, 'i18n.config.json');
|
|
342
|
-
try {
|
|
343
|
-
await fs.writeFile(configPath, JSON.stringify(config, null, 2));
|
|
344
|
-
console.log(chalk.green(`\nConfiguration created at ${configPath}`));
|
|
345
|
-
// Ensure .gitignore has i18nsmith artifacts
|
|
346
|
-
const gitignoreResult = await ensureGitignore(workspaceRoot);
|
|
347
|
-
if (gitignoreResult.updated) {
|
|
348
|
-
console.log(chalk.green(`Updated .gitignore with i18nsmith artifacts`));
|
|
349
|
-
}
|
|
350
|
-
if (answers.scaffoldAdapter && answers.scaffoldAdapterPath) {
|
|
351
|
-
try {
|
|
352
|
-
await scaffoldTranslationContext(answers.scaffoldAdapterPath, answers.sourceLanguage, {
|
|
353
|
-
localesDir: answers.localesDir,
|
|
354
|
-
});
|
|
355
|
-
console.log(chalk.green(`Translation context scaffolded at ${answers.scaffoldAdapterPath}`));
|
|
356
|
-
}
|
|
357
|
-
catch (error) {
|
|
358
|
-
console.warn(chalk.yellow(`Skipping adapter scaffold: ${error.message}`));
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
if (answers.adapterPreset === 'react-i18next' &&
|
|
362
|
-
answers.scaffoldReactRuntime &&
|
|
363
|
-
answers.reactI18nPath &&
|
|
364
|
-
answers.reactProviderPath) {
|
|
365
|
-
try {
|
|
366
|
-
await scaffoldI18next(answers.reactI18nPath, answers.reactProviderPath, answers.sourceLanguage, answers.localesDir);
|
|
367
|
-
console.log(chalk.green('react-i18next runtime scaffolded:'));
|
|
368
|
-
console.log(chalk.green(` • ${answers.reactI18nPath}`));
|
|
369
|
-
console.log(chalk.green(` • ${answers.reactProviderPath}`));
|
|
370
|
-
console.log(chalk.blue('\nWrap your app with the provider (e.g. Next.js providers.tsx):'));
|
|
371
|
-
console.log(chalk.cyan(`import { I18nProvider } from '${answers.reactProviderPath.replace(/\\/g, '/').replace(/\.tsx?$/, '')}';\n<I18nProvider>{children}</I18nProvider>`));
|
|
372
|
-
}
|
|
373
|
-
catch (error) {
|
|
374
|
-
console.warn(chalk.yellow(`Skipping i18next scaffold: ${error.message}`));
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
if (answers.adapterPreset === 'react-i18next') {
|
|
378
|
-
const pkg = await readPackageJson();
|
|
379
|
-
const missingDeps = ['react-i18next', 'i18next'].filter((dep) => !hasDependency(pkg, dep));
|
|
380
|
-
if (missingDeps.length) {
|
|
381
|
-
console.log(chalk.yellow('\nDependencies missing for react-i18next adapter:'));
|
|
382
|
-
missingDeps.forEach((dep) => console.log(chalk.yellow(` • ${dep}`)));
|
|
383
|
-
console.log(chalk.blue('Install them with:'));
|
|
384
|
-
console.log(chalk.cyan(' pnpm add react-i18next i18next'));
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
if (mergeDecision?.strategy) {
|
|
388
|
-
console.log(chalk.blue(`Merge strategy selected: ${mergeDecision.strategy}. Use this when running i18nsmith sync or diagnose to reconcile locales.`));
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
catch (error) {
|
|
392
|
-
console.error(chalk.red('Failed to write configuration file:'), error);
|
|
393
|
-
}
|
|
394
|
-
});
|
|
395
|
-
}
|
|
396
|
-
async function maybePromptMergeStrategy(config, workspaceRoot, mergeRequested) {
|
|
397
|
-
try {
|
|
398
|
-
const report = await diagnoseWorkspace(config, { workspaceRoot });
|
|
399
|
-
const existingLocales = report.localeFiles.filter((entry) => !entry.missing && !entry.parseError);
|
|
400
|
-
const hasRuntime = report.adapterFiles.length > 0 || report.providerFiles.some((provider) => provider.hasI18nProvider);
|
|
401
|
-
if (!existingLocales.length && !hasRuntime) {
|
|
402
|
-
return { strategy: null, aborted: false };
|
|
403
|
-
}
|
|
404
|
-
console.log(chalk.yellow('\nExisting i18n assets detected:'));
|
|
405
|
-
if (existingLocales.length) {
|
|
406
|
-
const localeList = existingLocales.map((entry) => entry.locale).join(', ');
|
|
407
|
-
console.log(` • Locales: ${localeList}`);
|
|
408
|
-
}
|
|
409
|
-
if (hasRuntime) {
|
|
410
|
-
console.log(' • Runtime files already present.');
|
|
411
|
-
}
|
|
412
|
-
if (report.conflicts.length) {
|
|
413
|
-
for (const conflict of report.conflicts) {
|
|
414
|
-
console.log(chalk.red(` • ${conflict.message}`));
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
if (!mergeRequested) {
|
|
418
|
-
const { proceed } = await inquirer.prompt([
|
|
419
|
-
{
|
|
420
|
-
type: 'confirm',
|
|
421
|
-
name: 'proceed',
|
|
422
|
-
message: 'Merge with the existing setup instead of overwriting?',
|
|
423
|
-
default: true,
|
|
424
|
-
},
|
|
425
|
-
]);
|
|
426
|
-
if (!proceed) {
|
|
427
|
-
return { strategy: null, aborted: true };
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
const { strategy } = await inquirer.prompt([
|
|
431
|
-
{
|
|
432
|
-
type: 'list',
|
|
433
|
-
name: 'strategy',
|
|
434
|
-
message: 'Choose a merge strategy for existing locale keys',
|
|
435
|
-
choices: [
|
|
436
|
-
{ name: 'Keep source values (append new keys only)', value: 'keep-source' },
|
|
437
|
-
{ name: 'Overwrite with placeholders (backup first)', value: 'overwrite' },
|
|
438
|
-
{ name: 'Interactive review during sync', value: 'interactive' },
|
|
439
|
-
],
|
|
440
|
-
default: 'keep-source',
|
|
441
|
-
},
|
|
442
|
-
]);
|
|
443
|
-
return { strategy, aborted: false };
|
|
444
|
-
}
|
|
445
|
-
catch (error) {
|
|
446
|
-
console.warn(chalk.gray(`Skipping merge diagnostics: ${error.message}`));
|
|
447
|
-
return { strategy: null, aborted: false };
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
//# sourceMappingURL=init.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|