UNPKG

vite-plugin-wat

Version:

A Vite plugin for WebAssembly Text Format.

49 lines (46 loc) 1.27 kB
// 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 };