diff --git a/.changeset/hot-numbers-live.md b/.changeset/hot-numbers-live.md new file mode 100644 index 0000000000..2f94781046 --- /dev/null +++ b/.changeset/hot-numbers-live.md @@ -0,0 +1,5 @@ +--- +"@pnpm/resolve-dependencies": patch +--- + +Don't duplicate leaf nodes in dependenciesTree. diff --git a/pkg-manager/resolve-dependencies/src/resolveDependencies.ts b/pkg-manager/resolve-dependencies/src/resolveDependencies.ts index 09fc58fc69..dcf792fcf4 100644 --- a/pkg-manager/resolve-dependencies/src/resolveDependencies.ts +++ b/pkg-manager/resolve-dependencies/src/resolveDependencies.ts @@ -219,6 +219,7 @@ export type PeerDependencies = Record export interface ResolvedPackage { id: PkgResolutionId + isLeaf: boolean resolution: Resolution prod: boolean dev: boolean @@ -1609,6 +1610,7 @@ function getResolvedPackage ( os: options.pkg.os, libc: options.pkg.libc, }, + isLeaf: pkgIsLeaf(options.pkg), pkgIdWithPatchHash: options.pkgIdWithPatchHash, dev: options.wantedDependency.dev, fetching: options.pkgResponse.fetching!, diff --git a/pkg-manager/resolve-dependencies/src/resolveDependencyTree.ts b/pkg-manager/resolve-dependencies/src/resolveDependencyTree.ts index 6b3d25636c..1facf920b5 100644 --- a/pkg-manager/resolve-dependencies/src/resolveDependencyTree.ts +++ b/pkg-manager/resolve-dependencies/src/resolveDependencyTree.ts @@ -305,6 +305,10 @@ function buildTree ( if (parentIdsContainSequence(parentIds, parentId, child.id) || parentId === child.id) { continue } + if (ctx.resolvedPkgsById[child.id].isLeaf) { + childrenNodeIds[child.alias] = child.id as unknown as NodeId + continue + } const childNodeId = nextNodeId() childrenNodeIds[child.alias] = childNodeId installable = installable || !ctx.skipped.has(child.id)