Skip to content

Commit

Permalink
fix: frozen install in a project with peer deps and auto-install-peer…
Browse files Browse the repository at this point in the history
…s=true (#5120)

close #5080
  • Loading branch information
zkochan committed Jul 30, 2022
1 parent a80b98a commit c83f40c
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 5 deletions.
6 changes: 6 additions & 0 deletions .changeset/breezy-geese-end.md
@@ -0,0 +1,6 @@
---
"@pnpm/lockfile-utils": patch
"pnpm": patch
---

pnpm should not consider a lockfile out-of-date if `auto-install-peers` is set to `true` and the peer dependency is in `devDependencies` or `optionalDependencies` [#5080](https://github.com/pnpm/pnpm/issues/5080).
11 changes: 6 additions & 5 deletions packages/lockfile-utils/src/satisfiesPackageManifest.ts
Expand Up @@ -4,23 +4,24 @@ import {
ProjectManifest,
} from '@pnpm/types'
import equals from 'ramda/src/equals.js'
import omit from 'ramda/src/omit.js'

export default (lockfile: Lockfile, pkg: ProjectManifest, importerId: string, opts?: { autoInstallPeers?: boolean }) => {
const importer = lockfile.importers[importerId]
if (!importer) return false
let existingDeps = { ...pkg.devDependencies, ...pkg.dependencies, ...pkg.optionalDependencies }
if (opts?.autoInstallPeers) {
existingDeps = {
...pkg.peerDependencies,
...existingDeps,
}
pkg = {
...pkg,
dependencies: {
...pkg.peerDependencies,
...omit(Object.keys(existingDeps), pkg.peerDependencies),
...pkg.dependencies,
},
}
existingDeps = {
...pkg.peerDependencies,
...existingDeps,
}
}
if (
!equals(existingDeps, importer.specifiers) ||
Expand Down
30 changes: 30 additions & 0 deletions packages/lockfile-utils/test/satisfiesPackageManifest.ts
Expand Up @@ -284,6 +284,36 @@ test('satisfiesPackageManifest()', () => {
},
}, '.', { autoInstallPeers: true })).toBe(true)

expect(satisfiesPackageManifest({
...DEFAULT_LOCKFILE_FIELDS,
importers: {
'.': {
optionalDependencies: {
bar: '1.0.0',
},
devDependencies: {
foo: '1.0.0',
},
specifiers: {
foo: '1.0.0',
bar: '1.0.0',
},
},
},
}, {
...DEFAULT_PKG_FIELDS,
optionalDependencies: {
bar: '1.0.0',
},
devDependencies: {
foo: '1.0.0',
},
peerDependencies: {
foo: '^1.0.0',
bar: '^1.0.0',
},
}, '.', { autoInstallPeers: true })).toBe(true)

expect(satisfiesPackageManifest({
...DEFAULT_LOCKFILE_FIELDS,
importers: {
Expand Down

0 comments on commit c83f40c

Please sign in to comment.