@@ -35,39 +35,38 @@ type resolve = (
35
35
recursiveCall ?: boolean ,
36
36
) => MaybePromise < Resolved > ;
37
37
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' ] ,
42
40
'.cjs' : [ '.cts' ] ,
43
41
'.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
+ }
45
51
46
52
async function tryExtensions (
47
53
specifier : string ,
48
54
context : Context ,
49
55
defaultResolve : resolve ,
50
56
) {
51
57
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 ) ) {
60
59
try {
61
60
return await resolve (
62
- specifier + extension ,
61
+ fileToTry ,
63
62
context ,
64
63
defaultResolve ,
65
64
true ,
66
65
) ;
67
66
} catch ( _error : any ) {
68
67
if ( error === undefined ) {
69
68
const { message } = _error ;
70
- _error . message = _error . message . replace ( `${ extension } '` , "'" ) ;
69
+ _error . message = _error . message . replace ( `${ specifier } '` , ` ${ fileToTry } '` ) ;
71
70
_error . stack = _error . stack . replace ( message , _error . message ) ;
72
71
error = _error ;
73
72
}
0 commit comments