@mermkit/render 0.1.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/dist/index.js ADDED
@@ -0,0 +1,482 @@
1
+ import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
2
+ import { spawn } from "node:child_process";
3
+ import { tmpdir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { renderAscii } from "./ascii.js";
7
+ export { renderAscii };
8
+ const engineRegistry = new Map();
9
+ let builtinsRegistered = false;
10
+ export function registerEngine(engine, options = {}) {
11
+ const existing = engineRegistry.get(engine.id);
12
+ if (existing && !options.override) {
13
+ if (options.silent)
14
+ return;
15
+ throw new Error(`render engine already registered: ${engine.id}`);
16
+ }
17
+ engineRegistry.set(engine.id, engine);
18
+ }
19
+ export function getEngine(id) {
20
+ return engineRegistry.get(id);
21
+ }
22
+ export function listEngines() {
23
+ return Array.from(engineRegistry.values()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
24
+ }
25
+ function ensureBuiltinEngines() {
26
+ if (builtinsRegistered)
27
+ return;
28
+ builtinsRegistered = true;
29
+ registerEngine({
30
+ id: "embedded",
31
+ priority: 30,
32
+ render: (diagram, options) => renderWithEmbedded(diagram, options)
33
+ }, { silent: true });
34
+ registerEngine({
35
+ id: "mmdc",
36
+ priority: 20,
37
+ render: (diagram, options) => renderWithMmdc(diagram, options)
38
+ }, { silent: true });
39
+ registerEngine({
40
+ id: "ascii",
41
+ priority: 15,
42
+ render: (diagram, options) => renderWithAscii(diagram, options)
43
+ }, { silent: true });
44
+ registerEngine({
45
+ id: "stub",
46
+ priority: 0,
47
+ render: (diagram, options) => renderWithStub(diagram, options)
48
+ }, { silent: true });
49
+ }
50
+ export async function render(diagram, options) {
51
+ ensureBuiltinEngines();
52
+ // Handle ASCII format specially
53
+ if (options.format === "ascii") {
54
+ return renderWithAscii(diagram, options);
55
+ }
56
+ const selection = options.engine ?? "auto";
57
+ if (selection !== "auto") {
58
+ const engine = getEngine(selection);
59
+ if (!engine) {
60
+ throw new Error(`render engine not registered: ${selection}`);
61
+ }
62
+ return engine.render(diagram, options);
63
+ }
64
+ const engines = listEngines();
65
+ const failures = [];
66
+ for (const engine of engines) {
67
+ // Skip ASCII engine in auto mode (it's only used explicitly or via format: "ascii")
68
+ if (engine.id === "ascii")
69
+ continue;
70
+ try {
71
+ const result = await engine.render(diagram, options);
72
+ if (failures.length > 0) {
73
+ result.warnings.unshift(...failures);
74
+ }
75
+ return result;
76
+ }
77
+ catch (error) {
78
+ failures.push(`${engine.id} engine failed: ${errorMessage(error)}`);
79
+ }
80
+ }
81
+ throw new Error("no render engines succeeded");
82
+ }
83
+ export async function renderForTerminal(diagram, capabilities, options = {}) {
84
+ const warnings = [];
85
+ // Try inline image first if terminal supports it and ASCII not preferred
86
+ if (!options.preferAscii && (capabilities.kitty || capabilities.wezterm || capabilities.iterm2)) {
87
+ try {
88
+ const result = await render(diagram, { format: "png", engine: "auto" });
89
+ const bytes = result.bytes;
90
+ if (bytes.length > 0) {
91
+ const text = capabilities.iterm2 && !capabilities.kitty && !capabilities.wezterm
92
+ ? encodeIterm2InlinePng(bytes)
93
+ : encodeKittyInlinePng(bytes);
94
+ warnings.push(...result.warnings);
95
+ return {
96
+ text,
97
+ imageBytes: bytes,
98
+ mime: "image/png",
99
+ warnings
100
+ };
101
+ }
102
+ }
103
+ catch (error) {
104
+ warnings.push(`inline image failed: ${errorMessage(error)}`);
105
+ }
106
+ }
107
+ // Fall back to ASCII rendering
108
+ try {
109
+ const asciiResult = renderAscii(diagram.source, {
110
+ useAscii: !capabilities.unicode
111
+ });
112
+ if (asciiResult) {
113
+ return {
114
+ text: asciiResult,
115
+ mime: "text/plain",
116
+ warnings
117
+ };
118
+ }
119
+ }
120
+ catch (error) {
121
+ warnings.push(`ASCII rendering failed: ${errorMessage(error)}`);
122
+ }
123
+ warnings.push("terminal does not support inline images and ASCII rendering failed");
124
+ return {
125
+ text: "Unable to render diagram. Use `mermkit render` to generate SVG/PNG artifacts.",
126
+ warnings
127
+ };
128
+ }
129
+ async function renderWithAscii(diagram, options) {
130
+ const asciiOptions = options.ascii ?? {};
131
+ const result = renderAscii(diagram.source, asciiOptions);
132
+ if (!result) {
133
+ throw new Error("ASCII rendering failed: unable to parse diagram");
134
+ }
135
+ return {
136
+ bytes: new TextEncoder().encode(result),
137
+ mime: "text/plain",
138
+ warnings: []
139
+ };
140
+ }
141
+ function renderStubSvg(source, options) {
142
+ const lines = source.split("\n");
143
+ const fontSize = 14;
144
+ const lineHeight = 18;
145
+ const padding = 16;
146
+ const maxLen = Math.max(1, ...lines.map((line) => line.length));
147
+ const width = padding * 2 + maxLen * 8;
148
+ const height = padding * 2 + lines.length * lineHeight;
149
+ const background = options.background ?? "transparent";
150
+ const textLines = lines
151
+ .map((line, index) => {
152
+ const y = padding + (index + 1) * lineHeight;
153
+ return `<text x="${padding}" y="${y}">${escapeXml(line)}</text>`;
154
+ })
155
+ .join("");
156
+ return `<?xml version="1.0" encoding="UTF-8"?>\n` +
157
+ `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}">` +
158
+ `<style>text{font-family:ui-monospace,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:${fontSize}px;fill:#111}</style>` +
159
+ (background === "transparent" ? "" : `<rect width="100%" height="100%" fill="${escapeXml(background)}"/>`) +
160
+ textLines +
161
+ `</svg>`;
162
+ }
163
+ function escapeXml(value) {
164
+ return value
165
+ .replace(/&/g, "&amp;")
166
+ .replace(/</g, "&lt;")
167
+ .replace(/>/g, "&gt;")
168
+ .replace(/"/g, "&quot;")
169
+ .replace(/'/g, "&apos;");
170
+ }
171
+ async function renderPngFromSvg(svg) {
172
+ let sharpModule;
173
+ try {
174
+ sharpModule = await import("sharp");
175
+ }
176
+ catch (error) {
177
+ throw new Error("PNG rendering requires optional dependency 'sharp'");
178
+ }
179
+ const sharp = sharpModule.default ?? sharpModule;
180
+ const buffer = await sharp(Buffer.from(svg))
181
+ .png()
182
+ .toBuffer();
183
+ return {
184
+ bytes: new Uint8Array(buffer),
185
+ mime: "image/png",
186
+ warnings: []
187
+ };
188
+ }
189
+ async function renderWithStub(diagram, options) {
190
+ const warnings = ["stub renderer: Mermaid rendering not implemented yet"];
191
+ if (options.format === "svg") {
192
+ const svg = renderStubSvg(diagram.source, options);
193
+ return {
194
+ bytes: new TextEncoder().encode(svg),
195
+ mime: "image/svg+xml",
196
+ warnings
197
+ };
198
+ }
199
+ if (options.format === "png") {
200
+ const svg = renderStubSvg(diagram.source, options);
201
+ const result = await renderPngFromSvg(svg);
202
+ result.warnings = warnings;
203
+ return result;
204
+ }
205
+ throw new Error("PDF rendering not implemented yet");
206
+ }
207
+ async function renderWithMmdc(diagram, options) {
208
+ const tmpRoot = await mkdtemp(join(tmpdir(), "mermkit-"));
209
+ const inputPath = join(tmpRoot, "diagram.mmd");
210
+ const outputPath = join(tmpRoot, `diagram.${options.format}`);
211
+ const warnings = [];
212
+ try {
213
+ await writeFile(inputPath, diagram.source, "utf8");
214
+ const args = ["-i", inputPath, "-o", outputPath];
215
+ const theme = resolveMmdcTheme(options.theme, warnings);
216
+ if (theme)
217
+ args.push("-t", theme);
218
+ if (options.background)
219
+ args.push("-b", options.background);
220
+ if (options.scale)
221
+ args.push("-s", String(options.scale));
222
+ const binary = await resolveMmdcBinary();
223
+ await runProcess(binary, args);
224
+ const bytes = await readFile(outputPath);
225
+ return {
226
+ bytes: new Uint8Array(bytes),
227
+ mime: mimeFor(options.format),
228
+ warnings
229
+ };
230
+ }
231
+ finally {
232
+ await rm(tmpRoot, { recursive: true, force: true });
233
+ }
234
+ }
235
+ async function renderWithEmbedded(diagram, options) {
236
+ const warnings = [];
237
+ const { mermaid, JSDOM, dompurify } = await resolveEmbeddedDeps();
238
+ const dom = new JSDOM(`<!DOCTYPE html><html><body></body></html>`, { pretendToBeVisual: true });
239
+ const restore = setDomGlobals(dom);
240
+ try {
241
+ if (dompurify) {
242
+ const createDOMPurify = dompurify.default ?? dompurify;
243
+ globalThis.DOMPurify = createDOMPurify(dom.window);
244
+ }
245
+ const mermaidApi = mermaid.default ?? mermaid;
246
+ const theme = resolveEmbeddedTheme(options.theme, warnings);
247
+ const config = {
248
+ startOnLoad: false,
249
+ securityLevel: "strict",
250
+ theme,
251
+ deterministicIds: true,
252
+ deterministicSeed: diagram.id,
253
+ flowchart: { useMaxWidth: false }
254
+ };
255
+ mermaidApi.initialize(config);
256
+ if (options.scale && options.scale !== 1) {
257
+ warnings.push("embedded renderer: scale is not implemented yet");
258
+ }
259
+ const id = `mermkit-${diagram.id.replace(/[^a-zA-Z0-9_-]/g, "")}`;
260
+ const { svg } = await mermaidApi.render(id, diagram.source);
261
+ let svgOut = svg;
262
+ if (options.background && options.background !== "transparent") {
263
+ svgOut = applyBackground(svgOut, options.background);
264
+ }
265
+ if (options.format === "svg") {
266
+ return {
267
+ bytes: new TextEncoder().encode(svgOut),
268
+ mime: "image/svg+xml",
269
+ warnings
270
+ };
271
+ }
272
+ if (options.format === "png") {
273
+ const result = await renderPngFromSvg(svgOut);
274
+ result.warnings = warnings;
275
+ return result;
276
+ }
277
+ if (options.format === "pdf") {
278
+ const result = await renderPdfFromSvg(svgOut);
279
+ result.warnings = warnings;
280
+ return result;
281
+ }
282
+ throw new Error("unsupported format");
283
+ }
284
+ finally {
285
+ restore();
286
+ }
287
+ }
288
+ function resolveMmdcTheme(theme, warnings) {
289
+ if (!theme || theme === "light")
290
+ return "default";
291
+ if (theme === "dark")
292
+ return "dark";
293
+ warnings.push("custom theme is not supported yet; using default theme");
294
+ return "default";
295
+ }
296
+ function resolveEmbeddedTheme(theme, warnings) {
297
+ if (!theme || theme === "light")
298
+ return "default";
299
+ if (theme === "dark")
300
+ return "dark";
301
+ warnings.push("custom theme is not supported yet; using default theme");
302
+ return "default";
303
+ }
304
+ function mimeFor(format) {
305
+ switch (format) {
306
+ case "svg":
307
+ return "image/svg+xml";
308
+ case "png":
309
+ return "image/png";
310
+ case "pdf":
311
+ return "application/pdf";
312
+ case "ascii":
313
+ return "text/plain";
314
+ }
315
+ }
316
+ async function resolveMmdcBinary() {
317
+ const envPath = process.env.MERMKIT_MMDC_PATH;
318
+ if (envPath)
319
+ return envPath;
320
+ const candidates = [];
321
+ const repoRoot = guessRepoRoot();
322
+ if (repoRoot) {
323
+ candidates.push(join(repoRoot, "node_modules", ".bin", "mmdc"));
324
+ }
325
+ candidates.push(join(process.cwd(), "node_modules", ".bin", "mmdc"));
326
+ candidates.push("mmdc");
327
+ for (const candidate of candidates) {
328
+ try {
329
+ await runProcess(candidate, ["-h"], { dryRun: true });
330
+ return candidate;
331
+ }
332
+ catch {
333
+ continue;
334
+ }
335
+ }
336
+ throw new Error("mmdc not found. Install @mermaid-js/mermaid-cli or set MERMKIT_MMDC_PATH");
337
+ }
338
+ function guessRepoRoot() {
339
+ const current = fileURLToPath(import.meta.url);
340
+ const currentDir = dirname(current);
341
+ const repoRoot = join(currentDir, "..", "..", "..");
342
+ return repoRoot;
343
+ }
344
+ function runProcess(command, args, options = {}) {
345
+ return new Promise((resolve, reject) => {
346
+ const child = spawn(command, args, { stdio: options.dryRun ? "ignore" : "pipe" });
347
+ if (options.dryRun) {
348
+ child.on("close", (code) => {
349
+ if (code === 0)
350
+ resolve();
351
+ else
352
+ reject(new Error(`${command} exited with code ${code}`));
353
+ });
354
+ child.on("error", (error) => reject(error));
355
+ return;
356
+ }
357
+ let stderr = "";
358
+ if (child.stderr) {
359
+ child.stderr.on("data", (chunk) => {
360
+ stderr += chunk.toString();
361
+ });
362
+ }
363
+ child.on("close", (code) => {
364
+ if (code === 0)
365
+ resolve();
366
+ else
367
+ reject(new Error(`${command} exited with code ${code}: ${stderr.trim()}`));
368
+ });
369
+ child.on("error", (error) => reject(error));
370
+ });
371
+ }
372
+ function errorMessage(error) {
373
+ if (error instanceof Error)
374
+ return error.message;
375
+ return String(error);
376
+ }
377
+ async function renderPdfFromSvg(svg) {
378
+ let sharpModule;
379
+ try {
380
+ sharpModule = await import("sharp");
381
+ }
382
+ catch {
383
+ throw new Error("PDF rendering requires optional dependency 'sharp'");
384
+ }
385
+ const sharp = sharpModule.default ?? sharpModule;
386
+ const buffer = await sharp(Buffer.from(svg))
387
+ .pdf()
388
+ .toBuffer();
389
+ return {
390
+ bytes: new Uint8Array(buffer),
391
+ mime: "application/pdf",
392
+ warnings: []
393
+ };
394
+ }
395
+ function applyBackground(svg, background) {
396
+ const svgStart = svg.indexOf("<svg");
397
+ if (svgStart === -1)
398
+ return svg;
399
+ const tagEnd = svg.indexOf(">", svgStart);
400
+ if (tagEnd === -1)
401
+ return svg;
402
+ const insert = `<rect width="100%" height="100%" fill="${escapeXml(background)}"/>`;
403
+ return `${svg.slice(0, tagEnd + 1)}${insert}${svg.slice(tagEnd + 1)}`;
404
+ }
405
+ async function resolveEmbeddedDeps() {
406
+ let mermaid;
407
+ let JSDOM;
408
+ let dompurify;
409
+ try {
410
+ mermaid = await import("mermaid");
411
+ }
412
+ catch {
413
+ throw new Error("embedded renderer requires dependency 'mermaid'");
414
+ }
415
+ try {
416
+ const jsdomModule = await import("jsdom");
417
+ JSDOM = jsdomModule.JSDOM;
418
+ }
419
+ catch {
420
+ throw new Error("embedded renderer requires dependency 'jsdom'");
421
+ }
422
+ try {
423
+ dompurify = await import("dompurify");
424
+ }
425
+ catch {
426
+ dompurify = undefined;
427
+ }
428
+ return { mermaid, JSDOM, dompurify };
429
+ }
430
+ function setDomGlobals(dom) {
431
+ const g = globalThis;
432
+ const previous = {
433
+ window: g.window,
434
+ document: g.document,
435
+ navigator: g.navigator,
436
+ DOMParser: g.DOMParser,
437
+ XMLSerializer: g.XMLSerializer,
438
+ Node: g.Node,
439
+ Element: g.Element,
440
+ SVGElement: g.SVGElement,
441
+ DOMPurify: g.DOMPurify
442
+ };
443
+ const window = dom.window;
444
+ g.window = window;
445
+ g.document = window.document;
446
+ g.navigator = window.navigator;
447
+ g.DOMParser = window.DOMParser;
448
+ g.XMLSerializer = window.XMLSerializer;
449
+ g.Node = window.Node;
450
+ g.Element = window.Element;
451
+ g.SVGElement = window.SVGElement;
452
+ return () => {
453
+ g.window = previous.window;
454
+ g.document = previous.document;
455
+ g.navigator = previous.navigator;
456
+ g.DOMParser = previous.DOMParser;
457
+ g.XMLSerializer = previous.XMLSerializer;
458
+ g.Node = previous.Node;
459
+ g.Element = previous.Element;
460
+ g.SVGElement = previous.SVGElement;
461
+ g.DOMPurify = previous.DOMPurify;
462
+ };
463
+ }
464
+ function encodeIterm2InlinePng(png, filename = "diagram.png") {
465
+ const base64 = Buffer.from(png).toString("base64");
466
+ const name = Buffer.from(filename).toString("base64");
467
+ return `\u001b]1337;File=name=${name};size=${png.length};inline=1:${base64}\u0007\n`;
468
+ }
469
+ function encodeKittyInlinePng(png) {
470
+ const base64 = Buffer.from(png).toString("base64");
471
+ const chunkSize = 4096;
472
+ let out = "";
473
+ for (let i = 0; i < base64.length; i += chunkSize) {
474
+ const chunk = base64.slice(i, i + chunkSize);
475
+ const more = i + chunkSize < base64.length ? 1 : 0;
476
+ const prefix = i === 0 ? "a=T,f=100,t=d" : "";
477
+ const params = prefix ? `${prefix},m=${more}` : `m=${more}`;
478
+ out += `\u001b_G${params};${chunk}\u001b\\`;
479
+ }
480
+ return `${out}\n`;
481
+ }
482
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@mermkit/render",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc -b"
15
+ },
16
+ "dependencies": {
17
+ "@mermkit/core": "0.1.0"
18
+ },
19
+ "optionalDependencies": {
20
+ "dompurify": "^3.1.5",
21
+ "jsdom": "^24.1.0",
22
+ "mermaid": "^10.9.5",
23
+ "sharp": "^0.33.4"
24
+ }
25
+ }