UNPKG

ng-upgrade-orchestrator

Version:

Enterprise-grade Angular Multi-Version Upgrade Orchestrator with automatic npm installation, comprehensive dependency management, and seamless integration of all 9 official Angular migrations. Safely migrate Angular applications across multiple major vers

166 lines (141 loc) β€’ 7.07 kB
#!/usr/bin/env node /** * Example: Conservative Angular Upgrade * * This example demonstrates a conservative upgrade strategy that prioritizes * maximum safety and backward compatibility over modernization. */ const { UpgradeOrchestrator } = require('../dist/index.js'); async function conservativeUpgradeExample() { console.log('πŸ›‘οΈ Conservative Angular Upgrade Example\n'); const projectPath = process.argv[2] || process.cwd(); const orchestrator = new UpgradeOrchestrator(projectPath); // Enhanced progress monitoring for conservative upgrades orchestrator.on('progress', (report) => { console.log(`πŸ“‹ ${report.message}`); }); orchestrator.on('analysis-complete', (analysis) => { console.log('πŸ” Project Analysis Complete:'); console.log(` Current Version: Angular ${analysis.currentVersion.full}`); console.log(` Project Type: ${analysis.projectType}`); console.log(` Risk Level: ${analysis.riskAssessment.overallRisk}`); if (analysis.riskAssessment.riskFactors.length > 0) { console.log('\n⚠️ Risk Factors Identified:'); analysis.riskAssessment.riskFactors.forEach(risk => { console.log(` β€’ ${risk.description} (${risk.severity})`); }); } console.log(''); }); orchestrator.on('path-calculated', (path) => { console.log('πŸ—ΊοΈ Upgrade Path Calculated:'); console.log(` Steps: ${path.steps.length}`); path.steps.forEach((step, index) => { console.log(` ${index + 1}. Angular ${step.fromVersion} β†’ ${step.toVersion}`); }); console.log(''); }); orchestrator.on('manual-intervention', ({ change, instructions }) => { console.log('\nπŸ‘‹ Manual Intervention Required:'); console.log(` Change: ${change.description}`); console.log(` Severity: ${change.severity}`); console.log(` Instructions: ${instructions}`); console.log(' ⏸️ Pausing automatic upgrade - please address manually\n'); }); // Conservative upgrade configuration const upgradeOptions = { targetVersion: '16', // Conservative target - not jumping too far strategy: 'conservative', checkpointFrequency: 'every-step', // Maximum checkpoints for safety validationLevel: 'comprehensive', // Thorough testing at each step thirdPartyHandling: 'manual', // Manual review of all dependency changes rollbackPolicy: 'auto-on-failure', // Auto-rollback on any failure parallelProcessing: false // Sequential processing for stability }; try { console.log('πŸ›‘οΈ Conservative Upgrade Configuration:'); console.log(` Target Version: Angular ${upgradeOptions.targetVersion}`); console.log(` Strategy: ${upgradeOptions.strategy}`); console.log(` Checkpoint Frequency: ${upgradeOptions.checkpointFrequency}`); console.log(` Validation Level: ${upgradeOptions.validationLevel}`); console.log(` Third-party Handling: ${upgradeOptions.thirdPartyHandling}`); console.log(` Rollback Policy: ${upgradeOptions.rollbackPolicy}\n`); // Analyze project first console.log('πŸ” Analyzing project for upgrade readiness...'); const result = await orchestrator.orchestrateUpgrade(upgradeOptions); if (result.success) { console.log('\nπŸŽ‰ Conservative Upgrade Completed Successfully!'); console.log('\nπŸ“Š Upgrade Summary:'); console.log(` βœ… Upgraded from Angular ${result.fromVersion} to ${result.toVersion}`); console.log(` ⏱️ Total Duration: ${Math.round(result.duration / 1000)} seconds`); console.log(` πŸ“‹ Steps Completed: ${result.completedSteps.length}`); console.log(` πŸ”„ Checkpoints Created: ${result.checkpoints.length}`); console.log(` πŸ›‘οΈ Zero Breaking Changes: Maintained full backward compatibility`); console.log('\nπŸ” Post-Upgrade Verification:'); console.log(' βœ… All existing functionality preserved'); console.log(' βœ… No forced API migrations'); console.log(' βœ… Legacy patterns still supported'); console.log(' βœ… Optional new features available for gradual adoption'); if (result.warnings && result.warnings.length > 0) { console.log('\n⚠️ Upgrade Warnings (Non-Critical):'); result.warnings.forEach(warning => { console.log(` β€’ ${warning}`); }); } console.log('\nπŸš€ Recommended Next Steps:'); console.log(' 1. Run comprehensive test suite'); console.log(' 2. Perform manual smoke testing'); console.log(' 3. Review deprecated API warnings (no immediate action needed)'); console.log(' 4. Plan gradual adoption of new features'); console.log(' 5. Consider next conservative upgrade in 3-6 months'); console.log('\nπŸ’‘ New Features Available (Optional):'); result.completedSteps.forEach(step => { const majorVersion = parseInt(step.toVersion); switch (majorVersion) { case 13: console.log(' β€’ Ivy renderer optimizations (automatic)'); break; case 14: console.log(' β€’ Standalone components (opt-in)'); break; case 15: console.log(' β€’ Image directive with optimization (opt-in)'); break; case 16: console.log(' β€’ Required inputs API (opt-in)'); console.log(' β€’ Router data as input (opt-in)'); break; } }); } else { console.log('\n❌ Conservative Upgrade Failed'); console.log(`Error: ${result.error?.message}`); console.log('\nπŸ”„ Automatic Rollback Initiated'); console.log(' Your application has been restored to its original state'); console.log(' All changes have been reverted automatically'); console.log('\nπŸ” Failure Analysis:'); if (result.failedStep) { console.log(` Failed at: Angular ${result.failedStep.fromVersion} β†’ ${result.failedStep.toVersion}`); } console.log(` Completed steps: ${result.completedSteps.length}`); console.log(` Available checkpoints: ${result.checkpoints.length}`); console.log('\nπŸ› οΈ Troubleshooting Recommendations:'); console.log(' 1. Review the error message above'); console.log(' 2. Check Node.js and npm versions meet requirements'); console.log(' 3. Ensure all dependencies are up to date'); console.log(' 4. Try upgrading one version at a time manually'); console.log(' 5. Contact support with the error details'); } } catch (error) { console.error('\nπŸ’₯ Unexpected Error:', error.message); console.log('\nπŸ†˜ Emergency Recovery:'); console.log(' Your project should be automatically restored'); console.log(' If not, check available checkpoints with:'); console.log(' ng-upgrade checkpoints --list'); } } // Run the example if (require.main === module) { conservativeUpgradeExample().catch(console.error); } module.exports = { conservativeUpgradeExample };