Skip to content

Commit

Permalink
fix: Is there a way to not upgrade a package if it's peer depndencies…
Browse files Browse the repository at this point in the history
… are not currently met raineorshine#1418
  • Loading branch information
rbnayax committed Jul 7, 2024
1 parent 38a6ca4 commit 4aafab3
Showing 1 changed file with 19 additions and 5 deletions.
24 changes: 19 additions & 5 deletions src/lib/upgradePackageDefinitions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,30 @@ import { pickBy } from './pick'
import queryVersions from './queryVersions'
import upgradeDependencies from './upgradeDependencies'

/**
* check if in peer violation
*
* @returns
*/
const checkIfInPeerViolation = (
currentDependencies: Index<VersionSpec>,
filteredUpgradedDependencies: Index<VersionSpec>,
upgradedPeerDependencies: Index<Index<VersionSpec>>,
latestVersionResults: Index<VersionResult>,
) => {
const upgradedDependencies = { ...currentDependencies, ...filteredUpgradedDependencies }
const filteredLatestDependencies = pickBy(latestVersionResults, (spec, dep) => upgradedDependencies[dep])
const filteredUpgradedPeerDependencies = {...upgradedPeerDependencies}
let wereUpgradedDependenceFiltered = false
const filteredUpgradedDependenciesAfterPeers = pickBy(filteredUpgradedDependencies, (spec, dep) => {
const peerDeps = filteredUpgradedPeerDependencies[dep]
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]
Expand All @@ -39,6 +48,11 @@ const checkIfInPeerViolation = (
}
}

/**
* rerun upgrade if changed peers
*
* @returns
*/
const rerunUpgradeIfChangedPeers = async (
currentDependencies: Index<VersionSpec>,
filteredUpgradedDependencies: Index<VersionSpec>,
Expand Down Expand Up @@ -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,
Expand All @@ -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
}
Expand All @@ -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
}
Expand Down

0 comments on commit 4aafab3

Please sign in to comment.