const [src, dest] = Deno.args; const wasm = await Deno.readFile(src); function encode(bytes) { let binary = ""; for (let i = 0; i < bytes.length; i++) { binary += String.fromCharCode(bytes[i]); } return btoa(binary).replace(/\n/g, ""); } await Deno.writeFile( dest, new TextEncoder().encode( `/// /* This file is automatically generated. Do not edit directly. */ import env from "./vfs.js"; const wasm = "${encode(wasm)}"; function decode(base64) { const bytesStr = atob(base64); const bytes = new Uint8Array(bytesStr.length); for (let i = 0, c = bytesStr.length; i < c; i++) { bytes[i] = bytesStr.charCodeAt(i); } return bytes; } const moduleOrInstance = { module: null, instances: [], }; export async function compile() { moduleOrInstance.module = await WebAssembly.compile(decode(wasm)); } export async function instantiateBrowser() { const placeholder = { exports: null }; const instance = await WebAssembly.instantiate(moduleOrInstance.module, env(placeholder)); placeholder.exports = instance.exports; instance.exports.seed_rng(Date.now()); moduleOrInstance.instances.push(instance); } export function instantiate() { if (moduleOrInstance.instances.length) { return moduleOrInstance.instances.pop(); } else { const placeholder = { exports: null }; const instance = new WebAssembly.Instance(moduleOrInstance.module, env(placeholder)); placeholder.exports = instance.exports; instance.exports.seed_rng(Date.now()); return instance; } }`, ), );