Expand description
Source map concatenation and composition/remapping.
Concatenation merges source maps from multiple bundled files into one, adjusting line/column offsets. Used by bundlers (esbuild, Rollup, Webpack).
Composition/remapping chains source maps through multiple transforms
(e.g. TS → JS → minified) into a single map pointing to original sources.
Equivalent to @ampproject/remapping in the JS ecosystem.
§Examples
§Concatenation
use srcmap_remapping::ConcatBuilder;
use srcmap_sourcemap::SourceMap;
fn main() {
let map_a = r#"{"version":3,"sources":["a.js"],"names":[],"mappings":"AAAA"}"#;
let map_b = r#"{"version":3,"sources":["b.js"],"names":[],"mappings":"AAAA"}"#;
let mut builder = ConcatBuilder::new(Some("bundle.js".to_string()));
builder.add_map(&SourceMap::from_json(map_a).unwrap(), 0);
builder.add_map(&SourceMap::from_json(map_b).unwrap(), 1);
let result = builder.build();
assert_eq!(result.mapping_count(), 2);
assert_eq!(result.line_count(), 2);
}§Composition / Remapping
use srcmap_remapping::remap;
use srcmap_sourcemap::SourceMap;
fn main() {
// Transform: original.js → intermediate.js → output.js
let outer = r#"{"version":3,"sources":["intermediate.js"],"names":[],"mappings":"AAAA;AACA"}"#;
let inner = r#"{"version":3,"sources":["original.js"],"names":[],"mappings":"AACA;AACA"}"#;
let result = remap(
&SourceMap::from_json(outer).unwrap(),
|source| {
if source == "intermediate.js" {
Some(SourceMap::from_json(inner).unwrap())
} else {
None
}
},
);
// Result maps output.js directly to original.js
assert_eq!(result.sources, vec!["original.js"]);
}Structs§
- Concat
Builder - Builder for concatenating multiple source maps into one.
Functions§
- remap
- Remap a source map by resolving each source through upstream source maps.