From 64e6b7669b1c4ec6d9627e7484a0608bc4f076c8 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Mon, 2 Jul 2018 10:15:13 -0700 Subject: [PATCH 1/4] .d.ts files don't have outputs --- src/compiler/tsbuild.ts | 3 ++- tests/projects/sample1/core/some_decl.d.ts | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 tests/projects/sample1/core/some_decl.d.ts diff --git a/src/compiler/tsbuild.ts b/src/compiler/tsbuild.ts index 498b9eb6432..d8eac339b4b 100644 --- a/src/compiler/tsbuild.ts +++ b/src/compiler/tsbuild.ts @@ -295,7 +295,8 @@ namespace ts { } function getOutputFileNames(inputFileName: string, configFile: ParsedCommandLine): ReadonlyArray { - if (configFile.options.outFile) { + // outFile is handled elsewhere; .d.ts files don't generate outputs + if (configFile.options.outFile || fileExtensionIs(inputFileName, Extension.Dts)) { return emptyArray; } diff --git a/tests/projects/sample1/core/some_decl.d.ts b/tests/projects/sample1/core/some_decl.d.ts new file mode 100644 index 00000000000..2a9cf55cf28 --- /dev/null +++ b/tests/projects/sample1/core/some_decl.d.ts @@ -0,0 +1 @@ +declare const dts: any; From 55a66c5b5ed696b1973553418dcf5ecb64362387 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Mon, 2 Jul 2018 10:56:55 -0700 Subject: [PATCH 2/4] .json also doesn't produce outputs --- src/compiler/tsbuild.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/compiler/tsbuild.ts b/src/compiler/tsbuild.ts index d8eac339b4b..ae96bb5f0dd 100644 --- a/src/compiler/tsbuild.ts +++ b/src/compiler/tsbuild.ts @@ -294,9 +294,10 @@ namespace ts { return changeExtension(outputPath, (fileExtensionIs(inputFileName, Extension.Tsx) && configFile.options.jsx === JsxEmit.Preserve) ? Extension.Jsx : Extension.Js); } + const extensionsWithNoOutput: ReadonlyArray = [Extension.Dts, Extension.Json]; function getOutputFileNames(inputFileName: string, configFile: ParsedCommandLine): ReadonlyArray { // outFile is handled elsewhere; .d.ts files don't generate outputs - if (configFile.options.outFile || fileExtensionIs(inputFileName, Extension.Dts)) { + if (configFile.options.outFile || fileExtensionIsOneOf(inputFileName, extensionsWithNoOutput)) { return emptyArray; } From e3710e137f5db1866f80698c2fe65d3b91cd975a Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Mon, 2 Jul 2018 12:40:49 -0700 Subject: [PATCH 3/4] Add --out --- src/compiler/tsbuild.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/tsbuild.ts b/src/compiler/tsbuild.ts index ae96bb5f0dd..fd677941079 100644 --- a/src/compiler/tsbuild.ts +++ b/src/compiler/tsbuild.ts @@ -297,7 +297,7 @@ namespace ts { const extensionsWithNoOutput: ReadonlyArray = [Extension.Dts, Extension.Json]; function getOutputFileNames(inputFileName: string, configFile: ParsedCommandLine): ReadonlyArray { // outFile is handled elsewhere; .d.ts files don't generate outputs - if (configFile.options.outFile || fileExtensionIsOneOf(inputFileName, extensionsWithNoOutput)) { + if (configFile.options.outFile || configFile.options.out || fileExtensionIsOneOf(inputFileName, extensionsWithNoOutput)) { return emptyArray; } From 2527da37c616dd02c818b8d099f823a8ae063da1 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Mon, 2 Jul 2018 14:15:44 -0700 Subject: [PATCH 4/4] Handle JSON extension correctly --- src/compiler/tsbuild.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/compiler/tsbuild.ts b/src/compiler/tsbuild.ts index fd677941079..45587447962 100644 --- a/src/compiler/tsbuild.ts +++ b/src/compiler/tsbuild.ts @@ -291,19 +291,20 @@ namespace ts { function getOutputJavaScriptFileName(inputFileName: string, configFile: ParsedCommandLine) { const relativePath = getRelativePathFromDirectory(rootDirOfOptions(configFile.options, configFile.options.configFilePath!), inputFileName, /*ignoreCase*/ true); const outputPath = resolvePath(configFile.options.outDir || getDirectoryPath(configFile.options.configFilePath!), relativePath); - return changeExtension(outputPath, (fileExtensionIs(inputFileName, Extension.Tsx) && configFile.options.jsx === JsxEmit.Preserve) ? Extension.Jsx : Extension.Js); + const newExtension = fileExtensionIs(inputFileName, Extension.Json) ? Extension.Json : + fileExtensionIs(inputFileName, Extension.Tsx) && configFile.options.jsx === JsxEmit.Preserve ? Extension.Jsx : Extension.Js; + return changeExtension(outputPath, newExtension); } - const extensionsWithNoOutput: ReadonlyArray = [Extension.Dts, Extension.Json]; function getOutputFileNames(inputFileName: string, configFile: ParsedCommandLine): ReadonlyArray { // outFile is handled elsewhere; .d.ts files don't generate outputs - if (configFile.options.outFile || configFile.options.out || fileExtensionIsOneOf(inputFileName, extensionsWithNoOutput)) { + if (configFile.options.outFile || configFile.options.out || fileExtensionIs(inputFileName, Extension.Dts)) { return emptyArray; } const outputs: string[] = []; outputs.push(getOutputJavaScriptFileName(inputFileName, configFile)); - if (configFile.options.declaration) { + if (configFile.options.declaration && !fileExtensionIs(inputFileName, Extension.Json)) { const dts = getOutputDeclarationFileName(inputFileName, configFile); outputs.push(dts); if (configFile.options.declarationMap) {