transcripto-cli 1.0.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.
Files changed (58) hide show
  1. package/README.md +576 -0
  2. package/dist/cli/generate.d.ts +2 -0
  3. package/dist/cli/generate.d.ts.map +1 -0
  4. package/dist/cli/generate.js +416 -0
  5. package/dist/cli/generate.js.map +1 -0
  6. package/dist/cli/index.d.ts +3 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +43 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/cli/init.d.ts +2 -0
  11. package/dist/cli/init.d.ts.map +1 -0
  12. package/dist/cli/init.js +81 -0
  13. package/dist/cli/init.js.map +1 -0
  14. package/dist/cli/report.d.ts +2 -0
  15. package/dist/cli/report.d.ts.map +1 -0
  16. package/dist/cli/report.js +137 -0
  17. package/dist/cli/report.js.map +1 -0
  18. package/dist/cli/scan.d.ts +2 -0
  19. package/dist/cli/scan.d.ts.map +1 -0
  20. package/dist/cli/scan.js +62 -0
  21. package/dist/cli/scan.js.map +1 -0
  22. package/dist/cli/watch-i18n.d.ts +2 -0
  23. package/dist/cli/watch-i18n.d.ts.map +1 -0
  24. package/dist/cli/watch-i18n.js +73 -0
  25. package/dist/cli/watch-i18n.js.map +1 -0
  26. package/dist/cli/watch.d.ts +2 -0
  27. package/dist/cli/watch.d.ts.map +1 -0
  28. package/dist/cli/watch.js +147 -0
  29. package/dist/cli/watch.js.map +1 -0
  30. package/dist/core/i18nGenerator.d.ts +16 -0
  31. package/dist/core/i18nGenerator.d.ts.map +1 -0
  32. package/dist/core/i18nGenerator.js +139 -0
  33. package/dist/core/i18nGenerator.js.map +1 -0
  34. package/dist/core/projectScanner.d.ts +12 -0
  35. package/dist/core/projectScanner.d.ts.map +1 -0
  36. package/dist/core/projectScanner.js +53 -0
  37. package/dist/core/projectScanner.js.map +1 -0
  38. package/dist/core/stringExtractor.d.ts +21 -0
  39. package/dist/core/stringExtractor.d.ts.map +1 -0
  40. package/dist/core/stringExtractor.js +268 -0
  41. package/dist/core/stringExtractor.js.map +1 -0
  42. package/dist/index.d.ts +7 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +10 -0
  45. package/dist/index.js.map +1 -0
  46. package/package.json +44 -0
  47. package/src/cli/generate.ts +422 -0
  48. package/src/cli/index.ts +50 -0
  49. package/src/cli/init.ts +96 -0
  50. package/src/cli/report.ts +160 -0
  51. package/src/cli/scan.ts +69 -0
  52. package/src/cli/watch-i18n.ts +77 -0
  53. package/src/cli/watch.ts +129 -0
  54. package/src/core/i18nGenerator.ts +127 -0
  55. package/src/core/projectScanner.ts +62 -0
  56. package/src/core/stringExtractor.ts +276 -0
  57. package/src/index.ts +7 -0
  58. package/tsconfig.json +20 -0
@@ -0,0 +1,416 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.generateCommand = generateCommand;
40
+ const fs_1 = require("fs");
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const i18nGenerator_1 = require("../core/i18nGenerator");
43
+ const projectScanner_1 = require("../core/projectScanner");
44
+ const stringExtractor_1 = require("../core/stringExtractor");
45
+ async function generateCommand() {
46
+ console.log(chalk_1.default.blue('šŸ“ Generating i18n files...'));
47
+ try {
48
+ // Automatically scan the project first
49
+ console.log(chalk_1.default.cyan('šŸ” Scanning project for UI text strings...'));
50
+ const scanner = new projectScanner_1.ProjectScanner();
51
+ const files = await scanner.scanProject('./src');
52
+ const extractor = new stringExtractor_1.StringExtractor();
53
+ const strings = await extractor.extractStrings(files);
54
+ if (strings.length === 0) {
55
+ console.log(chalk_1.default.yellow('āš ļø No UI text strings found in the project.'));
56
+ console.log(chalk_1.default.gray('šŸ’” Make sure your React components have text content to extract.'));
57
+ return;
58
+ }
59
+ console.log(chalk_1.default.green(`āœ… Found ${strings.length} UI text strings`));
60
+ // Save extracted strings for future use
61
+ await fs_1.promises.mkdir('.transcripto', { recursive: true });
62
+ await fs_1.promises.writeFile('.transcripto/extracted-strings.json', JSON.stringify(strings, null, 2), 'utf-8');
63
+ // Check if lingo.dev is configured
64
+ const hasLingoDevConfig = await checkLingoDevConfig();
65
+ if (!hasLingoDevConfig) {
66
+ console.log(chalk_1.default.yellow('\n🌐 Lingo.dev Setup Required'));
67
+ console.log(chalk_1.default.white('Setting up lingo.dev for AI translations...\n'));
68
+ // Setup lingo.dev automatically
69
+ await setupLingoDev();
70
+ }
71
+ // Get language configuration from user
72
+ const languageConfig = await getLanguageConfiguration();
73
+ // Generate i18n files (only JSON, no constants)
74
+ const generator = new i18nGenerator_1.I18nGenerator();
75
+ await generator.generateI18nFiles(strings, languageConfig);
76
+ // Generate lingo.dev config with automatic language handling
77
+ await generator.generateLingoDevConfig(); // Let lingo.dev decide target languages
78
+ // Generate welcome.md with extracted text
79
+ await generateWelcomeFile(strings, languageConfig);
80
+ console.log(chalk_1.default.green(`āœ… Generated i18n files for ${strings.length} strings`));
81
+ console.log(chalk_1.default.gray(`šŸ“ Translations: ${languageConfig.outputDir}/`));
82
+ console.log(chalk_1.default.gray(`šŸŒ Languages: ${languageConfig.languages.join(', ')}`));
83
+ // Run lingo.dev automatically
84
+ console.log(chalk_1.default.cyan('🌐 Running lingo.dev for translations...'));
85
+ try {
86
+ await generator.runLingoDev();
87
+ console.log(chalk_1.default.green('āœ… lingo.dev translations completed!'));
88
+ // Ask if user wants to create language dropdown (now automatic)
89
+ const shouldCreateDropdown = true; // Always create dropdown
90
+ await createLanguageDropdown(languageConfig);
91
+ }
92
+ catch (error) {
93
+ console.log(chalk_1.default.yellow('āš ļø lingo.dev failed. You can run "npx lingo.dev@latest run" manually.'));
94
+ }
95
+ console.log(chalk_1.default.cyan('\nšŸŽÆ Next steps:'));
96
+ console.log(chalk_1.default.white(' npm start - Test your localized application'));
97
+ console.log(chalk_1.default.gray('šŸ’” Text is ready for translation. Use constants in your React components.'));
98
+ }
99
+ catch (error) {
100
+ console.error(chalk_1.default.red('āŒ Generation failed:'), error);
101
+ process.exit(1);
102
+ }
103
+ }
104
+ async function checkLingoDevConfig() {
105
+ try {
106
+ await fs_1.promises.access('.lingodev.json');
107
+ return true;
108
+ }
109
+ catch {
110
+ return false;
111
+ }
112
+ }
113
+ async function setupLingoDev() {
114
+ const readline = await Promise.resolve().then(() => __importStar(require('readline')));
115
+ const rl = readline.createInterface({
116
+ input: process.stdin,
117
+ output: process.stdout
118
+ });
119
+ console.log(chalk_1.default.cyan('šŸ”‘ Lingo.dev API Setup'));
120
+ return new Promise((resolve) => {
121
+ const askForApiKey = () => {
122
+ rl.question(chalk_1.default.white('Do you have a lingo.dev API key? (Y/n): '), async (answer) => {
123
+ const hasKey = answer.trim().toLowerCase() !== 'n' && answer.trim().toLowerCase() !== 'no';
124
+ if (hasKey) {
125
+ rl.question(chalk_1.default.white('Enter your lingo.dev API key: '), async (apiKey) => {
126
+ if (apiKey.trim()) {
127
+ // Save API key to environment
128
+ await saveApiKey(apiKey.trim());
129
+ console.log(chalk_1.default.green('āœ… API key saved!'));
130
+ rl.close();
131
+ resolve();
132
+ }
133
+ else {
134
+ console.log(chalk_1.default.red('āŒ API key cannot be empty'));
135
+ askForApiKey();
136
+ }
137
+ });
138
+ }
139
+ else {
140
+ rl.question(chalk_1.default.white('Would you like to create an account and get API key? (Y/n): '), async (answer) => {
141
+ if (answer.trim().toLowerCase() !== 'n' && answer.trim().toLowerCase() !== 'no') {
142
+ console.log(chalk_1.default.cyan('🌐 Opening lingo.dev to create account...'));
143
+ console.log(chalk_1.default.white('Please get your API key from: https://lingo.dev/dashboard'));
144
+ console.log(chalk_1.default.white('After getting your API key, run "transcripto generate" again.\n'));
145
+ // Open browser (simplified - in production use 'open' package)
146
+ const { spawn } = await Promise.resolve().then(() => __importStar(require('child_process')));
147
+ spawn('start', ['https://lingo.dev/dashboard'], { detached: true });
148
+ }
149
+ rl.close();
150
+ resolve();
151
+ });
152
+ }
153
+ });
154
+ };
155
+ askForApiKey();
156
+ });
157
+ }
158
+ async function saveApiKey(apiKey) {
159
+ const envContent = `# Transcripto Configuration
160
+ LINGO_DEV_API_KEY=${apiKey}
161
+ `;
162
+ await fs_1.promises.writeFile('.env', envContent, 'utf-8');
163
+ }
164
+ async function generateWelcomeFile(strings, config) {
165
+ const welcomeContent = `# Welcome to Your Localized Project!
166
+
167
+ This file contains all the text strings that were extracted from your project.
168
+
169
+ ## šŸ“Š Extraction Summary
170
+ - **Total Strings**: ${strings.length}
171
+ - **Target Languages**: ${config.languages.join(', ')}
172
+ - **Generated**: ${new Date().toLocaleString()}
173
+
174
+ ## šŸ“ Extracted Text Strings
175
+
176
+ ${strings.map((str, index) => `${index + 1}. **${str.key}**\n \`${str.text}\`\n Location: ${str.filePath}:${str.line || 'unknown'}\n`).join('\n')}
177
+
178
+ ## 🌐 Next Steps
179
+
180
+ 1. **Review Translations**: Check the generated translation files in \`${config.outputDir}\`
181
+ 2. **Test Language Switching**: Use the language dropdown to verify functionality
182
+ 3. **Deploy**: Your project is now ready for multi-language deployment!
183
+
184
+ ---
185
+
186
+ *Generated by Transcripto - Automated Localization CLI*
187
+ *Learn more: https://github.com/brrashmi408-sys/transcripto-npm*
188
+ `;
189
+ await fs_1.promises.writeFile('welcome.md', welcomeContent, 'utf-8');
190
+ console.log(chalk_1.default.green('šŸ“„ Created welcome.md with extracted text'));
191
+ }
192
+ async function createLanguageDropdown(config) {
193
+ const dropdownContent = `import React, { useState, useEffect } from 'react';
194
+
195
+ interface LanguageOption {
196
+ code: string;
197
+ name: string;
198
+ flag: string;
199
+ }
200
+
201
+ const languages: LanguageOption[] = [
202
+ { code: '${config.languages[0] || 'en'}', name: 'English', flag: 'šŸ‡ŗšŸ‡ø' },
203
+ ${config.languages.slice(1).map((lang) => ` { code: '${lang}', name: '${lang}', flag: 'šŸŒ' },`).join('\n')}
204
+ ];
205
+
206
+ export const LanguageDropdown: React.FC = () => {
207
+ const [currentLang, setCurrentLang] = useState('${config.languages[0] || 'en'}');
208
+ const [isOpen, setIsOpen] = useState(false);
209
+
210
+ useEffect(() => {
211
+ // Load saved language preference
212
+ const saved = localStorage.getItem('language');
213
+ if (saved && languages.find(l => l.code === saved)) {
214
+ setCurrentLang(saved);
215
+ }
216
+ }, []);
217
+
218
+ const handleLanguageChange = (langCode: string) => {
219
+ setCurrentLang(langCode);
220
+ localStorage.setItem('language', langCode);
221
+
222
+ // Reload page with new language
223
+ window.location.reload();
224
+ };
225
+
226
+ const currentLanguage = languages.find(l => l.code === currentLang);
227
+
228
+ return (
229
+ <div style={{
230
+ position: 'fixed',
231
+ top: '20px',
232
+ right: '20px',
233
+ zIndex: 1000
234
+ }}>
235
+ <button
236
+ onClick={() => setIsOpen(!isOpen)}
237
+ style={{
238
+ padding: '8px 16px',
239
+ border: '1px solid #ddd',
240
+ borderRadius: '6px',
241
+ background: 'white',
242
+ cursor: 'pointer',
243
+ fontSize: '14px',
244
+ display: 'flex',
245
+ alignItems: 'center',
246
+ gap: '8px',
247
+ boxShadow: '0 2px 4px rgba(0,0,0,0.1)'
248
+ }}
249
+ >
250
+ <span>{currentLanguage?.flag}</span>
251
+ <span>{currentLanguage?.name}</span>
252
+ <span style={{ marginLeft: '4px' }}>ā–¼</span>
253
+ </button>
254
+
255
+ {isOpen && (
256
+ <div style={{
257
+ position: 'absolute',
258
+ top: '100%',
259
+ right: '0',
260
+ background: 'white',
261
+ border: '1px solid #ddd',
262
+ borderRadius: '6px',
263
+ boxShadow: '0 4px 6px rgba(0,0,0,0.1)',
264
+ zIndex: 1000,
265
+ minWidth: '200px',
266
+ marginTop: '4px'
267
+ }}>
268
+ {languages.map(lang => (
269
+ <button
270
+ key={lang.code}
271
+ onClick={() => handleLanguageChange(lang.code)}
272
+ style={{
273
+ padding: '12px 16px',
274
+ border: 'none',
275
+ background: 'transparent',
276
+ textAlign: 'left',
277
+ cursor: 'pointer',
278
+ display: 'flex',
279
+ alignItems: 'center',
280
+ gap: '8px',
281
+ width: '100%'
282
+ }}
283
+ >
284
+ <span>{lang.flag}</span>
285
+ <span>{lang.name}</span>
286
+ {lang.code === currentLang && <span style={{ marginLeft: 'auto' }}>āœ“</span>}
287
+ </button>
288
+ ))}
289
+ </div>
290
+ )}
291
+ </div>
292
+ );
293
+ };
294
+
295
+ export default LanguageDropdown;
296
+ `;
297
+ await fs_1.promises.writeFile('LanguageDropdown.tsx', dropdownContent, 'utf-8');
298
+ console.log(chalk_1.default.green('šŸŽØ Created LanguageDropdown.tsx component'));
299
+ console.log(chalk_1.default.cyan('\nšŸ“‹ How to use the language dropdown:'));
300
+ console.log(chalk_1.default.white('1. Copy LanguageDropdown.tsx to your project'));
301
+ console.log(chalk_1.default.white('2. Import and add to your main page/layout:'));
302
+ console.log(chalk_1.default.white(' import LanguageDropdown from "./components/LanguageDropdown";'));
303
+ console.log(chalk_1.default.white('3. Add to your App.tsx or layout:'));
304
+ console.log(chalk_1.default.white(' <LanguageDropdown />'));
305
+ console.log(chalk_1.default.white('4. The dropdown will automatically switch languages and reload page'));
306
+ console.log(chalk_1.default.white('5. Position: Fixed top-right corner for easy access'));
307
+ }
308
+ async function getLanguageConfiguration() {
309
+ console.log(chalk_1.default.cyan('\nšŸŒ Language Configuration'));
310
+ // Skip language selection - let lingo.dev handle it completely automatically
311
+ console.log(chalk_1.default.yellow('šŸ¤– Letting lingo.dev handle language selection completely automatically...'));
312
+ // Use default configuration - only English for now, lingo.dev will add more
313
+ const outputDir = './i18n'; // Changed to root folder
314
+ // Start with just English - lingo.dev will add target languages automatically
315
+ const languages = ['en'];
316
+ return {
317
+ outputDir,
318
+ languages,
319
+ keyPrefix: ''
320
+ };
321
+ }
322
+ async function promptForLanguage(message, defaultValue) {
323
+ const readline = await Promise.resolve().then(() => __importStar(require('readline')));
324
+ const rl = readline.createInterface({
325
+ input: process.stdin,
326
+ output: process.stdout
327
+ });
328
+ return new Promise((resolve) => {
329
+ rl.question(`${message} (${defaultValue}): `, (answer) => {
330
+ rl.close();
331
+ resolve(answer.trim() || defaultValue);
332
+ });
333
+ });
334
+ }
335
+ async function promptForTargetLanguages() {
336
+ const readline = await Promise.resolve().then(() => __importStar(require('readline')));
337
+ const rl = readline.createInterface({
338
+ input: process.stdin,
339
+ output: process.stdout
340
+ });
341
+ console.log(chalk_1.default.yellow('\nAvailable language codes:'));
342
+ console.log(chalk_1.default.white(' en - English'));
343
+ console.log(chalk_1.default.white(' hi - Hindi'));
344
+ console.log(chalk_1.default.white(' kn - Kannada'));
345
+ console.log(chalk_1.default.white(' es - Spanish'));
346
+ console.log(chalk_1.default.white(' fr - French'));
347
+ console.log(chalk_1.default.white(' de - German'));
348
+ console.log(chalk_1.default.white(' zh - Chinese'));
349
+ console.log(chalk_1.default.white(' ja - Japanese'));
350
+ console.log(chalk_1.default.white(' ta - Tamil'));
351
+ console.log(chalk_1.default.white(' te - Telugu'));
352
+ console.log(chalk_1.default.white(' ml - Malayalam'));
353
+ console.log(chalk_1.default.white(' mr - Marathi'));
354
+ console.log(chalk_1.default.white(' gu - Gujarati'));
355
+ console.log(chalk_1.default.white(' bn - Bengali'));
356
+ console.log(chalk_1.default.white(' pa - Punjabi'));
357
+ console.log(chalk_1.default.white(' ur - Urdu'));
358
+ console.log(chalk_1.default.white(' ar - Arabic'));
359
+ console.log(chalk_1.default.white(' pt - Portuguese'));
360
+ console.log(chalk_1.default.white(' it - Italian'));
361
+ console.log(chalk_1.default.white(' ru - Russian'));
362
+ return new Promise((resolve) => {
363
+ rl.question('\nEnter target languages (comma-separated, e.g., hi,kn,es,fr): ', (answer) => {
364
+ rl.close();
365
+ const languages = answer.split(',')
366
+ .map(lang => lang.trim().toLowerCase())
367
+ .filter(lang => lang.length > 0);
368
+ resolve(languages.length > 0 ? languages : ['hi', 'kn']);
369
+ });
370
+ });
371
+ }
372
+ async function promptForOutputDirectory() {
373
+ const readline = await Promise.resolve().then(() => __importStar(require('readline')));
374
+ const rl = readline.createInterface({
375
+ input: process.stdin,
376
+ output: process.stdout
377
+ });
378
+ return new Promise((resolve) => {
379
+ rl.question('Output directory for translation files (./src/i18n): ', (answer) => {
380
+ rl.close();
381
+ resolve(answer.trim() || './src/i18n');
382
+ });
383
+ });
384
+ }
385
+ async function promptForConstantsFile(outputDir) {
386
+ const readline = await Promise.resolve().then(() => __importStar(require('readline')));
387
+ const rl = readline.createInterface({
388
+ input: process.stdin,
389
+ output: process.stdout
390
+ });
391
+ return new Promise((resolve) => {
392
+ rl.question(`Constants file path (${outputDir}/constants.ts): `, (answer) => {
393
+ rl.close();
394
+ resolve(answer.trim() || `${outputDir}/constants.ts`);
395
+ });
396
+ });
397
+ }
398
+ async function askToRunLingoDev() {
399
+ // Always return true to run lingo.dev automatically
400
+ return true;
401
+ }
402
+ async function askToCreateDropdown() {
403
+ // Always return true to create language dropdown automatically
404
+ return true;
405
+ }
406
+ async function loadExtractedStrings() {
407
+ try {
408
+ const content = await fs_1.promises.readFile('.transcripto/extracted-strings.json', 'utf-8');
409
+ return JSON.parse(content);
410
+ }
411
+ catch (error) {
412
+ console.warn(chalk_1.default.yellow('āš ļø No extracted strings found. Run "transcripto scan" first.'));
413
+ return [];
414
+ }
415
+ }
416
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
5
+ const generate_1 = require("./generate");
6
+ const init_1 = require("./init");
7
+ const report_1 = require("./report");
8
+ const scan_1 = require("./scan");
9
+ const watch_1 = require("./watch");
10
+ const watch_i18n_1 = require("./watch-i18n");
11
+ const program = new commander_1.Command();
12
+ program
13
+ .name('transcripto')
14
+ .description('Automated localization CLI that scans projects and generates i18n files')
15
+ .version('1.1.5');
16
+ program
17
+ .command('init')
18
+ .description('Initialize Transcripto in your project')
19
+ .option('--yes', 'Run in non-interactive mode')
20
+ .action(init_1.initCommand);
21
+ program
22
+ .command('scan')
23
+ .description('Scan project for UI text strings')
24
+ .action(scan_1.scanCommand);
25
+ program
26
+ .command('generate')
27
+ .description('Generate i18n translation files')
28
+ .action(generate_1.generateCommand);
29
+ program
30
+ .command('watch')
31
+ .description('Watch project files for changes and auto-generate i18n')
32
+ .option('--yes', 'Run in non-interactive mode')
33
+ .action(watch_1.watchCommand);
34
+ program
35
+ .command('watch-i18n')
36
+ .description('Watch i18n/en.json file for changes and auto-translate')
37
+ .action(watch_i18n_1.watchI18nCommand);
38
+ program
39
+ .command('report')
40
+ .description('Show localization coverage report')
41
+ .action(report_1.reportCommand);
42
+ program.parse();
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,yCAA6C;AAC7C,iCAAqC;AACrC,qCAAyC;AACzC,iCAAqC;AACrC,mCAAuC;AACvC,6CAAgD;AAEhD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,yEAAyE,CAAC;KACtF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,OAAO,EAAE,6BAA6B,CAAC;KAC9C,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,0BAAe,CAAC,CAAC;AAE3B,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,OAAO,EAAE,6BAA6B,CAAC;KAC9C,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,6BAAgB,CAAC,CAAC;AAE5B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function initCommand(options?: any): Promise<void>;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,CAAC,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2FlE"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initCommand = initCommand;
7
+ const fs_1 = require("fs");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ async function initCommand(options = {}) {
10
+ console.log(chalk_1.default.blue('šŸš€ Initializing Transcripto in your project...'));
11
+ const yes = options.yes || false;
12
+ if (yes) {
13
+ console.log(chalk_1.default.yellow('šŸ¤– Running in non-interactive mode (--yes)'));
14
+ }
15
+ try {
16
+ // Create .transcripto directory
17
+ await fs_1.promises.mkdir('.transcripto', { recursive: true });
18
+ // Create config file
19
+ const config = {
20
+ version: '1.1.5',
21
+ scan: {
22
+ extensions: ['.ts', '.tsx', '.js', '.jsx', '.html'],
23
+ exclude: ['node_modules', 'dist', 'build', '.git', 'coverage', 'src/i18n'],
24
+ minStringLength: 2
25
+ },
26
+ i18n: {
27
+ outputDir: './src/i18n',
28
+ languages: ['en', 'hi', 'es', 'fr'],
29
+ constantsFile: './src/i18n/constants.ts',
30
+ keyPrefix: ''
31
+ },
32
+ replacement: {
33
+ importPath: './i18n/constants',
34
+ importName: 'TEXT',
35
+ functionName: 't'
36
+ }
37
+ };
38
+ await fs_1.promises.writeFile('.transcripto/config.json', JSON.stringify(config, null, 2), 'utf-8');
39
+ // Create i18n directory structure
40
+ await fs_1.promises.mkdir('./src/i18n', { recursive: true });
41
+ // Create initial i18n helper
42
+ const helperContent = `// Transcripto i18n helper
43
+ import { TEXT } from './constants';
44
+
45
+ export function t(key: keyof typeof TEXT): string {
46
+ // In a real app, you would use the current locale
47
+ // For now, return English text
48
+ return TEXT[key] as string;
49
+ }
50
+
51
+ export function setLocale(locale: string): void {
52
+ // TODO: Implement locale switching
53
+ console.log(\`Locale set to: \${locale}\`);
54
+ }
55
+ `;
56
+ await fs_1.promises.writeFile('./src/i18n/index.ts', helperContent, 'utf-8');
57
+ // Create empty constants file
58
+ const constantsContent = `// Auto-generated localization constants
59
+ export const TEXT = {};
60
+
61
+ export type TextKey = keyof typeof TEXT;
62
+ `;
63
+ await fs_1.promises.writeFile('./src/i18n/constants.ts', constantsContent, 'utf-8');
64
+ // Create empty translation files
65
+ for (const lang of config.i18n.languages) {
66
+ await fs_1.promises.writeFile(`./src/i18n/${lang}.json`, JSON.stringify({}, null, 2), 'utf-8');
67
+ }
68
+ console.log(chalk_1.default.green('āœ… Transcripto initialized successfully!'));
69
+ console.log(chalk_1.default.gray('šŸ“ Created .transcripto/config.json'));
70
+ console.log(chalk_1.default.gray('šŸ“ Created src/i18n/ directory structure'));
71
+ console.log(chalk_1.default.yellow('\nšŸŽÆ Next steps:'));
72
+ console.log(chalk_1.default.white(' transcripto scan - Scan for UI text strings'));
73
+ console.log(chalk_1.default.white(' transcripto generate - Generate i18n files'));
74
+ console.log(chalk_1.default.white(' transcripto replace - Replace inline text with constants'));
75
+ }
76
+ catch (error) {
77
+ console.error(chalk_1.default.red('āŒ Initialization failed:'), error);
78
+ process.exit(1);
79
+ }
80
+ }
81
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function reportCommand(): Promise<void>;
2
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"AAaA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAWnD"}