UNPKG

@logistically/i18n-cli

Version:

Enterprise-grade CLI tool for extracting and managing translations in Logistically microservices

59 lines 2.68 kB
#!/usr/bin/env node "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.extractTranslationKeys = extractTranslationKeys; exports.createExtractCommand = createExtractCommand; const commander_1 = require("commander"); const extractor_1 = require("../utils/extractor"); const logger_1 = require("../utils/logger"); const fs_extra_1 = __importDefault(require("fs-extra")); const logger = logger_1.Logger.getInstance(); // Extracted business logic for better testability async function extractTranslationKeys(options) { const extractor = new extractor_1.TranslationExtractor(); const ignorePatterns = options.ignore.split(',').map((pattern) => pattern.trim()); const strings = await extractor.extract({ path: options.path, ignore: ignorePatterns, verbose: options.verbose }); // Save to output file const outputData = { keys: strings, totalKeys: strings.length, services: [...new Set(strings.map(s => s.file.split('/')[0]))], generatedAt: new Date().toISOString() }; await fs_extra_1.default.writeJson(options.output, outputData, { spaces: 2 }); logger.success(`Translation keys saved to ${options.output}`); // Also save as CSV for easy viewing const csvFile = options.output.replace('.json', '.csv'); const csvContent = [ 'Key,Text,Type,File,Line', ...strings.map(s => `"${s.key}","${s.text}","${s.type}","${s.file}",${s.line}`) ].join('\n'); await fs_extra_1.default.writeFile(csvFile, csvContent); logger.info(`CSV file saved to ${csvFile}`); } function createExtractCommand() { const command = new commander_1.Command('extract') .description('Extract translatable strings from TypeScript files') .option('-p, --path <path>', 'Path to search for TypeScript files', '.') .option('-o, --output <file>', 'Output file for translation keys', 'translation-keys.json') .option('-i, --ignore <patterns>', 'Ignore patterns (comma-separated)', '**/node_modules/**,**/dist/**,**/coverage/**,**/*.spec.ts,**/*.test.ts') .option('-v, --verbose', 'Enable verbose output') .action(async (options) => { try { await extractTranslationKeys(options); } catch (error) { logger.error(`Extraction failed: ${error instanceof Error ? error.message : 'Unknown error'}`); // Handle error gracefully without exiting } }); return command; } //# sourceMappingURL=extract.js.map