From 197d2480bbfd57c6c5213ae12ce1e71b7d03f896 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 21 Feb 2024 23:03:11 +0000 Subject: [PATCH] fix(compile): respect compiler options for emit (#22521) `deno compile` was ignoring configuration file and thus not applying `compilerOptions` to influence the way files were emitted. --- cli/tools/compile.rs | 6 ++- tests/integration/compile_tests.rs | 29 +++++++++++++ .../compile/compiler_options/deno.json | 5 +++ .../testdata/compile/compiler_options/main.ts | 42 +++++++++++++++++++ 4 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 tests/testdata/compile/compiler_options/deno.json create mode 100644 tests/testdata/compile/compiler_options/main.ts diff --git a/cli/tools/compile.rs b/cli/tools/compile.rs index 0a5e75f9acc971..0e8df295294528 100644 --- a/cli/tools/compile.rs +++ b/cli/tools/compile.rs @@ -72,8 +72,12 @@ pub async fn compile( graph }; + let ts_config_for_emit = + cli_options.resolve_ts_config_for_emit(deno_config::TsConfigType::Emit)?; + let emit_options = + crate::args::ts_config_to_emit_options(ts_config_for_emit.ts_config); let parser = parsed_source_cache.as_capturing_parser(); - let eszip = eszip::EszipV2::from_graph(graph, &parser, Default::default())?; + let eszip = eszip::EszipV2::from_graph(graph, &parser, emit_options)?; log::info!( "{} {} to {}", diff --git a/tests/integration/compile_tests.rs b/tests/integration/compile_tests.rs index fbf924fbb82c23..b038819a7afaf1 100644 --- a/tests/integration/compile_tests.rs +++ b/tests/integration/compile_tests.rs @@ -1178,3 +1178,32 @@ fn dynamic_import_bad_data_uri() { "[WILDCARD]TypeError: Unable to decode data url.[WILDCARD]", ); } + +#[test] +fn standalone_config_file_respects_compiler_options() { + let context = TestContextBuilder::new().build(); + let dir = context.temp_dir(); + let exe = if cfg!(windows) { + dir.path().join("compiler_options.exe") + } else { + dir.path().join("compiler_options") + }; + context + .new_command() + .args_vec([ + "compile", + "--allow-read", + "--config", + "compile/compiler_options/deno.json", + "--output", + &exe.to_string_lossy(), + "./compile/compiler_options/main.ts", + ]) + .run() + .skip_output_check() + .assert_exit_code(0); + let output = context.new_command().name(&exe).run(); + + output.assert_exit_code(0); + output.assert_matches_text("[WILDCARD]C.test() called[WILDCARD]"); +} diff --git a/tests/testdata/compile/compiler_options/deno.json b/tests/testdata/compile/compiler_options/deno.json new file mode 100644 index 00000000000000..504cd646e14906 --- /dev/null +++ b/tests/testdata/compile/compiler_options/deno.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "experimentalDecorators": true + } +} diff --git a/tests/testdata/compile/compiler_options/main.ts b/tests/testdata/compile/compiler_options/main.ts new file mode 100644 index 00000000000000..40a26bbd4d1948 --- /dev/null +++ b/tests/testdata/compile/compiler_options/main.ts @@ -0,0 +1,42 @@ +// deno-lint-ignore-file +function a() { + console.log("@A evaluated"); + return function ( + target: any, + propertyKey: string, + descriptor: PropertyDescriptor, + ) { + console.log("@A called"); + const fn = descriptor.value; + descriptor.value = function () { + console.log("fn() called from @A"); + fn(); + }; + }; +} + +function b() { + console.log("@B evaluated"); + return function ( + target: any, + propertyKey: string, + descriptor: PropertyDescriptor, + ) { + console.log("@B called"); + const fn = descriptor.value; + descriptor.value = function () { + console.log("fn() called from @B"); + fn(); + }; + }; +} + +class C { + @a() + @b() + static test() { + console.log("C.test() called"); + } +} + +C.test();