From e732a36373f0959a0653dc51a863230a9b3d8982 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Mon, 11 Nov 2024 11:05:25 +0900 Subject: [PATCH] feat(es/codegen): Implement proper `inline_script` support (#9729) **Related issue:** - Closes https://github.com/swc-project/swc/issues/7602 --- .changeset/lemon-zebras-sort.md | 7 +++++++ crates/swc/src/config/mod.rs | 9 +++++++++ crates/swc/src/lib.rs | 6 ++++-- crates/swc/tests/fixture/issues-7xxx/7602/input/.swcrc | 9 +++++++++ crates/swc/tests/fixture/issues-7xxx/7602/input/index.js | 1 + .../swc/tests/fixture/issues-7xxx/7602/output/index.js | 1 + .../oxc/output/function-overloads.d.ts | 1 - crates/swc_ecma_codegen/src/lib.rs | 5 ++++- packages/types/index.ts | 8 ++++---- packages/types/package.json | 2 +- 10 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 .changeset/lemon-zebras-sort.md create mode 100644 crates/swc/tests/fixture/issues-7xxx/7602/input/.swcrc create mode 100644 crates/swc/tests/fixture/issues-7xxx/7602/input/index.js create mode 100644 crates/swc/tests/fixture/issues-7xxx/7602/output/index.js diff --git a/.changeset/lemon-zebras-sort.md b/.changeset/lemon-zebras-sort.md new file mode 100644 index 000000000000..1d1daae4faf7 --- /dev/null +++ b/.changeset/lemon-zebras-sort.md @@ -0,0 +1,7 @@ +--- +swc_core: patch +swc_ecma_codegen: patch +swc: patch +--- + +feat(es/codegen): Implement proper `inline_script` support diff --git a/crates/swc/src/config/mod.rs b/crates/swc/src/config/mod.rs index 27e7723cc89f..7cd4a43f82fb 100644 --- a/crates/swc/src/config/mod.rs +++ b/crates/swc/src/config/mod.rs @@ -532,6 +532,12 @@ impl Options { } }); + // inline_script defaults to true, but it's case only if minify is enabled. + // This is because minifier API is compatible with Terser, and Terser + // defaults to true, while by default swc itself doesn't enable + // inline_script by default. + let codegen_inline_script = js_minify.as_ref().map_or(false, |v| v.format.inline_script); + let preamble = if !cfg.jsc.output.preamble.is_empty() { cfg.jsc.output.preamble } else { @@ -800,6 +806,7 @@ impl Options { emit_assert_for_import_attributes: experimental .emit_assert_for_import_attributes .into_bool(), + codegen_inline_script, emit_isolated_dts: experimental.emit_isolated_dts.into_bool(), resolver, }) @@ -1110,6 +1117,7 @@ pub struct BuiltInput { pub output: JscOutputConfig, pub emit_assert_for_import_attributes: bool, + pub codegen_inline_script: bool, pub emit_isolated_dts: bool, pub resolver: Option<(FileName, Arc)>, @@ -1142,6 +1150,7 @@ where emit_source_map_columns: self.emit_source_map_columns, output: self.output, emit_assert_for_import_attributes: self.emit_assert_for_import_attributes, + codegen_inline_script: self.codegen_inline_script, emit_isolated_dts: self.emit_isolated_dts, resolver: self.resolver, } diff --git a/crates/swc/src/lib.rs b/crates/swc/src/lib.rs index bb28020beeee..bb5287ff7c02 100644 --- a/crates/swc/src/lib.rs +++ b/crates/swc/src/lib.rs @@ -909,7 +909,8 @@ impl Compiler { .with_ascii_only(opts.format.ascii_only) .with_emit_assert_for_import_attributes( opts.format.emit_assert_for_import_attributes, - ), + ) + .with_inline_script(opts.format.inline_script), output: None, }, ) @@ -1047,7 +1048,8 @@ impl Compiler { ) .with_emit_assert_for_import_attributes( config.emit_assert_for_import_attributes, - ), + ) + .with_inline_script(config.codegen_inline_script), output: if output.is_empty() { None } else { diff --git a/crates/swc/tests/fixture/issues-7xxx/7602/input/.swcrc b/crates/swc/tests/fixture/issues-7xxx/7602/input/.swcrc new file mode 100644 index 000000000000..14733d1c8482 --- /dev/null +++ b/crates/swc/tests/fixture/issues-7xxx/7602/input/.swcrc @@ -0,0 +1,9 @@ +{ + "jsc": { + "minify": { + "format": { + "inline_script": true + } + } + } +} \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-7xxx/7602/input/index.js b/crates/swc/tests/fixture/issues-7xxx/7602/input/index.js new file mode 100644 index 000000000000..8248cab3b93b --- /dev/null +++ b/crates/swc/tests/fixture/issues-7xxx/7602/input/index.js @@ -0,0 +1 @@ +"" diff --git a/crates/swc/tests/fixture/issues-7xxx/7602/output/index.js b/crates/swc/tests/fixture/issues-7xxx/7602/output/index.js new file mode 100644 index 000000000000..be7011d195ac --- /dev/null +++ b/crates/swc/tests/fixture/issues-7xxx/7602/output/index.js @@ -0,0 +1 @@ +"