mirror of
https://github.com/fluencelabs/marine.git
synced 2025-06-17 00:41:28 +00:00
feat(marine-js)!: replace old marine-js with common marine-runtime + backend traits impl for JS (#332)
* 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
This commit is contained in:
33
crates/js-backend/js/wasi_bindings.js
Normal file
33
crates/js-backend/js/wasi_bindings.js
Normal file
@ -0,0 +1,33 @@
|
||||
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;
|
||||
}
|
Reference in New Issue
Block a user