use std::collections::BTreeMap;
use serde::Deserialize;
use wasm_bindgen::prelude::*;
use crate::{compile_world, world::TypstWorld};
#[derive(Deserialize)]
struct CompileRequest {
source: String,
#[serde(default)]
files: BTreeMap<String, String>,
}
#[wasm_bindgen]
pub fn compile(request_json: &str) -> Result<Vec<u8>, JsValue> {
let request: CompileRequest = serde_json::from_str(request_json)
.map_err(|error| JsValue::from_str(&format!("invalid compile request JSON: {error}")))?;
let world = TypstWorld::from_virtual(
request.source,
request
.files
.into_iter()
.map(|(path, contents)| (path.into(), contents.into_bytes())),
);
compile_world(&world).map_err(|error| JsValue::from_str(&error.to_string()))
}