package gen_js_api
Install
Dune Dependency
Authors
Maintainers
Sources
md5=a9e7bf3e65a7b3e6ebefd2bee35d4adf
sha512=cacb5bbdfb255aa2dae498b8168d7e18ade890b0c63fc29684b1493531ba671cac981f59ac86991783b75c117c86900241669bf92070ca9c4749947a243018d5
Description
gen_js_api aims at simplifying the creation of OCaml bindings for JavaScript libraries. Authors of bindings write OCaml signatures for JavaScript libraries and the tool generates the actual binding code with a combination of implicit conventions and explicit annotations.
gen_js_api is to be used with the js_of_ocaml compiler.
Published: 18 Mar 2021
README
gen_js_api: easy OCaml bindings for JavaScript libraries
Overview
gen_js_api aims at simplifying the creation of OCaml bindings for JavaScript libraries. It must currently be used with the js_of_ocaml compiler, although other ways to run OCaml code "against" JavaScript might be supported later with the same binding definitions (for instance, Bucklescript, or direct embedding of a JS engine in a native OCaml application).
gen_js_api is based on the following ideas:
Authors of bindings write OCaml signatures for JavaScript libraries and the tool generates the actual binding code with a combination of implicit conventions and explicit annotations.
The generated binding code takes care of translating values between OCaml and JavaScript and of dealing with JavaScript calling conventions.
All syntactic processing is done by authors of bindings: the client code is normal OCaml code and does not depend on custom syntax nor on JS-specific types.
gen_js_api can be used in two complementary ways:
Generating .ml implementations from annotated .mli interfaces, in order to create the code for stub libraries.
As a ppx preprocessor on implementations to define local bindings.
Examples
The repository contains some examples of OCaml bindings to JavaScript libraries created with gen_js_api:
Very partial bindings to jQuery, with some example client code.
Partial bindings to JavaScript strings and regexps and JavaScript dates.
Some ad hoc test to exercise various features.
An example of a self-contained program, a simple calculator, implementing local .bindings
Documentation
Related projects
js_of_ocaml: The compiler and runtime system on which gen_js_api relies. (Note: gen_js_api doesn't depend on js_of_ocaml's OCaml library, nor on its language extension.)
goji: A DSL to describe OCaml bindings for JavaScript libraries.
DefinitelyMaybeTyped: A project to parse DefinitelyTyped interfaces and produce OCaml interfaces.
ReScript: Another compiler from OCaml to JavaScript, featuring the genType ppx for generating TS / Flow types and runtime converters.
About
gen_js_api has been created by LexiFi for porting a web application from JavaScript to OCaml. The tool has been used in production since 2015.
This gen_js_api package is licensed by LexiFi under the terms of the MIT license.
See see Changelog
Contact: alain.frisch@lexifi.com
Contributors:
Alain Frisch
Sebastien Briais
Dependencies (5)
- ojs
-
ocaml-migrate-parsetree
>= "1.6.0" & < "2.0.0"
-
ppxlib
>= "0.9"
-
ocaml
>= "4.08"
-
dune
>= "2.0"
Dev Dependencies (2)
-
conf-npm
with-test
-
js_of_ocaml-compiler
with-test
Used by (45)
- cordova
- cordova-plugin-activity-indicator
- cordova-plugin-background-mode
- cordova-plugin-barcode-scanner
- cordova-plugin-battery-status
- cordova-plugin-camera
- cordova-plugin-clipboard
- cordova-plugin-datepicker
- cordova-plugin-device
- cordova-plugin-device-motion
- cordova-plugin-device-orientation
- cordova-plugin-dialogs
- cordova-plugin-email-composer
- cordova-plugin-fcm
- cordova-plugin-file
- cordova-plugin-file-opener
- cordova-plugin-file-transfer
- cordova-plugin-geolocation
- cordova-plugin-globalization
- cordova-plugin-image-picker
- cordova-plugin-inappbrowser
- cordova-plugin-insomnia
- cordova-plugin-keyboard
- cordova-plugin-loading-spinner
- cordova-plugin-local-notifications
- cordova-plugin-media
- cordova-plugin-media-capture
- cordova-plugin-network-information
- cordova-plugin-progress
- cordova-plugin-push-notifications
- cordova-plugin-qrscanner
- cordova-plugin-screen-orientation
- cordova-plugin-sim-card
- cordova-plugin-sms
- cordova-plugin-social-sharing
- cordova-plugin-statusbar
- cordova-plugin-toast
- cordova-plugin-touch-id
- cordova-plugin-vibration
- cordova-plugin-videoplayer
-
jsonoo
< "0.3.0"
- ocaml-js-stdlib
-
ocaml-vdom
< "transition"
-
promise_jsoo
< "0.4.2"
- vdom
Conflicts (1)
-
js_of_ocaml-compiler
< "3.0.0"