Skip to main content

LazySourceMap

Struct LazySourceMap 

Source
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

Source

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.

Source

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).

Source

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.

Source

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).

Source

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.

Source

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.

Source

pub fn line_count(&self) -> usize

Number of generated lines in the source map.

Source

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.

Source

pub fn get_source(&self, index: u32) -> Option<&str>

Resolve a source index to its filename, returning None if out of bounds.

Source

pub fn name(&self, index: u32) -> &str

Resolve a name index to its string.

§Panics

Panics if index is out of bounds. Use get_name for a non-panicking alternative.

Source

pub fn get_name(&self, index: u32) -> Option<&str>

Resolve a name index to its string, returning None if out of bounds.

Source

pub fn source_index(&self, name: &str) -> Option<u32>

Find the source index for a filename.

Source

pub fn mappings_for_line(&self, line: u32) -> Vec<Mapping>

Get all mappings for a line (decoding on demand).

Source

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.

Trait Implementations§

Source§

impl Debug for LazySourceMap

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.