Skip to content

Commit

Permalink
Store resolvedFileName as fileId instead of structure if thats the on…
Browse files Browse the repository at this point in the history
…ly info in resolution
  • Loading branch information
sheetalkamat committed Dec 10, 2022
1 parent 81a1af9 commit 6f22254
Show file tree
Hide file tree
Showing 38 changed files with 3,393 additions and 7,506 deletions.
68 changes: 36 additions & 32 deletions src/compiler/builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ import {
OldBuildInfoProgramConstructor,
OldBuildInfoProgramHost,
outFile,
PackageId,
PackageJsonInfoCache,
PackageJsonInfoContents,
PackageJsonScope,
Expand Down Expand Up @@ -953,23 +954,18 @@ export type ProgramBuildInfoEmitSignature = ProgramBuildInfoFileId | [fileId: Pr
*/
export type ProgramMultiFileEmitBuildInfoFileInfo = string | ProgramMultiFileEmitBuildInfoBuilderStateFileInfo;
/** @internal */
export interface ProgramBuildInfoResolutionBase {
export interface ProgramBuildInfoResolved {
readonly resolvedFileName: ProgramBuildInfoAbsoluteFileId;
readonly originalPath: ProgramBuildInfoAbsoluteFileId | undefined;
readonly primary: true | undefined;
extension: undefined;
isExternalLibraryImport: undefined;
readonly packageId: PackageId | undefined;
}
/** @internal */
export type ProgramBuildInfoResolvedModuleFull = Omit<ResolvedModuleFull, "resolvedFileName" | "isExternalLibraryImport" | "originalPath" | "extension"> & ProgramBuildInfoResolutionBase;
/** @internal */
export type ProgramBuildInfoResolvedTypeReferenceDirective = Omit<ResolvedTypeReferenceDirective, "resolvedFileName" | "isExternalLibraryImport" | "originalPath" | "primary"> & ProgramBuildInfoResolutionBase;
/** @internal */
export interface ProgramBuildInfoResolution {
readonly resolvedModule: ProgramBuildInfoResolvedModuleFull | undefined;
readonly resolvedTypeReferenceDirective: ProgramBuildInfoResolvedTypeReferenceDirective | undefined;
readonly resolvedModule: ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved | undefined;
readonly resolvedTypeReferenceDirective: ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved | undefined;
readonly affectingLocations: readonly ProgramBuildInfoAbsoluteFileId[] | undefined;
readonly resolutionDiagnostics: readonly ReusableDiagnostic[] | undefined;
notPrimary: true | undefined;
}
/** @internal */
export type ProgramBuildInfoHash = ProgramBuildInfoAbsoluteFileId | [fileId: ProgramBuildInfoAbsoluteFileId, hash: string];
Expand Down Expand Up @@ -1426,11 +1422,13 @@ function getBuildInfo(state: BuilderProgramState, host: BuilderProgramHost, bund
}

function toProgramBuildInfoResolution(resolution: ResolvedModuleWithFailedLookupLocations | ResolvedTypeReferenceDirectiveWithFailedLookupLocations): ProgramBuildInfoResolution {
const resolvedTypeReferenceDirective = (resolution as ResolvedTypeReferenceDirectiveWithFailedLookupLocations).resolvedTypeReferenceDirective;
return {
resolvedModule: toProgramBuildInfoResolved((resolution as ResolvedModuleWithFailedLookupLocations).resolvedModule),
resolvedTypeReferenceDirective: toProgramBuildInfoResolved((resolution as ResolvedTypeReferenceDirectiveWithFailedLookupLocations).resolvedTypeReferenceDirective),
resolvedTypeReferenceDirective: toProgramBuildInfoResolved(resolvedTypeReferenceDirective),
affectingLocations: toReadonlyArrayOrUndefined(resolution.affectingLocations, toAffectedFileId),
resolutionDiagnostics: toReadonlyArrayOrUndefined(resolution.resolutionDiagnostics, toReusableDiagnostic),
notPrimary: resolvedTypeReferenceDirective && !resolvedTypeReferenceDirective.primary ? true : undefined,
};
}

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

function toProgramBuildInfoResolved(resolved: ResolvedModuleFull | undefined): ProgramBuildInfoResolvedModuleFull | undefined;
function toProgramBuildInfoResolved(resolved: ResolvedTypeReferenceDirective | undefined): ProgramBuildInfoResolvedTypeReferenceDirective | undefined;
function toProgramBuildInfoResolved(resolved: ResolvedModuleFull | ResolvedTypeReferenceDirective | undefined): ProgramBuildInfoResolvedModuleFull | ProgramBuildInfoResolvedTypeReferenceDirective | undefined {
return resolved ? {
...resolved,
resolvedFileName: toAbsoluteFileId(resolved.resolvedFileName!),
isExternalLibraryImport: undefined,
originalPath: resolved.originalPath ? toAbsoluteFileId(resolved.originalPath) : undefined,
primary: (resolved as ResolvedTypeReferenceDirective).primary || undefined,
extension: undefined,
} : undefined;
function toProgramBuildInfoResolved(resolved: ResolvedModuleFull | ResolvedTypeReferenceDirective | undefined): ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved | undefined {
if (!resolved) return undefined;
const resolvedFileName = toAbsoluteFileId(resolved.resolvedFileName!);
const originalPath = resolved.originalPath ? toAbsoluteFileId(resolved.originalPath) : undefined;
if (!originalPath && !resolved.packageId) return resolvedFileName;
return { resolvedFileName, originalPath, packageId: resolved.packageId };
}
}

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

function toResolvedFileName(resolved: ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved) {
return isNumber(resolved) ? resolved : resolved.resolvedFileName;
}

function toOriginalOrResolvedFileName(resolved: ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved) {
return isNumber(resolved) ? resolved : resolved.originalPath || resolved.resolvedFileName;
}

function toOriginalOrResolvedModuleFileName(resolutionId: ProgramBuildInfoResolutionId): string {
return originalPathOrResolvedFileNames?.[resolutionId - 1] ??
((originalPathOrResolvedFileNames ??= new Array(resuableCacheResolutions!.cache.resolutions.length))[resolutionId - 1] = resuableCacheResolutions!.getProgramBuildInfoFilePathDecoder().toFileAbsolutePath(
resuableCacheResolutions!.cache.resolutions[resolutionId - 1].resolvedModule!.originalPath ||
resuableCacheResolutions!.cache.resolutions[resolutionId - 1].resolvedModule!.resolvedFileName
toOriginalOrResolvedFileName(resuableCacheResolutions!.cache.resolutions[resolutionId - 1].resolvedModule!)
));
}

function toOriginalOrResolvedTypeReferenceFileName(resolutionId: ProgramBuildInfoResolutionId): string {
return originalPathOrResolvedFileNames?.[resolutionId - 1] ??
((originalPathOrResolvedFileNames ??= new Array(resuableCacheResolutions!.cache.resolutions.length))[resolutionId - 1] = resuableCacheResolutions!.getProgramBuildInfoFilePathDecoder().toFileAbsolutePath(
resuableCacheResolutions!.cache.resolutions[resolutionId - 1].resolvedTypeReferenceDirective!.originalPath ||
resuableCacheResolutions!.cache.resolutions[resolutionId - 1].resolvedTypeReferenceDirective!.resolvedFileName
toOriginalOrResolvedFileName(resuableCacheResolutions!.cache.resolutions[resolutionId - 1].resolvedTypeReferenceDirective!)
));
}

Expand All @@ -2420,7 +2419,7 @@ export function createOldBuildInfoProgram(
resolutions ??= new Array(resuableCacheResolutions!.cache.resolutions.length);
const resolution = resuableCacheResolutions!.cache.resolutions[resolutionId - 1];
const resolvedFileName = resuableCacheResolutions!.getProgramBuildInfoFilePathDecoder().toFileAbsolutePath(
resolution.resolvedModule?.resolvedFileName || resolution.resolvedTypeReferenceDirective!.resolvedFileName
toResolvedFileName(resolution.resolvedModule || resolution.resolvedTypeReferenceDirective!)
);
let affectingLocations: string[] | undefined;
if (fileExists(resolvedFileName) && every(resolution.affectingLocations, fileId => {
Expand All @@ -2431,8 +2430,8 @@ export function createOldBuildInfoProgram(
// Type Ref doesnt need extension
const extenstion = resolution.resolvedModule ? extensionFromPath(resolvedFileName) : undefined!;
return resolutions[resolutionId - 1] = {
resolvedModule: toResolved(resolution.resolvedModule, resolvedFileName, extenstion),
resolvedTypeReferenceDirective: toResolved(resolution.resolvedTypeReferenceDirective, resolvedFileName, extenstion),
resolvedModule: toResolved(resolution.resolvedModule, resolvedFileName, extenstion, /*primary*/ undefined),
resolvedTypeReferenceDirective: toResolved(resolution.resolvedTypeReferenceDirective, resolvedFileName, extenstion, !resolution.notPrimary),
affectingLocations,
resolutionDiagnostics: resolution.resolutionDiagnostics?.length ? convertToDiagnostics(resolution.resolutionDiagnostics, /*newProgram*/ undefined!) as Diagnostic[] : undefined
};
Expand All @@ -2442,18 +2441,23 @@ export function createOldBuildInfoProgram(
}

function toResolved(
resolved: ProgramBuildInfoResolvedModuleFull & ProgramBuildInfoResolvedTypeReferenceDirective | undefined,
resolved: ProgramBuildInfoAbsoluteFileId | ProgramBuildInfoResolved | undefined,
resolvedFileName: string,
extension: Extension,
primary: boolean | undefined,
): (ResolvedModuleFull & ResolvedTypeReferenceDirective) | undefined {
if (!resolved) return undefined;
const originalPath = resolved.originalPath ? resuableCacheResolutions!.getProgramBuildInfoFilePathDecoder().toFileAbsolutePath(resolved.originalPath) : undefined;
const originalPath = isNumber(resolved) || !resolved.originalPath ?
undefined :
resuableCacheResolutions!.getProgramBuildInfoFilePathDecoder().toFileAbsolutePath(resolved.originalPath);
const packageId = isNumber(resolved) ? undefined : resolved.packageId;
return {
...resolved,
resolvedFileName,
originalPath,
packageId,
isExternalLibraryImport: pathContainsNodeModules(originalPath || resolvedFileName),
extension,
primary,
};
}
}
Expand Down
20 changes: 8 additions & 12 deletions src/testRunner/unittests/tsc/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -538,16 +538,14 @@ type ReadableProgramBuildInfoFileInfo<T> = Omit<ts.BuilderState.FileInfo, "impli
impliedFormat: string | undefined;
original: T | undefined;
};
interface ReadableProgramBuildInfoResolutionBase {
type ReadableProgramBuildInfoResolved = string | Omit<ts.ProgramBuildInfoResolved, "resolvedFileName" | "originalPath"> & {
readonly resolvedFileName: string;
readonly originalPath: string | undefined;
}
type ReadableProgramBuildInfoResolvedModuleFull = Omit<ts.ProgramBuildInfoResolvedModuleFull, "resolvedFileName" | "originalPath"> & ReadableProgramBuildInfoResolutionBase;
type ReadableProgramBuildInfoResolvedTypeReferenceDirective = Omit<ts.ProgramBuildInfoResolvedTypeReferenceDirective, "resolvedFileName" | "originalPath"> & ReadableProgramBuildInfoResolutionBase;
};
type ReadableProgramBuildInfoResolution = Omit<ts.ProgramBuildInfoResolution, "resolvedModule" | "resolvedTypeReferenceDirective" | "failedLookupLocations" | "affectingLocations"> & {
readonly resolutionId: ts.ProgramBuildInfoResolutionId;
readonly resolvedModule: ReadableProgramBuildInfoResolvedModuleFull | undefined;
readonly resolvedTypeReferenceDirective: ReadableProgramBuildInfoResolvedTypeReferenceDirective | undefined;
readonly resolvedModule: ReadableProgramBuildInfoResolved | undefined;
readonly resolvedTypeReferenceDirective: ReadableProgramBuildInfoResolved | undefined;
readonly affectingLocations: readonly string[] | undefined;
};
type ReadableWithOriginal<T, O> = T & {
Expand Down Expand Up @@ -792,14 +790,12 @@ function generateBuildInfoProgramBaseline(sys: ts.System, buildInfoPath: string,
};
}

function toReadableProgramBuildInfoResolved(resolved: ts.ProgramBuildInfoResolvedModuleFull | undefined): ReadableProgramBuildInfoResolvedModuleFull | undefined;
function toReadableProgramBuildInfoResolved(resolved: ts.ProgramBuildInfoResolvedTypeReferenceDirective | undefined): ReadableProgramBuildInfoResolvedTypeReferenceDirective | undefined;
function toReadableProgramBuildInfoResolved(resolved: ts.ProgramBuildInfoResolvedModuleFull | ts.ProgramBuildInfoResolvedTypeReferenceDirective | undefined): ReadableProgramBuildInfoResolvedModuleFull | ReadableProgramBuildInfoResolvedTypeReferenceDirective | undefined {
return resolved && {
function toReadableProgramBuildInfoResolved(resolved: ts.ProgramBuildInfoAbsoluteFileId | ts.ProgramBuildInfoResolved | undefined): ReadableProgramBuildInfoResolved | undefined {
return resolved && (ts.isNumber(resolved) ? toFileName(resolved) : {
...resolved,
resolvedFileName: toFileName(resolved.resolvedFileName),
originalPath: resolved.originalPath && toFileName(resolved.originalPath)
};
originalPath: resolved.originalPath ? toFileName(resolved.originalPath) : undefined,
});
}

function toName(nameId: ts.ProgramBuildInfoResolutionNameId): string {
Expand Down
Loading

0 comments on commit 6f22254

Please sign in to comment.