@@ -1372,6 +1372,10 @@ namespace ts {
1372
1372
reportDiagnostic : diag => void diagnostics . push ( diag ) ,
1373
1373
} ;
1374
1374
1375
+ if ( traceEnabled && getEmitModuleResolutionKind ( compilerOptions ) >= ModuleResolutionKind . Node16 && getEmitModuleResolutionKind ( compilerOptions ) <= ModuleResolutionKind . NodeNext ) {
1376
+ trace ( host , Diagnostics . Resolving_in_0_mode_with_conditions_1 , features & NodeResolutionFeatures . EsmMode ? "ESM" : "CJS" , conditions . map ( c => `'${ c } '` ) . join ( ", " ) ) ;
1377
+ }
1378
+
1375
1379
const result = forEach ( extensions , ext => tryResolve ( ext ) ) ;
1376
1380
return createResolvedModuleWithFailedLookupLocations (
1377
1381
result ?. value ?. resolved ,
@@ -2032,7 +2036,7 @@ namespace ts {
2032
2036
}
2033
2037
if ( mainExport ) {
2034
2038
const loadModuleFromTargetImportOrExport = getLoadModuleFromTargetImportOrExport ( extensions , state , cache , redirectedReference , subpath , scope , /*isImports*/ false ) ;
2035
- return loadModuleFromTargetImportOrExport ( mainExport , "" , /*pattern*/ false ) ;
2039
+ return loadModuleFromTargetImportOrExport ( mainExport , "" , /*pattern*/ false , "." ) ;
2036
2040
}
2037
2041
}
2038
2042
else if ( allKeysStartWithDot ( scope . contents . packageJsonContent . exports as MapLike < unknown > ) ) {
@@ -2111,25 +2115,25 @@ namespace ts {
2111
2115
2112
2116
if ( ! endsWith ( moduleName , directorySeparator ) && moduleName . indexOf ( "*" ) === - 1 && hasProperty ( lookupTable , moduleName ) ) {
2113
2117
const target = ( lookupTable as { [ idx : string ] : unknown } ) [ moduleName ] ;
2114
- return loadModuleFromTargetImportOrExport ( target , /*subpath*/ "" , /*pattern*/ false ) ;
2118
+ return loadModuleFromTargetImportOrExport ( target , /*subpath*/ "" , /*pattern*/ false , moduleName ) ;
2115
2119
}
2116
2120
const expandingKeys = sort ( filter ( getOwnKeys ( lookupTable as MapLike < unknown > ) , k => k . indexOf ( "*" ) !== - 1 || endsWith ( k , "/" ) ) , comparePatternKeys ) ;
2117
2121
for ( const potentialTarget of expandingKeys ) {
2118
2122
if ( state . features & NodeResolutionFeatures . ExportsPatternTrailers && matchesPatternWithTrailer ( potentialTarget , moduleName ) ) {
2119
2123
const target = ( lookupTable as { [ idx : string ] : unknown } ) [ potentialTarget ] ;
2120
2124
const starPos = potentialTarget . indexOf ( "*" ) ;
2121
2125
const subpath = moduleName . substring ( potentialTarget . substring ( 0 , starPos ) . length , moduleName . length - ( potentialTarget . length - 1 - starPos ) ) ;
2122
- return loadModuleFromTargetImportOrExport ( target , subpath , /*pattern*/ true ) ;
2126
+ return loadModuleFromTargetImportOrExport ( target , subpath , /*pattern*/ true , potentialTarget ) ;
2123
2127
}
2124
2128
else if ( endsWith ( potentialTarget , "*" ) && startsWith ( moduleName , potentialTarget . substring ( 0 , potentialTarget . length - 1 ) ) ) {
2125
2129
const target = ( lookupTable as { [ idx : string ] : unknown } ) [ potentialTarget ] ;
2126
2130
const subpath = moduleName . substring ( potentialTarget . length - 1 ) ;
2127
- return loadModuleFromTargetImportOrExport ( target , subpath , /*pattern*/ true ) ;
2131
+ return loadModuleFromTargetImportOrExport ( target , subpath , /*pattern*/ true , potentialTarget ) ;
2128
2132
}
2129
2133
else if ( startsWith ( moduleName , potentialTarget ) ) {
2130
2134
const target = ( lookupTable as { [ idx : string ] : unknown } ) [ potentialTarget ] ;
2131
2135
const subpath = moduleName . substring ( potentialTarget . length ) ;
2132
- return loadModuleFromTargetImportOrExport ( target , subpath , /*pattern*/ false ) ;
2136
+ return loadModuleFromTargetImportOrExport ( target , subpath , /*pattern*/ false , potentialTarget ) ;
2133
2137
}
2134
2138
}
2135
2139
@@ -2146,7 +2150,7 @@ namespace ts {
2146
2150
*/
2147
2151
function getLoadModuleFromTargetImportOrExport ( extensions : Extensions , state : ModuleResolutionState , cache : ModuleResolutionCache | undefined , redirectedReference : ResolvedProjectReference | undefined , moduleName : string , scope : PackageJsonInfo , isImports : boolean ) {
2148
2152
return loadModuleFromTargetImportOrExport ;
2149
- function loadModuleFromTargetImportOrExport ( target : unknown , subpath : string , pattern : boolean ) : SearchResult < Resolved > | undefined {
2153
+ function loadModuleFromTargetImportOrExport ( target : unknown , subpath : string , pattern : boolean , key : string ) : SearchResult < Resolved > | undefined {
2150
2154
if ( typeof target === "string" ) {
2151
2155
if ( ! pattern && subpath . length > 0 && ! endsWith ( target , "/" ) ) {
2152
2156
if ( state . traceEnabled ) {
@@ -2157,6 +2161,8 @@ namespace ts {
2157
2161
if ( ! startsWith ( target , "./" ) ) {
2158
2162
if ( isImports && ! startsWith ( target , "../" ) && ! startsWith ( target , "/" ) && ! isRootedDiskPath ( target ) ) {
2159
2163
const combinedLookup = pattern ? target . replace ( / \* / g, subpath ) : target + subpath ;
2164
+ traceIfEnabled ( state , Diagnostics . Using_0_subpath_1_with_target_2 , "imports" , key , combinedLookup ) ;
2165
+ traceIfEnabled ( state , Diagnostics . Resolving_module_0_from_1 , combinedLookup , scope . packageDirectory + "/" ) ;
2160
2166
const result = nodeModuleNameResolverWorker ( state . features , combinedLookup , scope . packageDirectory + "/" , state . compilerOptions , state . host , cache , [ extensions ] , redirectedReference ) ;
2161
2167
return toSearchResult ( result . resolvedModule ? { path : result . resolvedModule . resolvedFileName , extension : result . resolvedModule . extension , packageId : result . resolvedModule . packageId , originalPath : result . resolvedModule . originalPath } : undefined ) ;
2162
2168
}
@@ -2183,21 +2189,33 @@ namespace ts {
2183
2189
}
2184
2190
return toSearchResult ( /*value*/ undefined ) ;
2185
2191
}
2192
+
2193
+ if ( state . traceEnabled ) {
2194
+ trace ( state . host ,
2195
+ Diagnostics . Using_0_subpath_1_with_target_2 ,
2196
+ isImports ? "imports" : "exports" ,
2197
+ key ,
2198
+ pattern ? target . replace ( / \* / g, subpath ) : target + subpath ) ;
2199
+ }
2186
2200
const finalPath = toAbsolutePath ( pattern ? resolvedTarget . replace ( / \* / g, subpath ) : resolvedTarget + subpath ) ;
2187
2201
const inputLink = tryLoadInputFileForPath ( finalPath , subpath , combinePaths ( scope . packageDirectory , "package.json" ) , isImports ) ;
2188
2202
if ( inputLink ) return inputLink ;
2189
2203
return toSearchResult ( withPackageId ( scope , loadJSOrExactTSFileName ( extensions , finalPath , /*onlyRecordFailures*/ false , state ) ) ) ;
2190
2204
}
2191
2205
else if ( typeof target === "object" && target !== null ) { // eslint-disable-line no-null/no-null
2192
2206
if ( ! Array . isArray ( target ) ) {
2193
- for ( const key of getOwnKeys ( target as MapLike < unknown > ) ) {
2194
- if ( key === "default" || state . conditions . indexOf ( key ) >= 0 || isApplicableVersionedTypesKey ( state . conditions , key ) ) {
2195
- const subTarget = ( target as MapLike < unknown > ) [ key ] ;
2196
- const result = loadModuleFromTargetImportOrExport ( subTarget , subpath , pattern ) ;
2207
+ for ( const condition of getOwnKeys ( target as MapLike < unknown > ) ) {
2208
+ if ( condition === "default" || state . conditions . indexOf ( condition ) >= 0 || isApplicableVersionedTypesKey ( state . conditions , condition ) ) {
2209
+ traceIfEnabled ( state , Diagnostics . Matched_0_condition_1 , isImports ? "imports" : "exports" , condition ) ;
2210
+ const subTarget = ( target as MapLike < unknown > ) [ condition ] ;
2211
+ const result = loadModuleFromTargetImportOrExport ( subTarget , subpath , pattern , key ) ;
2197
2212
if ( result ) {
2198
2213
return result ;
2199
2214
}
2200
2215
}
2216
+ else {
2217
+ traceIfEnabled ( state , Diagnostics . Saw_non_matching_condition_0 , condition ) ;
2218
+ }
2201
2219
}
2202
2220
return undefined ;
2203
2221
}
@@ -2209,7 +2227,7 @@ namespace ts {
2209
2227
return toSearchResult ( /*value*/ undefined ) ;
2210
2228
}
2211
2229
for ( const elem of target ) {
2212
- const result = loadModuleFromTargetImportOrExport ( elem , subpath , pattern ) ;
2230
+ const result = loadModuleFromTargetImportOrExport ( elem , subpath , pattern , key ) ;
2213
2231
if ( result ) {
2214
2232
return result ;
2215
2233
}
@@ -2685,4 +2703,10 @@ namespace ts {
2685
2703
function toSearchResult < T > ( value : T | undefined ) : SearchResult < T > {
2686
2704
return value !== undefined ? { value } : undefined ;
2687
2705
}
2706
+
2707
+ function traceIfEnabled ( state : ModuleResolutionState , diagnostic : DiagnosticMessage , ...args : string [ ] ) {
2708
+ if ( state . traceEnabled ) {
2709
+ trace ( state . host , diagnostic , ...args ) ;
2710
+ }
2711
+ }
2688
2712
}
0 commit comments