From 1b2e09ccfdabccb2fdc50ded2ca22f3f5b062b0b Mon Sep 17 00:00:00 2001 From: Brandon Cheng Date: Sun, 19 Feb 2023 21:15:36 -0500 Subject: [PATCH] fix: check for peerDependenciesMeta in pkgIsLeaf to fix non-determinism (#6112) close #5106 --- .changeset/lazy-brooms-search.md | 6 ++++++ pkg-manager/resolve-dependencies/src/resolveDependencies.ts | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 .changeset/lazy-brooms-search.md diff --git a/.changeset/lazy-brooms-search.md b/.changeset/lazy-brooms-search.md new file mode 100644 index 0000000000..32ea8475dd --- /dev/null +++ b/.changeset/lazy-brooms-search.md @@ -0,0 +1,6 @@ +--- +"@pnpm/resolve-dependencies": patch +pnpm: patch +--- + +Fix a case of installs not being deterministic and causing lockfile changes between repeat installs. When a dependency only declares `peerDependenciesMeta` and not `peerDependencies`, `dependencies`, or `optionalDependencies`, the dependency's peers were not considered deterministically before. diff --git a/pkg-manager/resolve-dependencies/src/resolveDependencies.ts b/pkg-manager/resolve-dependencies/src/resolveDependencies.ts index 3495963a44..0c5e8e7afc 100644 --- a/pkg-manager/resolve-dependencies/src/resolveDependencies.ts +++ b/pkg-manager/resolve-dependencies/src/resolveDependencies.ts @@ -1377,7 +1377,10 @@ function getMissingPeers (pkg: PackageManifest) { function pkgIsLeaf (pkg: PackageManifest) { return isEmpty(pkg.dependencies ?? {}) && isEmpty(pkg.optionalDependencies ?? {}) && - isEmpty(pkg.peerDependencies ?? {}) + isEmpty(pkg.peerDependencies ?? {}) && + // Package manifests can declare peerDependenciesMeta without declaring + // peerDependencies. peerDependenciesMeta implies the later. + isEmpty(pkg.peerDependenciesMeta ?? {}) } function getResolvedPackage (