"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.run = void 0; const wasi_1 = __importDefault(require("./wasi")); const node_1 = __importDefault(require("./bindings/node")); const fs_1 = __importDefault(require("fs")); const promises_1 = require("fs/promises"); const debug_1 = __importDefault(require("debug")); const log = (0, debug_1.default)("wasi"); async function wasmImport(name, options = {}) { const pathToWasm = `${name}${name.endsWith(".wasm") ? "" : ".wasm"}`; function getrandom(bufPtr, bufLen, _flags) { // NOTE: returning 0 here (our default stub behavior) // would result in Python hanging on startup! So critical to do this. node_1.default.randomFillSync( // @ts-ignore new Uint8Array(result.instance.exports.memory.buffer), bufPtr, bufLen); return bufLen; } const wasmOpts = { env: new Proxy({ getrandom, ...options?.env }, { get(target, key) { if (key in target) { return Reflect.get(target, key); } log("WARNING: creating stub for", key); return (..._args) => { return 0; }; }, }), }; let wasi = undefined; if (!options?.noWasi) { const opts = { args: process.argv, bindings: node_1.default, env: process.env, }; if (options.dir === null) { // sandbox -- don't give any fs access } else { opts.bindings = { ...node_1.default, fs: fs_1.default, }; // just give full access; security of fs access isn't // really relevant for us at this point if (!options.dir) { opts.preopens = { "/": "/" }; } else { opts.preopens = { [options.dir]: options.dir }; } } wasi = new wasi_1.default(opts); wasmOpts.wasi_snapshot_preview1 = wasi.wasiImport; } //console.log(`reading ${pathToWasm}`); const source = await (0, promises_1.readFile)(pathToWasm); const typedArray = new Uint8Array(source); const result = await WebAssembly.instantiate(typedArray, wasmOpts); if (wasi != null) { wasi.start(result.instance); } } async function run(name, options = {}) { await wasmImport(name, options); } exports.run = run; //# sourceMappingURL=runtime.js.map