Go to file
2024-03-23 01:32:06 +01:00
.github/workflows fix github action 2021-02-04 21:52:25 +01:00
examples fix clippy lints 2023-02-05 18:22:56 +01:00
libquickjs-sys fix: update dateparser patch 2024-03-23 01:32:06 +01:00
src chore: update quickjs to 2024-01-13 2024-03-23 01:21:50 +01:00
.gitignore Ignore .vscode 2021-02-04 21:52:25 +01:00
Cargo.toml chore: update quickjs to 2024-01-13 2024-03-23 01:21:50 +01:00
CHANGELOG.md chore: update quickjs to 2024-01-13 2024-03-23 01:21:50 +01:00
justfile chore: update quickjs to 2024-01-13 2024-03-23 01:21:50 +01:00
LICENSE.txt Initial commit with working project. 2019-07-16 09:41:39 +02:00
README.md fix cargo-release replacements 2023-02-05 23:30:45 +01:00
release.toml fix cargo-release replacements 2023-02-05 23:30:45 +01:00
shell.nix Add shell.nix for Nix OS development 2020-07-09 01:50:41 +02:00

quick-js-dtp

Crates.io docs.rs CI

A Rust wrapper for QuickJS.

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

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

This is a fork of the original quick-js crate which includes a fully featured date parser, capable of parsing dates like Sat, 01-Jan-2000 00:00:00 PST.

Quickstart

[dependencies]
quick-js-dtp = "0.4.1"
use quick_js::{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:

  • 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(quick_js::console::LogConsole);

  • patch-bigint Enabled automatically for some other features, like bigint. You should not need to enable this manually.

  • patch-dateparser Enables the improved JS date parser that supports additional date formats like Sat, 01-Jan-2000 00:00:00 PST

Installation

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

Windows Support

Windows is only supported with the MSYS2 environment and x86_64-pc-windows-gnu target architecture.

If you have MSYS2 installed and the MSYS bin directory in your path, you can compile quickjs with cargo build --target="x86_64-pc-windows-gnu".

The target can also be configured permanently via a cargo config file or the CARGO_BUILD_TARGET env var.

System installation

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

# Debian/Ubuntu: apt-get install -y curl xz-utils build-essential gcc-multilib libclang-dev clang
mkdir quickjs 
curl -L https://bellard.org/quickjs/quickjs-2019-07-09.tar.xz | tar xJv -C quickjs --strip-components 1
cd quickjs
sudo make install

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