y-mxgraph 0.3.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -2
- package/README.zh-CN.md +27 -2
- package/binding/index.d.ts +9 -1
- package/binding/index.d.ts.map +1 -1
- package/iframe-bridge/index.d.ts +2 -0
- package/iframe-bridge/index.d.ts.map +1 -0
- package/iframe-bridge/provider.cjs.js +113 -1
- package/iframe-bridge/provider.cjs.js.map +1 -1
- package/iframe-bridge/provider.es.js +113 -1
- package/iframe-bridge/provider.es.js.map +1 -1
- package/iframe-bridge/server.cjs.js +34 -6
- package/iframe-bridge/server.cjs.js.map +1 -1
- package/iframe-bridge/server.es.js +34 -6
- package/iframe-bridge/server.es.js.map +1 -1
- package/index.d.ts +1 -1
- package/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/transformer/index.d.ts +2 -2
- package/transformer/index.d.ts.map +1 -1
- package/y-mxgraph.cjs.js +14 -13
- package/y-mxgraph.cjs.js.map +1 -1
- package/y-mxgraph.es.js +15 -14
- package/y-mxgraph.es.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.cjs.js","sources":["../../../iframe-bridge/src/server.ts"],"sourcesContent":["import * as Y from \"yjs\";\nimport {\n Awareness,\n applyAwarenessUpdate,\n encodeAwarenessUpdate,\n} from \"y-protocols/awareness\";\n\nexport interface IframeBridgeServer {\n addIframe: (iframe: HTMLIFrameElement, iframeId: string) => void;\n removeIframe: (iframeId: string) => void;\n
|
|
1
|
+
{"version":3,"file":"server.cjs.js","sources":["../../../iframe-bridge/src/origin.ts","../../../iframe-bridge/src/server.ts"],"sourcesContent":["/**\n * iframe bridge 内部变更的 origin 标识。\n * 当 provider 端产生 ydoc-update 时,使用此 origin 标记,\n * 以便 server 端的 UndoManager 能正确追踪来自 iframe 的变更。\n */\nexport const IFRAME_ORIGIN: object = {};\n","import * as Y from \"yjs\";\nimport {\n Awareness,\n applyAwarenessUpdate,\n encodeAwarenessUpdate,\n} from \"y-protocols/awareness\";\nimport { IFRAME_ORIGIN } from \"./origin.js\";\n\nexport interface IframeBridgeServerOptions {\n undoManager?: Y.UndoManager;\n}\n\nexport interface IframeBridgeServer {\n addIframe: (iframe: HTMLIFrameElement, iframeId: string) => void;\n removeIframe: (iframeId: string) => void;\n destroy: () => void;\n}\n\nexport function createIframeBridgeServer(\n ydoc: Y.Doc,\n awareness: Awareness,\n options?: IframeBridgeServerOptions,\n): IframeBridgeServer {\n const { undoManager } = options ?? {};\n const iframes = new Map<string, HTMLIFrameElement>();\n const iframeReady = new Set<string>();\n\n const onYdocUpdate = (update: Uint8Array, origin: unknown) => {\n if (origin === IFRAME_ORIGIN) return;\n broadcastToAll(\"ydoc-update\", update);\n };\n\n const onAwarenessUpdate = ({\n added,\n updated,\n removed,\n }: {\n added: number[];\n updated: number[];\n removed: number[];\n }) => {\n const changes = [...added, ...updated, ...removed];\n if (changes.length === 0) return;\n const update = encodeAwarenessUpdate(awareness, changes);\n broadcastToAll(\"awareness-update\", update);\n };\n\n function broadcastToAll(type: string, payload: Uint8Array, excludeSource?: Window) {\n for (const iframe of iframes.values()) {\n if (iframe.contentWindow && iframe.contentWindow !== excludeSource) {\n iframe.contentWindow.postMessage({ type, payload }, \"*\");\n }\n }\n }\n\n const onMessage = (event: MessageEvent) => {\n let iframeId: string | null = null;\n for (const [id, iframe] of iframes) {\n if (event.source === iframe.contentWindow) {\n iframeId = id;\n break;\n }\n }\n if (!iframeId) return;\n\n const { type: msgType, payload } = event.data;\n const sourceWindow = event.source as Window;\n\n if (msgType === \"init\") {\n if (!iframeReady.has(iframeId)) {\n iframeReady.add(iframeId);\n }\n const docState = Y.encodeStateAsUpdate(ydoc);\n const awarenessState = encodeAwarenessUpdate(\n awareness,\n Array.from(awareness.getStates().keys()),\n );\n sourceWindow.postMessage(\n { type: \"ydoc-sync\", payload: Array.from(docState) },\n \"*\",\n );\n sourceWindow.postMessage(\n {\n type: \"awareness-sync\",\n payload: Array.from(awarenessState),\n serverClientId: awareness.clientID,\n },\n \"*\",\n );\n } else if (msgType === \"ping\") {\n sourceWindow.postMessage(\n { type: \"pong\", serverClientId: awareness.clientID },\n \"*\",\n );\n } else if (msgType === \"ydoc-update\") {\n const update = new Uint8Array(payload);\n Y.applyUpdate(ydoc, update, IFRAME_ORIGIN);\n broadcastToAll(\"ydoc-update\", update, sourceWindow);\n } else if (msgType === \"awareness-update\") {\n applyAwarenessUpdate(awareness, new Uint8Array(payload), null);\n } else if (msgType === \"undo\" && undoManager) {\n undoManager.undo();\n } else if (msgType === \"redo\" && undoManager) {\n undoManager.redo();\n }\n };\n\n function addIframe(iframe: HTMLIFrameElement, iframeId: string) {\n iframes.set(iframeId, iframe);\n }\n\n function removeIframe(iframeId: string) {\n iframes.delete(iframeId);\n iframeReady.delete(iframeId);\n }\n\n const onUndoPopped = (e: { type?: string; reason?: string; kind?: string }) => {\n const t = e && (e.type || e.reason || e.kind);\n if (t === \"undo\") {\n broadcastToAll(\"undo\", new Uint8Array());\n } else if (t === \"redo\") {\n broadcastToAll(\"redo\", new Uint8Array());\n }\n };\n\n const onStackCleared = () => {\n broadcastToAll(\"clear\", new Uint8Array());\n };\n\n ydoc.on(\"update\", onYdocUpdate);\n awareness.on(\"update\", onAwarenessUpdate);\n window.addEventListener(\"message\", onMessage);\n if (undoManager) {\n undoManager.on(\"stack-item-popped\", onUndoPopped);\n undoManager.on(\"stack-cleared\", onStackCleared);\n }\n\n return {\n addIframe,\n removeIframe,\n destroy: () => {\n ydoc.off(\"update\", onYdocUpdate);\n awareness.off(\"update\", onAwarenessUpdate);\n window.removeEventListener(\"message\", onMessage);\n if (undoManager) {\n undoManager.off(\"stack-item-popped\", onUndoPopped);\n undoManager.off(\"stack-cleared\", onStackCleared);\n }\n iframes.clear();\n iframeReady.clear();\n },\n };\n}\n"],"names":["awareness","encodeAwarenessUpdate","Y","applyAwarenessUpdate"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAKO,MAAM,gBAAwB,CAAA;ACa9B,SAAS,yBACd,MACAA,aACA,SACoB;AACpB,QAAM,EAAE,gBAAgB,WAAW,CAAA;AACnC,QAAM,8BAAc,IAAA;AACpB,QAAM,kCAAkB,IAAA;AAExB,QAAM,eAAe,CAAC,QAAoB,WAAoB;AAC5D,QAAI,WAAW,cAAe;AAC9B,mBAAe,eAAe,MAAM;AAAA,EACtC;AAEA,QAAM,oBAAoB,CAAC;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,EAAA,MAKI;AACJ,UAAM,UAAU,CAAC,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO;AACjD,QAAI,QAAQ,WAAW,EAAG;AAC1B,UAAM,SAASC,UAAAA,sBAAsBD,aAAW,OAAO;AACvD,mBAAe,oBAAoB,MAAM;AAAA,EAC3C;AAEA,WAAS,eAAe,MAAc,SAAqB,eAAwB;AACjF,eAAW,UAAU,QAAQ,UAAU;AACrC,UAAI,OAAO,iBAAiB,OAAO,kBAAkB,eAAe;AAClE,eAAO,cAAc,YAAY,EAAE,MAAM,QAAA,GAAW,GAAG;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,CAAC,UAAwB;AACzC,QAAI,WAA0B;AAC9B,eAAW,CAAC,IAAI,MAAM,KAAK,SAAS;AAClC,UAAI,MAAM,WAAW,OAAO,eAAe;AACzC,mBAAW;AACX;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,SAAU;AAEf,UAAM,EAAE,MAAM,SAAS,QAAA,IAAY,MAAM;AACzC,UAAM,eAAe,MAAM;AAE3B,QAAI,YAAY,QAAQ;AACtB,UAAI,CAAC,YAAY,IAAI,QAAQ,GAAG;AAC9B,oBAAY,IAAI,QAAQ;AAAA,MAC1B;AACA,YAAM,WAAWE,aAAE,oBAAoB,IAAI;AAC3C,YAAM,iBAAiBD,UAAAA;AAAAA,QACrBD;AAAAA,QACA,MAAM,KAAKA,YAAU,UAAA,EAAY,MAAM;AAAA,MAAA;AAEzC,mBAAa;AAAA,QACX,EAAE,MAAM,aAAa,SAAS,MAAM,KAAK,QAAQ,EAAA;AAAA,QACjD;AAAA,MAAA;AAEF,mBAAa;AAAA,QACX;AAAA,UACE,MAAM;AAAA,UACN,SAAS,MAAM,KAAK,cAAc;AAAA,UAClC,gBAAgBA,YAAU;AAAA,QAAA;AAAA,QAE5B;AAAA,MAAA;AAAA,IAEJ,WAAW,YAAY,QAAQ;AAC7B,mBAAa;AAAA,QACX,EAAE,MAAM,QAAQ,gBAAgBA,YAAU,SAAA;AAAA,QAC1C;AAAA,MAAA;AAAA,IAEJ,WAAW,YAAY,eAAe;AACpC,YAAM,SAAS,IAAI,WAAW,OAAO;AACrCE,mBAAE,YAAY,MAAM,QAAQ,aAAa;AACzC,qBAAe,eAAe,QAAQ,YAAY;AAAA,IACpD,WAAW,YAAY,oBAAoB;AACzCC,gBAAAA,qBAAqBH,aAAW,IAAI,WAAW,OAAO,GAAG,IAAI;AAAA,IAC/D,WAAW,YAAY,UAAU,aAAa;AAC5C,kBAAY,KAAA;AAAA,IACd,WAAW,YAAY,UAAU,aAAa;AAC5C,kBAAY,KAAA;AAAA,IACd;AAAA,EACF;AAEA,WAAS,UAAU,QAA2B,UAAkB;AAC9D,YAAQ,IAAI,UAAU,MAAM;AAAA,EAC9B;AAEA,WAAS,aAAa,UAAkB;AACtC,YAAQ,OAAO,QAAQ;AACvB,gBAAY,OAAO,QAAQ;AAAA,EAC7B;AAEA,QAAM,eAAe,CAAC,MAAyD;AAC7E,UAAM,IAAI,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE;AACxC,QAAI,MAAM,QAAQ;AAChB,qBAAe,QAAQ,IAAI,YAAY;AAAA,IACzC,WAAW,MAAM,QAAQ;AACvB,qBAAe,QAAQ,IAAI,YAAY;AAAA,IACzC;AAAA,EACF;AAEA,QAAM,iBAAiB,MAAM;AAC3B,mBAAe,SAAS,IAAI,YAAY;AAAA,EAC1C;AAEA,OAAK,GAAG,UAAU,YAAY;AAC9BA,cAAU,GAAG,UAAU,iBAAiB;AACxC,SAAO,iBAAiB,WAAW,SAAS;AAC5C,MAAI,aAAa;AACf,gBAAY,GAAG,qBAAqB,YAAY;AAChD,gBAAY,GAAG,iBAAiB,cAAc;AAAA,EAChD;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,SAAS,MAAM;AACb,WAAK,IAAI,UAAU,YAAY;AAC/BA,kBAAU,IAAI,UAAU,iBAAiB;AACzC,aAAO,oBAAoB,WAAW,SAAS;AAC/C,UAAI,aAAa;AACf,oBAAY,IAAI,qBAAqB,YAAY;AACjD,oBAAY,IAAI,iBAAiB,cAAc;AAAA,MACjD;AACA,cAAQ,MAAA;AACR,kBAAY,MAAA;AAAA,IACd;AAAA,EAAA;AAEJ;;"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import * as Y from "yjs";
|
|
2
2
|
import { encodeAwarenessUpdate, applyAwarenessUpdate } from "y-protocols/awareness";
|
|
3
|
-
|
|
3
|
+
const IFRAME_ORIGIN = {};
|
|
4
|
+
function createIframeBridgeServer(ydoc, awareness, options) {
|
|
5
|
+
const { undoManager } = options ?? {};
|
|
4
6
|
const iframes = /* @__PURE__ */ new Map();
|
|
5
7
|
const iframeReady = /* @__PURE__ */ new Set();
|
|
6
|
-
const onYdocUpdate = (update) => {
|
|
8
|
+
const onYdocUpdate = (update, origin) => {
|
|
9
|
+
if (origin === IFRAME_ORIGIN) return;
|
|
7
10
|
broadcastToAll("ydoc-update", update);
|
|
8
11
|
};
|
|
9
12
|
const onAwarenessUpdate = ({
|
|
@@ -16,9 +19,9 @@ function createIframeBridgeServer(ydoc, awareness) {
|
|
|
16
19
|
const update = encodeAwarenessUpdate(awareness, changes);
|
|
17
20
|
broadcastToAll("awareness-update", update);
|
|
18
21
|
};
|
|
19
|
-
function broadcastToAll(type, payload) {
|
|
22
|
+
function broadcastToAll(type, payload, excludeSource) {
|
|
20
23
|
for (const iframe of iframes.values()) {
|
|
21
|
-
if (iframe.contentWindow) {
|
|
24
|
+
if (iframe.contentWindow && iframe.contentWindow !== excludeSource) {
|
|
22
25
|
iframe.contentWindow.postMessage({ type, payload }, "*");
|
|
23
26
|
}
|
|
24
27
|
}
|
|
@@ -61,9 +64,15 @@ function createIframeBridgeServer(ydoc, awareness) {
|
|
|
61
64
|
"*"
|
|
62
65
|
);
|
|
63
66
|
} else if (msgType === "ydoc-update") {
|
|
64
|
-
|
|
67
|
+
const update = new Uint8Array(payload);
|
|
68
|
+
Y.applyUpdate(ydoc, update, IFRAME_ORIGIN);
|
|
69
|
+
broadcastToAll("ydoc-update", update, sourceWindow);
|
|
65
70
|
} else if (msgType === "awareness-update") {
|
|
66
71
|
applyAwarenessUpdate(awareness, new Uint8Array(payload), null);
|
|
72
|
+
} else if (msgType === "undo" && undoManager) {
|
|
73
|
+
undoManager.undo();
|
|
74
|
+
} else if (msgType === "redo" && undoManager) {
|
|
75
|
+
undoManager.redo();
|
|
67
76
|
}
|
|
68
77
|
};
|
|
69
78
|
function addIframe(iframe, iframeId) {
|
|
@@ -73,16 +82,35 @@ function createIframeBridgeServer(ydoc, awareness) {
|
|
|
73
82
|
iframes.delete(iframeId);
|
|
74
83
|
iframeReady.delete(iframeId);
|
|
75
84
|
}
|
|
85
|
+
const onUndoPopped = (e) => {
|
|
86
|
+
const t = e && (e.type || e.reason || e.kind);
|
|
87
|
+
if (t === "undo") {
|
|
88
|
+
broadcastToAll("undo", new Uint8Array());
|
|
89
|
+
} else if (t === "redo") {
|
|
90
|
+
broadcastToAll("redo", new Uint8Array());
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const onStackCleared = () => {
|
|
94
|
+
broadcastToAll("clear", new Uint8Array());
|
|
95
|
+
};
|
|
76
96
|
ydoc.on("update", onYdocUpdate);
|
|
77
97
|
awareness.on("update", onAwarenessUpdate);
|
|
78
98
|
window.addEventListener("message", onMessage);
|
|
99
|
+
if (undoManager) {
|
|
100
|
+
undoManager.on("stack-item-popped", onUndoPopped);
|
|
101
|
+
undoManager.on("stack-cleared", onStackCleared);
|
|
102
|
+
}
|
|
79
103
|
return {
|
|
80
104
|
addIframe,
|
|
81
105
|
removeIframe,
|
|
82
|
-
|
|
106
|
+
destroy: () => {
|
|
83
107
|
ydoc.off("update", onYdocUpdate);
|
|
84
108
|
awareness.off("update", onAwarenessUpdate);
|
|
85
109
|
window.removeEventListener("message", onMessage);
|
|
110
|
+
if (undoManager) {
|
|
111
|
+
undoManager.off("stack-item-popped", onUndoPopped);
|
|
112
|
+
undoManager.off("stack-cleared", onStackCleared);
|
|
113
|
+
}
|
|
86
114
|
iframes.clear();
|
|
87
115
|
iframeReady.clear();
|
|
88
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.es.js","sources":["../../../iframe-bridge/src/server.ts"],"sourcesContent":["import * as Y from \"yjs\";\nimport {\n Awareness,\n applyAwarenessUpdate,\n encodeAwarenessUpdate,\n} from \"y-protocols/awareness\";\n\nexport interface IframeBridgeServer {\n addIframe: (iframe: HTMLIFrameElement, iframeId: string) => void;\n removeIframe: (iframeId: string) => void;\n
|
|
1
|
+
{"version":3,"file":"server.es.js","sources":["../../../iframe-bridge/src/origin.ts","../../../iframe-bridge/src/server.ts"],"sourcesContent":["/**\n * iframe bridge 内部变更的 origin 标识。\n * 当 provider 端产生 ydoc-update 时,使用此 origin 标记,\n * 以便 server 端的 UndoManager 能正确追踪来自 iframe 的变更。\n */\nexport const IFRAME_ORIGIN: object = {};\n","import * as Y from \"yjs\";\nimport {\n Awareness,\n applyAwarenessUpdate,\n encodeAwarenessUpdate,\n} from \"y-protocols/awareness\";\nimport { IFRAME_ORIGIN } from \"./origin.js\";\n\nexport interface IframeBridgeServerOptions {\n undoManager?: Y.UndoManager;\n}\n\nexport interface IframeBridgeServer {\n addIframe: (iframe: HTMLIFrameElement, iframeId: string) => void;\n removeIframe: (iframeId: string) => void;\n destroy: () => void;\n}\n\nexport function createIframeBridgeServer(\n ydoc: Y.Doc,\n awareness: Awareness,\n options?: IframeBridgeServerOptions,\n): IframeBridgeServer {\n const { undoManager } = options ?? {};\n const iframes = new Map<string, HTMLIFrameElement>();\n const iframeReady = new Set<string>();\n\n const onYdocUpdate = (update: Uint8Array, origin: unknown) => {\n if (origin === IFRAME_ORIGIN) return;\n broadcastToAll(\"ydoc-update\", update);\n };\n\n const onAwarenessUpdate = ({\n added,\n updated,\n removed,\n }: {\n added: number[];\n updated: number[];\n removed: number[];\n }) => {\n const changes = [...added, ...updated, ...removed];\n if (changes.length === 0) return;\n const update = encodeAwarenessUpdate(awareness, changes);\n broadcastToAll(\"awareness-update\", update);\n };\n\n function broadcastToAll(type: string, payload: Uint8Array, excludeSource?: Window) {\n for (const iframe of iframes.values()) {\n if (iframe.contentWindow && iframe.contentWindow !== excludeSource) {\n iframe.contentWindow.postMessage({ type, payload }, \"*\");\n }\n }\n }\n\n const onMessage = (event: MessageEvent) => {\n let iframeId: string | null = null;\n for (const [id, iframe] of iframes) {\n if (event.source === iframe.contentWindow) {\n iframeId = id;\n break;\n }\n }\n if (!iframeId) return;\n\n const { type: msgType, payload } = event.data;\n const sourceWindow = event.source as Window;\n\n if (msgType === \"init\") {\n if (!iframeReady.has(iframeId)) {\n iframeReady.add(iframeId);\n }\n const docState = Y.encodeStateAsUpdate(ydoc);\n const awarenessState = encodeAwarenessUpdate(\n awareness,\n Array.from(awareness.getStates().keys()),\n );\n sourceWindow.postMessage(\n { type: \"ydoc-sync\", payload: Array.from(docState) },\n \"*\",\n );\n sourceWindow.postMessage(\n {\n type: \"awareness-sync\",\n payload: Array.from(awarenessState),\n serverClientId: awareness.clientID,\n },\n \"*\",\n );\n } else if (msgType === \"ping\") {\n sourceWindow.postMessage(\n { type: \"pong\", serverClientId: awareness.clientID },\n \"*\",\n );\n } else if (msgType === \"ydoc-update\") {\n const update = new Uint8Array(payload);\n Y.applyUpdate(ydoc, update, IFRAME_ORIGIN);\n broadcastToAll(\"ydoc-update\", update, sourceWindow);\n } else if (msgType === \"awareness-update\") {\n applyAwarenessUpdate(awareness, new Uint8Array(payload), null);\n } else if (msgType === \"undo\" && undoManager) {\n undoManager.undo();\n } else if (msgType === \"redo\" && undoManager) {\n undoManager.redo();\n }\n };\n\n function addIframe(iframe: HTMLIFrameElement, iframeId: string) {\n iframes.set(iframeId, iframe);\n }\n\n function removeIframe(iframeId: string) {\n iframes.delete(iframeId);\n iframeReady.delete(iframeId);\n }\n\n const onUndoPopped = (e: { type?: string; reason?: string; kind?: string }) => {\n const t = e && (e.type || e.reason || e.kind);\n if (t === \"undo\") {\n broadcastToAll(\"undo\", new Uint8Array());\n } else if (t === \"redo\") {\n broadcastToAll(\"redo\", new Uint8Array());\n }\n };\n\n const onStackCleared = () => {\n broadcastToAll(\"clear\", new Uint8Array());\n };\n\n ydoc.on(\"update\", onYdocUpdate);\n awareness.on(\"update\", onAwarenessUpdate);\n window.addEventListener(\"message\", onMessage);\n if (undoManager) {\n undoManager.on(\"stack-item-popped\", onUndoPopped);\n undoManager.on(\"stack-cleared\", onStackCleared);\n }\n\n return {\n addIframe,\n removeIframe,\n destroy: () => {\n ydoc.off(\"update\", onYdocUpdate);\n awareness.off(\"update\", onAwarenessUpdate);\n window.removeEventListener(\"message\", onMessage);\n if (undoManager) {\n undoManager.off(\"stack-item-popped\", onUndoPopped);\n undoManager.off(\"stack-cleared\", onStackCleared);\n }\n iframes.clear();\n iframeReady.clear();\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { Binding } from "./binding";
|
|
2
2
|
export type { BindDrawioFileOptions, InitialContentStrategy } from "./binding";
|
|
3
|
-
export {
|
|
3
|
+
export { xml2ydoc, ydoc2xml } from "./transformer";
|
|
4
4
|
export { LOCAL_ORIGIN } from "./helper/origin";
|
|
5
5
|
export { DEFAULT_USER_NAME_KEY, DEFAULT_USER_COLOR_KEY, } from "./binding/collaborator";
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAC/E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC"}
|
package/package.json
CHANGED
package/transformer/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import * as Y from "yjs";
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function
|
|
2
|
+
export declare function xml2ydoc(xml: string, doc: Y.Doc): Y.Doc;
|
|
3
|
+
export declare function ydoc2xml(doc: Y.Doc, spaces?: number): string;
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transformer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAezB,wBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transformer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAezB,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAkBvD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,SAAI,GAAG,MAAM,CAsBvD"}
|
package/y-mxgraph.cjs.js
CHANGED
|
@@ -550,7 +550,7 @@ function generatePatch(events, explicitDoc) {
|
|
|
550
550
|
u.cells = u.cells || {};
|
|
551
551
|
return u.cells;
|
|
552
552
|
};
|
|
553
|
-
const orderIds = orderArr.toArray();
|
|
553
|
+
const orderIds = (orderArr == null ? void 0 : orderArr.toArray()) ?? [];
|
|
554
554
|
const currDiagramOrder = orderIds.length > 0 ? orderIds : diagramsMap ? Array.from(diagramsMap.keys()) : [];
|
|
555
555
|
const diagramsList = currDiagramOrder.map((id) => diagramsMap.get(id)).filter((d) => !!d);
|
|
556
556
|
const currCellsOrder = /* @__PURE__ */ new Map();
|
|
@@ -770,7 +770,7 @@ function generatePatch(events, explicitDoc) {
|
|
|
770
770
|
docSnapshots.set(doc, snap);
|
|
771
771
|
return patch;
|
|
772
772
|
}
|
|
773
|
-
function
|
|
773
|
+
function xml2ydoc(xml, doc) {
|
|
774
774
|
const object = parse$4(xml);
|
|
775
775
|
const mxfile = object.mxfile;
|
|
776
776
|
const mxGraphModel = object.mxGraphModel;
|
|
@@ -787,7 +787,7 @@ function xml2doc(xml, doc) {
|
|
|
787
787
|
}
|
|
788
788
|
return doc;
|
|
789
789
|
}
|
|
790
|
-
function
|
|
790
|
+
function ydoc2xml(doc, spaces = 0) {
|
|
791
791
|
if (doc.share.has(key)) {
|
|
792
792
|
return serializer$1(
|
|
793
793
|
{
|
|
@@ -1445,7 +1445,7 @@ function reconcileInitialContent(doc, file, strategy, applyFileData) {
|
|
|
1445
1445
|
const fileHasDiagrams = fileHasAnyData && file.data.includes("<diagram");
|
|
1446
1446
|
if (strategy === "replace") {
|
|
1447
1447
|
if (docHasData) {
|
|
1448
|
-
const xml2 =
|
|
1448
|
+
const xml2 = ydoc2xml(doc);
|
|
1449
1449
|
if (xml2 && xml2.includes("<diagram")) {
|
|
1450
1450
|
applyFileData(file, xml2);
|
|
1451
1451
|
} else if (!fileHasAnyData) {
|
|
@@ -1465,12 +1465,12 @@ function reconcileInitialContent(doc, file, strategy, applyFileData) {
|
|
|
1465
1465
|
if (!docHasData && fileHasDiagrams) {
|
|
1466
1466
|
try {
|
|
1467
1467
|
doc.transact(() => {
|
|
1468
|
-
|
|
1468
|
+
xml2ydoc(file.data, doc);
|
|
1469
1469
|
});
|
|
1470
1470
|
return true;
|
|
1471
1471
|
} catch (err) {
|
|
1472
1472
|
console.warn(
|
|
1473
|
-
"[y-mxgraph] merge 模式下
|
|
1473
|
+
"[y-mxgraph] merge 模式下 xml2ydoc 失败,回退 replace:",
|
|
1474
1474
|
err
|
|
1475
1475
|
);
|
|
1476
1476
|
applyFileData(file, Binding.generateFileTemplate("diagram-0"));
|
|
@@ -1478,7 +1478,7 @@ function reconcileInitialContent(doc, file, strategy, applyFileData) {
|
|
|
1478
1478
|
}
|
|
1479
1479
|
}
|
|
1480
1480
|
if (docHasData && !fileHasDiagrams) {
|
|
1481
|
-
const xml2 =
|
|
1481
|
+
const xml2 = ydoc2xml(doc);
|
|
1482
1482
|
if (xml2 && xml2.includes("<diagram")) {
|
|
1483
1483
|
applyFileData(file, xml2);
|
|
1484
1484
|
} else if (!fileHasAnyData) {
|
|
@@ -1488,11 +1488,11 @@ function reconcileInitialContent(doc, file, strategy, applyFileData) {
|
|
|
1488
1488
|
}
|
|
1489
1489
|
const ok = mergeFileIntoDoc(doc, file.data, strategy);
|
|
1490
1490
|
if (!ok) {
|
|
1491
|
-
const xml2 =
|
|
1491
|
+
const xml2 = ydoc2xml(doc);
|
|
1492
1492
|
if (xml2 && xml2.includes("<diagram")) applyFileData(file, xml2);
|
|
1493
1493
|
return mxfileMap.size > 0;
|
|
1494
1494
|
}
|
|
1495
|
-
const xml =
|
|
1495
|
+
const xml = ydoc2xml(doc);
|
|
1496
1496
|
if (xml && xml.includes("<diagram")) applyFileData(file, xml);
|
|
1497
1497
|
return true;
|
|
1498
1498
|
}
|
|
@@ -1512,6 +1512,7 @@ class Binding {
|
|
|
1512
1512
|
disableBeforeUnload = true
|
|
1513
1513
|
} = options;
|
|
1514
1514
|
this.doc = doc;
|
|
1515
|
+
this.file = file;
|
|
1515
1516
|
this.initialContentStrategy = initialContent;
|
|
1516
1517
|
const ui = file.getUi();
|
|
1517
1518
|
const graph = ui.editor.graph;
|
|
@@ -1545,7 +1546,7 @@ class Binding {
|
|
|
1545
1546
|
if (patchKeys.length === 0) return;
|
|
1546
1547
|
if (!this.docInitialized) {
|
|
1547
1548
|
doc.transact(() => {
|
|
1548
|
-
|
|
1549
|
+
xml2ydoc(file.data, doc);
|
|
1549
1550
|
initDocSnapshot(doc, false);
|
|
1550
1551
|
});
|
|
1551
1552
|
this.docInitialized = true;
|
|
@@ -1564,7 +1565,7 @@ class Binding {
|
|
|
1564
1565
|
const mxfileMap = doc.getMap(key);
|
|
1565
1566
|
const diagramMap = mxfileMap.get(key$1);
|
|
1566
1567
|
if (diagramMap && diagramMap.size > 0) {
|
|
1567
|
-
const xml =
|
|
1568
|
+
const xml = ydoc2xml(doc);
|
|
1568
1569
|
if (xml && xml.includes("<diagram")) {
|
|
1569
1570
|
this.suppressLocalApply = true;
|
|
1570
1571
|
try {
|
|
@@ -1674,6 +1675,6 @@ exports.Binding = Binding;
|
|
|
1674
1675
|
exports.DEFAULT_USER_COLOR_KEY = DEFAULT_USER_COLOR_KEY;
|
|
1675
1676
|
exports.DEFAULT_USER_NAME_KEY = DEFAULT_USER_NAME_KEY;
|
|
1676
1677
|
exports.LOCAL_ORIGIN = LOCAL_ORIGIN;
|
|
1677
|
-
exports.
|
|
1678
|
-
exports.
|
|
1678
|
+
exports.xml2ydoc = xml2ydoc;
|
|
1679
|
+
exports.ydoc2xml = ydoc2xml;
|
|
1679
1680
|
//# sourceMappingURL=y-mxgraph.cjs.js.map
|