Source file thunk.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
open! Core
open! Js_of_ocaml

type t = Raw.Node.t

let vdom_thunk = lazy Js.Unsafe.(get global (Js.string "VdomThunk"))

let create ~key arg ~f =
  let key =
    match key with
    | Some key -> Js.Optdef.return (Js.string key)
    | None -> Js.Optdef.empty
  in
  let key = Js.Unsafe.inject key in
  let f = Js.wrap_callback (fun a -> f a) |> Js.Unsafe.inject in
  let arg = Js.Unsafe.inject arg in
  (Obj.magic : _ -> Raw.Node.t)
    (Js.Unsafe.fun_call (Lazy.force vdom_thunk) [| f; arg; key |])
;;