@liveblocks/prosemirror 3.21.0-exp7 → 3.21.0-exp9
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/dist/remote.cjs +27 -0
- package/dist/remote.cjs.map +1 -1
- package/dist/remote.js +27 -0
- package/dist/remote.js.map +1 -1
- package/dist/version.cjs +2 -2
- package/dist/version.cjs.map +1 -1
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +3 -3
package/dist/remote.cjs
CHANGED
|
@@ -73,6 +73,26 @@ function getStructurallyCoveredNodes(updates) {
|
|
|
73
73
|
}
|
|
74
74
|
return coveredNodes;
|
|
75
75
|
}
|
|
76
|
+
function getCurrentTextForLiveText(doc, index, text) {
|
|
77
|
+
const range = findNodeRangeForLiveText(index, text);
|
|
78
|
+
if (range === void 0) {
|
|
79
|
+
return void 0;
|
|
80
|
+
}
|
|
81
|
+
return doc.textBetween(range.from, range.to);
|
|
82
|
+
}
|
|
83
|
+
function isTextAlreadyApplied(doc, index, update) {
|
|
84
|
+
if (update.updates.some((change) => change.type === "format")) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
return getCurrentTextForLiveText(doc, index, update.node) === update.node.toString();
|
|
88
|
+
}
|
|
89
|
+
function isLiveblocksNodeAlreadyApplied(range) {
|
|
90
|
+
const [jsonNode] = schema.liveblocksProsemirrorNodeToJsonNodes(range.node);
|
|
91
|
+
if (jsonNode === void 0) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
return JSON.stringify(range.pmNode.toJSON()) === JSON.stringify(jsonNode);
|
|
95
|
+
}
|
|
76
96
|
function applyRemoteStorageUpdates(view, liveRoot, updates) {
|
|
77
97
|
if (updates.length === 0) {
|
|
78
98
|
return { type: "unsupported" };
|
|
@@ -87,6 +107,10 @@ function applyRemoteStorageUpdates(view, liveRoot, updates) {
|
|
|
87
107
|
if (!(update.node instanceof client.LiveText)) {
|
|
88
108
|
return { type: "unsupported" };
|
|
89
109
|
}
|
|
110
|
+
const initialIndex = mapping.buildLiveblocksTreeIndex(tr.doc, liveRoot);
|
|
111
|
+
if (isTextAlreadyApplied(tr.doc, initialIndex, update)) {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
90
114
|
for (const change of update.updates) {
|
|
91
115
|
const index = mapping.buildLiveblocksTreeIndex(tr.doc, liveRoot);
|
|
92
116
|
const range = mapping.findTextRangeByLiveText(index, update.node);
|
|
@@ -135,6 +159,9 @@ function applyRemoteStorageUpdates(view, liveRoot, updates) {
|
|
|
135
159
|
if (range === void 0) {
|
|
136
160
|
return { type: "unsupported" };
|
|
137
161
|
}
|
|
162
|
+
if (isLiveblocksNodeAlreadyApplied(range)) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
138
165
|
if (change.type === "insert") {
|
|
139
166
|
if (!isLiveblocksProsemirrorNode(change.item)) {
|
|
140
167
|
return { type: "unsupported" };
|
package/dist/remote.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.cjs","sources":["../src/remote.ts"],"sourcesContent":["import {\n type Json,\n type JsonObject,\n LiveObject,\n LiveText,\n type StorageUpdate,\n} from \"@liveblocks/client\";\nimport { Fragment, type MarkType, type Schema, Slice } from \"prosemirror-model\";\nimport type { Transaction } from \"prosemirror-state\";\nimport type { EditorView } from \"prosemirror-view\";\n\nimport {\n buildLiveblocksTreeIndex,\n findListRangeByLiveList,\n findNodeRangeByLiveNode,\n findTextRangeByLiveText,\n getChildPosition,\n} from \"./mapping\";\nimport {\n attributesToMarks,\n getLiveblocksNodeContent,\n getLiveblocksNodeText,\n type LiveblocksProsemirrorNode,\n liveblocksProsemirrorNodeToJsonNodes,\n} from \"./schema\";\n\ntype RemoteApplyResult =\n | {\n type: \"applied\";\n tr: Transaction;\n }\n | {\n type: \"unsupported\";\n };\n\nfunction getMarkType(schema: Schema, type: string): MarkType | undefined {\n return schema.marks[type];\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isLiveblocksProsemirrorNode(\n value: unknown\n): value is LiveblocksProsemirrorNode {\n return (\n value instanceof LiveObject &&\n typeof value.get(\"id\") === \"string\" &&\n typeof value.get(\"type\") === \"string\"\n );\n}\n\nfunction getLiveblocksNodeAttrs(\n node: LiveblocksProsemirrorNode\n): JsonObject | undefined {\n const attrs = node.get(\"attrs\");\n return isJsonObject(attrs) ? attrs : undefined;\n}\n\nfunction createSliceFromLiveblocksNode(\n schema: Schema,\n node: LiveblocksProsemirrorNode\n): Slice {\n const nodes = liveblocksProsemirrorNodeToJsonNodes(node).map((jsonNode) =>\n schema.nodeFromJSON(jsonNode)\n );\n\n return new Slice(Fragment.fromArray(nodes), 0, 0);\n}\n\nfunction applyMarksFromAttributes(\n tr: Transaction,\n schema: Schema,\n from: number,\n to: number,\n attributes: Record<string, Json | null>\n): void {\n const marks = attributesToMarks({ ...attributes });\n\n for (const mark of marks ?? []) {\n const markType = getMarkType(schema, mark.type);\n if (markType !== undefined) {\n tr.addMark(from, to, markType.create(mark.attrs));\n }\n }\n\n if (marks === undefined) {\n tr.removeMark(from, to);\n }\n}\n\nfunction findNodeRangeForLiveText(\n index: ReturnType<typeof buildLiveblocksTreeIndex>,\n text: LiveText\n) {\n return index.nodeRanges.find(\n (range) => getLiveblocksNodeText(range.node) === text\n );\n}\n\nfunction collectCoveredDescendants(\n node: LiveblocksProsemirrorNode,\n coveredNodes: Set<unknown>\n): void {\n coveredNodes.add(node);\n\n const text = getLiveblocksNodeText(node);\n if (text !== undefined) {\n coveredNodes.add(text);\n }\n\n const content = getLiveblocksNodeContent(node);\n if (content === undefined) {\n return;\n }\n\n coveredNodes.add(content);\n for (let index = 0; index < content.length; index++) {\n const child = content.get(index);\n if (child !== undefined) {\n collectCoveredDescendants(child, coveredNodes);\n }\n }\n}\n\nfunction getStructurallyCoveredNodes(\n updates: readonly StorageUpdate[]\n): Set<unknown> {\n const coveredNodes = new Set<unknown>();\n\n for (const update of updates) {\n if (update.type !== \"LiveList\") {\n continue;\n }\n\n for (const change of update.updates) {\n if (\n (change.type === \"insert\" ||\n change.type === \"set\" ||\n change.type === \"move\") &&\n isLiveblocksProsemirrorNode(change.item)\n ) {\n collectCoveredDescendants(change.item, coveredNodes);\n }\n }\n }\n\n return coveredNodes;\n}\n\nexport function applyRemoteStorageUpdates(\n view: EditorView,\n liveRoot: LiveblocksProsemirrorNode,\n updates: readonly StorageUpdate[]\n): RemoteApplyResult {\n if (updates.length === 0) {\n return { type: \"unsupported\" };\n }\n\n let tr = view.state.tr;\n const structurallyCoveredNodes = getStructurallyCoveredNodes(updates);\n\n for (const update of updates) {\n if (structurallyCoveredNodes.has(update.node)) {\n continue;\n }\n\n if (update.type === \"LiveText\") {\n if (!(update.node instanceof LiveText)) {\n return { type: \"unsupported\" };\n }\n\n for (const change of update.updates) {\n const index = buildLiveblocksTreeIndex(tr.doc, liveRoot);\n const range = findTextRangeByLiveText(index, update.node);\n\n if (range === undefined && change.type === \"delete\") {\n const wrapperRange = findNodeRangeForLiveText(index, update.node);\n if (wrapperRange !== undefined) {\n const from = wrapperRange.from + change.index;\n tr = tr.delete(from, from + change.length);\n continue;\n }\n\n return { type: \"unsupported\" };\n }\n\n if (range === undefined) {\n return { type: \"unsupported\" };\n }\n\n const from = range.from + change.index - range.liveOffset;\n\n if (change.type === \"insert\") {\n tr = tr.insertText(change.text, from);\n if (change.attributes !== undefined) {\n applyMarksFromAttributes(\n tr,\n view.state.schema,\n from,\n from + change.text.length,\n change.attributes\n );\n }\n } else if (change.type === \"delete\") {\n tr = tr.delete(from, from + change.length);\n } else {\n applyMarksFromAttributes(\n tr,\n view.state.schema,\n from,\n from + change.length,\n change.attributes\n );\n }\n }\n\n continue;\n }\n\n if (update.type === \"LiveList\") {\n for (const change of update.updates) {\n const index = buildLiveblocksTreeIndex(tr.doc, liveRoot);\n const range = findListRangeByLiveList(index, update.node);\n if (range === undefined) {\n return { type: \"unsupported\" };\n }\n\n if (change.type === \"insert\") {\n if (!isLiveblocksProsemirrorNode(change.item)) {\n return { type: \"unsupported\" };\n }\n\n const pos = getChildPosition(range.pmNode, range.from, change.index);\n if (pos === undefined) {\n return { type: \"unsupported\" };\n }\n\n tr = tr.replace(\n pos,\n pos,\n createSliceFromLiveblocksNode(view.state.schema, change.item)\n );\n } else if (change.type === \"delete\") {\n const from = getChildPosition(range.pmNode, range.from, change.index);\n const to = getChildPosition(\n range.pmNode,\n range.from,\n change.index + 1\n );\n if (from === undefined || to === undefined) {\n return { type: \"unsupported\" };\n }\n\n tr = tr.delete(from, to);\n } else if (change.type === \"set\") {\n if (!isLiveblocksProsemirrorNode(change.item)) {\n return { type: \"unsupported\" };\n }\n\n const from = getChildPosition(range.pmNode, range.from, change.index);\n const to = getChildPosition(\n range.pmNode,\n range.from,\n change.index + 1\n );\n if (from === undefined || to === undefined) {\n return { type: \"unsupported\" };\n }\n\n tr = tr.replace(\n from,\n to,\n createSliceFromLiveblocksNode(view.state.schema, change.item)\n );\n } else {\n if (!isLiveblocksProsemirrorNode(change.item)) {\n return { type: \"unsupported\" };\n }\n\n const from = getChildPosition(\n range.pmNode,\n range.from,\n change.previousIndex\n );\n const to = getChildPosition(\n range.pmNode,\n range.from,\n change.previousIndex + 1\n );\n const rawInsertPos = getChildPosition(\n range.pmNode,\n range.from,\n change.index > change.previousIndex\n ? change.index + 1\n : change.index\n );\n if (\n from === undefined ||\n to === undefined ||\n rawInsertPos === undefined\n ) {\n return { type: \"unsupported\" };\n }\n\n const slice = createSliceFromLiveblocksNode(\n view.state.schema,\n change.item\n );\n tr = tr.delete(from, to);\n const insertPos = tr.mapping.map(rawInsertPos, -1);\n tr = tr.replace(insertPos, insertPos, slice);\n }\n }\n\n continue;\n }\n\n if (update.type === \"LiveObject\") {\n if (!isLiveblocksProsemirrorNode(update.node)) {\n return { type: \"unsupported\" };\n }\n\n const attrUpdate = update.updates.attrs;\n if (attrUpdate === undefined) {\n return { type: \"unsupported\" };\n }\n\n const index = buildLiveblocksTreeIndex(tr.doc, liveRoot);\n const range = findNodeRangeByLiveNode(index, update.node);\n if (range === undefined || range.pmNode.type.name === \"doc\") {\n return { type: \"unsupported\" };\n }\n\n tr = tr.setNodeMarkup(\n range.from,\n undefined,\n attrUpdate.type === \"delete\"\n ? null\n : getLiveblocksNodeAttrs(update.node)\n );\n\n continue;\n }\n\n return { type: \"unsupported\" };\n }\n\n return { type: \"applied\", tr };\n}\n\nexport function applyRemoteLiveTextUpdates(\n view: EditorView,\n liveRoot: LiveblocksProsemirrorNode,\n updates: readonly StorageUpdate[]\n): RemoteApplyResult {\n if (!updates.every((update) => update.type === \"LiveText\")) {\n return { type: \"unsupported\" };\n }\n\n return applyRemoteStorageUpdates(view, liveRoot, updates);\n}\n"],"names":["LiveObject","schema","liveblocksProsemirrorNodeToJsonNodes","Slice","Fragment","attributesToMarks","getLiveblocksNodeText","getLiveblocksNodeContent","LiveText","buildLiveblocksTreeIndex","findTextRangeByLiveText","from","findListRangeByLiveList","getChildPosition","findNodeRangeByLiveNode"],"mappings":";;;;;;;AAmCA,SAAS,WAAA,CAAY,QAAgB,IAAoC,EAAA;AACvE,EAAO,OAAA,MAAA,CAAO,MAAM,IAAI,CAAA,CAAA;AAC1B,CAAA;AAEA,SAAS,aAAa,KAAqC,EAAA;AACzD,EAAO,OAAA,OAAO,UAAU,QAAY,IAAA,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA,CAAA;AAC5E,CAAA;AAEA,SAAS,4BACP,KACoC,EAAA;AACpC,EAAA,OACE,KAAiB,YAAAA,iBAAA,IACjB,OAAO,KAAA,CAAM,GAAI,CAAA,IAAI,CAAM,KAAA,QAAA,IAC3B,OAAO,KAAA,CAAM,GAAI,CAAA,MAAM,CAAM,KAAA,QAAA,CAAA;AAEjC,CAAA;AAEA,SAAS,uBACP,IACwB,EAAA;AACxB,EAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAC9B,EAAO,OAAA,YAAA,CAAa,KAAK,CAAA,GAAI,KAAQ,GAAA,KAAA,CAAA,CAAA;AACvC,CAAA;AAEA,SAAS,6BAAA,CACPC,UACA,IACO,EAAA;AACP,EAAM,MAAA,KAAA,GAAQC,2CAAqC,CAAA,IAAI,CAAE,CAAA,GAAA;AAAA,IAAI,CAAC,QAAA,KAC5DD,QAAO,CAAA,YAAA,CAAa,QAAQ,CAAA;AAAA,GAC9B,CAAA;AAEA,EAAA,OAAO,IAAIE,sBAAM,CAAAC,yBAAA,CAAS,UAAU,KAAK,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAClD,CAAA;AAEA,SAAS,wBACP,CAAA,EAAA,EACAH,QACA,EAAA,IAAA,EACA,IACA,UACM,EAAA;AACN,EAAA,MAAM,KAAQ,GAAAI,wBAAA,CAAkB,EAAE,GAAG,YAAY,CAAA,CAAA;AAEjD,EAAW,KAAA,MAAA,IAAA,IAAQ,KAAS,IAAA,EAAI,EAAA;AAC9B,IAAA,MAAM,QAAW,GAAA,WAAA,CAAYJ,QAAQ,EAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAC9C,IAAA,IAAI,aAAa,KAAW,CAAA,EAAA;AAC1B,MAAA,EAAA,CAAG,QAAQ,IAAM,EAAA,EAAA,EAAI,SAAS,MAAO,CAAA,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AAAA,KAClD;AAAA,GACF;AAEA,EAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,IAAG,EAAA,CAAA,UAAA,CAAW,MAAM,EAAE,CAAA,CAAA;AAAA,GACxB;AACF,CAAA;AAEA,SAAS,wBAAA,CACP,OACA,IACA,EAAA;AACA,EAAA,OAAO,MAAM,UAAW,CAAA,IAAA;AAAA,IACtB,CAAC,KAAA,KAAUK,4BAAsB,CAAA,KAAA,CAAM,IAAI,CAAM,KAAA,IAAA;AAAA,GACnD,CAAA;AACF,CAAA;AAEA,SAAS,yBAAA,CACP,MACA,YACM,EAAA;AACN,EAAA,YAAA,CAAa,IAAI,IAAI,CAAA,CAAA;AAErB,EAAM,MAAA,IAAA,GAAOA,6BAAsB,IAAI,CAAA,CAAA;AACvC,EAAA,IAAI,SAAS,KAAW,CAAA,EAAA;AACtB,IAAA,YAAA,CAAa,IAAI,IAAI,CAAA,CAAA;AAAA,GACvB;AAEA,EAAM,MAAA,OAAA,GAAUC,gCAAyB,IAAI,CAAA,CAAA;AAC7C,EAAA,IAAI,YAAY,KAAW,CAAA,EAAA;AACzB,IAAA,OAAA;AAAA,GACF;AAEA,EAAA,YAAA,CAAa,IAAI,OAAO,CAAA,CAAA;AACxB,EAAA,KAAA,IAAS,KAAQ,GAAA,CAAA,EAAG,KAAQ,GAAA,OAAA,CAAQ,QAAQ,KAAS,EAAA,EAAA;AACnD,IAAM,MAAA,KAAA,GAAQ,OAAQ,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAC/B,IAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,MAAA,yBAAA,CAA0B,OAAO,YAAY,CAAA,CAAA;AAAA,KAC/C;AAAA,GACF;AACF,CAAA;AAEA,SAAS,4BACP,OACc,EAAA;AACd,EAAM,MAAA,YAAA,uBAAmB,GAAa,EAAA,CAAA;AAEtC,EAAA,KAAA,MAAW,UAAU,OAAS,EAAA;AAC5B,IAAI,IAAA,MAAA,CAAO,SAAS,UAAY,EAAA;AAC9B,MAAA,SAAA;AAAA,KACF;AAEA,IAAW,KAAA,MAAA,MAAA,IAAU,OAAO,OAAS,EAAA;AACnC,MAAA,IAAA,CACG,MAAO,CAAA,IAAA,KAAS,QACf,IAAA,MAAA,CAAO,IAAS,KAAA,KAAA,IAChB,MAAO,CAAA,IAAA,KAAS,MAClB,KAAA,2BAAA,CAA4B,MAAO,CAAA,IAAI,CACvC,EAAA;AACA,QAA0B,yBAAA,CAAA,MAAA,CAAO,MAAM,YAAY,CAAA,CAAA;AAAA,OACrD;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,YAAA,CAAA;AACT,CAAA;AAEgB,SAAA,yBAAA,CACd,IACA,EAAA,QAAA,EACA,OACmB,EAAA;AACnB,EAAI,IAAA,OAAA,CAAQ,WAAW,CAAG,EAAA;AACxB,IAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,GAC/B;AAEA,EAAI,IAAA,EAAA,GAAK,KAAK,KAAM,CAAA,EAAA,CAAA;AACpB,EAAM,MAAA,wBAAA,GAA2B,4BAA4B,OAAO,CAAA,CAAA;AAEpE,EAAA,KAAA,MAAW,UAAU,OAAS,EAAA;AAC5B,IAAA,IAAI,wBAAyB,CAAA,GAAA,CAAI,MAAO,CAAA,IAAI,CAAG,EAAA;AAC7C,MAAA,SAAA;AAAA,KACF;AAEA,IAAI,IAAA,MAAA,CAAO,SAAS,UAAY,EAAA;AAC9B,MAAI,IAAA,EAAE,MAAO,CAAA,IAAA,YAAgBC,eAAW,CAAA,EAAA;AACtC,QAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,OAC/B;AAEA,MAAW,KAAA,MAAA,MAAA,IAAU,OAAO,OAAS,EAAA;AACnC,QAAA,MAAM,KAAQ,GAAAC,gCAAA,CAAyB,EAAG,CAAA,GAAA,EAAK,QAAQ,CAAA,CAAA;AACvD,QAAA,MAAM,KAAQ,GAAAC,+BAAA,CAAwB,KAAO,EAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AAExD,QAAA,IAAI,KAAU,KAAA,KAAA,CAAA,IAAa,MAAO,CAAA,IAAA,KAAS,QAAU,EAAA;AACnD,UAAA,MAAM,YAAe,GAAA,wBAAA,CAAyB,KAAO,EAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AAChE,UAAA,IAAI,iBAAiB,KAAW,CAAA,EAAA;AAC9B,YAAMC,MAAAA,KAAAA,GAAO,YAAa,CAAA,IAAA,GAAO,MAAO,CAAA,KAAA,CAAA;AACxC,YAAA,EAAA,GAAK,EAAG,CAAA,MAAA,CAAOA,KAAMA,EAAAA,KAAAA,GAAO,OAAO,MAAM,CAAA,CAAA;AACzC,YAAA,SAAA;AAAA,WACF;AAEA,UAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,SAC/B;AAEA,QAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,UAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,SAC/B;AAEA,QAAA,MAAM,IAAO,GAAA,KAAA,CAAM,IAAO,GAAA,MAAA,CAAO,QAAQ,KAAM,CAAA,UAAA,CAAA;AAE/C,QAAI,IAAA,MAAA,CAAO,SAAS,QAAU,EAAA;AAC5B,UAAA,EAAA,GAAK,EAAG,CAAA,UAAA,CAAW,MAAO,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AACpC,UAAI,IAAA,MAAA,CAAO,eAAe,KAAW,CAAA,EAAA;AACnC,YAAA,wBAAA;AAAA,cACE,EAAA;AAAA,cACA,KAAK,KAAM,CAAA,MAAA;AAAA,cACX,IAAA;AAAA,cACA,IAAA,GAAO,OAAO,IAAK,CAAA,MAAA;AAAA,cACnB,MAAO,CAAA,UAAA;AAAA,aACT,CAAA;AAAA,WACF;AAAA,SACF,MAAA,IAAW,MAAO,CAAA,IAAA,KAAS,QAAU,EAAA;AACnC,UAAA,EAAA,GAAK,EAAG,CAAA,MAAA,CAAO,IAAM,EAAA,IAAA,GAAO,OAAO,MAAM,CAAA,CAAA;AAAA,SACpC,MAAA;AACL,UAAA,wBAAA;AAAA,YACE,EAAA;AAAA,YACA,KAAK,KAAM,CAAA,MAAA;AAAA,YACX,IAAA;AAAA,YACA,OAAO,MAAO,CAAA,MAAA;AAAA,YACd,MAAO,CAAA,UAAA;AAAA,WACT,CAAA;AAAA,SACF;AAAA,OACF;AAEA,MAAA,SAAA;AAAA,KACF;AAEA,IAAI,IAAA,MAAA,CAAO,SAAS,UAAY,EAAA;AAC9B,MAAW,KAAA,MAAA,MAAA,IAAU,OAAO,OAAS,EAAA;AACnC,QAAA,MAAM,KAAQ,GAAAF,gCAAA,CAAyB,EAAG,CAAA,GAAA,EAAK,QAAQ,CAAA,CAAA;AACvD,QAAA,MAAM,KAAQ,GAAAG,+BAAA,CAAwB,KAAO,EAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AACxD,QAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,UAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,SAC/B;AAEA,QAAI,IAAA,MAAA,CAAO,SAAS,QAAU,EAAA;AAC5B,UAAA,IAAI,CAAC,2BAAA,CAA4B,MAAO,CAAA,IAAI,CAAG,EAAA;AAC7C,YAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,WAC/B;AAEA,UAAA,MAAM,MAAMC,wBAAiB,CAAA,KAAA,CAAM,QAAQ,KAAM,CAAA,IAAA,EAAM,OAAO,KAAK,CAAA,CAAA;AACnE,UAAA,IAAI,QAAQ,KAAW,CAAA,EAAA;AACrB,YAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,WAC/B;AAEA,UAAA,EAAA,GAAK,EAAG,CAAA,OAAA;AAAA,YACN,GAAA;AAAA,YACA,GAAA;AAAA,YACA,6BAA8B,CAAA,IAAA,CAAK,KAAM,CAAA,MAAA,EAAQ,OAAO,IAAI,CAAA;AAAA,WAC9D,CAAA;AAAA,SACF,MAAA,IAAW,MAAO,CAAA,IAAA,KAAS,QAAU,EAAA;AACnC,UAAA,MAAM,OAAOA,wBAAiB,CAAA,KAAA,CAAM,QAAQ,KAAM,CAAA,IAAA,EAAM,OAAO,KAAK,CAAA,CAAA;AACpE,UAAA,MAAM,EAAK,GAAAA,wBAAA;AAAA,YACT,KAAM,CAAA,MAAA;AAAA,YACN,KAAM,CAAA,IAAA;AAAA,YACN,OAAO,KAAQ,GAAA,CAAA;AAAA,WACjB,CAAA;AACA,UAAI,IAAA,IAAA,KAAS,KAAa,CAAA,IAAA,EAAA,KAAO,KAAW,CAAA,EAAA;AAC1C,YAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,WAC/B;AAEA,UAAK,EAAA,GAAA,EAAA,CAAG,MAAO,CAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAAA,SACzB,MAAA,IAAW,MAAO,CAAA,IAAA,KAAS,KAAO,EAAA;AAChC,UAAA,IAAI,CAAC,2BAAA,CAA4B,MAAO,CAAA,IAAI,CAAG,EAAA;AAC7C,YAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,WAC/B;AAEA,UAAA,MAAM,OAAOA,wBAAiB,CAAA,KAAA,CAAM,QAAQ,KAAM,CAAA,IAAA,EAAM,OAAO,KAAK,CAAA,CAAA;AACpE,UAAA,MAAM,EAAK,GAAAA,wBAAA;AAAA,YACT,KAAM,CAAA,MAAA;AAAA,YACN,KAAM,CAAA,IAAA;AAAA,YACN,OAAO,KAAQ,GAAA,CAAA;AAAA,WACjB,CAAA;AACA,UAAI,IAAA,IAAA,KAAS,KAAa,CAAA,IAAA,EAAA,KAAO,KAAW,CAAA,EAAA;AAC1C,YAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,WAC/B;AAEA,UAAA,EAAA,GAAK,EAAG,CAAA,OAAA;AAAA,YACN,IAAA;AAAA,YACA,EAAA;AAAA,YACA,6BAA8B,CAAA,IAAA,CAAK,KAAM,CAAA,MAAA,EAAQ,OAAO,IAAI,CAAA;AAAA,WAC9D,CAAA;AAAA,SACK,MAAA;AACL,UAAA,IAAI,CAAC,2BAAA,CAA4B,MAAO,CAAA,IAAI,CAAG,EAAA;AAC7C,YAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,WAC/B;AAEA,UAAA,MAAM,IAAO,GAAAA,wBAAA;AAAA,YACX,KAAM,CAAA,MAAA;AAAA,YACN,KAAM,CAAA,IAAA;AAAA,YACN,MAAO,CAAA,aAAA;AAAA,WACT,CAAA;AACA,UAAA,MAAM,EAAK,GAAAA,wBAAA;AAAA,YACT,KAAM,CAAA,MAAA;AAAA,YACN,KAAM,CAAA,IAAA;AAAA,YACN,OAAO,aAAgB,GAAA,CAAA;AAAA,WACzB,CAAA;AACA,UAAA,MAAM,YAAe,GAAAA,wBAAA;AAAA,YACnB,KAAM,CAAA,MAAA;AAAA,YACN,KAAM,CAAA,IAAA;AAAA,YACN,OAAO,KAAQ,GAAA,MAAA,CAAO,gBAClB,MAAO,CAAA,KAAA,GAAQ,IACf,MAAO,CAAA,KAAA;AAAA,WACb,CAAA;AACA,UAAA,IACE,IAAS,KAAA,KAAA,CAAA,IACT,EAAO,KAAA,KAAA,CAAA,IACP,iBAAiB,KACjB,CAAA,EAAA;AACA,YAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,WAC/B;AAEA,UAAA,MAAM,KAAQ,GAAA,6BAAA;AAAA,YACZ,KAAK,KAAM,CAAA,MAAA;AAAA,YACX,MAAO,CAAA,IAAA;AAAA,WACT,CAAA;AACA,UAAK,EAAA,GAAA,EAAA,CAAG,MAAO,CAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AACvB,UAAA,MAAM,SAAY,GAAA,EAAA,CAAG,OAAQ,CAAA,GAAA,CAAI,cAAc,CAAE,CAAA,CAAA,CAAA;AACjD,UAAA,EAAA,GAAK,EAAG,CAAA,OAAA,CAAQ,SAAW,EAAA,SAAA,EAAW,KAAK,CAAA,CAAA;AAAA,SAC7C;AAAA,OACF;AAEA,MAAA,SAAA;AAAA,KACF;AAEA,IAAI,IAAA,MAAA,CAAO,SAAS,YAAc,EAAA;AAChC,MAAA,IAAI,CAAC,2BAAA,CAA4B,MAAO,CAAA,IAAI,CAAG,EAAA;AAC7C,QAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,OAC/B;AAEA,MAAM,MAAA,UAAA,GAAa,OAAO,OAAQ,CAAA,KAAA,CAAA;AAClC,MAAA,IAAI,eAAe,KAAW,CAAA,EAAA;AAC5B,QAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,OAC/B;AAEA,MAAA,MAAM,KAAQ,GAAAJ,gCAAA,CAAyB,EAAG,CAAA,GAAA,EAAK,QAAQ,CAAA,CAAA;AACvD,MAAA,MAAM,KAAQ,GAAAK,+BAAA,CAAwB,KAAO,EAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AACxD,MAAA,IAAI,UAAU,KAAa,CAAA,IAAA,KAAA,CAAM,MAAO,CAAA,IAAA,CAAK,SAAS,KAAO,EAAA;AAC3D,QAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,OAC/B;AAEA,MAAA,EAAA,GAAK,EAAG,CAAA,aAAA;AAAA,QACN,KAAM,CAAA,IAAA;AAAA,QACN,KAAA,CAAA;AAAA,QACA,WAAW,IAAS,KAAA,QAAA,GAChB,IACA,GAAA,sBAAA,CAAuB,OAAO,IAAI,CAAA;AAAA,OACxC,CAAA;AAEA,MAAA,SAAA;AAAA,KACF;AAEA,IAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,GAC/B;AAEA,EAAO,OAAA,EAAE,IAAM,EAAA,SAAA,EAAW,EAAG,EAAA,CAAA;AAC/B,CAAA;AAEgB,SAAA,0BAAA,CACd,IACA,EAAA,QAAA,EACA,OACmB,EAAA;AACnB,EAAI,IAAA,CAAC,QAAQ,KAAM,CAAA,CAAC,WAAW,MAAO,CAAA,IAAA,KAAS,UAAU,CAAG,EAAA;AAC1D,IAAO,OAAA,EAAE,MAAM,aAAc,EAAA,CAAA;AAAA,GAC/B;AAEA,EAAO,OAAA,yBAAA,CAA0B,IAAM,EAAA,QAAA,EAAU,OAAO,CAAA,CAAA;AAC1D;;;;;"}
|
|
1
|
+
{"version":3,"file":"remote.cjs","sources":["../src/remote.ts"],"sourcesContent":["import {\n type Json,\n type JsonObject,\n LiveObject,\n LiveText,\n type StorageUpdate,\n} from \"@liveblocks/client\";\nimport { Fragment, type MarkType, type Schema, Slice } from \"prosemirror-model\";\nimport type { Transaction } from \"prosemirror-state\";\nimport type { EditorView } from \"prosemirror-view\";\n\nimport {\n buildLiveblocksTreeIndex,\n findListRangeByLiveList,\n findNodeRangeByLiveNode,\n findTextRangeByLiveText,\n getChildPosition,\n} from \"./mapping\";\nimport {\n attributesToMarks,\n getLiveblocksNodeContent,\n getLiveblocksNodeText,\n type LiveblocksProsemirrorNode,\n liveblocksProsemirrorNodeToJsonNodes,\n} from \"./schema\";\n\ntype RemoteApplyResult =\n | {\n type: \"applied\";\n tr: Transaction;\n }\n | {\n type: \"unsupported\";\n };\n\nfunction getMarkType(schema: Schema, type: string): MarkType | undefined {\n return schema.marks[type];\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isLiveblocksProsemirrorNode(\n value: unknown\n): value is LiveblocksProsemirrorNode {\n return (\n value instanceof LiveObject &&\n typeof value.get(\"id\") === \"string\" &&\n typeof value.get(\"type\") === \"string\"\n );\n}\n\nfunction getLiveblocksNodeAttrs(\n node: LiveblocksProsemirrorNode\n): JsonObject | undefined {\n const attrs = node.get(\"attrs\");\n return isJsonObject(attrs) ? attrs : undefined;\n}\n\nfunction createSliceFromLiveblocksNode(\n schema: Schema,\n node: LiveblocksProsemirrorNode\n): Slice {\n const nodes = liveblocksProsemirrorNodeToJsonNodes(node).map((jsonNode) =>\n schema.nodeFromJSON(jsonNode)\n );\n\n return new Slice(Fragment.fromArray(nodes), 0, 0);\n}\n\nfunction applyMarksFromAttributes(\n tr: Transaction,\n schema: Schema,\n from: number,\n to: number,\n attributes: Record<string, Json | null>\n): void {\n const marks = attributesToMarks({ ...attributes });\n\n for (const mark of marks ?? []) {\n const markType = getMarkType(schema, mark.type);\n if (markType !== undefined) {\n tr.addMark(from, to, markType.create(mark.attrs));\n }\n }\n\n if (marks === undefined) {\n tr.removeMark(from, to);\n }\n}\n\nfunction findNodeRangeForLiveText(\n index: ReturnType<typeof buildLiveblocksTreeIndex>,\n text: LiveText\n) {\n return index.nodeRanges.find(\n (range) => getLiveblocksNodeText(range.node) === text\n );\n}\n\nfunction collectCoveredDescendants(\n node: LiveblocksProsemirrorNode,\n coveredNodes: Set<unknown>\n): void {\n coveredNodes.add(node);\n\n const text = getLiveblocksNodeText(node);\n if (text !== undefined) {\n coveredNodes.add(text);\n }\n\n const content = getLiveblocksNodeContent(node);\n if (content === undefined) {\n return;\n }\n\n coveredNodes.add(content);\n for (let index = 0; index < content.length; index++) {\n const child = content.get(index);\n if (child !== undefined) {\n collectCoveredDescendants(child, coveredNodes);\n }\n }\n}\n\nfunction getStructurallyCoveredNodes(\n updates: readonly StorageUpdate[]\n): Set<unknown> {\n const coveredNodes = new Set<unknown>();\n\n for (const update of updates) {\n if (update.type !== \"LiveList\") {\n continue;\n }\n\n for (const change of update.updates) {\n if (\n (change.type === \"insert\" ||\n change.type === \"set\" ||\n change.type === \"move\") &&\n isLiveblocksProsemirrorNode(change.item)\n ) {\n collectCoveredDescendants(change.item, coveredNodes);\n }\n }\n }\n\n return coveredNodes;\n}\n\nfunction getCurrentTextForLiveText(\n doc: Transaction[\"doc\"],\n index: ReturnType<typeof buildLiveblocksTreeIndex>,\n text: LiveText\n): string | undefined {\n const range = findNodeRangeForLiveText(index, text);\n if (range === undefined) {\n return undefined;\n }\n\n return doc.textBetween(range.from, range.to);\n}\n\nfunction isTextAlreadyApplied(\n doc: Transaction[\"doc\"],\n index: ReturnType<typeof buildLiveblocksTreeIndex>,\n update: Extract<StorageUpdate, { type: \"LiveText\" }>\n): boolean {\n if (update.updates.some((change) => change.type === \"format\")) {\n return false;\n }\n\n return (\n getCurrentTextForLiveText(doc, index, update.node) ===\n update.node.toString()\n );\n}\n\nfunction isLiveblocksNodeAlreadyApplied(\n range: NonNullable<ReturnType<typeof findListRangeByLiveList>>\n): boolean {\n const [jsonNode] = liveblocksProsemirrorNodeToJsonNodes(range.node);\n if (jsonNode === undefined) {\n return false;\n }\n\n return JSON.stringify(range.pmNode.toJSON()) === JSON.stringify(jsonNode);\n}\n\nexport function applyRemoteStorageUpdates(\n view: EditorView,\n liveRoot: LiveblocksProsemirrorNode,\n updates: readonly StorageUpdate[]\n): RemoteApplyResult {\n if (updates.length === 0) {\n return { type: \"unsupported\" };\n }\n\n let tr = view.state.tr;\n const structurallyCoveredNodes = getStructurallyCoveredNodes(updates);\n\n for (const update of updates) {\n if (structurallyCoveredNodes.has(update.node)) {\n continue;\n }\n\n if (update.type === \"LiveText\") {\n if (!(update.node instanceof LiveText)) {\n return { type: \"unsupported\" };\n }\n\n const initialIndex = buildLiveblocksTreeIndex(tr.doc, liveRoot);\n if (isTextAlreadyApplied(tr.doc, initialIndex, update)) {\n continue;\n }\n\n for (const change of update.updates) {\n const index = buildLiveblocksTreeIndex(tr.doc, liveRoot);\n const range = findTextRangeByLiveText(index, update.node);\n\n if (range === undefined && change.type === \"delete\") {\n const wrapperRange = findNodeRangeForLiveText(index, update.node);\n if (wrapperRange !== undefined) {\n const from = wrapperRange.from + change.index;\n tr = tr.delete(from, from + change.length);\n continue;\n }\n\n return { type: \"unsupported\" };\n }\n\n if (range === undefined) {\n return { type: \"unsupported\" };\n }\n\n const from = range.from + change.index - range.liveOffset;\n\n if (change.type === \"insert\") {\n tr = tr.insertText(change.text, from);\n if (change.attributes !== undefined) {\n applyMarksFromAttributes(\n tr,\n view.state.schema,\n from,\n from + change.text.length,\n change.attributes\n );\n }\n } else if (change.type === \"delete\") {\n tr = tr.delete(from, from + change.length);\n } else {\n applyMarksFromAttributes(\n tr,\n view.state.schema,\n from,\n from + change.length,\n change.attributes\n );\n }\n }\n\n continue;\n }\n\n if (update.type === \"LiveList\") {\n for (const change of update.updates) {\n const index = buildLiveblocksTreeIndex(tr.doc, liveRoot);\n const range = findListRangeByLiveList(index, update.node);\n if (range === undefined) {\n return { type: \"unsupported\" };\n }\n\n if (isLiveblocksNodeAlreadyApplied(range)) {\n continue;\n }\n\n if (change.type === \"insert\") {\n if (!isLiveblocksProsemirrorNode(change.item)) {\n return { type: \"unsupported\" };\n }\n\n const pos = getChildPosition(range.pmNode, range.from, change.index);\n if (pos === undefined) {\n return { type: \"unsupported\" };\n }\n\n tr = tr.replace(\n pos,\n pos,\n createSliceFromLiveblocksNode(view.state.schema, change.item)\n );\n } else if (change.type === \"delete\") {\n const from = getChildPosition(range.pmNode, range.from, change.index);\n const to = getChildPosition(\n range.pmNode,\n range.from,\n change.index + 1\n );\n if (from === undefined || to === undefined) {\n return { type: \"unsupported\" };\n }\n\n tr = tr.delete(from, to);\n } else if (change.type === \"set\") {\n if (!isLiveblocksProsemirrorNode(change.item)) {\n return { type: \"unsupported\" };\n }\n\n const from = getChildPosition(range.pmNode, range.from, change.index);\n const to = getChildPosition(\n range.pmNode,\n range.from,\n change.index + 1\n );\n if (from === undefined || to === undefined) {\n return { type: \"unsupported\" };\n }\n\n tr = tr.replace(\n from,\n to,\n createSliceFromLiveblocksNode(view.state.schema, change.item)\n );\n } else {\n if (!isLiveblocksProsemirrorNode(change.item)) {\n return { type: \"unsupported\" };\n }\n\n const from = getChildPosition(\n range.pmNode,\n range.from,\n change.previousIndex\n );\n const to = getChildPosition(\n range.pmNode,\n range.from,\n change.previousIndex + 1\n );\n const rawInsertPos = getChildPosition(\n range.pmNode,\n range.from,\n change.index > change.previousIndex\n ? change.index + 1\n : change.index\n );\n if (\n from === undefined ||\n to === undefined ||\n rawInsertPos === undefined\n ) {\n return { type: \"unsupported\" };\n }\n\n const slice = createSliceFromLiveblocksNode(\n view.state.schema,\n change.item\n );\n tr = tr.delete(from, to);\n const insertPos = tr.mapping.map(rawInsertPos, -1);\n tr = tr.replace(insertPos, insertPos, slice);\n }\n }\n\n continue;\n }\n\n if (update.type === \"LiveObject\") {\n if (!isLiveblocksProsemirrorNode(update.node)) {\n return { type: \"unsupported\" };\n }\n\n const attrUpdate = update.updates.attrs;\n if (attrUpdate === undefined) {\n return { type: \"unsupported\" };\n }\n\n const index = buildLiveblocksTreeIndex(tr.doc, liveRoot);\n const range = findNodeRangeByLiveNode(index, update.node);\n if (range === undefined || range.pmNode.type.name === \"doc\") {\n return { type: \"unsupported\" };\n }\n\n tr = tr.setNodeMarkup(\n range.from,\n undefined,\n attrUpdate.type === \"delete\"\n ? null\n : getLiveblocksNodeAttrs(update.node)\n );\n\n continue;\n }\n\n return { type: \"unsupported\" };\n }\n\n return { type: \"applied\", tr };\n}\n\nexport function applyRemoteLiveTextUpdates(\n view: EditorView,\n liveRoot: LiveblocksProsemirrorNode,\n updates: readonly StorageUpdate[]\n): RemoteApplyResult {\n if (!updates.every((update) => update.type === \"LiveText\")) {\n return { type: \"unsupported\" };\n }\n\n return applyRemoteStorageUpdates(view, liveRoot, updates);\n}\n"],"names":["LiveObject","schema","liveblocksProsemirrorNodeToJsonNodes","Slice","Fragment","attributesToMarks","getLiveblocksNodeText","getLiveblocksNodeContent","LiveText","buildLiveblocksTreeIndex","findTextRangeByLiveText","from","findListRangeByLiveList","getChildPosition","findNodeRangeByLiveNode"],"mappings":"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"}
|
package/dist/remote.js
CHANGED
|
@@ -71,6 +71,26 @@ function getStructurallyCoveredNodes(updates) {
|
|
|
71
71
|
}
|
|
72
72
|
return coveredNodes;
|
|
73
73
|
}
|
|
74
|
+
function getCurrentTextForLiveText(doc, index, text) {
|
|
75
|
+
const range = findNodeRangeForLiveText(index, text);
|
|
76
|
+
if (range === void 0) {
|
|
77
|
+
return void 0;
|
|
78
|
+
}
|
|
79
|
+
return doc.textBetween(range.from, range.to);
|
|
80
|
+
}
|
|
81
|
+
function isTextAlreadyApplied(doc, index, update) {
|
|
82
|
+
if (update.updates.some((change) => change.type === "format")) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
return getCurrentTextForLiveText(doc, index, update.node) === update.node.toString();
|
|
86
|
+
}
|
|
87
|
+
function isLiveblocksNodeAlreadyApplied(range) {
|
|
88
|
+
const [jsonNode] = liveblocksProsemirrorNodeToJsonNodes(range.node);
|
|
89
|
+
if (jsonNode === void 0) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
return JSON.stringify(range.pmNode.toJSON()) === JSON.stringify(jsonNode);
|
|
93
|
+
}
|
|
74
94
|
function applyRemoteStorageUpdates(view, liveRoot, updates) {
|
|
75
95
|
if (updates.length === 0) {
|
|
76
96
|
return { type: "unsupported" };
|
|
@@ -85,6 +105,10 @@ function applyRemoteStorageUpdates(view, liveRoot, updates) {
|
|
|
85
105
|
if (!(update.node instanceof LiveText)) {
|
|
86
106
|
return { type: "unsupported" };
|
|
87
107
|
}
|
|
108
|
+
const initialIndex = buildLiveblocksTreeIndex(tr.doc, liveRoot);
|
|
109
|
+
if (isTextAlreadyApplied(tr.doc, initialIndex, update)) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
88
112
|
for (const change of update.updates) {
|
|
89
113
|
const index = buildLiveblocksTreeIndex(tr.doc, liveRoot);
|
|
90
114
|
const range = findTextRangeByLiveText(index, update.node);
|
|
@@ -133,6 +157,9 @@ function applyRemoteStorageUpdates(view, liveRoot, updates) {
|
|
|
133
157
|
if (range === void 0) {
|
|
134
158
|
return { type: "unsupported" };
|
|
135
159
|
}
|
|
160
|
+
if (isLiveblocksNodeAlreadyApplied(range)) {
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
136
163
|
if (change.type === "insert") {
|
|
137
164
|
if (!isLiveblocksProsemirrorNode(change.item)) {
|
|
138
165
|
return { type: "unsupported" };
|
package/dist/remote.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.js","sources":["../src/remote.ts"],"sourcesContent":["import {\n type Json,\n type JsonObject,\n LiveObject,\n LiveText,\n type StorageUpdate,\n} from \"@liveblocks/client\";\nimport { Fragment, type MarkType, type Schema, Slice } from \"prosemirror-model\";\nimport type { Transaction } from \"prosemirror-state\";\nimport type { EditorView } from \"prosemirror-view\";\n\nimport {\n buildLiveblocksTreeIndex,\n findListRangeByLiveList,\n findNodeRangeByLiveNode,\n findTextRangeByLiveText,\n getChildPosition,\n} from \"./mapping\";\nimport {\n attributesToMarks,\n getLiveblocksNodeContent,\n getLiveblocksNodeText,\n type LiveblocksProsemirrorNode,\n liveblocksProsemirrorNodeToJsonNodes,\n} from \"./schema\";\n\ntype RemoteApplyResult =\n | {\n type: \"applied\";\n tr: Transaction;\n }\n | {\n type: \"unsupported\";\n };\n\nfunction getMarkType(schema: Schema, type: string): MarkType | undefined {\n return schema.marks[type];\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isLiveblocksProsemirrorNode(\n value: unknown\n): value is LiveblocksProsemirrorNode {\n return (\n value instanceof LiveObject &&\n typeof value.get(\"id\") === \"string\" &&\n typeof value.get(\"type\") === \"string\"\n );\n}\n\nfunction getLiveblocksNodeAttrs(\n node: LiveblocksProsemirrorNode\n): JsonObject | undefined {\n const attrs = node.get(\"attrs\");\n return isJsonObject(attrs) ? attrs : undefined;\n}\n\nfunction createSliceFromLiveblocksNode(\n schema: Schema,\n node: LiveblocksProsemirrorNode\n): Slice {\n const nodes = liveblocksProsemirrorNodeToJsonNodes(node).map((jsonNode) =>\n schema.nodeFromJSON(jsonNode)\n );\n\n return new Slice(Fragment.fromArray(nodes), 0, 0);\n}\n\nfunction applyMarksFromAttributes(\n tr: Transaction,\n schema: Schema,\n from: number,\n to: number,\n attributes: Record<string, Json | null>\n): void {\n const marks = attributesToMarks({ ...attributes });\n\n for (const mark of marks ?? []) {\n const markType = getMarkType(schema, mark.type);\n if (markType !== undefined) {\n tr.addMark(from, to, markType.create(mark.attrs));\n }\n }\n\n if (marks === undefined) {\n tr.removeMark(from, to);\n }\n}\n\nfunction findNodeRangeForLiveText(\n index: ReturnType<typeof buildLiveblocksTreeIndex>,\n text: LiveText\n) {\n return index.nodeRanges.find(\n (range) => getLiveblocksNodeText(range.node) === text\n );\n}\n\nfunction collectCoveredDescendants(\n node: LiveblocksProsemirrorNode,\n coveredNodes: Set<unknown>\n): void {\n coveredNodes.add(node);\n\n const text = getLiveblocksNodeText(node);\n if (text !== undefined) {\n coveredNodes.add(text);\n }\n\n const content = getLiveblocksNodeContent(node);\n if (content === undefined) {\n return;\n }\n\n coveredNodes.add(content);\n for (let index = 0; index < content.length; index++) {\n const child = content.get(index);\n if (child !== undefined) {\n collectCoveredDescendants(child, coveredNodes);\n }\n }\n}\n\nfunction getStructurallyCoveredNodes(\n updates: readonly StorageUpdate[]\n): Set<unknown> {\n const coveredNodes = new Set<unknown>();\n\n for (const update of updates) {\n if (update.type !== \"LiveList\") {\n continue;\n }\n\n for (const change of update.updates) {\n if (\n (change.type === \"insert\" ||\n change.type === \"set\" ||\n change.type === \"move\") &&\n isLiveblocksProsemirrorNode(change.item)\n ) {\n collectCoveredDescendants(change.item, coveredNodes);\n }\n }\n }\n\n return coveredNodes;\n}\n\nexport function applyRemoteStorageUpdates(\n view: EditorView,\n liveRoot: LiveblocksProsemirrorNode,\n updates: readonly StorageUpdate[]\n): RemoteApplyResult {\n if (updates.length === 0) {\n return { type: \"unsupported\" };\n }\n\n let tr = view.state.tr;\n const structurallyCoveredNodes = getStructurallyCoveredNodes(updates);\n\n for (const update of updates) {\n if (structurallyCoveredNodes.has(update.node)) {\n continue;\n }\n\n if (update.type === \"LiveText\") {\n if (!(update.node instanceof LiveText)) {\n return { type: \"unsupported\" };\n }\n\n for (const change of update.updates) {\n const index = buildLiveblocksTreeIndex(tr.doc, liveRoot);\n const range = findTextRangeByLiveText(index, update.node);\n\n if (range === undefined && change.type === \"delete\") {\n const wrapperRange = findNodeRangeForLiveText(index, update.node);\n if (wrapperRange !== undefined) {\n const from = wrapperRange.from + change.index;\n tr = tr.delete(from, from + change.length);\n continue;\n }\n\n return { type: \"unsupported\" };\n }\n\n if (range === undefined) {\n return { type: \"unsupported\" };\n }\n\n const from = range.from + change.index - range.liveOffset;\n\n if (change.type === \"insert\") {\n tr = tr.insertText(change.text, from);\n if (change.attributes !== undefined) {\n applyMarksFromAttributes(\n tr,\n view.state.schema,\n from,\n from + change.text.length,\n change.attributes\n );\n }\n } else if (change.type === \"delete\") {\n tr = tr.delete(from, from + change.length);\n } else {\n applyMarksFromAttributes(\n tr,\n view.state.schema,\n from,\n from + change.length,\n change.attributes\n );\n }\n }\n\n continue;\n }\n\n if (update.type === \"LiveList\") {\n for (const change of update.updates) {\n const index = buildLiveblocksTreeIndex(tr.doc, liveRoot);\n const range = findListRangeByLiveList(index, update.node);\n if (range === undefined) {\n return { type: \"unsupported\" };\n }\n\n if (change.type === \"insert\") {\n if (!isLiveblocksProsemirrorNode(change.item)) {\n return { type: \"unsupported\" };\n }\n\n const pos = getChildPosition(range.pmNode, range.from, change.index);\n if (pos === undefined) {\n return { type: \"unsupported\" };\n }\n\n tr = tr.replace(\n pos,\n pos,\n createSliceFromLiveblocksNode(view.state.schema, change.item)\n );\n } else if (change.type === \"delete\") {\n const from = getChildPosition(range.pmNode, range.from, change.index);\n const to = getChildPosition(\n range.pmNode,\n range.from,\n change.index + 1\n );\n if (from === undefined || to === undefined) {\n return { type: \"unsupported\" };\n }\n\n tr = tr.delete(from, to);\n } else if (change.type === \"set\") {\n if (!isLiveblocksProsemirrorNode(change.item)) {\n return { type: \"unsupported\" };\n }\n\n const from = getChildPosition(range.pmNode, range.from, change.index);\n const to = getChildPosition(\n range.pmNode,\n range.from,\n change.index + 1\n );\n if (from === undefined || to === undefined) {\n return { type: \"unsupported\" };\n }\n\n tr = tr.replace(\n from,\n to,\n createSliceFromLiveblocksNode(view.state.schema, change.item)\n );\n } else {\n if (!isLiveblocksProsemirrorNode(change.item)) {\n return { type: \"unsupported\" };\n }\n\n const from = getChildPosition(\n range.pmNode,\n range.from,\n change.previousIndex\n );\n const to = getChildPosition(\n range.pmNode,\n range.from,\n change.previousIndex + 1\n );\n const rawInsertPos = getChildPosition(\n range.pmNode,\n range.from,\n change.index > change.previousIndex\n ? change.index + 1\n : change.index\n );\n if (\n from === undefined ||\n to === undefined ||\n rawInsertPos === undefined\n ) {\n return { type: \"unsupported\" };\n }\n\n const slice = createSliceFromLiveblocksNode(\n view.state.schema,\n change.item\n );\n tr = tr.delete(from, to);\n const insertPos = tr.mapping.map(rawInsertPos, -1);\n tr = tr.replace(insertPos, insertPos, slice);\n }\n }\n\n continue;\n }\n\n if (update.type === \"LiveObject\") {\n if (!isLiveblocksProsemirrorNode(update.node)) {\n return { type: \"unsupported\" };\n }\n\n const attrUpdate = update.updates.attrs;\n if (attrUpdate === undefined) {\n return { type: \"unsupported\" };\n }\n\n const index = buildLiveblocksTreeIndex(tr.doc, liveRoot);\n const range = findNodeRangeByLiveNode(index, update.node);\n if (range === undefined || range.pmNode.type.name === \"doc\") {\n return { type: \"unsupported\" };\n }\n\n tr = tr.setNodeMarkup(\n range.from,\n undefined,\n attrUpdate.type === \"delete\"\n ? null\n : getLiveblocksNodeAttrs(update.node)\n );\n\n continue;\n }\n\n return { type: \"unsupported\" };\n }\n\n return { type: \"applied\", tr };\n}\n\nexport function applyRemoteLiveTextUpdates(\n view: EditorView,\n liveRoot: LiveblocksProsemirrorNode,\n updates: readonly StorageUpdate[]\n): RemoteApplyResult {\n if (!updates.every((update) => update.type === \"LiveText\")) {\n return { type: \"unsupported\" };\n }\n\n return applyRemoteStorageUpdates(view, liveRoot, updates);\n}\n"],"names":["from"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"remote.js","sources":["../src/remote.ts"],"sourcesContent":["import {\n type Json,\n type JsonObject,\n LiveObject,\n LiveText,\n type StorageUpdate,\n} from \"@liveblocks/client\";\nimport { Fragment, type MarkType, type Schema, Slice } from \"prosemirror-model\";\nimport type { Transaction } from \"prosemirror-state\";\nimport type { EditorView } from \"prosemirror-view\";\n\nimport {\n buildLiveblocksTreeIndex,\n findListRangeByLiveList,\n findNodeRangeByLiveNode,\n findTextRangeByLiveText,\n getChildPosition,\n} from \"./mapping\";\nimport {\n attributesToMarks,\n getLiveblocksNodeContent,\n getLiveblocksNodeText,\n type LiveblocksProsemirrorNode,\n liveblocksProsemirrorNodeToJsonNodes,\n} from \"./schema\";\n\ntype RemoteApplyResult =\n | {\n type: \"applied\";\n tr: Transaction;\n }\n | {\n type: \"unsupported\";\n };\n\nfunction getMarkType(schema: Schema, type: string): MarkType | undefined {\n return schema.marks[type];\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isLiveblocksProsemirrorNode(\n value: unknown\n): value is LiveblocksProsemirrorNode {\n return (\n value instanceof LiveObject &&\n typeof value.get(\"id\") === \"string\" &&\n typeof value.get(\"type\") === \"string\"\n );\n}\n\nfunction getLiveblocksNodeAttrs(\n node: LiveblocksProsemirrorNode\n): JsonObject | undefined {\n const attrs = node.get(\"attrs\");\n return isJsonObject(attrs) ? attrs : undefined;\n}\n\nfunction createSliceFromLiveblocksNode(\n schema: Schema,\n node: LiveblocksProsemirrorNode\n): Slice {\n const nodes = liveblocksProsemirrorNodeToJsonNodes(node).map((jsonNode) =>\n schema.nodeFromJSON(jsonNode)\n );\n\n return new Slice(Fragment.fromArray(nodes), 0, 0);\n}\n\nfunction applyMarksFromAttributes(\n tr: Transaction,\n schema: Schema,\n from: number,\n to: number,\n attributes: Record<string, Json | null>\n): void {\n const marks = attributesToMarks({ ...attributes });\n\n for (const mark of marks ?? []) {\n const markType = getMarkType(schema, mark.type);\n if (markType !== undefined) {\n tr.addMark(from, to, markType.create(mark.attrs));\n }\n }\n\n if (marks === undefined) {\n tr.removeMark(from, to);\n }\n}\n\nfunction findNodeRangeForLiveText(\n index: ReturnType<typeof buildLiveblocksTreeIndex>,\n text: LiveText\n) {\n return index.nodeRanges.find(\n (range) => getLiveblocksNodeText(range.node) === text\n );\n}\n\nfunction collectCoveredDescendants(\n node: LiveblocksProsemirrorNode,\n coveredNodes: Set<unknown>\n): void {\n coveredNodes.add(node);\n\n const text = getLiveblocksNodeText(node);\n if (text !== undefined) {\n coveredNodes.add(text);\n }\n\n const content = getLiveblocksNodeContent(node);\n if (content === undefined) {\n return;\n }\n\n coveredNodes.add(content);\n for (let index = 0; index < content.length; index++) {\n const child = content.get(index);\n if (child !== undefined) {\n collectCoveredDescendants(child, coveredNodes);\n }\n }\n}\n\nfunction getStructurallyCoveredNodes(\n updates: readonly StorageUpdate[]\n): Set<unknown> {\n const coveredNodes = new Set<unknown>();\n\n for (const update of updates) {\n if (update.type !== \"LiveList\") {\n continue;\n }\n\n for (const change of update.updates) {\n if (\n (change.type === \"insert\" ||\n change.type === \"set\" ||\n change.type === \"move\") &&\n isLiveblocksProsemirrorNode(change.item)\n ) {\n collectCoveredDescendants(change.item, coveredNodes);\n }\n }\n }\n\n return coveredNodes;\n}\n\nfunction getCurrentTextForLiveText(\n doc: Transaction[\"doc\"],\n index: ReturnType<typeof buildLiveblocksTreeIndex>,\n text: LiveText\n): string | undefined {\n const range = findNodeRangeForLiveText(index, text);\n if (range === undefined) {\n return undefined;\n }\n\n return doc.textBetween(range.from, range.to);\n}\n\nfunction isTextAlreadyApplied(\n doc: Transaction[\"doc\"],\n index: ReturnType<typeof buildLiveblocksTreeIndex>,\n update: Extract<StorageUpdate, { type: \"LiveText\" }>\n): boolean {\n if (update.updates.some((change) => change.type === \"format\")) {\n return false;\n }\n\n return (\n getCurrentTextForLiveText(doc, index, update.node) ===\n update.node.toString()\n );\n}\n\nfunction isLiveblocksNodeAlreadyApplied(\n range: NonNullable<ReturnType<typeof findListRangeByLiveList>>\n): boolean {\n const [jsonNode] = liveblocksProsemirrorNodeToJsonNodes(range.node);\n if (jsonNode === undefined) {\n return false;\n }\n\n return JSON.stringify(range.pmNode.toJSON()) === JSON.stringify(jsonNode);\n}\n\nexport function applyRemoteStorageUpdates(\n view: EditorView,\n liveRoot: LiveblocksProsemirrorNode,\n updates: readonly StorageUpdate[]\n): RemoteApplyResult {\n if (updates.length === 0) {\n return { type: \"unsupported\" };\n }\n\n let tr = view.state.tr;\n const structurallyCoveredNodes = getStructurallyCoveredNodes(updates);\n\n for (const update of updates) {\n if (structurallyCoveredNodes.has(update.node)) {\n continue;\n }\n\n if (update.type === \"LiveText\") {\n if (!(update.node instanceof LiveText)) {\n return { type: \"unsupported\" };\n }\n\n const initialIndex = buildLiveblocksTreeIndex(tr.doc, liveRoot);\n if (isTextAlreadyApplied(tr.doc, initialIndex, update)) {\n continue;\n }\n\n for (const change of update.updates) {\n const index = buildLiveblocksTreeIndex(tr.doc, liveRoot);\n const range = findTextRangeByLiveText(index, update.node);\n\n if (range === undefined && change.type === \"delete\") {\n const wrapperRange = findNodeRangeForLiveText(index, update.node);\n if (wrapperRange !== undefined) {\n const from = wrapperRange.from + change.index;\n tr = tr.delete(from, from + change.length);\n continue;\n }\n\n return { type: \"unsupported\" };\n }\n\n if (range === undefined) {\n return { type: \"unsupported\" };\n }\n\n const from = range.from + change.index - range.liveOffset;\n\n if (change.type === \"insert\") {\n tr = tr.insertText(change.text, from);\n if (change.attributes !== undefined) {\n applyMarksFromAttributes(\n tr,\n view.state.schema,\n from,\n from + change.text.length,\n change.attributes\n );\n }\n } else if (change.type === \"delete\") {\n tr = tr.delete(from, from + change.length);\n } else {\n applyMarksFromAttributes(\n tr,\n view.state.schema,\n from,\n from + change.length,\n change.attributes\n );\n }\n }\n\n continue;\n }\n\n if (update.type === \"LiveList\") {\n for (const change of update.updates) {\n const index = buildLiveblocksTreeIndex(tr.doc, liveRoot);\n const range = findListRangeByLiveList(index, update.node);\n if (range === undefined) {\n return { type: \"unsupported\" };\n }\n\n if (isLiveblocksNodeAlreadyApplied(range)) {\n continue;\n }\n\n if (change.type === \"insert\") {\n if (!isLiveblocksProsemirrorNode(change.item)) {\n return { type: \"unsupported\" };\n }\n\n const pos = getChildPosition(range.pmNode, range.from, change.index);\n if (pos === undefined) {\n return { type: \"unsupported\" };\n }\n\n tr = tr.replace(\n pos,\n pos,\n createSliceFromLiveblocksNode(view.state.schema, change.item)\n );\n } else if (change.type === \"delete\") {\n const from = getChildPosition(range.pmNode, range.from, change.index);\n const to = getChildPosition(\n range.pmNode,\n range.from,\n change.index + 1\n );\n if (from === undefined || to === undefined) {\n return { type: \"unsupported\" };\n }\n\n tr = tr.delete(from, to);\n } else if (change.type === \"set\") {\n if (!isLiveblocksProsemirrorNode(change.item)) {\n return { type: \"unsupported\" };\n }\n\n const from = getChildPosition(range.pmNode, range.from, change.index);\n const to = getChildPosition(\n range.pmNode,\n range.from,\n change.index + 1\n );\n if (from === undefined || to === undefined) {\n return { type: \"unsupported\" };\n }\n\n tr = tr.replace(\n from,\n to,\n createSliceFromLiveblocksNode(view.state.schema, change.item)\n );\n } else {\n if (!isLiveblocksProsemirrorNode(change.item)) {\n return { type: \"unsupported\" };\n }\n\n const from = getChildPosition(\n range.pmNode,\n range.from,\n change.previousIndex\n );\n const to = getChildPosition(\n range.pmNode,\n range.from,\n change.previousIndex + 1\n );\n const rawInsertPos = getChildPosition(\n range.pmNode,\n range.from,\n change.index > change.previousIndex\n ? change.index + 1\n : change.index\n );\n if (\n from === undefined ||\n to === undefined ||\n rawInsertPos === undefined\n ) {\n return { type: \"unsupported\" };\n }\n\n const slice = createSliceFromLiveblocksNode(\n view.state.schema,\n change.item\n );\n tr = tr.delete(from, to);\n const insertPos = tr.mapping.map(rawInsertPos, -1);\n tr = tr.replace(insertPos, insertPos, slice);\n }\n }\n\n continue;\n }\n\n if (update.type === \"LiveObject\") {\n if (!isLiveblocksProsemirrorNode(update.node)) {\n return { type: \"unsupported\" };\n }\n\n const attrUpdate = update.updates.attrs;\n if (attrUpdate === undefined) {\n return { type: \"unsupported\" };\n }\n\n const index = buildLiveblocksTreeIndex(tr.doc, liveRoot);\n const range = findNodeRangeByLiveNode(index, update.node);\n if (range === undefined || range.pmNode.type.name === \"doc\") {\n return { type: \"unsupported\" };\n }\n\n tr = tr.setNodeMarkup(\n range.from,\n undefined,\n attrUpdate.type === \"delete\"\n ? null\n : getLiveblocksNodeAttrs(update.node)\n );\n\n continue;\n }\n\n return { type: \"unsupported\" };\n }\n\n return { type: \"applied\", tr };\n}\n\nexport function applyRemoteLiveTextUpdates(\n view: EditorView,\n liveRoot: LiveblocksProsemirrorNode,\n updates: readonly StorageUpdate[]\n): RemoteApplyResult {\n if (!updates.every((update) => update.type === \"LiveText\")) {\n return { type: \"unsupported\" };\n }\n\n return applyRemoteStorageUpdates(view, liveRoot, updates);\n}\n"],"names":["from"],"mappings":"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"}
|
package/dist/version.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const PKG_NAME = "@liveblocks/prosemirror";
|
|
4
|
-
const PKG_VERSION = "3.
|
|
5
|
-
const PKG_FORMAT =
|
|
4
|
+
const PKG_VERSION = typeof "3.21.0-exp9" === "string" && "3.21.0-exp9";
|
|
5
|
+
const PKG_FORMAT = typeof "cjs" === "string" && "cjs";
|
|
6
6
|
|
|
7
7
|
exports.PKG_FORMAT = PKG_FORMAT;
|
|
8
8
|
exports.PKG_NAME = PKG_NAME;
|
package/dist/version.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.cjs","sources":["../src/version.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"version.cjs","sources":["../src/version.ts"],"sourcesContent":["declare const __VERSION__: string;\ndeclare const ROLLUP_FORMAT: string;\n\nexport const PKG_NAME = \"@liveblocks/prosemirror\";\nexport const PKG_VERSION = typeof __VERSION__ === \"string\" && __VERSION__;\nexport const PKG_FORMAT = typeof ROLLUP_FORMAT === \"string\" && ROLLUP_FORMAT;\n"],"names":[],"mappings":";;AAGO,MAAM,QAAW,GAAA,0BAAA;AACX,MAAA,WAAA,GAAc,OAAO,aAAA,KAAgB,QAAY,IAAA,cAAA;AACjD,MAAA,UAAA,GAAa,OAAO,KAAA,KAAkB,QAAY,IAAA;;;;;;"}
|
package/dist/version.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const PKG_NAME = "@liveblocks/prosemirror";
|
|
2
|
-
const PKG_VERSION = "3.
|
|
3
|
-
const PKG_FORMAT =
|
|
2
|
+
const PKG_VERSION = typeof "3.21.0-exp9" === "string" && "3.21.0-exp9";
|
|
3
|
+
const PKG_FORMAT = typeof "esm" === "string" && "esm";
|
|
4
4
|
|
|
5
5
|
export { PKG_FORMAT, PKG_NAME, PKG_VERSION };
|
|
6
6
|
//# sourceMappingURL=version.js.map
|
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sources":["../src/version.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"version.js","sources":["../src/version.ts"],"sourcesContent":["declare const __VERSION__: string;\ndeclare const ROLLUP_FORMAT: string;\n\nexport const PKG_NAME = \"@liveblocks/prosemirror\";\nexport const PKG_VERSION = typeof __VERSION__ === \"string\" && __VERSION__;\nexport const PKG_FORMAT = typeof ROLLUP_FORMAT === \"string\" && ROLLUP_FORMAT;\n"],"names":[],"mappings":"AAGO,MAAM,QAAW,GAAA,0BAAA;AACX,MAAA,WAAA,GAAc,OAAO,aAAA,KAAgB,QAAY,IAAA,cAAA;AACjD,MAAA,UAAA,GAAa,OAAO,KAAA,KAAkB,QAAY,IAAA;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@liveblocks/prosemirror",
|
|
3
|
-
"version": "3.21.0-
|
|
3
|
+
"version": "3.21.0-exp9",
|
|
4
4
|
"description": "ProseMirror collaboration plugins backed by Liveblocks.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Liveblocks Inc.",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"README.md"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@liveblocks/
|
|
29
|
-
"@liveblocks/
|
|
28
|
+
"@liveblocks/client": "3.21.0-exp9",
|
|
29
|
+
"@liveblocks/core": "3.21.0-exp9"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
32
|
"prosemirror-model": "^1",
|