diff --git a/src/compiler/program.ts b/src/compiler/program.ts index a3d6de8e2f7fc..42c5973d1fb0c 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1359,7 +1359,7 @@ namespace ts { } // If the emit is enabled make sure that every output file is unique and not overwriting any of the input files - if (!options.noEmit) { + if (!options.noEmit && !options.suppressOutputPathCheck) { const emitHost = getEmitHost(); const emitFilesSeen = createFileMap(!host.useCaseSensitiveFileNames() ? key => key.toLocaleLowerCase() : undefined); forEachExpectedEmitFile(emitHost, (emitFileNames, sourceFiles, isBundledEmit) => { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index b21b6fd59ed87..ce3dbe7f4598b 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -2438,6 +2438,8 @@ namespace ts { // Skip checking lib.d.ts to help speed up tests. /* @internal */ skipDefaultLibCheck?: boolean; + // Do not perform validation of output file name in transpile scenarios + /* @internal */ suppressOutputPathCheck?: boolean; [option: string]: string | number | boolean; } diff --git a/src/services/services.ts b/src/services/services.ts index 28f7f8488355e..37f54de5c3c6e 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1875,6 +1875,9 @@ namespace ts { options.isolatedModules = true; + // transpileModule does not write anything to disk so there is no need to verify that there are no conflicts between input and output paths. + options.suppressOutputPathCheck = true; + // Filename can be non-ts file. options.allowNonTsExtensions = true; diff --git a/tests/cases/unittests/transpile.ts b/tests/cases/unittests/transpile.ts index d9fdaeb32ecc7..6f46bb53405c5 100644 --- a/tests/cases/unittests/transpile.ts +++ b/tests/cases/unittests/transpile.ts @@ -291,5 +291,14 @@ var x = 0;`, options: { compilerOptions: { jsx: JsxEmit.React, newLine: NewLineKind.LineFeed } } }) }); + it("transpile .js files", () => { + const input = "const a = 10;"; + const output = `"use strict";\nvar a = 10;\n`; + test(input, { + expectedOutput: output, + options: { compilerOptions: { newLine: NewLineKind.LineFeed, module: ModuleKind.CommonJS }, fileName: "input.js", reportDiagnostics: true }, + expectedDiagnosticCodes: [] + }); + }) }); }