Skip to content

Commit 1b3185c

Browse files
committed
Guard against invalid peerDependencies semver range (#1467).
1 parent 3ab8125 commit 1b3185c

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

src/lib/getIgnoredUpgradesDueToPeerDeps.ts

+10-2
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,22 @@ export async function getIgnoredUpgradesDueToPeerDeps(
4747
latestVersionResults[pkgName]?.version &&
4848
!satisfies(latestVersionResults[pkgName].version!, peers[pkgName]),
4949
)
50-
.reduce((accumReason, [peerPkg, peers]) => ({ ...accumReason, [peerPkg]: peers[pkgName] }), {} as Index<string>)
50+
.reduce(
51+
(accumReason, [peerPkg, peers]) => ({
52+
...accumReason,
53+
[peerPkg]: !validRange(peers[pkgName])
54+
? `a range that semver does not understand: ${peers[pkgName]}. This range does not work with semver.satisfies or semver.intersects, which npm-check-updates relies on to determine peer dependency compatibility. Either this is a mistake in ${peerPkg}, or it relies on a new syntax that is not compatible with the semver package.`
55+
: peers[pkgName],
56+
}),
57+
{} as Index<string>,
58+
)
5159
if (Object.keys(reason).length === 0) {
5260
const peersOfPkg = upgradedPeerDependenciesLatest?.[pkgName] || {}
5361
reason = Object.entries(peersOfPkg)
5462
.filter(
5563
([peer, peerSpec]) =>
5664
upgradedPackagesWithPeerRestriction[peer] &&
57-
!intersects(upgradedPackagesWithPeerRestriction[peer], peerSpec),
65+
!(!validRange(peerSpec) || intersects(upgradedPackagesWithPeerRestriction[peer], peerSpec)),
5866
)
5967
.reduce(
6068
(accumReason, [peerPkg, peerSpec]) => ({ ...accumReason, [pkgName]: `${peerPkg} ${peerSpec}` }),

src/lib/upgradePackageDefinitions.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { dequal } from 'dequal'
2-
import { intersects, satisfies } from 'semver'
2+
import { intersects, satisfies, validRange } from 'semver'
33
import { parse, parseRange } from 'semver-utils'
44
import { Index } from '../types/IndexType'
55
import { Options } from '../types/Options'
@@ -36,7 +36,9 @@ const checkIfInPeerViolation = (
3636
}
3737
return Object.entries(peerDeps).every(
3838
([peer, peerSpec]) =>
39-
upgradedDependencies[peer] === undefined || intersects(upgradedDependencies[peer], peerSpec),
39+
upgradedDependencies[peer] === undefined ||
40+
!validRange(peerSpec) ||
41+
intersects(upgradedDependencies[peer], peerSpec),
4042
)
4143
})
4244
const violated =

0 commit comments

Comments
 (0)