Macro rquickjs::embed

source ·
embed!() { /* proc-macro */ }
Available on crate feature macro only.
Expand description

A macro for embedding JavaScript code into a binary.

Compiles a JavaScript module to bytecode and then compiles the resulting bytecode into the binary. Each file loaded is turned into its own module. The macro takes a list of paths to files to be compiled into a module with an option name. Module paths are relative to the crate manifest file.

§Usage

use rquickjs::{embed, loader::Bundle, CatchResultExt, Context, Runtime};

/// load the `my_module.js` file and name it myModule
static BUNDLE: Bundle = embed! {
    "myModule": "my_module.js",
};

fn main() {
    let rt = Runtime::new().unwrap();
    let ctx = Context::full(&rt).unwrap();

    rt.set_loader(BUNDLE, BUNDLE);
    ctx.with(|ctx| {
        let _ = ctx
            .clone()
            .compile(
                "testModule",
                r#"
            import { foo } from 'myModule';
            if(foo() !== 2){
                throw new Error("Function didn't return the correct value");
            }
        "#,
            )
            .catch(&ctx)
            .unwrap();
    })
}