13 unstable releases (5 breaking)
0.6.0-rc.1 | May 18, 2024 |
---|---|
0.5.0 | Apr 8, 2024 |
0.4.6 | Feb 10, 2024 |
0.4.5 | Oct 28, 2023 |
0.1.0 | Mar 4, 2023 |
#94 in Programming languages
948 downloads per month
3MB
89K
SLoC
quickjspp-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 methodfrom_js
andto_js
to transform between Rust types and js value in quickjs context. It should compatible withserde_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 JSDate
- adds a
-
bigint
: arbitrary precision integer support via num-bigint -
log
: allows forwardingconsole.log
messages to thelog
crate. Note: must be enabled withContextBuilder::console(quickjspp::console::LogConsole);
-
patched
Enabled automatically for some other features, likebigint
. You should not need to enable this manually. Applies QuickJS patches that can be found inlibquickjs-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.
Dependencies
~1.4–2.4MB
~44K SLoC