Y.res

 1// src/ffi/Y.res
 2// FFI bindings for Yjs CRDT library (read-only)
 3
 4module Doc = {
 5  type t
 6
 7  type transaction
 8  type event = {
 9    tr: transaction,
10    doc: t,
11  }
12
13  @send
14  external on: (t, string, event => unit) => unit = "on"
15
16  let onAfterTransaction = (doc, handler) => {
17    on(doc, "afterTransaction", handler)
18  }
19
20  @module("yjs") @new
21  external make: unit => t = "Doc"
22}
23
24module Text = {
25  type t
26
27  @send
28  external get: (Doc.t, string) => t = "getText"
29
30  @send
31  external toString: t => string = "toString"
32}
33
34module Array = {
35  type t
36
37  @send
38  external get: (Doc.t, string) => t = "getArray"
39
40  @send
41  external toJSON: t => array<JSON.t> = "toJSON"
42
43  // Yjs observe event type
44  type rec observeEvent = {
45    changes: changes,
46  }
47  and changes = {
48    delta: array<deltaItem>,
49  }
50  and deltaItem = {
51    insert?: array<JSON.t>,
52    delete?: int,
53    retain?: int,
54  }
55
56  @send
57  external observe: (t, observeEvent => unit) => unit = "observe"
58}
59
60module Map = {
61  type t
62
63  @send
64  external get: (Doc.t, string) => t = "getMap"
65
66  @send
67  external toJSON: t => JSON.t = "toJSON"
68}