UNPKG

@re-shell/cli

Version:

Full-stack development platform uniting microservices and microfrontends. Build complete applications with .NET (ASP.NET Core Web API, Minimal API), Java (Spring Boot, Quarkus, Micronaut, Vert.x), Rust (Actix-Web, Warp, Rocket, Axum), Python (FastAPI, Dja

364 lines (363 loc) • 13.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.manageMigration = manageMigration; const chalk_1 = __importDefault(require("chalk")); const prompts_1 = __importDefault(require("prompts")); const migration_1 = require("../utils/migration"); async function manageMigration(options = {}) { const { spinner, verbose, json } = options; try { if (options.auto) { await autoMigrate(options, spinner); return; } if (options.check) { await checkMigrationStatus(options, spinner); return; } if (options.history) { await showMigrationHistory(options, spinner); return; } if (options.rollback) { await rollbackMigration(options.rollback, options, spinner); return; } if (options.interactive) { await interactiveMigration(options, spinner); return; } if (options.global) { await migrateGlobalConfig(options, spinner); return; } if (options.project) { await migrateProjectConfig(options, spinner); return; } // Default: check migration status and prompt for action await checkAndPromptMigration(options, spinner); } catch (error) { if (spinner) spinner.fail(chalk_1.default.red('Migration operation failed')); throw error; } } async function autoMigrate(options, spinner) { if (spinner) spinner.setText('Running auto-migration...'); const results = await migration_1.migrationManager.autoMigrate(); if (spinner) spinner.stop(); if (options.json) { console.log(JSON.stringify(results, null, 2)); } else { console.log(chalk_1.default.cyan('\nšŸ”„ Auto-Migration Results')); console.log(chalk_1.default.gray('═'.repeat(40))); if (results.global) { console.log(chalk_1.default.cyan('\n🌐 Global Configuration:')); displayMigrationResult(results.global); } else { console.log(chalk_1.default.green('\n🌐 Global Configuration: Up to date')); } if (results.project) { console.log(chalk_1.default.cyan('\nšŸ—ļø Project Configuration:')); displayMigrationResult(results.project); } else { console.log(chalk_1.default.green('\nšŸ—ļø Project Configuration: Up to date or not found')); } } } async function checkMigrationStatus(options, spinner) { if (spinner) spinner.setText('Checking migration status...'); const globalCheck = await migration_1.migrationManager.checkIntegrity('global'); const projectCheck = await migration_1.migrationManager.checkIntegrity('project'); if (spinner) spinner.stop(); if (options.json) { console.log(JSON.stringify({ global: globalCheck, project: projectCheck }, null, 2)); } else { console.log(chalk_1.default.cyan('\nšŸ” Migration Status Check')); console.log(chalk_1.default.gray('═'.repeat(40))); console.log(chalk_1.default.cyan('\n🌐 Global Configuration:')); displayIntegrityCheck(globalCheck); console.log(chalk_1.default.cyan('\nšŸ—ļø Project Configuration:')); displayIntegrityCheck(projectCheck); } } async function showMigrationHistory(options, spinner) { if (spinner) spinner.setText('Loading migration history...'); const globalHistory = await migration_1.migrationManager.getMigrationHistory('global'); const projectHistory = await migration_1.migrationManager.getMigrationHistory('project'); if (spinner) spinner.stop(); if (options.json) { console.log(JSON.stringify({ global: globalHistory, project: projectHistory }, null, 2)); } else { console.log(chalk_1.default.cyan('\nšŸ“š Migration History')); console.log(chalk_1.default.gray('═'.repeat(40))); console.log(chalk_1.default.cyan('\n🌐 Global Configuration:')); displayMigrationHistory(globalHistory); console.log(chalk_1.default.cyan('\nšŸ—ļø Project Configuration:')); displayMigrationHistory(projectHistory); } } async function rollbackMigration(targetVersion, options, spinner) { if (spinner) spinner.setText(`Rolling back to version ${targetVersion}...`); const configType = options.global ? 'global' : 'project'; const result = await migration_1.migrationManager.rollback(configType, targetVersion); if (spinner) { if (result.success) { spinner.succeed(chalk_1.default.green(`Rollback to ${targetVersion} completed!`)); } else { spinner.fail(chalk_1.default.red(`Rollback to ${targetVersion} failed!`)); } } if (options.json) { console.log(JSON.stringify(result, null, 2)); } else { displayMigrationResult(result); } } async function migrateGlobalConfig(options, spinner) { if (spinner) spinner.setText('Migrating global configuration...'); const result = await migration_1.migrationManager.migrate('global'); if (spinner) { if (result.success) { spinner.succeed(chalk_1.default.green('Global configuration migrated successfully!')); } else { spinner.fail(chalk_1.default.red('Global configuration migration failed!')); } } if (options.json) { console.log(JSON.stringify(result, null, 2)); } else { displayMigrationResult(result); } } async function migrateProjectConfig(options, spinner) { if (spinner) spinner.setText('Migrating project configuration...'); const result = await migration_1.migrationManager.migrate('project'); if (spinner) { if (result.success) { spinner.succeed(chalk_1.default.green('Project configuration migrated successfully!')); } else { spinner.fail(chalk_1.default.red('Project configuration migration failed!')); } } if (options.json) { console.log(JSON.stringify(result, null, 2)); } else { displayMigrationResult(result); } } async function checkAndPromptMigration(options, spinner) { if (spinner) spinner.setText('Checking migration requirements...'); const globalNeeds = await migration_1.migrationManager.needsMigration('global'); const projectNeeds = await migration_1.migrationManager.needsMigration('project'); if (spinner) spinner.stop(); if (!globalNeeds && !projectNeeds) { console.log(chalk_1.default.green('\nāœ… All configurations are up to date!')); return; } console.log(chalk_1.default.yellow('\nāš ļø Configuration migration required')); if (globalNeeds) { console.log(chalk_1.default.yellow(' Global configuration needs migration')); } if (projectNeeds) { console.log(chalk_1.default.yellow(' Project configuration needs migration')); } if (!options.force) { const response = await (0, prompts_1.default)([ { type: 'confirm', name: 'migrate', message: 'Run migration now?', initial: true } ]); if (!response.migrate) { console.log(chalk_1.default.gray('Migration cancelled. Run with --auto to migrate automatically.')); return; } } await autoMigrate(options); } async function interactiveMigration(options, spinner) { if (spinner) spinner.stop(); const response = await (0, prompts_1.default)([ { type: 'select', name: 'action', message: 'What would you like to do?', choices: [ { title: 'šŸ”„ Auto-migrate all configurations', value: 'auto' }, { title: 'šŸ” Check migration status', value: 'check' }, { title: 'šŸ“š View migration history', value: 'history' }, { title: '🌐 Migrate global configuration only', value: 'global' }, { title: 'šŸ—ļø Migrate project configuration only', value: 'project' }, { title: 'āŖ Rollback to previous version', value: 'rollback' }, { title: 'šŸ”§ Advanced options', value: 'advanced' } ] } ]); if (!response.action) return; switch (response.action) { case 'auto': await autoMigrate(options); break; case 'check': await checkMigrationStatus(options); break; case 'history': await showMigrationHistory(options); break; case 'global': await migrateGlobalConfig(options); break; case 'project': await migrateProjectConfig(options); break; case 'rollback': await interactiveRollback(); break; case 'advanced': await interactiveAdvancedOptions(); break; } } async function interactiveRollback() { const globalHistory = await migration_1.migrationManager.getMigrationHistory('global'); const projectHistory = await migration_1.migrationManager.getMigrationHistory('project'); const response = await (0, prompts_1.default)([ { type: 'select', name: 'configType', message: 'Which configuration to rollback?', choices: [ { title: 'Global configuration', value: 'global' }, { title: 'Project configuration', value: 'project' } ] }, { type: 'select', name: 'version', message: 'Select target version:', choices: (prev) => { const history = prev.configType === 'global' ? globalHistory : projectHistory; return history.appliedMigrations.map(version => ({ title: version, value: version })); } }, { type: 'confirm', name: 'confirm', message: 'Are you sure you want to rollback? This action cannot be easily undone.', initial: false } ]); if (response.confirm) { const result = await migration_1.migrationManager.rollback(response.configType, response.version); displayMigrationResult(result); } } async function interactiveAdvancedOptions() { console.log(chalk_1.default.cyan('šŸ”§ Advanced migration options coming soon...')); const options = [ 'Custom migration scripts', 'Backup management', 'Configuration validation', 'Migration testing' ]; console.log(chalk_1.default.gray('\nPlanned features:')); options.forEach(option => { console.log(` • ${option}`); }); } // Display helper functions function displayMigrationResult(result) { if (result.success) { console.log(chalk_1.default.green(`āœ… Migration successful: ${result.fromVersion} → ${result.toVersion}`)); if (result.appliedMigrations.length > 0) { console.log(chalk_1.default.cyan('\nApplied migrations:')); result.appliedMigrations.forEach(version => { console.log(` • ${version}`); }); } } else { console.log(chalk_1.default.red(`āŒ Migration failed: ${result.fromVersion} → ${result.toVersion}`)); } if (result.warnings && result.warnings.length > 0) { console.log(chalk_1.default.yellow('\nWarnings:')); result.warnings.forEach(warning => { console.log(chalk_1.default.yellow(` āš ļø ${warning}`)); }); } if (result.errors && result.errors.length > 0) { console.log(chalk_1.default.red('\nErrors:')); result.errors.forEach(error => { console.log(chalk_1.default.red(` āŒ ${error}`)); }); } } function displayIntegrityCheck(check) { console.log(` Version: ${check.version}`); console.log(` Status: ${check.valid ? chalk_1.default.green('Valid') : chalk_1.default.red('Issues found')}`); if (check.issues.length > 0) { console.log(chalk_1.default.red(' Issues:')); check.issues.forEach(issue => { console.log(chalk_1.default.red(` • ${issue}`)); }); } if (check.recommendations.length > 0) { console.log(chalk_1.default.yellow(' Recommendations:')); check.recommendations.forEach(rec => { console.log(chalk_1.default.yellow(` • ${rec}`)); }); } } function displayMigrationHistory(history) { console.log(` Current version: ${chalk_1.default.green(history.currentVersion)}`); if (history.appliedMigrations.length > 0) { console.log(chalk_1.default.green(' Applied migrations:')); history.appliedMigrations.forEach(version => { console.log(chalk_1.default.green(` āœ… ${version}`)); }); } if (history.pendingMigrations.length > 0) { console.log(chalk_1.default.yellow(' Pending migrations:')); history.pendingMigrations.forEach(version => { console.log(chalk_1.default.yellow(` ā³ ${version}`)); }); } if (history.pendingMigrations.length === 0 && history.appliedMigrations.length > 0) { console.log(chalk_1.default.green(' Status: Up to date')); } }