import type { PostResourceTransformer } from '../types' import path from 'path' import { promises as fs } from 'fs' import wabtModule from 'wabt' const wabtModulePromise = wabtModule() const transformer : PostResourceTransformer = { extension: "wat", transform: async (src) => { const wasmPath = path.join(process.cwd(), 'scripts', src) const wasmContents = await fs.readFile(wasmPath) const wasmTextFileName = path.basename(src) const wasmBinFileName = wasmTextFileName.replace(/\.wat$/, '.wasm') const wabt = await wabtModulePromise const wasmParsed = wabt.parseWat(wasmTextFileName, wasmContents) const { buffer: wasmBinary } = wasmParsed.toBinary({ write_debug_names: true }) const wasmDestText = path.join(process.cwd(), '.next/static/scripts', src) const wasmDestBinary = wasmDestText.replace(/\.wat$/, '.wasm') const destDir = path.dirname(wasmDestText) await fs.mkdir(destDir, { recursive: true }) await fs.writeFile(wasmDestText, wasmContents) await fs.writeFile(wasmDestBinary, wasmBinary) return { type: 'wasm', name: wasmBinFileName, binaryPath: path.join('/_next/static/scripts/', src.replace(/\.wat$/, '.wasm')), textPath: path.join('/_next/static/scripts/', src), } } } export default transformer