From 9012a2529ec9164031a33e484273717455eb18e2 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Thu, 7 Aug 2025 11:35:24 +0200 Subject: [PATCH] refactor(resolve-dependencies): reduce amount of loops when filtering missing peers --- .../src/resolveDependencies.ts | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/pkg-manager/resolve-dependencies/src/resolveDependencies.ts b/pkg-manager/resolve-dependencies/src/resolveDependencies.ts index b85dd7953c..de998d4512 100644 --- a/pkg-manager/resolve-dependencies/src/resolveDependencies.ts +++ b/pkg-manager/resolve-dependencies/src/resolveDependencies.ts @@ -47,7 +47,6 @@ import normalizePath from 'normalize-path' import exists from 'path-exists' import pDefer from 'p-defer' import pShare from 'promise-share' -import partition from 'ramda/src/partition' import pickBy from 'ramda/src/pickBy' import omit from 'ramda/src/omit' import zipWith from 'ramda/src/zipWith' @@ -174,7 +173,12 @@ export interface ResolutionContext { hoistPeers?: boolean } -export type MissingPeers = Record +export interface MissingPeerInfo { + range: string + optional: boolean +} + +export type MissingPeers = Record export type ResolvedPeers = Record @@ -325,9 +329,15 @@ export async function resolveRootDependencies ( for (const pkgAddress of importerResolutionResult.pkgAddresses) { parentPkgAliases[pkgAddress.alias] = true } - const [missingOptionalPeers, missingRequiredPeers] = partition(([, { optional }]) => optional, Object.entries(importerResolutionResult.missingPeers ?? {})) - for (const missingPeerName of Object.keys(missingRequiredPeers)) { - parentPkgAliases[missingPeerName] = true + const missingOptionalPeers: Array<[string, MissingPeerInfo]> = [] + const missingRequiredPeers: Array<[string, MissingPeerInfo]> = [] + for (const [peerName, peerInfo] of Object.entries(importerResolutionResult.missingPeers ?? {})) { + if (peerInfo.optional) { + missingOptionalPeers.push([peerName, peerInfo]) + } else { + missingRequiredPeers.push([peerName, peerInfo]) + parentPkgAliases[peerName] = true + } } if (ctx.autoInstallPeers) { // All the missing peers should get installed in the root.