Allow watch host to specify module name resolver

This commit is contained in:
Sheetal Nandi 2017-11-07 13:08:20 -08:00
parent 7ebf9d9f9d
commit 3c5a6e1ae7
2 changed files with 10 additions and 2 deletions

View File

@ -170,6 +170,9 @@ namespace ts {
beforeProgramCreate(compilerOptions: CompilerOptions): void;
/** Custom action after new program creation is successful */
afterProgramCreate(host: DirectoryStructureHost, program: Program): void;
/** Optional module name resolver */
moduleNameResolver?(moduleNames: string[], containingFile: string, reusedNames?: string[]): ResolvedModule[];
}
/**
@ -308,6 +311,9 @@ namespace ts {
const getCachedDirectoryStructureHost = configFileName && (() => directoryStructureHost as CachedDirectoryStructureHost);
const getCanonicalFileName = createGetCanonicalFileName(system.useCaseSensitiveFileNames);
let newLine = getNewLineCharacter(compilerOptions, system);
const resolveModuleNames: (moduleNames: string[], containingFile: string, reusedNames?: string[]) => ResolvedModule[] = host.moduleNameResolver ?
(moduleNames, containingFile, reusedNames) => host.moduleNameResolver(moduleNames, containingFile, reusedNames) :
(moduleNames, containingFile, reusedNames?) => resolutionCache.resolveModuleNames(moduleNames, containingFile, reusedNames, /*logChanges*/ false);
const compilerHost: CompilerHost & ResolutionCacheHost = {
// Members for CompilerHost
@ -328,7 +334,7 @@ namespace ts {
getDirectories: path => directoryStructureHost.getDirectories(path),
realpath,
resolveTypeReferenceDirectives: (typeDirectiveNames, containingFile) => resolutionCache.resolveTypeReferenceDirectives(typeDirectiveNames, containingFile),
resolveModuleNames: (moduleNames, containingFile, reusedNames?) => resolutionCache.resolveModuleNames(moduleNames, containingFile, reusedNames, /*logChanges*/ false),
resolveModuleNames,
onReleaseOldSourceFile,
// Members for ResolutionCacheHost
toPath,
@ -341,7 +347,7 @@ namespace ts {
hasChangedAutomaticTypeDirectiveNames = true;
scheduleProgramUpdate();
},
writeLog
writeLog,
};
// Cache for the module resolution
const resolutionCache = createResolutionCache(compilerHost, configFileName ?

View File

@ -3825,6 +3825,8 @@ declare namespace ts {
beforeProgramCreate(compilerOptions: CompilerOptions): void;
/** Custom action after new program creation is successful */
afterProgramCreate(host: DirectoryStructureHost, program: Program): void;
/** Optional module name resolver */
moduleNameResolver?(moduleNames: string[], containingFile: string, reusedNames?: string[]): ResolvedModule[];
}
/**
* Host to create watch with root files and options