pub struct SourceMap {
pub file: Option<String>,
pub source_root: Option<String>,
pub sources: Vec<String>,
pub sources_content: Vec<Option<String>>,
pub names: Vec<String>,
pub ignore_list: Vec<u32>,
pub extensions: HashMap<String, Value>,
pub debug_id: Option<String>,
pub scopes: Option<ScopeInfo>,
/* private fields */
}Expand description
A fully-parsed source map with O(log n) position lookups.
Supports both regular and indexed (sectioned) source maps, ignoreList,
debugId, scopes (ECMA-426), and extension fields. All positions are
0-based lines and columns.
§Construction
SourceMap::from_json— parse from a JSON string (most common)SourceMap::from_parts— build from pre-decoded componentsSourceMap::from_vlq— parse from pre-extracted parts + raw VLQ stringSourceMap::from_json_lines— partial parse for a line range
§Lookups
SourceMap::original_position_for— forward: generated → originalSourceMap::generated_position_for— reverse: original → generated (lazy index)SourceMap::all_generated_positions_for— all reverse matchesSourceMap::map_range— map a generated range to its original range
For cases where you only need a few lookups and want to avoid decoding
all mappings upfront, see LazySourceMap.
Fields§
§file: Option<String>§source_root: Option<String>§sources: Vec<String>§sources_content: Vec<Option<String>>§names: Vec<String>§ignore_list: Vec<u32>§extensions: HashMap<String, Value>Extension fields (x_* keys) preserved for passthrough.
debug_id: Option<String>Debug ID (UUID) for associating generated files with source maps (ECMA-426).
scopes: Option<ScopeInfo>Decoded scope and variable information (ECMA-426 scopes proposal).
Implementations§
Source§impl SourceMap
impl SourceMap
Sourcepub fn from_json(json: &str) -> Result<Self, ParseError>
pub fn from_json(json: &str) -> Result<Self, ParseError>
Parse a source map from a JSON string. Supports both regular and indexed (sectioned) source maps.
Sourcepub fn original_position_for(
&self,
line: u32,
column: u32,
) -> Option<OriginalLocation>
pub fn original_position_for( &self, line: u32, column: u32, ) -> Option<OriginalLocation>
Look up the original source position for a generated position.
Both line and column are 0-based.
Returns None if no mapping exists or the mapping has no source.
Sourcepub fn original_position_for_with_bias(
&self,
line: u32,
column: u32,
bias: Bias,
) -> Option<OriginalLocation>
pub fn original_position_for_with_bias( &self, line: u32, column: u32, bias: Bias, ) -> Option<OriginalLocation>
Look up the original source position with a search bias.
Both line and column are 0-based.
GreatestLowerBound: find the closest mapping at or before the column (default)LeastUpperBound: find the closest mapping at or after the column
Sourcepub fn generated_position_for(
&self,
source: &str,
line: u32,
column: u32,
) -> Option<GeneratedLocation>
pub fn generated_position_for( &self, source: &str, line: u32, column: u32, ) -> Option<GeneratedLocation>
Look up the generated position for an original source position.
source is the source filename. line and column are 0-based.
Uses LeastUpperBound by default (finds first mapping at or after the position).
Sourcepub fn generated_position_for_with_bias(
&self,
source: &str,
line: u32,
column: u32,
bias: Bias,
) -> Option<GeneratedLocation>
pub fn generated_position_for_with_bias( &self, source: &str, line: u32, column: u32, bias: Bias, ) -> Option<GeneratedLocation>
Look up the generated position with a search bias.
source is the source filename. line and column are 0-based.
GreatestLowerBound: find the closest mapping at or before the position (default)LeastUpperBound: find the closest mapping at or after the position
Sourcepub fn all_generated_positions_for(
&self,
source: &str,
line: u32,
column: u32,
) -> Vec<GeneratedLocation>
pub fn all_generated_positions_for( &self, source: &str, line: u32, column: u32, ) -> Vec<GeneratedLocation>
Find all generated positions for an original source position.
source is the source filename. line and column are 0-based.
Returns all generated positions that map back to this original location.
Sourcepub fn map_range(
&self,
start_line: u32,
start_column: u32,
end_line: u32,
end_column: u32,
) -> Option<MappedRange>
pub fn map_range( &self, start_line: u32, start_column: u32, end_line: u32, end_column: u32, ) -> Option<MappedRange>
Map a generated range to its original range.
Given a generated range (start_line:start_column → end_line:end_column),
maps both endpoints through the source map and returns the original range.
Both endpoints must resolve to the same source file.
Sourcepub fn source(&self, index: u32) -> &str
pub fn source(&self, index: u32) -> &str
Resolve a source index to its filename.
§Panics
Panics if index is out of bounds. Use get_source
for a non-panicking alternative.
Sourcepub fn get_source(&self, index: u32) -> Option<&str>
pub fn get_source(&self, index: u32) -> Option<&str>
Resolve a source index to its filename, returning None if out of bounds.
Sourcepub fn get_name(&self, index: u32) -> Option<&str>
pub fn get_name(&self, index: u32) -> Option<&str>
Resolve a name index to its string, returning None if out of bounds.
Sourcepub fn source_index(&self, name: &str) -> Option<u32>
pub fn source_index(&self, name: &str) -> Option<u32>
Find the source index for a filename.
Sourcepub fn mapping_count(&self) -> usize
pub fn mapping_count(&self) -> usize
Total number of decoded mappings.
Sourcepub fn line_count(&self) -> usize
pub fn line_count(&self) -> usize
Number of generated lines.
Sourcepub fn mappings_for_line(&self, line: u32) -> &[Mapping]
pub fn mappings_for_line(&self, line: u32) -> &[Mapping]
Get all mappings for a generated line (0-based).
Sourcepub fn all_mappings(&self) -> &[Mapping]
pub fn all_mappings(&self) -> &[Mapping]
Iterate all mappings.
Sourcepub fn to_json(&self) -> String
pub fn to_json(&self) -> String
Serialize the source map back to JSON.
Produces a valid source map v3 JSON string that can be written to a file or embedded in a data URL.
Sourcepub fn to_json_with_options(&self, exclude_content: bool) -> String
pub fn to_json_with_options(&self, exclude_content: bool) -> String
Serialize the source map back to JSON with options.
If exclude_content is true, sourcesContent is omitted from the output.
Sourcepub fn from_parts(
file: Option<String>,
source_root: Option<String>,
sources: Vec<String>,
sources_content: Vec<Option<String>>,
names: Vec<String>,
mappings: Vec<Mapping>,
ignore_list: Vec<u32>,
debug_id: Option<String>,
scopes: Option<ScopeInfo>,
) -> Self
pub fn from_parts( file: Option<String>, source_root: Option<String>, sources: Vec<String>, sources_content: Vec<Option<String>>, names: Vec<String>, mappings: Vec<Mapping>, ignore_list: Vec<u32>, debug_id: Option<String>, scopes: Option<ScopeInfo>, ) -> Self
Construct a SourceMap from pre-built parts.
This avoids the encode-then-decode round-trip used in composition pipelines.
Mappings must be sorted by (generated_line, generated_column).
Use u32::MAX for source/name fields to indicate absence.
Sourcepub fn from_vlq(
mappings_str: &str,
sources: Vec<String>,
names: Vec<String>,
file: Option<String>,
source_root: Option<String>,
sources_content: Vec<Option<String>>,
ignore_list: Vec<u32>,
debug_id: Option<String>,
) -> Result<Self, ParseError>
pub fn from_vlq( mappings_str: &str, sources: Vec<String>, names: Vec<String>, file: Option<String>, source_root: Option<String>, sources_content: Vec<Option<String>>, ignore_list: Vec<u32>, debug_id: Option<String>, ) -> Result<Self, ParseError>
Build a source map from pre-parsed components and a VLQ mappings string.
This is the fast path for WASM: JS does JSON.parse() (V8-native speed),
then only the VLQ mappings string crosses into WASM for decoding.
Avoids copying large sourcesContent into WASM linear memory.
Sourcepub fn from_vlq_with_range_mappings(
mappings_str: &str,
sources: Vec<String>,
names: Vec<String>,
file: Option<String>,
source_root: Option<String>,
sources_content: Vec<Option<String>>,
ignore_list: Vec<u32>,
debug_id: Option<String>,
range_mappings_str: Option<&str>,
) -> Result<Self, ParseError>
pub fn from_vlq_with_range_mappings( mappings_str: &str, sources: Vec<String>, names: Vec<String>, file: Option<String>, source_root: Option<String>, sources_content: Vec<Option<String>>, ignore_list: Vec<u32>, debug_id: Option<String>, range_mappings_str: Option<&str>, ) -> Result<Self, ParseError>
Build a source map from pre-parsed components, a VLQ mappings string, and an optional range mappings string.
Sourcepub fn builder() -> SourceMapBuilder
pub fn builder() -> SourceMapBuilder
Create a builder for incrementally constructing a SourceMap.
The builder accepts iterators for sources, names, and mappings,
avoiding the need to pre-collect into Vecs.
use srcmap_sourcemap::{SourceMap, Mapping};
let sm = SourceMap::builder()
.file("output.js")
.sources(["input.ts"])
.sources_content([Some("let x = 1;")])
.names(["x"])
.mappings([Mapping {
generated_line: 0,
generated_column: 0,
source: 0,
original_line: 0,
original_column: 0,
name: 0,
is_range_mapping: false,
}])
.build();
assert_eq!(sm.mapping_count(), 1);Sourcepub fn from_json_lines(
json: &str,
start_line: u32,
end_line: u32,
) -> Result<Self, ParseError>
pub fn from_json_lines( json: &str, start_line: u32, end_line: u32, ) -> Result<Self, ParseError>
Parse a source map from JSON, decoding only mappings for lines in [start_line, end_line).
This is useful for large source maps where only a subset of lines is needed.
VLQ state is maintained through skipped lines (required for correct delta decoding),
but Mapping structs are only allocated for lines in the requested range.
Sourcepub fn encode_mappings(&self) -> String
pub fn encode_mappings(&self) -> String
Encode all mappings back to a VLQ mappings string.