fix-peer-deps
Advanced tools
Comparing version 1.0.8 to 1.0.9
70
index.js
@@ -26,30 +26,68 @@ #!/usr/bin/env node | ||
const { execa } = await import('execa'); | ||
await execa.command(command, { stdio: 'inherit' }); | ||
return await execa.command(command, { stdio: 'inherit' }); | ||
} | ||
async function fixPeerDependencies() { | ||
async function getInstalledVersion(packageName) { | ||
try { | ||
const packagePath = join(process.cwd(), 'node_modules', packageName, 'package.json'); | ||
const packageJson = JSON.parse(await fs.readFile(packagePath, 'utf8')); | ||
return packageJson.version; | ||
} catch (error) { | ||
return null; | ||
} | ||
} | ||
async function analyzePeerDependencies() { | ||
const packageJson = JSON.parse(await fs.readFile('package.json', 'utf8')); | ||
const peerDependencies = packageJson.peerDependencies || {}; | ||
const packageManager = await getPackageManager(); | ||
const dependencies = packageJson.dependencies || {}; | ||
const devDependencies = packageJson.devDependencies || {}; | ||
if (packageManager === 'yarn') { | ||
// For Yarn, we'll use a different approach | ||
const peerDepsToInstall = Object.entries(peerDependencies) | ||
.map(([name, version]) => `${name}@${version}`) | ||
.join(' '); | ||
const issues = []; | ||
if (peerDepsToInstall) { | ||
await runCommand(`yarn add ${peerDepsToInstall} --peer`); | ||
for (const [packageName, versionRange] of Object.entries(peerDependencies)) { | ||
const installedVersion = await getInstalledVersion(packageName); | ||
if (!installedVersion) { | ||
issues.push(`${packageName} is not installed.`); | ||
} else if (!semver.satisfies(installedVersion, versionRange)) { | ||
issues.push(`${packageName}@${installedVersion} does not satisfy the required range ${versionRange}.`); | ||
} | ||
// Run yarn install to ensure everything is correctly linked | ||
if (dependencies[packageName] || devDependencies[packageName]) { | ||
issues.push(`${packageName} is listed as both a peer dependency and a regular/dev dependency.`); | ||
} | ||
} | ||
return issues; | ||
} | ||
async function fixPeerDependencies() { | ||
const packageManager = await getPackageManager(); | ||
const issues = await analyzePeerDependencies(); | ||
if (issues.length === 0) { | ||
console.log('No peer dependency issues detected.'); | ||
return; | ||
} | ||
console.log('Detected peer dependency issues:'); | ||
issues.forEach(issue => console.log(`- ${issue}`)); | ||
if (packageManager === 'yarn') { | ||
console.log('\nAttempting to fix issues with Yarn...'); | ||
await runCommand('yarn install'); | ||
} else { | ||
// For other package managers, we'll keep the previous approach | ||
for (const [packageName, versionRange] of Object.entries(peerDependencies)) { | ||
await runCommand(`${packageManager} add ${packageName}@${versionRange} --save-peer`); | ||
} | ||
console.log('\nAttempting to fix issues...'); | ||
await runCommand(`${packageManager} install`); | ||
} | ||
console.log('All peer dependencies have been checked and updated if necessary.'); | ||
const remainingIssues = await analyzePeerDependencies(); | ||
if (remainingIssues.length > 0) { | ||
console.log('\nSome issues could not be automatically resolved:'); | ||
remainingIssues.forEach(issue => console.log(`- ${issue}`)); | ||
console.log('\nPlease review your package.json and manually adjust dependencies as needed.'); | ||
} else { | ||
console.log('\nAll peer dependency issues have been resolved.'); | ||
} | ||
} | ||
@@ -56,0 +94,0 @@ |
{ | ||
"name": "fix-peer-deps", | ||
"version": "1.0.8", | ||
"version": "1.0.9", | ||
"main": "index.js", | ||
@@ -5,0 +5,0 @@ "type": "module", |
5417
79