From 1a5c5e9924be7ed4039e5b4200fcff3505106631 Mon Sep 17 00:00:00 2001 From: kwy404 Date: Fri, 23 Oct 2026 18:03:31 -0300 Subject: [PATCH] Fix empty file list in ambiguous module resolution errors --- packages/metro/src/lib/TerminalReporter.js | 2 +- .../lib/__tests__/formatBundlingError-test.js | 25 +++++++++++++++++++ packages/metro/src/lib/formatBundlingError.js | 5 +--- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/packages/metro/src/lib/TerminalReporter.js b/packages/metro/src/lib/TerminalReporter.js index b9e9d6a048..cb5b86e324 100644 --- a/packages/metro/src/lib/TerminalReporter.js +++ b/packages/metro/src/lib/TerminalReporter.js @@ -331,7 +331,7 @@ export default class TerminalReporter { `${error.fromModulePath}\` tries to require \`${he.hasteName}\`, ` + 'but there are several files providing this module. You can delete ' + 'or fix them: \n\n' + - Object.keys(he.duplicatesSet) + [...he.duplicatesSet.keys()] .sort() .map(dupFilePath => ` * \`${dupFilePath}\`\n`) .join(''); diff --git a/packages/metro/src/lib/__tests__/formatBundlingError-test.js b/packages/metro/src/lib/__tests__/formatBundlingError-test.js index 6cfc985b31..ea34b38c08 100644 --- a/packages/metro/src/lib/__tests__/formatBundlingError-test.js +++ b/packages/metro/src/lib/__tests__/formatBundlingError-test.js @@ -10,8 +10,33 @@ import {UnableToResolveError} from '../../node-haste/DependencyGraph/ModuleResolution'; import formatBundlingError from '../formatBundlingError'; +import {AmbiguousModuleResolutionError} from 'metro-core'; +import FileMap, {DuplicateHasteCandidatesError} from 'metro-file-map'; describe('formatBundlingError', () => { + test('AmbiguousModuleResolutionError', () => { + const hasteError = new DuplicateHasteCandidatesError( + 'target', + FileMap.H.GENERIC_PLATFORM, + false, + new Map([ + ['/root/a.js', FileMap.H.MODULE], + ['/root/b.js', FileMap.H.MODULE], + ]), + ); + expect( + formatBundlingError( + new AmbiguousModuleResolutionError('/origin/module.js', hasteError), + ), + ).toMatchObject({ + type: 'AmbiguousModuleResolutionError', + message: + "Ambiguous resolution: module '/origin/module.js' tries to require " + + "'target', but there are several files providing this module. You " + + 'can delete or fix them: \n\n/root/a.js\n\n/root/b.js', + }); + }); + test('UnableToResolveError', () => { expect( formatBundlingError( diff --git a/packages/metro/src/lib/formatBundlingError.js b/packages/metro/src/lib/formatBundlingError.js index c84262dcfd..02294e6570 100644 --- a/packages/metro/src/lib/formatBundlingError.js +++ b/packages/metro/src/lib/formatBundlingError.js @@ -43,10 +43,7 @@ export default function formatBundlingError( `${error.fromModulePath}\' tries to require \'${he.hasteName}\', but ` + 'there are several files providing this module. You can delete or ' + 'fix them: \n\n' + - Object.keys(he.duplicatesSet) - .sort() - .map(dupFilePath => `${dupFilePath}`) - .join('\n\n'); + [...he.duplicatesSet.keys()].sort().join('\n\n'); return { type: 'AmbiguousModuleResolutionError',