From 4aafab3ce4a807f95336868ba44fad5a1fbe7ed5 Mon Sep 17 00:00:00 2001 From: Regev Brody Date: Sun, 2 Jun 2024 13:24:08 +0300 Subject: [PATCH] fix: Is there a way to not upgrade a package if it's peer depndencies are not currently met #1418 --- src/lib/upgradePackageDefinitions.ts | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/lib/upgradePackageDefinitions.ts b/src/lib/upgradePackageDefinitions.ts index aaf3b19f..82a310e2 100644 --- a/src/lib/upgradePackageDefinitions.ts +++ b/src/lib/upgradePackageDefinitions.ts @@ -11,12 +11,19 @@ import { pickBy } from './pick' import queryVersions from './queryVersions' import upgradeDependencies from './upgradeDependencies' +/** + * check if in peer violation + * + * @returns + */ const checkIfInPeerViolation = ( currentDependencies: Index, filteredUpgradedDependencies: Index, upgradedPeerDependencies: Index>, + latestVersionResults: Index, ) => { const upgradedDependencies = { ...currentDependencies, ...filteredUpgradedDependencies } + const filteredLatestDependencies = pickBy(latestVersionResults, (spec, dep) => upgradedDependencies[dep]) const filteredUpgradedPeerDependencies = {...upgradedPeerDependencies} let wereUpgradedDependenceFiltered = false const filteredUpgradedDependenciesAfterPeers = pickBy(filteredUpgradedDependencies, (spec, dep) => { @@ -24,8 +31,10 @@ const checkIfInPeerViolation = ( if (!peerDeps) { return true } - const valid = Object.entries(peerDeps).every(([peer, peerSpec]) => - upgradedDependencies[peer] !== undefined && semver.satisfies(upgradedDependencies[peer], peerSpec)) + const valid = Object.entries(peerDeps).every(([peer, peerSpec]) => { + const version = filteredLatestDependencies[peer]?.version + return !version || semver.satisfies(version, peerSpec) + }) if (!valid) { wereUpgradedDependenceFiltered = true; delete filteredUpgradedPeerDependencies[dep] @@ -39,6 +48,11 @@ const checkIfInPeerViolation = ( } } +/** + * rerun upgrade if changed peers + * + * @returns + */ const rerunUpgradeIfChangedPeers = async ( currentDependencies: Index, filteredUpgradedDependencies: Index, @@ -99,7 +113,7 @@ export async function upgradePackageDefinitions( if (options.peer && Object.keys(filteredLatestDependencies).length > 0) { const upgradedPeerDependencies = await getPeerDependenciesFromRegistry(filteredLatestDependencies, options) - const checkPeerViolationResult = checkIfInPeerViolation(currentDependencies, filteredUpgradedDependencies, upgradedPeerDependencies) + const checkPeerViolationResult = checkIfInPeerViolation(currentDependencies, filteredUpgradedDependencies, upgradedPeerDependencies, latestVersionResults) if (checkPeerViolationResult.issuesFound) { const fullRerunResult = await rerunUpgradeIfChangedPeers( currentDependencies, @@ -109,7 +123,7 @@ export async function upgradePackageDefinitions( options, ) if (fullRerunResult) { - const checkPeerViolationResultFullRerun = checkIfInPeerViolation(currentDependencies, fullRerunResult[0], fullRerunResult[2]!) + const checkPeerViolationResultFullRerun = checkIfInPeerViolation(currentDependencies, fullRerunResult[0], fullRerunResult[2]!, fullRerunResult[1]) if (!checkPeerViolationResultFullRerun.issuesFound) { return fullRerunResult } @@ -122,7 +136,7 @@ export async function upgradePackageDefinitions( options, ) if (partialRerunResult) { - const checkPeerViolationResultPartialRerun = checkIfInPeerViolation(currentDependencies, partialRerunResult[0], partialRerunResult[2]!) + const checkPeerViolationResultPartialRerun = checkIfInPeerViolation(currentDependencies, partialRerunResult[0], partialRerunResult[2]!, partialRerunResult[1]) if (!checkPeerViolationResultPartialRerun.issuesFound) { return partialRerunResult }