ssvm-napi
v0.4.0
Published
SSVM Node.js Addons
Downloads
15
Readme
SSVM Node.js Addon
In this example, we setup a string hello world WASM demo and demonstrate interaction with the SSVM addon. Since the string type is NOT natively supported by WASM, our SSVM addon could interact with the wasm files generated by wasm-pack and wasm-bindgen.
Setup for Rust utilities
apt-get update
apt install -y apache2 build-essential
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | shCreate new project
cargo new --lib hello
cd helloChange the cargo config file
Add the following to the Cargo.toml file.
[lib]
name = "hello"
path = "src/lib.rs"
crate-type =["cdylib"]
[dependencies]
wasm-bindgen = "0.2.50"Write Rust code
Below is the entire content of the src/lib.rs file.
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn say(s: String) -> String {
let r = String::from("hello ");
return r + &s;
}
#[wasm_bindgen]
pub fn add(a: i32, b: i32) -> i32 {
return a + b;
}
#[wasm_bindgen]
pub fn reverse(v: Vec<u8>) -> Vec<u8> {
let mut r = v.clone();
r.reverse();
return r;
}Build the WASM bytecode
wasm-pack build --target nodejsAfter building, our target wasm file is located at pkg/hello_bg.wasm.
Setup for SSVM addon
# Dependencies for SSVM-core
apt update && apt install -y \
libboost-all-dev
npm install -g [email protected] --unsafe-permUse SSVM addon
After building SSVM addon, we could now interact with hello_bg.wasm generated by wasm-pack in Node.js.
Make sure you use the corresponding vm method to rust return type.
- Create a new folder to setup execution environment. (e.g.
mkdir application) - Copy
hello_bg.wasminto your application directory. (e.g.cp hello_gb.wasm <path_to_your_application_folder>) - Create js file
main.js(or whatever you like) with the following content:
var ssvm = require('ssvm-napi');
var vm = new ssvm.VM("hello_bg.wasm")
var ret = vm.RunString("say", "world");
console.log(ret);
ret = vm.RunInt("add", 3, 4);
console.log(ret);
ret = vm.RunUint8Array("reverse", Uint8Array.from([1, 2, 3]));
console.log(ret);- Run
main.js
node main.js
...ommited...
hello world
...ommited...
7
...ommited...
Uint8Array(3) [ 3, 2, 1 ]