fix: installation hanging due to parent peers resolution dead lock (#8584)

This fixes an issue that appeared after merging #8457

close #8570
This commit is contained in:
Zoltan Kochan
2024-10-02 12:09:33 +02:00
committed by GitHub
parent add93c4b5e
commit d7b9ae5870
4 changed files with 18 additions and 2 deletions

View File

@@ -0,0 +1,6 @@
---
"@pnpm/resolve-dependencies": patch
"pnpm": patch
---
Fix peer dependency resolution dead lock [#8570](https://github.com/pnpm/pnpm/issues/8570).

View File

@@ -1243,3 +1243,11 @@ test('a package should be able to be a dependency of itself', async () => {
expect(pkg.version).toBe('1.0.0')
}
})
// Covers https://github.com/pnpm/pnpm/issues/8570
test('install should not hang on circular peer dependencies', async () => {
prepareEmpty()
// cspell:disable-next-line
await addDependenciesToPackage({}, ['@medusajs/medusa-js@6.1.7'], testDefaults())
})

View File

@@ -987,7 +987,7 @@ test('peer dependency is resolved from parent package via its alias', async () =
const lockfile = readYamlFile<Lockfile>(WANTED_LOCKFILE)
expect(Object.keys(lockfile.snapshots ?? {}).sort()).toStrictEqual([
'@pnpm.e2e/has-tango-as-peer-dep@1.0.0(@pnpm.e2e/tango-tango@1.0.0(@pnpm.e2e/tango-tango@1.0.0))',
'@pnpm.e2e/has-tango-as-peer-dep@1.0.0(@pnpm.e2e/tango-tango@1.0.0)',
'@pnpm.e2e/tango-tango@1.0.0(@pnpm.e2e/tango-tango@1.0.0)',
].sort())
})

View File

@@ -567,7 +567,9 @@ async function resolvePeersOfNode<T extends PartialResolvedPackage> (
.map(async (peerNodeId) => {
if (cyclicPeerNodeIds.has(peerNodeId)) {
const { name, version } = (ctx.dependenciesTree.get(peerNodeId)!.resolvedPackage as T)
return `${name}@${version}`
const id = `${name}@${version}`
ctx.pathsByNodeIdPromises.get(peerNodeId)?.resolve(id as DepPath)
return id
}
return ctx.pathsByNodeIdPromises.get(peerNodeId)!.promise
})