Struct sourcemap::SourceMap

source ·
pub struct SourceMap { /* private fields */ }
Expand description

Represents a sourcemap in memory

This is always represents a regular “non-indexed” sourcemap. Particularly in case the from_reader method is used an index sourcemap will be rejected with an error on reading.

Implementations§

source§

impl SourceMap

source

pub fn from_reader<R: Read>(rdr: R) -> Result<SourceMap>

Creates a sourcemap from a reader over a JSON stream in UTF-8 format. Optionally a “garbage header” as defined by the sourcemap draft specification is supported. In case an indexed sourcemap is encountered an error is returned.

use sourcemap::SourceMap;
let input: &[_] = b"{
    \"version\":3,
    \"sources\":[\"coolstuff.js\"],
    \"names\":[\"x\",\"alert\"],
    \"mappings\":\"AAAA,GAAIA,GAAI,EACR,IAAIA,GAAK,EAAG,CACVC,MAAM\"
}";
let sm = SourceMap::from_reader(input).unwrap();

While sourcemaps objects permit some modifications, it’s generally not possible to modify tokens after they have been added. For creating sourcemaps from scratch or for general operations for modifying a sourcemap have a look at the SourceMapBuilder.

source

pub fn to_writer<W: Write>(&self, w: W) -> Result<()>

Writes a sourcemap into a writer.

Note that this operation will generate an equivalent sourcemap to the one that was generated on load however there might be small differences in the generated JSON and layout. For instance sourceRoot will not be set as upon parsing of the sourcemap the sources will already be expanded.

let sm = SourceMap::from_reader(input).unwrap();
let mut output : Vec<u8> = vec![];
sm.to_writer(&mut output).unwrap();
source

pub fn to_data_url(&self) -> Result<String>

Encode a sourcemap into a data url.

let sm = SourceMap::from_reader(input).unwrap();
sm.to_data_url().unwrap();
source

pub fn from_slice(slice: &[u8]) -> Result<SourceMap>

Creates a sourcemap from a reader over a JSON byte slice in UTF-8 format. Optionally a “garbage header” as defined by the sourcemap draft specification is supported. In case an indexed sourcemap is encountered an error is returned.

use sourcemap::SourceMap;
let input: &[_] = b"{
    \"version\":3,
    \"sources\":[\"coolstuff.js\"],
    \"names\":[\"x\",\"alert\"],
    \"mappings\":\"AAAA,GAAIA,GAAI,EACR,IAAIA,GAAK,EAAG,CACVC,MAAM\"
}";
let sm = SourceMap::from_slice(input).unwrap();
source

pub fn new( file: Option<Arc<str>>, tokens: Vec<RawToken>, names: Vec<Arc<str>>, sources: Vec<Arc<str>>, sources_content: Option<Vec<Option<Arc<str>>>> ) -> SourceMap

Constructs a new sourcemap from raw components.

  • file: an optional filename of the sourcemap
  • tokens: a list of raw tokens
  • names: a vector of names
  • sources a vector of source filenames
  • sources_content optional source contents
source

pub fn get_debug_id(&self) -> Option<DebugId>

Returns the embedded debug id.

source

pub fn set_debug_id(&mut self, debug_id: Option<DebugId>)

Sets a new value for the debug id.

source

pub fn get_file(&self) -> Option<&str>

Returns the embedded filename in case there is one.

source

pub fn set_file<T: Into<Arc<str>>>(&mut self, value: Option<T>)

Sets a new value for the file.

source

pub fn get_source_root(&self) -> Option<&str>

Returns the embedded source_root in case there is one.

source

pub fn set_source_root<T: Into<Arc<str>>>(&mut self, value: Option<T>)

Sets a new value for the source_root.

source

pub fn get_token(&self, idx: u32) -> Option<Token<'_>>

Looks up a token by its index.

source

pub fn get_token_count(&self) -> u32

Returns the number of tokens in the sourcemap.

source

pub fn tokens(&self) -> TokenIter<'_>

Returns an iterator over the tokens.

source

pub fn lookup_token(&self, line: u32, col: u32) -> Option<Token<'_>>

Looks up the closest token to a given 0-indexed line and column.

source

pub fn get_original_function_name( &self, line: u32, col: u32, minified_name: &str, sv: &SourceView ) -> Option<&str>

Given a location, name and minified source file resolve a minified name to an original function name.

This invokes some guesswork and requires access to the original minified source. This will not yield proper results for anonymous functions or functions that do not have clear function names. (For instance it’s recommended that dotted function names are not passed to this function).

source

pub fn get_source_count(&self) -> u32

Returns the number of sources in the sourcemap.

source

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

Looks up a source for a specific index.

source

pub fn set_source(&mut self, idx: u32, value: &str)

Sets a new source value for an index. This cannot add new sources.

This panics if a source is set that does not exist.

source

pub fn sources(&self) -> SourceIter<'_>

Iterates over all sources

source

pub fn get_source_view(&self, idx: u32) -> Option<&SourceView>

Returns the sources content as source view.

source

pub fn get_source_contents(&self, idx: u32) -> Option<&str>

Looks up the content for a source.

source

pub fn set_source_contents(&mut self, idx: u32, value: Option<&str>)

Sets source contents for a source.

source

pub fn source_contents(&self) -> SourceContentsIter<'_>

Iterates over all source contents

source

pub fn names(&self) -> NameIter<'_>

Returns an iterator over the names.

source

pub fn get_name_count(&self) -> u32

Returns the number of names in the sourcemap.

source

pub fn has_names(&self) -> bool

Returns true if there are any names in the map.

source

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

Looks up a name for a specific index.

source

pub fn remove_names(&mut self)

Removes all names from the sourcemap.

source

pub fn get_index_size(&self) -> usize

Returns the number of items in the index

source

pub fn index_iter(&self) -> IndexIter<'_>

Returns the number of items in the index

source

pub fn rewrite(self, options: &RewriteOptions<'_>) -> Result<SourceMap>

This rewrites the sourcemap according to the provided rewrite options.

The default behavior is to just deduplicate the sourcemap, something that automatically takes place. This for instance can be used to slightly compress sourcemaps if certain data is not wanted.

use sourcemap::{SourceMap, RewriteOptions};
let sm = SourceMap::from_slice(input).unwrap();
let new_sm = sm.rewrite(&RewriteOptions {
    with_names: false,
    ..Default::default()
});
source

pub fn adjust_mappings(&mut self, adjustment: &Self)

Adjusts the mappings in self using the mappings in adjustment.

Here is the intended use case for this function:

  • You have a source file (for example, minified JS) foo.js and a corresponding sourcemap foo.js.map.
  • You modify foo.js in some way and generate a sourcemap transform.js.map representing this modification. This can be done using magic-string, for example.
  • You want a sourcemap that is “like” foo.js.map, but takes the changes you made to foo.js into account. Then foo.js.map.adjust_mappings(transform.js.map) is the desired sourcemap.

This function assumes that adjustment contains no relevant information except for mappings. All information about sources and names is copied from self.

Note that the resulting sourcemap will be at most as fine-grained as self..

Trait Implementations§

source§

impl Clone for SourceMap

source§

fn clone(&self) -> SourceMap

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SourceMap

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> Conv for T

source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<T> FmtForward for T

source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. 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> Pipe for T
where T: ?Sized,

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

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

§

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>,

§

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.