use alloc::format;
use alloc::string::String;
use js_sys::Error;
use wasm_bindgen::prelude::*;
pub struct Worker {}
#[wasm_bindgen]
extern "C" {
type WorkerError;
#[wasm_bindgen(method, getter, structural)]
fn stack(this: &WorkerError) -> JsValue;
#[wasm_bindgen(js_name = "__wbg_test_output_writeln")]
fn write_output_line(data: JsValue);
}
impl Worker {
pub fn new() -> Worker {
Worker {}
}
}
impl super::Formatter for Worker {
fn writeln(&self, line: &str) {
write_output_line(JsValue::from(String::from(line)));
}
fn stringify_error(&self, err: &JsValue) -> String {
let error = Error::from(err.clone());
let name = String::from(error.name());
let message = String::from(error.message());
let err = WorkerError::from(err.clone());
let stack = err.stack();
let header = format!("{name}: {message}");
let stack = match stack.as_string() {
Some(stack) => stack,
None => return header,
};
if stack.contains(&header) {
return stack;
}
format!("{header}\n{stack}")
}
}