UNPKG

pdc-hyperdrift

Version:

Smart dependency compatibility checker that prevents peer dependency conflicts before you upgrade

163 lines (141 loc) โ€ข 5.06 kB
#!/usr/bin/env node /** * peer-dependency-checker CLI * by hyperdrift */ const { Command } = require('commander'); const { execSync } = require('child_process'); const fs = require('fs'); const path = require('path'); console.log('๐Ÿ” peer-dependency-checker by hyperdrift\n'); const program = new Command(); program .name('pdc') .description('Smart dependency compatibility checker') .version('1.0.0'); program .command('scan') .description('Analyze current project for upgrade opportunities') .option('-q, --quick', 'Quick scan with minimal output') .action((options) => { if (options.quick) { console.log('๐Ÿ” Quick scanning...'); } else { console.log('๐Ÿ” Scanning your project...\n'); } try { const scriptPath = path.join(__dirname, '..', 'src', 'upgrade-check.js'); const env = options.quick ? { ...process.env, QUICK_MODE: 'true' } : process.env; execSync(`node "${scriptPath}"`, { stdio: 'inherit', env }); } catch (error) { console.error('โŒ Error running scan:', error.message); } }); program .command('analyze') .description('Deep peer dependency analysis') .option('-b, --brief', 'Brief analysis with key findings only') .action((options) => { if (options.brief) { console.log('๐Ÿ”ฌ Brief analysis...'); } else { console.log('๐Ÿ”ฌ Running deep analysis...\n'); } try { const scriptPath = path.join(__dirname, '..', 'src', 'peer-check.js'); const env = options.brief ? { ...process.env, BRIEF_MODE: 'true' } : process.env; execSync(`node "${scriptPath}"`, { stdio: 'inherit', env }); } catch (error) { console.error('โŒ Error running analysis:', error.message); } }); program .command('precheck') .description('Pre-installation compatibility check') .argument('[packages...]', 'Packages to check before installing') .action((packages) => { console.log('๐Ÿ›ก๏ธ Running pre-installation checks...\n'); if (packages && packages.length > 0) { // Check specific packages console.log(`๐Ÿ“ฆ Checking ${packages.length} package(s) for conflicts...\n`); packages.forEach(pkg => { console.log(`๐Ÿ” ${pkg}`); try { const [name, version] = pkg.includes('@') ? pkg.split('@') : [pkg, 'latest']; const result = execSync(`npm info ${name}@${version || 'latest'} peerDependencies`, { encoding: 'utf8', stdio: 'pipe' }); if (result.trim()) { console.log(` โ””โ”€โ”€ Peer deps: ${result.trim()}`); } else { console.log(' โ””โ”€โ”€ No peer dependencies required'); } } catch (error) { console.log(` โ””โ”€โ”€ โš ๏ธ Could not fetch info for ${pkg}`); } }); } else { // General project health check try { const scriptPath = path.join(__dirname, '..', 'src', 'peer-check.js'); execSync(`node "${scriptPath}"`, { stdio: 'inherit', env: { ...process.env, BRIEF_MODE: 'true' } }); } catch (error) { console.error('โŒ Error running precheck:', error.message); } } }); program .command('check') .argument('[packages...]', 'Packages to check') .description('Test specific package upgrades') .action((packages) => { if (!packages || packages.length === 0) { console.log('โš ๏ธ Please specify packages to check. Example:'); console.log(' pdc check react@19 react-dom@19'); return; } console.log(`๐Ÿงช Testing ${packages.length} package(s)...\n`); packages.forEach(pkg => { console.log(`โœ… ${pkg}`); try { const [name, version] = pkg.includes('@') ? pkg.split('@') : [pkg, 'latest']; const result = execSync(`npm info ${name}@${version || 'latest'} peerDependencies`, { encoding: 'utf8', stdio: 'pipe' }); if (result.trim()) { console.log(` โ””โ”€โ”€ Peer deps: ${result.trim()}`); } else { console.log(' โ””โ”€โ”€ No peer dependencies required'); } } catch (error) { console.log(` โ””โ”€โ”€ Error: Could not fetch info for ${pkg}`); } }); }); program .command('setup') .description('One-command setup for any project (external developers)') .action(() => { console.log('๐Ÿš€ Running project setup...\n'); try { const scriptPath = path.join(__dirname, 'setup.js'); execSync(`node "${scriptPath}"`, { stdio: 'inherit' }); } catch (error) { console.error('โŒ Setup failed:', error.message); process.exit(1); } }); if (process.argv.length <= 2) { console.log('Quick commands:'); console.log(' pdc scan Analyze your project'); console.log(' pdc check react@19 Test specific upgrade'); console.log(' pdc analyze Deep analysis\n'); console.log('Run "pdc --help" for all commands'); process.exit(0); } program.parse();