@@ -52,6 +52,7 @@ import {
52
52
getEmitDeclarations ,
53
53
getNormalizedAbsolutePath ,
54
54
getOptionsNameMap ,
55
+ getOriginalAndResolvedFileName ,
55
56
getOriginalOrResolvedModuleFileName ,
56
57
getOriginalOrResolvedTypeReferenceFileName ,
57
58
getOwnKeys ,
@@ -67,6 +68,7 @@ import {
67
68
isJsonSourceFile ,
68
69
isNumber ,
69
70
isString ,
71
+ isTraceEnabled ,
70
72
map ,
71
73
mapDefined ,
72
74
maybeBind ,
@@ -956,7 +958,6 @@ export type ProgramMultiFileEmitBuildInfoFileInfo = string | ProgramMultiFileEmi
956
958
/** @internal */
957
959
export interface ProgramBuildInfoResolved {
958
960
readonly resolvedFileName : ProgramBuildInfoAbsoluteFileId ;
959
- readonly originalPath : ProgramBuildInfoAbsoluteFileId | undefined ;
960
961
readonly packageId : PackageId | undefined ;
961
962
}
962
963
/** @internal */
@@ -1455,10 +1456,9 @@ function getBuildInfo(state: BuilderProgramState, host: BuilderProgramHost, bund
1455
1456
1456
1457
function toProgramBuildInfoResolved ( resolved : ResolvedModuleFull | ResolvedTypeReferenceDirective | undefined ) : ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved | undefined {
1457
1458
if ( ! resolved ) return undefined ;
1458
- const resolvedFileName = toAbsoluteFileId ( resolved . resolvedFileName ! ) ;
1459
- const originalPath = resolved . originalPath ? toAbsoluteFileId ( resolved . originalPath ) : undefined ;
1460
- if ( ! originalPath && ! resolved . packageId ) return resolvedFileName ;
1461
- return { resolvedFileName, originalPath, packageId : resolved . packageId } ;
1459
+ const resolvedFileName = toAbsoluteFileId ( resolved . originalPath || resolved . resolvedFileName ! ) ;
1460
+ if ( ! resolved . packageId ) return resolvedFileName ;
1461
+ return { resolvedFileName, packageId : resolved . packageId } ;
1462
1462
}
1463
1463
}
1464
1464
@@ -2168,6 +2168,7 @@ export function createOldBuildInfoProgram(
2168
2168
let resolutions : ( Resolution | false ) [ ] | undefined ;
2169
2169
let originalPathOrResolvedFileNames : string [ ] | undefined ;
2170
2170
let resolutionEntries : ResolutionEntry [ ] | undefined ;
2171
+ const traceEnabled = isTraceEnabled ( host . getCompilerOptions ( ) , host . compilerHost ) ;
2171
2172
return {
2172
2173
getCompilerOptions : ( ) => compilerOptions ,
2173
2174
getResolvedModule : ( name , mode , dirPath , redirectedReference ) => getResolvedFromCache (
@@ -2199,7 +2200,7 @@ export function createOldBuildInfoProgram(
2199
2200
2200
2201
function fileExists ( fileName : string ) {
2201
2202
let result = fileExistsMap . get ( fileName ) ;
2202
- if ( result === undefined ) fileExistsMap . set ( fileName , result = host . fileExists ( fileName ) ) ;
2203
+ if ( result === undefined ) fileExistsMap . set ( fileName , result = host . compilerHost . fileExists ( fileName ) ) ;
2203
2204
return result ;
2204
2205
}
2205
2206
@@ -2212,7 +2213,7 @@ export function createOldBuildInfoProgram(
2212
2213
const packageJsonInfo = host . getPackageJsonInfo ( fileName ) ;
2213
2214
const currentText = typeof packageJsonInfo === "object" ? packageJsonInfo . contents . packageJsonText : undefined ;
2214
2215
if ( isString ( expected ) ) {
2215
- result = ! ! currentText && ( host . createHash ?? generateDjb2Hash ) ( currentText ) === expected ;
2216
+ result = ! ! currentText && ( host . compilerHost . createHash ?? generateDjb2Hash ) ( currentText ) === expected ;
2216
2217
}
2217
2218
else {
2218
2219
result = currentText === expected ?. packageJsonText ;
@@ -2303,7 +2304,6 @@ export function createOldBuildInfoProgram(
2303
2304
// If we are using the cache, directly get from there
2304
2305
const fromCache = cache ?. getFromCache ( name , mode , dirPath , options ) ;
2305
2306
if ( fromCache ) {
2306
- // TODO:: symlinks
2307
2307
const resolvedFileName = getResolvedFileName ( fromCache ) ;
2308
2308
return resolvedFileName && fileExists ( resolvedFileName ) && every (
2309
2309
fromCache . affectingLocations ,
@@ -2336,7 +2336,7 @@ export function createOldBuildInfoProgram(
2336
2336
if ( ! reusableResolutionsCache . decoded ) return undefined ;
2337
2337
}
2338
2338
const resolutionId = reusableResolutionsCache . decoded . getFromCache ( name , mode , dirPath , options ) ;
2339
- return resolutionId ? toResolution ( resolutionId ) as T : undefined ;
2339
+ return resolutionId ? toResolution ( resolutionId , name ) as T : undefined ;
2340
2340
}
2341
2341
2342
2342
function setBuildInfoResolutionEntries (
@@ -2382,12 +2382,8 @@ export function createOldBuildInfoProgram(
2382
2382
return resuableCacheResolutions ! . cache . names [ nameId - 1 ] ;
2383
2383
}
2384
2384
2385
- function toResolvedFileName ( resolved : ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved ) {
2386
- return isNumber ( resolved ) ? resolved : resolved . resolvedFileName ;
2387
- }
2388
-
2389
2385
function toOriginalOrResolvedFileName ( resolved : ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved ) {
2390
- return isNumber ( resolved ) ? resolved : resolved . originalPath || resolved . resolvedFileName ;
2386
+ return isNumber ( resolved ) ? resolved : resolved . resolvedFileName ;
2391
2387
}
2392
2388
2393
2389
function toOriginalOrResolvedModuleFileName ( resolutionId : ProgramBuildInfoResolutionId ) : string {
@@ -2413,13 +2409,13 @@ export function createOldBuildInfoProgram(
2413
2409
return affectingLocationsSame ( file , hash ) ? file : undefined ;
2414
2410
}
2415
2411
2416
- function toResolution ( resolutionId : ProgramBuildInfoResolutionId ) : Resolution | undefined {
2412
+ function toResolution ( resolutionId : ProgramBuildInfoResolutionId , name : string ) : Resolution | undefined {
2417
2413
const existing = resolutions ?. [ resolutionId - 1 ] ;
2418
2414
if ( existing !== undefined ) return existing || undefined ;
2419
2415
resolutions ??= new Array ( resuableCacheResolutions ! . cache . resolutions . length ) ;
2420
2416
const resolution = resuableCacheResolutions ! . cache . resolutions [ resolutionId - 1 ] ;
2421
2417
const resolvedFileName = resuableCacheResolutions ! . getProgramBuildInfoFilePathDecoder ( ) . toFileAbsolutePath (
2422
- toResolvedFileName ( resolution . resolvedModule || resolution . resolvedTypeReferenceDirective ! )
2418
+ toOriginalOrResolvedFileName ( resolution . resolvedModule || resolution . resolvedTypeReferenceDirective ! )
2423
2419
) ;
2424
2420
let affectingLocations : string [ ] | undefined ;
2425
2421
if ( fileExists ( resolvedFileName ) && every ( resolution . affectingLocations , fileId => {
@@ -2430,8 +2426,8 @@ export function createOldBuildInfoProgram(
2430
2426
// Type Ref doesnt need extension
2431
2427
const extenstion = resolution . resolvedModule ? extensionFromPath ( resolvedFileName ) : undefined ! ;
2432
2428
return resolutions [ resolutionId - 1 ] = {
2433
- resolvedModule : toResolved ( resolution . resolvedModule , resolvedFileName , extenstion , /*primary*/ undefined ) ,
2434
- resolvedTypeReferenceDirective : toResolved ( resolution . resolvedTypeReferenceDirective , resolvedFileName , extenstion , ! resolution . notPrimary ) ,
2429
+ resolvedModule : toResolved ( resolution . resolvedModule , resolvedFileName , extenstion , name , /*primary*/ undefined ) ,
2430
+ resolvedTypeReferenceDirective : toResolved ( resolution . resolvedTypeReferenceDirective , resolvedFileName , extenstion , /*name*/ undefined , ! resolution . notPrimary ) ,
2435
2431
affectingLocations,
2436
2432
resolutionDiagnostics : resolution . resolutionDiagnostics ?. length ? convertToDiagnostics ( resolution . resolutionDiagnostics , /*newProgram*/ undefined ! ) as Diagnostic [ ] : undefined
2437
2433
} ;
@@ -2444,18 +2440,21 @@ export function createOldBuildInfoProgram(
2444
2440
resolved : ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved | undefined ,
2445
2441
resolvedFileName : string ,
2446
2442
extension : Extension ,
2443
+ name : string | undefined ,
2447
2444
primary : boolean | undefined ,
2448
2445
) : ( ResolvedModuleFull & ResolvedTypeReferenceDirective ) | undefined {
2449
2446
if ( ! resolved ) return undefined ;
2450
- const originalPath = isNumber ( resolved ) || ! resolved . originalPath ?
2451
- undefined :
2452
- resuableCacheResolutions ! . getProgramBuildInfoFilePathDecoder ( ) . toFileAbsolutePath ( resolved . originalPath ) ;
2447
+ let originalPath : string | undefined ;
2448
+ const isExternalLibraryImport = pathContainsNodeModules ( resolvedFileName ) ;
2449
+ if ( ! host . getCompilerOptions ( ) . preserveSymlinks && ( ! name || ( isExternalLibraryImport && ! isExternalModuleNameRelative ( name ) ) ) ) {
2450
+ ( { resolvedFileName, originalPath } = getOriginalAndResolvedFileName ( resolvedFileName , host . compilerHost , traceEnabled ) ) ;
2451
+ }
2453
2452
const packageId = isNumber ( resolved ) ? undefined : resolved . packageId ;
2454
2453
return {
2455
2454
resolvedFileName,
2456
2455
originalPath,
2457
2456
packageId,
2458
- isExternalLibraryImport : pathContainsNodeModules ( originalPath || resolvedFileName ) ,
2457
+ isExternalLibraryImport,
2459
2458
extension,
2460
2459
primary,
2461
2460
} ;
0 commit comments