loro-crdt 1.0.7 → 1.0.8-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/web/index.js ADDED
@@ -0,0 +1,156 @@
1
+ import { LoroDoc, AwarenessWasm } from "./loro_wasm";
2
+ export * from "./loro_wasm";
3
+
4
+ /**
5
+ * @deprecated Please use LoroDoc
6
+ */
7
+ class Loro extends LoroDoc {
8
+ }
9
+ const CONTAINER_TYPES = [
10
+ "Map",
11
+ "Text",
12
+ "List",
13
+ "Tree",
14
+ "MovableList",
15
+ "Counter",
16
+ ];
17
+ function isContainerId(s) {
18
+ return s.startsWith("cid:");
19
+ }
20
+ /** Whether the value is a container.
21
+ *
22
+ * # Example
23
+ *
24
+ * ```ts
25
+ * const doc = new LoroDoc();
26
+ * const map = doc.getMap("map");
27
+ * const list = doc.getList("list");
28
+ * const text = doc.getText("text");
29
+ * isContainer(map); // true
30
+ * isContainer(list); // true
31
+ * isContainer(text); // true
32
+ * isContainer(123); // false
33
+ * isContainer("123"); // false
34
+ * isContainer({}); // false
35
+ * ```
36
+ */
37
+ function isContainer(value) {
38
+ if (typeof value !== "object" || value == null) {
39
+ return false;
40
+ }
41
+ const p = Object.getPrototypeOf(value);
42
+ if (p == null || typeof p !== "object" || typeof p["kind"] !== "function") {
43
+ return false;
44
+ }
45
+ return CONTAINER_TYPES.includes(value.kind());
46
+ }
47
+ /** Get the type of a value that may be a container.
48
+ *
49
+ * # Example
50
+ *
51
+ * ```ts
52
+ * const doc = new LoroDoc();
53
+ * const map = doc.getMap("map");
54
+ * const list = doc.getList("list");
55
+ * const text = doc.getText("text");
56
+ * getType(map); // "Map"
57
+ * getType(list); // "List"
58
+ * getType(text); // "Text"
59
+ * getType(123); // "Json"
60
+ * getType("123"); // "Json"
61
+ * getType({}); // "Json"
62
+ * ```
63
+ */
64
+ function getType(value) {
65
+ if (isContainer(value)) {
66
+ return value.kind();
67
+ }
68
+ return "Json";
69
+ }
70
+ function newContainerID(id, type) {
71
+ return `cid:${id.counter}@${id.peer}:${type}`;
72
+ }
73
+ function newRootContainerID(name, type) {
74
+ return `cid:root-${name}:${type}`;
75
+ }
76
+ /**
77
+ * Awareness is a structure that allows to track the ephemeral state of the peers.
78
+ *
79
+ * If we don't receive a state update from a peer within the timeout, we will remove their state.
80
+ * The timeout is in milliseconds. This can be used to handle the off-line state of a peer.
81
+ */
82
+ class Awareness {
83
+ constructor(peer, timeout = 30000) {
84
+ this.listeners = new Set();
85
+ this.inner = new AwarenessWasm(peer, timeout);
86
+ this.peer = peer;
87
+ this.timeout = timeout;
88
+ }
89
+ apply(bytes, origin = "remote") {
90
+ const { updated, added } = this.inner.apply(bytes);
91
+ this.listeners.forEach((listener) => {
92
+ listener({ updated, added, removed: [] }, origin);
93
+ });
94
+ this.startTimerIfNotEmpty();
95
+ }
96
+ setLocalState(state) {
97
+ const wasEmpty = this.inner.getState(this.peer) == null;
98
+ this.inner.setLocalState(state);
99
+ if (wasEmpty) {
100
+ this.listeners.forEach((listener) => {
101
+ listener({ updated: [], added: [this.inner.peer()], removed: [] }, "local");
102
+ });
103
+ }
104
+ else {
105
+ this.listeners.forEach((listener) => {
106
+ listener({ updated: [this.inner.peer()], added: [], removed: [] }, "local");
107
+ });
108
+ }
109
+ this.startTimerIfNotEmpty();
110
+ }
111
+ getLocalState() {
112
+ return this.inner.getState(this.peer);
113
+ }
114
+ getAllStates() {
115
+ return this.inner.getAllStates();
116
+ }
117
+ encode(peers) {
118
+ return this.inner.encode(peers);
119
+ }
120
+ encodeAll() {
121
+ return this.inner.encodeAll();
122
+ }
123
+ addListener(listener) {
124
+ this.listeners.add(listener);
125
+ }
126
+ removeListener(listener) {
127
+ this.listeners.delete(listener);
128
+ }
129
+ peers() {
130
+ return this.inner.peers();
131
+ }
132
+ destroy() {
133
+ clearInterval(this.timer);
134
+ this.listeners.clear();
135
+ }
136
+ startTimerIfNotEmpty() {
137
+ if (this.inner.isEmpty() || this.timer != null) {
138
+ return;
139
+ }
140
+ this.timer = setInterval(() => {
141
+ const removed = this.inner.removeOutdated();
142
+ if (removed.length > 0) {
143
+ this.listeners.forEach((listener) => {
144
+ listener({ updated: [], added: [], removed }, "timeout");
145
+ });
146
+ }
147
+ if (this.inner.isEmpty()) {
148
+ clearInterval(this.timer);
149
+ this.timer = undefined;
150
+ }
151
+ }, this.timeout / 2);
152
+ }
153
+ }
154
+
155
+ export { Awareness, Loro, getType, isContainer, isContainerId, newContainerID, newRootContainerID };
156
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../ts/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAoBA;;AAEG;AACG,MAAO,IAAK,SAAQ,OAAO,CAAA;AAAI,CAAA;AAErC,MAAM,eAAe,GAAG;IACpB,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,aAAa;IACb,SAAS;CACZ,CAAC;AAEI,SAAU,aAAa,CAAC,CAAS,EAAA;AACnC,IAAA,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;;;;;;AAgBG;AACG,SAAU,WAAW,CAAC,KAAU,EAAA;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE;AAC5C,QAAA,OAAO,KAAK,CAAC;KAChB;IAED,MAAM,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACvC,IAAA,IAAI,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE;AACvE,QAAA,OAAO,KAAK,CAAC;KAChB;IAED,OAAO,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAGD;;;;;;;;;;;;;;;;AAgBG;AACG,SAAU,OAAO,CACnB,KAAQ,EAAA;AAOR,IAAA,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;AACpB,QAAA,OAAO,KAAK,CAAC,IAAI,EAAoB,CAAC;KACzC;AAED,IAAA,OAAO,MAAa,CAAC;AACzB,CAAC;AAGe,SAAA,cAAc,CAAC,EAAQ,EAAE,IAAmB,EAAA;IACxD,OAAO,CAAA,IAAA,EAAO,EAAE,CAAC,OAAO,CAAA,CAAA,EAAI,EAAE,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAC;AAClD,CAAC;AAEe,SAAA,kBAAkB,CAC9B,IAAY,EACZ,IAAmB,EAAA;AAEnB,IAAA,OAAO,CAAY,SAAA,EAAA,IAAI,CAAI,CAAA,EAAA,IAAI,EAAE,CAAC;AACtC,CAAC;AAID;;;;;AAKG;MACU,SAAS,CAAA;IAMlB,WAAY,CAAA,IAAY,EAAE,OAAA,GAAkB,KAAK,EAAA;AADzC,QAAA,IAAA,CAAA,SAAS,GAA2B,IAAI,GAAG,EAAE,CAAC;QAElD,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;KAC1B;AAED,IAAA,KAAK,CAAC,KAAiB,EAAE,MAAM,GAAG,QAAQ,EAAA;AACtC,QAAA,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAChC,YAAA,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;AACtD,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC/B;AAED,IAAA,aAAa,CAAC,KAAQ,EAAA;AAClB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACxD,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;gBAChC,QAAQ,CACJ,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EACxD,OAAO,CACV,CAAC;AACN,aAAC,CAAC,CAAC;SACN;aAAM;YACH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;gBAChC,QAAQ,CACJ,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EACxD,OAAO,CACV,CAAC;AACN,aAAC,CAAC,CAAC;SACN;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC/B;IAED,aAAa,GAAA;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACzC;IAED,YAAY,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;KACpC;AAED,IAAA,MAAM,CAAC,KAAe,EAAA;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACnC;IAED,SAAS,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;KACjC;AAED,IAAA,WAAW,CAAC,QAA2B,EAAA;AACnC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;KAChC;AAED,IAAA,cAAc,CAAC,QAA2B,EAAA;AACtC,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KACnC;IAED,KAAK,GAAA;AACD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;KAC7B;IAED,OAAO,GAAA;AACH,QAAA,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;KAC1B;IAEO,oBAAoB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;YAC5C,OAAO;SACV;AAED,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,MAAK;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;AAC5C,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAChC,oBAAA,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC7D,iBAAC,CAAC,CAAC;aACN;AACD,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;AACtB,gBAAA,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,gBAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;aAC1B;AACL,SAAC,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAsB,CAAC;KAC7C;AACJ;;;;"}