package quickjs

  1. Overview
  2. Docs
Bindings for QuickJS (a Javascript Engine to be embedded https://bellard.org/quickjs)

Install

dune-project
 Dependency

Authors

Maintainers

Sources

quickjs-0.3.0.tbz
sha256=acb988041c31dfd942e40ca0e33f699174296dc4c3743f5fb175dead70f176eb
sha512=c3ba606ac64380d6f8a35c6bd49f7ba869dcfad66c1b23829386aad2c7ed20064e5a8f6ecfc2d5abb761648240223938deaa78774f12df1a638f15c4017c3b66

doc/index.html

quickjs

quickjs.ml is a set of OCaml bindings to some libraries from QuickJS, a small and embeddable JavaScript engine that implements the ES2020 specification including modules, asynchronous generators, proxies and BigInt.

This project exposes two libraries:

Motivation

The purpose of this project is to provide the same behaviour as the JavaScript engines from browsers (SpiderMonkey, JavaScriptCore, ChakraCore, v8) into native OCaml. So code that runs in the browser (via Melange) can be run in native with the same results.

Test262 Compatibility

We are translating TC39/test262 tests into OCaml to ensure full compatibility with the ECMAScript specification. This allows us to verify that our implementations behave exactly as expected by the JavaScript standard, guaranteeing consistent behaviour between browser engines and native OCaml.

Usage

open Quickjs

(* RegExp - JavaScript-compatible regular expressions *)
let re = RegExp.compile ~flags:"g" "(?<word>\\w+)" |> Result.get_ok in
let result = RegExp.exec re "hello world" in
RegExp.captures result (* [| "hello"; "hello" |] *)
RegExp.group "word" result (* Some "hello" *)
RegExp.exec re "hello world" (* next match: "world" *)

(* Number.Prototype - JavaScript-identical number formatting *)
Number.Prototype.to_string 0.1 (* "0.1" - no floating point artifacts *)
Number.Prototype.to_fixed 2 3.14159 (* "3.14" *)
Number.Prototype.to_radix 16 255.0 (* "ff" *)
Number.Prototype.to_exponential 2 123.456 (* "1.23e+2" *)

(* Global - JavaScript global functions *)
Global.parse_float "3.14" (* Some 3.14 *)
Global.parse_float ~options:Global.js_parse_options "0xff" (* Some 255.0 *)

(* Number - fast integer to string *)
Number.of_int 42 (* "42" *)
Number.of_int_radix ~radix:16 255 (* "ff" *)
Number.of_int64 9223372036854775807L (* "9223372036854775807" *)

(* String.Prototype - JavaScript string methods *)
String.Prototype.to_lower_case "HELLO" (* "hello" *)
String.Prototype.to_upper_case "world" (* "WORLD" *)