mirror of
https://github.com/oven-sh/bun
synced 2026-02-14 21:01:52 +00:00
52 lines
1.2 KiB
JavaScript
52 lines
1.2 KiB
JavaScript
/** This file is used when a .wasm file is ran.
|
|
* The transpiled contents of `./node/wasi.js` is pasted into the top of this file.
|
|
*/
|
|
import { WASI } from "node:wasi";
|
|
|
|
const filePath = process.argv.at(1);
|
|
if (!filePath) {
|
|
var err = new Error("To run a wasm file with Bun, the first argument must be a path to a .wasm file");
|
|
err.name = "WasmFileNotFound";
|
|
throw err;
|
|
}
|
|
|
|
// The module specifier is the resolved path to the wasm file
|
|
|
|
var {
|
|
WASM_CWD = process.cwd(),
|
|
WASM_ROOT_DIR = "/",
|
|
WASM_ENV_STR = undefined,
|
|
WASM_USE_ASYNC_INIT = "1",
|
|
} = process.env;
|
|
|
|
var env = process.env;
|
|
if (WASM_ENV_STR?.length) {
|
|
env = JSON.parse(WASM_ENV_STR);
|
|
}
|
|
|
|
const wasi = new WASI({
|
|
args: process.argv.slice(1),
|
|
env,
|
|
preopens: {
|
|
".": WASM_CWD || process.cwd(),
|
|
"/": WASM_ROOT_DIR || "/",
|
|
},
|
|
});
|
|
|
|
let source = globalThis.wasmSourceBytes;
|
|
if (!source) {
|
|
const fs = import.meta.require("fs");
|
|
const file = import.meta.path;
|
|
source = fs.readFileSync(file);
|
|
}
|
|
|
|
const wasm = await WebAssembly.compile(source);
|
|
|
|
const instance = !Number(WASM_USE_ASYNC_INIT)
|
|
? new WebAssembly.Instance(wasm, wasi.getImports(wasm))
|
|
: await WebAssembly.instantiate(wasm, wasi.getImports(wasm));
|
|
|
|
wasi.start(instance);
|
|
|
|
process.reallyExit(0);
|