From 634d6874b75eec2e149de036d7fc7efa7afb7738 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Fri, 24 Mar 2023 03:38:59 +0200 Subject: [PATCH] fix: peer dependency is not unlinked when adding a new dependency (#6274) close #6272 --- .changeset/real-eels-approve.md | 6 ++++ pkg-manager/resolve-dependencies/src/index.ts | 9 +++-- pnpm/test/monorepo/peerDependencies.ts | 35 +++++++++++++++++++ 3 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 .changeset/real-eels-approve.md create mode 100644 pnpm/test/monorepo/peerDependencies.ts diff --git a/.changeset/real-eels-approve.md b/.changeset/real-eels-approve.md new file mode 100644 index 0000000000..d428c2e904 --- /dev/null +++ b/.changeset/real-eels-approve.md @@ -0,0 +1,6 @@ +--- +"@pnpm/resolve-dependencies": patch +"pnpm": patch +--- + +Peer dependency is not unlinked when adding a new dependency [#6272](https://github.com/pnpm/pnpm/issues/6272). diff --git a/pkg-manager/resolve-dependencies/src/index.ts b/pkg-manager/resolve-dependencies/src/index.ts index 0d55d4095b..f9e0f54f36 100644 --- a/pkg-manager/resolve-dependencies/src/index.ts +++ b/pkg-manager/resolve-dependencies/src/index.ts @@ -178,9 +178,12 @@ export async function resolveDependencies ( ? await getTopParents( difference( Object.keys(getAllDependenciesFromManifest(project.manifest)), - resolvedImporter.directDependencies - .filter((dep, index) => project.wantedDependencies[index]?.isNew === true) - .map(({ alias }) => alias) || [] + [ + ...resolvedImporter.directDependencies + .filter((_, index) => project.wantedDependencies[index]?.isNew === true) + .map(({ alias }) => alias) || [], + ...resolvedImporter.linkedDependencies.map(({ alias }) => alias), + ] ), project.modulesDir ) diff --git a/pnpm/test/monorepo/peerDependencies.ts b/pnpm/test/monorepo/peerDependencies.ts new file mode 100644 index 0000000000..215580acfe --- /dev/null +++ b/pnpm/test/monorepo/peerDependencies.ts @@ -0,0 +1,35 @@ +import { promises as fs } from 'fs' +import { WANTED_LOCKFILE } from '@pnpm/constants' +import type { Lockfile } from '@pnpm/lockfile-types' +import { preparePackages } from '@pnpm/prepare' +import readYamlFile from 'read-yaml-file' +import writeYamlFile from 'write-yaml-file' +import { execPnpm } from '../utils' + +// Covers https://github.com/pnpm/pnpm/issues/6272 +test('peer dependency is not unlinked when adding a new dependency', async () => { + preparePackages([ + { + name: 'project-1', + + dependencies: { + '@pnpm.e2e/abc': '1.0.0', + '@pnpm.e2e/peer-a': 'workspace:*', + }, + }, + { + name: '@pnpm.e2e/peer-a', + version: '1.0.0', + + dependencies: {}, + }, + ]) + + await fs.writeFile('.npmrc', 'auto-install-peers=false', 'utf8') + await writeYamlFile('pnpm-workspace.yaml', { packages: ['**', '!store/**'] }) + await execPnpm(['install']) + await execPnpm(['--filter=project-1', 'add', 'is-odd@1.0.0']) + + const lockfile = await readYamlFile(WANTED_LOCKFILE) + expect(Object.keys(lockfile!.packages!)).toContain('/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@@pnpm.e2e+peer-a)') +})