pub struct LazySourceMap {
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 lazily-decoded source map that defers VLQ mappings decoding until needed.
For large source maps (100MB+), this avoids decoding all mappings upfront. JSON metadata (sources, names, etc.) is parsed eagerly, but VLQ mappings are decoded on a per-line basis on demand.
Not thread-safe (!Sync). Uses RefCell/Cell for internal caching.
Intended for single-threaded use (WASM) or with external synchronization.
§Examples
use srcmap_sourcemap::LazySourceMap;
let json = r#"{"version":3,"sources":["input.js"],"names":[],"mappings":"AAAA;AACA"}"#;
let sm = LazySourceMap::from_json(json).unwrap();
// Mappings are only decoded when accessed
let loc = sm.original_position_for(0, 0).unwrap();
assert_eq!(sm.source(loc.source), "input.js");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>§debug_id: Option<String>§scopes: Option<ScopeInfo>Implementations§
Source§impl LazySourceMap
impl LazySourceMap
Sourcepub fn from_json(json: &str) -> Result<Self, ParseError>
pub fn from_json(json: &str) -> Result<Self, ParseError>
Parse a source map from JSON, deferring VLQ mappings decoding.
Parses all JSON metadata eagerly but stores the raw mappings string. VLQ mappings are decoded per-line on demand.
Sourcepub fn from_json_no_content(json: &str) -> Result<Self, ParseError>
pub fn from_json_no_content(json: &str) -> Result<Self, ParseError>
Parse a source map from JSON, skipping sourcesContent allocation and deferring VLQ mappings decoding.
Useful for WASM bindings where sourcesContent is kept on the JS side.
Returns ParseError::NestedIndexMap if the JSON contains sections
(indexed source maps are not supported by LazySourceMap).
Sourcepub fn from_vlq(
mappings: &str,
sources: Vec<String>,
names: Vec<String>,
file: Option<String>,
source_root: Option<String>,
ignore_list: Vec<u32>,
debug_id: Option<String>,
) -> Result<Self, ParseError>
pub fn from_vlq( mappings: &str, sources: Vec<String>, names: Vec<String>, file: Option<String>, source_root: Option<String>, ignore_list: Vec<u32>, debug_id: Option<String>, ) -> Result<Self, ParseError>
Build a lazy source map from pre-parsed components.
The raw VLQ mappings string is prescanned but not decoded. sourcesContent is NOT included. Does not support indexed source maps.
Sourcepub fn from_json_fast(json: &str) -> Result<Self, ParseError>
pub fn from_json_fast(json: &str) -> Result<Self, ParseError>
Parse a source map from JSON using fast-scan mode.
Only scans for semicolons at construction (no VLQ decode at all). VLQ state is computed progressively on demand. This gives the fastest possible parse time at the cost of first-lookup needing sequential decode. sourcesContent is skipped.
Returns ParseError::NestedIndexMap if the JSON contains sections
(indexed source maps are not supported by LazySourceMap).
Sourcepub fn decode_line(&self, line: u32) -> Result<Vec<Mapping>, DecodeError>
pub fn decode_line(&self, line: u32) -> Result<Vec<Mapping>, DecodeError>
Decode a single line’s mappings on demand.
Returns the cached result if the line has already been decoded. The line index is 0-based.
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 line_count(&self) -> usize
pub fn line_count(&self) -> usize
Number of generated lines in the source map.
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 mappings_for_line(&self, line: u32) -> Vec<Mapping>
pub fn mappings_for_line(&self, line: u32) -> Vec<Mapping>
Get all mappings for a line (decoding on demand).
Sourcepub fn into_sourcemap(self) -> Result<SourceMap, ParseError>
pub fn into_sourcemap(self) -> Result<SourceMap, ParseError>
Fully decode all mappings into a regular SourceMap.
Useful when you need the full map after lazy exploration.