Skip to content

Commit aa9df4d

Browse files
authored
Fix incorrect mode calculation in typereference resolution (#60049)
1 parent 9ad213f commit aa9df4d

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

src/compiler/program.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2120,7 +2120,11 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
21202120
}
21212121

21222122
function getResolvedTypeReferenceDirectiveFromTypeReferenceDirective(typeRef: FileReference, sourceFile: SourceFile) {
2123-
return getResolvedTypeReferenceDirective(sourceFile, typeRef.fileName, typeRef.resolutionMode || sourceFile.impliedNodeFormat);
2123+
return getResolvedTypeReferenceDirective(
2124+
sourceFile,
2125+
typeRef.fileName,
2126+
getModeForTypeReferenceDirectiveInFile(typeRef, sourceFile),
2127+
);
21242128
}
21252129

21262130
function forEachResolvedModule(
@@ -2648,11 +2652,12 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
26482652
const moduleNames = getModuleNames(newSourceFile);
26492653
const resolutions = resolveModuleNamesReusingOldState(moduleNames, newSourceFile);
26502654
(resolvedModulesProcessing ??= new Map()).set(newSourceFile.path, resolutions);
2655+
const optionsForFile = getCompilerOptionsForFile(newSourceFile);
26512656
// ensure that module resolution results are still correct
26522657
const resolutionsChanged = hasChangesInResolutions(
26532658
moduleNames,
26542659
resolutions,
2655-
name => oldProgram.getResolvedModule(newSourceFile, name.text, getModeForUsageLocation(newSourceFile, name)),
2660+
name => oldProgram.getResolvedModule(newSourceFile, name.text, getModeForUsageLocationWorker(newSourceFile, name, optionsForFile)),
26562661
moduleResolutionIsEqualTo,
26572662
);
26582663
if (resolutionsChanged) structureIsReused = StructureIsReused.SafeModules;
@@ -2663,7 +2668,12 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
26632668
const typeReferenceResolutionsChanged = hasChangesInResolutions(
26642669
typesReferenceDirectives,
26652670
typeReferenceResolutions,
2666-
name => oldProgram.getResolvedTypeReferenceDirective(newSourceFile, getTypeReferenceResolutionName(name), getModeForFileReference(name, newSourceFile.impliedNodeFormat)),
2671+
name =>
2672+
oldProgram.getResolvedTypeReferenceDirective(
2673+
newSourceFile,
2674+
getTypeReferenceResolutionName(name),
2675+
getModeForTypeReferenceDirectiveInFile(name, newSourceFile),
2676+
),
26672677
typeDirectiveIsEqualTo,
26682678
);
26692679
if (typeReferenceResolutionsChanged) structureIsReused = StructureIsReused.SafeModules;
@@ -4044,8 +4054,8 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
40444054
const resolvedTypeReferenceDirective = resolutions[index];
40454055
// store resolved type directive on the file
40464056
const fileName = ref.fileName;
4047-
resolutionsInFile.set(fileName, getModeForFileReference(ref, file.impliedNodeFormat), resolvedTypeReferenceDirective);
4048-
const mode = ref.resolutionMode || getDefaultResolutionModeForFile(file);
4057+
const mode = getModeForTypeReferenceDirectiveInFile(ref, file);
4058+
resolutionsInFile.set(fileName, mode, resolvedTypeReferenceDirective);
40494059
processTypeReferenceDirective(fileName, mode, resolvedTypeReferenceDirective, { kind: FileIncludeKind.TypeReferenceDirective, file: file.path, index });
40504060
}
40514061
}
@@ -5224,6 +5234,10 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
52245234
function shouldTransformImportCall(sourceFile: SourceFile): boolean {
52255235
return shouldTransformImportCallWorker(sourceFile, getCompilerOptionsForFile(sourceFile));
52265236
}
5237+
5238+
function getModeForTypeReferenceDirectiveInFile(ref: FileReference, sourceFile: SourceFile) {
5239+
return ref.resolutionMode || getDefaultResolutionModeForFile(sourceFile);
5240+
}
52275241
}
52285242

52295243
function shouldTransformImportCallWorker(sourceFile: Pick<SourceFile, "fileName" | "impliedNodeFormat" | "packageJsonScope">, options: CompilerOptions): boolean {

0 commit comments

Comments
 (0)