feat: add container
This commit is contained in:
@@ -1,13 +0,0 @@
|
|||||||
interface imports {
|
|
||||||
thunk: func()
|
|
||||||
}
|
|
||||||
|
|
||||||
interface exports {
|
|
||||||
thunk: func()
|
|
||||||
}
|
|
||||||
|
|
||||||
world smoke {
|
|
||||||
import imports: imports
|
|
||||||
default export exports
|
|
||||||
}
|
|
||||||
|
|
||||||
12
javascript-container/Cargo.toml
Normal file
12
javascript-container/Cargo.toml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
[package]
|
||||||
|
name = "javascript-container"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
anyhow = "1.0"
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
serde_json = "1.0"
|
||||||
|
wasmtime = "4.0"
|
||||||
33
javascript-container/src/main.rs
Normal file
33
javascript-container/src/main.rs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
use anyhow::Result;
|
||||||
|
use wasmtime::{Config, Engine, Linker, Module, Store};
|
||||||
|
|
||||||
|
fn main() -> Result<()> {
|
||||||
|
let config = Config::default();
|
||||||
|
let engine = Engine::new(&config).unwrap();
|
||||||
|
|
||||||
|
let wasm_bytes = include_bytes!("/Users/hatterjiang/Code/hattergit/secure-javascript-container/javascript-engine/target/wasm32-unknown-unknown/debug/javascript_engine.wasm");
|
||||||
|
let module = Module::new(&engine, wasm_bytes)?;
|
||||||
|
|
||||||
|
let linker = Linker::new(&engine);
|
||||||
|
let mut store = Store::new(&engine, ());
|
||||||
|
|
||||||
|
let instance = linker.instantiate(&mut store, &module)?;
|
||||||
|
|
||||||
|
let memory = instance.get_memory(&mut store, "memory").expect("SHOULD NOT HAPPEN");
|
||||||
|
let malloc = instance.get_typed_func::<i32, i32>(&mut store, "malloc")?;
|
||||||
|
let free = instance.get_typed_func::<(i32, i32), ()>(&mut store, "free")?;
|
||||||
|
let eval = instance.get_typed_func::<(i32, i32), (i32, i32)>(&mut store, "eval")?;
|
||||||
|
|
||||||
|
let js = "1+2";
|
||||||
|
let js_bytes = js.as_bytes();
|
||||||
|
let js_bytes_len = js_bytes.len();
|
||||||
|
let ptr = malloc.call(&mut store, js.as_bytes().len() as i32)?;
|
||||||
|
let memory_data_mut = memory.data_mut(&mut store);
|
||||||
|
for i in 0..js_bytes_len {
|
||||||
|
memory_data_mut[ptr as usize + i] = js_bytes[i];
|
||||||
|
}
|
||||||
|
let eval_result = eval.call(&mut store, (ptr, js_bytes_len as i32))?;
|
||||||
|
println!("Eval result: {:?}", eval_result);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
@@ -9,6 +9,7 @@ edition = "2021"
|
|||||||
crate-type = ['cdylib']
|
crate-type = ['cdylib']
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
anyhow = "1.0.68"
|
||||||
boa_engine = { version = "0.16.0", path = "external/boa/boa_engine"}
|
boa_engine = { version = "0.16.0", path = "external/boa/boa_engine"}
|
||||||
getrandom = { version = "0.2.8", features = ["js"] }
|
getrandom = { version = "0.2.8", features = ["js"] }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
|||||||
Reference in New Issue
Block a user