@@ -292,7 +292,7 @@ function legacyMainResolve(packageJSONUrl, packageConfig) {
292292
293293function resolveExtensionsWithTryExactName ( search ) {
294294 if ( fileExists ( search ) ) return search ;
295- const resolvedReplacementExtension = getReplacementExtensionCandidates ( search ) ;
295+ const resolvedReplacementExtension = resolveReplacementExtensions ( search ) ;
296296 if ( resolvedReplacementExtension ) return resolvedReplacementExtension ;
297297 return resolveExtensions ( search ) ;
298298}
@@ -314,30 +314,20 @@ function resolveExtensions(search) {
314314 return undefined ;
315315}
316316
317- function resolveReplacementExtensionsWithTryExactName ( search ) {
318- if ( fileExists ( search ) ) return search ;
319- return getReplacementExtensionCandidates ( search ) ;
320- }
321-
322317/**
323318 * TS's resolver can resolve foo.js to foo.ts, by replacing .js extension with several source extensions.
324319 * IMPORTANT: preserve ordering according to preferTsExts; this affects resolution behavior!
325320 */
326321const replacementExtensions = extensions . filter ( ext => [ '.js' , '.jsx' , '.ts' , '.tsx' ] . includes ( ext ) ) ;
327322
328- function getReplacementExtensionCandidates ( search ) {
323+ function resolveReplacementExtensions ( search ) {
329324 if ( search . pathname . match ( / \. j s $ / ) ) {
330325 const pathnameWithoutExtension = search . pathname . slice ( 0 , search . pathname . length - 3 ) ;
331- return replacementExtensions . map ( new URL ( `${ pathnameWithoutExtension } ${ extension } ` , search ) ) ;
332- }
333- return [ search ] ;
334- }
335-
336- // TODO re-merge with above function
337- function resolveCandidates ( guesses ) {
338- for ( let i = 0 ; i < guesses . length ; i ++ ) {
339- const guess = guesses [ i ] ;
340- if ( fileExists ( guess ) ) return guess ;
326+ for ( let i = 0 ; i < replacementExtensions . length ; i ++ ) {
327+ const extension = replacementExtensions [ i ] ;
328+ const guess = new URL ( `${ pathnameWithoutExtension } ${ extension } ` , search ) ;
329+ if ( fileExists ( guess ) ) return guess ;
330+ }
341331 }
342332 return undefined ;
343333}
@@ -361,12 +351,14 @@ function finalizeResolution(resolved, base) {
361351 }
362352
363353 if ( StringPrototypeEndsWith ( resolved . pathname , '/' ) ) return resolved ;
364- const path = fileURLToPath ( resolved ) ;
365354
366- const file = resolveCandidates ( getReplacementExtensionCandidates ( resolved ) ) ;
367- if ( ! file ) {
368- throw new ERR_MODULE_NOT_FOUND (
369- path || resolved . pathname , fileURLToPath ( base ) , 'module' ) ;
355+ const file = resolveReplacementExtensions ( resolved ) || resolved ;
356+
357+ const path = fileURLToPath ( file ) ;
358+
359+ if ( ! tryStatSync ( path ) . isFile ( ) ) {
360+ throw new ERR_MODULE_NOT_FOUND (
361+ path || resolved . pathname , fileURLToPath ( base ) , 'module' ) ;
370362 }
371363
372364 return file ;
0 commit comments