From 764b779772d9af25369c5ea6fd8e6c5dc3ae2e8f Mon Sep 17 00:00:00 2001 From: Phil Pluckthun Date: Mon, 19 Oct 2026 15:45:30 +0100 Subject: [PATCH 1/2] Prevent promise creation for dependency traversal when dependency was already visited --- .../metro/src/DeltaBundler/buildSubgraph.js | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/metro/src/DeltaBundler/buildSubgraph.js b/packages/metro/src/DeltaBundler/buildSubgraph.js index dadf39a629..281e305383 100644 --- a/packages/metro/src/DeltaBundler/buildSubgraph.js +++ b/packages/metro/src/DeltaBundler/buildSubgraph.js @@ -138,19 +138,22 @@ export async function buildSubgraph( ...resolutionResult, }); - await Promise.all( - [...resolutionResult.dependencies.values()] - .filter( - dependency => - isResolvedDependency(dependency) && shouldTraverse(dependency), - ) - .map(dependency => + const visitPromises: Promise[] = []; + for (const dependency of resolutionResult.dependencies.values()) { + if ( + isResolvedDependency(dependency) && + shouldTraverse(dependency) && + !visitedPaths.has(dependency.absolutePath) + ) { + visitPromises.push( visit( dependency.absolutePath, resolutionResult.virtualSources.get(dependency.data.data.key), ).catch(error => errors.set(dependency.absolutePath, error)), - ), - ); + ); + } + } + await Promise.all(visitPromises); } await Promise.all( From 2712c69105c5ceceef40bcf3932832c4d64b7467 Mon Sep 17 00:00:00 2001 From: Rob Hogan <2590098+robhogan@users.noreply.github.com> Date: Sun, 25 Oct 2026 10:07:37 +0000 Subject: [PATCH 2/2] =?UTF-8?q?Use=20a=20catch=20block=20over=20an=20expre?= =?UTF-8?q?ssion,=20don=E2=80=99t=20retain=20errors=20twice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/metro/src/DeltaBundler/buildSubgraph.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/metro/src/DeltaBundler/buildSubgraph.js b/packages/metro/src/DeltaBundler/buildSubgraph.js index 281e305383..a53fb57235 100644 --- a/packages/metro/src/DeltaBundler/buildSubgraph.js +++ b/packages/metro/src/DeltaBundler/buildSubgraph.js @@ -138,7 +138,7 @@ export async function buildSubgraph( ...resolutionResult, }); - const visitPromises: Promise[] = []; + const visitPromises: Array> = []; for (const dependency of resolutionResult.dependencies.values()) { if ( isResolvedDependency(dependency) && @@ -149,7 +149,9 @@ export async function buildSubgraph( visit( dependency.absolutePath, resolutionResult.virtualSources.get(dependency.data.data.key), - ).catch(error => errors.set(dependency.absolutePath, error)), + ).catch(error => { + errors.set(dependency.absolutePath, error); + }), ); } }