@next-ai-drawio/mcp-server 0.1.1 → 0.1.3

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 CHANGED
@@ -4,17 +4,22 @@ MCP (Model Context Protocol) server that enables AI agents like Claude Desktop a
4
4
 
5
5
  **Self-contained** - includes an embedded HTTP server, no external dependencies required.
6
6
 
7
- ## Features
7
+ ## Quick Start
8
8
 
9
- - **Real-time Preview**: Diagrams appear and update in your browser as the AI creates them
10
- - **Natural Language**: Describe diagrams in plain text - flowcharts, architecture diagrams, etc.
11
- - **Edit Support**: Modify existing diagrams with natural language instructions
12
- - **Export**: Save diagrams as `.drawio` files
13
- - **Self-contained**: Embedded server, works offline (except draw.io UI which loads from embed.diagrams.net)
9
+ ```json
10
+ {
11
+ "mcpServers": {
12
+ "drawio": {
13
+ "command": "npx",
14
+ "args": ["@next-ai-drawio/mcp-server@latest"]
15
+ }
16
+ }
17
+ }
18
+ ```
14
19
 
15
- ## Quick Start
20
+ ## Installation
16
21
 
17
- ### Claude Desktop Configuration
22
+ ### Claude Desktop
18
23
 
19
24
  Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
20
25
 
@@ -23,43 +28,68 @@ Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_
23
28
  "mcpServers": {
24
29
  "drawio": {
25
30
  "command": "npx",
26
- "args": ["-y", "@next-ai-drawio/mcp-server"]
31
+ "args": ["@next-ai-drawio/mcp-server@latest"]
27
32
  }
28
33
  }
29
34
  }
30
35
  ```
31
36
 
32
- That's it! The MCP server runs its own embedded HTTP server.
37
+ ### VS Code
33
38
 
34
- ### Use with Claude
39
+ Add to your VS Code settings (`.vscode/mcp.json` in workspace or user settings):
35
40
 
36
- 1. Restart Claude Desktop after updating config
37
- 2. Ask Claude to create a diagram:
38
- > "Create a flowchart showing user authentication with login, MFA, and session management"
39
- 3. The diagram appears in your browser in real-time!
41
+ ```json
42
+ {
43
+ "mcpServers": {
44
+ "drawio": {
45
+ "command": "npx",
46
+ "args": ["@next-ai-drawio/mcp-server@latest"]
47
+ }
48
+ }
49
+ }
50
+ ```
40
51
 
41
- ## How It Works
52
+ ### Cursor
53
+
54
+ Add to Cursor MCP config (`~/.cursor/mcp.json`):
42
55
 
56
+ ```json
57
+ {
58
+ "mcpServers": {
59
+ "drawio": {
60
+ "command": "npx",
61
+ "args": ["@next-ai-drawio/mcp-server@latest"]
62
+ }
63
+ }
64
+ }
43
65
  ```
44
- ┌─────────────────┐ stdio ┌─────────────────┐
45
- Claude Desktop │ <───────────> │ MCP Server │
46
- │ (AI Agent) │ │ (this package) │
47
- └─────────────────┘ └────────┬────────┘
48
-
49
- ┌────────▼────────┐
50
- │ Embedded HTTP │
51
- │ Server (:6002) │
52
- └────────┬────────┘
53
-
54
- ┌────────▼────────┐
55
- │ User's Browser │
56
- │ (draw.io embed) │
57
- └─────────────────┘
66
+
67
+ ### Claude Code CLI
68
+
69
+ ```bash
70
+ claude mcp add drawio -- npx @next-ai-drawio/mcp-server@latest
58
71
  ```
59
72
 
60
- 1. **MCP Server** receives tool calls from Claude via stdio
61
- 2. **Embedded HTTP Server** serves the draw.io UI and handles state
62
- 3. **Browser** shows real-time diagram updates via polling
73
+ ### Other MCP Clients
74
+
75
+ Use the standard MCP configuration with:
76
+ - **Command**: `npx`
77
+ - **Args**: `["@next-ai-drawio/mcp-server@latest"]`
78
+
79
+ ## Usage
80
+
81
+ 1. Restart your MCP client after updating config
82
+ 2. Ask the AI to create a diagram:
83
+ > "Create a flowchart showing user authentication with login, MFA, and session management"
84
+ 3. The diagram appears in your browser in real-time!
85
+
86
+ ## Features
87
+
88
+ - **Real-time Preview**: Diagrams appear and update in your browser as the AI creates them
89
+ - **Natural Language**: Describe diagrams in plain text - flowcharts, architecture diagrams, etc.
90
+ - **Edit Support**: Modify existing diagrams with natural language instructions
91
+ - **Export**: Save diagrams as `.drawio` files
92
+ - **Self-contained**: Embedded server, works offline (except draw.io UI which loads from embed.diagrams.net)
63
93
 
64
94
  ## Available Tools
65
95
 
@@ -71,7 +101,30 @@ That's it! The MCP server runs its own embedded HTTP server.
71
101
  | `get_diagram` | Get the current diagram XML |
72
102
  | `export_diagram` | Save diagram to a `.drawio` file |
73
103
 
74
- ## Environment Variables
104
+ ## How It Works
105
+
106
+ ```
107
+ ┌─────────────────┐ stdio ┌─────────────────┐
108
+ │ Claude Desktop │ <───────────> │ MCP Server │
109
+ │ (AI Agent) │ │ (this package) │
110
+ └─────────────────┘ └────────┬────────┘
111
+
112
+ ┌────────▼────────┐
113
+ │ Embedded HTTP │
114
+ │ Server (:6002) │
115
+ └────────┬────────┘
116
+
117
+ ┌────────▼────────┐
118
+ │ User's Browser │
119
+ │ (draw.io embed) │
120
+ └─────────────────┘
121
+ ```
122
+
123
+ 1. **MCP Server** receives tool calls from Claude via stdio
124
+ 2. **Embedded HTTP Server** serves the draw.io UI and handles state
125
+ 3. **Browser** shows real-time diagram updates via polling
126
+
127
+ ## Configuration
75
128
 
76
129
  | Variable | Default | Description |
77
130
  |----------|---------|-------------|
@@ -81,7 +134,7 @@ That's it! The MCP server runs its own embedded HTTP server.
81
134
 
82
135
  ### Port already in use
83
136
 
84
- If port 6002 is in use, the server will automatically try the next available port.
137
+ If port 6002 is in use, the server will automatically try the next available port (up to 6020).
85
138
 
86
139
  Or set a custom port:
87
140
  ```json
@@ -89,7 +142,7 @@ Or set a custom port:
89
142
  "mcpServers": {
90
143
  "drawio": {
91
144
  "command": "npx",
92
- "args": ["-y", "@next-ai-drawio/mcp-server"],
145
+ "args": ["@next-ai-drawio/mcp-server@latest"],
93
146
  "env": { "PORT": "6003" }
94
147
  }
95
148
  }
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,UAAU,YAAY;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,IAAI,CAAA;CACpB;AAGD,eAAO,MAAM,UAAU,2BAAkC,CAAA;AAOzD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEpE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAY/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,MAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BpE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC;AAkBD;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,UAAU,YAAY;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,IAAI,CAAA;CACpB;AAGD,eAAO,MAAM,UAAU,2BAAkC,CAAA;AAOzD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEpE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAY/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,MAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAoCpE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC;AAkBD;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
@@ -51,7 +51,9 @@ export function startHttpServer(port = 6002) {
51
51
  }
52
52
  log.info(`Port ${port} in use, trying ${port + 1}`);
53
53
  server = null;
54
- startHttpServer(port + 1).then(resolve).catch(reject);
54
+ startHttpServer(port + 1)
55
+ .then(resolve)
56
+ .catch(reject);
55
57
  }
56
58
  else {
57
59
  reject(err);
@@ -111,10 +113,12 @@ function handleRequest(req, res) {
111
113
  if (url.pathname === "/" || url.pathname === "/index.html") {
112
114
  serveHtml(req, res, url);
113
115
  }
114
- else if (url.pathname === "/api/state" || url.pathname === "/api/mcp/state") {
116
+ else if (url.pathname === "/api/state" ||
117
+ url.pathname === "/api/mcp/state") {
115
118
  handleStateApi(req, res, url);
116
119
  }
117
- else if (url.pathname === "/api/health" || url.pathname === "/api/mcp/health") {
120
+ else if (url.pathname === "/api/health" ||
121
+ url.pathname === "/api/mcp/health") {
118
122
  res.writeHead(200, { "Content-Type": "application/json" });
119
123
  res.end(JSON.stringify({ status: "ok", mcp: true }));
120
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -29,8 +29,9 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
29
29
  import open from "open";
30
30
  import { z } from "zod";
31
31
  import { applyDiagramOperations, } from "./diagram-operations.js";
32
- import { startHttpServer, getState, setState, } from "./http-server.js";
32
+ import { getState, setState, startHttpServer, } from "./http-server.js";
33
33
  import { log } from "./logger.js";
34
+ import { validateAndFixXml } from "./xml-validation.js";
34
35
  // Server configuration
35
36
  const config = {
36
37
  port: parseInt(process.env.PORT || "6002"),
@@ -40,7 +41,7 @@ let currentSession = null;
40
41
  // Create MCP server
41
42
  const server = new McpServer({
42
43
  name: "next-ai-drawio",
43
- version: "0.1.1",
44
+ version: "0.1.2",
44
45
  });
45
46
  // Register prompt with workflow guidance
46
47
  server.prompt("diagram-workflow", "Guidelines for creating and editing draw.io diagrams", () => ({
@@ -123,7 +124,7 @@ server.registerTool("display_diagram", {
123
124
  .string()
124
125
  .describe("The draw.io XML to display (mxGraphModel format)"),
125
126
  },
126
- }, async ({ xml }) => {
127
+ }, async ({ xml: inputXml }) => {
127
128
  try {
128
129
  if (!currentSession) {
129
130
  return {
@@ -136,6 +137,25 @@ server.registerTool("display_diagram", {
136
137
  isError: true,
137
138
  };
138
139
  }
140
+ // Validate and auto-fix XML
141
+ let xml = inputXml;
142
+ const { valid, error, fixed, fixes } = validateAndFixXml(xml);
143
+ if (fixed) {
144
+ xml = fixed;
145
+ log.info(`XML auto-fixed: ${fixes.join(", ")}`);
146
+ }
147
+ if (!valid && error) {
148
+ log.error(`XML validation failed: ${error}`);
149
+ return {
150
+ content: [
151
+ {
152
+ type: "text",
153
+ text: `Error: XML validation failed - ${error}`,
154
+ },
155
+ ],
156
+ isError: true,
157
+ };
158
+ }
139
159
  log.info(`Displaying diagram, ${xml.length} chars`);
140
160
  // Update session state
141
161
  currentSession.xml = xml;
@@ -218,8 +238,22 @@ server.registerTool("edit_diagram", {
218
238
  };
219
239
  }
220
240
  log.info(`Editing diagram with ${operations.length} operation(s)`);
241
+ // Validate and auto-fix new_xml for each operation
242
+ const validatedOps = operations.map((op) => {
243
+ if (op.new_xml) {
244
+ const { valid, error, fixed, fixes } = validateAndFixXml(op.new_xml);
245
+ if (fixed) {
246
+ log.info(`Operation ${op.type} ${op.cell_id}: XML auto-fixed: ${fixes.join(", ")}`);
247
+ return { ...op, new_xml: fixed };
248
+ }
249
+ if (!valid && error) {
250
+ log.warn(`Operation ${op.type} ${op.cell_id}: XML validation failed: ${error}`);
251
+ }
252
+ }
253
+ return op;
254
+ });
221
255
  // Apply operations
222
- const { result, errors } = applyDiagramOperations(currentSession.xml, operations);
256
+ const { result, errors } = applyDiagramOperations(currentSession.xml, validatedOps);
223
257
  if (errors.length > 0) {
224
258
  const errorMessages = errors
225
259
  .map((e) => `${e.type} ${e.cellId}: ${e.message}`)
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * XML Validation and Auto-Fix for draw.io diagrams
3
+ * Copied from lib/utils.ts to avoid cross-package imports
4
+ */
5
+ /**
6
+ * Validates draw.io XML structure for common issues
7
+ * Uses DOM parsing + additional regex checks for high accuracy
8
+ * @param xml - The XML string to validate
9
+ * @returns null if valid, error message string if invalid
10
+ */
11
+ export declare function validateMxCellStructure(xml: string): string | null;
12
+ /**
13
+ * Attempts to auto-fix common XML issues in draw.io diagrams
14
+ * @param xml - The XML string to fix
15
+ * @returns Object with fixed XML and list of fixes applied
16
+ */
17
+ export declare function autoFixXml(xml: string): {
18
+ fixed: string;
19
+ fixes: string[];
20
+ };
21
+ /**
22
+ * Validates XML and attempts to fix if invalid
23
+ * @param xml - The XML string to validate and potentially fix
24
+ * @returns Object with validation result, fixed XML if applicable, and fixes applied
25
+ */
26
+ export declare function validateAndFixXml(xml: string): {
27
+ valid: boolean;
28
+ error: string | null;
29
+ fixed: string | null;
30
+ fixes: string[];
31
+ };
32
+ /**
33
+ * Check if mxCell XML output is complete (not truncated).
34
+ * @param xml - The XML string to check (can be undefined/null)
35
+ * @returns true if XML appears complete, false if truncated or empty
36
+ */
37
+ export declare function isMxCellXmlComplete(xml: string | undefined | null): boolean;
38
+ //# sourceMappingURL=xml-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-validation.d.ts","sourceRoot":"","sources":["../src/xml-validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0OH;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkGlE;AAMD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CA4f1E;AAMD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;IAC5C,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,MAAM,EAAE,CAAA;CAClB,CAyBA;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAiB3E"}
@@ -0,0 +1,785 @@
1
+ /**
2
+ * XML Validation and Auto-Fix for draw.io diagrams
3
+ * Copied from lib/utils.ts to avoid cross-package imports
4
+ */
5
+ // ============================================================================
6
+ // Constants
7
+ // ============================================================================
8
+ /** Maximum XML size to process (1MB) - larger XMLs may cause performance issues */
9
+ const MAX_XML_SIZE = 1_000_000;
10
+ /** Maximum iterations for aggressive cell dropping to prevent infinite loops */
11
+ const MAX_DROP_ITERATIONS = 10;
12
+ /** Structural attributes that should not be duplicated in draw.io */
13
+ const STRUCTURAL_ATTRS = [
14
+ "edge",
15
+ "parent",
16
+ "source",
17
+ "target",
18
+ "vertex",
19
+ "connectable",
20
+ ];
21
+ /** Valid XML entity names */
22
+ const VALID_ENTITIES = new Set(["lt", "gt", "amp", "quot", "apos"]);
23
+ /**
24
+ * Parse XML tags while properly handling quoted strings
25
+ */
26
+ function parseXmlTags(xml) {
27
+ const tags = [];
28
+ let i = 0;
29
+ while (i < xml.length) {
30
+ const tagStart = xml.indexOf("<", i);
31
+ if (tagStart === -1)
32
+ break;
33
+ // Find matching > by tracking quotes
34
+ let tagEnd = tagStart + 1;
35
+ let inQuote = false;
36
+ let quoteChar = "";
37
+ while (tagEnd < xml.length) {
38
+ const c = xml[tagEnd];
39
+ if (inQuote) {
40
+ if (c === quoteChar)
41
+ inQuote = false;
42
+ }
43
+ else {
44
+ if (c === '"' || c === "'") {
45
+ inQuote = true;
46
+ quoteChar = c;
47
+ }
48
+ else if (c === ">") {
49
+ break;
50
+ }
51
+ }
52
+ tagEnd++;
53
+ }
54
+ if (tagEnd >= xml.length)
55
+ break;
56
+ const tag = xml.substring(tagStart, tagEnd + 1);
57
+ i = tagEnd + 1;
58
+ const tagMatch = /^<(\/?)([a-zA-Z][a-zA-Z0-9:_-]*)/.exec(tag);
59
+ if (!tagMatch)
60
+ continue;
61
+ tags.push({
62
+ tag,
63
+ tagName: tagMatch[2],
64
+ isClosing: tagMatch[1] === "/",
65
+ isSelfClosing: tag.endsWith("/>"),
66
+ startIndex: tagStart,
67
+ endIndex: tagEnd,
68
+ });
69
+ }
70
+ return tags;
71
+ }
72
+ // ============================================================================
73
+ // Validation Helper Functions
74
+ // ============================================================================
75
+ /** Check for duplicate structural attributes in a tag */
76
+ function checkDuplicateAttributes(xml) {
77
+ const structuralSet = new Set(STRUCTURAL_ATTRS);
78
+ const tagPattern = /<[^>]+>/g;
79
+ let tagMatch;
80
+ while ((tagMatch = tagPattern.exec(xml)) !== null) {
81
+ const tag = tagMatch[0];
82
+ const attrPattern = /\s([a-zA-Z_:][a-zA-Z0-9_:.-]*)\s*=/g;
83
+ const attributes = new Map();
84
+ let attrMatch;
85
+ while ((attrMatch = attrPattern.exec(tag)) !== null) {
86
+ const attrName = attrMatch[1];
87
+ attributes.set(attrName, (attributes.get(attrName) || 0) + 1);
88
+ }
89
+ const duplicates = Array.from(attributes.entries())
90
+ .filter(([name, count]) => count > 1 && structuralSet.has(name))
91
+ .map(([name]) => name);
92
+ if (duplicates.length > 0) {
93
+ return `Invalid XML: Duplicate structural attribute(s): ${duplicates.join(", ")}. Remove duplicate attributes.`;
94
+ }
95
+ }
96
+ return null;
97
+ }
98
+ /** Check for duplicate IDs in XML */
99
+ function checkDuplicateIds(xml) {
100
+ const idPattern = /\bid\s*=\s*["']([^"']+)["']/gi;
101
+ const ids = new Map();
102
+ let idMatch;
103
+ while ((idMatch = idPattern.exec(xml)) !== null) {
104
+ const id = idMatch[1];
105
+ ids.set(id, (ids.get(id) || 0) + 1);
106
+ }
107
+ const duplicateIds = Array.from(ids.entries())
108
+ .filter(([, count]) => count > 1)
109
+ .map(([id, count]) => `'${id}' (${count}x)`);
110
+ if (duplicateIds.length > 0) {
111
+ return `Invalid XML: Found duplicate ID(s): ${duplicateIds.slice(0, 3).join(", ")}. All id attributes must be unique.`;
112
+ }
113
+ return null;
114
+ }
115
+ /** Check for tag mismatches using parsed tags */
116
+ function checkTagMismatches(xml) {
117
+ const xmlWithoutComments = xml.replace(/<!--[\s\S]*?-->/g, "");
118
+ const tags = parseXmlTags(xmlWithoutComments);
119
+ const tagStack = [];
120
+ for (const { tagName, isClosing, isSelfClosing } of tags) {
121
+ if (isClosing) {
122
+ if (tagStack.length === 0) {
123
+ return `Invalid XML: Closing tag </${tagName}> without matching opening tag`;
124
+ }
125
+ const expected = tagStack.pop();
126
+ if (expected?.toLowerCase() !== tagName.toLowerCase()) {
127
+ return `Invalid XML: Expected closing tag </${expected}> but found </${tagName}>`;
128
+ }
129
+ }
130
+ else if (!isSelfClosing) {
131
+ tagStack.push(tagName);
132
+ }
133
+ }
134
+ if (tagStack.length > 0) {
135
+ return `Invalid XML: Document has ${tagStack.length} unclosed tag(s): ${tagStack.join(", ")}`;
136
+ }
137
+ return null;
138
+ }
139
+ /** Check for invalid character references */
140
+ function checkCharacterReferences(xml) {
141
+ const charRefPattern = /&#x?[^;]+;?/g;
142
+ let charMatch;
143
+ while ((charMatch = charRefPattern.exec(xml)) !== null) {
144
+ const ref = charMatch[0];
145
+ if (ref.startsWith("&#x")) {
146
+ if (!ref.endsWith(";")) {
147
+ return `Invalid XML: Missing semicolon after hex reference: ${ref}`;
148
+ }
149
+ const hexDigits = ref.substring(3, ref.length - 1);
150
+ if (hexDigits.length === 0 || !/^[0-9a-fA-F]+$/.test(hexDigits)) {
151
+ return `Invalid XML: Invalid hex character reference: ${ref}`;
152
+ }
153
+ }
154
+ else if (ref.startsWith("&#")) {
155
+ if (!ref.endsWith(";")) {
156
+ return `Invalid XML: Missing semicolon after decimal reference: ${ref}`;
157
+ }
158
+ const decDigits = ref.substring(2, ref.length - 1);
159
+ if (decDigits.length === 0 || !/^[0-9]+$/.test(decDigits)) {
160
+ return `Invalid XML: Invalid decimal character reference: ${ref}`;
161
+ }
162
+ }
163
+ }
164
+ return null;
165
+ }
166
+ /** Check for invalid entity references */
167
+ function checkEntityReferences(xml) {
168
+ const xmlWithoutComments = xml.replace(/<!--[\s\S]*?-->/g, "");
169
+ const bareAmpPattern = /&(?!(?:lt|gt|amp|quot|apos|#))/g;
170
+ if (bareAmpPattern.test(xmlWithoutComments)) {
171
+ return "Invalid XML: Found unescaped & character(s). Replace & with &amp;";
172
+ }
173
+ const invalidEntityPattern = /&([a-zA-Z][a-zA-Z0-9]*);/g;
174
+ let entityMatch;
175
+ while ((entityMatch = invalidEntityPattern.exec(xmlWithoutComments)) !== null) {
176
+ if (!VALID_ENTITIES.has(entityMatch[1])) {
177
+ return `Invalid XML: Invalid entity reference: &${entityMatch[1]}; - use only valid XML entities (lt, gt, amp, quot, apos)`;
178
+ }
179
+ }
180
+ return null;
181
+ }
182
+ /** Check for nested mxCell tags using regex */
183
+ function checkNestedMxCells(xml) {
184
+ const cellTagPattern = /<\/?mxCell[^>]*>/g;
185
+ const cellStack = [];
186
+ let cellMatch;
187
+ while ((cellMatch = cellTagPattern.exec(xml)) !== null) {
188
+ const tag = cellMatch[0];
189
+ if (tag.startsWith("</mxCell>")) {
190
+ if (cellStack.length > 0)
191
+ cellStack.pop();
192
+ }
193
+ else if (!tag.endsWith("/>")) {
194
+ const isLabelOrGeometry = /\sas\s*=\s*["'](valueLabel|geometry)["']/.test(tag);
195
+ if (!isLabelOrGeometry) {
196
+ cellStack.push(cellMatch.index);
197
+ if (cellStack.length > 1) {
198
+ return "Invalid XML: Found nested mxCell tags. Cells should be siblings, not nested inside other mxCell elements.";
199
+ }
200
+ }
201
+ }
202
+ }
203
+ return null;
204
+ }
205
+ // ============================================================================
206
+ // Main Validation Function
207
+ // ============================================================================
208
+ /**
209
+ * Validates draw.io XML structure for common issues
210
+ * Uses DOM parsing + additional regex checks for high accuracy
211
+ * @param xml - The XML string to validate
212
+ * @returns null if valid, error message string if invalid
213
+ */
214
+ export function validateMxCellStructure(xml) {
215
+ // Size check for performance
216
+ if (xml.length > MAX_XML_SIZE) {
217
+ console.warn(`[validateMxCellStructure] XML size (${xml.length}) exceeds ${MAX_XML_SIZE} bytes, may cause performance issues`);
218
+ }
219
+ // 0. First use DOM parser to catch syntax errors (most accurate)
220
+ try {
221
+ const parser = new DOMParser();
222
+ const doc = parser.parseFromString(xml, "text/xml");
223
+ const parseError = doc.querySelector("parsererror");
224
+ if (parseError) {
225
+ return `Invalid XML: The XML contains syntax errors (likely unescaped special characters like <, >, & in attribute values). Please escape special characters: use &lt; for <, &gt; for >, &amp; for &, &quot; for ". Regenerate the diagram with properly escaped values.`;
226
+ }
227
+ // DOM-based checks for nested mxCell
228
+ const allCells = doc.querySelectorAll("mxCell");
229
+ for (const cell of allCells) {
230
+ if (cell.parentElement?.tagName === "mxCell") {
231
+ const id = cell.getAttribute("id") || "unknown";
232
+ return `Invalid XML: Found nested mxCell (id="${id}"). Cells should be siblings, not nested inside other mxCell elements.`;
233
+ }
234
+ }
235
+ }
236
+ catch (error) {
237
+ console.warn("[validateMxCellStructure] DOMParser threw unexpected error, falling back to regex validation:", error);
238
+ }
239
+ // 1. Check for CDATA wrapper (invalid at document root)
240
+ if (/^\s*<!\[CDATA\[/.test(xml)) {
241
+ return "Invalid XML: XML is wrapped in CDATA section - remove <![CDATA[ from start and ]]> from end";
242
+ }
243
+ // 2. Check for duplicate structural attributes
244
+ const dupAttrError = checkDuplicateAttributes(xml);
245
+ if (dupAttrError) {
246
+ return dupAttrError;
247
+ }
248
+ // 3. Check for unescaped < in attribute values
249
+ const attrValuePattern = /=\s*"([^"]*)"/g;
250
+ let attrValMatch;
251
+ while ((attrValMatch = attrValuePattern.exec(xml)) !== null) {
252
+ const value = attrValMatch[1];
253
+ if (/</.test(value) && !/&lt;/.test(value)) {
254
+ return "Invalid XML: Unescaped < character in attribute values. Replace < with &lt;";
255
+ }
256
+ }
257
+ // 4. Check for duplicate IDs
258
+ const dupIdError = checkDuplicateIds(xml);
259
+ if (dupIdError) {
260
+ return dupIdError;
261
+ }
262
+ // 5. Check for tag mismatches
263
+ const tagMismatchError = checkTagMismatches(xml);
264
+ if (tagMismatchError) {
265
+ return tagMismatchError;
266
+ }
267
+ // 6. Check invalid character references
268
+ const charRefError = checkCharacterReferences(xml);
269
+ if (charRefError) {
270
+ return charRefError;
271
+ }
272
+ // 7. Check for invalid comment syntax (-- inside comments)
273
+ const commentPattern = /<!--([\s\S]*?)-->/g;
274
+ let commentMatch;
275
+ while ((commentMatch = commentPattern.exec(xml)) !== null) {
276
+ if (/--/.test(commentMatch[1])) {
277
+ return "Invalid XML: Comment contains -- (double hyphen) which is not allowed";
278
+ }
279
+ }
280
+ // 8. Check for unescaped entity references and invalid entity names
281
+ const entityError = checkEntityReferences(xml);
282
+ if (entityError) {
283
+ return entityError;
284
+ }
285
+ // 9. Check for empty id attributes on mxCell
286
+ if (/<mxCell[^>]*\sid\s*=\s*["']\s*["'][^>]*>/g.test(xml)) {
287
+ return "Invalid XML: Found mxCell element(s) with empty id attribute";
288
+ }
289
+ // 10. Check for nested mxCell tags
290
+ const nestedCellError = checkNestedMxCells(xml);
291
+ if (nestedCellError) {
292
+ return nestedCellError;
293
+ }
294
+ return null;
295
+ }
296
+ // ============================================================================
297
+ // Auto-Fix Function
298
+ // ============================================================================
299
+ /**
300
+ * Attempts to auto-fix common XML issues in draw.io diagrams
301
+ * @param xml - The XML string to fix
302
+ * @returns Object with fixed XML and list of fixes applied
303
+ */
304
+ export function autoFixXml(xml) {
305
+ let fixed = xml;
306
+ const fixes = [];
307
+ // 0. Fix JSON-escaped XML
308
+ if (/=\\"/.test(fixed)) {
309
+ fixed = fixed.replace(/\\"/g, '"');
310
+ fixed = fixed.replace(/\\n/g, "\n");
311
+ fixes.push("Fixed JSON-escaped XML");
312
+ }
313
+ // 1. Remove CDATA wrapper
314
+ if (/^\s*<!\[CDATA\[/.test(fixed)) {
315
+ fixed = fixed.replace(/^\s*<!\[CDATA\[/, "").replace(/\]\]>\s*$/, "");
316
+ fixes.push("Removed CDATA wrapper");
317
+ }
318
+ // 2. Remove text before XML declaration or root element
319
+ const xmlStart = fixed.search(/<(\?xml|mxGraphModel|mxfile)/i);
320
+ if (xmlStart > 0 && !/^<[a-zA-Z]/.test(fixed.trim())) {
321
+ fixed = fixed.substring(xmlStart);
322
+ fixes.push("Removed text before XML root");
323
+ }
324
+ // 3. Fix duplicate attributes
325
+ let dupAttrFixed = false;
326
+ fixed = fixed.replace(/<[^>]+>/g, (tag) => {
327
+ let newTag = tag;
328
+ for (const attr of STRUCTURAL_ATTRS) {
329
+ const attrRegex = new RegExp(`\\s${attr}\\s*=\\s*["'][^"']*["']`, "gi");
330
+ const matches = tag.match(attrRegex);
331
+ if (matches && matches.length > 1) {
332
+ let firstKept = false;
333
+ newTag = newTag.replace(attrRegex, (m) => {
334
+ if (!firstKept) {
335
+ firstKept = true;
336
+ return m;
337
+ }
338
+ dupAttrFixed = true;
339
+ return "";
340
+ });
341
+ }
342
+ }
343
+ return newTag;
344
+ });
345
+ if (dupAttrFixed) {
346
+ fixes.push("Removed duplicate structural attributes");
347
+ }
348
+ // 4. Fix unescaped & characters
349
+ const ampersandPattern = /&(?!(?:lt|gt|amp|quot|apos|#[0-9]+|#x[0-9a-fA-F]+);)/g;
350
+ if (ampersandPattern.test(fixed)) {
351
+ fixed = fixed.replace(/&(?!(?:lt|gt|amp|quot|apos|#[0-9]+|#x[0-9a-fA-F]+);)/g, "&amp;");
352
+ fixes.push("Escaped unescaped & characters");
353
+ }
354
+ // 5. Fix invalid entity names (double-escaping)
355
+ const invalidEntities = [
356
+ { pattern: /&ampquot;/g, replacement: "&quot;", name: "&ampquot;" },
357
+ { pattern: /&amplt;/g, replacement: "&lt;", name: "&amplt;" },
358
+ { pattern: /&ampgt;/g, replacement: "&gt;", name: "&ampgt;" },
359
+ { pattern: /&ampapos;/g, replacement: "&apos;", name: "&ampapos;" },
360
+ { pattern: /&ampamp;/g, replacement: "&amp;", name: "&ampamp;" },
361
+ ];
362
+ for (const { pattern, replacement, name } of invalidEntities) {
363
+ if (pattern.test(fixed)) {
364
+ fixed = fixed.replace(pattern, replacement);
365
+ fixes.push(`Fixed double-escaped entity ${name}`);
366
+ }
367
+ }
368
+ // 6. Fix malformed attribute quotes
369
+ const malformedQuotePattern = /(\s[a-zA-Z][a-zA-Z0-9_:-]*)=&quot;/;
370
+ if (malformedQuotePattern.test(fixed)) {
371
+ fixed = fixed.replace(/(\s[a-zA-Z][a-zA-Z0-9_:-]*)=&quot;([^&]*?)&quot;/g, '$1="$2"');
372
+ fixes.push("Fixed malformed attribute quotes");
373
+ }
374
+ // 7. Fix malformed closing tags
375
+ const malformedClosingTag = /<\/([a-zA-Z][a-zA-Z0-9]*)\s*\/>/g;
376
+ if (malformedClosingTag.test(fixed)) {
377
+ fixed = fixed.replace(/<\/([a-zA-Z][a-zA-Z0-9]*)\s*\/>/g, "</$1>");
378
+ fixes.push("Fixed malformed closing tags");
379
+ }
380
+ // 8. Fix missing space between attributes
381
+ const missingSpacePattern = /("[^"]*")([a-zA-Z][a-zA-Z0-9_:-]*=)/g;
382
+ if (missingSpacePattern.test(fixed)) {
383
+ fixed = fixed.replace(/("[^"]*")([a-zA-Z][a-zA-Z0-9_:-]*=)/g, "$1 $2");
384
+ fixes.push("Added missing space between attributes");
385
+ }
386
+ // 9. Fix unescaped quotes in style color values
387
+ const quotedColorPattern = /;([a-zA-Z]*[Cc]olor)="#/;
388
+ if (quotedColorPattern.test(fixed)) {
389
+ fixed = fixed.replace(/;([a-zA-Z]*[Cc]olor)="#/g, ";$1=#");
390
+ fixes.push("Removed quotes around color values in style");
391
+ }
392
+ // 10. Fix unescaped < in attribute values
393
+ const attrPattern = /(=\s*")([^"]*?)(<)([^"]*?)(")/g;
394
+ let attrMatch;
395
+ let hasUnescapedLt = false;
396
+ while ((attrMatch = attrPattern.exec(fixed)) !== null) {
397
+ if (!attrMatch[3].startsWith("&lt;")) {
398
+ hasUnescapedLt = true;
399
+ break;
400
+ }
401
+ }
402
+ if (hasUnescapedLt) {
403
+ fixed = fixed.replace(/=\s*"([^"]*)"/g, (_match, value) => {
404
+ const escaped = value.replace(/</g, "&lt;");
405
+ return `="${escaped}"`;
406
+ });
407
+ fixes.push("Escaped < characters in attribute values");
408
+ }
409
+ // 11. Fix invalid hex character references
410
+ const invalidHexRefs = [];
411
+ fixed = fixed.replace(/&#x([^;]*);/g, (match, hex) => {
412
+ if (/^[0-9a-fA-F]+$/.test(hex) && hex.length > 0) {
413
+ return match;
414
+ }
415
+ invalidHexRefs.push(match);
416
+ return "";
417
+ });
418
+ if (invalidHexRefs.length > 0) {
419
+ fixes.push(`Removed ${invalidHexRefs.length} invalid hex character reference(s)`);
420
+ }
421
+ // 12. Fix invalid decimal character references
422
+ const invalidDecRefs = [];
423
+ fixed = fixed.replace(/&#([^x][^;]*);/g, (match, dec) => {
424
+ if (/^[0-9]+$/.test(dec) && dec.length > 0) {
425
+ return match;
426
+ }
427
+ invalidDecRefs.push(match);
428
+ return "";
429
+ });
430
+ if (invalidDecRefs.length > 0) {
431
+ fixes.push(`Removed ${invalidDecRefs.length} invalid decimal character reference(s)`);
432
+ }
433
+ // 13. Fix invalid comment syntax
434
+ fixed = fixed.replace(/<!--([\s\S]*?)-->/g, (match, content) => {
435
+ if (/--/.test(content)) {
436
+ let fixedContent = content;
437
+ while (/--/.test(fixedContent)) {
438
+ fixedContent = fixedContent.replace(/--/g, "-");
439
+ }
440
+ fixes.push("Fixed invalid comment syntax");
441
+ return `<!--${fixedContent}-->`;
442
+ }
443
+ return match;
444
+ });
445
+ // 14. Fix <Cell> tags to <mxCell>
446
+ const hasCellTags = /<\/?Cell[\s>]/i.test(fixed);
447
+ if (hasCellTags) {
448
+ fixed = fixed.replace(/<Cell(\s)/gi, "<mxCell$1");
449
+ fixed = fixed.replace(/<Cell>/gi, "<mxCell>");
450
+ fixed = fixed.replace(/<\/Cell>/gi, "</mxCell>");
451
+ fixes.push("Fixed <Cell> tags to <mxCell>");
452
+ }
453
+ // 15. Fix common closing tag typos (MUST run before foreign tag removal)
454
+ const tagTypos = [
455
+ { wrong: /<\/mxElement>/gi, right: "</mxCell>", name: "</mxElement>" },
456
+ { wrong: /<\/mxcell>/g, right: "</mxCell>", name: "</mxcell>" },
457
+ {
458
+ wrong: /<\/mxgeometry>/g,
459
+ right: "</mxGeometry>",
460
+ name: "</mxgeometry>",
461
+ },
462
+ { wrong: /<\/mxpoint>/g, right: "</mxPoint>", name: "</mxpoint>" },
463
+ {
464
+ wrong: /<\/mxgraphmodel>/gi,
465
+ right: "</mxGraphModel>",
466
+ name: "</mxgraphmodel>",
467
+ },
468
+ ];
469
+ for (const { wrong, right, name } of tagTypos) {
470
+ const before = fixed;
471
+ fixed = fixed.replace(wrong, right);
472
+ if (fixed !== before) {
473
+ fixes.push(`Fixed typo ${name} to ${right}`);
474
+ }
475
+ }
476
+ // 16. Remove non-draw.io tags (after typo fixes so lowercase variants are fixed first)
477
+ const validDrawioTags = new Set([
478
+ "mxfile",
479
+ "diagram",
480
+ "mxGraphModel",
481
+ "root",
482
+ "mxCell",
483
+ "mxGeometry",
484
+ "mxPoint",
485
+ "Array",
486
+ "Object",
487
+ "mxRectangle",
488
+ ]);
489
+ const foreignTagPattern = /<\/?([a-zA-Z][a-zA-Z0-9_]*)[^>]*>/g;
490
+ let foreignMatch;
491
+ const foreignTags = new Set();
492
+ while ((foreignMatch = foreignTagPattern.exec(fixed)) !== null) {
493
+ const tagName = foreignMatch[1];
494
+ if (!validDrawioTags.has(tagName)) {
495
+ foreignTags.add(tagName);
496
+ }
497
+ }
498
+ if (foreignTags.size > 0) {
499
+ for (const tag of foreignTags) {
500
+ fixed = fixed.replace(new RegExp(`<${tag}[^>]*>`, "gi"), "");
501
+ fixed = fixed.replace(new RegExp(`</${tag}>`, "gi"), "");
502
+ }
503
+ fixes.push(`Removed foreign tags: ${Array.from(foreignTags).join(", ")}`);
504
+ }
505
+ // 17. Fix unclosed tags
506
+ const tagStack = [];
507
+ const parsedTags = parseXmlTags(fixed);
508
+ for (const { tagName, isClosing, isSelfClosing } of parsedTags) {
509
+ if (isClosing) {
510
+ const lastIdx = tagStack.lastIndexOf(tagName);
511
+ if (lastIdx !== -1) {
512
+ tagStack.splice(lastIdx, 1);
513
+ }
514
+ }
515
+ else if (!isSelfClosing) {
516
+ tagStack.push(tagName);
517
+ }
518
+ }
519
+ if (tagStack.length > 0) {
520
+ const tagsToClose = [];
521
+ for (const tagName of tagStack.reverse()) {
522
+ const openCount = (fixed.match(new RegExp(`<${tagName}[\\s>]`, "gi")) || []).length;
523
+ const closeCount = (fixed.match(new RegExp(`</${tagName}>`, "gi")) || []).length;
524
+ if (openCount > closeCount) {
525
+ tagsToClose.push(tagName);
526
+ }
527
+ }
528
+ if (tagsToClose.length > 0) {
529
+ const closingTags = tagsToClose.map((t) => `</${t}>`).join("\n");
530
+ fixed = fixed.trimEnd() + "\n" + closingTags;
531
+ fixes.push(`Closed ${tagsToClose.length} unclosed tag(s): ${tagsToClose.join(", ")}`);
532
+ }
533
+ }
534
+ // 18. Remove extra closing tags
535
+ const tagCounts = new Map();
536
+ const fullTagPattern = /<(\/?[a-zA-Z][a-zA-Z0-9]*)[^>]*>/g;
537
+ let tagCountMatch;
538
+ while ((tagCountMatch = fullTagPattern.exec(fixed)) !== null) {
539
+ const fullMatch = tagCountMatch[0];
540
+ const tagPart = tagCountMatch[1];
541
+ const isClosing = tagPart.startsWith("/");
542
+ const isSelfClosing = fullMatch.endsWith("/>");
543
+ const tagName = isClosing ? tagPart.slice(1) : tagPart;
544
+ let counts = tagCounts.get(tagName);
545
+ if (!counts) {
546
+ counts = { opens: 0, closes: 0, selfClosing: 0 };
547
+ tagCounts.set(tagName, counts);
548
+ }
549
+ if (isClosing) {
550
+ counts.closes++;
551
+ }
552
+ else if (isSelfClosing) {
553
+ counts.selfClosing++;
554
+ }
555
+ else {
556
+ counts.opens++;
557
+ }
558
+ }
559
+ for (const [tagName, counts] of tagCounts) {
560
+ const extraCloses = counts.closes - counts.opens;
561
+ if (extraCloses > 0) {
562
+ let removed = 0;
563
+ const closeTagPattern = new RegExp(`</${tagName}>`, "g");
564
+ const matches = [...fixed.matchAll(closeTagPattern)];
565
+ for (let i = matches.length - 1; i >= 0 && removed < extraCloses; i--) {
566
+ const match = matches[i];
567
+ const idx = match.index ?? 0;
568
+ fixed = fixed.slice(0, idx) + fixed.slice(idx + match[0].length);
569
+ removed++;
570
+ }
571
+ if (removed > 0) {
572
+ fixes.push(`Removed ${removed} extra </${tagName}> closing tag(s)`);
573
+ }
574
+ }
575
+ }
576
+ // 19. Remove trailing garbage after last XML tag
577
+ const closingTagPattern = /<\/[a-zA-Z][a-zA-Z0-9]*>|\/>/g;
578
+ let lastValidTagEnd = -1;
579
+ let closingMatch;
580
+ while ((closingMatch = closingTagPattern.exec(fixed)) !== null) {
581
+ lastValidTagEnd = closingMatch.index + closingMatch[0].length;
582
+ }
583
+ if (lastValidTagEnd > 0 && lastValidTagEnd < fixed.length) {
584
+ const trailing = fixed.slice(lastValidTagEnd).trim();
585
+ if (trailing) {
586
+ fixed = fixed.slice(0, lastValidTagEnd);
587
+ fixes.push("Removed trailing garbage after last XML tag");
588
+ }
589
+ }
590
+ // 20. Fix nested mxCell by flattening
591
+ const lines = fixed.split("\n");
592
+ let newLines = [];
593
+ let nestedFixed = 0;
594
+ let extraClosingToRemove = 0;
595
+ for (let i = 0; i < lines.length; i++) {
596
+ const line = lines[i];
597
+ const nextLine = lines[i + 1];
598
+ if (nextLine &&
599
+ /<mxCell\s/.test(line) &&
600
+ /<mxCell\s/.test(nextLine) &&
601
+ !line.includes("/>") &&
602
+ !nextLine.includes("/>")) {
603
+ const id1 = line.match(/\bid\s*=\s*["']([^"']+)["']/)?.[1];
604
+ const id2 = nextLine.match(/\bid\s*=\s*["']([^"']+)["']/)?.[1];
605
+ if (id1 && id1 === id2) {
606
+ nestedFixed++;
607
+ extraClosingToRemove++;
608
+ continue;
609
+ }
610
+ }
611
+ if (extraClosingToRemove > 0 && /^\s*<\/mxCell>\s*$/.test(line)) {
612
+ extraClosingToRemove--;
613
+ continue;
614
+ }
615
+ newLines.push(line);
616
+ }
617
+ if (nestedFixed > 0) {
618
+ fixed = newLines.join("\n");
619
+ fixes.push(`Flattened ${nestedFixed} duplicate-ID nested mxCell(s)`);
620
+ }
621
+ // 21. Fix true nested mxCell (different IDs)
622
+ const lines2 = fixed.split("\n");
623
+ newLines = [];
624
+ let trueNestedFixed = 0;
625
+ let cellDepth = 0;
626
+ let pendingCloseRemoval = 0;
627
+ for (let i = 0; i < lines2.length; i++) {
628
+ const line = lines2[i];
629
+ const trimmed = line.trim();
630
+ const isOpenCell = /<mxCell\s/.test(trimmed) && !trimmed.endsWith("/>");
631
+ const isCloseCell = trimmed === "</mxCell>";
632
+ if (isOpenCell) {
633
+ if (cellDepth > 0) {
634
+ const indent = line.match(/^(\s*)/)?.[1] || "";
635
+ newLines.push(indent + "</mxCell>");
636
+ trueNestedFixed++;
637
+ pendingCloseRemoval++;
638
+ }
639
+ cellDepth = 1;
640
+ newLines.push(line);
641
+ }
642
+ else if (isCloseCell) {
643
+ if (pendingCloseRemoval > 0) {
644
+ pendingCloseRemoval--;
645
+ }
646
+ else {
647
+ cellDepth = Math.max(0, cellDepth - 1);
648
+ newLines.push(line);
649
+ }
650
+ }
651
+ else {
652
+ newLines.push(line);
653
+ }
654
+ }
655
+ if (trueNestedFixed > 0) {
656
+ fixed = newLines.join("\n");
657
+ fixes.push(`Fixed ${trueNestedFixed} true nested mxCell(s)`);
658
+ }
659
+ // 22. Fix duplicate IDs by appending suffix
660
+ const seenIds = new Map();
661
+ const duplicateIds = [];
662
+ const idPattern = /\bid\s*=\s*["']([^"']+)["']/gi;
663
+ let idMatch;
664
+ while ((idMatch = idPattern.exec(fixed)) !== null) {
665
+ const id = idMatch[1];
666
+ seenIds.set(id, (seenIds.get(id) || 0) + 1);
667
+ }
668
+ for (const [id, count] of seenIds) {
669
+ if (count > 1)
670
+ duplicateIds.push(id);
671
+ }
672
+ if (duplicateIds.length > 0) {
673
+ const idCounters = new Map();
674
+ fixed = fixed.replace(/\bid\s*=\s*["']([^"']+)["']/gi, (match, id) => {
675
+ if (!duplicateIds.includes(id))
676
+ return match;
677
+ const count = idCounters.get(id) || 0;
678
+ idCounters.set(id, count + 1);
679
+ if (count === 0)
680
+ return match;
681
+ const newId = `${id}_dup${count}`;
682
+ return match.replace(id, newId);
683
+ });
684
+ fixes.push(`Renamed ${duplicateIds.length} duplicate ID(s)`);
685
+ }
686
+ // 23. Fix empty id attributes
687
+ let emptyIdCount = 0;
688
+ fixed = fixed.replace(/<mxCell([^>]*)\sid\s*=\s*["']\s*["']([^>]*)>/g, (_match, before, after) => {
689
+ emptyIdCount++;
690
+ const newId = `cell_${Date.now()}_${emptyIdCount}`;
691
+ return `<mxCell${before} id="${newId}"${after}>`;
692
+ });
693
+ if (emptyIdCount > 0) {
694
+ fixes.push(`Generated ${emptyIdCount} missing ID(s)`);
695
+ }
696
+ // 24. Aggressive: drop broken mxCell elements
697
+ if (typeof DOMParser !== "undefined") {
698
+ let droppedCells = 0;
699
+ let maxIterations = MAX_DROP_ITERATIONS;
700
+ while (maxIterations-- > 0) {
701
+ const parser = new DOMParser();
702
+ const doc = parser.parseFromString(fixed, "text/xml");
703
+ const parseError = doc.querySelector("parsererror");
704
+ if (!parseError)
705
+ break;
706
+ const errText = parseError.textContent || "";
707
+ const match = errText.match(/(\d+):\d+:/);
708
+ if (!match)
709
+ break;
710
+ const errLine = parseInt(match[1], 10) - 1;
711
+ const lines = fixed.split("\n");
712
+ let cellStart = errLine;
713
+ let cellEnd = errLine;
714
+ while (cellStart > 0 && !lines[cellStart].includes("<mxCell")) {
715
+ cellStart--;
716
+ }
717
+ while (cellEnd < lines.length - 1) {
718
+ if (lines[cellEnd].includes("</mxCell>") ||
719
+ lines[cellEnd].trim().endsWith("/>")) {
720
+ break;
721
+ }
722
+ cellEnd++;
723
+ }
724
+ lines.splice(cellStart, cellEnd - cellStart + 1);
725
+ fixed = lines.join("\n");
726
+ droppedCells++;
727
+ }
728
+ if (droppedCells > 0) {
729
+ fixes.push(`Dropped ${droppedCells} unfixable mxCell element(s)`);
730
+ }
731
+ }
732
+ return { fixed, fixes };
733
+ }
734
+ // ============================================================================
735
+ // Combined Validation and Fix
736
+ // ============================================================================
737
+ /**
738
+ * Validates XML and attempts to fix if invalid
739
+ * @param xml - The XML string to validate and potentially fix
740
+ * @returns Object with validation result, fixed XML if applicable, and fixes applied
741
+ */
742
+ export function validateAndFixXml(xml) {
743
+ // First validation attempt
744
+ let error = validateMxCellStructure(xml);
745
+ if (!error) {
746
+ return { valid: true, error: null, fixed: null, fixes: [] };
747
+ }
748
+ // Try to fix
749
+ const { fixed, fixes } = autoFixXml(xml);
750
+ // Validate the fixed version
751
+ error = validateMxCellStructure(fixed);
752
+ if (!error) {
753
+ return { valid: true, error: null, fixed, fixes };
754
+ }
755
+ // Still invalid after fixes
756
+ return {
757
+ valid: false,
758
+ error,
759
+ fixed: fixes.length > 0 ? fixed : null,
760
+ fixes,
761
+ };
762
+ }
763
+ /**
764
+ * Check if mxCell XML output is complete (not truncated).
765
+ * @param xml - The XML string to check (can be undefined/null)
766
+ * @returns true if XML appears complete, false if truncated or empty
767
+ */
768
+ export function isMxCellXmlComplete(xml) {
769
+ let trimmed = xml?.trim() || "";
770
+ if (!trimmed)
771
+ return false;
772
+ // Strip wrapper tags if present
773
+ let prev = "";
774
+ while (prev !== trimmed) {
775
+ prev = trimmed;
776
+ trimmed = trimmed
777
+ .replace(/<\/mxParameter>\s*$/i, "")
778
+ .replace(/<\/invoke>\s*$/i, "")
779
+ .replace(/<\/antml:parameter>\s*$/i, "")
780
+ .replace(/<\/antml:invoke>\s*$/i, "")
781
+ .trim();
782
+ }
783
+ return trimmed.endsWith("/>") || trimmed.endsWith("</mxCell>");
784
+ }
785
+ //# sourceMappingURL=xml-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-validation.js","sourceRoot":"","sources":["../src/xml-validation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-ai-drawio/mcp-server",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "MCP server for Next AI Draw.io - AI-powered diagram generation with real-time browser preview",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",