mirror of
https://github.com/fluencelabs/marine.git
synced 2025-03-31 13:11:03 +00:00
* add js wasm backend crate + blank trait impls * make wasmtime a default feature for runtime and core * WIP: mock WASI, greeting almost works * WIP: added @wasmer/wasi, moved some stuff to JsStore, implementing Caller * finalize Caller * remove old code * changing js API + fmt * update wasm-bindgen generated and patched code * update call_module to throw error, fix non-logging tests * add multi-module test + update js api * fix last element getting * refactor interface + pass envs * get rid of make_*_result * small refactor * support passing log function * get rid of some todos * use String instead of Vec<u8> for wasi envs * use Strings for wasi envs in marine js * little fix * self-review fixes, import ordering * self-review fixes, import ordering * make clippy happy + fmt * self-review fixes * self-review fixes * self-review fixes * revert example artifact change * pr fixes * add __wbg_adapter_N updating code * add all-types test * fix build * update marine_js.js * Fix I64 handling * pr fixes * fix import order * add copyrights * Add comments, slightly beautify code * fmt * make clippy happy * update js interface * split function interface, improve naming * update Cargo.lock * update to new wasm-backend traits * wip * js glue code update * improve comment * use typed index collection * Add more comments * Add more comments * Fix warnings * pr fixes * pr fixes
34 lines
976 B
JavaScript
34 lines
976 B
JavaScript
import { WASI } from "@wasmer/wasi"
|
|
import { WasmFs } from "@wasmer/wasmfs"
|
|
import bindingsRaw from '@wasmer/wasi/lib/bindings/browser.js';
|
|
import { defaultImport } from 'default-import';
|
|
|
|
const bindings = defaultImport(bindingsRaw);
|
|
|
|
export function create_wasi(env) {
|
|
return new WASI({
|
|
args: [], // TODO: pass args maybe?
|
|
env: Object.fromEntries(env),
|
|
bindings: {
|
|
...bindings,
|
|
fs: new WasmFs().fs,
|
|
},
|
|
})
|
|
}
|
|
|
|
export function generate_wasi_imports(module, wasi) {
|
|
return hasWasiImports(module) ? wasi.getImports(module) : {};
|
|
}
|
|
|
|
export function bind_to_instance(wasi, instance) {
|
|
wasi.setMemory(instance.exports["memory"]);
|
|
}
|
|
|
|
function hasWasiImports(module) {
|
|
const imports = WebAssembly.Module.imports(module);
|
|
const firstWasiImport = imports.find((x) => {
|
|
return x.module === 'wasi_snapshot_preview1' || x.module === 'wasi_unstable';
|
|
});
|
|
return firstWasiImport !== undefined;
|
|
}
|