2022-04-14 08:53:53 +02:00
|
|
|
/* eslint-env node */
|
|
|
|
|
|
|
|
const { promisify } = require("util");
|
|
|
|
const exec = promisify(require("child_process").exec);
|
|
|
|
const path = require("path");
|
|
|
|
|
2022-04-22 08:20:21 +02:00
|
|
|
function wasmTextPlugin({ debug } = {}) {
|
2022-04-14 08:53:53 +02:00
|
|
|
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) => {
|
2022-05-31 19:50:36 +02:00
|
|
|
let flags = [];
|
|
|
|
if (debug) {
|
|
|
|
flags.push("--debug-names");
|
2022-04-15 15:28:48 +02:00
|
|
|
}
|
2022-05-31 19:50:36 +02:00
|
|
|
// console.log("wat: compiling %s", args.path);
|
|
|
|
const r = await exec(
|
|
|
|
`wat2wasm ${flags.join(" ")} --output=- ${args.path}`,
|
|
|
|
{ encoding: "buffer" }
|
|
|
|
);
|
|
|
|
return {
|
|
|
|
contents: r.stdout,
|
|
|
|
loader: "binary",
|
|
|
|
};
|
2022-04-14 08:53:53 +02:00
|
|
|
});
|
|
|
|
},
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
wasmTextPlugin,
|
|
|
|
};
|