diff --git a/src/compiler/program.ts b/src/compiler/program.ts index ceb4e5fb033..5217674d309 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -221,19 +221,9 @@ namespace ts { host = host || createCompilerHost(options); - // initialize resolveModuleNameWorker only if noResolve is false - let resolveModuleNamesWorker: (moduleNames: string[], containingFile: string) => string[]; - if (!options.noResolve) { - resolveModuleNamesWorker = host.resolveModuleNames; - if (!resolveModuleNamesWorker) { - resolveModuleNamesWorker = (moduleNames, containingFile) => { - return map(moduleNames, moduleName => { - let moduleResolution = resolveModuleName(moduleName, containingFile, options, host); - return moduleResolution.resolvedFileName; - }); - } - } - } + const resolveModuleNamesWorker = + host.resolveModuleNames || + ((moduleNames, containingFile) => map(moduleNames, moduleName => resolveModuleName(moduleName, containingFile, options, host).resolvedFileName)); let filesByName = createFileMap(fileName => host.getCanonicalFileName(fileName)); @@ -670,12 +660,15 @@ namespace ts { // Set the source file for normalized absolute path filesByName.set(canonicalAbsolutePath, file); - + + let basePath = getDirectoryPath(fileName); if (!options.noResolve) { - let basePath = getDirectoryPath(fileName); processReferencedFiles(file, basePath); - processImportedModules(file, basePath); } + + // always process imported modules to record module name resolutions + processImportedModules(file, basePath); + if (isDefaultLib) { file.isDefaultLib = true; files.unshift(file); @@ -714,20 +707,18 @@ namespace ts { } function processImportedModules(file: SourceFile, basePath: string) { - collectExternalModuleReferences(file); + collectExternalModuleReferences(file); if (file.imports.length) { - file.resolvedModules = {}; - let oldSourceFile = oldProgram && oldProgram.getSourceFile(file.fileName); - + file.resolvedModules = {}; let moduleNames = map(file.imports, name => name.text); let resolutions = resolveModuleNamesWorker(moduleNames, file.fileName); for (let i = 0; i < file.imports.length; ++i) { let resolution = resolutions[i]; setResolvedModuleName(file, moduleNames[i], resolution); - if (resolution) { + if (resolution && !options.noResolve) { findModuleSourceFile(resolution, file.imports[i]); } - } + } } else { // no imports - drop cached module resolutions diff --git a/src/services/services.ts b/src/services/services.ts index eb275120b89..89052356447 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1842,9 +1842,8 @@ namespace ts { getCanonicalFileName: fileName => fileName, getCurrentDirectory: () => "", getNewLine: () => newLine, - // these two methods should never be called in transpile scenarios since 'noResolve' is set to 'true' - fileExists: (fileName): boolean => { throw new Error("Should never be called."); }, - readFile: (fileName): string => { throw new Error("Should never be called."); } + fileExists: (fileName): boolean => fileName === inputFileName, + readFile: (fileName): string => "" }; let program = createProgram([inputFileName], options, compilerHost);