@kerebron/extension-yjs 0.5.3 → 0.5.5

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.
Files changed (67) hide show
  1. package/README.md +3 -89
  2. package/esm/ExtensionYjs.d.ts +10 -1
  3. package/esm/ExtensionYjs.d.ts.map +1 -1
  4. package/esm/ExtensionYjs.js +47 -6
  5. package/esm/ExtensionYjs.js.map +1 -1
  6. package/esm/MarkYChange.d.ts +7 -0
  7. package/esm/MarkYChange.d.ts.map +1 -0
  8. package/esm/MarkYChange.js +21 -0
  9. package/esm/MarkYChange.js.map +1 -0
  10. package/esm/ProsemirrorBinding.d.ts +60 -0
  11. package/esm/ProsemirrorBinding.d.ts.map +1 -0
  12. package/esm/ProsemirrorBinding.js +405 -0
  13. package/esm/ProsemirrorBinding.js.map +1 -0
  14. package/esm/createNodeFromYElement.d.ts +10 -0
  15. package/esm/createNodeFromYElement.d.ts.map +1 -0
  16. package/esm/createNodeFromYElement.js +123 -0
  17. package/esm/createNodeFromYElement.js.map +1 -0
  18. package/esm/debug.d.ts +13 -0
  19. package/esm/debug.d.ts.map +1 -0
  20. package/esm/debug.js +147 -0
  21. package/esm/debug.js.map +1 -0
  22. package/esm/keys.d.ts +5 -8
  23. package/esm/keys.d.ts.map +1 -1
  24. package/esm/keys.js +1 -6
  25. package/esm/keys.js.map +1 -1
  26. package/esm/lib.d.ts +1 -2
  27. package/esm/lib.d.ts.map +1 -1
  28. package/esm/lib.js +12 -2
  29. package/esm/lib.js.map +1 -1
  30. package/esm/updateYFragment.d.ts +17 -0
  31. package/esm/updateYFragment.d.ts.map +1 -0
  32. package/esm/updateYFragment.js +333 -0
  33. package/esm/updateYFragment.js.map +1 -0
  34. package/esm/utils.d.ts +2 -0
  35. package/esm/utils.d.ts.map +1 -1
  36. package/esm/utils.js +4 -0
  37. package/esm/utils.js.map +1 -1
  38. package/esm/yPositionPlugin.d.ts +12 -4
  39. package/esm/yPositionPlugin.d.ts.map +1 -1
  40. package/esm/yPositionPlugin.js +114 -61
  41. package/esm/yPositionPlugin.js.map +1 -1
  42. package/esm/ySyncPlugin.d.ts +16 -78
  43. package/esm/ySyncPlugin.d.ts.map +1 -1
  44. package/esm/ySyncPlugin.js +81 -848
  45. package/esm/ySyncPlugin.js.map +1 -1
  46. package/esm/yUndoPlugin.d.ts +1 -1
  47. package/esm/yUndoPlugin.d.ts.map +1 -1
  48. package/esm/yUndoPlugin.js +1 -1
  49. package/esm/yUndoPlugin.js.map +1 -1
  50. package/package.json +9 -3
  51. package/src/ExtensionYjs.ts +65 -9
  52. package/src/MarkYChange.ts +23 -0
  53. package/src/ProsemirrorBinding.ts +607 -0
  54. package/src/createNodeFromYElement.ts +175 -0
  55. package/src/debug.ts +218 -0
  56. package/src/keys.ts +9 -9
  57. package/src/lib.ts +11 -3
  58. package/src/updateYFragment.ts +439 -0
  59. package/src/utils.ts +6 -0
  60. package/src/yPositionPlugin.ts +167 -92
  61. package/src/ySyncPlugin.ts +135 -1193
  62. package/src/yUndoPlugin.ts +1 -1
  63. package/esm/convertUtils.d.ts +0 -59
  64. package/esm/convertUtils.d.ts.map +0 -1
  65. package/esm/convertUtils.js +0 -89
  66. package/esm/convertUtils.js.map +0 -1
  67. package/src/convertUtils.ts +0 -143
@@ -0,0 +1,405 @@
1
+ // deno-lint-ignore-file no-window
2
+ import * as dom from 'lib0/dom';
3
+ import * as environment from 'lib0/environment';
4
+ import * as error from 'lib0/error';
5
+ import * as eventloop from 'lib0/eventloop';
6
+ import * as math from 'lib0/math';
7
+ import { createMutex } from 'lib0/mutex';
8
+ import * as random from 'lib0/random';
9
+ import * as set from 'lib0/set';
10
+ import * as PModel from 'prosemirror-model';
11
+ import { AllSelection, NodeSelection, TextSelection, } from 'prosemirror-state';
12
+ import * as Y from 'yjs';
13
+ import { remoteSelectionPluginKey } from '@kerebron/extension-basic-editor/ExtensionRemoteSelection';
14
+ import { ySyncPluginKey } from './keys.js';
15
+ import { absolutePositionToRelativePosition, relativePositionToAbsolutePosition, } from './lib.js';
16
+ import { updateYFragment } from './updateYFragment.js';
17
+ import { createNodeFromYElement, createNodeIfNotExists, } from './createNodeFromYElement.js';
18
+ import { isVisible } from './utils.js';
19
+ export const defaultColors = [{
20
+ light: '#ecd44433',
21
+ dark: '#ecd444',
22
+ }];
23
+ const getUserColor = (colorMapping, colors, user) => {
24
+ // @todo do not hit the same color twice if possible
25
+ if (!colorMapping.has(user)) {
26
+ if (colorMapping.size < colors.length) {
27
+ const usedColors = set.create();
28
+ colorMapping.forEach((color) => usedColors.add(color));
29
+ colors = colors.filter((color) => !usedColors.has(color));
30
+ }
31
+ colorMapping.set(user, random.oneOf(colors));
32
+ }
33
+ return colorMapping.get(user) || defaultColors[0];
34
+ };
35
+ function getSelectionType(selection) {
36
+ if (selection instanceof TextSelection) {
37
+ return 'text';
38
+ }
39
+ if (selection instanceof AllSelection) {
40
+ return 'all';
41
+ }
42
+ if (selection instanceof NodeSelection) {
43
+ return 'node';
44
+ }
45
+ return 'other_selection';
46
+ }
47
+ const restoreRelativeSelection = (tr, relSel, binding) => {
48
+ if (relSel !== null && relSel.anchor !== null && relSel.head !== null) {
49
+ if (relSel.type === 'all') {
50
+ tr.setSelection(new AllSelection(tr.doc));
51
+ }
52
+ else if (relSel.type === 'node') {
53
+ const anchor = relativePositionToAbsolutePosition(binding.ydoc, binding.type, relSel.anchor, binding.mapping);
54
+ if (anchor !== null) {
55
+ tr.setSelection(NodeSelection.create(tr.doc, anchor));
56
+ }
57
+ }
58
+ else {
59
+ const anchor = relativePositionToAbsolutePosition(binding.ydoc, binding.type, relSel.anchor, binding.mapping);
60
+ const head = relativePositionToAbsolutePosition(binding.ydoc, binding.type, relSel.head, binding.mapping);
61
+ if (anchor !== null && head !== null) {
62
+ const sel = TextSelection.between(tr.doc.resolve(anchor), tr.doc.resolve(head));
63
+ tr.setSelection(sel);
64
+ }
65
+ }
66
+ }
67
+ };
68
+ export const getRelativeSelection = (pmbinding, state) => ({
69
+ type: getSelectionType(state.selection),
70
+ anchor: absolutePositionToRelativePosition(state.selection.anchor, pmbinding.type, pmbinding.mapping),
71
+ head: absolutePositionToRelativePosition(state.selection.head, pmbinding.type, pmbinding.mapping),
72
+ });
73
+ /**
74
+ * Binding for prosemirror.
75
+ *
76
+ * @protected
77
+ */
78
+ export class ProsemirrorBinding {
79
+ mapping;
80
+ ydoc;
81
+ isOMark;
82
+ type;
83
+ mux;
84
+ prosemirrorView;
85
+ _beforeTransactionSelection = null;
86
+ beforeAllTransactions;
87
+ afterAllTransactions;
88
+ _observeFunction;
89
+ _domSelectionInView = false;
90
+ get beforeTransactionSelection() {
91
+ return this._beforeTransactionSelection;
92
+ }
93
+ set beforeTransactionSelection(value) {
94
+ this._beforeTransactionSelection = value;
95
+ }
96
+ constructor(yXmlFragment, mapping = new Map()) {
97
+ this.mapping = mapping;
98
+ this.type = yXmlFragment;
99
+ this.prosemirrorView = undefined;
100
+ // {
101
+ // state: new EditorState(),
102
+ // dispatch: () => false,
103
+ // fake: true
104
+ // };
105
+ this.mux = createMutex();
106
+ /**
107
+ * Is overlapping mark - i.e. mark does not exclude itself.
108
+ */
109
+ this.isOMark = new Map();
110
+ this._observeFunction = (event, transaction) => {
111
+ this.yXmlChanged(event, transaction);
112
+ };
113
+ this.ydoc = yXmlFragment.doc;
114
+ /**
115
+ * current selection as relative positions in the Yjs model
116
+ */
117
+ this.beforeAllTransactions = () => {
118
+ if (!this._beforeTransactionSelection &&
119
+ this.prosemirrorView) {
120
+ this._beforeTransactionSelection = getRelativeSelection(this, this.prosemirrorView.state);
121
+ }
122
+ };
123
+ this.afterAllTransactions = () => {
124
+ this._beforeTransactionSelection = null;
125
+ };
126
+ this._domSelectionInView = false;
127
+ }
128
+ changeRoom(yXmlFragment) {
129
+ const view = this.prosemirrorView;
130
+ this.destroy();
131
+ this.type = yXmlFragment;
132
+ this.ydoc = yXmlFragment.doc;
133
+ this.initView(view);
134
+ // this._forceRerender();
135
+ }
136
+ debug(msg = 'ydoc.prosemirror') {
137
+ console.log(msg, this.type.toString());
138
+ }
139
+ _isLocalCursorInView() {
140
+ if (!this.prosemirrorView?.hasFocus())
141
+ return false;
142
+ if (environment.isBrowser && this._domSelectionInView === false) {
143
+ // Calculate the domSelectionInView and clear by next tick after all events are finished
144
+ eventloop.timeout(0, () => {
145
+ this._domSelectionInView = false;
146
+ });
147
+ this._domSelectionInView = this._isDomSelectionInView();
148
+ }
149
+ return this._domSelectionInView;
150
+ }
151
+ _isDomSelectionInView() {
152
+ const selection = this.prosemirrorView?.root?.getSelection(); // https://stackoverflow.com/questions/62054839/shadowroot-getselection
153
+ if (!selection || selection.anchorNode == null)
154
+ return false;
155
+ const range = dom.doc.createRange(); // https://github.com/yjs/y-prosemirror/pull/193
156
+ range.setStart(selection.anchorNode, selection.anchorOffset);
157
+ range.setEnd(selection.focusNode, selection.focusOffset);
158
+ // This is a workaround for an edgecase where getBoundingClientRect will
159
+ // return zero values if the selection is collapsed at the start of a newline
160
+ // see reference here: https://stackoverflow.com/a/59780954
161
+ const rects = range.getClientRects();
162
+ if (rects.length === 0) {
163
+ // probably buggy newline behavior, explicitly select the node contents
164
+ if (range.startContainer && range.collapsed) {
165
+ range.selectNodeContents(range.startContainer);
166
+ }
167
+ }
168
+ const bounding = range.getBoundingClientRect();
169
+ const documentElement = dom.doc.documentElement;
170
+ return bounding.bottom >= 0 && bounding.right >= 0 &&
171
+ bounding.left <=
172
+ (globalThis.innerWidth || documentElement.clientWidth || 0) &&
173
+ bounding.top <= (globalThis.innerHeight || documentElement.clientHeight || 0);
174
+ }
175
+ renderSnapshot(snapshot, prevSnapshot) {
176
+ if (!prevSnapshot) {
177
+ prevSnapshot = Y.createSnapshot(Y.createDeleteSet(), new Map());
178
+ }
179
+ if (!this.prosemirrorView) {
180
+ return;
181
+ }
182
+ const state = this.prosemirrorView.state;
183
+ const tr = state.tr.setMeta('addToHistory', false)
184
+ .setMeta(ySyncPluginKey, { snapshot, prevSnapshot });
185
+ this.prosemirrorView.dispatch(tr);
186
+ }
187
+ unrenderSnapshot() {
188
+ this.mapping.clear();
189
+ this.mux(() => {
190
+ if (!this.prosemirrorView) {
191
+ return;
192
+ }
193
+ const state = this.prosemirrorView.state;
194
+ const children = this.type.toArray();
195
+ const fragmentContent = children.map((t) => createNodeFromYElement(t, state.schema, this)).filter((n) => n !== null);
196
+ const _tr = state.tr.setMeta('addToHistory', false);
197
+ const tr = _tr.replace(0, state.doc.content.size, new PModel.Slice(PModel.Fragment.from(fragmentContent), 0, 0));
198
+ tr.setMeta(ySyncPluginKey, {
199
+ snapshot: undefined,
200
+ prevSnapshot: undefined,
201
+ });
202
+ if (this.prosemirrorView) {
203
+ this.prosemirrorView.dispatch(tr);
204
+ }
205
+ });
206
+ }
207
+ _forceRerender() {
208
+ this.mapping.clear();
209
+ this.mux(() => {
210
+ if (!this.prosemirrorView) {
211
+ return;
212
+ }
213
+ const state = this.prosemirrorView.state;
214
+ // If this is a forced rerender, this might neither happen as a pm change nor within a Yjs
215
+ // transaction. Then the "before selection" doesn't exist. In this case, we need to create a
216
+ // relative position before replacing content. Fixes #126
217
+ const sel = this._beforeTransactionSelection !== null
218
+ ? null
219
+ : state.selection;
220
+ const fragmentContent = this.type.toArray().map((t) => createNodeFromYElement(t, state.schema, this)).filter((n) => n !== null);
221
+ const _tr = state.tr.setMeta('addToHistory', false);
222
+ const tr = _tr.replace(0, state.doc.content.size, new PModel.Slice(PModel.Fragment.from(fragmentContent), 0, 0));
223
+ if (sel) {
224
+ /**
225
+ * If the Prosemirror document we just created from this.type is
226
+ * smaller than the previous document, the selection might be
227
+ * out of bound, which would make Prosemirror throw an error.
228
+ */
229
+ const clampedAnchor = math.min(math.max(sel.anchor, 0), tr.doc.content.size);
230
+ const clampedHead = math.min(math.max(sel.head, 0), tr.doc.content.size);
231
+ tr.setSelection(TextSelection.create(tr.doc, clampedAnchor, clampedHead));
232
+ }
233
+ if (this.prosemirrorView) {
234
+ this.prosemirrorView.dispatch(tr.setMeta(ySyncPluginKey, { isChangeOrigin: true, binding: this })
235
+ .setMeta(remoteSelectionPluginKey, { isChangeOrigin: true }));
236
+ }
237
+ });
238
+ }
239
+ _renderSnapshot(snapshot, prevSnapshot, pluginState) {
240
+ if (!snapshot) {
241
+ snapshot = Y.snapshot(this.ydoc);
242
+ }
243
+ /**
244
+ * The document that contains the full history of this document.
245
+ */
246
+ let historyDoc = this.ydoc;
247
+ let historyType = this.type;
248
+ if (snapshot instanceof Uint8Array || prevSnapshot instanceof Uint8Array) {
249
+ if (!(snapshot instanceof Uint8Array) ||
250
+ !(prevSnapshot instanceof Uint8Array)) {
251
+ // expected both snapshots to be v2 updates
252
+ error.unexpectedCase();
253
+ }
254
+ historyDoc = new Y.Doc({ gc: false });
255
+ Y.applyUpdateV2(historyDoc, prevSnapshot);
256
+ prevSnapshot = Y.snapshot(historyDoc);
257
+ Y.applyUpdateV2(historyDoc, snapshot);
258
+ snapshot = Y.snapshot(historyDoc);
259
+ if (historyType._item === null) {
260
+ /**
261
+ * If is a root type, we need to find the root key in the initial document
262
+ * and use it to get the history type.
263
+ */
264
+ const share = this.ydoc.share;
265
+ const rootKey = Array.from(share.keys()).find((key) => share.get(key) === this.type);
266
+ historyType = historyDoc.getXmlFragment(rootKey);
267
+ }
268
+ else {
269
+ /**
270
+ * If it is a sub type, we use the item id to find the history type.
271
+ */
272
+ const historyStructs = historyDoc.store.clients.get(historyType._item.id.client) ?? [];
273
+ const itemIndex = Y.findIndexSS(historyStructs, historyType._item.id.clock);
274
+ if (historyStructs[itemIndex] instanceof Y.GC) {
275
+ throw new Error('Incorrect type Y.GC');
276
+ }
277
+ const item = historyStructs[itemIndex];
278
+ const content = item.content;
279
+ historyType = content.type;
280
+ }
281
+ }
282
+ // clear mapping because we are going to rerender
283
+ this.mapping.clear();
284
+ this.mux(() => {
285
+ historyDoc.transact((transaction) => {
286
+ if (!this.prosemirrorView) {
287
+ return;
288
+ }
289
+ const state = this.prosemirrorView.state;
290
+ // before rendering, we are going to sanitize ops and split deleted ops
291
+ // if they were deleted by seperate users.
292
+ const pud = pluginState.permanentUserData;
293
+ if (pud) {
294
+ pud.dss.forEach((ds) => {
295
+ Y.iterateDeletedStructs(transaction, ds, (_item) => { });
296
+ });
297
+ }
298
+ const computeYChange = (type, id) => {
299
+ const user = pud
300
+ ? (type === 'added'
301
+ ? pud.getUserByClientId(id.client)
302
+ : pud.getUserByDeletedId(id))
303
+ : undefined;
304
+ return {
305
+ user,
306
+ type,
307
+ color: getUserColor(pluginState.colorMapping, pluginState.colors, user),
308
+ };
309
+ };
310
+ // Create document fragment and render
311
+ const fragmentContent = Y.typeListToArraySnapshot(historyType, new Y.Snapshot(prevSnapshot.ds, snapshot.sv)).map((t) => {
312
+ if (!t._item.deleted || isVisible(t._item, snapshot) ||
313
+ isVisible(t._item, prevSnapshot)) {
314
+ return createNodeFromYElement(t, state.schema, { mapping: new Map(), isOMark: new Map() }, snapshot, prevSnapshot, computeYChange);
315
+ }
316
+ else {
317
+ // No need to render elements that are not visible by either snapshot.
318
+ // If a client adds and deletes content in the same snapshot the element is not visible by either snapshot.
319
+ return null;
320
+ }
321
+ }).filter((n) => n !== null);
322
+ const tr = state.tr.setMeta('addToHistory', false);
323
+ tr.replace(0, state.doc.content.size, new PModel.Slice(PModel.Fragment.from(fragmentContent), 0, 0));
324
+ tr.setMeta(ySyncPluginKey, { isChangeOrigin: true }),
325
+ this.prosemirrorView.dispatch(tr);
326
+ }, ySyncPluginKey);
327
+ });
328
+ }
329
+ yXmlChanged(events, transaction) {
330
+ if (!this.prosemirrorView) {
331
+ return;
332
+ }
333
+ const syncState = ySyncPluginKey.getState(this.prosemirrorView.state);
334
+ if (events.length === 0 || syncState.snapshot ||
335
+ syncState.prevSnapshot) {
336
+ // drop out if snapshot is active
337
+ this.renderSnapshot(syncState.snapshot, syncState.prevSnapshot);
338
+ return;
339
+ }
340
+ this.mux(() => {
341
+ if (!this.prosemirrorView) {
342
+ return;
343
+ }
344
+ const state = this.prosemirrorView.state;
345
+ const delType = (_, type) => this.mapping.delete(type);
346
+ Y.iterateDeletedStructs(transaction, transaction.deleteSet, (struct) => {
347
+ if (struct.constructor === Y.Item) {
348
+ const type = struct.content.type;
349
+ type && this.mapping.delete(type);
350
+ }
351
+ });
352
+ transaction.changed.forEach(delType);
353
+ transaction.changedParentTypes.forEach(delType);
354
+ const fragmentContent = this.type.toArray().map((t) => createNodeIfNotExists(t, state.schema, this)).filter((n) => n !== null);
355
+ const tr = state.tr.replace(0, this.prosemirrorView.state.doc.content.size, new PModel.Slice(PModel.Fragment.from(fragmentContent), 0, 0));
356
+ if (this._beforeTransactionSelection) {
357
+ restoreRelativeSelection(tr, this._beforeTransactionSelection, this);
358
+ }
359
+ tr.setMeta(ySyncPluginKey, {
360
+ isChangeOrigin: true,
361
+ isUndoRedoOperation: transaction.origin instanceof Y.UndoManager,
362
+ });
363
+ if (this.beforeTransactionSelection !== null && this._isLocalCursorInView()) {
364
+ tr.scrollIntoView();
365
+ }
366
+ this.prosemirrorView.dispatch(tr);
367
+ });
368
+ }
369
+ prosemirrorChanged(doc) {
370
+ this.ydoc.transact(() => {
371
+ if (!this.prosemirrorView) {
372
+ throw new Error('Prosemirror changed without view?!');
373
+ }
374
+ updateYFragment(this.ydoc, this.type, doc, this);
375
+ this._beforeTransactionSelection = getRelativeSelection(this, this.prosemirrorView.state);
376
+ }, ySyncPluginKey);
377
+ }
378
+ /**
379
+ * View is ready to listen to changes. Register observers.
380
+ */
381
+ initView(prosemirrorView) {
382
+ if (this.prosemirrorView) {
383
+ this.destroy();
384
+ }
385
+ this.prosemirrorView = prosemirrorView;
386
+ this.ydoc.on('beforeAllTransactions', this.beforeAllTransactions);
387
+ this.ydoc.on('afterAllTransactions', this.afterAllTransactions);
388
+ this.type.observeDeep(this._observeFunction);
389
+ }
390
+ destroy() {
391
+ this.type.unobserveDeep(this._observeFunction);
392
+ this.ydoc.off('beforeAllTransactions', this.beforeAllTransactions);
393
+ this.ydoc.off('afterAllTransactions', this.afterAllTransactions);
394
+ if (!this.prosemirrorView) {
395
+ return;
396
+ }
397
+ this.prosemirrorView = undefined;
398
+ // {
399
+ // state: new EditorState(),
400
+ // dispatch: () => false,
401
+ // fake: true
402
+ // };
403
+ }
404
+ }
405
+ //# sourceMappingURL=ProsemirrorBinding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProsemirrorBinding.js","sourceRoot":"","sources":["../src/ProsemirrorBinding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import * as PModel from 'prosemirror-model';
2
+ import { Schema } from 'prosemirror-model';
3
+ import * as Y from 'yjs';
4
+ import type { BindingMetadata } from './ProsemirrorBinding.js';
5
+ export declare const attributesToMarks: (attrs: {
6
+ [s: string]: any;
7
+ }, schema: Schema) => PModel.Mark[];
8
+ export declare const createNodeIfNotExists: (el: Y.XmlElement, schema: PModel.Schema, meta: BindingMetadata, snapshot?: Y.Snapshot, prevSnapshot?: Y.Snapshot, computeYChange?: (arg0: "removed" | "added", arg1: Y.ID) => any) => PModel.Node | null;
9
+ export declare const createNodeFromYElement: (el: Y.XmlElement, schema: Schema, meta: BindingMetadata, snapshot?: Y.Snapshot, prevSnapshot?: Y.Snapshot, computeYChange?: (arg0: "removed" | "added", arg1: Y.ID) => any) => PModel.Node | null;
10
+ //# sourceMappingURL=createNodeFromYElement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createNodeFromYElement.d.ts","sourceRoot":"","sources":["../src/createNodeFromYElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAQ,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAK/D,eAAO,MAAM,iBAAiB,GAC5B,OAAO;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC3B,QAAQ,MAAM,kBAQf,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,IAAI,CAAC,CAAC,UAAU,EAChB,QAAQ,MAAM,CAAC,MAAM,EACrB,MAAM,eAAe,EACrB,WAAW,CAAC,CAAC,QAAQ,EACrB,eAAe,CAAC,CAAC,QAAQ,EACzB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,KAC9D,MAAM,CAAC,IAAI,GAAG,IAiBhB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,IAAI,CAAC,CAAC,UAAU,EAChB,QAAQ,MAAM,EACd,MAAM,eAAe,EACrB,WAAW,CAAC,CAAC,QAAQ,EACrB,eAAe,CAAC,CAAC,QAAQ,EACzB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,KAC9D,MAAM,CAAC,IAAI,GAAG,IA2FhB,CAAC"}
@@ -0,0 +1,123 @@
1
+ import * as Y from 'yjs';
2
+ import { ySyncPluginKey } from './keys.js';
3
+ import { isVisible } from './utils.js';
4
+ import { yattr2markname } from './updateYFragment.js';
5
+ export const attributesToMarks = (attrs, schema) => {
6
+ const marks = [];
7
+ for (const markName in attrs) {
8
+ // remove hashes if necessary
9
+ marks.push(schema.mark(yattr2markname(markName), attrs[markName]));
10
+ }
11
+ return marks;
12
+ };
13
+ export const createNodeIfNotExists = (el, schema, meta, snapshot, prevSnapshot, computeYChange) => {
14
+ const node = meta.mapping.get(el);
15
+ if (node === undefined) {
16
+ if (el instanceof Y.XmlElement) {
17
+ return createNodeFromYElement(el, schema, meta, snapshot, prevSnapshot, computeYChange);
18
+ }
19
+ else {
20
+ throw new Error('methodUnimplemented'); // we are currently not handling hooks
21
+ }
22
+ }
23
+ return node;
24
+ };
25
+ export const createNodeFromYElement = (el, schema, meta, snapshot, prevSnapshot, computeYChange) => {
26
+ const children = [];
27
+ const createChildren = (type) => {
28
+ if (type instanceof Y.XmlElement) {
29
+ const n = createNodeIfNotExists(type, schema, meta, snapshot, prevSnapshot, computeYChange);
30
+ if (n !== null) {
31
+ children.push(n);
32
+ }
33
+ }
34
+ else {
35
+ // If the next ytext exists and was created by us, move the content to the current ytext.
36
+ // This is a fix for #160 -- duplication of characters when two Y.Text exist next to each
37
+ // other.
38
+ const nextytext = type._item?.right?.content?.type;
39
+ if (nextytext &&
40
+ nextytext instanceof Y.Text && nextytext._item &&
41
+ !nextytext._item.deleted &&
42
+ nextytext._item.id.client === nextytext.doc.clientID) {
43
+ type.applyDelta([
44
+ { retain: type.length },
45
+ ...nextytext.toDelta(),
46
+ ]);
47
+ nextytext.doc.transact((tr) => {
48
+ nextytext._item?.delete(tr);
49
+ });
50
+ }
51
+ // now create the prosemirror text nodes
52
+ const ns = createTextNodesFromYText(type, schema, meta, snapshot, prevSnapshot, computeYChange);
53
+ if (ns !== null) {
54
+ ns.forEach((textchild) => {
55
+ if (textchild !== null) {
56
+ children.push(textchild);
57
+ }
58
+ });
59
+ }
60
+ }
61
+ };
62
+ if (snapshot === undefined || prevSnapshot === undefined) {
63
+ for (const item of el.toArray()) {
64
+ if (item instanceof Y.XmlHook) {
65
+ continue;
66
+ }
67
+ createChildren(item);
68
+ }
69
+ }
70
+ else {
71
+ Y.typeListToArraySnapshot(el, new Y.Snapshot(prevSnapshot.ds, snapshot.sv))
72
+ .forEach(createChildren);
73
+ }
74
+ try {
75
+ const attrs = el.getAttributes(snapshot);
76
+ const item = el._item;
77
+ if (snapshot !== undefined) {
78
+ const item = el._item;
79
+ if (!isVisible(item, snapshot)) {
80
+ attrs.ychange = computeYChange
81
+ ? computeYChange('removed', item.id)
82
+ : { type: 'removed' };
83
+ }
84
+ else if (!isVisible(item, prevSnapshot)) {
85
+ attrs.ychange = computeYChange
86
+ ? computeYChange('added', item.id)
87
+ : { type: 'added' };
88
+ }
89
+ }
90
+ const node = schema.node(el.nodeName, attrs, children);
91
+ meta.mapping.set(el, node);
92
+ return node;
93
+ }
94
+ catch (e) {
95
+ // an error occured while creating the node. This is probably a result of a concurrent action.
96
+ el.doc?.transact((transaction) => {
97
+ el._item?.delete(transaction);
98
+ }, ySyncPluginKey);
99
+ meta.mapping.delete(el);
100
+ return null;
101
+ }
102
+ };
103
+ /**
104
+ * @private
105
+ */
106
+ const createTextNodesFromYText = (text, schema, _meta, snapshot, prevSnapshot, computeYChange) => {
107
+ const nodes = [];
108
+ const deltas = text.toDelta(snapshot, prevSnapshot, computeYChange);
109
+ try {
110
+ for (let i = 0; i < deltas.length; i++) {
111
+ const delta = deltas[i];
112
+ nodes.push(schema.text(delta.insert, attributesToMarks(delta.attributes, schema)));
113
+ }
114
+ }
115
+ catch (e) {
116
+ text.doc?.transact((transaction) => {
117
+ text._item?.delete(transaction);
118
+ }, ySyncPluginKey);
119
+ return null;
120
+ }
121
+ return nodes;
122
+ };
123
+ //# sourceMappingURL=createNodeFromYElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createNodeFromYElement.js","sourceRoot":"","sources":["../src/createNodeFromYElement.ts"],"names":[],"mappings":"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"}
package/esm/debug.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ import * as Y from 'yjs';
2
+ interface YDebugConfig {
3
+ STRIKE: string;
4
+ RESET: string;
5
+ DIM: string;
6
+ isVisible: (item: Y.Item | null) => boolean;
7
+ renderDeleted: (text: string, item: Y.Item | null) => string;
8
+ }
9
+ export declare function debugYNode(node: Y.AbstractType<any>, config?: YDebugConfig): string;
10
+ export declare function debugYDoc(ydoc: Y.Doc, config?: YDebugConfig): string;
11
+ export declare function debugYDocSnapshot(ydoc: Y.Doc, snapshot: Y.Snapshot): string;
12
+ export {};
13
+ //# sourceMappingURL=debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,OAAO,CAAC;IAC5C,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,MAAM,CAAC;CAC9D;AA2BD,wBAAgB,UAAU,CACxB,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,EACzB,MAAM,GAAE,YAA+B,GACtC,MAAM,CAkJR;AAED,wBAAgB,SAAS,CACvB,IAAI,EAAE,CAAC,CAAC,GAAG,EACX,MAAM,GAAE,YAA+B,GACtC,MAAM,CASR;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,CAAC,CAAC,GAAG,EACX,QAAQ,EAAE,CAAC,CAAC,QAAQ,UAcrB"}