vite-plugin-wat
Version:
A Vite plugin for WebAssembly Text Format.
49 lines (46 loc) • 1.27 kB
JavaScript
// src/index.ts
import { relative, resolve } from "pathe";
import fse from "fs-extra";
// src/wabt.ts
import wabt from "wabt";
async function wat2wasm(wat) {
const wabtModule = await wabt();
const wasmModule = wabtModule.parseWat("", wat);
return wasmModule.toBinary({}).buffer;
}
// src/index.ts
var WAT_ID_REG = /\.wat\?init$/;
function isWatId(id) {
return WAT_ID_REG.test(id);
}
function resolveWasmId(watId, cwd, wasmDir) {
return resolve(wasmDir, relative(cwd, watId).replace(WAT_ID_REG, ".wasm"));
}
var src_default = () => {
const cwd = resolve("./");
const storeDir = resolve(cwd, "node_modules", ".vite-plugin-wat");
const wasmDir = resolve(storeDir, "wasm");
return {
name: "vite-plugin-wat",
config: () => ({
server: { watch: { ignored: [wasmDir] } }
}),
buildStart: () => {
fse.removeSync(wasmDir);
},
resolveId: (id) => {
return isWatId(id) ? id : void 0;
},
transform: async (code, id) => {
if (!isWatId(id))
return;
const wasmId = resolveWasmId(id, cwd, wasmDir);
await fse.ensureFile(wasmId);
await fse.writeFile(wasmId, await wat2wasm(code));
return `export { default } from '${wasmId}?init';`;
}
};
};
export {
src_default as default
};