From 45238e358e5656a29ceee87302c8b93a525d94f3 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Fri, 27 May 2022 03:24:33 +0300 Subject: [PATCH] fix(auto-install-peers): don't fail on projects with linked deps (#4807) close #4796 --- .changeset/seven-roses-cover.md | 6 ++++ .../core/test/install/autoInstallPeers.ts | 28 ++++++++++++++++++- .../src/resolveDependencies.ts | 2 +- 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 .changeset/seven-roses-cover.md diff --git a/.changeset/seven-roses-cover.md b/.changeset/seven-roses-cover.md new file mode 100644 index 0000000000..316f90be8d --- /dev/null +++ b/.changeset/seven-roses-cover.md @@ -0,0 +1,6 @@ +--- +"@pnpm/resolve-dependencies": patch +"pnpm": patch +--- + +Don't fail on projects with linked dependencies, when `auto-install-peers` is set to `true` [#4796](https://github.com/pnpm/pnpm/issues/4796). diff --git a/packages/core/test/install/autoInstallPeers.ts b/packages/core/test/install/autoInstallPeers.ts index e7e68fecb7..217f31ecd8 100644 --- a/packages/core/test/install/autoInstallPeers.ts +++ b/packages/core/test/install/autoInstallPeers.ts @@ -1,5 +1,5 @@ import { addDependenciesToPackage } from '@pnpm/core' -import { prepareEmpty } from '@pnpm/prepare' +import { prepareEmpty, preparePackages } from '@pnpm/prepare' import { addDistTag } from '@pnpm/registry-mock' import { testDefaults } from '../utils' @@ -35,3 +35,29 @@ test('do not auto install when there is no common peer dependency range intersec '/wants-peer-c-2/1.0.0', ]) }) + +test('don\'t fail on linked package, when peers are auto installed', async () => { + const pkgManifest = { + dependencies: { + linked: 'link:../linked', + }, + } + preparePackages([ + { + location: 'linked', + package: { + name: 'linked', + peerDependencies: { + 'peer-c': '1.0.0', + }, + }, + }, + { + location: 'pkg', + package: pkgManifest, + }, + ]) + process.chdir('pkg') + const updatedManifest = await addDependenciesToPackage(pkgManifest, ['peer-b'], await testDefaults({ autoInstallPeers: true })) + expect(Object.keys(updatedManifest.dependencies ?? {})).toStrictEqual(['linked', 'peer-b']) +}) diff --git a/packages/resolve-dependencies/src/resolveDependencies.ts b/packages/resolve-dependencies/src/resolveDependencies.ts index b7f60ca774..9e82d8d08f 100644 --- a/packages/resolve-dependencies/src/resolveDependencies.ts +++ b/packages/resolve-dependencies/src/resolveDependencies.ts @@ -254,7 +254,7 @@ export default async function resolveDependencies ( ).filter(Boolean) as PkgAddress[] pkgAddresses.push(...newPkgAddresses) if (!ctx.autoInstallPeers) break - const allMissingPeers = mergePkgsDeps(newPkgAddresses.map(({ missingPeers }) => missingPeers)) + const allMissingPeers = mergePkgsDeps(newPkgAddresses.map(({ missingPeers }) => missingPeers).filter(Boolean)) if (!Object.keys(allMissingPeers).length) break wantedDependencies = getNonDevWantedDependencies({ dependencies: allMissingPeers }) }