y-mxgraph 0.5.6 → 0.5.7
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/iframe-bridge/{provider.cjs.js → provider.cjs} +1 -1
- package/iframe-bridge/provider.cjs.map +1 -0
- package/iframe-bridge/{provider.es.js → provider.js} +1 -1
- package/iframe-bridge/provider.js.map +1 -0
- package/iframe-bridge/{server.cjs.js → server.cjs} +1 -1
- package/iframe-bridge/server.cjs.map +1 -0
- package/iframe-bridge/{server.es.js → server.js} +1 -1
- package/iframe-bridge/server.js.map +1 -0
- package/index-BGGQoepi.js +241 -0
- package/index-BGGQoepi.js.map +1 -0
- package/index-Dpa3-atS.cjs +257 -0
- package/index-Dpa3-atS.cjs.map +1 -0
- package/package.json +14 -9
- package/transformer.cjs +6 -0
- package/transformer.cjs.map +1 -0
- package/transformer.js +6 -0
- package/transformer.js.map +1 -0
- package/{y-mxgraph.cjs.js → y-mxgraph.cjs} +70 -294
- package/y-mxgraph.cjs.map +1 -0
- package/{y-mxgraph.es.js → y-mxgraph.js} +5 -229
- package/y-mxgraph.js.map +1 -0
- package/iframe-bridge/provider.cjs.js.map +0 -1
- package/iframe-bridge/provider.es.js.map +0 -1
- package/iframe-bridge/server.cjs.js.map +0 -1
- package/iframe-bridge/server.es.js.map +0 -1
- package/y-mxgraph.cjs.js.map +0 -1
- package/y-mxgraph.es.js.map +0 -1
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const xmlJs = require("xml-js");
|
|
3
|
+
const Y = require("yjs");
|
|
4
|
+
function _interopNamespaceDefault(e) {
|
|
5
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
6
|
+
if (e) {
|
|
7
|
+
for (const k in e) {
|
|
8
|
+
if (k !== "default") {
|
|
9
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
10
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: () => e[k]
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
n.default = e;
|
|
18
|
+
return Object.freeze(n);
|
|
19
|
+
}
|
|
20
|
+
const Y__namespace = /* @__PURE__ */ _interopNamespaceDefault(Y);
|
|
21
|
+
function deepProcess(node) {
|
|
22
|
+
if (node == null) return;
|
|
23
|
+
if (Array.isArray(node)) {
|
|
24
|
+
for (const item of node) {
|
|
25
|
+
deepProcess(item);
|
|
26
|
+
}
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (typeof node !== "object") return;
|
|
30
|
+
const obj = node;
|
|
31
|
+
const keys = Object.keys(obj);
|
|
32
|
+
for (const key2 of keys) {
|
|
33
|
+
if (key2 === "_attributes") continue;
|
|
34
|
+
let value = obj[key2];
|
|
35
|
+
const keyLower = key2.toLowerCase();
|
|
36
|
+
if ((keyLower === "diagram" || keyLower === "mxcell") && value !== void 0 && !Array.isArray(value)) {
|
|
37
|
+
obj[key2] = [value];
|
|
38
|
+
value = obj[key2];
|
|
39
|
+
}
|
|
40
|
+
if (Array.isArray(value)) {
|
|
41
|
+
for (const v of value) deepProcess(v);
|
|
42
|
+
} else if (value && typeof value === "object") {
|
|
43
|
+
deepProcess(value);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function parse$4(xml) {
|
|
48
|
+
const result = xmlJs.xml2js(xml, { compact: true });
|
|
49
|
+
deepProcess(result);
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
function serializer$1(obj, spaces = 2) {
|
|
53
|
+
return xmlJs.js2xml(obj, {
|
|
54
|
+
compact: true,
|
|
55
|
+
spaces
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
const key$3 = "mxCell";
|
|
59
|
+
const mxGeometryKey = "mxGeometry";
|
|
60
|
+
const mxGeometryAttributeKey = "geometry";
|
|
61
|
+
function parse$3(object) {
|
|
62
|
+
var _a;
|
|
63
|
+
const xmlElement = new Y__namespace.XmlElement("mxCell");
|
|
64
|
+
for (const attribute of Object.keys(object._attributes || {})) {
|
|
65
|
+
xmlElement.setAttribute(
|
|
66
|
+
attribute,
|
|
67
|
+
`${((_a = object._attributes) == null ? void 0 : _a[attribute]) || ""}`
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
if (object[mxGeometryKey]) {
|
|
71
|
+
const geometry = object[mxGeometryKey];
|
|
72
|
+
const geometryString = xmlJs.js2xml(geometry, {
|
|
73
|
+
compact: true
|
|
74
|
+
});
|
|
75
|
+
xmlElement.setAttribute(mxGeometryAttributeKey, geometryString);
|
|
76
|
+
delete object[mxGeometryKey];
|
|
77
|
+
}
|
|
78
|
+
return xmlElement;
|
|
79
|
+
}
|
|
80
|
+
function serialize$2(xmlElement) {
|
|
81
|
+
const rawAttributes = {
|
|
82
|
+
...xmlElement.getAttributes()
|
|
83
|
+
};
|
|
84
|
+
let mxGeometry = null;
|
|
85
|
+
let mxGeometryString;
|
|
86
|
+
if (mxGeometryAttributeKey in rawAttributes) {
|
|
87
|
+
mxGeometryString = rawAttributes[mxGeometryAttributeKey];
|
|
88
|
+
delete rawAttributes[mxGeometryAttributeKey];
|
|
89
|
+
}
|
|
90
|
+
const attributes = {};
|
|
91
|
+
for (const [key2, value] of Object.entries(rawAttributes)) {
|
|
92
|
+
if (typeof value === "string") {
|
|
93
|
+
attributes[key2] = value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
94
|
+
} else if (value != null) {
|
|
95
|
+
attributes[key2] = String(value);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (mxGeometryString) {
|
|
99
|
+
try {
|
|
100
|
+
const parsed = xmlJs.xml2js(mxGeometryString, { compact: true });
|
|
101
|
+
mxGeometry = parsed[mxGeometryKey] ?? null;
|
|
102
|
+
if (mxGeometry && mxGeometry._attributes) {
|
|
103
|
+
mxGeometry._attributes["as"] = "geometry";
|
|
104
|
+
}
|
|
105
|
+
} catch (e) {
|
|
106
|
+
console.warn("[y-mxgraph] Failed to parse mxGeometry:", e);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const obj = {
|
|
110
|
+
_attributes: attributes
|
|
111
|
+
};
|
|
112
|
+
if (mxGeometry) {
|
|
113
|
+
obj[mxGeometryKey] = mxGeometry;
|
|
114
|
+
}
|
|
115
|
+
return obj;
|
|
116
|
+
}
|
|
117
|
+
const key$2 = "mxGraphModel";
|
|
118
|
+
const mxCellOrderKey = key$3 + "Order";
|
|
119
|
+
function parse$2(object, doc) {
|
|
120
|
+
const mxCells = (object.root[key$3] || []).map((cell) => {
|
|
121
|
+
var _a;
|
|
122
|
+
return {
|
|
123
|
+
value: parse$3(cell),
|
|
124
|
+
id: ((_a = cell._attributes) == null ? void 0 : _a.id) || ""
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
const mxGraphElement = (doc == null ? void 0 : doc.getMap(key$2)) || new Y__namespace.Map();
|
|
128
|
+
const cells = new Y__namespace.Map();
|
|
129
|
+
const cellsOrder = new Y__namespace.Array();
|
|
130
|
+
mxCells.forEach((cell) => {
|
|
131
|
+
cells.set(cell.id, cell.value);
|
|
132
|
+
});
|
|
133
|
+
cellsOrder.push(mxCells.map((cell) => cell.id));
|
|
134
|
+
mxGraphElement.set(key$3, cells);
|
|
135
|
+
mxGraphElement.set(mxCellOrderKey, cellsOrder);
|
|
136
|
+
return mxGraphElement;
|
|
137
|
+
}
|
|
138
|
+
function serialize$1(map) {
|
|
139
|
+
const cells = map.get(key$3);
|
|
140
|
+
const cellsOrder = map.get(mxCellOrderKey);
|
|
141
|
+
return {
|
|
142
|
+
_attributes: {},
|
|
143
|
+
root: {
|
|
144
|
+
[key$3]: cellsOrder.toArray().map((id) => serialize$2(cells.get(id)))
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
const key$1 = "diagram";
|
|
149
|
+
function parse$1(object) {
|
|
150
|
+
var _a, _b;
|
|
151
|
+
const yDiagramElement = new Y__namespace.Map();
|
|
152
|
+
yDiagramElement.set("name", `${((_a = object._attributes) == null ? void 0 : _a.name) || ""}`);
|
|
153
|
+
yDiagramElement.set("id", `${((_b = object._attributes) == null ? void 0 : _b.id) || ""}`);
|
|
154
|
+
const mxGraphModel = parse$2(object[key$2]);
|
|
155
|
+
yDiagramElement.set(key$2, mxGraphModel);
|
|
156
|
+
return yDiagramElement;
|
|
157
|
+
}
|
|
158
|
+
function serialize(yDiagram) {
|
|
159
|
+
const mxGraphModel = yDiagram.get(key$2);
|
|
160
|
+
return {
|
|
161
|
+
_attributes: {
|
|
162
|
+
name: yDiagram.get("name"),
|
|
163
|
+
id: yDiagram.get("id")
|
|
164
|
+
},
|
|
165
|
+
[key$2]: mxGraphModel ? serialize$1(mxGraphModel) : void 0
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
const key = "mxfile";
|
|
169
|
+
const diagramOrderKey = key$1 + "Order";
|
|
170
|
+
function parse(object, doc) {
|
|
171
|
+
var _a;
|
|
172
|
+
const mxfile = doc.getMap(key);
|
|
173
|
+
mxfile.set("pages", (((_a = object._attributes) == null ? void 0 : _a.pages) || "1") + "");
|
|
174
|
+
const diagramList = object.diagram.map((diagram) => {
|
|
175
|
+
var _a2;
|
|
176
|
+
return {
|
|
177
|
+
value: parse$1(diagram),
|
|
178
|
+
id: ((_a2 = diagram._attributes) == null ? void 0 : _a2.id) || ""
|
|
179
|
+
};
|
|
180
|
+
});
|
|
181
|
+
const diagramMap = new Y__namespace.Map();
|
|
182
|
+
const diagramOrder = new Y__namespace.Array();
|
|
183
|
+
diagramList.forEach((diagram) => {
|
|
184
|
+
diagramMap.set(diagram.id, diagram.value);
|
|
185
|
+
});
|
|
186
|
+
diagramOrder.push(diagramList.map((diagram) => diagram.id));
|
|
187
|
+
mxfile.set(key$1, diagramMap);
|
|
188
|
+
mxfile.set(diagramOrderKey, diagramOrder);
|
|
189
|
+
return mxfile;
|
|
190
|
+
}
|
|
191
|
+
function serializer(yMxFile) {
|
|
192
|
+
const diagrams = yMxFile.get(key$1);
|
|
193
|
+
const diagramOrder = yMxFile.get(
|
|
194
|
+
diagramOrderKey
|
|
195
|
+
);
|
|
196
|
+
const orderIds = diagramOrder ? diagramOrder.toArray() : [];
|
|
197
|
+
const ids = orderIds.length > 0 ? orderIds : diagrams ? Array.from(diagrams.keys()) : [];
|
|
198
|
+
const obj = {
|
|
199
|
+
_attributes: {
|
|
200
|
+
pages: yMxFile.get("pages") || "1"
|
|
201
|
+
},
|
|
202
|
+
[key$1]: ids.map((id) => diagrams.get(id)).filter((d) => !!d).map((diagramElement) => serialize(diagramElement))
|
|
203
|
+
};
|
|
204
|
+
return obj;
|
|
205
|
+
}
|
|
206
|
+
function xml2ydoc(xml, doc) {
|
|
207
|
+
const object = parse$4(xml);
|
|
208
|
+
const mxfile = object.mxfile;
|
|
209
|
+
const mxGraphModel = object.mxGraphModel;
|
|
210
|
+
if (mxfile) {
|
|
211
|
+
doc.transact(() => {
|
|
212
|
+
parse(mxfile, doc);
|
|
213
|
+
});
|
|
214
|
+
} else if (mxGraphModel) {
|
|
215
|
+
doc.transact(() => {
|
|
216
|
+
parse$2(mxGraphModel, doc);
|
|
217
|
+
});
|
|
218
|
+
} else {
|
|
219
|
+
throw new Error("不支持的文件格式");
|
|
220
|
+
}
|
|
221
|
+
return doc;
|
|
222
|
+
}
|
|
223
|
+
function ydoc2xml(doc, spaces = 0) {
|
|
224
|
+
if (doc.share.has(key)) {
|
|
225
|
+
return serializer$1(
|
|
226
|
+
{
|
|
227
|
+
[key]: serializer(
|
|
228
|
+
doc.share.get(key)
|
|
229
|
+
)
|
|
230
|
+
},
|
|
231
|
+
spaces
|
|
232
|
+
);
|
|
233
|
+
} else if (doc.share.has(key$2)) {
|
|
234
|
+
return serializer$1(
|
|
235
|
+
{
|
|
236
|
+
[key$2]: serialize$1(
|
|
237
|
+
doc.share.get(key$2)
|
|
238
|
+
)
|
|
239
|
+
},
|
|
240
|
+
spaces
|
|
241
|
+
);
|
|
242
|
+
}
|
|
243
|
+
return "";
|
|
244
|
+
}
|
|
245
|
+
exports.diagramOrderKey = diagramOrderKey;
|
|
246
|
+
exports.key = key;
|
|
247
|
+
exports.key$1 = key$1;
|
|
248
|
+
exports.key$2 = key$2;
|
|
249
|
+
exports.key$3 = key$3;
|
|
250
|
+
exports.mxCellOrderKey = mxCellOrderKey;
|
|
251
|
+
exports.parse = parse$4;
|
|
252
|
+
exports.parse$1 = parse$1;
|
|
253
|
+
exports.serialize = serialize;
|
|
254
|
+
exports.serializer = serializer$1;
|
|
255
|
+
exports.xml2ydoc = xml2ydoc;
|
|
256
|
+
exports.ydoc2xml = ydoc2xml;
|
|
257
|
+
//# sourceMappingURL=index-Dpa3-atS.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-Dpa3-atS.cjs","sources":["../src/helper/xml.ts","../src/models/mxCell.ts","../src/models/mxGraphModel.ts","../src/models/diagram.ts","../src/models/mxfile.ts","../src/transformer/index.ts"],"sourcesContent":["import { xml2js, js2xml, type ElementCompact } from \"xml-js\";\n\nfunction deepProcess(node: unknown): void {\n if (node == null) return;\n\n if (Array.isArray(node)) {\n for (const item of node) {\n deepProcess(item);\n }\n return;\n }\n\n if (typeof node !== \"object\") return;\n\n const obj = node as Record<string, unknown>;\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (key === \"_attributes\") continue;\n\n let value = obj[key];\n const keyLower = key.toLowerCase();\n\n if (\n (keyLower === \"diagram\" || keyLower === \"mxcell\") &&\n value !== undefined &&\n !Array.isArray(value)\n ) {\n obj[key] = [value];\n value = obj[key];\n }\n\n if (Array.isArray(value)) {\n for (const v of value) deepProcess(v);\n } else if (value && typeof value === \"object\") {\n deepProcess(value);\n }\n }\n}\n\nexport function parse(xml: string) {\n const result = xml2js(xml, { compact: true }) as Record<string, unknown>;\n deepProcess(result);\n return result;\n}\n\nexport function serializer(obj: ElementCompact, spaces = 2) {\n return js2xml(obj, {\n compact: true,\n spaces,\n });\n}\n","import * as Y from \"yjs\";\nimport { xml2js, js2xml } from \"xml-js\";\nimport type { ElementCompact } from \"xml-js\";\n\nexport const key = \"mxCell\";\n\nconst mxGeometryKey = \"mxGeometry\";\nconst mxGeometryAttributeKey = \"geometry\";\n\nexport interface MxCellModel extends ElementCompact {\n [mxGeometryKey]?: ElementCompact;\n}\n\nexport function parse(object: MxCellModel): Y.XmlElement {\n const xmlElement = new Y.XmlElement(\"mxCell\");\n\n for (const attribute of Object.keys(object._attributes || {})) {\n xmlElement.setAttribute(\n attribute,\n `${object._attributes?.[attribute] || \"\"}`\n );\n }\n\n if (object[mxGeometryKey]) {\n const geometry = object[mxGeometryKey];\n const geometryString = js2xml(geometry, {\n compact: true,\n });\n xmlElement.setAttribute(mxGeometryAttributeKey, geometryString);\n delete object[mxGeometryKey];\n }\n\n return xmlElement;\n}\n\nexport function serialize(xmlElement: Y.XmlElement) {\n const rawAttributes = {\n ...xmlElement.getAttributes(),\n };\n\n // 提取 mxGeometry(不需要转义,它本身就是 XML 字符串)\n let mxGeometry: ElementCompact | null = null;\n let mxGeometryString: string | undefined;\n\n if (mxGeometryAttributeKey in rawAttributes) {\n mxGeometryString = rawAttributes[mxGeometryAttributeKey];\n delete rawAttributes[mxGeometryAttributeKey];\n }\n\n // 转义其他属性值中的特殊字符\n const attributes: Record<string, string> = {};\n for (const [key, value] of Object.entries(rawAttributes)) {\n if (typeof value === 'string') {\n attributes[key] = value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n } else if (value != null) {\n attributes[key] = String(value);\n }\n }\n\n // 解析 mxGeometry\n if (mxGeometryString) {\n try {\n const parsed = xml2js(mxGeometryString, { compact: true }) as Record<string, ElementCompact>;\n mxGeometry = parsed[mxGeometryKey] ?? null;\n if (mxGeometry && mxGeometry._attributes) {\n mxGeometry._attributes[\"as\"] = \"geometry\";\n }\n } catch (e) {\n console.warn(\"[y-mxgraph] Failed to parse mxGeometry:\", e);\n }\n }\n\n const obj: Record<string, unknown> = {\n _attributes: attributes,\n };\n\n if (mxGeometry) {\n obj[mxGeometryKey] = mxGeometry;\n }\n\n return obj;\n}\n","import * as Y from \"yjs\";\n\nimport {\n key as mxCellKey,\n parse as parseMxCell,\n serialize as serializeMxCell,\n type MxCellModel,\n} from \"./mxCell\";\nimport type { ElementCompact } from \"xml-js\";\n\nexport const key = \"mxGraphModel\";\nexport const mxCellOrderKey = mxCellKey + \"Order\";\n\nexport interface MxGraphModel extends ElementCompact {\n root: {\n mxCell: MxCellModel[];\n };\n}\n\nexport type YMxGraphModel = Y.Map<unknown>;\n\nexport function parse(object: MxGraphModel, doc?: Y.Doc) {\n const mxCells = (object.root[mxCellKey] || []).map((cell: MxCellModel) => {\n return {\n value: parseMxCell(cell),\n id: (cell._attributes?.id || \"\") as string,\n };\n });\n\n const mxGraphElement = doc?.getMap(key) || new Y.Map();\n\n const cells = new Y.Map<Y.XmlElement>();\n const cellsOrder = new Y.Array<string>();\n\n mxCells.forEach((cell) => {\n cells.set(cell.id, cell.value);\n });\n\n cellsOrder.push(mxCells.map((cell) => cell.id));\n\n mxGraphElement.set(mxCellKey, cells);\n mxGraphElement.set(mxCellOrderKey, cellsOrder);\n\n return mxGraphElement as YMxGraphModel;\n}\n\nexport function serialize(map: YMxGraphModel) {\n const cells = map.get(mxCellKey) as unknown as Y.Map<Y.XmlElement>;\n const cellsOrder = map.get(mxCellOrderKey) as unknown as Y.Array<string>;\n return {\n _attributes: {},\n root: {\n [mxCellKey]: cellsOrder\n .toArray()\n .map((id) => serializeMxCell(cells.get(id) as Y.XmlElement)),\n },\n };\n}\n","import * as Y from \"yjs\";\nimport {\n parse as parseMxGraphModel,\n serialize as serializeMxGraphModel,\n key as mxGraphModelKey,\n type MxGraphModel,\n type YMxGraphModel,\n} from \"./mxGraphModel\";\nimport type { ElementCompact } from \"xml-js\";\n\nexport const key = \"diagram\";\n\nexport interface Diagram extends ElementCompact {\n mxGraphModel: MxGraphModel;\n}\n\nexport type YDiagram = Y.Map<unknown>;\n\nexport function parse(object: Diagram): YDiagram {\n const yDiagramElement = new Y.Map();\n yDiagramElement.set(\"name\", `${object._attributes?.name || \"\"}`);\n yDiagramElement.set(\"id\", `${object._attributes?.id || \"\"}`);\n\n const mxGraphModel = parseMxGraphModel(object[mxGraphModelKey]);\n\n yDiagramElement.set(mxGraphModelKey, mxGraphModel);\n return yDiagramElement as YDiagram;\n}\n\nexport function serialize(yDiagram: YDiagram) {\n const mxGraphModel = yDiagram.get(mxGraphModelKey) as unknown as\n | YMxGraphModel\n | undefined;\n\n return {\n _attributes: {\n name: yDiagram.get(\"name\") as unknown as string,\n id: yDiagram.get(\"id\") as unknown as string,\n },\n [mxGraphModelKey]: mxGraphModel\n ? serializeMxGraphModel(mxGraphModel)\n : undefined,\n };\n}\n","import * as Y from \"yjs\";\nimport {\n parse as parseDiagram,\n key as diagramKey,\n serialize as serializeDiagram,\n} from \"./diagram\";\nimport type { Diagram, YDiagram } from \"./diagram\";\nimport type { ElementCompact } from \"xml-js\";\n\nexport const key = \"mxfile\";\nexport const diagramOrderKey = diagramKey + \"Order\";\n\nexport type YMxFile = Y.Map<unknown>;\n\nexport interface MxFile extends ElementCompact {\n diagram: Diagram[];\n}\n\nexport function parse(object: MxFile, doc: Y.Doc) {\n const mxfile = doc.getMap(key);\n mxfile.set(\"pages\", (object._attributes?.pages || \"1\") + \"\");\n\n const diagramList = object.diagram.map((diagram) => ({\n value: parseDiagram(diagram),\n id: (diagram._attributes?.id || \"\") as string,\n }));\n const diagramMap = new Y.Map<YDiagram>();\n const diagramOrder = new Y.Array<string>();\n diagramList.forEach((diagram) => {\n diagramMap.set(diagram.id, diagram.value);\n });\n diagramOrder.push(diagramList.map((diagram) => diagram.id));\n\n mxfile.set(diagramKey, diagramMap);\n mxfile.set(diagramOrderKey, diagramOrder);\n return mxfile;\n}\n\nexport function serializer(yMxFile: YMxFile): ElementCompact {\n const diagrams = yMxFile.get(diagramKey) as unknown as Y.Map<YDiagram>;\n const diagramOrder = yMxFile.get(\n diagramOrderKey,\n ) as unknown as Y.Array<string>;\n\n const orderIds = diagramOrder ? diagramOrder.toArray() : [];\n // 如果 diagramOrder 为空但 diagram map 不为空,使用 diagram map 中的所有 ID\n const ids = orderIds.length > 0 ? orderIds : (diagrams ? Array.from(diagrams.keys()) : []);\n\n const obj: Record<string, unknown> = {\n _attributes: {\n pages: (yMxFile.get(\"pages\") as string) || \"1\",\n },\n [diagramKey]: ids\n .map((id) => diagrams.get(id) as unknown as YDiagram)\n .filter((d): d is YDiagram => !!d)\n .map((diagramElement) => serializeDiagram(diagramElement)),\n };\n\n return obj as ElementCompact;\n}\n","import * as Y from \"yjs\";\nimport { parse, serializer } from \"../helper/xml\";\nimport {\n parse as parseMxFile,\n key as mxfileKey,\n serializer as serializerMxFile,\n type YMxFile,\n} from \"../models/mxfile\";\nimport {\n parse as parseMxGraphModel,\n key as mxGraphModelKey,\n serialize as serializerMxGraphModel,\n type YMxGraphModel,\n} from \"../models/mxGraphModel\";\n\nexport function xml2ydoc(xml: string, doc: Y.Doc): Y.Doc {\n const object = parse(xml);\n\n const mxfile = (object as Record<string, unknown>).mxfile;\n const mxGraphModel = (object as Record<string, unknown>).mxGraphModel;\n if (mxfile) {\n doc.transact(() => {\n parseMxFile(mxfile as import(\"../models/mxfile\").MxFile, doc);\n });\n } else if (mxGraphModel) {\n doc.transact(() => {\n parseMxGraphModel(mxGraphModel as import(\"../models/mxGraphModel\").MxGraphModel, doc);\n });\n } else {\n throw new Error(\"不支持的文件格式\");\n }\n\n return doc;\n}\n\nexport function ydoc2xml(doc: Y.Doc, spaces = 0): string {\n if (doc.share.has(mxfileKey)) {\n return serializer(\n {\n [mxfileKey]: serializerMxFile(\n doc.share.get(mxfileKey) as unknown as YMxFile,\n ),\n },\n spaces,\n );\n } else if (doc.share.has(mxGraphModelKey)) {\n return serializer(\n {\n [mxGraphModelKey]: serializerMxGraphModel(\n doc.share.get(mxGraphModelKey) as unknown as YMxGraphModel,\n ),\n },\n spaces,\n );\n }\n\n return \"\";\n}\n"],"names":["key","parse","xml2js","serializer","js2xml","Y","serialize","mxCellKey","parseMxCell","serializeMxCell","parseMxGraphModel","mxGraphModelKey","serializeMxGraphModel","diagramKey","parseDiagram","_a","serializeDiagram","parseMxFile","mxfileKey","serializerMxFile","serializerMxGraphModel"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "y-mxgraph",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.7",
|
|
4
4
|
"description": "Yjs binding for draw.io (mxGraph) documents",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"yjs",
|
|
@@ -15,24 +15,29 @@
|
|
|
15
15
|
"graph",
|
|
16
16
|
"sync"
|
|
17
17
|
],
|
|
18
|
-
"main": "./y-mxgraph.cjs
|
|
19
|
-
"module": "./y-mxgraph.
|
|
18
|
+
"main": "./y-mxgraph.cjs",
|
|
19
|
+
"module": "./y-mxgraph.js",
|
|
20
20
|
"types": "./index.d.ts",
|
|
21
21
|
"exports": {
|
|
22
22
|
".": {
|
|
23
|
-
"import": "./y-mxgraph.
|
|
24
|
-
"require": "./y-mxgraph.cjs
|
|
23
|
+
"import": "./y-mxgraph.js",
|
|
24
|
+
"require": "./y-mxgraph.cjs",
|
|
25
25
|
"types": "./index.d.ts"
|
|
26
26
|
},
|
|
27
27
|
"./iframe-bridge/server": {
|
|
28
|
-
"import": "./iframe-bridge/server.
|
|
29
|
-
"require": "./iframe-bridge/server.cjs
|
|
28
|
+
"import": "./iframe-bridge/server.js",
|
|
29
|
+
"require": "./iframe-bridge/server.cjs",
|
|
30
30
|
"types": "./iframe-bridge/server.d.ts"
|
|
31
31
|
},
|
|
32
32
|
"./iframe-bridge/provider": {
|
|
33
|
-
"import": "./iframe-bridge/provider.
|
|
34
|
-
"require": "./iframe-bridge/provider.cjs
|
|
33
|
+
"import": "./iframe-bridge/provider.js",
|
|
34
|
+
"require": "./iframe-bridge/provider.cjs",
|
|
35
35
|
"types": "./iframe-bridge/provider.d.ts"
|
|
36
|
+
},
|
|
37
|
+
"./transformer": {
|
|
38
|
+
"import": "./transformer.js",
|
|
39
|
+
"require": "./transformer.cjs",
|
|
40
|
+
"types": "./transformer.d.ts"
|
|
36
41
|
}
|
|
37
42
|
},
|
|
38
43
|
"dependencies": {
|
package/transformer.cjs
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const transformer = require("./index-Dpa3-atS.cjs");
|
|
4
|
+
exports.xml2ydoc = transformer.xml2ydoc;
|
|
5
|
+
exports.ydoc2xml = transformer.ydoc2xml;
|
|
6
|
+
//# sourceMappingURL=transformer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|
package/transformer.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|