@@ -35,26 +35,52 @@ type resolve = (
3535 recursiveCall ?: boolean ,
3636) => MaybePromise < Resolved > ;
3737
38- const extensions = [ '.js' , '.json' , '.ts' , '.tsx' , '.jsx' ] as const ;
38+ const mappedExtensions : Record < string , string [ ] > = {
39+ '.js' : [ '.ts' , '.tsx' ] ,
40+ '.jsx' : [ '.ts' , '.tsx' ] ,
41+ '.cjs' : [ '.cts' ] ,
42+ '.mjs' : [ '.mts' ] ,
43+ '' : [ '.ts' , '.js' , '.json' , '.tsx' , '.jsx' ] ,
44+ } ;
45+
46+ function resolveTsAlternativeSpecifiers ( specifier : string ) {
47+ const specifierExtension = path . extname ( specifier ) ;
48+ let extensionsToTry = mappedExtensions [ specifierExtension ] ?? [ ] ;
49+ if ( specifierExtension ) {
50+ specifier = specifier . slice ( 0 , specifier . length - specifierExtension . length ) ;
51+ extensionsToTry = [
52+ // Try subextension first
53+ ...mappedExtensions [ '' ] . map ( extension => `${ specifierExtension } ${ extension } ` ) ,
54+ ...extensionsToTry ,
55+ ] ;
56+ }
57+ return extensionsToTry . map ( alternativeExtension => ( {
58+ specifier,
59+ specifierExtension,
60+ altenativeSpecifier : `${ specifier } ${ alternativeExtension } ` ,
61+ alternativeExtension,
62+ } ) ) ;
63+ }
3964
4065async function tryExtensions (
4166 specifier : string ,
4267 context : Context ,
4368 defaultResolve : resolve ,
4469) {
4570 let error ;
46- for ( const extension of extensions ) {
71+ for ( const alternativePath of resolveTsAlternativeSpecifiers ( specifier ) ) {
72+ const { specifierExtension, altenativeSpecifier, alternativeExtension } = alternativePath ;
4773 try {
4874 return await resolve (
49- specifier + extension ,
75+ altenativeSpecifier ,
5076 context ,
5177 defaultResolve ,
5278 true ,
5379 ) ;
5480 } catch ( _error : any ) {
5581 if ( error === undefined ) {
5682 const { message } = _error ;
57- _error . message = _error . message . replace ( `${ extension } '` , "'" ) ;
83+ _error . message = _error . message . replace ( `${ alternativeExtension } '` , ` ${ specifierExtension } '` ) ;
5884 _error . stack = _error . stack . replace ( message , _error . message ) ;
5985 error = _error ;
6086 }
0 commit comments