UNPKG

epd

Version:

Enhanced peer dependency resolution for npm, yarn, and pnpm

70 lines 2.44 kB
import fs from 'fs/promises'; import { fetchPackageVersions } from './registry.js'; export async function planSafeUpdates(packageJson) { const deps = { ...packageJson.dependencies, ...packageJson.devDependencies }; const plans = []; for (const [pkg, currentVersion] of Object.entries(deps)) { const plan = await createUpdatePlan(pkg, currentVersion); if (plan) plans.push(plan); } return plans.filter(p => p.safe); } export async function applyUpdates(plans, breakingChanges = false) { const packageJson = JSON.parse(await fs.readFile('package.json', 'utf-8')); let updated = false; for (const plan of plans) { if (plan.safe || (breakingChanges && plan.breaking)) { if (packageJson.dependencies?.[plan.package]) { packageJson.dependencies[plan.package] = plan.target; updated = true; } if (packageJson.devDependencies?.[plan.package]) { packageJson.devDependencies[plan.package] = plan.target; updated = true; } } } if (updated) { await fs.writeFile('package.json', JSON.stringify(packageJson, null, 2)); console.log(`✅ Updated ${plans.length} packages`); } } async function createUpdatePlan(pkg, currentVersion) { try { const versions = await fetchPackageVersions(pkg); const latest = versions[0]; if (!latest || latest === currentVersion.replace(/[\^~]/, '')) { return null; } const current = parseVersion(currentVersion); const target = parseVersion(latest); const type = getUpdateType(current, target); const breaking = type === 'major'; const safe = type === 'patch' || (type === 'minor' && !breaking); return { package: pkg, current: currentVersion, target: latest, type, breaking, safe }; } catch { return null; } } function parseVersion(version) { const clean = version.replace(/[\^~]/, ''); const parts = clean.split('.').map(Number); return [parts[0] || 0, parts[1] || 0, parts[2] || 0]; } function getUpdateType(current, target) { if (target[0] > current[0]) return 'major'; if (target[1] > current[1]) return 'minor'; return 'patch'; } //# sourceMappingURL=auto-updater.js.map