@@ -52,6 +52,7 @@ import {
5252 getEmitDeclarations ,
5353 getNormalizedAbsolutePath ,
5454 getOptionsNameMap ,
55+ getOriginalAndResolvedFileName ,
5556 getOriginalOrResolvedModuleFileName ,
5657 getOriginalOrResolvedTypeReferenceFileName ,
5758 getOwnKeys ,
@@ -67,6 +68,7 @@ import {
6768 isJsonSourceFile ,
6869 isNumber ,
6970 isString ,
71+ isTraceEnabled ,
7072 map ,
7173 mapDefined ,
7274 maybeBind ,
@@ -956,7 +958,6 @@ export type ProgramMultiFileEmitBuildInfoFileInfo = string | ProgramMultiFileEmi
956958/** @internal */
957959export interface ProgramBuildInfoResolved {
958960 readonly resolvedFileName : ProgramBuildInfoAbsoluteFileId ;
959- readonly originalPath : ProgramBuildInfoAbsoluteFileId | undefined ;
960961 readonly packageId : PackageId | undefined ;
961962}
962963/** @internal */
@@ -1455,10 +1456,9 @@ function getBuildInfo(state: BuilderProgramState, host: BuilderProgramHost, bund
14551456
14561457 function toProgramBuildInfoResolved ( resolved : ResolvedModuleFull | ResolvedTypeReferenceDirective | undefined ) : ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved | undefined {
14571458 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 } ;
14621462 }
14631463}
14641464
@@ -2168,6 +2168,7 @@ export function createOldBuildInfoProgram(
21682168 let resolutions : ( Resolution | false ) [ ] | undefined ;
21692169 let originalPathOrResolvedFileNames : string [ ] | undefined ;
21702170 let resolutionEntries : ResolutionEntry [ ] | undefined ;
2171+ const traceEnabled = isTraceEnabled ( host . getCompilerOptions ( ) , host . compilerHost ) ;
21712172 return {
21722173 getCompilerOptions : ( ) => compilerOptions ,
21732174 getResolvedModule : ( name , mode , dirPath , redirectedReference ) => getResolvedFromCache (
@@ -2199,7 +2200,7 @@ export function createOldBuildInfoProgram(
21992200
22002201 function fileExists ( fileName : string ) {
22012202 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 ) ) ;
22032204 return result ;
22042205 }
22052206
@@ -2212,7 +2213,7 @@ export function createOldBuildInfoProgram(
22122213 const packageJsonInfo = host . getPackageJsonInfo ( fileName ) ;
22132214 const currentText = typeof packageJsonInfo === "object" ? packageJsonInfo . contents . packageJsonText : undefined ;
22142215 if ( isString ( expected ) ) {
2215- result = ! ! currentText && ( host . createHash ?? generateDjb2Hash ) ( currentText ) === expected ;
2216+ result = ! ! currentText && ( host . compilerHost . createHash ?? generateDjb2Hash ) ( currentText ) === expected ;
22162217 }
22172218 else {
22182219 result = currentText === expected ?. packageJsonText ;
@@ -2303,7 +2304,6 @@ export function createOldBuildInfoProgram(
23032304 // If we are using the cache, directly get from there
23042305 const fromCache = cache ?. getFromCache ( name , mode , dirPath , options ) ;
23052306 if ( fromCache ) {
2306- // TODO:: symlinks
23072307 const resolvedFileName = getResolvedFileName ( fromCache ) ;
23082308 return resolvedFileName && fileExists ( resolvedFileName ) && every (
23092309 fromCache . affectingLocations ,
@@ -2336,7 +2336,7 @@ export function createOldBuildInfoProgram(
23362336 if ( ! reusableResolutionsCache . decoded ) return undefined ;
23372337 }
23382338 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 ;
23402340 }
23412341
23422342 function setBuildInfoResolutionEntries (
@@ -2382,12 +2382,8 @@ export function createOldBuildInfoProgram(
23822382 return resuableCacheResolutions ! . cache . names [ nameId - 1 ] ;
23832383 }
23842384
2385- function toResolvedFileName ( resolved : ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved ) {
2386- return isNumber ( resolved ) ? resolved : resolved . resolvedFileName ;
2387- }
2388-
23892385 function toOriginalOrResolvedFileName ( resolved : ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved ) {
2390- return isNumber ( resolved ) ? resolved : resolved . originalPath || resolved . resolvedFileName ;
2386+ return isNumber ( resolved ) ? resolved : resolved . resolvedFileName ;
23912387 }
23922388
23932389 function toOriginalOrResolvedModuleFileName ( resolutionId : ProgramBuildInfoResolutionId ) : string {
@@ -2413,13 +2409,13 @@ export function createOldBuildInfoProgram(
24132409 return affectingLocationsSame ( file , hash ) ? file : undefined ;
24142410 }
24152411
2416- function toResolution ( resolutionId : ProgramBuildInfoResolutionId ) : Resolution | undefined {
2412+ function toResolution ( resolutionId : ProgramBuildInfoResolutionId , name : string ) : Resolution | undefined {
24172413 const existing = resolutions ?. [ resolutionId - 1 ] ;
24182414 if ( existing !== undefined ) return existing || undefined ;
24192415 resolutions ??= new Array ( resuableCacheResolutions ! . cache . resolutions . length ) ;
24202416 const resolution = resuableCacheResolutions ! . cache . resolutions [ resolutionId - 1 ] ;
24212417 const resolvedFileName = resuableCacheResolutions ! . getProgramBuildInfoFilePathDecoder ( ) . toFileAbsolutePath (
2422- toResolvedFileName ( resolution . resolvedModule || resolution . resolvedTypeReferenceDirective ! )
2418+ toOriginalOrResolvedFileName ( resolution . resolvedModule || resolution . resolvedTypeReferenceDirective ! )
24232419 ) ;
24242420 let affectingLocations : string [ ] | undefined ;
24252421 if ( fileExists ( resolvedFileName ) && every ( resolution . affectingLocations , fileId => {
@@ -2430,8 +2426,8 @@ export function createOldBuildInfoProgram(
24302426 // Type Ref doesnt need extension
24312427 const extenstion = resolution . resolvedModule ? extensionFromPath ( resolvedFileName ) : undefined ! ;
24322428 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 ) ,
24352431 affectingLocations,
24362432 resolutionDiagnostics : resolution . resolutionDiagnostics ?. length ? convertToDiagnostics ( resolution . resolutionDiagnostics , /*newProgram*/ undefined ! ) as Diagnostic [ ] : undefined
24372433 } ;
@@ -2444,18 +2440,21 @@ export function createOldBuildInfoProgram(
24442440 resolved : ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved | undefined ,
24452441 resolvedFileName : string ,
24462442 extension : Extension ,
2443+ name : string | undefined ,
24472444 primary : boolean | undefined ,
24482445 ) : ( ResolvedModuleFull & ResolvedTypeReferenceDirective ) | undefined {
24492446 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+ }
24532452 const packageId = isNumber ( resolved ) ? undefined : resolved . packageId ;
24542453 return {
24552454 resolvedFileName,
24562455 originalPath,
24572456 packageId,
2458- isExternalLibraryImport : pathContainsNodeModules ( originalPath || resolvedFileName ) ,
2457+ isExternalLibraryImport,
24592458 extension,
24602459 primary,
24612460 } ;
0 commit comments