|  root
				
				3bf41bf355
				update | před 2 roky | |
|---|---|---|
| .. | ||
| esm | před 2 roky | |
| lib | před 2 roky | |
| LICENSE | před 2 roky | |
| README.md | před 2 roky | |
| package.json | před 2 roky | |
Rewrite a WASM binary
Replace in-place an AST node in the binary.
yarn add @webassemblyjs/wasm-edit
Update:
import { edit } from "@webassemblyjs/wasm-edit";
const binary = [/*...*/];
const visitors = {
  ModuleImport({ node }) {
    node.module = "foo";
    node.name = "bar";
  }
};
const newBinary = edit(binary, visitors);
Replace:
import { edit } from "@webassemblyjs/wasm-edit";
const binary = [/*...*/];
const visitors = {
  Instr(path) {
    const newNode = t.callInstruction(t.indexLiteral(0));
    path.replaceWith(newNode);
  }
};
const newBinary = edit(binary, visitors);
Remove:
import { edit } from "@webassemblyjs/wasm-edit";
const binary = [/*...*/];
const visitors = {
  ModuleExport({ node }) {
    path.remove()
  }
};
const newBinary = edit(binary, visitors);
Insert:
import { add } from "@webassemblyjs/wasm-edit";
const binary = [/*...*/];
const newBinary = add(actualBinary, [
  t.moduleImport("env", "mem", t.memory(t.limit(1)))
]);
Providing an AST allows you to handle the decoding yourself, here is the API:
addWithAST(Program, ArrayBuffer, Array<Node>): ArrayBuffer;
editWithAST(Program, ArrayBuffer, visitors): ArrayBuffer;
Note that the AST will be updated in-place.