use forge_script_lang::format_forge_error; use forge_script_lang::parse::parse_program; use forge_script_lang::runtime::executor::{TreePrinter, Visitor}; use wasm_bindgen::prelude::*; #[wasm_bindgen(start)] pub fn init() { std::panic::set_hook(Box::new(console_error_panic_hook::hook)); } #[wasm_bindgen] pub fn compile_ast(program: &str) -> Result<JsValue, serde_wasm_bindgen::Error> { match parse_program(program) { Ok(val) => serde_wasm_bindgen::to_value(&val), Err(e) => Err(serde_wasm_bindgen::Error::new(format_forge_error( program, &e, ))), } } #[wasm_bindgen] pub fn format_script(program: &str) -> Result<String, serde_wasm_bindgen::Error> { let ast = match parse_program(program) { Ok(val) => val, Err(e) => { return Err(serde_wasm_bindgen::Error::new(format_forge_error( program, &e, ))); } }; let mut writer = TreePrinter::new(); writer.evaluate_program(&ast); Ok(writer.take_value()) }