diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 20f5d7a6b4876..af008f19042ed 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -90,6 +90,7 @@ import { normalizeSlashes, NumericLiteral, ObjectLiteralExpression, + OutExtensionKind, ParseConfigHost, ParsedCommandLine, parseJsonText, @@ -696,6 +697,21 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [ category: Diagnostics.Emit, description: Diagnostics.Specify_an_output_folder_for_all_emitted_files, }, + { + name: "outExtension", + type: new Map(Object.entries({ + input: OutExtensionKind.InferFromInput, + module: OutExtensionKind.InferFromModule, + js: OutExtensionKind.Js, + cjs: OutExtensionKind.Cjs, + mjs: OutExtensionKind.Mjs, + })), + defaultValueDescription: "input", + affectsEmit: true, + affectsBuildInfo: true, + category: Diagnostics.Emit, + description: Diagnostics.Specify_the_output_extension_for_all_emitted_files_input_will_determine_extension_based_on_the_extension_of_the_input_file_module_will_determine_extension_based_on_the_module_option, + }, { name: "rootDir", type: "string", diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 102be920acf0e..58676956624b0 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -6099,6 +6099,10 @@ "category": "Message", "code": 6718 }, + "Specify the output extension for all emitted files. 'input' will determine extension based on the extension of the input file. 'module' will determine extension based on the `module` option.": { + "category": "Message", + "code": 6719 + }, "Default catch clause variables as 'unknown' instead of 'any'.": { "category": "Message", "code": 6803 diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 6f34ec688fc63..c700a2fb51fa1 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -574,6 +574,14 @@ function getSourceMapFilePath(jsFilePath: string, options: CompilerOptions) { export function getOutputExtension(fileName: string, options: CompilerOptions): Extension { return fileExtensionIs(fileName, Extension.Json) ? Extension.Json : options.jsx === JsxEmit.Preserve && fileExtensionIsOneOf(fileName, [Extension.Jsx, Extension.Tsx]) ? Extension.Jsx : + options.outExtension === ts.OutExtensionKind.InferFromModule ? ( + options.module === ModuleKind.CommonJS ? Extension.Cjs : + options.module && options.module >= ModuleKind.ES2015 && options.module <= ModuleKind.ESNext ? Extension.Mjs : + Extension.Js + ) : + options.outExtension === ts.OutExtensionKind.Cjs ? Extension.Cjs : + options.outExtension === ts.OutExtensionKind.Mjs ? Extension.Mjs : + options.outExtension === ts.OutExtensionKind.Js ? Extension.Js : fileExtensionIsOneOf(fileName, [Extension.Mts, Extension.Mjs]) ? Extension.Mjs : fileExtensionIsOneOf(fileName, [Extension.Cts, Extension.Cjs]) ? Extension.Cjs : Extension.Js; diff --git a/src/compiler/types.ts b/src/compiler/types.ts index d5c402ea30784..bde78d41e0930 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -7171,6 +7171,7 @@ export interface CompilerOptions { noUncheckedIndexedAccess?: boolean; out?: string; outDir?: string; + outExtension?: OutExtensionKind; outFile?: string; paths?: MapLike; /** @@ -7709,6 +7710,14 @@ export const enum Extension { Dcts = ".d.cts", } +export const enum OutExtensionKind { + InferFromInput = 0, + InferFromModule = 1, + Js = 2, + Cjs = 3, + Mjs = 4, +} + export interface ResolvedModuleWithFailedLookupLocations { readonly resolvedModule: ResolvedModuleFull | undefined; /** @internal */ diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 56c4b49ff6df2..daef1f9266976 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -7231,6 +7231,7 @@ declare namespace ts { noUncheckedIndexedAccess?: boolean; out?: string; outDir?: string; + outExtension?: OutExtensionKind; outFile?: string; paths?: MapLike; preserveConstEnums?: boolean; @@ -7468,6 +7469,13 @@ declare namespace ts { Cts = ".cts", Dcts = ".d.cts" } + enum OutExtensionKind { + InferFromInput = 0, + InferFromModule = 1, + Js = 2, + Cjs = 3, + Mjs = 4 + } interface ResolvedModuleWithFailedLookupLocations { readonly resolvedModule: ResolvedModuleFull | undefined; } diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 2b642a091ce2e..5204f5f7c3850 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -3178,6 +3178,7 @@ declare namespace ts { noUncheckedIndexedAccess?: boolean; out?: string; outDir?: string; + outExtension?: OutExtensionKind; outFile?: string; paths?: MapLike; preserveConstEnums?: boolean; @@ -3415,6 +3416,13 @@ declare namespace ts { Cts = ".cts", Dcts = ".d.cts" } + enum OutExtensionKind { + InferFromInput = 0, + InferFromModule = 1, + Js = 2, + Cjs = 3, + Mjs = 4 + } interface ResolvedModuleWithFailedLookupLocations { readonly resolvedModule: ResolvedModuleFull | undefined; } diff --git a/tests/baselines/reference/config/initTSConfig/Default initialized TSConfig/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Default initialized TSConfig/tsconfig.json index e075f973c4d28..a5cf96903a2a1 100644 --- a/tests/baselines/reference/config/initTSConfig/Default initialized TSConfig/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Default initialized TSConfig/tsconfig.json @@ -56,6 +56,7 @@ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "outExtension": "input", /* Specify the output extension for all emitted files. 'input' will determine extension based on the extension of the input file. 'module' will determine extension based on the `module` option. */ // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --help/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --help/tsconfig.json index e075f973c4d28..a5cf96903a2a1 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --help/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --help/tsconfig.json @@ -56,6 +56,7 @@ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "outExtension": "input", /* Specify the output extension for all emitted files. 'input' will determine extension based on the extension of the input file. 'module' will determine extension based on the `module` option. */ // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --watch/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --watch/tsconfig.json index e075f973c4d28..a5cf96903a2a1 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --watch/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --watch/tsconfig.json @@ -56,6 +56,7 @@ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "outExtension": "input", /* Specify the output extension for all emitted files. 'input' will determine extension based on the extension of the input file. 'module' will determine extension based on the `module` option. */ // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with advanced options/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with advanced options/tsconfig.json index 3379ad1a3b576..a9141e2d42cf4 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with advanced options/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with advanced options/tsconfig.json @@ -56,6 +56,7 @@ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "outExtension": "input", /* Specify the output extension for all emitted files. 'input' will determine extension based on the extension of the input file. 'module' will determine extension based on the `module` option. */ // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with boolean value compiler options/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with boolean value compiler options/tsconfig.json index e9e873054b703..5700230a0d109 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with boolean value compiler options/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with boolean value compiler options/tsconfig.json @@ -56,6 +56,7 @@ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "outExtension": "input", /* Specify the output extension for all emitted files. 'input' will determine extension based on the extension of the input file. 'module' will determine extension based on the `module` option. */ // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with enum value compiler options/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with enum value compiler options/tsconfig.json index 178abdeca2791..b399433a3ecaf 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with enum value compiler options/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with enum value compiler options/tsconfig.json @@ -56,6 +56,7 @@ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "outExtension": "input", /* Specify the output extension for all emitted files. 'input' will determine extension based on the extension of the input file. 'module' will determine extension based on the `module` option. */ // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with files options/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with files options/tsconfig.json index 6136a0e0ce953..fe50bec66c1b5 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with files options/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with files options/tsconfig.json @@ -56,6 +56,7 @@ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "outExtension": "input", /* Specify the output extension for all emitted files. 'input' will determine extension based on the extension of the input file. 'module' will determine extension based on the `module` option. */ // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option value/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option value/tsconfig.json index 84bdc4354ee70..eba27cc54dff6 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option value/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option value/tsconfig.json @@ -56,6 +56,7 @@ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "outExtension": "input", /* Specify the output extension for all emitted files. 'input' will determine extension based on the extension of the input file. 'module' will determine extension based on the `module` option. */ // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option/tsconfig.json index e075f973c4d28..a5cf96903a2a1 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option/tsconfig.json @@ -56,6 +56,7 @@ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "outExtension": "input", /* Specify the output extension for all emitted files. 'input' will determine extension based on the extension of the input file. 'module' will determine extension based on the `module` option. */ // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options with enum value/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options with enum value/tsconfig.json index 8b051d2b3dd93..3919e292ffe38 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options with enum value/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options with enum value/tsconfig.json @@ -56,6 +56,7 @@ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "outExtension": "input", /* Specify the output extension for all emitted files. 'input' will determine extension based on the extension of the input file. 'module' will determine extension based on the `module` option. */ // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options/tsconfig.json index c0c664e0d7c8a..d438d0fbfdb37 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options/tsconfig.json @@ -56,6 +56,7 @@ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "outExtension": "input", /* Specify the output extension for all emitted files. 'input' will determine extension based on the extension of the input file. 'module' will determine extension based on the `module` option. */ // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ diff --git a/tests/baselines/reference/config/showConfig/Shows tsconfig for single option/outExtension/tsconfig.json b/tests/baselines/reference/config/showConfig/Shows tsconfig for single option/outExtension/tsconfig.json new file mode 100644 index 0000000000000..dda74dd5e96cf --- /dev/null +++ b/tests/baselines/reference/config/showConfig/Shows tsconfig for single option/outExtension/tsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "outExtension": "input" + } +} diff --git a/tests/baselines/reference/outExtensionCjs.js b/tests/baselines/reference/outExtensionCjs.js new file mode 100644 index 0000000000000..2c10f7fcc9526 --- /dev/null +++ b/tests/baselines/reference/outExtensionCjs.js @@ -0,0 +1,51 @@ +//// [tests/cases/compiler/outExtensionCjs.ts] //// + +//// [input-1.ts] +export const ts = "foo"; + +//// [input-2.mts] +export const mts = "foo"; + +//// [input-3.cts] +export const cts = "foo"; + +//// [input-4.js] +export const js = "foo"; + +//// [input-5.mjs] +export const mjs = "foo"; + +//// [input-6.cjs] +export const cjs = "foo"; + + +//// [input-1.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ts = void 0; +exports.ts = "foo"; +//// [input-2.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mts = void 0; +exports.mts = "foo"; +//// [input-3.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.cts = void 0; +exports.cts = "foo"; +//// [input-4.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.js = void 0; +exports.js = "foo"; +//// [input-5.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mjs = void 0; +exports.mjs = "foo"; +//// [input-6.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.cjs = void 0; +exports.cjs = "foo"; diff --git a/tests/baselines/reference/outExtensionCjs.symbols b/tests/baselines/reference/outExtensionCjs.symbols new file mode 100644 index 0000000000000..163ecb5e7627f --- /dev/null +++ b/tests/baselines/reference/outExtensionCjs.symbols @@ -0,0 +1,24 @@ +=== tests/cases/compiler/input-1.ts === +export const ts = "foo"; +>ts : Symbol(ts, Decl(input-1.ts, 0, 12)) + +=== tests/cases/compiler/input-2.mts === +export const mts = "foo"; +>mts : Symbol(mts, Decl(input-2.mts, 0, 12)) + +=== tests/cases/compiler/input-3.cts === +export const cts = "foo"; +>cts : Symbol(cts, Decl(input-3.cts, 0, 12)) + +=== tests/cases/compiler/input-4.js === +export const js = "foo"; +>js : Symbol(js, Decl(input-4.js, 0, 12)) + +=== tests/cases/compiler/input-5.mjs === +export const mjs = "foo"; +>mjs : Symbol(mjs, Decl(input-5.mjs, 0, 12)) + +=== tests/cases/compiler/input-6.cjs === +export const cjs = "foo"; +>cjs : Symbol(cjs, Decl(input-6.cjs, 0, 12)) + diff --git a/tests/baselines/reference/outExtensionCjs.types b/tests/baselines/reference/outExtensionCjs.types new file mode 100644 index 0000000000000..4686cbb6905f3 --- /dev/null +++ b/tests/baselines/reference/outExtensionCjs.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/input-1.ts === +export const ts = "foo"; +>ts : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-2.mts === +export const mts = "foo"; +>mts : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-3.cts === +export const cts = "foo"; +>cts : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-4.js === +export const js = "foo"; +>js : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-5.mjs === +export const mjs = "foo"; +>mjs : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-6.cjs === +export const cjs = "foo"; +>cjs : "foo" +>"foo" : "foo" + diff --git a/tests/baselines/reference/outExtensionInferFromInput.js b/tests/baselines/reference/outExtensionInferFromInput.js new file mode 100644 index 0000000000000..23b5a47d9592c --- /dev/null +++ b/tests/baselines/reference/outExtensionInferFromInput.js @@ -0,0 +1,51 @@ +//// [tests/cases/compiler/outExtensionInferFromInput.ts] //// + +//// [input-1.ts] +export const ts = "foo"; + +//// [input-2.mts] +export const mts = "foo"; + +//// [input-3.cts] +export const cts = "foo"; + +//// [input-4.js] +export const js = "foo"; + +//// [input-5.mjs] +export const mjs = "foo"; + +//// [input-6.cjs] +export const cjs = "foo"; + + +//// [input-1.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ts = void 0; +exports.ts = "foo"; +//// [input-2.mjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mts = void 0; +exports.mts = "foo"; +//// [input-3.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.cts = void 0; +exports.cts = "foo"; +//// [input-4.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.js = void 0; +exports.js = "foo"; +//// [input-5.mjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mjs = void 0; +exports.mjs = "foo"; +//// [input-6.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.cjs = void 0; +exports.cjs = "foo"; diff --git a/tests/baselines/reference/outExtensionInferFromInput.symbols b/tests/baselines/reference/outExtensionInferFromInput.symbols new file mode 100644 index 0000000000000..163ecb5e7627f --- /dev/null +++ b/tests/baselines/reference/outExtensionInferFromInput.symbols @@ -0,0 +1,24 @@ +=== tests/cases/compiler/input-1.ts === +export const ts = "foo"; +>ts : Symbol(ts, Decl(input-1.ts, 0, 12)) + +=== tests/cases/compiler/input-2.mts === +export const mts = "foo"; +>mts : Symbol(mts, Decl(input-2.mts, 0, 12)) + +=== tests/cases/compiler/input-3.cts === +export const cts = "foo"; +>cts : Symbol(cts, Decl(input-3.cts, 0, 12)) + +=== tests/cases/compiler/input-4.js === +export const js = "foo"; +>js : Symbol(js, Decl(input-4.js, 0, 12)) + +=== tests/cases/compiler/input-5.mjs === +export const mjs = "foo"; +>mjs : Symbol(mjs, Decl(input-5.mjs, 0, 12)) + +=== tests/cases/compiler/input-6.cjs === +export const cjs = "foo"; +>cjs : Symbol(cjs, Decl(input-6.cjs, 0, 12)) + diff --git a/tests/baselines/reference/outExtensionInferFromInput.types b/tests/baselines/reference/outExtensionInferFromInput.types new file mode 100644 index 0000000000000..4686cbb6905f3 --- /dev/null +++ b/tests/baselines/reference/outExtensionInferFromInput.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/input-1.ts === +export const ts = "foo"; +>ts : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-2.mts === +export const mts = "foo"; +>mts : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-3.cts === +export const cts = "foo"; +>cts : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-4.js === +export const js = "foo"; +>js : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-5.mjs === +export const mjs = "foo"; +>mjs : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-6.cjs === +export const cjs = "foo"; +>cjs : "foo" +>"foo" : "foo" + diff --git a/tests/baselines/reference/outExtensionInferFromModuleCJS.js b/tests/baselines/reference/outExtensionInferFromModuleCJS.js new file mode 100644 index 0000000000000..abaf2fe3b7bb2 --- /dev/null +++ b/tests/baselines/reference/outExtensionInferFromModuleCJS.js @@ -0,0 +1,51 @@ +//// [tests/cases/compiler/outExtensionInferFromModuleCJS.ts] //// + +//// [input-1.ts] +export const ts = "foo"; + +//// [input-2.mts] +export const mts = "foo"; + +//// [input-3.cts] +export const cts = "foo"; + +//// [input-4.js] +export const js = "foo"; + +//// [input-5.mjs] +export const mjs = "foo"; + +//// [input-6.cjs] +export const cjs = "foo"; + + +//// [input-1.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ts = void 0; +exports.ts = "foo"; +//// [input-2.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mts = void 0; +exports.mts = "foo"; +//// [input-3.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.cts = void 0; +exports.cts = "foo"; +//// [input-4.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.js = void 0; +exports.js = "foo"; +//// [input-5.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mjs = void 0; +exports.mjs = "foo"; +//// [input-6.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.cjs = void 0; +exports.cjs = "foo"; diff --git a/tests/baselines/reference/outExtensionInferFromModuleCJS.symbols b/tests/baselines/reference/outExtensionInferFromModuleCJS.symbols new file mode 100644 index 0000000000000..163ecb5e7627f --- /dev/null +++ b/tests/baselines/reference/outExtensionInferFromModuleCJS.symbols @@ -0,0 +1,24 @@ +=== tests/cases/compiler/input-1.ts === +export const ts = "foo"; +>ts : Symbol(ts, Decl(input-1.ts, 0, 12)) + +=== tests/cases/compiler/input-2.mts === +export const mts = "foo"; +>mts : Symbol(mts, Decl(input-2.mts, 0, 12)) + +=== tests/cases/compiler/input-3.cts === +export const cts = "foo"; +>cts : Symbol(cts, Decl(input-3.cts, 0, 12)) + +=== tests/cases/compiler/input-4.js === +export const js = "foo"; +>js : Symbol(js, Decl(input-4.js, 0, 12)) + +=== tests/cases/compiler/input-5.mjs === +export const mjs = "foo"; +>mjs : Symbol(mjs, Decl(input-5.mjs, 0, 12)) + +=== tests/cases/compiler/input-6.cjs === +export const cjs = "foo"; +>cjs : Symbol(cjs, Decl(input-6.cjs, 0, 12)) + diff --git a/tests/baselines/reference/outExtensionInferFromModuleCJS.types b/tests/baselines/reference/outExtensionInferFromModuleCJS.types new file mode 100644 index 0000000000000..4686cbb6905f3 --- /dev/null +++ b/tests/baselines/reference/outExtensionInferFromModuleCJS.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/input-1.ts === +export const ts = "foo"; +>ts : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-2.mts === +export const mts = "foo"; +>mts : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-3.cts === +export const cts = "foo"; +>cts : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-4.js === +export const js = "foo"; +>js : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-5.mjs === +export const mjs = "foo"; +>mjs : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-6.cjs === +export const cjs = "foo"; +>cjs : "foo" +>"foo" : "foo" + diff --git a/tests/baselines/reference/outExtensionInferFromModuleESM.js b/tests/baselines/reference/outExtensionInferFromModuleESM.js new file mode 100644 index 0000000000000..e0e60f8cff60c --- /dev/null +++ b/tests/baselines/reference/outExtensionInferFromModuleESM.js @@ -0,0 +1,33 @@ +//// [tests/cases/compiler/outExtensionInferFromModuleESM.ts] //// + +//// [input-1.ts] +export const ts = "foo"; + +//// [input-2.mts] +export const mts = "foo"; + +//// [input-3.cts] +export const cts = "foo"; + +//// [input-4.js] +export const js = "foo"; + +//// [input-5.mjs] +export const mjs = "foo"; + +//// [input-6.cjs] +export const cjs = "foo"; + + +//// [input-1.mjs] +export var ts = "foo"; +//// [input-2.mjs] +export var mts = "foo"; +//// [input-3.mjs] +export var cts = "foo"; +//// [input-4.mjs] +export var js = "foo"; +//// [input-5.mjs] +export var mjs = "foo"; +//// [input-6.mjs] +export var cjs = "foo"; diff --git a/tests/baselines/reference/outExtensionInferFromModuleESM.symbols b/tests/baselines/reference/outExtensionInferFromModuleESM.symbols new file mode 100644 index 0000000000000..163ecb5e7627f --- /dev/null +++ b/tests/baselines/reference/outExtensionInferFromModuleESM.symbols @@ -0,0 +1,24 @@ +=== tests/cases/compiler/input-1.ts === +export const ts = "foo"; +>ts : Symbol(ts, Decl(input-1.ts, 0, 12)) + +=== tests/cases/compiler/input-2.mts === +export const mts = "foo"; +>mts : Symbol(mts, Decl(input-2.mts, 0, 12)) + +=== tests/cases/compiler/input-3.cts === +export const cts = "foo"; +>cts : Symbol(cts, Decl(input-3.cts, 0, 12)) + +=== tests/cases/compiler/input-4.js === +export const js = "foo"; +>js : Symbol(js, Decl(input-4.js, 0, 12)) + +=== tests/cases/compiler/input-5.mjs === +export const mjs = "foo"; +>mjs : Symbol(mjs, Decl(input-5.mjs, 0, 12)) + +=== tests/cases/compiler/input-6.cjs === +export const cjs = "foo"; +>cjs : Symbol(cjs, Decl(input-6.cjs, 0, 12)) + diff --git a/tests/baselines/reference/outExtensionInferFromModuleESM.types b/tests/baselines/reference/outExtensionInferFromModuleESM.types new file mode 100644 index 0000000000000..4686cbb6905f3 --- /dev/null +++ b/tests/baselines/reference/outExtensionInferFromModuleESM.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/input-1.ts === +export const ts = "foo"; +>ts : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-2.mts === +export const mts = "foo"; +>mts : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-3.cts === +export const cts = "foo"; +>cts : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-4.js === +export const js = "foo"; +>js : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-5.mjs === +export const mjs = "foo"; +>mjs : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-6.cjs === +export const cjs = "foo"; +>cjs : "foo" +>"foo" : "foo" + diff --git a/tests/baselines/reference/outExtensionMjs.js b/tests/baselines/reference/outExtensionMjs.js new file mode 100644 index 0000000000000..fbae73685373b --- /dev/null +++ b/tests/baselines/reference/outExtensionMjs.js @@ -0,0 +1,51 @@ +//// [tests/cases/compiler/outExtensionMjs.ts] //// + +//// [input-1.ts] +export const ts = "foo"; + +//// [input-2.mts] +export const mts = "foo"; + +//// [input-3.cts] +export const cts = "foo"; + +//// [input-4.js] +export const js = "foo"; + +//// [input-5.mjs] +export const mjs = "foo"; + +//// [input-6.cjs] +export const cjs = "foo"; + + +//// [input-1.mjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ts = void 0; +exports.ts = "foo"; +//// [input-2.mjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mts = void 0; +exports.mts = "foo"; +//// [input-3.mjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.cts = void 0; +exports.cts = "foo"; +//// [input-4.mjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.js = void 0; +exports.js = "foo"; +//// [input-5.mjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mjs = void 0; +exports.mjs = "foo"; +//// [input-6.mjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.cjs = void 0; +exports.cjs = "foo"; diff --git a/tests/baselines/reference/outExtensionMjs.symbols b/tests/baselines/reference/outExtensionMjs.symbols new file mode 100644 index 0000000000000..163ecb5e7627f --- /dev/null +++ b/tests/baselines/reference/outExtensionMjs.symbols @@ -0,0 +1,24 @@ +=== tests/cases/compiler/input-1.ts === +export const ts = "foo"; +>ts : Symbol(ts, Decl(input-1.ts, 0, 12)) + +=== tests/cases/compiler/input-2.mts === +export const mts = "foo"; +>mts : Symbol(mts, Decl(input-2.mts, 0, 12)) + +=== tests/cases/compiler/input-3.cts === +export const cts = "foo"; +>cts : Symbol(cts, Decl(input-3.cts, 0, 12)) + +=== tests/cases/compiler/input-4.js === +export const js = "foo"; +>js : Symbol(js, Decl(input-4.js, 0, 12)) + +=== tests/cases/compiler/input-5.mjs === +export const mjs = "foo"; +>mjs : Symbol(mjs, Decl(input-5.mjs, 0, 12)) + +=== tests/cases/compiler/input-6.cjs === +export const cjs = "foo"; +>cjs : Symbol(cjs, Decl(input-6.cjs, 0, 12)) + diff --git a/tests/baselines/reference/outExtensionMjs.types b/tests/baselines/reference/outExtensionMjs.types new file mode 100644 index 0000000000000..4686cbb6905f3 --- /dev/null +++ b/tests/baselines/reference/outExtensionMjs.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/input-1.ts === +export const ts = "foo"; +>ts : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-2.mts === +export const mts = "foo"; +>mts : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-3.cts === +export const cts = "foo"; +>cts : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-4.js === +export const js = "foo"; +>js : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-5.mjs === +export const mjs = "foo"; +>mjs : "foo" +>"foo" : "foo" + +=== tests/cases/compiler/input-6.cjs === +export const cjs = "foo"; +>cjs : "foo" +>"foo" : "foo" + diff --git a/tests/cases/compiler/outExtensionCjs.ts b/tests/cases/compiler/outExtensionCjs.ts new file mode 100644 index 0000000000000..b342df405d05b --- /dev/null +++ b/tests/cases/compiler/outExtensionCjs.ts @@ -0,0 +1,21 @@ +// @allowJs: true +// @outExtension: cjs +// @outDir: dist + +// @filename: input-1.ts +export const ts = "foo"; + +// @filename: input-2.mts +export const mts = "foo"; + +// @filename: input-3.cts +export const cts = "foo"; + +// @filename: input-4.js +export const js = "foo"; + +// @filename: input-5.mjs +export const mjs = "foo"; + +// @filename: input-6.cjs +export const cjs = "foo"; diff --git a/tests/cases/compiler/outExtensionInferFromInput.ts b/tests/cases/compiler/outExtensionInferFromInput.ts new file mode 100644 index 0000000000000..726e0f37fe24c --- /dev/null +++ b/tests/cases/compiler/outExtensionInferFromInput.ts @@ -0,0 +1,21 @@ +// @allowJs: true +// @outExtension: input +// @outDir: dist + +// @filename: input-1.ts +export const ts = "foo"; + +// @filename: input-2.mts +export const mts = "foo"; + +// @filename: input-3.cts +export const cts = "foo"; + +// @filename: input-4.js +export const js = "foo"; + +// @filename: input-5.mjs +export const mjs = "foo"; + +// @filename: input-6.cjs +export const cjs = "foo"; diff --git a/tests/cases/compiler/outExtensionInferFromModuleCJS.ts b/tests/cases/compiler/outExtensionInferFromModuleCJS.ts new file mode 100644 index 0000000000000..cad1895b78e63 --- /dev/null +++ b/tests/cases/compiler/outExtensionInferFromModuleCJS.ts @@ -0,0 +1,22 @@ +// @module: commonjs +// @allowJs: true +// @outExtension: module +// @outDir: dist + +// @filename: input-1.ts +export const ts = "foo"; + +// @filename: input-2.mts +export const mts = "foo"; + +// @filename: input-3.cts +export const cts = "foo"; + +// @filename: input-4.js +export const js = "foo"; + +// @filename: input-5.mjs +export const mjs = "foo"; + +// @filename: input-6.cjs +export const cjs = "foo"; diff --git a/tests/cases/compiler/outExtensionInferFromModuleESM.ts b/tests/cases/compiler/outExtensionInferFromModuleESM.ts new file mode 100644 index 0000000000000..9cab1b1449794 --- /dev/null +++ b/tests/cases/compiler/outExtensionInferFromModuleESM.ts @@ -0,0 +1,22 @@ +// @module: esnext +// @allowJs: true +// @outExtension: module +// @outDir: dist + +// @filename: input-1.ts +export const ts = "foo"; + +// @filename: input-2.mts +export const mts = "foo"; + +// @filename: input-3.cts +export const cts = "foo"; + +// @filename: input-4.js +export const js = "foo"; + +// @filename: input-5.mjs +export const mjs = "foo"; + +// @filename: input-6.cjs +export const cjs = "foo"; diff --git a/tests/cases/compiler/outExtensionMjs.ts b/tests/cases/compiler/outExtensionMjs.ts new file mode 100644 index 0000000000000..16a08eb789c54 --- /dev/null +++ b/tests/cases/compiler/outExtensionMjs.ts @@ -0,0 +1,21 @@ +// @allowJs: true +// @outExtension: mjs +// @outDir: dist + +// @filename: input-1.ts +export const ts = "foo"; + +// @filename: input-2.mts +export const mts = "foo"; + +// @filename: input-3.cts +export const cts = "foo"; + +// @filename: input-4.js +export const js = "foo"; + +// @filename: input-5.mjs +export const mjs = "foo"; + +// @filename: input-6.cjs +export const cjs = "foo";