diff --git a/.changeset/hot-balloons-reflect.md b/.changeset/hot-balloons-reflect.md new file mode 100644 index 0000000000..4f2772b017 --- /dev/null +++ b/.changeset/hot-balloons-reflect.md @@ -0,0 +1,6 @@ +--- +"@pnpm/resolve-dependencies": patch +"pnpm": patch +--- + +Installation with hoisted node_modules should not fail, when a dependency has itself in its own peer dependencies [#8854](https://github.com/pnpm/pnpm/issues/8854). diff --git a/pkg-manager/core/test/hoistedNodeLinker/install.ts b/pkg-manager/core/test/hoistedNodeLinker/install.ts index 8a5ce7eced..a75747bd26 100644 --- a/pkg-manager/core/test/hoistedNodeLinker/install.ts +++ b/pkg-manager/core/test/hoistedNodeLinker/install.ts @@ -315,3 +315,18 @@ test('peerDependencies should be installed when autoInstallPeers is set to true expect(fs.existsSync('node_modules/react')).toBeTruthy() }) + +// Covers https://github.com/pnpm/pnpm/issues/8854 +test('installing with hoisted node-linker a package that is a peer dependency of itself', async () => { + const project = prepareEmpty() + + await addDependenciesToPackage( + {}, + ['@pnpm.e2e/peer-of-itself@1.0.0'], + testDefaults({ nodeLinker: 'hoisted', save: true }) + ) + + project.has('@pnpm.e2e/peer-of-itself') + const lockfile = project.readLockfile() + expect(lockfile.packages['@pnpm.e2e/peer-of-itself@1.0.0'].peerDependencies).toBeFalsy() +}) diff --git a/pkg-manager/resolve-dependencies/src/resolveDependencies.ts b/pkg-manager/resolve-dependencies/src/resolveDependencies.ts index 9afef9eea4..888a35c38c 100644 --- a/pkg-manager/resolve-dependencies/src/resolveDependencies.ts +++ b/pkg-manager/resolve-dependencies/src/resolveDependencies.ts @@ -1635,6 +1635,7 @@ function getResolvedPackage ( function peerDependenciesWithoutOwn (pkg: PackageManifest): PeerDependencies { if ((pkg.peerDependencies == null) && (pkg.peerDependenciesMeta == null)) return {} const ownDeps = new Set([ + pkg.name, ...Object.keys(pkg.dependencies ?? {}), ...Object.keys(pkg.optionalDependencies ?? {}), ]) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5cbe0b2420..2b8998ecf9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,8 +55,8 @@ catalogs: specifier: 0.0.0 version: 0.0.0 '@pnpm/registry-mock': - specifier: 3.45.0 - version: 3.45.0 + specifier: 3.46.0 + version: 3.46.0 '@pnpm/semver-diff': specifier: ^1.1.0 version: 1.1.0 @@ -849,7 +849,7 @@ importers: version: link:../../pkg-manager/modules-yaml '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/types': specifier: workspace:* version: link:../../packages/types @@ -883,7 +883,7 @@ importers: dependencies: '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/store.cafs': specifier: workspace:* version: link:../../store/cafs @@ -958,7 +958,7 @@ importers: dependencies: '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/worker': specifier: workspace:* version: link:../../worker @@ -1141,7 +1141,7 @@ importers: version: link:../../__utils__/prepare '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@types/ramda': specifier: 'catalog:' version: 0.29.12 @@ -2335,7 +2335,7 @@ importers: version: link:../../__utils__/prepare '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/test-fixtures': specifier: workspace:* version: link:../../__utils__/test-fixtures @@ -2480,7 +2480,7 @@ importers: version: link:../../__utils__/prepare '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/test-ipc-server': specifier: workspace:* version: link:../../__utils__/test-ipc-server @@ -4135,7 +4135,7 @@ importers: version: link:../../__utils__/prepare '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/test-fixtures': specifier: workspace:* version: link:../../__utils__/test-fixtures @@ -4422,7 +4422,7 @@ importers: version: link:../../pkg-manifest/read-package-json '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/store-path': specifier: workspace:* version: link:../../store/store-path @@ -4698,7 +4698,7 @@ importers: version: link:../read-projects-context '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/store-path': specifier: workspace:* version: link:../../store/store-path @@ -5058,7 +5058,7 @@ importers: version: 'link:' '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/test-fixtures': specifier: workspace:* version: link:../../__utils__/test-fixtures @@ -5260,7 +5260,7 @@ importers: version: link:../../__utils__/prepare '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/test-fixtures': specifier: workspace:* version: link:../../__utils__/test-fixtures @@ -5868,7 +5868,7 @@ importers: version: link:../pkg-manifest/read-project-manifest '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/run-npm': specifier: workspace:* version: link:../exec/run-npm @@ -6162,7 +6162,7 @@ importers: version: link:../../__utils__/prepare '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/workspace.filter-packages-from-dir': specifier: workspace:* version: link:../../workspace/filter-packages-from-dir @@ -6274,7 +6274,7 @@ importers: version: link:../../__utils__/prepare '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/test-ipc-server': specifier: workspace:* version: link:../../__utils__/test-ipc-server @@ -6867,7 +6867,7 @@ importers: version: link:../../pkg-manifest/read-package-json '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/test-fixtures': specifier: workspace:* version: link:../../__utils__/test-fixtures @@ -6934,7 +6934,7 @@ importers: version: link:../../__utils__/prepare '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/workspace.filter-packages-from-dir': specifier: workspace:* version: link:../../workspace/filter-packages-from-dir @@ -7025,7 +7025,7 @@ importers: version: link:../../__utils__/prepare '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@pnpm/test-fixtures': specifier: workspace:* version: link:../../__utils__/test-fixtures @@ -7369,7 +7369,7 @@ importers: version: link:../../__utils__/prepare '@pnpm/registry-mock': specifier: 'catalog:' - version: 3.45.0(encoding@0.1.13)(typanion@3.14.0) + version: 3.46.0(encoding@0.1.13)(typanion@3.14.0) '@types/archy': specifier: 'catalog:' version: 0.0.33 @@ -9076,8 +9076,8 @@ packages: resolution: {integrity: sha512-LFTWzfJbu6+l86bw/uUAsPU05n1oTqg6jzqyTXYDJPfVclqTfPnHiZoC1nvVvQlE7iVg3bhJ7SXg9IyzK7RWDQ==} engines: {node: '>=18.12'} - '@pnpm/registry-mock@3.45.0': - resolution: {integrity: sha512-/OQyKgF25+rPtEsuj8DWkwc3aVdzmNLxeO54mm4x1U5bBVrSpEffzu1AwGmnXya9+Vp7V606NuXv2+1DqjupeA==} + '@pnpm/registry-mock@3.46.0': + resolution: {integrity: sha512-MS8idSUQu9Ag3f/s33dnEQp0zJ+z4aU01VznAIn8FT/6NBvOulVCV+CqGZbOohemNNPth7LfIS13l2fZD12rOA==} engines: {node: '>=10.13'} hasBin: true @@ -16073,7 +16073,7 @@ snapshots: sort-keys: 4.2.0 strip-bom: 4.0.0 - '@pnpm/registry-mock@3.45.0(encoding@0.1.13)(typanion@3.14.0)': + '@pnpm/registry-mock@3.46.0(encoding@0.1.13)(typanion@3.14.0)': dependencies: anonymous-npm-registry-client: 0.2.0 execa: 5.1.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7bd38454cf..2ed6773cba 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -55,7 +55,7 @@ catalog: "@pnpm/npm-package-arg": ^1.0.0 "@pnpm/os.env.path-extender": ^2.0.0 "@pnpm/patch-package": 0.0.0 - "@pnpm/registry-mock": 3.45.0 + "@pnpm/registry-mock": 3.46.0 "@pnpm/semver-diff": ^1.1.0 "@pnpm/tabtab": ^0.5.4 "@pnpm/util.lex-comparator": 3.0.0