@@ -35,39 +35,38 @@ type resolve = (
3535 recursiveCall ?: boolean ,
3636) => MaybePromise < Resolved > ;
3737
38- const extensions = [ '.js' , '.json' , '.ts' , '.tsx' , '.jsx' ] as const ;
39-
40- const mappedExtensions = {
41- '.js' : [ '.ts' ] ,
38+ const mappedExtensions : Record < string , string [ ] > = {
39+ '.js' : [ '.ts' , '.tsx' , 'jsx' ] ,
4240 '.cjs' : [ '.cts' ] ,
4341 '.mjs' : [ '.mts' ] ,
44- } as const ;
42+ '' : [ '.js' , '.json' , '.ts' , '.tsx' , '.jsx' ] ,
43+ } ;
44+
45+ function resolveTsAlternativePaths ( specifier : string ) {
46+ const specifierExtension = path . extname ( specifier ) ;
47+ const extensionsToTry = mappedExtensions [ specifierExtension ] ?? [ ] ;
48+ specifier = specifier . slice ( 0 , - specifierExtension . length ) ;
49+ return extensionsToTry . map ( extension => `${ specifier } ${ extension } ` ) ;
50+ }
4551
4652async function tryExtensions (
4753 specifier : string ,
4854 context : Context ,
4955 defaultResolve : resolve ,
5056) {
5157 let error ;
52- const extension = path . extname ( specifier ) ;
53- let extensionsToTry = mappedExtensions [ extension ] ;
54- if ( extensionsToTry ) {
55- specifier = specifier . slice ( 0 , - extension . length ) ;
56- } else {
57- extensionsToTry = extensions ;
58- }
59- for ( const extension of extensionsToTry ) {
58+ for ( const fileToTry of resolveTsAlternativePaths ( specifier ) ) {
6059 try {
6160 return await resolve (
62- specifier + extension ,
61+ fileToTry ,
6362 context ,
6463 defaultResolve ,
6564 true ,
6665 ) ;
6766 } catch ( _error : any ) {
6867 if ( error === undefined ) {
6968 const { message } = _error ;
70- _error . message = _error . message . replace ( `${ extension } '` , "'" ) ;
69+ _error . message = _error . message . replace ( `${ specifier } '` , ` ${ fileToTry } '` ) ;
7170 _error . stack = _error . stack . replace ( message , _error . message ) ;
7271 error = _error ;
7372 }
0 commit comments