@kerebron/extension-yjs 0.5.3 → 0.5.4

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
package/esm/debug.js ADDED
@@ -0,0 +1,147 @@
1
+ import * as Y from 'yjs';
2
+ import { isVisible } from './utils.js';
3
+ const YAnsiDebugConfig = {
4
+ STRIKE: '\x1b[9m',
5
+ RESET: '\x1b[0m',
6
+ DIM: '\x1b[2m',
7
+ isVisible: () => true,
8
+ renderDeleted(text, item) {
9
+ if (item?.deleted) {
10
+ return this.STRIKE + text + this.RESET;
11
+ }
12
+ return text;
13
+ },
14
+ };
15
+ function indentText(text, indent = 0) {
16
+ const indentStr = ' '.repeat(indent);
17
+ const lines = text.split('\n');
18
+ const indentedLines = lines.map((line) => indentStr + line);
19
+ if (indentedLines[indentedLines.length - 1] === indentStr) {
20
+ indentedLines[indentedLines.length - 1] = '';
21
+ }
22
+ return indentedLines.join('\n');
23
+ }
24
+ export function debugYNode(node, config = YAnsiDebugConfig) {
25
+ const { STRIKE, RESET, DIM, } = config;
26
+ const yDebugClient = (item) => {
27
+ if (!item) {
28
+ return '';
29
+ }
30
+ const { client, clock } = item.id;
31
+ return `\t${DIM}[${client}:${clock}]${RESET}`;
32
+ };
33
+ let retVal = '';
34
+ if (node instanceof Y.XmlText) {
35
+ if (!config.isVisible(node._item)) {
36
+ return '';
37
+ }
38
+ retVal += config.renderDeleted('XmlText', node._item) + ' {';
39
+ retVal += yDebugClient(node._item);
40
+ retVal += '\n';
41
+ let text = '';
42
+ for (let item = node._start; item; item = item.right) {
43
+ if (!config.isVisible(item)) {
44
+ continue;
45
+ }
46
+ if (item.content instanceof Y.ContentString) {
47
+ const content = item.content?.str || '';
48
+ text += config.renderDeleted(content, item);
49
+ text += yDebugClient(node._item);
50
+ text += '\n';
51
+ }
52
+ else {
53
+ text += config.renderDeleted(`Unhandled debug: ${typeof item.content}`, item);
54
+ text += yDebugClient(node._item);
55
+ text += '\n';
56
+ }
57
+ }
58
+ retVal += indentText(text, 1);
59
+ retVal += `}\n`;
60
+ return retVal;
61
+ }
62
+ if (node instanceof Y.XmlElement) {
63
+ if (!config.isVisible(node._item)) {
64
+ return '';
65
+ }
66
+ retVal += config.renderDeleted(`<${node.nodeName}>`, node._item);
67
+ retVal += yDebugClient(node._item);
68
+ retVal += '\n';
69
+ retVal += indentText(node.toArray()
70
+ .map((child) => {
71
+ return debugYNode(child, config);
72
+ })
73
+ .join('\n'), 1);
74
+ retVal += config.renderDeleted(`</${node.nodeName}>`, node._item);
75
+ return retVal;
76
+ }
77
+ if (node instanceof Y.XmlFragment) {
78
+ if (!config.isVisible(node._item)) {
79
+ return '';
80
+ }
81
+ retVal += config.renderDeleted(`Y.XmlFragment`, node._item);
82
+ retVal += yDebugClient(node._item);
83
+ retVal += '\n';
84
+ retVal += indentText(node.toArray()
85
+ .map((child) => {
86
+ return debugYNode(child, config);
87
+ })
88
+ .join('\n'), 1);
89
+ return retVal;
90
+ }
91
+ if (node instanceof Y.Map) {
92
+ if (!config.isVisible(node._item)) {
93
+ return '';
94
+ }
95
+ const entries = Array.from(node.entries());
96
+ retVal += config.renderDeleted(`Y.Map(${entries.length})`, node._item);
97
+ retVal += yDebugClient(node._item);
98
+ retVal += '\n';
99
+ retVal += indentText(entries
100
+ .map(([key, value]) => '- ' + key + ': ' + debugYNode(value, config))
101
+ .join('\n'), 1);
102
+ return retVal;
103
+ }
104
+ if (node instanceof Y.Array) {
105
+ if (!config.isVisible(node._item)) {
106
+ return '';
107
+ }
108
+ const arr = node;
109
+ retVal += config.renderDeleted(`Y.Array(${arr._length})`, node._item);
110
+ retVal += yDebugClient(node._item);
111
+ retVal += '\n';
112
+ retVal += indentText(arr
113
+ .map((value) => '- ' + debugYNode(value, config))
114
+ .join('\n'), 1);
115
+ return retVal;
116
+ }
117
+ if ('object' !== typeof node) {
118
+ retVal += '' + node;
119
+ return retVal;
120
+ }
121
+ throw new Error('Unhandled debug class: ' + node.constructor.name);
122
+ }
123
+ export function debugYDoc(ydoc, config = YAnsiDebugConfig) {
124
+ const entries = Array.from(ydoc.share.entries());
125
+ let retVal = '';
126
+ for (const [key, value] of entries) {
127
+ retVal += `${key}: `;
128
+ retVal += debugYNode(value, config);
129
+ retVal += '\n';
130
+ }
131
+ return (`Y.Doc(${entries.length})\n` + indentText(retVal, 1)).trim();
132
+ }
133
+ export function debugYDocSnapshot(ydoc, snapshot) {
134
+ const retVal = debugYDoc(ydoc, {
135
+ ...YAnsiDebugConfig,
136
+ isVisible: (item) => {
137
+ if (!item)
138
+ return true;
139
+ return isVisible(item, snapshot);
140
+ },
141
+ renderDeleted(text) {
142
+ return text;
143
+ },
144
+ });
145
+ return ('Y.Snapshot\n' + indentText(retVal, 1)).trim();
146
+ }
147
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"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"}
package/esm/keys.d.ts CHANGED
@@ -1,11 +1,8 @@
1
1
  import { PluginKey } from 'prosemirror-state';
2
- import { UndoPluginState } from './yUndoPlugin.js';
3
- /**
4
- * The unique prosemirror plugin key for syncPlugin
5
- */
6
- export declare const ySyncPluginKey: PluginKey<any>;
7
- /**
8
- * The unique prosemirror plugin key for undoPlugin
9
- */
2
+ import { type UndoPluginState } from './yUndoPlugin.js';
3
+ import { type YSyncPluginState } from './ySyncPlugin.js';
4
+ import { type YPositionPluginState } from './yPositionPlugin.js';
5
+ export declare const ySyncPluginKey: PluginKey<YSyncPluginState>;
6
+ export declare const yPositionPluginKey: PluginKey<YPositionPluginState>;
10
7
  export declare const yUndoPluginKey: PluginKey<UndoPluginState>;
11
8
  //# sourceMappingURL=keys.d.ts.map
package/esm/keys.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,eAAO,MAAM,cAAc,gBAA0B,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,CAAC,eAAe,CAErD,CAAC"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,eAAO,MAAM,cAAc,6BAA4C,CAAC;AAExE,eAAO,MAAM,kBAAkB,iCAE9B,CAAC;AAEF,eAAO,MAAM,cAAc,4BAE1B,CAAC"}
package/esm/keys.js CHANGED
@@ -1,10 +1,5 @@
1
1
  import { PluginKey } from 'prosemirror-state';
2
- /**
3
- * The unique prosemirror plugin key for syncPlugin
4
- */
5
2
  export const ySyncPluginKey = new PluginKey('y-sync');
6
- /**
7
- * The unique prosemirror plugin key for undoPlugin
8
- */
3
+ export const yPositionPluginKey = new PluginKey('yjs-position');
9
4
  export const yUndoPluginKey = new PluginKey('y-undo');
10
5
  //# sourceMappingURL=keys.js.map
package/esm/keys.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEtD;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAA+B,IAAI,SAAS,CACrE,QAAQ,CACT,CAAC"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAK9C,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,SAAS,CAAmB,QAAQ,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,SAAS,CAC7C,cAAc,CACf,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,SAAS,CACzC,QAAQ,CACT,CAAC"}
package/esm/lib.d.ts CHANGED
@@ -4,12 +4,11 @@ import { type Node } from 'prosemirror-model';
4
4
  /**
5
5
  * Either a node if type is YXmlElement or an Array of text nodes if YXmlText
6
6
  */
7
- type ProsemirrorMapping = Map<Y.AbstractType<any>, Node>;
7
+ export type ProsemirrorMapping = Map<Y.AbstractType<any>, Node | Array<Node>>;
8
8
  export declare const setMeta: (view: EditorView, key: any, value: any) => void;
9
9
  /**
10
10
  * Transforms a Prosemirror based absolute position to a Yjs Cursor (relative position in the Yjs model).
11
11
  */
12
12
  export declare const absolutePositionToRelativePosition: (pos: number, type: Y.XmlFragment, mapping: ProsemirrorMapping) => any;
13
13
  export declare const relativePositionToAbsolutePosition: (yDoc: Y.Doc, documentType: Y.XmlFragment, relPos: any, mapping: ProsemirrorMapping) => null | number;
14
- export {};
15
14
  //# sourceMappingURL=lib.d.ts.map
package/esm/lib.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAI9C;;GAEG;AACH,KAAK,kBAAkB,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AA2BzD,eAAO,MAAM,OAAO,GAAI,MAAM,UAAU,EAAE,QAAG,EAAE,UAAK,SAYnD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kCAAkC,GAC7C,KAAK,MAAM,EACX,MAAM,CAAC,CAAC,WAAW,EACnB,SAAS,kBAAkB,KAC1B,GA+FF,CAAC;AAaF,eAAO,MAAM,kCAAkC,GAC7C,MAAM,CAAC,CAAC,GAAG,EACX,cAAc,CAAC,CAAC,WAAW,EAC3B,QAAQ,GAAG,EACX,SAAS,kBAAkB,KAC1B,IAAI,GAAG,MA2DT,CAAC"}
1
+ {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAI9C;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AA2B9E,eAAO,MAAM,OAAO,GAAI,MAAM,UAAU,EAAE,QAAG,EAAE,UAAK,SAYnD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kCAAkC,GAC7C,KAAK,MAAM,EACX,MAAM,CAAC,CAAC,WAAW,EACnB,SAAS,kBAAkB,KAC1B,GA+FF,CAAC;AAaF,eAAO,MAAM,kCAAkC,GAC7C,MAAM,CAAC,CAAC,GAAG,EACX,cAAc,CAAC,CAAC,WAAW,EAC3B,QAAQ,GAAG,EACX,SAAS,kBAAkB,KAC1B,IAAI,GAAG,MAmET,CAAC"}
package/esm/lib.js CHANGED
@@ -151,7 +151,12 @@ export const relativePositionToAbsolutePosition = (yDoc, documentType, relPos, m
151
151
  }
152
152
  else {
153
153
  const node = mapping.get(t);
154
- pos += node?.nodeSize || 0;
154
+ if (Array.isArray(node)) {
155
+ pos += node.reduce((prev, curr) => prev + curr?.nodeSize || 0, 0);
156
+ }
157
+ else {
158
+ pos += node?.nodeSize || 0;
159
+ }
155
160
  }
156
161
  }
157
162
  n = n.right;
@@ -178,7 +183,12 @@ export const relativePositionToAbsolutePosition = (yDoc, documentType, relPos, m
178
183
  }
179
184
  else {
180
185
  const node = mapping.get(contentType);
181
- pos += node?.nodeSize || 0;
186
+ if (Array.isArray(node)) {
187
+ pos += node.reduce((prev, curr) => prev + curr?.nodeSize || 0, 0);
188
+ }
189
+ else {
190
+ pos += node?.nodeSize || 0;
191
+ }
182
192
  }
183
193
  }
184
194
  n = n.right;
package/esm/lib.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import * as Y from 'yjs';
2
+ import { Node } from 'prosemirror-model';
3
+ import type { BindingMetadata } from './ProsemirrorBinding.js';
4
+ import { TransactFunc } from './ySyncPlugin.js';
5
+ export declare const yattr2markname: (attrName: string) => string;
6
+ /**
7
+ * Update a yDom node by syncing the current content of the prosemirror node.
8
+ *
9
+ * This is a y-prosemirror internal feature that you can use at your own risk.
10
+ *
11
+ * @private
12
+ * @unstable
13
+ */
14
+ export declare const updateYFragment: (ydoc: {
15
+ transact: TransactFunc<void>;
16
+ }, yDomFragment: Y.XmlFragment, pNode: Node, meta: BindingMetadata) => void;
17
+ //# sourceMappingURL=updateYFragment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateYFragment.d.ts","sourceRoot":"","sources":["../src/updateYFragment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAQ,IAAI,EAAU,MAAM,mBAAmB,CAAC;AAMvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,WACM,CAAC;AA8PtD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM;IAAE,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,CAAA;CAAE,EACtC,cAAc,CAAC,CAAC,WAAW,EAC3B,OAAO,IAAI,EACX,MAAM,eAAe,SA+JtB,CAAC"}
@@ -0,0 +1,333 @@
1
+ import * as Y from 'yjs';
2
+ import { simpleDiff } from 'lib0/diff';
3
+ import { ySyncPluginKey } from './keys.js';
4
+ import * as utils from './utils.js';
5
+ const hashedMarkNameRegex = /(.*)(--[a-zA-Z0-9+/=]{8})$/;
6
+ export const yattr2markname = (attrName) => hashedMarkNameRegex.exec(attrName)?.[1] ?? attrName;
7
+ const marksToAttributes = (marks, meta) => {
8
+ const pattrs = {};
9
+ marks.forEach((mark) => {
10
+ if (mark.type.name !== 'ychange') {
11
+ let isOverlapping = true;
12
+ if (!meta.isOMark.has(mark.type.name)) {
13
+ meta.isOMark.set(mark.type.name, !mark.type.excludes(mark.type));
14
+ isOverlapping = false;
15
+ }
16
+ pattrs[isOverlapping
17
+ ? `${mark.type.name}--${utils.hashOfJSON(mark.toJSON())}`
18
+ : mark.type.name] = mark.attrs;
19
+ }
20
+ });
21
+ return pattrs;
22
+ };
23
+ const equalYTextPText = (ytext, ptexts) => {
24
+ const delta = ytext.toDelta();
25
+ return delta.length === ptexts.length &&
26
+ delta.every((d, i) => d.insert === /** @type {any} */ (ptexts[i]).text &&
27
+ Object.keys(d.attributes || {}).length === ptexts[i].marks.length &&
28
+ Object.entries(d.attributes || {}).every(([yattrname, attr]) => {
29
+ const markname = yattr2markname(yattrname);
30
+ const pmarks = ptexts[i].marks;
31
+ return equalAttrs(attr, pmarks.find((mark) => mark.type.name === markname)?.attrs);
32
+ }));
33
+ };
34
+ const ytextTrans = (ytext) => {
35
+ let str = '';
36
+ let n = ytext._start;
37
+ const nAttrs = {};
38
+ while (n !== null) {
39
+ if (!n.deleted) {
40
+ if (n.countable && n.content instanceof Y.ContentString) {
41
+ str += n.content.str;
42
+ }
43
+ else if (n.content instanceof Y.ContentFormat) {
44
+ nAttrs[n.content.key] = null;
45
+ }
46
+ }
47
+ n = n.right;
48
+ }
49
+ return {
50
+ str,
51
+ nAttrs,
52
+ };
53
+ };
54
+ const normalizePNodeContent = (pnode) => {
55
+ const c = pnode.content.content;
56
+ const res = [];
57
+ for (let i = 0; i < c.length; i++) {
58
+ const n = c[i];
59
+ if (n.isText) {
60
+ const textNodes = [];
61
+ for (let tnode = c[i]; i < c.length && tnode.isText; tnode = c[++i]) {
62
+ textNodes.push(tnode);
63
+ }
64
+ i--;
65
+ res.push(textNodes);
66
+ }
67
+ else {
68
+ res.push(n);
69
+ }
70
+ }
71
+ return res;
72
+ };
73
+ /**
74
+ * @private
75
+ */
76
+ const createTypeFromTextNodes = (nodes, meta) => {
77
+ const type = new Y.XmlText();
78
+ const delta = nodes.map((node) => ({
79
+ insert: node.text,
80
+ attributes: marksToAttributes(node.marks, meta),
81
+ }));
82
+ type.applyDelta(delta);
83
+ meta.mapping.set(type, nodes);
84
+ return type;
85
+ };
86
+ function createTypeFromTextOrElementNode(node, meta) {
87
+ return (Array.isArray(node)
88
+ ? createTypeFromTextNodes(node, meta)
89
+ : createTypeFromElementNode(node, meta));
90
+ }
91
+ const isObject = (val) => typeof val === 'object' && val !== null;
92
+ const equalAttrs = (pattrs, yattrs) => {
93
+ const keys = Object.keys(pattrs).filter((key) => pattrs[key] !== null);
94
+ let eq = keys.length ===
95
+ (yattrs == null
96
+ ? 0
97
+ : Object.keys(yattrs).filter((key) => yattrs[key] !== null).length);
98
+ for (let i = 0; i < keys.length && eq; i++) {
99
+ const key = keys[i];
100
+ const l = pattrs[key];
101
+ const r = yattrs[key];
102
+ eq = key === 'ychange' || l === r ||
103
+ (isObject(l) && isObject(r) && equalAttrs(l, r));
104
+ }
105
+ return eq;
106
+ };
107
+ /**
108
+ * @private
109
+ */
110
+ const createTypeFromElementNode = (node, meta) => {
111
+ const type = new Y.XmlElement(node.type.name);
112
+ for (const key in node.attrs) {
113
+ const val = node.attrs[key];
114
+ if ('undefined' !== typeof val && val !== null && key !== 'ychange') {
115
+ type.setAttribute(key, val);
116
+ }
117
+ }
118
+ const pChildren = normalizePNodeContent(node);
119
+ const yElems = pChildren.map((n) => createTypeFromTextOrElementNode(n, meta));
120
+ type.insert(0, yElems);
121
+ meta.mapping.set(type, node);
122
+ return type;
123
+ };
124
+ const mappedIdentity = (mapped, pcontent) => mapped === pcontent ||
125
+ (mapped instanceof Array && pcontent instanceof Array &&
126
+ mapped.length === pcontent.length &&
127
+ mapped.every((a, i) => pcontent[i] === a));
128
+ const computeChildEqualityFactor = (ytype, pnode, meta) => {
129
+ const yChildren = ytype.toArray();
130
+ const pChildren = normalizePNodeContent(pnode);
131
+ const pChildCnt = pChildren.length;
132
+ const yChildCnt = yChildren.length;
133
+ const minCnt = Math.min(yChildCnt, pChildCnt);
134
+ let left = 0;
135
+ let right = 0;
136
+ let foundMappedChild = false;
137
+ for (; left < minCnt; left++) {
138
+ const leftY = yChildren[left];
139
+ const leftP = pChildren[left];
140
+ if (mappedIdentity(meta.mapping.get(leftY), leftP)) {
141
+ foundMappedChild = true; // definite (good) match!
142
+ }
143
+ else if (!equalYTypePNode(leftY, leftP)) {
144
+ break;
145
+ }
146
+ }
147
+ for (; left + right < minCnt; right++) {
148
+ const rightY = yChildren[yChildCnt - right - 1];
149
+ const rightP = pChildren[pChildCnt - right - 1];
150
+ if (mappedIdentity(meta.mapping.get(rightY), rightP)) {
151
+ foundMappedChild = true;
152
+ }
153
+ else if (!equalYTypePNode(rightY, rightP)) {
154
+ break;
155
+ }
156
+ }
157
+ return {
158
+ equalityFactor: left + right,
159
+ foundMappedChild,
160
+ };
161
+ };
162
+ const matchNodeName = (yElement, pNode) => !(pNode instanceof Array) && yElement.nodeName === pNode.type.name;
163
+ const equalYTypePNode = (ytype, pnode) => {
164
+ if (ytype instanceof Y.XmlElement && !(pnode instanceof Array) &&
165
+ matchNodeName(ytype, pnode)) {
166
+ const normalizedContent = normalizePNodeContent(pnode);
167
+ return ytype._length === normalizedContent.length &&
168
+ equalAttrs(ytype.getAttributes(), pnode.attrs) &&
169
+ ytype.toArray().every((ychild, i) => equalYTypePNode(ychild, normalizedContent[i]));
170
+ }
171
+ return ytype instanceof Y.XmlText && pnode instanceof Array &&
172
+ equalYTextPText(ytype, pnode);
173
+ };
174
+ /**
175
+ * @todo test this more
176
+ */
177
+ const updateYText = (ytext, ptexts, meta) => {
178
+ meta.mapping.set(ytext, ptexts);
179
+ const { nAttrs, str } = ytextTrans(ytext);
180
+ const content = ptexts.map((p) => ({
181
+ insert: p.text || '',
182
+ attributes: Object.assign({}, nAttrs, marksToAttributes(p.marks, meta)),
183
+ }));
184
+ const { insert, remove, index } = simpleDiff(str, content.map((c) => c.insert).join(''));
185
+ ytext.delete(index, remove);
186
+ ytext.insert(index, insert);
187
+ ytext.applyDelta(content.map((c) => ({ retain: c.insert.length, attributes: c.attributes })));
188
+ };
189
+ /**
190
+ * Update a yDom node by syncing the current content of the prosemirror node.
191
+ *
192
+ * This is a y-prosemirror internal feature that you can use at your own risk.
193
+ *
194
+ * @private
195
+ * @unstable
196
+ */
197
+ export const updateYFragment = (ydoc, yDomFragment, pNode, meta) => {
198
+ if (yDomFragment instanceof Y.XmlElement &&
199
+ yDomFragment.nodeName !== pNode.type.name) {
200
+ throw new Error('node name mismatch!');
201
+ }
202
+ meta.mapping.set(yDomFragment, pNode);
203
+ // update attributes
204
+ if (yDomFragment instanceof Y.XmlElement) {
205
+ const yDomAttrs = yDomFragment.getAttributes();
206
+ const pAttrs = pNode.attrs;
207
+ for (const key in pAttrs) {
208
+ if (pAttrs[key] !== null) {
209
+ if (yDomAttrs[key] !== pAttrs[key] && key !== 'ychange') {
210
+ yDomFragment.setAttribute(key, pAttrs[key]);
211
+ }
212
+ }
213
+ else {
214
+ yDomFragment.removeAttribute(key);
215
+ }
216
+ }
217
+ // remove all keys that are no longer in pAttrs
218
+ for (const key in yDomAttrs) {
219
+ if (pAttrs[key] === undefined) {
220
+ yDomFragment.removeAttribute(key);
221
+ }
222
+ }
223
+ }
224
+ // update children
225
+ const pChildren = normalizePNodeContent(pNode);
226
+ const pChildCnt = pChildren.length;
227
+ const yChildren = yDomFragment.toArray();
228
+ const yChildCnt = yChildren.length;
229
+ const minCnt = Math.min(pChildCnt, yChildCnt);
230
+ let left = 0;
231
+ let right = 0;
232
+ // find number of matching elements from left
233
+ for (; left < minCnt; left++) {
234
+ const leftY = yChildren[left];
235
+ const leftP = pChildren[left];
236
+ if (!mappedIdentity(meta.mapping.get(leftY), leftP)) {
237
+ if (equalYTypePNode(leftY, leftP)) {
238
+ // update mapping
239
+ meta.mapping.set(leftY, leftP);
240
+ }
241
+ else {
242
+ break;
243
+ }
244
+ }
245
+ }
246
+ // find number of matching elements from right
247
+ for (; right + left < minCnt; right++) {
248
+ const rightY = yChildren[yChildCnt - right - 1];
249
+ const rightP = pChildren[pChildCnt - right - 1];
250
+ if (!mappedIdentity(meta.mapping.get(rightY), rightP)) {
251
+ if (equalYTypePNode(rightY, rightP)) {
252
+ // update mapping
253
+ meta.mapping.set(rightY, rightP);
254
+ }
255
+ else {
256
+ break;
257
+ }
258
+ }
259
+ }
260
+ ydoc.transact(() => {
261
+ // try to compare and update
262
+ while (yChildCnt - left - right > 0 && pChildCnt - left - right > 0) {
263
+ const leftY = yChildren[left];
264
+ const leftP = pChildren[left];
265
+ const rightY = yChildren[yChildCnt - right - 1];
266
+ const rightP = pChildren[pChildCnt - right - 1];
267
+ if (leftY instanceof Y.XmlText && leftP instanceof Array) {
268
+ if (!equalYTextPText(leftY, leftP)) {
269
+ updateYText(leftY, leftP, meta);
270
+ }
271
+ left += 1;
272
+ }
273
+ else {
274
+ let updateLeft = leftY instanceof Y.XmlElement &&
275
+ matchNodeName(leftY, leftP);
276
+ let updateRight = rightY instanceof Y.XmlElement &&
277
+ matchNodeName(rightY, rightP);
278
+ if (updateLeft && updateRight) {
279
+ // decide which element to update
280
+ const equalityLeft = computeChildEqualityFactor(leftY, leftP, meta);
281
+ const equalityRight = computeChildEqualityFactor(rightY, rightP, meta);
282
+ if (equalityLeft.foundMappedChild && !equalityRight.foundMappedChild) {
283
+ updateRight = false;
284
+ }
285
+ else if (!equalityLeft.foundMappedChild && equalityRight.foundMappedChild) {
286
+ updateLeft = false;
287
+ }
288
+ else if (equalityLeft.equalityFactor < equalityRight.equalityFactor) {
289
+ updateLeft = false;
290
+ }
291
+ else {
292
+ updateRight = false;
293
+ }
294
+ }
295
+ if (updateLeft) {
296
+ updateYFragment(ydoc, leftY, leftP, meta);
297
+ left += 1;
298
+ }
299
+ else if (updateRight) {
300
+ updateYFragment(ydoc, rightY, rightP, meta);
301
+ right += 1;
302
+ }
303
+ else {
304
+ meta.mapping.delete(yDomFragment.get(left));
305
+ yDomFragment.delete(left, 1);
306
+ yDomFragment.insert(left, [
307
+ createTypeFromTextOrElementNode(leftP, meta),
308
+ ]);
309
+ left += 1;
310
+ }
311
+ }
312
+ }
313
+ const yDelLen = yChildCnt - left - right;
314
+ if (yChildCnt === 1 && pChildCnt === 0 && yChildren[0] instanceof Y.XmlText) {
315
+ meta.mapping.delete(yChildren[0]);
316
+ // Edge case handling https://github.com/yjs/y-prosemirror/issues/108
317
+ // Only delete the content of the Y.Text to retain remote changes on the same Y.Text object
318
+ yChildren[0].delete(0, yChildren[0].length);
319
+ }
320
+ else if (yDelLen > 0) {
321
+ yDomFragment.slice(left, left + yDelLen).forEach((type) => meta.mapping.delete(type));
322
+ yDomFragment.delete(left, yDelLen);
323
+ }
324
+ if (left + right < pChildCnt) {
325
+ const ins = [];
326
+ for (let i = left; i < pChildCnt - right; i++) {
327
+ ins.push(createTypeFromTextOrElementNode(pChildren[i], meta));
328
+ }
329
+ yDomFragment.insert(left, ins);
330
+ }
331
+ }, ySyncPluginKey);
332
+ };
333
+ //# sourceMappingURL=updateYFragment.js.map