From 89464383a15bc06e1210e18c04cd68e116cdabff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 10 Apr 2025 14:24:57 +0900 Subject: [PATCH 1/9] if let Some(source_map_url --- crates/swc_compiler_base/src/lib.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/crates/swc_compiler_base/src/lib.rs b/crates/swc_compiler_base/src/lib.rs index 9f60bbeb55d2..f505ad9723d7 100644 --- a/crates/swc_compiler_base/src/lib.rs +++ b/crates/swc_compiler_base/src/lib.rs @@ -250,7 +250,13 @@ where map.unwrap() .to_writer(&mut buf) .context("failed to write source map")?; - let map = String::from_utf8(buf).context("source map is not utf-8")?; + let mut map = String::from_utf8(buf).context("source map is not utf-8")?; + + if let Some(source_map_url) = source_map_url { + map.push_str("\n//# sourceMappingURL="); + map.push_str(source_map_url); + } + (src, Some(map)) } else { (src, None) From b12476a60d4b6ea2613d67ab5c93773eb73ad4e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 10 Apr 2025 14:25:22 +0900 Subject: [PATCH 2/9] source_map_url --- crates/swc_compiler_base/src/lib.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/swc_compiler_base/src/lib.rs b/crates/swc_compiler_base/src/lib.rs index f505ad9723d7..92e1c1aa1c82 100644 --- a/crates/swc_compiler_base/src/lib.rs +++ b/crates/swc_compiler_base/src/lib.rs @@ -119,6 +119,7 @@ pub struct PrintArgs<'a> { pub preamble: &'a str, pub codegen_config: swc_ecma_codegen::Config, pub output: Option>, + pub source_map_url: Option<&'a str>, } impl Default for PrintArgs<'_> { @@ -138,6 +139,7 @@ impl Default for PrintArgs<'_> { preamble: "", codegen_config: Default::default(), output: None, + source_map_url: None, } } } @@ -168,6 +170,7 @@ pub fn print( preamble, codegen_config, output, + source_map_url, }: PrintArgs, ) -> Result where From e0000709e820ceb2e9f1989efb7447d0f65f4442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 10 Apr 2025 16:07:10 +0900 Subject: [PATCH 3/9] optiopn --- crates/swc/src/config/mod.rs | 5 ++++- crates/swc/src/lib.rs | 10 ++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/crates/swc/src/config/mod.rs b/crates/swc/src/config/mod.rs index 3346fc20747e..81ff357df465 100644 --- a/crates/swc/src/config/mod.rs +++ b/crates/swc/src/config/mod.rs @@ -767,7 +767,7 @@ impl Options { output: JscOutputConfig { charset, preamble, - preserve_annotations: cfg.jsc.output.preserve_annotations, + ..cfg.jsc.output }, emit_assert_for_import_attributes: experimental .emit_assert_for_import_attributes @@ -1184,6 +1184,9 @@ pub struct JscOutputConfig { #[serde(default)] pub preserve_annotations: BoolConfig, + + #[serde(default)] + pub source_map_url: Option, } #[derive(Debug, Clone, Serialize, Deserialize, Default)] diff --git a/crates/swc/src/lib.rs b/crates/swc/src/lib.rs index c2ba72f855c3..9403cf9ac8ea 100644 --- a/crates/swc/src/lib.rs +++ b/crates/swc/src/lib.rs @@ -760,18 +760,18 @@ impl Compiler { let target = opts.ecma.clone().into(); - let (source_map, orig) = opts + let (source_map, orig, source_map_url) = opts .source_map .as_ref() .map(|obj| -> Result<_, Error> { let orig = obj.content.as_ref().map(|s| s.to_sourcemap()).transpose()?; - Ok((SourceMapsConfig::Bool(true), orig)) + Ok((SourceMapsConfig::Bool(true), orig, obj.url.as_deref())) }) .unwrap_as_option(|v| { Some(Ok(match v { - Some(true) => (SourceMapsConfig::Bool(true), None), - _ => (SourceMapsConfig::Bool(false), None), + Some(true) => (SourceMapsConfig::Bool(true), None, None), + _ => (SourceMapsConfig::Bool(false), None, None), })) }) .unwrap()?; @@ -924,6 +924,7 @@ impl Compiler { .reduce_escaped_newline, ), output: None, + source_map_url, }, ); @@ -1073,6 +1074,7 @@ impl Compiler { } else { Some(output) }, + source_map_url: config.output.source_map_url.as_deref(), }, ) }) From 948bd878eebf0c1435877b6aac872bf122d63ecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 10 Apr 2025 16:07:56 +0900 Subject: [PATCH 4/9] Create forty-tables-obey.md --- .changeset/forty-tables-obey.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/forty-tables-obey.md diff --git a/.changeset/forty-tables-obey.md b/.changeset/forty-tables-obey.md new file mode 100644 index 000000000000..b639339a752a --- /dev/null +++ b/.changeset/forty-tables-obey.md @@ -0,0 +1,5 @@ +--- +swc_compiler_base: major +--- + +feat(es/codegen): Support `sourceMap.url` option of `terser` From 9fb564497f9f7f53f1908d19297433be79d1da33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 10 Apr 2025 16:10:03 +0900 Subject: [PATCH 5/9] Add a test --- crates/swc/tests/fixture/issues-10xxx/10346/input/.swcrc | 6 ++++++ crates/swc/tests/fixture/issues-10xxx/10346/input/input.js | 2 ++ 2 files changed, 8 insertions(+) create mode 100644 crates/swc/tests/fixture/issues-10xxx/10346/input/.swcrc create mode 100644 crates/swc/tests/fixture/issues-10xxx/10346/input/input.js diff --git a/crates/swc/tests/fixture/issues-10xxx/10346/input/.swcrc b/crates/swc/tests/fixture/issues-10xxx/10346/input/.swcrc new file mode 100644 index 000000000000..64d9d9b9e62a --- /dev/null +++ b/crates/swc/tests/fixture/issues-10xxx/10346/input/.swcrc @@ -0,0 +1,6 @@ +{ + "sourceMaps": true, + "jsc": { + "sourceMapUrl": "input.js.map" + } +} \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-10xxx/10346/input/input.js b/crates/swc/tests/fixture/issues-10xxx/10346/input/input.js new file mode 100644 index 000000000000..83ed99800b09 --- /dev/null +++ b/crates/swc/tests/fixture/issues-10xxx/10346/input/input.js @@ -0,0 +1,2 @@ + +export const foo = 1; \ No newline at end of file From 38133c9f51d53b5c9e6c6448d544922ea125bcd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 10 Apr 2025 16:11:03 +0900 Subject: [PATCH 6/9] fix --- crates/swc_compiler_base/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/swc_compiler_base/src/lib.rs b/crates/swc_compiler_base/src/lib.rs index 92e1c1aa1c82..4e793c10f586 100644 --- a/crates/swc_compiler_base/src/lib.rs +++ b/crates/swc_compiler_base/src/lib.rs @@ -253,11 +253,11 @@ where map.unwrap() .to_writer(&mut buf) .context("failed to write source map")?; - let mut map = String::from_utf8(buf).context("source map is not utf-8")?; + let map = String::from_utf8(buf).context("source map is not utf-8")?; if let Some(source_map_url) = source_map_url { - map.push_str("\n//# sourceMappingURL="); - map.push_str(source_map_url); + src.push_str("\n//# sourceMappingURL="); + src.push_str(source_map_url); } (src, Some(map)) From be23f1fff08a5a57c7f720ff4dfefdc87ee33a76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 10 Apr 2025 16:11:21 +0900 Subject: [PATCH 7/9] fix --- crates/swc_compiler_base/src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/swc_compiler_base/src/lib.rs b/crates/swc_compiler_base/src/lib.rs index 4e793c10f586..5e133f0f765e 100644 --- a/crates/swc_compiler_base/src/lib.rs +++ b/crates/swc_compiler_base/src/lib.rs @@ -180,7 +180,7 @@ where let mut src_map_buf = Vec::new(); - let src = { + let mut src = { let mut buf = std::vec::Vec::new(); { let mut w = swc_ecma_codegen::text_writer::JsWriter::new( @@ -266,7 +266,6 @@ where } } SourceMapsConfig::Str(_) => { - let mut src = src; let mut buf = std::vec::Vec::new(); map.unwrap() From 1c50b97c82253efe817cc7ddbdddce08e6de1bbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 10 Apr 2025 16:11:53 +0900 Subject: [PATCH 8/9] Fix .swcrc --- crates/swc/tests/fixture/issues-10xxx/10346/input/.swcrc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/swc/tests/fixture/issues-10xxx/10346/input/.swcrc b/crates/swc/tests/fixture/issues-10xxx/10346/input/.swcrc index 64d9d9b9e62a..23c819d48ffe 100644 --- a/crates/swc/tests/fixture/issues-10xxx/10346/input/.swcrc +++ b/crates/swc/tests/fixture/issues-10xxx/10346/input/.swcrc @@ -1,6 +1,8 @@ { "sourceMaps": true, "jsc": { - "sourceMapUrl": "input.js.map" + "output": { + "sourceMapUrl": "input.js.map" + } } } \ No newline at end of file From 0382be060784cefb2096051e4032e382400c2a72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 10 Apr 2025 16:12:09 +0900 Subject: [PATCH 9/9] sourceMappingUrl --- .../fixture/issues-10xxx/10346/output/input.js | 3 +++ .../fixture/issues-10xxx/10346/output/input.map | 13 +++++++++++++ .../tests/minify/issue-7475/issue-8372/1/output.js | 1 + 3 files changed, 17 insertions(+) create mode 100644 crates/swc/tests/fixture/issues-10xxx/10346/output/input.js create mode 100644 crates/swc/tests/fixture/issues-10xxx/10346/output/input.map diff --git a/crates/swc/tests/fixture/issues-10xxx/10346/output/input.js b/crates/swc/tests/fixture/issues-10xxx/10346/output/input.js new file mode 100644 index 000000000000..af6a6800a6b7 --- /dev/null +++ b/crates/swc/tests/fixture/issues-10xxx/10346/output/input.js @@ -0,0 +1,3 @@ +export var foo = 1; + +//# sourceMappingURL=input.js.map diff --git a/crates/swc/tests/fixture/issues-10xxx/10346/output/input.map b/crates/swc/tests/fixture/issues-10xxx/10346/output/input.map new file mode 100644 index 000000000000..5f20fa96beb2 --- /dev/null +++ b/crates/swc/tests/fixture/issues-10xxx/10346/output/input.map @@ -0,0 +1,13 @@ +{ + "mappings": "AACA,OAAO,IAAMA,MAAM,EAAE", + "names": [ + "foo" + ], + "sources": [ + "../../input/input.js" + ], + "sourcesContent": [ + "\nexport const foo = 1;" + ], + "version": 3 +} diff --git a/crates/swc/tests/minify/issue-7475/issue-8372/1/output.js b/crates/swc/tests/minify/issue-7475/issue-8372/1/output.js index 9855a4b10a46..986ace838d45 100644 --- a/crates/swc/tests/minify/issue-7475/issue-8372/1/output.js +++ b/crates/swc/tests/minify/issue-7475/issue-8372/1/output.js @@ -1 +1,2 @@ let a={aób:"\xf3"};console.log(a); +//# sourceMappingURL=input.map