diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index bf69228152e..be867db68fb 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -135,36 +135,34 @@ namespace ts { return configFile.options.rootDir || getDirectoryPath(Debug.assertDefined(configFile.options.configFilePath)); } + function getOutputPathWithoutChangingExt(inputFileName: string, configFile: ParsedCommandLine, ignoreCase: boolean, outputDir: string | undefined) { + return outputDir ? + resolvePath( + outputDir, + getRelativePathFromDirectory(rootDirOfOptions(configFile), inputFileName, ignoreCase) + ) : + inputFileName; + } + /* @internal */ export function getOutputDeclarationFileName(inputFileName: string, configFile: ParsedCommandLine, ignoreCase: boolean) { Debug.assert(!fileExtensionIs(inputFileName, Extension.Dts) && hasTSFileExtension(inputFileName)); - let outputPath: string; - const declarationDir = configFile.options.declarationDir || configFile.options.outDir; - if (declarationDir) { - const relativePath = getRelativePathFromDirectory(rootDirOfOptions(configFile), inputFileName, ignoreCase); - outputPath = resolvePath(declarationDir, relativePath); - } - else { - outputPath = inputFileName; - } - return changeExtension(outputPath, Extension.Dts); + return changeExtension( + getOutputPathWithoutChangingExt(inputFileName, configFile, ignoreCase, configFile.options.declarationDir || configFile.options.outDir), + Extension.Dts + ); } function getOutputJSFileName(inputFileName: string, configFile: ParsedCommandLine, ignoreCase: boolean) { - let outputPath: string; - if (configFile.options.outDir) { - const relativePath = getRelativePathFromDirectory(rootDirOfOptions(configFile), inputFileName, ignoreCase); - outputPath = resolvePath(configFile.options.outDir, relativePath); - } - else { - outputPath = inputFileName; - } const isJsonFile = fileExtensionIs(inputFileName, Extension.Json); - const outputFileName = changeExtension(outputPath, isJsonFile ? - Extension.Json : - fileExtensionIs(inputFileName, Extension.Tsx) && configFile.options.jsx === JsxEmit.Preserve ? - Extension.Jsx : - Extension.Js); + const outputFileName = changeExtension( + getOutputPathWithoutChangingExt(inputFileName, configFile, ignoreCase, configFile.options.outDir), + isJsonFile ? + Extension.Json : + fileExtensionIs(inputFileName, Extension.Tsx) && configFile.options.jsx === JsxEmit.Preserve ? + Extension.Jsx : + Extension.Js + ); return !isJsonFile || comparePaths(inputFileName, outputFileName, Debug.assertDefined(configFile.options.configFilePath), ignoreCase) !== Comparison.EqualTo ? outputFileName : undefined; diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 757fd69b3f9..979423cdfaa 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -2741,7 +2741,7 @@ namespace ts { // List of collected files is complete; validate exhautiveness if this is a project with a file list if (options.composite) { - const rootPaths = rootNames.map(r => toPath(r)); + const rootPaths = rootNames.map(toPath); for (const file of files) { // Ignore declaration files if (file.isDeclarationFile) continue; diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index f489aceae2d..73e32241f81 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -3437,7 +3437,12 @@ namespace ts { } /** Don't call this for `--outFile`, just for `--outDir` or plain emit. `--outFile` needs additional checks. */ - export function sourceFileMayBeEmitted(sourceFile: SourceFile, options: CompilerOptions, isSourceFileFromExternalLibrary: (file: SourceFile) => boolean, getResolvedProjectReferenceToRedirect: (fileName: string) => ResolvedProjectReference | undefined) { + export function sourceFileMayBeEmitted( + sourceFile: SourceFile, + options: CompilerOptions, + isSourceFileFromExternalLibrary: (file: SourceFile) => boolean, + getResolvedProjectReferenceToRedirect: (fileName: string) => ResolvedProjectReference | undefined + ) { return !(options.noEmitForJsFiles && isSourceFileJS(sourceFile)) && !sourceFile.isDeclarationFile && !isSourceFileFromExternalLibrary(sourceFile) &&