mirror of
https://github.com/remko/waforth
synced 2024-12-28 10:00:06 +01:00
44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
|
/* eslint-env node */
|
||
|
|
||
|
const { promisify } = require("util");
|
||
|
const exec = promisify(require("child_process").exec);
|
||
|
const fs = require("fs");
|
||
|
const path = require("path");
|
||
|
|
||
|
function wasmTextPlugin() {
|
||
|
return {
|
||
|
name: "wasm-text",
|
||
|
setup(build) {
|
||
|
build.onResolve({ filter: /.\.wat$/ }, async (args) => {
|
||
|
if (args.resolveDir === "") {
|
||
|
return;
|
||
|
}
|
||
|
const watPath = path.isAbsolute(args.path)
|
||
|
? args.path
|
||
|
: path.join(args.resolveDir, args.path);
|
||
|
return {
|
||
|
path: watPath,
|
||
|
namespace: "wasm-text",
|
||
|
watchFiles: [watPath],
|
||
|
};
|
||
|
});
|
||
|
build.onLoad({ filter: /.*/, namespace: "wasm-text" }, async (args) => {
|
||
|
// Would be handy if we could get output from stdout without going through file
|
||
|
const out = args.path.replace(".wat", ".wasm");
|
||
|
const flags = "";
|
||
|
// flags = --debug-names
|
||
|
// console.log("wat: compiling %s", args.path);
|
||
|
await exec(`wat2wasm ${flags} --output=${out} ${args.path}`);
|
||
|
return {
|
||
|
contents: await fs.promises.readFile(out),
|
||
|
loader: "binary",
|
||
|
};
|
||
|
});
|
||
|
},
|
||
|
};
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
wasmTextPlugin,
|
||
|
};
|