wakaru 1.8.0

Public Rust API for the Wakaru JavaScript decompiler
Documentation
use std::path::Path;

use crate::error::{Error, ErrorKind, Result};

#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub struct EmbeddedSource {
    pub path: String,
    pub content: String,
}

pub fn embedded_sources(data: &[u8]) -> Result<Vec<EmbeddedSource>> {
    let map = wakaru_core::parse_sourcemap(data)
        .map_err(|error| Error::new(ErrorKind::SourceMap, None, error))?;
    Ok(wakaru_core::extract_source_entries(&map, Path::new(""))
        .into_iter()
        .map(|(path, content)| EmbeddedSource {
            path: path.to_string_lossy().replace('\\', "/"),
            content,
        })
        .collect())
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn extracts_normalized_embedded_paths_without_filesystem_types() {
        let data = br#"{"version":3,"sources":["webpack:///../src/main.js"],"sourcesContent":["export const value = 1;"],"names":[],"mappings":""}"#;
        let sources = embedded_sources(data).expect("valid source map should parse");
        assert_eq!(sources.len(), 1);
        assert_eq!(sources[0].path, "src/main.js");
        assert_eq!(sources[0].content, "export const value = 1;");
    }
}