mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-06-14 16:56:06 -05:00
Fix incorrect mode calculation in typereference resolution (#60049)
This commit is contained in:
@@ -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<SourceFile, "fileName" | "impliedNodeFormat" | "packageJsonScope">, options: CompilerOptions): boolean {
|
||||
|
||||
Reference in New Issue
Block a user