quickjspp

Crates.ioquickjspp
lib.rsquickjspp
version0.6.0-rc.1
sourcesrc
created_at2023-03-04 18:45:02.090174
updated_at2024-05-18 18:16:38.601883
descriptionQuickJS Javascript engine wrapper using quickjs fork named quickjspp
homepage
repositoryhttps://github.com/Icemic/quickjspp-rs
max_upload_size
id800749
size209,406
Icemic (Icemic)

documentation

https://docs.rs/quickjspp

README

quickjspp-rs

Crates.io docs.rs

This is a fork of quickjs-rs but replaces the binding to the original quickjs by Fabrice Bellard with its fork quickjspp by Andrew Fedoniouk, which is MSVC compatible/compileable.

QuickJS is a new, small Javascript engine by Fabrice Bellard and Charlie Gordon. It is fast and supports the full ES2020 specification.

QuickJSpp is a fork of Quickjs By Andrew Fedoniouk (a.k.a. c-smile).

This crate allows you to easily run and integrate with Javascript code from Rust.

Quickstart

[dependencies]
quickjspp = "0.5.0"
use quickjspp::{Context, JsValue};

let context = Context::new().unwrap();

// Eval.

let value = context.eval("1 + 2").unwrap();
assert_eq!(value, JsValue::Int(3));

let value = context.eval_as::<String>(" var x = 100 + 250; x.toString() ").unwrap();
assert_eq!(&value, "350");

// Callbacks.

context.add_callback("myCallback", |a: i32, b: i32| a + b).unwrap();

context.eval(r#"
    // x will equal 30
    var x = myCallback(10, 20);
"#).unwrap();

Optional Features

The crate supports the following features:

  • serde: (default enabled). enable serde method from_js and to_js to transform between Rust types and js value in quickjs context. It should compatible with serde_json but not tested yet. See more on the example.

  • chrono: chrono integration

    • adds a JsValue::Date variant that can be (de)serialized to/from a JS Date
  • bigint: arbitrary precision integer support via num-bigint

  • log: allows forwarding console.log messages to the log crate. Note: must be enabled with ContextBuilder::console(quickjspp::console::LogConsole);

  • patched Enabled automatically for some other features, like bigint. You should not need to enable this manually. Applies QuickJS patches that can be found in libquickjs-sys/embed/patches directory.

Installation

By default, quickjs is bundled with the libquickjs-sys crate and automatically compiled, assuming you have the appropriate dependencies.

Windows Support

quickjspp-rs can be used under target x86_64-pc-windows-msvc,

System installation

To use the system installation, without the bundled feature, first install the required dependencies, and then compile and install quickjspp.

You then need to disable the bundled feature in the libquickjs-sys crate to force using the system version.

Commit count: 262

cargo fmt