Skip to content

Commit 6f22254

Browse files
committed
Store resolvedFileName as fileId instead of structure if thats the only info in resolution
1 parent 81a1af9 commit 6f22254

38 files changed

+3393
-7506
lines changed

src/compiler/builder.ts

+36-32
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ import {
7878
OldBuildInfoProgramConstructor,
7979
OldBuildInfoProgramHost,
8080
outFile,
81+
PackageId,
8182
PackageJsonInfoCache,
8283
PackageJsonInfoContents,
8384
PackageJsonScope,
@@ -953,23 +954,18 @@ export type ProgramBuildInfoEmitSignature = ProgramBuildInfoFileId | [fileId: Pr
953954
*/
954955
export type ProgramMultiFileEmitBuildInfoFileInfo = string | ProgramMultiFileEmitBuildInfoBuilderStateFileInfo;
955956
/** @internal */
956-
export interface ProgramBuildInfoResolutionBase {
957+
export interface ProgramBuildInfoResolved {
957958
readonly resolvedFileName: ProgramBuildInfoAbsoluteFileId;
958959
readonly originalPath: ProgramBuildInfoAbsoluteFileId | undefined;
959-
readonly primary: true | undefined;
960-
extension: undefined;
961-
isExternalLibraryImport: undefined;
960+
readonly packageId: PackageId | undefined;
962961
}
963962
/** @internal */
964-
export type ProgramBuildInfoResolvedModuleFull = Omit<ResolvedModuleFull, "resolvedFileName" | "isExternalLibraryImport" | "originalPath" | "extension"> & ProgramBuildInfoResolutionBase;
965-
/** @internal */
966-
export type ProgramBuildInfoResolvedTypeReferenceDirective = Omit<ResolvedTypeReferenceDirective, "resolvedFileName" | "isExternalLibraryImport" | "originalPath" | "primary"> & ProgramBuildInfoResolutionBase;
967-
/** @internal */
968963
export interface ProgramBuildInfoResolution {
969-
readonly resolvedModule: ProgramBuildInfoResolvedModuleFull | undefined;
970-
readonly resolvedTypeReferenceDirective: ProgramBuildInfoResolvedTypeReferenceDirective | undefined;
964+
readonly resolvedModule: ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved | undefined;
965+
readonly resolvedTypeReferenceDirective: ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved | undefined;
971966
readonly affectingLocations: readonly ProgramBuildInfoAbsoluteFileId[] | undefined;
972967
readonly resolutionDiagnostics: readonly ReusableDiagnostic[] | undefined;
968+
notPrimary: true | undefined;
973969
}
974970
/** @internal */
975971
export type ProgramBuildInfoHash = ProgramBuildInfoAbsoluteFileId | [fileId: ProgramBuildInfoAbsoluteFileId, hash: string];
@@ -1426,11 +1422,13 @@ function getBuildInfo(state: BuilderProgramState, host: BuilderProgramHost, bund
14261422
}
14271423

14281424
function toProgramBuildInfoResolution(resolution: ResolvedModuleWithFailedLookupLocations | ResolvedTypeReferenceDirectiveWithFailedLookupLocations): ProgramBuildInfoResolution {
1425+
const resolvedTypeReferenceDirective = (resolution as ResolvedTypeReferenceDirectiveWithFailedLookupLocations).resolvedTypeReferenceDirective;
14291426
return {
14301427
resolvedModule: toProgramBuildInfoResolved((resolution as ResolvedModuleWithFailedLookupLocations).resolvedModule),
1431-
resolvedTypeReferenceDirective: toProgramBuildInfoResolved((resolution as ResolvedTypeReferenceDirectiveWithFailedLookupLocations).resolvedTypeReferenceDirective),
1428+
resolvedTypeReferenceDirective: toProgramBuildInfoResolved(resolvedTypeReferenceDirective),
14321429
affectingLocations: toReadonlyArrayOrUndefined(resolution.affectingLocations, toAffectedFileId),
14331430
resolutionDiagnostics: toReadonlyArrayOrUndefined(resolution.resolutionDiagnostics, toReusableDiagnostic),
1431+
notPrimary: resolvedTypeReferenceDirective && !resolvedTypeReferenceDirective.primary ? true : undefined,
14341432
};
14351433
}
14361434

@@ -1455,17 +1453,12 @@ function getBuildInfo(state: BuilderProgramState, host: BuilderProgramHost, bund
14551453
return fileId;
14561454
}
14571455

1458-
function toProgramBuildInfoResolved(resolved: ResolvedModuleFull | undefined): ProgramBuildInfoResolvedModuleFull | undefined;
1459-
function toProgramBuildInfoResolved(resolved: ResolvedTypeReferenceDirective | undefined): ProgramBuildInfoResolvedTypeReferenceDirective | undefined;
1460-
function toProgramBuildInfoResolved(resolved: ResolvedModuleFull | ResolvedTypeReferenceDirective | undefined): ProgramBuildInfoResolvedModuleFull | ProgramBuildInfoResolvedTypeReferenceDirective | undefined {
1461-
return resolved ? {
1462-
...resolved,
1463-
resolvedFileName: toAbsoluteFileId(resolved.resolvedFileName!),
1464-
isExternalLibraryImport: undefined,
1465-
originalPath: resolved.originalPath ? toAbsoluteFileId(resolved.originalPath) : undefined,
1466-
primary: (resolved as ResolvedTypeReferenceDirective).primary || undefined,
1467-
extension: undefined,
1468-
} : undefined;
1456+
function toProgramBuildInfoResolved(resolved: ResolvedModuleFull | ResolvedTypeReferenceDirective | undefined): ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved | undefined {
1457+
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 };
14691462
}
14701463
}
14711464

@@ -2389,19 +2382,25 @@ export function createOldBuildInfoProgram(
23892382
return resuableCacheResolutions!.cache.names[nameId - 1];
23902383
}
23912384

2385+
function toResolvedFileName(resolved: ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved) {
2386+
return isNumber(resolved) ? resolved : resolved.resolvedFileName;
2387+
}
2388+
2389+
function toOriginalOrResolvedFileName(resolved: ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved) {
2390+
return isNumber(resolved) ? resolved : resolved.originalPath || resolved.resolvedFileName;
2391+
}
2392+
23922393
function toOriginalOrResolvedModuleFileName(resolutionId: ProgramBuildInfoResolutionId): string {
23932394
return originalPathOrResolvedFileNames?.[resolutionId - 1] ??
23942395
((originalPathOrResolvedFileNames ??= new Array(resuableCacheResolutions!.cache.resolutions.length))[resolutionId - 1] = resuableCacheResolutions!.getProgramBuildInfoFilePathDecoder().toFileAbsolutePath(
2395-
resuableCacheResolutions!.cache.resolutions[resolutionId - 1].resolvedModule!.originalPath ||
2396-
resuableCacheResolutions!.cache.resolutions[resolutionId - 1].resolvedModule!.resolvedFileName
2396+
toOriginalOrResolvedFileName(resuableCacheResolutions!.cache.resolutions[resolutionId - 1].resolvedModule!)
23972397
));
23982398
}
23992399

24002400
function toOriginalOrResolvedTypeReferenceFileName(resolutionId: ProgramBuildInfoResolutionId): string {
24012401
return originalPathOrResolvedFileNames?.[resolutionId - 1] ??
24022402
((originalPathOrResolvedFileNames ??= new Array(resuableCacheResolutions!.cache.resolutions.length))[resolutionId - 1] = resuableCacheResolutions!.getProgramBuildInfoFilePathDecoder().toFileAbsolutePath(
2403-
resuableCacheResolutions!.cache.resolutions[resolutionId - 1].resolvedTypeReferenceDirective!.originalPath ||
2404-
resuableCacheResolutions!.cache.resolutions[resolutionId - 1].resolvedTypeReferenceDirective!.resolvedFileName
2403+
toOriginalOrResolvedFileName(resuableCacheResolutions!.cache.resolutions[resolutionId - 1].resolvedTypeReferenceDirective!)
24052404
));
24062405
}
24072406

@@ -2420,7 +2419,7 @@ export function createOldBuildInfoProgram(
24202419
resolutions ??= new Array(resuableCacheResolutions!.cache.resolutions.length);
24212420
const resolution = resuableCacheResolutions!.cache.resolutions[resolutionId - 1];
24222421
const resolvedFileName = resuableCacheResolutions!.getProgramBuildInfoFilePathDecoder().toFileAbsolutePath(
2423-
resolution.resolvedModule?.resolvedFileName || resolution.resolvedTypeReferenceDirective!.resolvedFileName
2422+
toResolvedFileName(resolution.resolvedModule || resolution.resolvedTypeReferenceDirective!)
24242423
);
24252424
let affectingLocations: string[] | undefined;
24262425
if (fileExists(resolvedFileName) && every(resolution.affectingLocations, fileId => {
@@ -2431,8 +2430,8 @@ export function createOldBuildInfoProgram(
24312430
// Type Ref doesnt need extension
24322431
const extenstion = resolution.resolvedModule ? extensionFromPath(resolvedFileName) : undefined!;
24332432
return resolutions[resolutionId - 1] = {
2434-
resolvedModule: toResolved(resolution.resolvedModule, resolvedFileName, extenstion),
2435-
resolvedTypeReferenceDirective: toResolved(resolution.resolvedTypeReferenceDirective, resolvedFileName, extenstion),
2433+
resolvedModule: toResolved(resolution.resolvedModule, resolvedFileName, extenstion, /*primary*/ undefined),
2434+
resolvedTypeReferenceDirective: toResolved(resolution.resolvedTypeReferenceDirective, resolvedFileName, extenstion, !resolution.notPrimary),
24362435
affectingLocations,
24372436
resolutionDiagnostics: resolution.resolutionDiagnostics?.length ? convertToDiagnostics(resolution.resolutionDiagnostics, /*newProgram*/ undefined!) as Diagnostic[] : undefined
24382437
};
@@ -2442,18 +2441,23 @@ export function createOldBuildInfoProgram(
24422441
}
24432442

24442443
function toResolved(
2445-
resolved: ProgramBuildInfoResolvedModuleFull & ProgramBuildInfoResolvedTypeReferenceDirective | undefined,
2444+
resolved: ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved | undefined,
24462445
resolvedFileName: string,
24472446
extension: Extension,
2447+
primary: boolean | undefined,
24482448
): (ResolvedModuleFull & ResolvedTypeReferenceDirective) | undefined {
24492449
if (!resolved) return undefined;
2450-
const originalPath = resolved.originalPath ? resuableCacheResolutions!.getProgramBuildInfoFilePathDecoder().toFileAbsolutePath(resolved.originalPath) : undefined;
2450+
const originalPath = isNumber(resolved) || !resolved.originalPath ?
2451+
undefined :
2452+
resuableCacheResolutions!.getProgramBuildInfoFilePathDecoder().toFileAbsolutePath(resolved.originalPath);
2453+
const packageId = isNumber(resolved) ? undefined : resolved.packageId;
24512454
return {
2452-
...resolved,
24532455
resolvedFileName,
24542456
originalPath,
2457+
packageId,
24552458
isExternalLibraryImport: pathContainsNodeModules(originalPath || resolvedFileName),
24562459
extension,
2460+
primary,
24572461
};
24582462
}
24592463
}

src/testRunner/unittests/tsc/helpers.ts

+8-12
Original file line numberDiff line numberDiff line change
@@ -538,16 +538,14 @@ type ReadableProgramBuildInfoFileInfo<T> = Omit<ts.BuilderState.FileInfo, "impli
538538
impliedFormat: string | undefined;
539539
original: T | undefined;
540540
};
541-
interface ReadableProgramBuildInfoResolutionBase {
541+
type ReadableProgramBuildInfoResolved = string | Omit<ts.ProgramBuildInfoResolved, "resolvedFileName" | "originalPath"> & {
542542
readonly resolvedFileName: string;
543543
readonly originalPath: string | undefined;
544-
}
545-
type ReadableProgramBuildInfoResolvedModuleFull = Omit<ts.ProgramBuildInfoResolvedModuleFull, "resolvedFileName" | "originalPath"> & ReadableProgramBuildInfoResolutionBase;
546-
type ReadableProgramBuildInfoResolvedTypeReferenceDirective = Omit<ts.ProgramBuildInfoResolvedTypeReferenceDirective, "resolvedFileName" | "originalPath"> & ReadableProgramBuildInfoResolutionBase;
544+
};
547545
type ReadableProgramBuildInfoResolution = Omit<ts.ProgramBuildInfoResolution, "resolvedModule" | "resolvedTypeReferenceDirective" | "failedLookupLocations" | "affectingLocations"> & {
548546
readonly resolutionId: ts.ProgramBuildInfoResolutionId;
549-
readonly resolvedModule: ReadableProgramBuildInfoResolvedModuleFull | undefined;
550-
readonly resolvedTypeReferenceDirective: ReadableProgramBuildInfoResolvedTypeReferenceDirective | undefined;
547+
readonly resolvedModule: ReadableProgramBuildInfoResolved | undefined;
548+
readonly resolvedTypeReferenceDirective: ReadableProgramBuildInfoResolved | undefined;
551549
readonly affectingLocations: readonly string[] | undefined;
552550
};
553551
type ReadableWithOriginal<T, O> = T & {
@@ -792,14 +790,12 @@ function generateBuildInfoProgramBaseline(sys: ts.System, buildInfoPath: string,
792790
};
793791
}
794792

795-
function toReadableProgramBuildInfoResolved(resolved: ts.ProgramBuildInfoResolvedModuleFull | undefined): ReadableProgramBuildInfoResolvedModuleFull | undefined;
796-
function toReadableProgramBuildInfoResolved(resolved: ts.ProgramBuildInfoResolvedTypeReferenceDirective | undefined): ReadableProgramBuildInfoResolvedTypeReferenceDirective | undefined;
797-
function toReadableProgramBuildInfoResolved(resolved: ts.ProgramBuildInfoResolvedModuleFull | ts.ProgramBuildInfoResolvedTypeReferenceDirective | undefined): ReadableProgramBuildInfoResolvedModuleFull | ReadableProgramBuildInfoResolvedTypeReferenceDirective | undefined {
798-
return resolved && {
793+
function toReadableProgramBuildInfoResolved(resolved: ts.ProgramBuildInfoAbsoluteFileId | ts.ProgramBuildInfoResolved | undefined): ReadableProgramBuildInfoResolved | undefined {
794+
return resolved && (ts.isNumber(resolved) ? toFileName(resolved) : {
799795
...resolved,
800796
resolvedFileName: toFileName(resolved.resolvedFileName),
801-
originalPath: resolved.originalPath && toFileName(resolved.originalPath)
802-
};
797+
originalPath: resolved.originalPath ? toFileName(resolved.originalPath) : undefined,
798+
});
803799
}
804800

805801
function toName(nameId: ts.ProgramBuildInfoResolutionNameId): string {

0 commit comments

Comments
 (0)