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

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