code-transmute
Version:
Convert any codebase into any language ā without changing its brain.
220 lines ⢠9.71 kB
JavaScript
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
;