Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mafintosh/wat2js
Compile WebAssembly .wat files to a common js module
https://github.com/mafintosh/wat2js
Last synced: 29 days ago
JSON representation
Compile WebAssembly .wat files to a common js module
- Host: GitHub
- URL: https://github.com/mafintosh/wat2js
- Owner: mafintosh
- License: mit
- Created: 2017-06-26T11:03:19.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2020-01-09T21:11:44.000Z (almost 5 years ago)
- Last Synced: 2024-04-26T05:44:52.924Z (8 months ago)
- Language: JavaScript
- Size: 9.77 KB
- Stars: 127
- Watchers: 9
- Forks: 24
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# wat2js
Compile WebAssembly .wat files to a common js module
```
npm install -g wat2js
```See https://github.com/WebAssembly/wabt for more WebAssembly goodies.
Currently requires the `wat2wasm` program to be installed globally. If you don't have that already you can get that by installing the webassembly binary toolkit by using this little [helper](https://github.com/mafintosh/webassembly-binary-toolkit)
## Usage
First make a basic WebAssembly .wat file
```
;; example.wat
(module
;; var result = add(a, b)
(func (export "add") (param $a i32) (param $b i32) (result i32)
;; return a + b
(i32.add
(get_local $a)
(get_local $b)
)
)
)
```Then compile it to WebAssembly and wrap in a common js loader by doing
``` sh
wat2js example.wat -o example.js
```To run the WebAssembly simply do:
``` js
var example = require('./example.js')() // load the wasm
if (!example) throw new Error('WebAssembly not supported by your runtime')var result = example.exports.add(1, 2)
console.log('1 + 2 = ' + result)
```To keep recompiling the `.wat` file when it changes pass the `--watch` option as well
``` sh
wat2js example.wat -o example.js --watch # recompile when example.wat changes
```You can also pass arguments to `wat2wasm`:
``` sh
wat2js example.wat -o example.js --watch -- --debug-names # add debug names section
```## API
#### `var mod = require('./compiled-wat.js')([options])`
Loads your WebAssembly module. If WebAssembly is not supported by the runtime, `null` is returned.
Options include:
``` js
{
imports: {...} // import objected forwared to WASM,
async: true // force async loading.
}
```Note that if your WASM is larger than 4kb, some browsers might force async loading.
`mod` looks like this
``` js
{
exports: {...}, // exports WASM functions
memory: Uint8Array, // exports.memory wrapped in a uint8array (if exported)
buffer: Uint8Array, // the WASM module as a buffer
onload: onload(cb), // function you can call to wait for async loading
realloc: realloc(bytes) // reallocate the memory buffer to a new size
}
```In case of async loading `exports` and `memory` will be `null` until the module has been loaded.
## License
MIT