1import { createPlugin } from "../factory.ts";
2import { sanitizePath, toPosixPath } from "../utils.ts";
3
4const WASM_INIT_QUERY = /\.wasm\?init$/;
5
6export const wasmInitPlugin = createPlugin("wasm-init", () => ({
7 vite: {
8 enforce: "pre",
9 },
10 shared: {
11 load: {
12 filter: { id: WASM_INIT_QUERY },
13 handler(id) {
14 return [
15 `import wasmModule from "${toPosixPath(sanitizePath(id))}";`,
16 `export default async (imports) => {`,
17 ` const result = await WebAssembly.instantiate(wasmModule, imports);`,
18 ` return "instance" in result ? result.instance : result;`,
19 `};`,
20 ].join("\n");
21 },
22 },
23 },
24}));