Skip to main content

Crate srcmap_remapping

Crate srcmap_remapping 

Source
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§

ConcatBuilder
Builder for concatenating multiple source maps into one.

Functions§

remap
Remap a source map by resolving each source through upstream source maps.