diff --git a/crates/swc/src/lib.rs b/crates/swc/src/lib.rs index 95f01b178f0e..6cf34d8544ab 100644 --- a/crates/swc/src/lib.rs +++ b/crates/swc/src/lib.rs @@ -731,7 +731,7 @@ impl Compiler { None }; - self.apply_transforms(handler, orig.as_ref(), config) + self.apply_transforms(handler, orig, config) }) } @@ -904,7 +904,7 @@ impl Compiler { inline_sources_content: opts.inline_sources_content, source_map, source_map_names: &source_map_names, - orig: orig.as_ref(), + orig, comments: Some(&comments), emit_source_map_columns: opts.emit_source_map_columns, preamble: &opts.format.preamble, @@ -949,7 +949,7 @@ impl Compiler { fn apply_transforms( &self, handler: &Handler, - orig: Option<&sourcemap::SourceMap>, + orig: Option, config: BuiltInput, ) -> Result { self.run(|| { diff --git a/crates/swc/tests/fixture/sourcemap/004/output/index.map b/crates/swc/tests/fixture/sourcemap/004/output/index.map index eaa607cc40df..4df545e9c6b2 100644 --- a/crates/swc/tests/fixture/sourcemap/004/output/index.map +++ b/crates/swc/tests/fixture/sourcemap/004/output/index.map @@ -1,8 +1,7 @@ { - "mappings": "AAACA,CAAAA,KAAKC,gBAAmB,GAAGD,KAAKC,gBAAmB,IAAI,EAAE,AAAF,EAAIC,IAAI,CAAC;IAC7D;QACI;KACH;IACD;QACU,MAAY,SAAUC,CAAuB,EAAEC,CAAmB,EAAEC,CAAmB;YACzF;YACA,IAAIC,IAAa,SAAoBC,CAAI;gBACrC,IAAIC,IAAOD,EAAKC,IAAI;gBACpB,OAAqB,AAAC,CAAA,GAAGC,EAA+CC,GAAG,AAAHA,EAAK,OAAO;oBAChFC,UAAUH,EAAKI,GAAG;gBACtB;YACJ;YACAP,EAAoBQ,CAAC,CAACT,IACDC,EAAoBS,CAAC,CAACV,GAAqB;gBACvCW,SAAS;oBAC1B,OAAqBA;gBACzB;gBACqBC,SAAS;oBAC1B,OAAqBV;gBACzB;YACJ;YACqB,IAAIG,IAAiDJ,EAAoB,OAC1FU,IAAU,CAAA;QAE1B;QACc,MAAY,SAAUZ,CAAuB,EAAEc,CAAwB,EAAEZ,CAAmB;YAC7Fa,CAAAA,OAAOC,QAAQ,GAAGD,OAAOC,QAAQ,IAAI,EAAE,AAAF,EAAIjB,IAAI,CAAC;gBAC3C;gBACA;oBACI,OAAOG,EAAoB;gBAC/B;aACH;QAGb;IACI;IACS,SAAUA,CAAmB;QAKzBA,EAAoBe,CAAC,CAAC,GAAG;YAC9B;YACA;YACA;SACH,EAAE;YACC,OAPOf,EAAoBA,EAAoBgB,CAAC,GAOxB;QAC5B,IAESC,OAD0BjB,EAAoBe,CAAC;IAGhE;CACC", + "mappings": "CAACA,KAAK,gBAAmB,GAAGA,KAAK,gBAAmB,IAAI,EAAA,AAAC,EAAGC,IAAI,CAAC;IAC7D;QACI;KACH;IACD;QACU,MAAY,SAAUC,CAAuB,EAAEC,CAAmB,EAAEC,CAAmB,EAAE;YAC3F;YACA,IAAIC,IAAa,SAAoBC,CAAI,EAAE;gBACvC,IAAIC,IAAOD,EAAKC,IAAI;gBACpB,OAAsB,CAAA,GAAGC,EAA+CC,GAAAA,AAAE,EAAG,OAAO;oBAChFC,UAAUH,EAAKI,GAAG;gBACtB;YACJ;YACAP,EAAoBQ,CAAC,CAACT,IACDC,EAAoBS,CAAC,CAACV,GAAqB;gBACvCW,SAAS,WAAoB;oBAC9C,OAAqBA;gBACzB;gBACqBC,SAAS,WAAoB;oBAC9C,OAAqBV;gBACzB;YACJ;YACqB,IAAIG,IAAiDJ,EAAoB,OAC1FU,IAAU,CAAA;QAE1B;QACc,MAAY,SAAUZ,CAAuB,EAAEc,CAAwB,EAAEZ,CAAmB,EAAE;aAC/Fa,OAAOC,QAAQ,GAAGD,OAAOC,QAAQ,IAAI,EAAA,AAAC,EAAGjB,IAAI,CAAC;gBAC3C;gBACA,WAAY;oBACR,OAAOG,EAAoB;gBAC/B;aACH;QAGb;IACI;IACS,SAAUA,CAAmB,EAAE;QAK3BA,EAAoBe,CAAC,CAAC,GAAG;YAC9B;YACA;YACA;SACH,EAAE,WAAY;YACX,OAPOf,EAAoBA,EAAoBgB,CAAC,GAOxB;QAC5B,IAESC,OAD0BjB,EAAoBe,CAAC;IAGhE;CACC", "names": [ "self", - "webpackChunk_N_E", "push", "__unused_webpack_module", "__webpack_exports__", diff --git a/crates/swc/tests/fixture/sourcemap/issue-6552/input-map/output/index.map b/crates/swc/tests/fixture/sourcemap/issue-6552/input-map/output/index.map index 93e1a15e450c..6c3d7196d3b8 100644 --- a/crates/swc/tests/fixture/sourcemap/issue-6552/input-map/output/index.map +++ b/crates/swc/tests/fixture/sourcemap/issue-6552/input-map/output/index.map @@ -1,5 +1,5 @@ { - "mappings": "AAAA,IAAMA,IAAM,cACZC,QAAQC,KAAR,CAAe,KAAY,OAARC,UAEnB,IAAMC,IAAM", + "mappings": "AAAA,IAAMA,GAAG,CAAG,aAAZ,CACAC,OAAO,CAACC,KAAR,CAAe,YAAIC,OAAQ,dAAA,CAA3B,gBAEA,IAAMC,GAAG,CAAG,EAAZ", "names": [ "xxx", "console", diff --git a/crates/swc/tests/minify/issue-7475/issue-8372/1/output.map b/crates/swc/tests/minify/issue-7475/issue-8372/1/output.map index e22874c87e65..a12249253fbe 100644 --- a/crates/swc/tests/minify/issue-7475/issue-8372/1/output.map +++ b/crates/swc/tests/minify/issue-7475/issue-8372/1/output.map @@ -1,10 +1,9 @@ { - "mappings": "AAEAA,IAAAA,EAAQC,CAFEC,IAAA,MAAA,EAASF,QAAAC,GAAA,CAAAE", + "mappings": "AAEAA,IAAAA,EAAQC,CAAG,AAFD,IAAA,MAAA,EAAS,QAAA,GAAA,CAAA", "names": [ "console", "log", - "aób", - "a" + "aób" ], "rangeMappings": "", "sources": [ diff --git a/crates/swc_common/src/source_map.rs b/crates/swc_common/src/source_map.rs index 8832e92fbede..4649f25eee8a 100644 --- a/crates/swc_common/src/source_map.rs +++ b/crates/swc_common/src/source_map.rs @@ -1201,7 +1201,7 @@ impl SourceMap { pub fn build_source_map_from( &self, mappings: &[(BytePos, LineCol)], - orig: Option<&sourcemap::SourceMap>, + orig: Option, ) -> sourcemap::SourceMap { self.build_source_map_with_config(mappings, orig, DefaultSourceMapGenConfig) } @@ -1212,22 +1212,13 @@ impl SourceMap { pub fn build_source_map_with_config( &self, mappings: &[(BytePos, LineCol)], - orig: Option<&sourcemap::SourceMap>, + mut orig: Option, config: impl SourceMapGenConfig, ) -> sourcemap::SourceMap { let mut builder = SourceMapBuilder::new(None); let mut src_id = 0u32; - if let Some(orig) = orig { - for src in orig.sources() { - let id = builder.add_source(src); - src_id = id; - - builder.set_source_contents(id, orig.get_source_contents(id)); - } - } - // // This method is optimized based on the fact that mapping is sorted. // mappings.sort_by_key(|v| v.0); @@ -1235,7 +1226,6 @@ impl SourceMap { let mut prev_dst_line = u32::MAX; - let mut inline_sources_content = false; let mut ch_state = ByteToCharPosState::default(); let mut line_state = ByteToCharPosState::default(); @@ -1267,13 +1257,11 @@ impl SourceMap { if config.skip(&f.name) { continue; } - if orig.is_none() { - src_id = builder.add_source(&config.file_name_to_source(&f.name)); + src_id = builder.add_source(&config.file_name_to_source(&f.name)); - inline_sources_content = config.inline_sources_content(&f.name); - if inline_sources_content && orig.is_none() { - builder.set_source_contents(src_id, Some(&f.src)); - } + let inline_sources_content = config.inline_sources_content(&f.name); + if inline_sources_content { + builder.set_source_contents(src_id, Some(&f.src)); } ch_state = ByteToCharPosState::default(); @@ -1293,7 +1281,7 @@ impl SourceMap { continue; } - let mut line = match f.lookup_line(pos) { + let line = match f.lookup_line(pos) { Some(line) => line as u32, None => continue, }; @@ -1319,31 +1307,8 @@ impl SourceMap { linechpos, ); - let mut col = chpos - linechpos; - let mut name = None; - if let Some(orig) = &orig { - if let Some(token) = orig - .lookup_token(line, col) - .filter(|t| t.get_dst_line() == line) - { - line = token.get_src_line(); - col = token.get_src_col(); - if token.has_name() { - name = token.get_name(); - } - if token.get_source().is_some() { - // When we have the original source map, we use the source ids from it - src_id = token.get_raw_token().src_id; - if inline_sources_content && !builder.has_source_contents(src_id) { - if let Some(contents) = token.get_source_view() { - builder.set_source_contents(src_id, Some(contents.source())); - } - } - } - } else { - continue; - } - } + let col = chpos - linechpos; + let name = None; let name_idx = name .or_else(|| config.name_for_bytepos(pos)) @@ -1353,7 +1318,17 @@ impl SourceMap { prev_dst_line = lc.line; } - builder.into_sourcemap() + let mut map = builder.into_sourcemap(); + + if let Some(o) = &mut orig { + o.adjust_mappings(&map); + } + + if let Some(orig) = orig { + map = orig; + } + + map } } diff --git a/crates/swc_compiler_base/src/lib.rs b/crates/swc_compiler_base/src/lib.rs index fdb82e773d78..ecf716253915 100644 --- a/crates/swc_compiler_base/src/lib.rs +++ b/crates/swc_compiler_base/src/lib.rs @@ -109,7 +109,7 @@ pub struct PrintArgs<'a> { pub inline_sources_content: bool, pub source_map: SourceMapsConfig, pub source_map_names: &'a AHashMap, - pub orig: Option<&'a sourcemap::SourceMap>, + pub orig: Option, pub comments: Option<&'a dyn Comments>, pub emit_source_map_columns: bool, pub preamble: &'a str,