#!/usr/bin/env node const fs = require('fs'); const path = require('path'); const { execSync } = require('child_process'); console.log('šŸš€ CKEditor5 Migration to Official Packages'); console.log('==========================================\n'); // Check current setup const packageJsonPath = path.join(process.cwd(), 'package.json'); const vendorPath = path.join(process.cwd(), 'vendor', 'ckeditor5'); if (!fs.existsSync(packageJsonPath)) { console.error('āŒ package.json not found'); process.exit(1); } const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); const hasCustomBuild = fs.existsSync(vendorPath); const hasCKEditorReact = packageJson.dependencies && packageJson.dependencies['@ckeditor/ckeditor5-react']; const hasCustomBuildDep = packageJson.dependencies && packageJson.dependencies['ckeditor5-custom-build']; console.log('šŸ“Š Current Setup Analysis:'); console.log(`- Custom CKEditor5 build: ${hasCustomBuild ? 'āœ… Found' : 'āŒ Not found'}`); console.log(`- CKEditor5 React: ${hasCKEditorReact ? 'āœ… Installed' : 'āŒ Not installed'}`); console.log(`- Custom build dependency: ${hasCustomBuildDep ? 'āœ… Found' : 'āŒ Not found'}`); console.log(`- Bundle size: ${hasCustomBuild ? '~2.4MB' : 'Unknown'}\n`); // Show available official builds console.log('šŸŽÆ Available Official CKEditor5 Builds:'); console.log('1. Classic Build - Full-featured editor (800KB)'); console.log('2. Decoupled Document - Document-style editor (1MB)'); console.log('3. Inline Build - Inline editing (600KB)'); console.log('4. Super Build - All features (1.5MB)'); console.log('5. Exit without changes\n'); // Get user choice const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('Choose your build (1-5): ', (choice) => { rl.close(); switch (choice.trim()) { case '1': migrateToClassic(); break; case '2': migrateToDecoupled(); break; case '3': migrateToInline(); break; case '4': migrateToSuper(); break; case '5': console.log('šŸ‘‹ Migration cancelled'); process.exit(0); default: console.log('āŒ Invalid choice'); process.exit(1); } }); function migrateToClassic() { console.log('\nšŸ”„ Migrating to CKEditor5 Classic Build...'); try { // Remove custom build dependency if (hasCustomBuildDep) { console.log('šŸ“¦ Removing custom build dependency...'); execSync('npm uninstall ckeditor5-custom-build', { stdio: 'inherit' }); } // Install official classic build console.log('šŸ“¦ Installing CKEditor5 Classic Build...'); execSync('npm install @ckeditor/ckeditor5-build-classic', { stdio: 'inherit' }); // Remove custom build directory if (hasCustomBuild) { console.log('šŸ—‘ļø Removing custom CKEditor5 build...'); execSync('rm -rf vendor/ckeditor5', { stdio: 'inherit' }); } console.log('\nāœ… Migration to Classic Build completed!'); console.log('šŸ“ Next steps:'); console.log('1. Update your editor components to use ImprovedCKEditor'); console.log('2. Replace imports from "ckeditor5-custom-build" to "@ckeditor/ckeditor5-build-classic"'); console.log('3. Test the new implementation'); console.log('4. Update any custom configurations'); } catch (error) { console.error('āŒ Migration failed:', error.message); process.exit(1); } } function migrateToDecoupled() { console.log('\nšŸ”„ Migrating to CKEditor5 Decoupled Document Build...'); try { // Remove custom build dependency if (hasCustomBuildDep) { console.log('šŸ“¦ Removing custom build dependency...'); execSync('npm uninstall ckeditor5-custom-build', { stdio: 'inherit' }); } // Install official decoupled build console.log('šŸ“¦ Installing CKEditor5 Decoupled Document Build...'); execSync('npm install @ckeditor/ckeditor5-build-decoupled-document', { stdio: 'inherit' }); // Remove custom build directory if (hasCustomBuild) { console.log('šŸ—‘ļø Removing custom CKEditor5 build...'); execSync('rm -rf vendor/ckeditor5', { stdio: 'inherit' }); } console.log('\nāœ… Migration to Decoupled Document Build completed!'); console.log('šŸ“ Next steps:'); console.log('1. Update your editor components to use ImprovedCKEditor with features="document"'); console.log('2. Replace imports from "ckeditor5-custom-build" to "@ckeditor/ckeditor5-build-decoupled-document"'); console.log('3. Test the new implementation'); console.log('4. Update any custom configurations'); } catch (error) { console.error('āŒ Migration failed:', error.message); process.exit(1); } } function migrateToInline() { console.log('\nšŸ”„ Migrating to CKEditor5 Inline Build...'); try { // Remove custom build dependency if (hasCustomBuildDep) { console.log('šŸ“¦ Removing custom build dependency...'); execSync('npm uninstall ckeditor5-custom-build', { stdio: 'inherit' }); } // Install official inline build console.log('šŸ“¦ Installing CKEditor5 Inline Build...'); execSync('npm install @ckeditor/ckeditor5-build-inline', { stdio: 'inherit' }); // Remove custom build directory if (hasCustomBuild) { console.log('šŸ—‘ļø Removing custom CKEditor5 build...'); execSync('rm -rf vendor/ckeditor5', { stdio: 'inherit' }); } console.log('\nāœ… Migration to Inline Build completed!'); console.log('šŸ“ Next steps:'); console.log('1. Update your editor components to use ImprovedCKEditor with features="inline"'); console.log('2. Replace imports from "ckeditor5-custom-build" to "@ckeditor/ckeditor5-build-inline"'); console.log('3. Test the new implementation'); console.log('4. Update any custom configurations'); } catch (error) { console.error('āŒ Migration failed:', error.message); process.exit(1); } } function migrateToSuper() { console.log('\nšŸ”„ Migrating to CKEditor5 Super Build...'); try { // Remove custom build dependency if (hasCustomBuildDep) { console.log('šŸ“¦ Removing custom build dependency...'); execSync('npm uninstall ckeditor5-custom-build', { stdio: 'inherit' }); } // Install official super build console.log('šŸ“¦ Installing CKEditor5 Super Build...'); execSync('npm install @ckeditor/ckeditor5-build-super-build', { stdio: 'inherit' }); // Remove custom build directory if (hasCustomBuild) { console.log('šŸ—‘ļø Removing custom CKEditor5 build...'); execSync('rm -rf vendor/ckeditor5', { stdio: 'inherit' }); } console.log('\nāœ… Migration to Super Build completed!'); console.log('šŸ“ Next steps:'); console.log('1. Update your editor components to use ImprovedCKEditor with features="full"'); console.log('2. Replace imports from "ckeditor5-custom-build" to "@ckeditor/ckeditor5-build-super-build"'); console.log('3. Test the new implementation'); console.log('4. Update any custom configurations'); } catch (error) { console.error('āŒ Migration failed:', error.message); process.exit(1); } }