1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#![feature(async_closure)]
use wasm_mt::WasmMt;
use wasm_mt::utils::{ab_from_text, fetch_as_arraybuffer, fetch_as_text, run_js};
use wasm_mt_swc::transform_sync;
use wasm_bindgen::prelude::*;
use js_sys::ArrayBuffer;
pub fn get_pkg_js_uri() -> String { let href = run_js("return location.href;").unwrap().as_string().unwrap();
format!("{}wasm-bindgen-test", href)
}
pub async fn get_arraybuffers() -> Result<(ArrayBuffer, ArrayBuffer), JsValue> {
let pkg_js_uri = get_pkg_js_uri();
let pkg_wasm_uri = format!("{}_bg.wasm", pkg_js_uri);
let ab_js = ab_from_text(
&pkg_js_no_modules_from(
&fetch_as_text(&pkg_js_uri).await?));
let ab_wasm = fetch_as_arraybuffer(&pkg_wasm_uri).await?;
Ok((ab_js, ab_wasm))
}
pub fn pkg_js_no_modules_from(pkg_js: &str) -> String {
let pkg_js = pkg_js.replace("import.meta.url", "''"); let pkg_js = transform_sync(&pkg_js).unwrap();
let mut out = String::new();
out.push_str("const exports = {};");
out.push_str(&pkg_js);
out.push_str("const wasm_bindgen = Object.assign(init, exports);");
out
}
pub async fn create_ab_init(pkg_js_uri: &str) -> Result<ArrayBuffer, JsValue> {
let pkg_js = fetch_as_text(pkg_js_uri).await?;
let pkg_js = pkg_js.replace("import.meta.url", "''"); let pkg_js = transform_sync(&pkg_js).unwrap();
let mut init_js = String::new();
init_js.push_str("
return () => {
const exports = {};
");
init_js.push_str(&pkg_js);
init_js.push_str("
return Object.assign(init, exports);
};
");
Ok(ab_from_text(&init_js))
}
pub async fn create_mt(pkg_js_uri: &str) -> WasmMt {
let mt = WasmMt::new(&pkg_js_uri).and_init().await.unwrap();
let ab = create_ab_init(&pkg_js_uri).await.unwrap();
mt.set_ab_init(ab);
mt
}