From 5b91ec49ba64989958375010f9fdeb573457f011 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Wed, 13 Nov 2024 01:35:29 +0100 Subject: [PATCH] perf: don't duplicate leaf nodes in dependenciesTree (#8751) --- .changeset/hot-numbers-live.md | 5 +++++ pkg-manager/resolve-dependencies/src/resolveDependencies.ts | 2 ++ .../resolve-dependencies/src/resolveDependencyTree.ts | 4 ++++ 3 files changed, 11 insertions(+) create mode 100644 .changeset/hot-numbers-live.md 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)