Spaces:
Sleeping
Sleeping
# @webassemblyjs/wasm-edit | |
> Rewrite a WASM binary | |
Replace in-place an AST node in the binary. | |
## Installation | |
```sh | |
yarn add @webassemblyjs/wasm-edit | |
``` | |
## Usage | |
Update: | |
```js | |
import { edit } from "@webassemblyjs/wasm-edit"; | |
const binary = [/*...*/]; | |
const visitors = { | |
ModuleImport({ node }) { | |
node.module = "foo"; | |
node.name = "bar"; | |
} | |
}; | |
const newBinary = edit(binary, visitors); | |
``` | |
Replace: | |
```js | |
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: | |
```js | |
import { edit } from "@webassemblyjs/wasm-edit"; | |
const binary = [/*...*/]; | |
const visitors = { | |
ModuleExport({ node }) { | |
path.remove() | |
} | |
}; | |
const newBinary = edit(binary, visitors); | |
``` | |
Insert: | |
```js | |
import { add } from "@webassemblyjs/wasm-edit"; | |
const binary = [/*...*/]; | |
const newBinary = add(actualBinary, [ | |
t.moduleImport("env", "mem", t.memory(t.limit(1))) | |
]); | |
``` | |
## Providing the AST | |
Providing an AST allows you to handle the decoding yourself, here is the API: | |
```js | |
addWithAST(Program, ArrayBuffer, Array<Node>): ArrayBuffer; | |
editWithAST(Program, ArrayBuffer, visitors): ArrayBuffer; | |
``` | |
Note that the AST will be updated in-place. | |