UNPKG

code-transmute

Version:

Convert any codebase into any language — without changing its brain.

220 lines • 9.71 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 }); const commander_1 = require("commander"); const chalk_1 = __importDefault(require("chalk")); const ora_1 = __importDefault(require("ora")); // import { ConfigManager } from './core/config'; const init_1 = require("./commands/init"); const review_1 = require("./commands/review"); const plan_1 = require("./commands/plan"); const convert_1 = require("./commands/convert"); const test_1 = require("./commands/test"); const export_1 = require("./commands/export"); const framework_mapper_1 = require("./core/framework-mapper"); const program = new commander_1.Command(); program .name('code-transmute') .description('Convert any codebase into any language — without changing its brain.') .version('1.0.0'); // Initialize command program .command('init') .description('Initialize code-transmute configuration') .option('-k, --api-key <key>', 'OpenAI API key') .option('-p, --project-path <path>', 'Project path to analyze') .option('-l, --target-language <language>', 'Target language for conversion') .option('-f, --target-framework <framework>', 'Target framework (express, nestjs, react, vue, django, fastapi, gin, actix-web)') .option('-m, --model <model>', 'OpenAI model to use', 'gpt-4o') .action(async (options) => { try { const spinner = (0, ora_1.default)('Initializing code-transmute...').start(); const initCommand = new init_1.InitCommand(); await initCommand.execute(options); spinner.succeed(chalk_1.default.green('Initialization complete!')); } catch (error) { console.error(chalk_1.default.red('Initialization failed:'), error); process.exit(1); } }); // List command program .command('list') .description('List supported frameworks and languages') .option('--frameworks', 'List supported frameworks') .option('--languages', 'List supported languages') .action(async (options) => { try { if (options.frameworks) { console.log(chalk_1.default.blue.bold('\nšŸš€ Supported Frameworks:')); console.log(chalk_1.default.gray('─'.repeat(50))); const frameworks = framework_mapper_1.FrameworkMapper.getSupportedFrameworks(); frameworks.forEach(framework => { const info = framework_mapper_1.FrameworkMapper.getFrameworkInfo(framework); if (info) { console.log(chalk_1.default.cyan(` ${info.name}`)); console.log(chalk_1.default.gray(` Language: ${info.language}`)); console.log(chalk_1.default.gray(` CLI: ${info.cliCommand}`)); console.log(''); } }); } else if (options.languages) { console.log(chalk_1.default.blue.bold('\n🌐 Supported Languages:')); console.log(chalk_1.default.gray('─'.repeat(50))); const languages = ['typescript', 'javascript', 'python', 'go', 'rust', 'php', 'java', 'csharp']; languages.forEach(lang => { const frameworks = framework_mapper_1.FrameworkMapper.getFrameworksByLanguage(lang); console.log(chalk_1.default.cyan(` ${lang.toUpperCase()}`)); if (frameworks.length > 0) { console.log(chalk_1.default.gray(` Frameworks: ${frameworks.join(', ')}`)); } console.log(''); }); } else { console.log(chalk_1.default.blue.bold('\nšŸ“‹ Available Commands:')); console.log(chalk_1.default.gray('─'.repeat(50))); console.log(chalk_1.default.cyan(' code-transmute list --frameworks')); console.log(chalk_1.default.gray(' List all supported frameworks')); console.log(chalk_1.default.cyan(' code-transmute list --languages')); console.log(chalk_1.default.gray(' List all supported languages')); console.log(''); } } catch (error) { console.error(chalk_1.default.red('List command failed:'), error); process.exit(1); } }); // Review command program .command('review') .description('Analyze and review the current codebase') .option('-p, --project-path <path>', 'Project path to analyze') .option('-o, --output <path>', 'Output directory for review files') .action(async (options) => { try { const spinner = (0, ora_1.default)('Analyzing codebase...').start(); const reviewCommand = new review_1.ReviewCommand(); const result = await reviewCommand.execute(options); spinner.succeed(chalk_1.default.green('Code review complete!')); console.log(chalk_1.default.blue('Review files generated in:'), result.outputPath); } catch (error) { console.error(chalk_1.default.red('Review failed:'), error); process.exit(1); } }); // Plan command program .command('plan') .description('Generate migration plan for the target language') .option('-p, --project-path <path>', 'Project path to analyze') .option('-l, --target-language <language>', 'Target language for conversion') .option('-f, --target-framework <framework>', 'Target framework') .option('-o, --output <path>', 'Output directory for plan files') .action(async (options) => { try { const spinner = (0, ora_1.default)('Generating migration plan...').start(); const planCommand = new plan_1.PlanCommand(); const result = await planCommand.execute(options); spinner.succeed(chalk_1.default.green('Migration plan generated!')); console.log(chalk_1.default.blue('Plan files generated in:'), result.outputPath); } catch (error) { console.error(chalk_1.default.red('Planning failed:'), error); process.exit(1); } }); // Convert command program .command('convert') .description('Execute the migration plan and convert the codebase') .option('-p, --project-path <path>', 'Project path to convert') .option('-l, --target-language <language>', 'Target language for conversion') .option('-f, --target-framework <framework>', 'Target framework') .option('-o, --output <path>', 'Output directory for converted code') .option('--dry-run', 'Preview changes without writing files') .option('--with-tests', 'Generate tests during conversion') .action(async (options) => { try { const spinner = (0, ora_1.default)('Converting codebase...').start(); const convertCommand = new convert_1.ConvertCommand(); const result = await convertCommand.execute(options); spinner.succeed(chalk_1.default.green('Conversion complete!')); console.log(chalk_1.default.blue('Converted code generated in:'), result.outputPath); if (options.dryRun) { console.log(chalk_1.default.yellow('This was a dry run. No files were written.')); } } catch (error) { console.error(chalk_1.default.red('Conversion failed:'), error); process.exit(1); } }); // Test command program .command('test') .description('Run tests and generate test reports') .option('-p, --project-path <path>', 'Project path containing tests') .option('-t, --test-type <type>', 'Type of tests to run', 'all') .option('-o, --output <path>', 'Output directory for test reports') .action(async (options) => { try { const spinner = (0, ora_1.default)('Running tests...').start(); const testCommand = new test_1.TestCommand(); const result = await testCommand.execute(options); spinner.succeed(chalk_1.default.green('Tests completed!')); console.log(chalk_1.default.blue('Test reports generated in:'), result.outputPath); } catch (error) { console.error(chalk_1.default.red('Testing failed:'), error); process.exit(1); } }); // Export command program .command('export') .description('Export the converted project with all documentation') .option('-p, --project-path <path>', 'Converted project path') .option('-o, --output <path>', 'Output directory for export package') .option('--include-git', 'Include git patch file') .action(async (options) => { try { const spinner = (0, ora_1.default)('Exporting project...').start(); const exportCommand = new export_1.ExportCommand(); const result = await exportCommand.execute(options); spinner.succeed(chalk_1.default.green('Export complete!')); console.log(chalk_1.default.blue('Export package created at:'), result.outputPath); } catch (error) { console.error(chalk_1.default.red('Export failed:'), error); process.exit(1); } }); // Global error handling program.configureOutput({ writeErr: (str) => process.stderr.write(chalk_1.default.red(str)), writeOut: (str) => process.stdout.write(str) }); // Handle uncaught errors process.on('uncaughtException', (error) => { console.error(chalk_1.default.red('Uncaught Exception:'), error); process.exit(1); }); process.on('unhandledRejection', (reason, promise) => { console.error(chalk_1.default.red('Unhandled Rejection at:'), promise, chalk_1.default.red('reason:'), reason); process.exit(1); }); // Parse command line arguments program.parse(); // Show help if no command provided if (!process.argv.slice(2).length) { program.outputHelp(); } //# sourceMappingURL=cli.js.map