summaryrefslogtreecommitdiff
path: root/editor/j
diff options
context:
space:
mode:
Diffstat (limited to 'editor/j')
-rwxr-xr-xeditor/j/dune7
-rwxr-xr-xeditor/j/j.ml47
-rwxr-xr-xeditor/j/j.mli32
3 files changed, 86 insertions, 0 deletions
diff --git a/editor/j/dune b/editor/j/dune
new file mode 100755
index 0000000..56e6691
--- /dev/null
+++ b/editor/j/dune
@@ -0,0 +1,7 @@
+(library
+ (name j)
+ (libraries
+ brr
+ js_of_ocaml
+ )
+ )
diff --git a/editor/j/j.ml b/editor/j/j.ml
new file mode 100755
index 0000000..96b22e0
--- /dev/null
+++ b/editor/j/j.ml
@@ -0,0 +1,47 @@
+type ('a, 'b) prop = Jv.prop'
+
+let prop
+ : string -> ('a, 'b) prop
+ = Jstr.of_string
+
+let get
+ : 'a -> ('a, 'b) prop -> 'b option
+ = fun obj prop ->
+ Jv.get' (Jv.Id.to_jv obj) prop
+ |> Jv.to_option Jv.Id.of_jv
+
+let set
+ : 'a -> ('a, 'b) prop -> 'b -> unit
+ = fun obj prop value ->
+ Jv.set'
+ (Jv.Id.to_jv obj)
+ prop
+ (Jv.Id.to_jv value)
+
+(* Objects *)
+
+type 'a constr = (Jstr.t * Jv.t)
+
+let c
+ : ('a, 'b) prop -> 'b -> 'a constr
+ = fun prop v ->
+ (prop, Jv.Id.to_jv v)
+
+let obj
+ : 'a constr Array.t -> 'a
+ = fun props ->
+ Jv.Id.of_jv @@ Jv.obj' props
+
+(* Arrays *)
+
+type 'a array = Jv.t
+
+let to_array
+ : 'a array -> 'a Array.t
+ = fun arr ->
+ Jv.to_array Jv.Id.of_jv arr
+
+let of_array
+ : 'a Array.t -> 'a array
+ = fun arr ->
+ Jv.of_array Jv.Id.to_jv arr
diff --git a/editor/j/j.mli b/editor/j/j.mli
new file mode 100755
index 0000000..796bb9d
--- /dev/null
+++ b/editor/j/j.mli
@@ -0,0 +1,32 @@
+(** The type properties *)
+type ('a, 'b) prop
+
+val prop
+ : string -> ('a, 'b) prop
+
+val get
+ : 'a -> ('a, 'b) prop -> 'b option
+
+val set
+ : 'a -> ('a, 'b) prop -> 'b -> unit
+
+
+(* Arrays *)
+
+type 'a array
+
+val to_array
+ : 'a array -> 'a Array.t
+
+val of_array
+ : 'a Array.t -> 'a array
+
+(* Object constructor *)
+
+type 'a constr
+
+val c
+ : ('a, 'b) prop -> 'b -> 'a constr
+
+val obj
+ : 'a constr Array.t -> 'a