fix: recursive peer dependency

ref #2919
PR #2926
This commit is contained in:
Zoltan Kochan
2020-10-14 16:26:27 +03:00
committed by Zoltan Kochan
parent d54043ee4f
commit fcdad632f0
7 changed files with 20 additions and 8 deletions

View File

@@ -0,0 +1,5 @@
---
"@pnpm/constants": minor
---
Bump lockfile version to 5.2

View File

@@ -0,0 +1,5 @@
---
"@pnpm/resolve-dependencies": minor
---
When some of the dependencies of a package have the package as a peer depenendency, don't make the dependency a peer depenendency of itself.

View File

@@ -1,5 +1,5 @@
export const WANTED_LOCKFILE = 'pnpm-lock.yaml'
export const LOCKFILE_VERSION = 5.1
export const LOCKFILE_VERSION = 5.2
export const ENGINE_NAME = `${process.platform}-${process.arch}-node-${process.version.split('.')[0]}`
export const LAYOUT_VERSION = 4

View File

@@ -73,10 +73,10 @@ export type DependenciesTreeNode<T> = {
children: (() => ChildrenMap) | ChildrenMap
installable: boolean
} & ({
resolvedPackage: T & { version: string }
resolvedPackage: T & { name: string, version: string }
depth: number
} | {
resolvedPackage: { version: string }
resolvedPackage: { name: string, version: string }
depth: -1
})
@@ -304,6 +304,7 @@ async function resolveDependenciesOfDependency (
depth: -1,
installable: true,
resolvedPackage: {
name: resolveDependencyResult.name,
version: resolveDependencyResult.version,
},
}

View File

@@ -216,6 +216,7 @@ function resolvePeersOfNode<T extends PartialResolvedPackage> (
})
const allResolvedPeers = Object.assign(unknownResolvedPeersOfChildren, resolvedPeers)
delete allResolvedPeers[node.resolvedPackage.name]
const allMissingPeers = Array.from(new Set([...missingPeersOfChildren, ...missingPeers]))
let modules: string

View File

@@ -100,10 +100,10 @@ test('resolve peer dependencies of cyclic dependencies', () => {
expect(Object.keys(dependenciesGraph)).toStrictEqual([
'foo/1.0.0_qar@1.0.0+zoo@1.0.0',
'bar/1.0.0_foo@1.0.0+zoo@1.0.0',
'zoo/1.0.0_qar@1.0.0+zoo@1.0.0',
'zoo/1.0.0_qar@1.0.0',
'zoo/1.0.0_bar@1.0.0+foo@1.0.0+qar@1.0.0',
'bar/1.0.0_bar@1.0.0+foo@1.0.0',
'foo/1.0.0_foo@1.0.0',
'bar/1.0.0_foo@1.0.0',
'foo/1.0.0',
])
})

View File

@@ -668,7 +668,7 @@ test('peer dependency is resolved from parent package', async (t) => {
const lockfile = await readYamlFile<Lockfile>(WANTED_LOCKFILE)
t.deepEqual(Object.keys(lockfile.packages ?? {}), [
'/has-tango-as-peer-dep/1.0.0_tango@1.0.0',
'/tango/1.0.0_tango@1.0.0',
'/tango/1.0.0',
])
})
@@ -698,7 +698,7 @@ test('transitive peerDependencies field does not break the lockfile on subsequen
const lockfile = await readYamlFile<Lockfile>(WANTED_LOCKFILE)
t.deepEqual(Object.keys(lockfile.packages!['/most/1.7.3_most@1.7.3'].dependencies!), [
t.deepEqual(Object.keys(lockfile.packages!['/most/1.7.3'].dependencies!), [
'@most/multicast',
'@most/prelude',
'symbol-observable',