diff --git a/src/compiler/program.ts b/src/compiler/program.ts index c20b5df5498..ebc23493b4f 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -2120,7 +2120,11 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg } function getResolvedTypeReferenceDirectiveFromTypeReferenceDirective(typeRef: FileReference, sourceFile: SourceFile) { - return getResolvedTypeReferenceDirective(sourceFile, typeRef.fileName, typeRef.resolutionMode || sourceFile.impliedNodeFormat); + return getResolvedTypeReferenceDirective( + sourceFile, + typeRef.fileName, + getModeForTypeReferenceDirectiveInFile(typeRef, sourceFile), + ); } function forEachResolvedModule( @@ -2648,11 +2652,12 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg const moduleNames = getModuleNames(newSourceFile); const resolutions = resolveModuleNamesReusingOldState(moduleNames, newSourceFile); (resolvedModulesProcessing ??= new Map()).set(newSourceFile.path, resolutions); + const optionsForFile = getCompilerOptionsForFile(newSourceFile); // ensure that module resolution results are still correct const resolutionsChanged = hasChangesInResolutions( moduleNames, resolutions, - name => oldProgram.getResolvedModule(newSourceFile, name.text, getModeForUsageLocation(newSourceFile, name)), + name => oldProgram.getResolvedModule(newSourceFile, name.text, getModeForUsageLocationWorker(newSourceFile, name, optionsForFile)), moduleResolutionIsEqualTo, ); if (resolutionsChanged) structureIsReused = StructureIsReused.SafeModules; @@ -2663,7 +2668,12 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg const typeReferenceResolutionsChanged = hasChangesInResolutions( typesReferenceDirectives, typeReferenceResolutions, - name => oldProgram.getResolvedTypeReferenceDirective(newSourceFile, getTypeReferenceResolutionName(name), getModeForFileReference(name, newSourceFile.impliedNodeFormat)), + name => + oldProgram.getResolvedTypeReferenceDirective( + newSourceFile, + getTypeReferenceResolutionName(name), + getModeForTypeReferenceDirectiveInFile(name, newSourceFile), + ), typeDirectiveIsEqualTo, ); if (typeReferenceResolutionsChanged) structureIsReused = StructureIsReused.SafeModules; @@ -4044,8 +4054,8 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg const resolvedTypeReferenceDirective = resolutions[index]; // store resolved type directive on the file const fileName = ref.fileName; - resolutionsInFile.set(fileName, getModeForFileReference(ref, file.impliedNodeFormat), resolvedTypeReferenceDirective); - const mode = ref.resolutionMode || getDefaultResolutionModeForFile(file); + const mode = getModeForTypeReferenceDirectiveInFile(ref, file); + resolutionsInFile.set(fileName, mode, resolvedTypeReferenceDirective); processTypeReferenceDirective(fileName, mode, resolvedTypeReferenceDirective, { kind: FileIncludeKind.TypeReferenceDirective, file: file.path, index }); } } @@ -5224,6 +5234,10 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg function shouldTransformImportCall(sourceFile: SourceFile): boolean { return shouldTransformImportCallWorker(sourceFile, getCompilerOptionsForFile(sourceFile)); } + + function getModeForTypeReferenceDirectiveInFile(ref: FileReference, sourceFile: SourceFile) { + return ref.resolutionMode || getDefaultResolutionModeForFile(sourceFile); + } } function shouldTransformImportCallWorker(sourceFile: Pick, options: CompilerOptions): boolean {