Skip to content

Commit c25e7dd

Browse files
committed
Wire in compilerOptions of the program in to the host's resolveModuleNames and resolveTypeReferenceDirectives api
Fixes #31056
1 parent dbe9e3d commit c25e7dd

File tree

7 files changed

+24
-26
lines changed

7 files changed

+24
-26
lines changed

src/compiler/program.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -762,7 +762,7 @@ namespace ts {
762762
let resolveModuleNamesWorker: (moduleNames: string[], containingFile: string, reusedNames?: string[], redirectedReference?: ResolvedProjectReference) => ResolvedModuleFull[];
763763
const hasInvalidatedResolution = host.hasInvalidatedResolution || returnFalse;
764764
if (host.resolveModuleNames) {
765-
resolveModuleNamesWorker = (moduleNames, containingFile, reusedNames, redirectedReference) => host.resolveModuleNames!(Debug.assertEachDefined(moduleNames), containingFile, reusedNames, redirectedReference).map(resolved => {
765+
resolveModuleNamesWorker = (moduleNames, containingFile, reusedNames, redirectedReference) => host.resolveModuleNames!(Debug.assertEachDefined(moduleNames), containingFile, reusedNames, redirectedReference, options).map(resolved => {
766766
// An older host may have omitted extension, in which case we should infer it from the file extension of resolvedFileName.
767767
if (!resolved || (resolved as ResolvedModuleFull).extension !== undefined) {
768768
return resolved as ResolvedModuleFull;
@@ -780,7 +780,7 @@ namespace ts {
780780

781781
let resolveTypeReferenceDirectiveNamesWorker: (typeDirectiveNames: string[], containingFile: string, redirectedReference?: ResolvedProjectReference) => (ResolvedTypeReferenceDirective | undefined)[];
782782
if (host.resolveTypeReferenceDirectives) {
783-
resolveTypeReferenceDirectiveNamesWorker = (typeDirectiveNames, containingFile, redirectedReference) => host.resolveTypeReferenceDirectives!(Debug.assertEachDefined(typeDirectiveNames), containingFile, redirectedReference);
783+
resolveTypeReferenceDirectiveNamesWorker = (typeDirectiveNames, containingFile, redirectedReference) => host.resolveTypeReferenceDirectives!(Debug.assertEachDefined(typeDirectiveNames), containingFile, redirectedReference, options);
784784
}
785785
else {
786786
const loader = (typesRef: string, containingFile: string, redirectedReference: ResolvedProjectReference | undefined) => resolveTypeReferenceDirective(typesRef, containingFile, options, host, redirectedReference).resolvedTypeReferenceDirective!; // TODO: GH#18217

src/compiler/types.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -5173,11 +5173,11 @@ namespace ts {
51735173
* If resolveModuleNames is implemented then implementation for members from ModuleResolutionHost can be just
51745174
* 'throw new Error("NotImplemented")'
51755175
*/
5176-
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames?: string[], redirectedReference?: ResolvedProjectReference): (ResolvedModule | undefined)[];
5176+
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames: string[] | undefined, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedModule | undefined)[];
51775177
/**
51785178
* This method is a companion for 'resolveModuleNames' and is used to resolve 'types' references to actual type declaration files
51795179
*/
5180-
resolveTypeReferenceDirectives?(typeReferenceDirectiveNames: string[], containingFile: string, redirectedReference?: ResolvedProjectReference): (ResolvedTypeReferenceDirective | undefined)[];
5180+
resolveTypeReferenceDirectives?(typeReferenceDirectiveNames: string[], containingFile: string, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedTypeReferenceDirective | undefined)[];
51815181
getEnvironmentVariable?(name: string): string | undefined;
51825182
/* @internal */ onReleaseOldSourceFile?(oldSourceFile: SourceFile, oldOptions: CompilerOptions, hasSourceFileByPath: boolean): void;
51835183
/* @internal */ hasInvalidatedResolution?: HasInvalidatedResolution;

src/compiler/watch.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -538,9 +538,9 @@ namespace ts {
538538
getEnvironmentVariable?(name: string): string | undefined;
539539

540540
/** If provided, used to resolve the module names, otherwise typescript's default module resolution */
541-
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames?: string[], redirectedReference?: ResolvedProjectReference): (ResolvedModule | undefined)[];
541+
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames: string[] | undefined, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedModule | undefined)[];
542542
/** If provided, used to resolve type reference directives, otherwise typescript's default resolution */
543-
resolveTypeReferenceDirectives?(typeReferenceDirectiveNames: string[], containingFile: string, redirectedReference?: ResolvedProjectReference): (ResolvedTypeReferenceDirective | undefined)[];
543+
resolveTypeReferenceDirectives?(typeReferenceDirectiveNames: string[], containingFile: string, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedTypeReferenceDirective | undefined)[];
544544
}
545545
/** Internal interface used to wire emit through same host */
546546

@@ -744,10 +744,10 @@ namespace ts {
744744
);
745745
// Resolve module using host module resolution strategy if provided otherwise use resolution cache to resolve module names
746746
compilerHost.resolveModuleNames = host.resolveModuleNames ?
747-
((moduleNames, containingFile, reusedNames, redirectedReference) => host.resolveModuleNames!(moduleNames, containingFile, reusedNames, redirectedReference)) :
747+
((...args) => host.resolveModuleNames!(...args)) :
748748
((moduleNames, containingFile, reusedNames, redirectedReference) => resolutionCache.resolveModuleNames(moduleNames, containingFile, reusedNames, redirectedReference));
749749
compilerHost.resolveTypeReferenceDirectives = host.resolveTypeReferenceDirectives ?
750-
((typeDirectiveNames, containingFile, redirectedReference) => host.resolveTypeReferenceDirectives!(typeDirectiveNames, containingFile, redirectedReference)) :
750+
((...args) => host.resolveTypeReferenceDirectives!(...args)) :
751751
((typeDirectiveNames, containingFile, redirectedReference) => resolutionCache.resolveTypeReferenceDirectives(typeDirectiveNames, containingFile, redirectedReference));
752752
const userProvidedResolution = !!host.resolveModuleNames || !!host.resolveTypeReferenceDirectives;
753753

src/services/services.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -1238,12 +1238,10 @@ namespace ts {
12381238
}
12391239

12401240
if (host.resolveModuleNames) {
1241-
compilerHost.resolveModuleNames = (moduleNames, containingFile, reusedNames, redirectedReference) => host.resolveModuleNames!(moduleNames, containingFile, reusedNames, redirectedReference);
1241+
compilerHost.resolveModuleNames = (...args) => host.resolveModuleNames!(...args);
12421242
}
12431243
if (host.resolveTypeReferenceDirectives) {
1244-
compilerHost.resolveTypeReferenceDirectives = (typeReferenceDirectiveNames, containingFile, redirectedReference) => {
1245-
return host.resolveTypeReferenceDirectives!(typeReferenceDirectiveNames, containingFile, redirectedReference);
1246-
};
1244+
compilerHost.resolveTypeReferenceDirectives = (...args) => host.resolveTypeReferenceDirectives!(...args);
12471245
}
12481246

12491247
const documentRegistryBucketKey = documentRegistry.getKeyForCompilationSettings(newSettings);

src/services/types.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -211,9 +211,9 @@ namespace ts {
211211
*
212212
* If this is implemented, `getResolvedModuleWithFailedLookupLocationsFromCache` should be too.
213213
*/
214-
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames?: string[], redirectedReference?: ResolvedProjectReference): (ResolvedModule | undefined)[];
214+
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames: string[] | undefined, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedModule | undefined)[];
215215
getResolvedModuleWithFailedLookupLocationsFromCache?(modulename: string, containingFile: string): ResolvedModuleWithFailedLookupLocations | undefined;
216-
resolveTypeReferenceDirectives?(typeDirectiveNames: string[], containingFile: string, redirectedReference?: ResolvedProjectReference): (ResolvedTypeReferenceDirective | undefined)[];
216+
resolveTypeReferenceDirectives?(typeDirectiveNames: string[], containingFile: string, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedTypeReferenceDirective | undefined)[];
217217
/* @internal */ hasInvalidatedResolution?: HasInvalidatedResolution;
218218
/* @internal */ hasChangedAutomaticTypeDirectiveNames?: boolean;
219219

tests/baselines/reference/api/tsserverlibrary.d.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -2769,11 +2769,11 @@ declare namespace ts {
27692769
useCaseSensitiveFileNames(): boolean;
27702770
getNewLine(): string;
27712771
readDirectory?(rootDir: string, extensions: ReadonlyArray<string>, excludes: ReadonlyArray<string> | undefined, includes: ReadonlyArray<string>, depth?: number): string[];
2772-
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames?: string[], redirectedReference?: ResolvedProjectReference): (ResolvedModule | undefined)[];
2772+
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames: string[] | undefined, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedModule | undefined)[];
27732773
/**
27742774
* This method is a companion for 'resolveModuleNames' and is used to resolve 'types' references to actual type declaration files
27752775
*/
2776-
resolveTypeReferenceDirectives?(typeReferenceDirectiveNames: string[], containingFile: string, redirectedReference?: ResolvedProjectReference): (ResolvedTypeReferenceDirective | undefined)[];
2776+
resolveTypeReferenceDirectives?(typeReferenceDirectiveNames: string[], containingFile: string, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedTypeReferenceDirective | undefined)[];
27772777
getEnvironmentVariable?(name: string): string | undefined;
27782778
createHash?(data: string): string;
27792779
getParsedCommandLine?(fileName: string): ParsedCommandLine | undefined;
@@ -4529,9 +4529,9 @@ declare namespace ts {
45294529
/** If provided is used to get the environment variable */
45304530
getEnvironmentVariable?(name: string): string | undefined;
45314531
/** If provided, used to resolve the module names, otherwise typescript's default module resolution */
4532-
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames?: string[], redirectedReference?: ResolvedProjectReference): (ResolvedModule | undefined)[];
4532+
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames: string[] | undefined, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedModule | undefined)[];
45334533
/** If provided, used to resolve type reference directives, otherwise typescript's default resolution */
4534-
resolveTypeReferenceDirectives?(typeReferenceDirectiveNames: string[], containingFile: string, redirectedReference?: ResolvedProjectReference): (ResolvedTypeReferenceDirective | undefined)[];
4534+
resolveTypeReferenceDirectives?(typeReferenceDirectiveNames: string[], containingFile: string, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedTypeReferenceDirective | undefined)[];
45354535
}
45364536
interface WatchCompilerHost<T extends BuilderProgram> extends ProgramHost<T>, WatchHost {
45374537
/** If provided, callback to invoke after every new program creation */
@@ -4886,9 +4886,9 @@ declare namespace ts {
48864886
realpath?(path: string): string;
48874887
fileExists?(path: string): boolean;
48884888
getTypeRootsVersion?(): number;
4889-
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames?: string[], redirectedReference?: ResolvedProjectReference): (ResolvedModule | undefined)[];
4889+
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames: string[] | undefined, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedModule | undefined)[];
48904890
getResolvedModuleWithFailedLookupLocationsFromCache?(modulename: string, containingFile: string): ResolvedModuleWithFailedLookupLocations | undefined;
4891-
resolveTypeReferenceDirectives?(typeDirectiveNames: string[], containingFile: string, redirectedReference?: ResolvedProjectReference): (ResolvedTypeReferenceDirective | undefined)[];
4891+
resolveTypeReferenceDirectives?(typeDirectiveNames: string[], containingFile: string, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedTypeReferenceDirective | undefined)[];
48924892
getDirectories?(directoryName: string): string[];
48934893
/**
48944894
* Gets a set of custom transformers to use during emit.

tests/baselines/reference/api/typescript.d.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -2769,11 +2769,11 @@ declare namespace ts {
27692769
useCaseSensitiveFileNames(): boolean;
27702770
getNewLine(): string;
27712771
readDirectory?(rootDir: string, extensions: ReadonlyArray<string>, excludes: ReadonlyArray<string> | undefined, includes: ReadonlyArray<string>, depth?: number): string[];
2772-
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames?: string[], redirectedReference?: ResolvedProjectReference): (ResolvedModule | undefined)[];
2772+
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames: string[] | undefined, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedModule | undefined)[];
27732773
/**
27742774
* This method is a companion for 'resolveModuleNames' and is used to resolve 'types' references to actual type declaration files
27752775
*/
2776-
resolveTypeReferenceDirectives?(typeReferenceDirectiveNames: string[], containingFile: string, redirectedReference?: ResolvedProjectReference): (ResolvedTypeReferenceDirective | undefined)[];
2776+
resolveTypeReferenceDirectives?(typeReferenceDirectiveNames: string[], containingFile: string, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedTypeReferenceDirective | undefined)[];
27772777
getEnvironmentVariable?(name: string): string | undefined;
27782778
createHash?(data: string): string;
27792779
getParsedCommandLine?(fileName: string): ParsedCommandLine | undefined;
@@ -4529,9 +4529,9 @@ declare namespace ts {
45294529
/** If provided is used to get the environment variable */
45304530
getEnvironmentVariable?(name: string): string | undefined;
45314531
/** If provided, used to resolve the module names, otherwise typescript's default module resolution */
4532-
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames?: string[], redirectedReference?: ResolvedProjectReference): (ResolvedModule | undefined)[];
4532+
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames: string[] | undefined, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedModule | undefined)[];
45334533
/** If provided, used to resolve type reference directives, otherwise typescript's default resolution */
4534-
resolveTypeReferenceDirectives?(typeReferenceDirectiveNames: string[], containingFile: string, redirectedReference?: ResolvedProjectReference): (ResolvedTypeReferenceDirective | undefined)[];
4534+
resolveTypeReferenceDirectives?(typeReferenceDirectiveNames: string[], containingFile: string, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedTypeReferenceDirective | undefined)[];
45354535
}
45364536
interface WatchCompilerHost<T extends BuilderProgram> extends ProgramHost<T>, WatchHost {
45374537
/** If provided, callback to invoke after every new program creation */
@@ -4886,9 +4886,9 @@ declare namespace ts {
48864886
realpath?(path: string): string;
48874887
fileExists?(path: string): boolean;
48884888
getTypeRootsVersion?(): number;
4889-
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames?: string[], redirectedReference?: ResolvedProjectReference): (ResolvedModule | undefined)[];
4889+
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames: string[] | undefined, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedModule | undefined)[];
48904890
getResolvedModuleWithFailedLookupLocationsFromCache?(modulename: string, containingFile: string): ResolvedModuleWithFailedLookupLocations | undefined;
4891-
resolveTypeReferenceDirectives?(typeDirectiveNames: string[], containingFile: string, redirectedReference?: ResolvedProjectReference): (ResolvedTypeReferenceDirective | undefined)[];
4891+
resolveTypeReferenceDirectives?(typeDirectiveNames: string[], containingFile: string, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions): (ResolvedTypeReferenceDirective | undefined)[];
48924892
getDirectories?(directoryName: string): string[];
48934893
/**
48944894
* Gets a set of custom transformers to use during emit.

0 commit comments

Comments
 (0)