mirror of
https://github.com/pnpm/pnpm.git
synced 2026-04-28 02:53:15 -04:00
fix(resolve-dependencies)): avoid not needed peer dependency warnings (#4144)
This commit is contained in:
7
.changeset/cool-radios-wash.md
Normal file
7
.changeset/cool-radios-wash.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
"@pnpm/resolve-dependencies": patch
|
||||
---
|
||||
|
||||
Don't warn about unmet peer dependency when the peer is resolved from a prerelease version.
|
||||
|
||||
For instance, if a project has `react@*` as a peer dependency, then react `16.0.0-rc.0` should not cause a warning.
|
||||
@@ -43,6 +43,7 @@
|
||||
"@pnpm/store-controller-types": "workspace:11.0.9",
|
||||
"@pnpm/types": "workspace:7.7.1",
|
||||
"@pnpm/which-version-is-pinned": "workspace:1.0.0",
|
||||
"@yarnpkg/core": "^3.2.0-rc.4",
|
||||
"dependency-path": "workspace:8.0.8",
|
||||
"encode-registry": "^3.0.0",
|
||||
"get-npm-tarball-url": "^2.0.3",
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import crypto from 'crypto'
|
||||
import path from 'path'
|
||||
import { satisfiesWithPrereleases } from '@yarnpkg/core/lib/semverUtils'
|
||||
import {
|
||||
Dependencies,
|
||||
PeerDependencyIssues,
|
||||
@@ -11,7 +12,6 @@ import fromPairs from 'ramda/src/fromPairs'
|
||||
import isEmpty from 'ramda/src/isEmpty'
|
||||
import pick from 'ramda/src/pick'
|
||||
import scan from 'ramda/src/scan'
|
||||
import semver from 'semver'
|
||||
import {
|
||||
DependenciesTree,
|
||||
DependenciesTreeNode,
|
||||
@@ -415,7 +415,7 @@ function resolvePeers<T extends PartialResolvedPackage> (
|
||||
continue
|
||||
}
|
||||
|
||||
if (!semver.satisfies(resolved.version, peerVersionRange, { loose: true })) {
|
||||
if (!satisfiesWithPrereleases(resolved.version, peerVersionRange, true)) {
|
||||
const location = getLocationFromNodeId({
|
||||
dependenciesTree: ctx.dependenciesTree,
|
||||
nodeId: ctx.nodeId,
|
||||
|
||||
@@ -393,3 +393,66 @@ describe('peer dependency issues', () => {
|
||||
.toStrictEqual({ peer: '>=2.2.0 <3.0.0' })
|
||||
})
|
||||
})
|
||||
|
||||
describe('unmet peer dependency issues', () => {
|
||||
const { peerDependencyIssuesByProjects } = resolvePeers({
|
||||
projects: [
|
||||
{
|
||||
directNodeIdsByAlias: {
|
||||
foo: '>project1>foo/1.0.0',
|
||||
peer1: '>project1>peer1/1.0.0-rc.0',
|
||||
peer2: '>project1>peer2/1.1.0-rc.0',
|
||||
},
|
||||
topParents: [],
|
||||
rootDir: '',
|
||||
id: 'project1',
|
||||
},
|
||||
],
|
||||
dependenciesTree: {
|
||||
'>project1>foo/1.0.0': {
|
||||
children: {},
|
||||
installable: true,
|
||||
resolvedPackage: {
|
||||
name: 'foo',
|
||||
version: '1.0.0',
|
||||
depPath: 'foo/1.0.0',
|
||||
peerDependencies: {
|
||||
peer1: '*',
|
||||
peer2: '>=1',
|
||||
},
|
||||
},
|
||||
depth: 0,
|
||||
},
|
||||
'>project1>peer1/1.0.0-rc.0': {
|
||||
children: {},
|
||||
installable: true,
|
||||
resolvedPackage: {
|
||||
name: 'peer1',
|
||||
version: '1.0.0-rc.0',
|
||||
depPath: 'peer/1.0.0-rc.0',
|
||||
peerDependencies: {},
|
||||
},
|
||||
depth: 0,
|
||||
},
|
||||
'>project1>peer2/1.1.0-rc.0': {
|
||||
children: {},
|
||||
installable: true,
|
||||
resolvedPackage: {
|
||||
name: 'peer2',
|
||||
version: '1.1.0-rc.0',
|
||||
depPath: 'peer/1.1.0-rc.0',
|
||||
peerDependencies: {},
|
||||
},
|
||||
depth: 0,
|
||||
},
|
||||
},
|
||||
virtualStoreDir: '',
|
||||
lockfileDir: '',
|
||||
})
|
||||
it('should not warn when the found package has prerelease version and the wanted range is *', () => {
|
||||
expect(peerDependencyIssuesByProjects).not.toHaveProperty(['project1', 'bad', 'peer1'])
|
||||
})
|
||||
it('should not warn when the found package is a prerelease version but satisfies the range', () => {
|
||||
expect(peerDependencyIssuesByProjects).not.toHaveProperty(['project1', 'bad', 'peer2'])
|
||||
})
|
||||
})
|
||||
|
||||
2
pnpm-lock.yaml
generated
2
pnpm-lock.yaml
generated
@@ -3095,6 +3095,7 @@ importers:
|
||||
'@pnpm/which-version-is-pinned': workspace:1.0.0
|
||||
'@types/ramda': 0.27.39
|
||||
'@types/semver': ^7.3.4
|
||||
'@yarnpkg/core': ^3.2.0-rc.4
|
||||
dependency-path: workspace:8.0.8
|
||||
encode-registry: ^3.0.0
|
||||
get-npm-tarball-url: ^2.0.3
|
||||
@@ -3121,6 +3122,7 @@ importers:
|
||||
'@pnpm/store-controller-types': link:../store-controller-types
|
||||
'@pnpm/types': link:../types
|
||||
'@pnpm/which-version-is-pinned': link:../which-version-is-pinned
|
||||
'@yarnpkg/core': 3.2.0-rc.8
|
||||
dependency-path: link:../dependency-path
|
||||
encode-registry: 3.0.0
|
||||
get-npm-tarball-url: 2.0.3
|
||||
|
||||
Reference in New Issue
Block a user