@achmadya-dev/mcp-diagram 0.3.0
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/LICENSE +191 -0
- package/README.md +172 -0
- package/dist/assets/shape-search/search-index.json +83954 -0
- package/dist/assets/shared/create-diagram-intro.md +52 -0
- package/dist/assets/shared/mermaid-reference.md +473 -0
- package/dist/assets/shared/xml-reference.md +479 -0
- package/dist/assets/vendor/app/libavoid/LICENSE +505 -0
- package/dist/assets/vendor/app/libavoid/libavoid.min.js +22 -0
- package/dist/assets/vendor/app/libavoid/libavoid.wasm +0 -0
- package/dist/drawio/drawio.d.ts +27 -0
- package/dist/drawio/drawio.d.ts.map +1 -0
- package/dist/drawio/drawio.js +77 -0
- package/dist/drawio/drawio.js.map +1 -0
- package/dist/drawio/utils.d.ts +29 -0
- package/dist/drawio/utils.d.ts.map +1 -0
- package/dist/drawio/utils.js +419 -0
- package/dist/drawio/utils.js.map +1 -0
- package/dist/drawio/viewer/html.d.ts +59 -0
- package/dist/drawio/viewer/html.d.ts.map +1 -0
- package/dist/drawio/viewer/html.js +6528 -0
- package/dist/drawio/viewer/html.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +94 -0
- package/dist/index.js.map +1 -0
- package/dist/scripts/copy-assets.d.ts +3 -0
- package/dist/scripts/copy-assets.d.ts.map +1 -0
- package/dist/scripts/copy-assets.js +28 -0
- package/dist/scripts/copy-assets.js.map +1 -0
- package/dist/scripts/generate-shape-index.d.ts +15 -0
- package/dist/scripts/generate-shape-index.d.ts.map +1 -0
- package/dist/scripts/generate-shape-index.js +347 -0
- package/dist/scripts/generate-shape-index.js.map +1 -0
- package/dist/tools/search_shapes.d.ts +2 -0
- package/dist/tools/search_shapes.d.ts.map +1 -0
- package/dist/tools/search_shapes.js +34 -0
- package/dist/tools/search_shapes.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type DrawioAppBundleOptions = {
|
|
2
|
+
buildId?: string;
|
|
3
|
+
viewerJs?: string | null;
|
|
4
|
+
elkJs?: string | null;
|
|
5
|
+
mermaidJs?: string | null;
|
|
6
|
+
};
|
|
7
|
+
export type DrawioEngineOptions = {
|
|
8
|
+
bundle?: DrawioBundle;
|
|
9
|
+
bundleOptions?: DrawioAppBundleOptions;
|
|
10
|
+
};
|
|
11
|
+
export type DrawioBundle = {
|
|
12
|
+
buildId: string;
|
|
13
|
+
html: string;
|
|
14
|
+
description: string;
|
|
15
|
+
shapeIndex: unknown[] | null;
|
|
16
|
+
};
|
|
17
|
+
export declare const RESOURCE_URI = "ui://drawio/mcp-app.html";
|
|
18
|
+
/** Loads draw.io MCP App assets (inline viewer HTML, shape index, tool references). */
|
|
19
|
+
export declare class DrawioEngine {
|
|
20
|
+
readonly bundle: DrawioBundle;
|
|
21
|
+
constructor(options?: DrawioEngineOptions);
|
|
22
|
+
private static assetPath;
|
|
23
|
+
private static loadBundle;
|
|
24
|
+
}
|
|
25
|
+
declare const _default: DrawioEngine;
|
|
26
|
+
export default _default;
|
|
27
|
+
//# sourceMappingURL=drawio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawio.d.ts","sourceRoot":"","sources":["../../src/drawio/drawio.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,aAAa,CAAC,EAAE,sBAAsB,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,YAAY,6BAA6B,CAAC;AAEvD,uFAAuF;AACvF,qBAAa,YAAY;IACvB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;gBAElB,OAAO,GAAE,mBAAwB;IAI7C,OAAO,CAAC,MAAM,CAAC,SAAS;IAKxB,OAAO,CAAC,MAAM,CAAC,UAAU;CA4E1B;;AAED,wBAAkC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { buildHtml, processAppBundle, processElkBundle, processLibavoidBundle, processMermaidBundle, } from "./viewer/html.js";
|
|
5
|
+
export const RESOURCE_URI = "ui://drawio/mcp-app.html";
|
|
6
|
+
/** Loads draw.io MCP App assets (inline viewer HTML, shape index, tool references). */
|
|
7
|
+
export class DrawioEngine {
|
|
8
|
+
bundle;
|
|
9
|
+
constructor(options = {}) {
|
|
10
|
+
this.bundle = options.bundle ?? DrawioEngine.loadBundle(options.bundleOptions);
|
|
11
|
+
}
|
|
12
|
+
static assetPath(...segments) {
|
|
13
|
+
const moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
14
|
+
return path.join(moduleDir, "..", "assets", ...segments);
|
|
15
|
+
}
|
|
16
|
+
static loadBundle(options = {}) {
|
|
17
|
+
const buildId = options.buildId ?? new Date().toISOString();
|
|
18
|
+
const extAppsEntry = fileURLToPath(import.meta.resolve("@modelcontextprotocol/ext-apps/app-with-deps"));
|
|
19
|
+
const appWithDepsJs = processAppBundle(fs.readFileSync(extAppsEntry, "utf-8"));
|
|
20
|
+
const pakoEntry = fileURLToPath(import.meta.resolve("pako"));
|
|
21
|
+
const pakoDeflateJs = fs.readFileSync(path.join(path.dirname(pakoEntry), "..", "dist", "pako_deflate.min.js"), "utf-8");
|
|
22
|
+
const loadOptionalBundle = (envPath, processFn, label) => {
|
|
23
|
+
if (!envPath) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const bundle = processFn(fs.readFileSync(path.resolve(envPath), "utf-8"));
|
|
27
|
+
console.error(`Inlining local ${label} from`, envPath);
|
|
28
|
+
return bundle;
|
|
29
|
+
};
|
|
30
|
+
const elkJs = options.elkJs !== undefined
|
|
31
|
+
? options.elkJs
|
|
32
|
+
: loadOptionalBundle(process.env.ELK_PATH, processElkBundle, "drawio-elk");
|
|
33
|
+
const mermaidJs = options.mermaidJs !== undefined
|
|
34
|
+
? options.mermaidJs
|
|
35
|
+
: loadOptionalBundle(process.env.MERMAID_PATH, processMermaidBundle, "drawio-mermaid");
|
|
36
|
+
const libavoidJs = processLibavoidBundle(fs.readFileSync(DrawioEngine.assetPath("vendor", "app", "libavoid", "libavoid.min.js"), "utf-8"));
|
|
37
|
+
const libavoidWasmB64 = fs
|
|
38
|
+
.readFileSync(DrawioEngine.assetPath("vendor", "app", "libavoid", "libavoid.wasm"))
|
|
39
|
+
.toString("base64");
|
|
40
|
+
let viewerJs = options.viewerJs !== undefined ? options.viewerJs : null;
|
|
41
|
+
if (viewerJs === null && process.env.VIEWER_PATH) {
|
|
42
|
+
const viewerPath = path.resolve(process.env.VIEWER_PATH);
|
|
43
|
+
if (fs.statSync(viewerPath).isDirectory()) {
|
|
44
|
+
const minJs = path.join(viewerPath, "viewer-static.min.js");
|
|
45
|
+
const gvJs = path.join(viewerPath, "diagramly", "GraphViewer.js");
|
|
46
|
+
viewerJs = fs.readFileSync(minJs, "utf-8");
|
|
47
|
+
if (fs.existsSync(gvJs)) {
|
|
48
|
+
viewerJs += "\n" + fs.readFileSync(gvJs, "utf-8");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
viewerJs = fs.readFileSync(viewerPath, "utf-8");
|
|
53
|
+
}
|
|
54
|
+
console.error("Using local viewer from", viewerPath);
|
|
55
|
+
}
|
|
56
|
+
const intro = fs.readFileSync(DrawioEngine.assetPath("shared", "create-diagram-intro.md"), "utf-8");
|
|
57
|
+
const xmlReference = fs.readFileSync(DrawioEngine.assetPath("shared", "xml-reference.md"), "utf-8");
|
|
58
|
+
const mermaidReference = fs.readFileSync(DrawioEngine.assetPath("shared", "mermaid-reference.md"), "utf-8");
|
|
59
|
+
const shapeIndexPath = DrawioEngine.assetPath("shape-search", "search-index.json");
|
|
60
|
+
let shapeIndex = null;
|
|
61
|
+
if (fs.existsSync(shapeIndexPath)) {
|
|
62
|
+
shapeIndex = JSON.parse(fs.readFileSync(shapeIndexPath, "utf-8"));
|
|
63
|
+
console.error("Shape index: " + shapeIndex.length + " shapes");
|
|
64
|
+
}
|
|
65
|
+
const html = buildHtml(appWithDepsJs, pakoDeflateJs, mermaidJs, {
|
|
66
|
+
viewerJs,
|
|
67
|
+
elkJs,
|
|
68
|
+
libavoidJs,
|
|
69
|
+
libavoidWasmB64,
|
|
70
|
+
buildId,
|
|
71
|
+
});
|
|
72
|
+
const description = intro + "\n\n---\n\n" + xmlReference + "\n\n---\n\n" + mermaidReference;
|
|
73
|
+
return { buildId, html, description, shapeIndex };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
export default new DrawioEngine();
|
|
77
|
+
//# sourceMappingURL=drawio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawio.js","sourceRoot":"","sources":["../../src/drawio/drawio.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type ShapeIndexEntry = {
|
|
2
|
+
style: string;
|
|
3
|
+
w: number;
|
|
4
|
+
h: number;
|
|
5
|
+
title?: string;
|
|
6
|
+
tags?: string;
|
|
7
|
+
type?: string;
|
|
8
|
+
};
|
|
9
|
+
type ShapeSearchResult = {
|
|
10
|
+
style: string;
|
|
11
|
+
w: number;
|
|
12
|
+
h: number;
|
|
13
|
+
title?: string;
|
|
14
|
+
};
|
|
15
|
+
export type CreateDiagramResult = {
|
|
16
|
+
payload: string;
|
|
17
|
+
validation?: string;
|
|
18
|
+
};
|
|
19
|
+
type CreateDiagramArgs = {
|
|
20
|
+
xml?: string;
|
|
21
|
+
mermaid?: string;
|
|
22
|
+
postLayout?: "elk";
|
|
23
|
+
direction?: "vertical" | "horizontal";
|
|
24
|
+
routing?: "libavoid";
|
|
25
|
+
};
|
|
26
|
+
export declare function searchShapes(shapeIndex: ShapeIndexEntry[], query: string, limit: number): ShapeSearchResult[];
|
|
27
|
+
export declare function createDiagram(args: CreateDiagramArgs, buildId: string): CreateDiagramResult;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/drawio/utils.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAIF,MAAM,MAAM,mBAAmB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,KAAK,iBAAiB,GAAG;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,SAAS,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACtC,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB,CAAC;AAEF,wBAAgB,YAAY,CAC1B,UAAU,EAAE,eAAe,EAAE,EAC7B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,iBAAiB,EAAE,CAgRrB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAuP3F"}
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
import { ToolError } from "@achmadya-dev/mcp-core";
|
|
2
|
+
export function searchShapes(shapeIndex, query, limit) {
|
|
3
|
+
const soundexMappings = "01230120022455012603010202";
|
|
4
|
+
if (!query || !shapeIndex || shapeIndex.length === 0) {
|
|
5
|
+
return [];
|
|
6
|
+
}
|
|
7
|
+
const tagMap = {};
|
|
8
|
+
for (let i = 0; i < shapeIndex.length; i++) {
|
|
9
|
+
const rawTags = shapeIndex[i].tags;
|
|
10
|
+
if (!rawTags) {
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
const tokens = rawTags.toLowerCase().replace(/[\/,()]/g, " ").split(" ");
|
|
14
|
+
const tokenSeen = {};
|
|
15
|
+
for (let j = 0; j < tokens.length; j++) {
|
|
16
|
+
const token = tokens[j];
|
|
17
|
+
if (token.length < 2 || tokenSeen[token]) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
tokenSeen[token] = true;
|
|
21
|
+
if (!tagMap[token]) {
|
|
22
|
+
tagMap[token] = new Set();
|
|
23
|
+
}
|
|
24
|
+
tagMap[token].add(i);
|
|
25
|
+
let sx = "";
|
|
26
|
+
const sxName = token.replace(/\.*\d*$/, "");
|
|
27
|
+
if (sxName.length > 0) {
|
|
28
|
+
const s = [];
|
|
29
|
+
let si = 1;
|
|
30
|
+
s[0] = sxName[0].toUpperCase();
|
|
31
|
+
for (let k = 1, l = sxName.length; k < l; k++) {
|
|
32
|
+
const c = sxName[k].toUpperCase().charCodeAt(0) - 65;
|
|
33
|
+
if (c >= 0 && c <= 25) {
|
|
34
|
+
if (soundexMappings[c] !== "0") {
|
|
35
|
+
if (soundexMappings[c] !== s[si - 1]) {
|
|
36
|
+
s[si] = soundexMappings[c];
|
|
37
|
+
si++;
|
|
38
|
+
}
|
|
39
|
+
if (si > 3) {
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
while (si <= 3) {
|
|
46
|
+
s[si] = "0";
|
|
47
|
+
si++;
|
|
48
|
+
}
|
|
49
|
+
sx = s.join("");
|
|
50
|
+
}
|
|
51
|
+
if (sx && sx !== token && !tokenSeen[sx]) {
|
|
52
|
+
tokenSeen[sx] = true;
|
|
53
|
+
if (!tagMap[sx]) {
|
|
54
|
+
tagMap[sx] = new Set();
|
|
55
|
+
}
|
|
56
|
+
tagMap[sx].add(i);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const rawTerms = query.toLowerCase().split(/\s+/).filter(function (t) {
|
|
61
|
+
return t.length > 0;
|
|
62
|
+
});
|
|
63
|
+
const terms = [];
|
|
64
|
+
const seen = {};
|
|
65
|
+
for (let i = 0; i < rawTerms.length; i++) {
|
|
66
|
+
const token = rawTerms[i];
|
|
67
|
+
const parts = token
|
|
68
|
+
.replace(/([a-z])([A-Z])/g, "$1 $2")
|
|
69
|
+
.replace(/([a-zA-Z])(\d)/g, "$1 $2")
|
|
70
|
+
.replace(/(\d)([a-zA-Z])/g, "$1 $2")
|
|
71
|
+
.toLowerCase()
|
|
72
|
+
.split(/\s+/);
|
|
73
|
+
let subTokens = parts.filter(function (p) {
|
|
74
|
+
return p.length >= 2;
|
|
75
|
+
});
|
|
76
|
+
if (subTokens.length === 0 && token.length >= 2) {
|
|
77
|
+
subTokens = [token];
|
|
78
|
+
}
|
|
79
|
+
for (let j = 0; j < subTokens.length; j++) {
|
|
80
|
+
if (!seen[subTokens[j]]) {
|
|
81
|
+
seen[subTokens[j]] = true;
|
|
82
|
+
terms.push(subTokens[j]);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (terms.length === 0) {
|
|
87
|
+
return [];
|
|
88
|
+
}
|
|
89
|
+
const termMatches = [];
|
|
90
|
+
for (let i = 0; i < terms.length; i++) {
|
|
91
|
+
const term = terms[i];
|
|
92
|
+
const exact = new Set();
|
|
93
|
+
const phonetic = new Set();
|
|
94
|
+
const exactHits = tagMap[term];
|
|
95
|
+
if (exactHits) {
|
|
96
|
+
exactHits.forEach(function (idx) {
|
|
97
|
+
exact.add(idx);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
const termStem = term.replace(/\.*\d*$/, "");
|
|
101
|
+
let sx = "";
|
|
102
|
+
if (termStem.length > 0) {
|
|
103
|
+
const s = [];
|
|
104
|
+
let si = 1;
|
|
105
|
+
s[0] = termStem[0].toUpperCase();
|
|
106
|
+
for (let k = 1, l = termStem.length; k < l; k++) {
|
|
107
|
+
const c = termStem[k].toUpperCase().charCodeAt(0) - 65;
|
|
108
|
+
if (c >= 0 && c <= 25) {
|
|
109
|
+
if (soundexMappings[c] !== "0") {
|
|
110
|
+
if (soundexMappings[c] !== s[si - 1]) {
|
|
111
|
+
s[si] = soundexMappings[c];
|
|
112
|
+
si++;
|
|
113
|
+
}
|
|
114
|
+
if (si > 3) {
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
while (si <= 3) {
|
|
121
|
+
s[si] = "0";
|
|
122
|
+
si++;
|
|
123
|
+
}
|
|
124
|
+
sx = s.join("");
|
|
125
|
+
}
|
|
126
|
+
if (sx && sx !== term) {
|
|
127
|
+
const phoneticHits = tagMap[sx];
|
|
128
|
+
if (phoneticHits) {
|
|
129
|
+
phoneticHits.forEach(function (idx) {
|
|
130
|
+
if (!exact.has(idx)) {
|
|
131
|
+
phonetic.add(idx);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
termMatches.push({ exact, phonetic });
|
|
137
|
+
}
|
|
138
|
+
let andSet = null;
|
|
139
|
+
for (let i = 0; i < termMatches.length; i++) {
|
|
140
|
+
const combined = new Set();
|
|
141
|
+
termMatches[i].exact.forEach(function (idx) {
|
|
142
|
+
combined.add(idx);
|
|
143
|
+
});
|
|
144
|
+
termMatches[i].phonetic.forEach(function (idx) {
|
|
145
|
+
combined.add(idx);
|
|
146
|
+
});
|
|
147
|
+
if (andSet === null) {
|
|
148
|
+
andSet = combined;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
const intersection = new Set();
|
|
152
|
+
andSet.forEach(function (idx) {
|
|
153
|
+
if (combined.has(idx)) {
|
|
154
|
+
intersection.add(idx);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
andSet = intersection;
|
|
158
|
+
}
|
|
159
|
+
if (andSet.size === 0) {
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const scores = {};
|
|
164
|
+
if (andSet && andSet.size > 0) {
|
|
165
|
+
andSet.forEach(function (idx) {
|
|
166
|
+
scores[idx] = 0;
|
|
167
|
+
});
|
|
168
|
+
for (let i = 0; i < termMatches.length; i++) {
|
|
169
|
+
const exactForTerm = new Set();
|
|
170
|
+
termMatches[i].exact.forEach(function (idx) {
|
|
171
|
+
if (scores[idx] !== undefined) {
|
|
172
|
+
scores[idx] += 1.0;
|
|
173
|
+
exactForTerm.add(idx);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
termMatches[i].phonetic.forEach(function (idx) {
|
|
177
|
+
if (scores[idx] !== undefined && !exactForTerm.has(idx)) {
|
|
178
|
+
scores[idx] += 0.5;
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
for (let i = 0; i < termMatches.length; i++) {
|
|
185
|
+
const exactForTerm = new Set();
|
|
186
|
+
termMatches[i].exact.forEach(function (idx) {
|
|
187
|
+
if (scores[idx] === undefined) {
|
|
188
|
+
scores[idx] = 0;
|
|
189
|
+
}
|
|
190
|
+
scores[idx] += 1.0;
|
|
191
|
+
exactForTerm.add(idx);
|
|
192
|
+
});
|
|
193
|
+
termMatches[i].phonetic.forEach(function (idx) {
|
|
194
|
+
if (!exactForTerm.has(idx)) {
|
|
195
|
+
if (scores[idx] === undefined) {
|
|
196
|
+
scores[idx] = 0;
|
|
197
|
+
}
|
|
198
|
+
scores[idx] += 0.5;
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
const candidates = Object.keys(scores).map(function (idx) {
|
|
204
|
+
const index = parseInt(idx, 10);
|
|
205
|
+
return { idx: index, score: scores[index] };
|
|
206
|
+
});
|
|
207
|
+
candidates.sort(function (a, b) {
|
|
208
|
+
if (b.score !== a.score) {
|
|
209
|
+
return b.score - a.score;
|
|
210
|
+
}
|
|
211
|
+
const titleA = shapeIndex[a.idx].title || "";
|
|
212
|
+
const titleB = shapeIndex[b.idx].title || "";
|
|
213
|
+
return titleA.localeCompare(titleB);
|
|
214
|
+
});
|
|
215
|
+
const results = [];
|
|
216
|
+
for (let i = 0; i < candidates.length && results.length < limit; i++) {
|
|
217
|
+
const shape = shapeIndex[candidates[i].idx];
|
|
218
|
+
results.push({
|
|
219
|
+
style: shape.style,
|
|
220
|
+
w: shape.w,
|
|
221
|
+
h: shape.h,
|
|
222
|
+
title: shape.title,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
return results;
|
|
226
|
+
}
|
|
227
|
+
export function createDiagram(args, buildId) {
|
|
228
|
+
const { xml, mermaid, postLayout, direction, routing } = args;
|
|
229
|
+
const hasXml = xml != null && xml.trim().length > 0;
|
|
230
|
+
const hasMermaid = mermaid != null && mermaid.trim().length > 0;
|
|
231
|
+
if (hasXml === hasMermaid) {
|
|
232
|
+
throw new ToolError(`Provide exactly one of 'xml' or 'mermaid'. ${hasXml ? "Both were provided." : "Neither was provided."}`);
|
|
233
|
+
}
|
|
234
|
+
if (hasMermaid) {
|
|
235
|
+
const mermaidPayload = { mermaid, _buildId: buildId };
|
|
236
|
+
if (postLayout)
|
|
237
|
+
mermaidPayload.postLayout = postLayout;
|
|
238
|
+
return { payload: JSON.stringify(mermaidPayload) };
|
|
239
|
+
}
|
|
240
|
+
let normalizedXml = null;
|
|
241
|
+
let current = xml;
|
|
242
|
+
for (let depth = 0; depth < 4; depth++) {
|
|
243
|
+
if (typeof current === "string") {
|
|
244
|
+
const trimmed = current.trim();
|
|
245
|
+
if (trimmed.length > 0 &&
|
|
246
|
+
trimmed.charAt(0) === "<" &&
|
|
247
|
+
(trimmed.includes("<mxGraphModel") || trimmed.includes("<mxfile"))) {
|
|
248
|
+
normalizedXml = trimmed;
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
if (typeof current === "string") {
|
|
253
|
+
const trimmed = current.trim();
|
|
254
|
+
if (trimmed.length === 0) {
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
if (trimmed.charAt(0) === "{" || trimmed.charAt(0) === "[") {
|
|
258
|
+
try {
|
|
259
|
+
current = JSON.parse(trimmed);
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
if (Array.isArray(current)) {
|
|
269
|
+
let next = null;
|
|
270
|
+
for (let i = 0; i < current.length; i++) {
|
|
271
|
+
const block = current[i];
|
|
272
|
+
if (typeof block === "string") {
|
|
273
|
+
next = block;
|
|
274
|
+
break;
|
|
275
|
+
}
|
|
276
|
+
if (block &&
|
|
277
|
+
typeof block === "object" &&
|
|
278
|
+
"text" in block &&
|
|
279
|
+
typeof block.text === "string") {
|
|
280
|
+
next = block.text;
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
if (next == null) {
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
287
|
+
current = next;
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
if (!current || typeof current !== "object") {
|
|
291
|
+
break;
|
|
292
|
+
}
|
|
293
|
+
const obj = current;
|
|
294
|
+
if (typeof obj.text === "string") {
|
|
295
|
+
current = obj.text;
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
if (Array.isArray(obj.content)) {
|
|
299
|
+
current = obj.content;
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
if (normalizedXml == null && typeof current === "string") {
|
|
305
|
+
const trimmed = current.trim();
|
|
306
|
+
if (trimmed.length > 0 &&
|
|
307
|
+
trimmed.charAt(0) === "<" &&
|
|
308
|
+
(trimmed.includes("<mxGraphModel") || trimmed.includes("<mxfile"))) {
|
|
309
|
+
normalizedXml = trimmed;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
if (!normalizedXml) {
|
|
313
|
+
const preview = xml.length > 200 ? xml.substring(0, 200) + "..." : xml;
|
|
314
|
+
throw new ToolError(`Could not extract draw.io XML from input. Expected <mxGraphModel> or <mxfile> root element. Received (first 200 chars): ${preview}`);
|
|
315
|
+
}
|
|
316
|
+
const xmlPayload = { xml: normalizedXml, _buildId: buildId };
|
|
317
|
+
if (postLayout)
|
|
318
|
+
xmlPayload.postLayout = postLayout;
|
|
319
|
+
if (direction)
|
|
320
|
+
xmlPayload.direction = direction;
|
|
321
|
+
if (routing)
|
|
322
|
+
xmlPayload.routing = routing;
|
|
323
|
+
const errors = [];
|
|
324
|
+
const warnings = [];
|
|
325
|
+
if (normalizedXml.indexOf("<!--") >= 0) {
|
|
326
|
+
errors.push("XML comments (<!-- -->) are forbidden — remove all comments");
|
|
327
|
+
}
|
|
328
|
+
const allIds = new Set();
|
|
329
|
+
const duplicateIds = [];
|
|
330
|
+
const idRegex = /\bid="([^"]*)"/g;
|
|
331
|
+
let idMatch;
|
|
332
|
+
while ((idMatch = idRegex.exec(normalizedXml)) !== null) {
|
|
333
|
+
const id = idMatch[1];
|
|
334
|
+
if (allIds.has(id)) {
|
|
335
|
+
duplicateIds.push(id);
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
allIds.add(id);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
if (duplicateIds.length > 0) {
|
|
342
|
+
errors.push("Duplicate IDs: " + duplicateIds.join(", "));
|
|
343
|
+
}
|
|
344
|
+
if (!allIds.has("0")) {
|
|
345
|
+
errors.push('Missing root cell with id="0" — every diagram needs <mxCell id="0"/>');
|
|
346
|
+
}
|
|
347
|
+
if (!allIds.has("1")) {
|
|
348
|
+
errors.push('Missing default layer cell with id="1" parent="0" — every diagram needs <mxCell id="1" parent="0"/>');
|
|
349
|
+
}
|
|
350
|
+
const cellBlocks = normalizedXml.split(/<mxCell\s/);
|
|
351
|
+
for (let i = 1; i < cellBlocks.length; i++) {
|
|
352
|
+
const block = cellBlocks[i];
|
|
353
|
+
const tagEnd = block.indexOf(">");
|
|
354
|
+
if (tagEnd < 0) {
|
|
355
|
+
continue;
|
|
356
|
+
}
|
|
357
|
+
const tagContent = block.substring(0, tagEnd);
|
|
358
|
+
const isSelfClosing = tagContent.charAt(tagContent.length - 1) === "/";
|
|
359
|
+
const attrs = {};
|
|
360
|
+
const attrRegex = /(\w+)="([^"]*)"/g;
|
|
361
|
+
let m;
|
|
362
|
+
while ((m = attrRegex.exec(tagContent)) !== null) {
|
|
363
|
+
attrs[m[1]] = m[2];
|
|
364
|
+
}
|
|
365
|
+
const isEdge = attrs.edge === "1";
|
|
366
|
+
if (isEdge && isSelfClosing) {
|
|
367
|
+
errors.push('Edge id="' +
|
|
368
|
+
(attrs.id || "?") +
|
|
369
|
+
'" is self-closing — every edge must contain <mxGeometry relative="1" as="geometry"/> as a child element');
|
|
370
|
+
}
|
|
371
|
+
if (isEdge && !isSelfClosing) {
|
|
372
|
+
const closingIdx = block.indexOf("</mxCell>");
|
|
373
|
+
if (closingIdx > tagEnd) {
|
|
374
|
+
const body = block.substring(tagEnd + 1, closingIdx);
|
|
375
|
+
if (body.indexOf("mxGeometry") < 0) {
|
|
376
|
+
errors.push('Edge id="' +
|
|
377
|
+
(attrs.id || "?") +
|
|
378
|
+
'" has no <mxGeometry> child — edges must contain <mxGeometry relative="1" as="geometry"/>');
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
if (attrs.source && !allIds.has(attrs.source)) {
|
|
383
|
+
warnings.push('Edge id="' +
|
|
384
|
+
(attrs.id || "?") +
|
|
385
|
+
'" references source="' +
|
|
386
|
+
attrs.source +
|
|
387
|
+
'" which does not exist');
|
|
388
|
+
}
|
|
389
|
+
if (attrs.target && !allIds.has(attrs.target)) {
|
|
390
|
+
warnings.push('Edge id="' +
|
|
391
|
+
(attrs.id || "?") +
|
|
392
|
+
'" references target="' +
|
|
393
|
+
attrs.target +
|
|
394
|
+
'" which does not exist');
|
|
395
|
+
}
|
|
396
|
+
if (attrs.parent && attrs.parent !== "0" && !allIds.has(attrs.parent)) {
|
|
397
|
+
warnings.push('Cell id="' +
|
|
398
|
+
(attrs.id || "?") +
|
|
399
|
+
'" references parent="' +
|
|
400
|
+
attrs.parent +
|
|
401
|
+
'" which does not exist');
|
|
402
|
+
}
|
|
403
|
+
if ((attrs.source || attrs.target) && !isEdge) {
|
|
404
|
+
warnings.push('Cell id="' + (attrs.id || "?") + '" has source/target attributes but is missing edge="1"');
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
if (errors.length > 0 || warnings.length > 0) {
|
|
408
|
+
const messages = [];
|
|
409
|
+
if (errors.length > 0) {
|
|
410
|
+
messages.push("ERRORS (will cause rendering issues):\n- " + errors.join("\n- "));
|
|
411
|
+
}
|
|
412
|
+
if (warnings.length > 0) {
|
|
413
|
+
messages.push("WARNINGS (may cause issues):\n- " + warnings.join("\n- "));
|
|
414
|
+
}
|
|
415
|
+
return { payload: JSON.stringify(xmlPayload), validation: messages.join("\n\n") };
|
|
416
|
+
}
|
|
417
|
+
return { payload: JSON.stringify(xmlPayload) };
|
|
418
|
+
}
|
|
419
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/drawio/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
type BuildHtmlOptions = {
|
|
2
|
+
viewerJs?: string | null;
|
|
3
|
+
elkJs?: string | null;
|
|
4
|
+
libavoidJs?: string | null;
|
|
5
|
+
libavoidWasmB64?: string | null;
|
|
6
|
+
buildId?: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Build the self-contained HTML string that renders diagrams.
|
|
10
|
+
* The MCP Apps App class, pako deflate, and (optionally) libavoid are
|
|
11
|
+
* inlined. The draw.io viewer, drawio-elk, and drawio-mermaid load from
|
|
12
|
+
* the viewer.diagrams.net CDN by default — cached cross-session and kept
|
|
13
|
+
* in version-sync with each draw.io release. Pass viewerJs/elkJs/mermaidJs
|
|
14
|
+
* to inline a local build instead (for dev — see VIEWER_PATH/ELK_PATH/
|
|
15
|
+
* MERMAID_PATH in index.js).
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildHtml(appWithDepsJs: string, pakoDeflateJs: string, mermaidJs: string | null, options?: BuildHtmlOptions): string;
|
|
18
|
+
/**
|
|
19
|
+
* Read the app-with-deps.js bundle, strip ESM exports, and create a local App alias.
|
|
20
|
+
*/
|
|
21
|
+
export declare function processAppBundle(raw: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Process the drawio-mermaid bundle. The bundle has shipped in two
|
|
24
|
+
* formats: an ESM build with `export{...}` at the end, and a self-
|
|
25
|
+
* contained IIFE that already assigns `globalThis.mxMermaidToDrawio`
|
|
26
|
+
* itself. Detect which one we're looking at and only run the ESM
|
|
27
|
+
* strip-and-alias path when there's actually an export statement —
|
|
28
|
+
* otherwise return the bundle as-is (the IIFE publishes the global it-
|
|
29
|
+
* self, and stripping wouldn't find anything to strip).
|
|
30
|
+
*/
|
|
31
|
+
export declare function processMermaidBundle(raw: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Process the drawio-elk bundle. Two bundle formats have shipped:
|
|
34
|
+
*
|
|
35
|
+
* - ESM: ends with `export { default, ElkLayout, ElkAdapter, ElkApplier }`.
|
|
36
|
+
* Stripped + IIFE-wrapped + aliased to globalThis here.
|
|
37
|
+
* - IIFE: self-contained, ends with `var ELK=(()=>{...})(); var ElkLayout=ELK.ElkLayout,...; ELK=ELK.default;`.
|
|
38
|
+
* Already publishes the four globals; pass through as-is.
|
|
39
|
+
*
|
|
40
|
+
* Detect which format by looking for an `export {...}` statement.
|
|
41
|
+
*/
|
|
42
|
+
export declare function processElkBundle(raw: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Process the libavoid-js browser bundle (obstacle-avoiding orthogonal edge
|
|
45
|
+
* routing — the `routing: "libavoid"` pass). Ships as ESM ending in
|
|
46
|
+
* `export{X as AvoidLib}` and uses `import.meta.url` (illegal in a classic
|
|
47
|
+
* <script>). Three transforms before the standard strip-and-alias:
|
|
48
|
+
*
|
|
49
|
+
* 1. Neutralize `import.meta.url` → "". It is only used by the Emscripten
|
|
50
|
+
* module to locate the .wasm via fetch — which we bypass entirely.
|
|
51
|
+
* 2. Patch the loader so the Emscripten factory receives `wasmBinary`
|
|
52
|
+
* (a Uint8Array set on globalThis). The sandboxed iframe has no
|
|
53
|
+
* allow-same-origin and the host CSP's connect-src forbids data: URIs,
|
|
54
|
+
* so we hand the wasm bytes in directly instead of fetching them.
|
|
55
|
+
* 3. Strip the ESM export and alias `globalThis.AvoidLib`.
|
|
56
|
+
*/
|
|
57
|
+
export declare function processLibavoidBundle(raw: string): string;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../src/drawio/viewer/html.ts"],"names":[],"mappings":"AAEA,KAAK,gBAAgB,GAAG;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,OAAO,CAAC,EAAE,gBAAgB,GACzB,MAAM,CAiwMR;AAwED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAcpD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBzD"}
|