@pluv/crdt-yjs 3.2.2 → 4.0.0
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/.turbo/turbo-build.log +21 -16
- package/CHANGELOG.md +20 -0
- package/dist/chunk-15K8U1wQ.mjs +18 -0
- package/dist/index.d.mts +155 -150
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +547 -567
- package/dist/index.mjs.map +1 -0
- package/package.json +21 -17
- package/src/awareness/PluvYjsAwareness.ts +1 -1
- package/tsdown.config.ts +14 -0
- package/dist/index.d.ts +0 -205
- package/dist/index.js +0 -617
package/dist/index.js
DELETED
|
@@ -1,617 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __defProps = Object.defineProperties;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
6
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
8
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
10
|
-
var __typeError = (msg) => {
|
|
11
|
-
throw TypeError(msg);
|
|
12
|
-
};
|
|
13
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
14
|
-
var __spreadValues = (a, b) => {
|
|
15
|
-
for (var prop in b || (b = {}))
|
|
16
|
-
if (__hasOwnProp.call(b, prop))
|
|
17
|
-
__defNormalProp(a, prop, b[prop]);
|
|
18
|
-
if (__getOwnPropSymbols)
|
|
19
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
20
|
-
if (__propIsEnum.call(b, prop))
|
|
21
|
-
__defNormalProp(a, prop, b[prop]);
|
|
22
|
-
}
|
|
23
|
-
return a;
|
|
24
|
-
};
|
|
25
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
26
|
-
var __export = (target, all) => {
|
|
27
|
-
for (var name in all)
|
|
28
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
29
|
-
};
|
|
30
|
-
var __copyProps = (to, from, except, desc) => {
|
|
31
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
32
|
-
for (let key of __getOwnPropNames(from))
|
|
33
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
34
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
35
|
-
}
|
|
36
|
-
return to;
|
|
37
|
-
};
|
|
38
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
39
|
-
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
40
|
-
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
41
|
-
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
42
|
-
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
43
|
-
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
44
|
-
|
|
45
|
-
// src/index.ts
|
|
46
|
-
var index_exports = {};
|
|
47
|
-
__export(index_exports, {
|
|
48
|
-
yjs: () => yjs_exports
|
|
49
|
-
});
|
|
50
|
-
module.exports = __toCommonJS(index_exports);
|
|
51
|
-
|
|
52
|
-
// src/yjs.ts
|
|
53
|
-
var yjs_exports = {};
|
|
54
|
-
__export(yjs_exports, {
|
|
55
|
-
array: () => array,
|
|
56
|
-
awareness: () => awareness,
|
|
57
|
-
doc: () => doc,
|
|
58
|
-
kind: () => kind,
|
|
59
|
-
map: () => map,
|
|
60
|
-
provider: () => provider,
|
|
61
|
-
text: () => text,
|
|
62
|
-
xmlElement: () => xmlElement,
|
|
63
|
-
xmlFragment: () => xmlFragment,
|
|
64
|
-
xmlText: () => xmlText
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
// src/array/YjsArray.ts
|
|
68
|
-
var import_yjs = require("yjs");
|
|
69
|
-
var YjsArray = class extends import_yjs.Array {
|
|
70
|
-
constructor(value = []) {
|
|
71
|
-
super();
|
|
72
|
-
this.insert(0, value);
|
|
73
|
-
this.initialValue = value;
|
|
74
|
-
}
|
|
75
|
-
__pluvType() {
|
|
76
|
-
return {};
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
// src/array/array.ts
|
|
81
|
-
var array = (value = []) => {
|
|
82
|
-
return new YjsArray(value);
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
// src/awareness/PluvYjsAwareness.ts
|
|
86
|
-
var import_observable = require("lib0/observable");
|
|
87
|
-
|
|
88
|
-
// src/constants.ts
|
|
89
|
-
var PLUV_PRESENCE_META_KEY = "__pluv";
|
|
90
|
-
var PLUV_PRESENCE_Y_ID_KEY = "__y_clientid";
|
|
91
|
-
|
|
92
|
-
// src/awareness/PluvYjsAwareness.ts
|
|
93
|
-
var PluvYjsAwareness = class extends import_observable.ObservableV2 {
|
|
94
|
-
constructor(params) {
|
|
95
|
-
super();
|
|
96
|
-
this._field = null;
|
|
97
|
-
this._idMap = /* @__PURE__ */ new Map();
|
|
98
|
-
/**
|
|
99
|
-
* !HACK
|
|
100
|
-
* @description We dgaf about these. We're just mirroring the fields that exist in the
|
|
101
|
-
* og awareness to make sure everything aligns.
|
|
102
|
-
* @see https://github.com/yjs/y-protocols/blob/master/awareness.js
|
|
103
|
-
* @date May 13, 2025
|
|
104
|
-
*/
|
|
105
|
-
this.meta = /* @__PURE__ */ new Map();
|
|
106
|
-
this._checkInterval = 0;
|
|
107
|
-
const { presenceField, room } = params;
|
|
108
|
-
this.doc = room.getDoc().value;
|
|
109
|
-
this._room = room;
|
|
110
|
-
if (!!presenceField) this._field = presenceField;
|
|
111
|
-
const myPresence = this._room.getMyPresence();
|
|
112
|
-
const myMeta = (myPresence == null ? void 0 : myPresence[PLUV_PRESENCE_META_KEY]) || {};
|
|
113
|
-
this._room.updateMyPresence({
|
|
114
|
-
[PLUV_PRESENCE_META_KEY]: __spreadProps(__spreadValues({}, myMeta), {
|
|
115
|
-
[PLUV_PRESENCE_Y_ID_KEY]: this.clientID
|
|
116
|
-
})
|
|
117
|
-
});
|
|
118
|
-
this._unsubscribe = this._room.subscribe.others((others, event) => {
|
|
119
|
-
const updates = this._deriveUpdates(others, event);
|
|
120
|
-
if (!updates) return;
|
|
121
|
-
this.emit("change", [updates, "presence"]);
|
|
122
|
-
this.emit("update", [updates, "presence"]);
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
get clientID() {
|
|
126
|
-
return this.doc.clientID;
|
|
127
|
-
}
|
|
128
|
-
get states() {
|
|
129
|
-
return this.getStates();
|
|
130
|
-
}
|
|
131
|
-
destroy() {
|
|
132
|
-
this.emit("destroy", [this]);
|
|
133
|
-
this._unsubscribe();
|
|
134
|
-
super.destroy();
|
|
135
|
-
}
|
|
136
|
-
getLocalState() {
|
|
137
|
-
return this._adaptPresence(this._room.getMyPresence());
|
|
138
|
-
}
|
|
139
|
-
setLocalState(state) {
|
|
140
|
-
const patch = !!this._field ? { [this._field]: state } : state;
|
|
141
|
-
this._room.updateMyPresence(patch);
|
|
142
|
-
this.emit("update", [{ added: [], updated: [this.clientID], removed: [] }, "local"]);
|
|
143
|
-
}
|
|
144
|
-
setLocalStateField(field, value) {
|
|
145
|
-
const patch = !!this._field ? { [this._field]: __spreadProps(__spreadValues({}, this.getLocalState()), { [field]: value }) } : { [field]: value };
|
|
146
|
-
this._room.updateMyPresence(patch);
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* !HACK
|
|
150
|
-
* @description We're building the awareness presences from the states stored on the room's
|
|
151
|
-
* presense instead of using the map defined in the awareness interface.
|
|
152
|
-
* @see https://github.com/yjs/y-protocols/blob/master/awareness.js
|
|
153
|
-
* @date May 13, 2025
|
|
154
|
-
*/
|
|
155
|
-
getStates() {
|
|
156
|
-
const others = this._room.getOthers();
|
|
157
|
-
const states = others.reduce((map2, other) => {
|
|
158
|
-
var _a;
|
|
159
|
-
const presence = this._adaptPresence(other.presence);
|
|
160
|
-
const meta = ((_a = other.presence) == null ? void 0 : _a[PLUV_PRESENCE_META_KEY]) || {};
|
|
161
|
-
const clientID = meta[PLUV_PRESENCE_Y_ID_KEY];
|
|
162
|
-
return typeof presence !== "undefined" && typeof clientID !== "undefined" ? map2.set(clientID, presence) : map2;
|
|
163
|
-
}, /* @__PURE__ */ new Map());
|
|
164
|
-
const myPresence = this.getLocalState();
|
|
165
|
-
if (typeof myPresence !== "undefined") states.set(this.clientID, myPresence);
|
|
166
|
-
return states;
|
|
167
|
-
}
|
|
168
|
-
_adaptPresence(presence) {
|
|
169
|
-
return !!this._field ? presence[this._field] : presence;
|
|
170
|
-
}
|
|
171
|
-
_deriveUpdates(others, event) {
|
|
172
|
-
switch (event.kind) {
|
|
173
|
-
case "clear": {
|
|
174
|
-
this._idMap.clear();
|
|
175
|
-
return null;
|
|
176
|
-
}
|
|
177
|
-
case "enter": {
|
|
178
|
-
const clientID = this._resetIdMap(others).get(event.user.connectionId);
|
|
179
|
-
return {
|
|
180
|
-
added: typeof clientID !== "undefined" ? [clientID] : [],
|
|
181
|
-
updated: [],
|
|
182
|
-
removed: []
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
case "leave": {
|
|
186
|
-
const clientID = this._idMap.get(event.user.connectionId);
|
|
187
|
-
this._resetIdMap(others);
|
|
188
|
-
return {
|
|
189
|
-
added: [],
|
|
190
|
-
updated: [],
|
|
191
|
-
removed: typeof clientID !== "undefined" ? [clientID] : []
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
case "sync": {
|
|
195
|
-
this._resetIdMap(others);
|
|
196
|
-
return null;
|
|
197
|
-
}
|
|
198
|
-
case "update": {
|
|
199
|
-
const clientID = this._resetIdMap(others).get(event.user.connectionId);
|
|
200
|
-
return {
|
|
201
|
-
added: [],
|
|
202
|
-
updated: typeof clientID !== "undefined" ? [clientID] : [],
|
|
203
|
-
removed: []
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
default:
|
|
207
|
-
return null;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
_resetIdMap(others) {
|
|
211
|
-
this._idMap.clear();
|
|
212
|
-
return others.reduce((map2, other) => {
|
|
213
|
-
var _a;
|
|
214
|
-
const clientID = (_a = other.presence[PLUV_PRESENCE_META_KEY]) == null ? void 0 : _a[PLUV_PRESENCE_Y_ID_KEY];
|
|
215
|
-
if (typeof clientID === "undefined") return map2;
|
|
216
|
-
return map2.set(other.connectionId, clientID);
|
|
217
|
-
}, this._idMap);
|
|
218
|
-
}
|
|
219
|
-
};
|
|
220
|
-
|
|
221
|
-
// src/awareness/awareness.ts
|
|
222
|
-
var awareness = (params) => {
|
|
223
|
-
return new PluvYjsAwareness(params);
|
|
224
|
-
};
|
|
225
|
-
|
|
226
|
-
// src/doc/CrdtYjsDoc.ts
|
|
227
|
-
var import_js_base64 = require("js-base64");
|
|
228
|
-
var import_yjs3 = require("yjs");
|
|
229
|
-
|
|
230
|
-
// src/doc/builder.ts
|
|
231
|
-
var import_yjs2 = require("yjs");
|
|
232
|
-
var builder = (doc2) => {
|
|
233
|
-
return {
|
|
234
|
-
array(name, value = []) {
|
|
235
|
-
const array2 = doc2.getArray(name);
|
|
236
|
-
if (!!value.length) array2.insert(0, value);
|
|
237
|
-
return array2;
|
|
238
|
-
},
|
|
239
|
-
map(name, value = []) {
|
|
240
|
-
const map2 = doc2.getMap(name);
|
|
241
|
-
value.forEach(([k, v]) => {
|
|
242
|
-
map2.set(k, v);
|
|
243
|
-
});
|
|
244
|
-
return map2;
|
|
245
|
-
},
|
|
246
|
-
text(name, value = "") {
|
|
247
|
-
const text2 = doc2.getText(name);
|
|
248
|
-
if (!!value) text2.insert(0, value);
|
|
249
|
-
return text2;
|
|
250
|
-
},
|
|
251
|
-
xmlElement(name, children = []) {
|
|
252
|
-
const xmlElement2 = doc2.getXmlElement(name);
|
|
253
|
-
if (!!children.length) xmlElement2.insert(0, children);
|
|
254
|
-
return xmlElement2;
|
|
255
|
-
},
|
|
256
|
-
xmlFragment(name, children = []) {
|
|
257
|
-
const xmlFragment2 = doc2.getXmlFragment(name);
|
|
258
|
-
if (!!children.length) xmlFragment2.insert(0, children);
|
|
259
|
-
return xmlFragment2;
|
|
260
|
-
},
|
|
261
|
-
xmlText(name) {
|
|
262
|
-
const xmlText2 = doc2.get(name, import_yjs2.XmlText);
|
|
263
|
-
return xmlText2;
|
|
264
|
-
}
|
|
265
|
-
};
|
|
266
|
-
};
|
|
267
|
-
|
|
268
|
-
// src/doc/CrdtYjsDoc.ts
|
|
269
|
-
var MERGE_INTERVAL_MS = 1e3;
|
|
270
|
-
var PLUV_ID_FIELD = "__$pluv";
|
|
271
|
-
var __storage, __undoManager, _CrdtYjsDoc_instances, _setPluvId_fn;
|
|
272
|
-
var CrdtYjsDoc = class {
|
|
273
|
-
constructor(params = () => ({})) {
|
|
274
|
-
__privateAdd(this, _CrdtYjsDoc_instances);
|
|
275
|
-
this.value = new import_yjs3.Doc();
|
|
276
|
-
__privateAdd(this, __storage);
|
|
277
|
-
__privateAdd(this, __undoManager, null);
|
|
278
|
-
const storage = params(builder(this.value));
|
|
279
|
-
const keys = this.value.share.keys().reduce((set, key) => set.add(key), /* @__PURE__ */ new Set());
|
|
280
|
-
__privateSet(this, __storage, Object.entries(storage).reduce(
|
|
281
|
-
(acc, [key, node]) => keys.has(key) ? __spreadProps(__spreadValues({}, acc), { [key]: node }) : acc,
|
|
282
|
-
{}
|
|
283
|
-
));
|
|
284
|
-
if (!!Object.keys(storage).length) __privateMethod(this, _CrdtYjsDoc_instances, _setPluvId_fn).call(this);
|
|
285
|
-
}
|
|
286
|
-
applyEncodedState(params) {
|
|
287
|
-
const { origin, update } = params;
|
|
288
|
-
if (update === null || typeof update === "undefined") return this;
|
|
289
|
-
const uint8Update = typeof update === "string" ? (0, import_js_base64.toUint8Array)(update) : update;
|
|
290
|
-
(0, import_yjs3.applyUpdate)(this.value, uint8Update, origin);
|
|
291
|
-
return this;
|
|
292
|
-
}
|
|
293
|
-
batchApplyEncodedState(params) {
|
|
294
|
-
var _a;
|
|
295
|
-
const { origin } = params;
|
|
296
|
-
const updates = (_a = params.updates) != null ? _a : [];
|
|
297
|
-
const filtered = updates.reduce((acc, update) => {
|
|
298
|
-
if (!update) return acc;
|
|
299
|
-
if (typeof update === "string") {
|
|
300
|
-
acc.push((0, import_js_base64.toUint8Array)(update));
|
|
301
|
-
return acc;
|
|
302
|
-
}
|
|
303
|
-
if (typeof update === "object") {
|
|
304
|
-
acc.push(update);
|
|
305
|
-
return acc;
|
|
306
|
-
}
|
|
307
|
-
return acc;
|
|
308
|
-
}, []);
|
|
309
|
-
if (!filtered.length) return this;
|
|
310
|
-
const merged = (0, import_yjs3.mergeUpdates)(filtered);
|
|
311
|
-
return this.applyEncodedState({ origin, update: merged });
|
|
312
|
-
}
|
|
313
|
-
canRedo() {
|
|
314
|
-
var _a;
|
|
315
|
-
return !!((_a = __privateGet(this, __undoManager)) == null ? void 0 : _a.canRedo());
|
|
316
|
-
}
|
|
317
|
-
canUndo() {
|
|
318
|
-
var _a;
|
|
319
|
-
return !!((_a = __privateGet(this, __undoManager)) == null ? void 0 : _a.canUndo());
|
|
320
|
-
}
|
|
321
|
-
destroy() {
|
|
322
|
-
var _a;
|
|
323
|
-
(_a = __privateGet(this, __undoManager)) == null ? void 0 : _a.destroy();
|
|
324
|
-
this.value.destroy();
|
|
325
|
-
}
|
|
326
|
-
get(type) {
|
|
327
|
-
if (typeof type === "undefined") return __privateGet(this, __storage);
|
|
328
|
-
return __privateGet(this, __storage)[type];
|
|
329
|
-
}
|
|
330
|
-
getEncodedState() {
|
|
331
|
-
return (0, import_js_base64.fromUint8Array)((0, import_yjs3.encodeStateAsUpdate)(this.value));
|
|
332
|
-
}
|
|
333
|
-
isEmpty() {
|
|
334
|
-
return !this.value.share.size;
|
|
335
|
-
}
|
|
336
|
-
rebuildStorage(reference) {
|
|
337
|
-
const isBuilt = !!Object.keys(__privateGet(this, __storage)).length;
|
|
338
|
-
if (isBuilt) {
|
|
339
|
-
console.warn("Attempted to rebuild storage multiple times");
|
|
340
|
-
return this;
|
|
341
|
-
}
|
|
342
|
-
__privateSet(this, __storage, Object.entries(reference).reduce((acc, [key, node]) => {
|
|
343
|
-
if (node instanceof import_yjs3.XmlElement) {
|
|
344
|
-
return __spreadProps(__spreadValues({}, acc), { [key]: this.value.getXmlElement(key) });
|
|
345
|
-
}
|
|
346
|
-
if (node instanceof import_yjs3.XmlFragment) {
|
|
347
|
-
return __spreadProps(__spreadValues({}, acc), { [key]: this.value.getXmlFragment(key) });
|
|
348
|
-
}
|
|
349
|
-
if (node instanceof import_yjs3.XmlText) return __spreadProps(__spreadValues({}, acc), { [key]: this.value.get(key, import_yjs3.XmlText) });
|
|
350
|
-
if (node instanceof import_yjs3.Array) return __spreadProps(__spreadValues({}, acc), { [key]: this.value.getArray(key) });
|
|
351
|
-
if (node instanceof import_yjs3.Map) return __spreadProps(__spreadValues({}, acc), { [key]: this.value.getMap(key) });
|
|
352
|
-
if (node instanceof import_yjs3.Text) return __spreadProps(__spreadValues({}, acc), { [key]: this.value.getText(key) });
|
|
353
|
-
return acc;
|
|
354
|
-
}, {}));
|
|
355
|
-
return this.track();
|
|
356
|
-
}
|
|
357
|
-
redo() {
|
|
358
|
-
var _a;
|
|
359
|
-
(_a = __privateGet(this, __undoManager)) == null ? void 0 : _a.redo();
|
|
360
|
-
return this;
|
|
361
|
-
}
|
|
362
|
-
subscribe(listener) {
|
|
363
|
-
const fn = (update, origin, doc2) => {
|
|
364
|
-
listener({
|
|
365
|
-
doc: this,
|
|
366
|
-
local: origin === null || typeof origin === "undefined",
|
|
367
|
-
origin: origin ? String(origin) : null,
|
|
368
|
-
update: (0, import_js_base64.fromUint8Array)(update)
|
|
369
|
-
});
|
|
370
|
-
};
|
|
371
|
-
this.value.on("update", fn);
|
|
372
|
-
return () => {
|
|
373
|
-
this.value.off("update", fn);
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
track() {
|
|
377
|
-
var _a;
|
|
378
|
-
if (__privateGet(this, __undoManager)) __privateGet(this, __undoManager).destroy();
|
|
379
|
-
const sharedTypes = Object.values(__privateGet(this, __storage)).reduce(
|
|
380
|
-
(acc, type) => {
|
|
381
|
-
if (type instanceof import_yjs3.Array || type instanceof import_yjs3.Map || type instanceof import_yjs3.Text || type instanceof import_yjs3.XmlElement || type instanceof import_yjs3.XmlFragment || type instanceof import_yjs3.XmlText) {
|
|
382
|
-
acc.push(type);
|
|
383
|
-
}
|
|
384
|
-
return acc;
|
|
385
|
-
},
|
|
386
|
-
[]
|
|
387
|
-
);
|
|
388
|
-
if (!sharedTypes.length) {
|
|
389
|
-
(_a = __privateGet(this, __undoManager)) == null ? void 0 : _a.destroy();
|
|
390
|
-
__privateSet(this, __undoManager, null);
|
|
391
|
-
return this;
|
|
392
|
-
}
|
|
393
|
-
__privateSet(this, __undoManager, new import_yjs3.UndoManager(sharedTypes, { captureTimeout: MERGE_INTERVAL_MS }));
|
|
394
|
-
return this;
|
|
395
|
-
}
|
|
396
|
-
transact(fn) {
|
|
397
|
-
this.value.transact(fn);
|
|
398
|
-
return this;
|
|
399
|
-
}
|
|
400
|
-
toJson(type) {
|
|
401
|
-
if (typeof type === "string") return __privateGet(this, __storage)[type].toJSON();
|
|
402
|
-
return Object.entries(__privateGet(this, __storage)).reduce(
|
|
403
|
-
(acc, [key, value]) => __spreadProps(__spreadValues({}, acc), { [key]: value.toJSON() }),
|
|
404
|
-
{}
|
|
405
|
-
);
|
|
406
|
-
}
|
|
407
|
-
undo() {
|
|
408
|
-
var _a;
|
|
409
|
-
(_a = __privateGet(this, __undoManager)) == null ? void 0 : _a.undo();
|
|
410
|
-
return this;
|
|
411
|
-
}
|
|
412
|
-
};
|
|
413
|
-
__storage = new WeakMap();
|
|
414
|
-
__undoManager = new WeakMap();
|
|
415
|
-
_CrdtYjsDoc_instances = new WeakSet();
|
|
416
|
-
_setPluvId_fn = function() {
|
|
417
|
-
const text2 = this.value.getText(PLUV_ID_FIELD);
|
|
418
|
-
const id = typeof crypto !== "undefined" ? crypto.randomUUID() : Math.random().toString();
|
|
419
|
-
text2.insert(0, id);
|
|
420
|
-
};
|
|
421
|
-
|
|
422
|
-
// src/doc/CrdtYjsDocFactory.ts
|
|
423
|
-
var import_crdt = require("@pluv/crdt");
|
|
424
|
-
var CrdtYjsDocFactory = class _CrdtYjsDocFactory extends import_crdt.AbstractCrdtDocFactory {
|
|
425
|
-
constructor(initialStorage = () => ({})) {
|
|
426
|
-
super(initialStorage);
|
|
427
|
-
this._initialStorage = initialStorage;
|
|
428
|
-
}
|
|
429
|
-
getEmpty() {
|
|
430
|
-
return new CrdtYjsDoc();
|
|
431
|
-
}
|
|
432
|
-
getFactory(initialStorage) {
|
|
433
|
-
return new _CrdtYjsDocFactory(initialStorage != null ? initialStorage : this._initialStorage);
|
|
434
|
-
}
|
|
435
|
-
getInitialized(initialStorage) {
|
|
436
|
-
return new CrdtYjsDoc(initialStorage != null ? initialStorage : this._initialStorage);
|
|
437
|
-
}
|
|
438
|
-
};
|
|
439
|
-
|
|
440
|
-
// src/doc/doc.ts
|
|
441
|
-
var doc = (value = () => ({})) => {
|
|
442
|
-
return new CrdtYjsDocFactory(value);
|
|
443
|
-
};
|
|
444
|
-
|
|
445
|
-
// src/map/YjsMap.ts
|
|
446
|
-
var import_yjs4 = require("yjs");
|
|
447
|
-
var YjsMap = class extends import_yjs4.Map {
|
|
448
|
-
constructor(value = []) {
|
|
449
|
-
super(value);
|
|
450
|
-
this.initialValue = value;
|
|
451
|
-
}
|
|
452
|
-
__pluvType() {
|
|
453
|
-
return {};
|
|
454
|
-
}
|
|
455
|
-
};
|
|
456
|
-
|
|
457
|
-
// src/map/map.ts
|
|
458
|
-
var map = (value = []) => {
|
|
459
|
-
return new YjsMap(value);
|
|
460
|
-
};
|
|
461
|
-
|
|
462
|
-
// src/provider/PluvYjsProvider.ts
|
|
463
|
-
var import_types = require("@pluv/types");
|
|
464
|
-
var import_observable2 = require("lib0/observable");
|
|
465
|
-
var PluvYjsProvider = class extends import_observable2.ObservableV2 {
|
|
466
|
-
constructor(params) {
|
|
467
|
-
super();
|
|
468
|
-
this._synced = false;
|
|
469
|
-
const { presenceField, room } = params;
|
|
470
|
-
this.awareness = awareness({ presenceField, room });
|
|
471
|
-
this.doc = room.getDoc().value;
|
|
472
|
-
this._room = room;
|
|
473
|
-
const subscriptions = [
|
|
474
|
-
this._room.subscribe.connection(({ storage }) => {
|
|
475
|
-
const status = this._toProviderStatus(storage.state);
|
|
476
|
-
if (!status) return;
|
|
477
|
-
this.emit("status", [{ status }]);
|
|
478
|
-
}),
|
|
479
|
-
this._room.addEventListener("close", (event) => {
|
|
480
|
-
this.emit("connection-close", [event, this]);
|
|
481
|
-
}),
|
|
482
|
-
this._room.addEventListener("error", (event) => {
|
|
483
|
-
this.emit("connection-error", [event, this]);
|
|
484
|
-
})
|
|
485
|
-
];
|
|
486
|
-
this._unsubscribe = subscriptions.reduce(
|
|
487
|
-
(fn, unsubscribe) => () => {
|
|
488
|
-
fn();
|
|
489
|
-
unsubscribe();
|
|
490
|
-
},
|
|
491
|
-
() => void 0
|
|
492
|
-
);
|
|
493
|
-
}
|
|
494
|
-
get synced() {
|
|
495
|
-
return this._synced;
|
|
496
|
-
}
|
|
497
|
-
set synced(state) {
|
|
498
|
-
if (this._synced === state) return;
|
|
499
|
-
this._synced = state;
|
|
500
|
-
this.emit("sync", [state]);
|
|
501
|
-
this.emit("synced", [state]);
|
|
502
|
-
}
|
|
503
|
-
destroy() {
|
|
504
|
-
this.awareness.destroy();
|
|
505
|
-
this._unsubscribe();
|
|
506
|
-
super.destroy();
|
|
507
|
-
}
|
|
508
|
-
_toProviderStatus(state) {
|
|
509
|
-
switch (state) {
|
|
510
|
-
case import_types.StorageState.Loading: {
|
|
511
|
-
return "connecting";
|
|
512
|
-
}
|
|
513
|
-
case import_types.StorageState.Unavailable: {
|
|
514
|
-
return "disconnected";
|
|
515
|
-
}
|
|
516
|
-
case import_types.StorageState.Offline:
|
|
517
|
-
case import_types.StorageState.Synced: {
|
|
518
|
-
return "connected";
|
|
519
|
-
}
|
|
520
|
-
default:
|
|
521
|
-
return null;
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
/**
|
|
525
|
-
* !HACK
|
|
526
|
-
* @description We dgaf about these, since the room manages these already. We're just mirroring
|
|
527
|
-
* the fields that exist in the og provider to make sure everything aligns.
|
|
528
|
-
* @see https://github.com/yjs/y-websocket/blob/master/src/y-websocket.js
|
|
529
|
-
* @date May 13, 2025
|
|
530
|
-
*/
|
|
531
|
-
connect() {
|
|
532
|
-
}
|
|
533
|
-
disconnect() {
|
|
534
|
-
}
|
|
535
|
-
};
|
|
536
|
-
|
|
537
|
-
// src/provider/provider.ts
|
|
538
|
-
var provider = (params) => {
|
|
539
|
-
return new PluvYjsProvider(params);
|
|
540
|
-
};
|
|
541
|
-
|
|
542
|
-
// src/text/YjsText.ts
|
|
543
|
-
var import_yjs5 = require("yjs");
|
|
544
|
-
var YjsText = class extends import_yjs5.Text {
|
|
545
|
-
constructor(value = "") {
|
|
546
|
-
super();
|
|
547
|
-
this.initialValue = value;
|
|
548
|
-
}
|
|
549
|
-
__pluvType() {
|
|
550
|
-
return {};
|
|
551
|
-
}
|
|
552
|
-
};
|
|
553
|
-
|
|
554
|
-
// src/text/text.ts
|
|
555
|
-
var text = (value = "") => {
|
|
556
|
-
return new YjsText(value);
|
|
557
|
-
};
|
|
558
|
-
|
|
559
|
-
// src/xmlElement/YjsXmlElement.ts
|
|
560
|
-
var import_yjs6 = require("yjs");
|
|
561
|
-
var YjsXmlElement = class extends import_yjs6.XmlElement {
|
|
562
|
-
constructor(name, value) {
|
|
563
|
-
super(name);
|
|
564
|
-
if (!!value.length) this.insert(0, value);
|
|
565
|
-
this.initialValue = value;
|
|
566
|
-
}
|
|
567
|
-
__pluvType() {
|
|
568
|
-
return {};
|
|
569
|
-
}
|
|
570
|
-
};
|
|
571
|
-
|
|
572
|
-
// src/xmlElement/xmlElement.ts
|
|
573
|
-
var xmlElement = (name, children) => {
|
|
574
|
-
return new YjsXmlElement(name, children);
|
|
575
|
-
};
|
|
576
|
-
|
|
577
|
-
// src/xmlFragment/YjsXmlFragment.ts
|
|
578
|
-
var import_yjs7 = require("yjs");
|
|
579
|
-
var YjsXmlFragment = class extends import_yjs7.XmlFragment {
|
|
580
|
-
constructor(value) {
|
|
581
|
-
super();
|
|
582
|
-
if (!!value.length) this.insert(0, value);
|
|
583
|
-
this.initialValue = value;
|
|
584
|
-
}
|
|
585
|
-
__pluvType() {
|
|
586
|
-
return {};
|
|
587
|
-
}
|
|
588
|
-
};
|
|
589
|
-
|
|
590
|
-
// src/xmlFragment/xmlFragment.ts
|
|
591
|
-
var xmlFragment = (children) => {
|
|
592
|
-
return new YjsXmlFragment(children);
|
|
593
|
-
};
|
|
594
|
-
|
|
595
|
-
// src/xmlText/YjsXmlText.ts
|
|
596
|
-
var import_yjs8 = require("yjs");
|
|
597
|
-
var YjsXmlText = class extends import_yjs8.XmlText {
|
|
598
|
-
constructor(value = "") {
|
|
599
|
-
super();
|
|
600
|
-
this.initialValue = value;
|
|
601
|
-
}
|
|
602
|
-
__pluvType() {
|
|
603
|
-
return {};
|
|
604
|
-
}
|
|
605
|
-
};
|
|
606
|
-
|
|
607
|
-
// src/xmlText/xmlText.ts
|
|
608
|
-
var xmlText = () => {
|
|
609
|
-
return new YjsXmlText();
|
|
610
|
-
};
|
|
611
|
-
|
|
612
|
-
// src/yjs.ts
|
|
613
|
-
var kind = "yjs";
|
|
614
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
615
|
-
0 && (module.exports = {
|
|
616
|
-
yjs
|
|
617
|
-
});
|