63 lines
1.5 KiB
JavaScript
63 lines
1.5 KiB
JavaScript
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(
|
|
`/// <reference types="./sqlite.d.ts" />
|
|
|
|
/* 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;
|
|
}
|
|
}`,
|
|
),
|
|
);
|