diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 9ba03842cecfc..d5bd66258d9b8 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -147,6 +147,7 @@ namespace ts { type: "boolean", category: Diagnostics.Basic_Options, description: Diagnostics.Enable_incremental_compilation, + transpileOptionValue: undefined }, { name: "locale", @@ -262,7 +263,8 @@ namespace ts { affectsModuleResolution: true, showInSimplifiedHelpView: true, category: Diagnostics.Basic_Options, - description: Diagnostics.Specify_library_files_to_be_included_in_the_compilation + description: Diagnostics.Specify_library_files_to_be_included_in_the_compilation, + transpileOptionValue: undefined }, { name: "allowJs", @@ -299,6 +301,7 @@ namespace ts { showInSimplifiedHelpView: true, category: Diagnostics.Basic_Options, description: Diagnostics.Generates_corresponding_d_ts_file, + transpileOptionValue: undefined }, { name: "declarationMap", @@ -307,6 +310,7 @@ namespace ts { showInSimplifiedHelpView: true, category: Diagnostics.Basic_Options, description: Diagnostics.Generates_a_sourcemap_for_each_corresponding_d_ts_file, + transpileOptionValue: undefined }, { name: "emitDeclarationOnly", @@ -314,6 +318,7 @@ namespace ts { affectsEmit: true, category: Diagnostics.Advanced_Options, description: Diagnostics.Only_emit_d_ts_declaration_files, + transpileOptionValue: undefined }, { name: "sourceMap", @@ -332,6 +337,7 @@ namespace ts { showInSimplifiedHelpView: true, category: Diagnostics.Basic_Options, description: Diagnostics.Concatenate_and_emit_output_to_single_file, + transpileOptionValue: undefined }, { name: "outDir", @@ -359,6 +365,7 @@ namespace ts { isTSConfigOnly: true, category: Diagnostics.Basic_Options, description: Diagnostics.Enable_project_compilation, + transpileOptionValue: undefined }, { name: "tsBuildInfoFile", @@ -368,6 +375,7 @@ namespace ts { paramType: Diagnostics.FILE, category: Diagnostics.Basic_Options, description: Diagnostics.Specify_file_to_store_incremental_compilation_information, + transpileOptionValue: undefined }, { name: "removeComments", @@ -384,6 +392,7 @@ namespace ts { showInSimplifiedHelpView: true, category: Diagnostics.Basic_Options, description: Diagnostics.Do_not_emit_outputs, + transpileOptionValue: undefined }, { name: "importHelpers", @@ -403,7 +412,8 @@ namespace ts { name: "isolatedModules", type: "boolean", category: Diagnostics.Basic_Options, - description: Diagnostics.Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule + description: Diagnostics.Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule, + transpileOptionValue: true }, // Strict Type Checks @@ -540,7 +550,8 @@ namespace ts { affectsModuleResolution: true, isTSConfigOnly: true, category: Diagnostics.Module_Resolution_Options, - description: Diagnostics.A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl + description: Diagnostics.A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl, + transpileOptionValue: undefined }, { // this option can only be specified in tsconfig.json @@ -555,7 +566,8 @@ namespace ts { }, affectsModuleResolution: true, category: Diagnostics.Module_Resolution_Options, - description: Diagnostics.List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime + description: Diagnostics.List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime, + transpileOptionValue: undefined }, { name: "typeRoots", @@ -579,7 +591,8 @@ namespace ts { affectsModuleResolution: true, showInSimplifiedHelpView: true, category: Diagnostics.Module_Resolution_Options, - description: Diagnostics.Type_declaration_files_to_be_included_in_compilation + description: Diagnostics.Type_declaration_files_to_be_included_in_compilation, + transpileOptionValue: undefined }, { name: "allowSyntheticDefaultImports", @@ -680,6 +693,7 @@ namespace ts { category: Diagnostics.Advanced_Options, paramType: Diagnostics.FILE, description: Diagnostics.Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file, + transpileOptionValue: undefined }, { name: "reactNamespace", @@ -729,14 +743,20 @@ namespace ts { type: "boolean", affectsModuleResolution: true, category: Diagnostics.Advanced_Options, - description: Diagnostics.Do_not_include_the_default_library_file_lib_d_ts + description: Diagnostics.Do_not_include_the_default_library_file_lib_d_ts, + // We are not returning a sourceFile for lib file when asked by the program, + // so pass --noLib to avoid reporting a file not found error. + transpileOptionValue: true }, { name: "noResolve", type: "boolean", affectsModuleResolution: true, category: Diagnostics.Advanced_Options, - description: Diagnostics.Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files + description: Diagnostics.Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files, + // We are not doing a full typecheck, we are not resolving the whole context, + // so pass --noResolve to avoid reporting missing file errors. + transpileOptionValue: true }, { name: "stripInternal", @@ -772,6 +792,7 @@ namespace ts { affectsEmit: true, category: Diagnostics.Advanced_Options, description: Diagnostics.Do_not_emit_outputs_if_any_errors_were_reported, + transpileOptionValue: undefined }, { name: "preserveConstEnums", @@ -787,7 +808,8 @@ namespace ts { isFilePath: true, paramType: Diagnostics.DIRECTORY, category: Diagnostics.Advanced_Options, - description: Diagnostics.Output_directory_for_generated_declaration_files + description: Diagnostics.Output_directory_for_generated_declaration_files, + transpileOptionValue: undefined }, { name: "skipLibCheck", @@ -880,6 +902,10 @@ namespace ts { export const sourceFileAffectingCompilerOptions: ReadonlyArray = optionDeclarations.filter(option => !!option.affectsSourceFile || !!option.affectsModuleResolution || !!option.affectsBindDiagnostics); + /* @internal */ + export const transpileOptionValueCompilerOptions: ReadonlyArray = optionDeclarations.filter(option => + hasProperty(option, "transpileOptionValue")); + /* @internal */ export const buildOpts: CommandLineOption[] = [ ...commonOptionsWithBuild, diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 2c8a882c1640a..999a922041201 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -4930,6 +4930,7 @@ namespace ts { affectsBindDiagnostics?: true; // true if this affects binding (currently same effect as `affectsSourceFile`) affectsSemanticDiagnostics?: true; // true if option affects semantic diagnostics affectsEmit?: true; // true if the options affects emit + transpileOptionValue?: boolean | undefined; // If set this means that the option should be set to this value when transpiling } /* @internal */ diff --git a/src/services/transpile.ts b/src/services/transpile.ts index 51d1582c564c9..c739c8394f2c3 100644 --- a/src/services/transpile.ts +++ b/src/services/transpile.ts @@ -36,7 +36,9 @@ namespace ts { } } - options.isolatedModules = true; + for (const option of transpileOptionValueCompilerOptions) { + options[option.name] = option.transpileOptionValue; + } // 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; @@ -44,27 +46,6 @@ namespace ts { // Filename can be non-ts file. options.allowNonTsExtensions = true; - // We are not returning a sourceFile for lib file when asked by the program, - // so pass --noLib to avoid reporting a file not found error. - options.noLib = true; - - // Clear out other settings that would not be used in transpiling this module - options.lib = undefined; - options.types = undefined; - options.noEmit = undefined; - options.noEmitOnError = undefined; - options.paths = undefined; - options.rootDirs = undefined; - options.declaration = undefined; - options.composite = undefined; - options.declarationDir = undefined; - options.out = undefined; - options.outFile = undefined; - - // We are not doing a full typecheck, we are not resolving the whole context, - // so pass --noResolve to avoid reporting missing file errors. - options.noResolve = true; - // if jsx is specified then treat file as .tsx const inputFileName = transpileOptions.fileName || (transpileOptions.compilerOptions && transpileOptions.compilerOptions.jsx ? "module.tsx" : "module.ts"); const sourceFile = createSourceFile(inputFileName, input, options.target!); // TODO: GH#18217 diff --git a/src/testRunner/unittests/services/transpile.ts b/src/testRunner/unittests/services/transpile.ts index a86f4bdfc9e60..cd4cbe631373a 100644 --- a/src/testRunner/unittests/services/transpile.ts +++ b/src/testRunner/unittests/services/transpile.ts @@ -416,6 +416,18 @@ var x = 0;`, { options: { compilerOptions: { typeRoots: ["./folder"] }, fileName: "input.js", reportDiagnostics: true } }); + transpilesCorrectly("Supports setting 'incremental'", "x;", { + options: { compilerOptions: { incremental: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'composite'", "x;", { + options: { compilerOptions: { composite: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'tsbuildinfo'", "x;", { + options: { compilerOptions: { incremental: true, tsBuildInfoFile: "./folder/config.tsbuildinfo" }, fileName: "input.js", reportDiagnostics: true } + }); + transpilesCorrectly("Correctly serialize metadata when transpile with CommonJS option", `import * as ng from "angular2/core";` + `declare function foo(...args: any[]);` + diff --git a/tests/baselines/reference/transpile/Supports setting composite.js b/tests/baselines/reference/transpile/Supports setting composite.js new file mode 100644 index 0000000000000..8394371f9081a --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting composite.js @@ -0,0 +1,2 @@ +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting composite.oldTranspile.js b/tests/baselines/reference/transpile/Supports setting composite.oldTranspile.js new file mode 100644 index 0000000000000..8394371f9081a --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting composite.oldTranspile.js @@ -0,0 +1,2 @@ +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting incremental.js b/tests/baselines/reference/transpile/Supports setting incremental.js new file mode 100644 index 0000000000000..8394371f9081a --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting incremental.js @@ -0,0 +1,2 @@ +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting incremental.oldTranspile.js b/tests/baselines/reference/transpile/Supports setting incremental.oldTranspile.js new file mode 100644 index 0000000000000..8394371f9081a --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting incremental.oldTranspile.js @@ -0,0 +1,2 @@ +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting tsbuildinfo.js b/tests/baselines/reference/transpile/Supports setting tsbuildinfo.js new file mode 100644 index 0000000000000..8394371f9081a --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting tsbuildinfo.js @@ -0,0 +1,2 @@ +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting tsbuildinfo.oldTranspile.js b/tests/baselines/reference/transpile/Supports setting tsbuildinfo.oldTranspile.js new file mode 100644 index 0000000000000..8394371f9081a --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting tsbuildinfo.oldTranspile.js @@ -0,0 +1,2 @@ +x; +//# sourceMappingURL=input.js.map \ No newline at end of file