New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

fix-peer-deps

Package Overview
Dependencies
Maintainers
0
Versions
26
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

fix-peer-deps - npm Package Compare versions

Comparing version 1.1.8 to 1.1.9

16

CHANGELOG.md

@@ -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",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc