diff --git a/crates/oxc_sourcemap/src/decode.rs b/crates/oxc_sourcemap/src/decode.rs index 70fe0c442..8e2f668fb 100644 --- a/crates/oxc_sourcemap/src/decode.rs +++ b/crates/oxc_sourcemap/src/decode.rs @@ -3,9 +3,9 @@ use crate::error::{Error, Result}; use crate::{SourceMap, Token}; -#[derive(serde::Deserialize)] +#[derive(serde::Deserialize, Default)] #[serde(rename_all = "camelCase")] -struct JSONSourceMap { +pub struct JSONSourceMap { // An optional name of the generated code that this source map is associated with. file: Option, // A string with the encoded mapping data. @@ -20,8 +20,7 @@ struct JSONSourceMap { names: Option>, } -pub fn decode(value: &str) -> Result { - let json: JSONSourceMap = serde_json::from_str(value)?; +pub fn decode(json: JSONSourceMap) -> Result { let file = json.file.map(Into::into); let names = json.names.map(|v| v.into_iter().map(Into::into).collect::>()).unwrap_or_default(); @@ -37,6 +36,10 @@ pub fn decode(value: &str) -> Result { Ok(SourceMap::new(file, names, source_root, sources, source_contents, tokens, None)) } +pub fn decode_from_string(value: &str) -> Result { + decode(serde_json::from_str(value)?) +} + #[allow(clippy::cast_possible_truncation)] fn decode_mapping(mapping: &str, names_len: usize, sources_len: usize) -> Result> { let mut tokens = vec![]; diff --git a/crates/oxc_sourcemap/src/lib.rs b/crates/oxc_sourcemap/src/lib.rs index 837893944..0cb5e0a3d 100644 --- a/crates/oxc_sourcemap/src/lib.rs +++ b/crates/oxc_sourcemap/src/lib.rs @@ -9,6 +9,7 @@ mod sourcemap_visualizer; mod token; pub use concat_sourcemap_builder::ConcatSourceMapBuilder; +pub use decode::JSONSourceMap; pub use error::Error; pub use sourcemap::SourceMap; pub use sourcemap_builder::SourceMapBuilder; diff --git a/crates/oxc_sourcemap/src/sourcemap.rs b/crates/oxc_sourcemap/src/sourcemap.rs index 652e39063..858853b6e 100644 --- a/crates/oxc_sourcemap/src/sourcemap.rs +++ b/crates/oxc_sourcemap/src/sourcemap.rs @@ -1,5 +1,5 @@ use crate::{ - decode::decode, + decode::{decode, decode_from_string, JSONSourceMap}, encode::encode, error::Result, token::{Token, TokenChunk}, @@ -45,17 +45,25 @@ impl SourceMap { } } - /// Convert `SourceMap` to vlq sourcemap string. + /// Convert the vlq sourcemap to to `SourceMap`. /// # Errors /// /// The `serde_json` deserialize Error. - pub fn from_json_string(value: &str) -> Result { + pub fn from_json(value: JSONSourceMap) -> Result { decode(value) } /// Convert the vlq sourcemap string to `SourceMap`. /// # Errors /// + /// The `serde_json` deserialize Error. + pub fn from_json_string(value: &str) -> Result { + decode_from_string(value) + } + + /// Convert `SourceMap` to vlq sourcemap string. + /// # Errors + /// /// The `serde_json` serialization Error. pub fn to_json_string(&self) -> Result { encode(self)