Skip to content

Commit

Permalink
fix: recursive peer dependency
Browse files Browse the repository at this point in the history
ref #2919
  • Loading branch information
zkochan committed Oct 14, 2020
1 parent c58e1d5 commit a8cdce3
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 8 deletions.
5 changes: 5 additions & 0 deletions .changeset/metal-cycles-cheat.md
Original file line number Diff line number Diff line change
@@ -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.
2 changes: 1 addition & 1 deletion packages/constants/src/index.ts
Original file line number Diff line number Diff line change
@@ -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
Expand Down
5 changes: 3 additions & 2 deletions packages/resolve-dependencies/src/resolveDependencies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
})

Expand Down Expand Up @@ -262,6 +262,7 @@ export default async function resolveDependencies (
depth: -1,
installable: true,
resolvedPackage: {
name: resolveDependencyResult.name,
version: resolveDependencyResult.version,
},
}
Expand Down
1 change: 1 addition & 0 deletions packages/resolve-dependencies/src/resolvePeers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,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
Expand Down
6 changes: 3 additions & 3 deletions packages/resolve-dependencies/test/resolvePeers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,10 +100,10 @@ test('resolve peer dependencies of cyclic dependencies', (t) => {
t.deepEqual(Object.keys(dependenciesGraph), [
'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',
])
t.end()
})
4 changes: 2 additions & 2 deletions packages/supi/test/install/peerDependencies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
])
})

Expand Down Expand Up @@ -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',
Expand Down

0 comments on commit a8cdce3

Please sign in to comment.