@next-ai-drawio/mcp-server 0.1.2 → 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 +89 -36
- package/dist/index.js +36 -2
- package/dist/index.js.map +1 -1
- package/dist/xml-validation.d.ts +38 -0
- package/dist/xml-validation.d.ts.map +1 -0
- package/dist/xml-validation.js +785 -0
- package/dist/xml-validation.js.map +1 -0
- package/package.json +1 -1
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
|
-
##
|
|
7
|
+
## Quick Start
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
##
|
|
20
|
+
## Installation
|
|
16
21
|
|
|
17
|
-
### Claude Desktop
|
|
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": ["
|
|
31
|
+
"args": ["@next-ai-drawio/mcp-server@latest"]
|
|
27
32
|
}
|
|
28
33
|
}
|
|
29
34
|
}
|
|
30
35
|
```
|
|
31
36
|
|
|
32
|
-
|
|
37
|
+
### VS Code
|
|
33
38
|
|
|
34
|
-
|
|
39
|
+
Add to your VS Code settings (`.vscode/mcp.json` in workspace or user settings):
|
|
35
40
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
##
|
|
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": ["
|
|
145
|
+
"args": ["@next-ai-drawio/mcp-server@latest"],
|
|
93
146
|
"env": { "PORT": "6003" }
|
|
94
147
|
}
|
|
95
148
|
}
|
package/dist/index.js
CHANGED
|
@@ -31,6 +31,7 @@ import { z } from "zod";
|
|
|
31
31
|
import { applyDiagramOperations, } from "./diagram-operations.js";
|
|
32
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"),
|
|
@@ -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,
|
|
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 &";
|
|
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 < for <, > for >, & for &, " 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) && !/</.test(value)) {
|
|
254
|
+
return "Invalid XML: Unescaped < character in attribute values. Replace < with <";
|
|
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, "&");
|
|
352
|
+
fixes.push("Escaped unescaped & characters");
|
|
353
|
+
}
|
|
354
|
+
// 5. Fix invalid entity names (double-escaping)
|
|
355
|
+
const invalidEntities = [
|
|
356
|
+
{ pattern: /&quot;/g, replacement: """, name: "&quot;" },
|
|
357
|
+
{ pattern: /&lt;/g, replacement: "<", name: "&lt;" },
|
|
358
|
+
{ pattern: /&gt;/g, replacement: ">", name: "&gt;" },
|
|
359
|
+
{ pattern: /&apos;/g, replacement: "'", name: "&apos;" },
|
|
360
|
+
{ pattern: /&amp;/g, replacement: "&", name: "&amp;" },
|
|
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_:-]*)="/;
|
|
370
|
+
if (malformedQuotePattern.test(fixed)) {
|
|
371
|
+
fixed = fixed.replace(/(\s[a-zA-Z][a-zA-Z0-9_:-]*)="([^&]*?)"/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("<")) {
|
|
398
|
+
hasUnescapedLt = true;
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
if (hasUnescapedLt) {
|
|
403
|
+
fixed = fixed.replace(/=\s*"([^"]*)"/g, (_match, value) => {
|
|
404
|
+
const escaped = value.replace(/</g, "<");
|
|
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