fix-peer-deps
Advanced tools
Comparing version 1.1.8 to 1.1.9
@@ -8,2 +8,14 @@ # Changelog | ||
## [1.1.9] - 2024-12-08 | ||
### Changed | ||
- Updated package.json bin field to use named export | ||
- Improved error output formatting for better readability | ||
### Fixed | ||
- Fixed duplicate dependency messages in output | ||
- Improved handling of Yarn modern versions verification | ||
## [1.1.8] - 2024-12-08 | ||
@@ -16,2 +28,4 @@ | ||
- Reorganized code structure for better maintainability | ||
- Updated package manager verification commands for better compatibility | ||
- Improved output formatting and deduplication of dependency messages | ||
@@ -23,2 +37,4 @@ ### Fixed | ||
- Improved handling of environment variables for package manager detection | ||
- Fixed Yarn verification command to use 'info' instead of 'list' | ||
- Resolved duplicate output of missing dependencies | ||
@@ -25,0 +41,0 @@ ## [1.1.7] - 2024-12-08 |
127
index.js
@@ -11,3 +11,3 @@ #!/usr/bin/env node | ||
const VERSION = '1.1.8'; // Match with package.json | ||
const VERSION = '1.1.9'; // Match with package.json | ||
@@ -193,2 +193,29 @@ const IGNORE_PATTERNS = [ | ||
const PACKAGE_MANAGERS = { | ||
npm: { | ||
cmd: 'npm', | ||
args: ['install', '--save-peer', '--legacy-peer-deps'], | ||
verifyCmd: 'npm', | ||
verifyArgs: ['ls', '--json', '--all'] | ||
}, | ||
yarn: { | ||
cmd: 'yarn', | ||
args: ['add'], | ||
verifyCmd: 'yarn', | ||
verifyArgs: ['info', '--json'] // Changed from 'list' to 'info' | ||
}, | ||
pnpm: { | ||
cmd: 'pnpm', | ||
args: ['add'], | ||
verifyCmd: 'pnpm', | ||
verifyArgs: ['list', '--json'] | ||
}, | ||
bun: { | ||
cmd: 'bun', | ||
args: ['add'], | ||
verifyCmd: 'bun', | ||
verifyArgs: ['pm', 'ls', '--json'] | ||
} | ||
}; | ||
async function analyzePeerDependencies(dependencies, onProgress) { | ||
@@ -198,26 +225,49 @@ const spinner = ora('Analyzing dependencies...').start(); | ||
try { | ||
const { missingPeerDeps, versionConflicts } = await analyzeDependencies(dependencies); | ||
if (missingPeerDeps.length > 0) { | ||
spinner.warn('Found missing peer dependencies'); | ||
const missingDeps = new Set(); | ||
const versionConflicts = new Set(); | ||
let total = Object.keys(dependencies).length; | ||
let current = 0; | ||
for (const [name, info] of Object.entries(dependencies)) { | ||
if (onProgress) { | ||
onProgress(++current, total); | ||
} | ||
if (info.peerDependencies) { | ||
for (const [peerName, requiredVersion] of Object.entries(info.peerDependencies)) { | ||
const installedVersion = dependencies[peerName]?.version; | ||
if (!installedVersion) { | ||
missingDeps.add(`${peerName}@${requiredVersion}`); | ||
} else if (!semver.satisfies(installedVersion, requiredVersion)) { | ||
versionConflicts.add( | ||
`${name} requires ${peerName}@${requiredVersion}, but ${installedVersion} is installed` | ||
); | ||
} | ||
} | ||
} | ||
} | ||
spinner.succeed('Analysis complete'); | ||
// Deduplicate and sort the output | ||
const uniqueMissingDeps = [...new Set(missingDeps)].sort(); | ||
const uniqueVersionConflicts = [...new Set(versionConflicts)].sort(); | ||
if (uniqueMissingDeps.length > 0) { | ||
console.log('\nMissing peer dependencies:'); | ||
missingPeerDeps.forEach(dep => console.log(chalk.yellow(`- ${dep}`))); | ||
uniqueMissingDeps.forEach(dep => console.log(`- ${dep}`)); | ||
} | ||
if (versionConflicts.length > 0) { | ||
spinner.warn('Found version conflicts'); | ||
if (uniqueVersionConflicts.length > 0) { | ||
console.log('\nVersion conflicts:'); | ||
versionConflicts.forEach(conflict => { | ||
console.log(chalk.yellow(`- ${conflict.package} requires ${conflict.peer}@${conflict.required}, but ${conflict.installed} is installed`)); | ||
}); | ||
uniqueVersionConflicts.forEach(conflict => console.log(`- ${conflict}`)); | ||
} | ||
if (missingPeerDeps.length === 0 && versionConflicts.length === 0) { | ||
spinner.succeed('No peer dependency issues found'); | ||
} | ||
return { missingPeerDeps, versionConflicts }; | ||
return { | ||
missingDeps: uniqueMissingDeps, | ||
versionConflicts: uniqueVersionConflicts | ||
}; | ||
} catch (error) { | ||
spinner.fail('Error analyzing dependencies'); | ||
console.error(chalk.red(error.message)); | ||
spinner.fail('Analysis failed'); | ||
throw error; | ||
@@ -230,3 +280,3 @@ } | ||
if (!issues || !issues.missingPeerDeps || issues.missingPeerDeps.length === 0) { | ||
if (!issues || !issues.missingDeps || issues.missingDeps.length === 0) { | ||
console.log(chalk.green('✨ No issues to fix!')); | ||
@@ -240,3 +290,3 @@ return; | ||
// Format the version ranges properly | ||
const depsToInstall = issues.missingPeerDeps | ||
const depsToInstall = issues.missingDeps | ||
.map(dep => { | ||
@@ -257,30 +307,3 @@ if (typeof dep === 'string') { | ||
// Package manager specific install commands | ||
const commands = { | ||
npm: { | ||
cmd: 'npm', | ||
args: ['install', '--save-peer', '--legacy-peer-deps'], | ||
verifyCmd: 'npm', | ||
verifyArgs: ['ls', '--json', '--all'] | ||
}, | ||
yarn: { | ||
cmd: 'yarn', | ||
args: ['add'], | ||
verifyCmd: 'yarn', | ||
verifyArgs: ['list', '--json'] | ||
}, | ||
pnpm: { | ||
cmd: 'pnpm', | ||
args: ['add', '--save-peer'], | ||
verifyCmd: 'pnpm', | ||
verifyArgs: ['list', '--json'] | ||
}, | ||
bun: { | ||
cmd: 'bun', | ||
args: ['add'], | ||
verifyCmd: 'bun', | ||
verifyArgs: ['pm', 'ls', '--json'] | ||
} | ||
}; | ||
const command = commands[packageManager]; | ||
const command = PACKAGE_MANAGERS[packageManager]; | ||
if (!command) { | ||
@@ -425,6 +448,6 @@ throw new Error(`Unsupported package manager: ${packageManager}`); | ||
await autoFix(issues, packageManager); | ||
} else if (issues.missingPeerDeps.length > 0 || issues.versionConflicts.length > 0) { | ||
console.log(formatDependencyTree(issues.missingPeerDeps)); | ||
} else if (issues.missingDeps.length > 0 || issues.versionConflicts.length > 0) { | ||
console.log(formatDependencyTree(issues.missingDeps)); | ||
console.log(formatDependencyTree(issues.versionConflicts)); | ||
console.log(formatSuggestedActions(issues.missingPeerDeps, packageManager)); | ||
console.log(formatSuggestedActions(issues.missingDeps, packageManager)); | ||
console.log(formatSuggestedActions(issues.versionConflicts, packageManager)); | ||
@@ -431,0 +454,0 @@ } else { |
{ | ||
"name": "fix-peer-deps", | ||
"version": "1.1.8", | ||
"version": "1.1.9", | ||
"description": "A modern CLI tool to analyze and fix peer dependency issues across multiple package managers", | ||
@@ -13,3 +13,5 @@ "main": "index.js", | ||
}, | ||
"bin": "./index.js", | ||
"bin": { | ||
"fix-peer-deps": "index.js" | ||
}, | ||
"repository": { | ||
@@ -16,0 +18,0 @@ "type": "git", |
44859
589