rs-jest
tl;dr -- see examples
This is a jest transformer that loads Rust code so it can be interop with Javascript base project. Currently, the Rust code will be compiled as:
- WebAssembly module/instance
- Node.js addon/ffi
Requirements
- Node v8 or later
- Jest v23 or later
Rust v1.28.0 with wasm32-uknown-unknown installed
rustup default 1.28.0rustup target add wasm32-unknown-unknown
Getting Started
To begin, you'll need to install rs-jest
:
npm install rs-jest --save-dev
Then configure Jest to make rs-jest
to transform the Rust (*.rs
) file. For example:
jest.config.js
moduleexports = transform: "^.+\\.rs$": "rs-jest" ;
or if you prefer to put the config in package.json
"jest":
quick usage
lib.rs
pub fn add(a: i32, b: i32) -> i32 { a + b}
index.js
; { const instance = await wasm; return instanceexports;}
And run jest
via your preferred method.
Options
Pretty much like ts-jest, you can configure rs-jest
by using global variables under the "rs-jest"
key:
export
How wasm code would be exported. This options is identical with option export
in webassembly-loader. (see examples)
target
- Type:
String
- Default:
wasm32-unknown-unknown
- Expected value: see supported platform
The Rust target to use. Currently it only support wasm related target
release
- Type:
Boolean
- Default:
true
Whether to compile the Rust code in debug or release mode.
Examples
See the test cases and example projects in fixtures and examples for more insight.
The exported module are pretty much like rollup-plugin-rust so it can be used alongside with it
Given this Rust code
lib.rs
pub fn add(a: i32, b: i32) -> i32 { a + b}
Cargo.toml
[package]name = "adder"version = "0.1.0"authors = ["Full Name <email@site.domain>"] [lib]crate-type = ["cdylib"]path = "lib.rs"
With options
{export: 'buffer'}
; WebAssembly;
{export: 'module'}
; const instance = wasmModule;consoleinstanceexports; // 3
{export: 'instance'}
; consolewasmexports; // 3
{export: 'async'}
extern { fn hook(c: i32);} pub fn add(a: i32, b: i32) -> i32 { hook(a + b)}
; ;
{export: 'async-instance'}
; ;
{export: 'async-module'}
; ;
Who use this?
- example-stencil-rust
- [add yours 😉]
Contributing
- CONTRIBUTING.md for how you can make contribution
- HACKING.md for technical details