-
-
Notifications
You must be signed in to change notification settings - Fork 51
/
Copy pathinstantiate.js
29 lines (26 loc) · 1.05 KB
/
instantiate.js
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
import { WASI, File, OpenFile, ConsoleStdout, PreopenDirectory } from 'https://esm.run/@bjorn3/[email protected]';
export async function instantiate({ module, addToImports, threadChannel, configuration }) {
const args = ["main.wasm"]
const env = []
const fds = [
new OpenFile(new File([])), // stdin
ConsoleStdout.lineBuffered((stdout) => {
console.log(stdout);
}),
ConsoleStdout.lineBuffered((stderr) => {
console.error(stderr);
}),
new PreopenDirectory("/", new Map()),
];
const wasi = new WASI(args, env, fds);
const { SwiftRuntime } = await import(`/.build/${configuration}/JavaScriptKit_JavaScriptKit.resources/Runtime/index.mjs`);
const swiftRuntime = new SwiftRuntime({ sharedMemory: true, threadChannel });
const importObject = {
wasi_snapshot_preview1: wasi.wasiImport,
javascript_kit: swiftRuntime.wasmImports,
};
addToImports(importObject);
const instance = await WebAssembly.instantiate(module, importObject);
swiftRuntime.setInstance(instance);
return { swiftRuntime, wasi, instance };
}