@mermkit/cli 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/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,964 @@
1
+ #!/usr/bin/env node
2
+ import { watch } from "node:fs";
3
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
4
+ import { spawn } from "node:child_process";
5
+ import { createServer } from "node:http";
6
+ import { basename, dirname, join } from "node:path";
7
+ import { stdin, stdout, stderr, exit, env } from "node:process";
8
+ import { createInterface } from "node:readline";
9
+ import { fileURLToPath } from "node:url";
10
+ import { createHash } from "node:crypto";
11
+ import { extractDiagrams, normalizeDiagram } from "@mermkit/core";
12
+ import { render, renderForTerminal } from "@mermkit/render";
13
+ const [command, ...rest] = process.argv.slice(2);
14
+ const { flags } = parseArgs(rest);
15
+ if (!command || isHelp(command, flags)) {
16
+ printHelp();
17
+ exit(0);
18
+ }
19
+ main().catch((error) => {
20
+ stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
21
+ exit(1);
22
+ });
23
+ async function main() {
24
+ switch (command) {
25
+ case "render":
26
+ await cmdRender(flags);
27
+ return;
28
+ case "extract":
29
+ await cmdExtract(flags);
30
+ return;
31
+ case "term":
32
+ await cmdTerm(flags);
33
+ return;
34
+ case "doctor":
35
+ await cmdDoctor(flags);
36
+ return;
37
+ case "serve":
38
+ await cmdServe(flags);
39
+ return;
40
+ case "preview":
41
+ await cmdPreview(flags);
42
+ return;
43
+ case "tool-schema":
44
+ await cmdToolSchema(flags);
45
+ return;
46
+ default:
47
+ stderr.write(`unknown command: ${command}\n`);
48
+ printHelp();
49
+ exit(1);
50
+ }
51
+ }
52
+ async function cmdRender(flags) {
53
+ const format = getFlag(flags, "format") ?? "svg";
54
+ if (format === "term") {
55
+ await cmdTerm(flags);
56
+ return;
57
+ }
58
+ const input = await readInput(flags);
59
+ const outPath = getFlag(flags, "out");
60
+ const outDir = getFlag(flags, "out-dir") ?? getFlag(flags, "outDir");
61
+ const quiet = Boolean(flags.quiet);
62
+ const asJson = Boolean(flags.json);
63
+ const manifestPath = getFlag(flags, "out-manifest");
64
+ const diagrams = extractDiagrams(input);
65
+ const list = diagrams.length > 0 ? diagrams : [selectDiagram(input)];
66
+ if (list.length > 1 && !outDir) {
67
+ throw new Error("multiple diagrams detected; use --out-dir to render all");
68
+ }
69
+ if (outDir) {
70
+ await ensureDir(outDir);
71
+ const outputs = [];
72
+ const manifestEntries = [];
73
+ for (const diagram of list) {
74
+ const result = await renderDiagram(diagram, format, flags);
75
+ const filename = `${diagram.id}.${format}`;
76
+ const fullPath = join(outDir, filename);
77
+ await writeFile(fullPath, result.bytes);
78
+ outputs.push(fullPath);
79
+ manifestEntries.push({
80
+ id: diagram.id,
81
+ inputHash: hashDiagram(diagram.source),
82
+ output: fullPath,
83
+ format,
84
+ mime: result.mime,
85
+ warnings: result.warnings
86
+ });
87
+ if (!quiet && result.warnings.length > 0) {
88
+ stderr.write(result.warnings.map((warning) => `warning: ${warning}`).join("\n") + "\n");
89
+ }
90
+ }
91
+ if (asJson) {
92
+ stdout.write(`${JSON.stringify({ format, files: outputs })}\n`);
93
+ }
94
+ else if (!quiet) {
95
+ stdout.write(outputs.map((file) => `${file}\n`).join(""));
96
+ }
97
+ if (manifestPath) {
98
+ await writeManifest(manifestPath, manifestEntries);
99
+ }
100
+ return;
101
+ }
102
+ const diagram = list[0];
103
+ const result = await renderDiagram(diagram, format, flags);
104
+ if (outPath) {
105
+ await ensureDir(dirname(outPath));
106
+ await writeFile(outPath, result.bytes);
107
+ if (manifestPath) {
108
+ await writeManifest(manifestPath, [
109
+ {
110
+ id: diagram.id,
111
+ inputHash: hashDiagram(diagram.source),
112
+ output: outPath,
113
+ format,
114
+ mime: result.mime,
115
+ warnings: result.warnings
116
+ }
117
+ ]);
118
+ }
119
+ }
120
+ else if (!asJson) {
121
+ stdout.write(Buffer.from(result.bytes));
122
+ }
123
+ if (!quiet && result.warnings.length > 0) {
124
+ stderr.write(result.warnings.map((warning) => `warning: ${warning}`).join("\n") + "\n");
125
+ }
126
+ if (asJson) {
127
+ const payload = {
128
+ format,
129
+ out: outPath,
130
+ bytes: outPath ? undefined : Buffer.from(result.bytes).toString("base64"),
131
+ mime: result.mime,
132
+ warnings: result.warnings
133
+ };
134
+ stdout.write(`${JSON.stringify(payload)}\n`);
135
+ }
136
+ if (!outPath && !outDir && manifestPath) {
137
+ await writeManifest(manifestPath, [
138
+ {
139
+ id: diagram.id,
140
+ inputHash: hashDiagram(diagram.source),
141
+ output: "<stdout>",
142
+ format,
143
+ mime: result.mime,
144
+ warnings: result.warnings
145
+ }
146
+ ]);
147
+ }
148
+ }
149
+ async function cmdExtract(flags) {
150
+ const input = await readInput(flags);
151
+ const diagrams = extractDiagrams(input);
152
+ const outDir = getFlag(flags, "out-dir") ?? getFlag(flags, "outDir");
153
+ const quiet = Boolean(flags.quiet);
154
+ if (!outDir) {
155
+ throw new Error("extract requires --out-dir");
156
+ }
157
+ await ensureDir(outDir);
158
+ const outputs = [];
159
+ for (const diagram of diagrams) {
160
+ const filename = `${diagram.id}.mmd`;
161
+ const fullPath = join(outDir, filename);
162
+ await writeFile(fullPath, diagram.source, "utf8");
163
+ outputs.push(fullPath);
164
+ }
165
+ if (flags.json) {
166
+ stdout.write(`${JSON.stringify({ count: outputs.length, files: outputs })}\n`);
167
+ return;
168
+ }
169
+ if (!quiet) {
170
+ stdout.write(outputs.map((file) => `${file}\n`).join(""));
171
+ if (outputs.length === 0)
172
+ stdout.write("no diagrams found\n");
173
+ }
174
+ }
175
+ async function cmdToolSchema(flags) {
176
+ const format = getFlag(flags, "format") ?? "generic";
177
+ const schema = buildToolSchema(format);
178
+ stdout.write(`${JSON.stringify(schema, null, 2)}\n`);
179
+ }
180
+ async function cmdTerm(flags) {
181
+ const input = await readInput(flags);
182
+ const diagram = selectDiagram(input);
183
+ const result = await renderForTerminal(diagram, detectCapabilities(), {
184
+ preferAscii: Boolean(flags.ascii)
185
+ });
186
+ if (result.text)
187
+ stdout.write(`${result.text}\n`);
188
+ if (!flags.quiet && result.warnings.length > 0) {
189
+ stderr.write(result.warnings.map((warning) => `warning: ${warning}`).join("\n") + "\n");
190
+ }
191
+ }
192
+ async function cmdDoctor(flags) {
193
+ const embedded = await checkEmbedded();
194
+ const mmdc = await checkMmdc();
195
+ const sharp = await hasModule("sharp");
196
+ const terminal = detectCapabilities();
197
+ const payload = {
198
+ engines: {
199
+ embedded,
200
+ mmdc,
201
+ sharp: { ok: sharp }
202
+ },
203
+ terminal,
204
+ node: process.version,
205
+ platform: process.platform
206
+ };
207
+ if (flags.json) {
208
+ stdout.write(`${JSON.stringify(payload)}\n`);
209
+ return;
210
+ }
211
+ stdout.write("mermkit doctor\n\n");
212
+ stdout.write(`node: ${payload.node}\n`);
213
+ stdout.write(`platform: ${payload.platform}\n\n`);
214
+ stdout.write("engines:\n");
215
+ stdout.write(` embedded: ${embedded.ok ? "ok" : "missing"} (mermaid=${embedded.mermaid}, jsdom=${embedded.jsdom}, dompurify=${embedded.dompurify})\n`);
216
+ stdout.write(` mmdc: ${mmdc.ok ? `ok (${mmdc.path})` : "missing"}\n`);
217
+ stdout.write(` sharp: ${sharp ? "ok" : "missing"}\n\n`);
218
+ stdout.write("terminal:\n");
219
+ stdout.write(` kitty: ${terminal.kitty ? "yes" : "no"}\n`);
220
+ stdout.write(` iterm2: ${terminal.iterm2 ? "yes" : "no"}\n`);
221
+ stdout.write(` wezterm: ${terminal.wezterm ? "yes" : "no"}\n`);
222
+ stdout.write(` unicode: ${terminal.unicode ? "yes" : "no"}\n`);
223
+ }
224
+ async function cmdPreview(flags) {
225
+ const inputPath = getFlag(flags, "in");
226
+ const useStdin = Boolean(flags.stdin);
227
+ if (!inputPath && !useStdin) {
228
+ throw new Error("preview requires --in <file> or --stdin");
229
+ }
230
+ const initialSource = useStdin ? await readStdin() : await readFile(inputPath, "utf8");
231
+ let fileSource = initialSource;
232
+ let source = initialSource;
233
+ let sourceMode = useStdin ? "manual" : "file";
234
+ let lastError = null;
235
+ let lastUpdated = Date.now();
236
+ if (inputPath) {
237
+ const watcher = watch(inputPath, { persistent: true }, async () => {
238
+ try {
239
+ fileSource = await readFile(inputPath, "utf8");
240
+ if (sourceMode === "file") {
241
+ source = fileSource;
242
+ lastError = null;
243
+ lastUpdated = Date.now();
244
+ }
245
+ }
246
+ catch (error) {
247
+ lastError = errorMessage(error);
248
+ }
249
+ });
250
+ process.on("exit", () => watcher.close());
251
+ }
252
+ const defaultFormat = (getFlag(flags, "format") ?? "svg");
253
+ if (defaultFormat !== "svg" && defaultFormat !== "png") {
254
+ throw new Error("preview supports only svg or png output");
255
+ }
256
+ const host = getFlag(flags, "host") ?? "127.0.0.1";
257
+ const port = parseNumber(getFlag(flags, "port")) ?? 7070;
258
+ const defaultTheme = getFlag(flags, "theme") ?? undefined;
259
+ const scale = parseNumber(getFlag(flags, "scale"));
260
+ const background = getFlag(flags, "background") ?? "transparent";
261
+ const defaultEngine = getFlag(flags, "engine") ?? undefined;
262
+ const html = `<!doctype html>
263
+ <html lang="en">
264
+ <head>
265
+ <meta charset="utf-8" />
266
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
267
+ <title>mermkit preview</title>
268
+ <style>
269
+ :root { color-scheme: light dark; }
270
+ body { margin: 0; font-family: ui-sans-serif, system-ui, -apple-system, sans-serif; background: #111; color: #f2f2f2; }
271
+ header { padding: 12px 16px; font-size: 14px; background: #1a1a1a; display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
272
+ header strong { font-weight: 600; }
273
+ #status { opacity: 0.7; }
274
+ label { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; text-transform: uppercase; letter-spacing: 0.04em; color: #b5b5b5; }
275
+ select { background: #121212; color: #f2f2f2; border: 1px solid #333; border-radius: 6px; padding: 4px 8px; font-size: 13px; }
276
+ button { background: #202020; color: #f2f2f2; border: 1px solid #333; border-radius: 6px; padding: 4px 10px; font-size: 12px; cursor: pointer; }
277
+ button:disabled { opacity: 0.4; cursor: default; }
278
+ input[type="file"] { color: #b5b5b5; font-size: 12px; }
279
+ main { padding: 16px; }
280
+ img { max-width: 100%; height: auto; display: block; border: 1px solid #333; background: #fff; }
281
+ .error { color: #ff9b9b; }
282
+ </style>
283
+ </head>
284
+ <body>
285
+ <header>
286
+ <strong>mermkit preview</strong>
287
+ <label>format
288
+ <select id="format">
289
+ <option value="svg">svg</option>
290
+ <option value="png">png</option>
291
+ </select>
292
+ </label>
293
+ <label>theme
294
+ <select id="theme">
295
+ <option value="">default</option>
296
+ <option value="light">light</option>
297
+ <option value="dark">dark</option>
298
+ <option value="custom">custom</option>
299
+ </select>
300
+ </label>
301
+ <label>engine
302
+ <select id="engine">
303
+ <option value="">auto</option>
304
+ <option value="embedded">embedded</option>
305
+ <option value="mmdc">mmdc</option>
306
+ <option value="stub">stub</option>
307
+ </select>
308
+ </label>
309
+ <label>preset
310
+ <select id="preset">
311
+ <option value="">custom</option>
312
+ <option value="light">light</option>
313
+ <option value="dark">dark</option>
314
+ </select>
315
+ </label>
316
+ <label>file
317
+ <input id="file" type="file" accept=".mmd,.md,.mdx,.markdown,.txt" />
318
+ </label>
319
+ <button id="reset" type="button">use watched file</button>
320
+ <div id="status">loading…</div>
321
+ </header>
322
+ <main>
323
+ <img id="diagram" alt="diagram preview" />
324
+ </main>
325
+ <script>
326
+ const img = document.getElementById("diagram");
327
+ const statusEl = document.getElementById("status");
328
+ const formatEl = document.getElementById("format");
329
+ const themeEl = document.getElementById("theme");
330
+ const engineEl = document.getElementById("engine");
331
+ const presetEl = document.getElementById("preset");
332
+ const fileEl = document.getElementById("file");
333
+ const resetEl = document.getElementById("reset");
334
+ const canReset = ${JSON.stringify(Boolean(inputPath))};
335
+ const state = {
336
+ format: ${JSON.stringify(defaultFormat)},
337
+ theme: ${JSON.stringify(defaultTheme ?? "")},
338
+ engine: ${JSON.stringify(defaultEngine ?? "")}
339
+ };
340
+
341
+ formatEl.value = state.format;
342
+ themeEl.value = state.theme;
343
+ engineEl.value = state.engine;
344
+ resetEl.disabled = !canReset;
345
+
346
+ function buildParams() {
347
+ const params = new URLSearchParams();
348
+ if (state.format) params.set("format", state.format);
349
+ if (state.theme) params.set("theme", state.theme);
350
+ if (state.engine) params.set("engine", state.engine);
351
+ return params;
352
+ }
353
+
354
+ function onChange() {
355
+ state.format = formatEl.value;
356
+ state.theme = themeEl.value;
357
+ state.engine = engineEl.value;
358
+ refresh();
359
+ }
360
+
361
+ formatEl.addEventListener("change", onChange);
362
+ themeEl.addEventListener("change", onChange);
363
+ engineEl.addEventListener("change", onChange);
364
+ presetEl.addEventListener("change", () => {
365
+ const value = presetEl.value;
366
+ if (value === "light" || value === "dark") {
367
+ themeEl.value = value;
368
+ } else {
369
+ themeEl.value = "";
370
+ }
371
+ onChange();
372
+ });
373
+
374
+ fileEl.addEventListener("change", async () => {
375
+ const file = fileEl.files && fileEl.files[0];
376
+ if (!file) return;
377
+ const text = await file.text();
378
+ await fetch("/source", {
379
+ method: "POST",
380
+ headers: { "content-type": "application/json" },
381
+ body: JSON.stringify({ source: text })
382
+ });
383
+ refresh();
384
+ });
385
+
386
+ resetEl.addEventListener("click", async () => {
387
+ if (!canReset) return;
388
+ await fetch("/reset", { method: "POST" });
389
+ refresh();
390
+ });
391
+
392
+ async function refresh() {
393
+ const params = buildParams();
394
+ params.set("ts", Date.now());
395
+ img.src = "/diagram?" + params.toString();
396
+ try {
397
+ const res = await fetch("/status");
398
+ const data = await res.json();
399
+ if (data.ok) {
400
+ const mode = data.mode ? " (" + data.mode + ")" : "";
401
+ statusEl.textContent = "updated " + new Date(data.updatedAt).toLocaleTimeString() + mode;
402
+ statusEl.className = "";
403
+ } else {
404
+ statusEl.textContent = data.error || "render error";
405
+ statusEl.className = "error";
406
+ }
407
+ } catch (err) {
408
+ statusEl.textContent = "preview server error";
409
+ statusEl.className = "error";
410
+ }
411
+ }
412
+ setInterval(refresh, 1000);
413
+ refresh();
414
+ </script>
415
+ </body>
416
+ </html>`;
417
+ const server = createServer(async (req, res) => {
418
+ if (!req.url) {
419
+ res.statusCode = 400;
420
+ res.end("missing url");
421
+ return;
422
+ }
423
+ const url = new URL(req.url, `http://${host}:${port}`);
424
+ if (url.pathname === "/diagram") {
425
+ res.setHeader("Cache-Control", "no-store");
426
+ if (lastError) {
427
+ res.statusCode = 500;
428
+ res.end(lastError);
429
+ return;
430
+ }
431
+ try {
432
+ const formatParam = url.searchParams.get("format") ?? defaultFormat;
433
+ const themeParam = url.searchParams.get("theme") ?? defaultTheme ?? "";
434
+ const engineParam = url.searchParams.get("engine");
435
+ const format = formatParam === "png" ? "png" : "svg";
436
+ const theme = themeParam === "light" || themeParam === "dark" || themeParam === "custom"
437
+ ? themeParam
438
+ : undefined;
439
+ const engine = (engineParam ?? defaultEngine) || undefined;
440
+ const diagram = selectDiagram(source);
441
+ const result = await render(diagram, { format, theme, scale, background, engine });
442
+ res.statusCode = 200;
443
+ res.setHeader("Content-Type", result.mime);
444
+ res.end(Buffer.from(result.bytes));
445
+ lastError = null;
446
+ return;
447
+ }
448
+ catch (error) {
449
+ lastError = errorMessage(error);
450
+ res.statusCode = 500;
451
+ res.end(lastError);
452
+ return;
453
+ }
454
+ }
455
+ if (url.pathname === "/source" && req.method === "POST") {
456
+ const chunks = [];
457
+ req.on("data", (chunk) => chunks.push(Buffer.from(chunk)));
458
+ req.on("end", () => {
459
+ try {
460
+ const body = Buffer.concat(chunks).toString("utf8");
461
+ let nextSource = null;
462
+ try {
463
+ const payload = JSON.parse(body);
464
+ if (payload.source)
465
+ nextSource = payload.source;
466
+ }
467
+ catch {
468
+ nextSource = body;
469
+ }
470
+ if (!nextSource) {
471
+ res.statusCode = 400;
472
+ res.end("missing source");
473
+ return;
474
+ }
475
+ source = nextSource;
476
+ sourceMode = "manual";
477
+ lastError = null;
478
+ lastUpdated = Date.now();
479
+ res.statusCode = 200;
480
+ res.end("ok");
481
+ }
482
+ catch (error) {
483
+ res.statusCode = 400;
484
+ res.end(errorMessage(error));
485
+ }
486
+ });
487
+ return;
488
+ }
489
+ if (url.pathname === "/reset" && req.method === "POST") {
490
+ if (!inputPath) {
491
+ res.statusCode = 400;
492
+ res.end("no watched file");
493
+ return;
494
+ }
495
+ source = fileSource;
496
+ sourceMode = "file";
497
+ lastError = null;
498
+ lastUpdated = Date.now();
499
+ res.statusCode = 200;
500
+ res.end("ok");
501
+ return;
502
+ }
503
+ if (url.pathname === "/status") {
504
+ res.setHeader("Content-Type", "application/json");
505
+ res.end(JSON.stringify({
506
+ ok: !lastError,
507
+ error: lastError,
508
+ updatedAt: lastUpdated,
509
+ mode: sourceMode
510
+ }));
511
+ return;
512
+ }
513
+ res.statusCode = 200;
514
+ res.setHeader("Content-Type", "text/html; charset=utf-8");
515
+ res.end(html);
516
+ });
517
+ server.listen(port, host, () => {
518
+ stdout.write(`preview: http://${host}:${port}\n`);
519
+ if (inputPath)
520
+ stdout.write(`watching: ${inputPath}\n`);
521
+ });
522
+ }
523
+ async function cmdServe(_flags) {
524
+ const rl = createInterface({ input: stdin, crlfDelay: Infinity });
525
+ for await (const line of rl) {
526
+ const trimmed = line.trim();
527
+ if (!trimmed)
528
+ continue;
529
+ let request;
530
+ try {
531
+ request = JSON.parse(trimmed);
532
+ }
533
+ catch (error) {
534
+ writeServeResponse({ ok: false, error: `invalid JSON: ${errorMessage(error)}` });
535
+ continue;
536
+ }
537
+ const id = request.id;
538
+ try {
539
+ if (request.action === "render") {
540
+ const options = request.options ?? {};
541
+ const diagram = { id: id ?? "diagram-1", source: normalizeDiagram(request.diagram) };
542
+ const result = await render(diagram, {
543
+ format: options.format ?? "svg",
544
+ theme: options.theme,
545
+ scale: options.scale,
546
+ background: options.background ?? "transparent",
547
+ engine: options.engine
548
+ });
549
+ writeServeResponse({
550
+ id,
551
+ ok: true,
552
+ result: {
553
+ mime: result.mime,
554
+ warnings: result.warnings,
555
+ bytes: Buffer.from(result.bytes).toString("base64")
556
+ }
557
+ });
558
+ continue;
559
+ }
560
+ if (request.action === "renderBatch") {
561
+ const options = request.options ?? {};
562
+ const results = [];
563
+ for (const item of request.diagrams) {
564
+ const diagramId = item.id ?? `diagram-${results.length + 1}`;
565
+ try {
566
+ const diagram = { id: diagramId, source: normalizeDiagram(item.source) };
567
+ const result = await render(diagram, {
568
+ format: options.format ?? "svg",
569
+ theme: options.theme,
570
+ scale: options.scale,
571
+ background: options.background ?? "transparent",
572
+ engine: options.engine
573
+ });
574
+ results.push({
575
+ id: diagramId,
576
+ ok: true,
577
+ result: {
578
+ mime: result.mime,
579
+ warnings: result.warnings,
580
+ bytes: Buffer.from(result.bytes).toString("base64")
581
+ }
582
+ });
583
+ }
584
+ catch (error) {
585
+ results.push({
586
+ id: diagramId,
587
+ ok: false,
588
+ error: errorMessage(error)
589
+ });
590
+ }
591
+ }
592
+ writeServeResponse({
593
+ id,
594
+ ok: true,
595
+ result: {
596
+ results
597
+ }
598
+ });
599
+ continue;
600
+ }
601
+ if (request.action === "extract") {
602
+ const diagrams = extractDiagrams(request.markdown);
603
+ writeServeResponse({
604
+ id,
605
+ ok: true,
606
+ result: {
607
+ diagrams
608
+ }
609
+ });
610
+ continue;
611
+ }
612
+ if (request.action === "term") {
613
+ const diagram = { id: id ?? "diagram-1", source: normalizeDiagram(request.diagram) };
614
+ const result = await renderForTerminal(diagram, detectCapabilities());
615
+ writeServeResponse({
616
+ id,
617
+ ok: true,
618
+ result: {
619
+ text: result.text,
620
+ mime: result.mime,
621
+ warnings: result.warnings,
622
+ bytes: result.imageBytes ? Buffer.from(result.imageBytes).toString("base64") : undefined
623
+ }
624
+ });
625
+ continue;
626
+ }
627
+ if (request.action === "schema") {
628
+ const schema = buildToolSchema(request.format ?? "generic");
629
+ writeServeResponse({
630
+ id,
631
+ ok: true,
632
+ result: schema
633
+ });
634
+ continue;
635
+ }
636
+ writeServeResponse({ id, ok: false, error: "unknown action" });
637
+ }
638
+ catch (error) {
639
+ writeServeResponse({ id, ok: false, error: errorMessage(error) });
640
+ }
641
+ }
642
+ }
643
+ function writeServeResponse(response) {
644
+ stdout.write(`${JSON.stringify(response)}\n`);
645
+ }
646
+ function errorMessage(error) {
647
+ if (error instanceof Error)
648
+ return error.message;
649
+ return String(error);
650
+ }
651
+ function selectDiagram(input) {
652
+ const diagrams = extractDiagrams(input);
653
+ if (diagrams.length > 0)
654
+ return diagrams[0];
655
+ return { id: "diagram-1", source: normalizeDiagram(input) };
656
+ }
657
+ async function renderDiagram(diagram, format, flags) {
658
+ const asciiOptions = {};
659
+ if (flags.ascii)
660
+ asciiOptions.useAscii = true;
661
+ if (flags.coords)
662
+ asciiOptions.showCoords = true;
663
+ const paddingX = parseNumber(getFlag(flags, "padding-x"));
664
+ if (paddingX !== undefined)
665
+ asciiOptions.paddingBetweenX = paddingX;
666
+ const paddingY = parseNumber(getFlag(flags, "padding-y"));
667
+ if (paddingY !== undefined)
668
+ asciiOptions.paddingBetweenY = paddingY;
669
+ const borderPadding = parseNumber(getFlag(flags, "border-padding"));
670
+ if (borderPadding !== undefined)
671
+ asciiOptions.boxBorderPadding = borderPadding;
672
+ return render(diagram, {
673
+ format: format,
674
+ theme: getFlag(flags, "theme") ?? undefined,
675
+ scale: parseNumber(getFlag(flags, "scale")),
676
+ background: getFlag(flags, "background") ?? "transparent",
677
+ engine: getFlag(flags, "engine") ?? undefined,
678
+ ascii: asciiOptions
679
+ });
680
+ }
681
+ async function readInput(flags) {
682
+ const inputPath = getFlag(flags, "in");
683
+ const useStdin = Boolean(flags.stdin);
684
+ if (useStdin)
685
+ return readStdin();
686
+ if (inputPath)
687
+ return readFile(inputPath, "utf8");
688
+ throw new Error("input required: pass --in <file> or --stdin");
689
+ }
690
+ function readStdin() {
691
+ return new Promise((resolve, reject) => {
692
+ let data = "";
693
+ stdin.setEncoding("utf8");
694
+ stdin.on("data", (chunk) => {
695
+ data += chunk;
696
+ });
697
+ stdin.on("end", () => resolve(data));
698
+ stdin.on("error", (err) => reject(err));
699
+ });
700
+ }
701
+ function buildToolSchema(format) {
702
+ const normalized = format === "openai" ? "openai" : "generic";
703
+ const tools = buildToolDefinitions();
704
+ if (normalized === "openai") {
705
+ return tools.map((tool) => ({
706
+ type: "function",
707
+ function: tool
708
+ }));
709
+ }
710
+ return {
711
+ format: "generic",
712
+ tools
713
+ };
714
+ }
715
+ function buildToolDefinitions() {
716
+ const renderOptionsSchema = {
717
+ type: "object",
718
+ properties: {
719
+ format: { type: "string", enum: ["svg", "png", "pdf", "ascii"] },
720
+ theme: { type: "string", enum: ["light", "dark", "custom"] },
721
+ scale: { type: "number" },
722
+ background: { type: "string" },
723
+ engine: { type: "string" }
724
+ }
725
+ };
726
+ return [
727
+ {
728
+ name: "mermkit.render",
729
+ description: "Render a Mermaid diagram to svg/png/pdf/ascii.",
730
+ parameters: {
731
+ type: "object",
732
+ properties: {
733
+ diagram: { type: "string", description: "Mermaid source text" },
734
+ options: renderOptionsSchema
735
+ },
736
+ required: ["diagram"]
737
+ }
738
+ },
739
+ {
740
+ name: "mermkit.renderBatch",
741
+ description: "Render multiple Mermaid diagrams in a single request.",
742
+ parameters: {
743
+ type: "object",
744
+ properties: {
745
+ diagrams: {
746
+ type: "array",
747
+ items: {
748
+ type: "object",
749
+ properties: {
750
+ id: { type: "string" },
751
+ source: { type: "string" }
752
+ },
753
+ required: ["source"]
754
+ }
755
+ },
756
+ options: renderOptionsSchema
757
+ },
758
+ required: ["diagrams"]
759
+ }
760
+ },
761
+ {
762
+ name: "mermkit.extract",
763
+ description: "Extract Mermaid blocks from markdown.",
764
+ parameters: {
765
+ type: "object",
766
+ properties: {
767
+ markdown: { type: "string" }
768
+ },
769
+ required: ["markdown"]
770
+ }
771
+ },
772
+ {
773
+ name: "mermkit.term",
774
+ description: "Render a Mermaid diagram for terminal display.",
775
+ parameters: {
776
+ type: "object",
777
+ properties: {
778
+ diagram: { type: "string" }
779
+ },
780
+ required: ["diagram"]
781
+ }
782
+ },
783
+ {
784
+ name: "mermkit.schema",
785
+ description: "Return tool schema for mermkit actions.",
786
+ parameters: {
787
+ type: "object",
788
+ properties: {
789
+ format: { type: "string", enum: ["generic", "openai"] }
790
+ }
791
+ }
792
+ }
793
+ ];
794
+ }
795
+ function hashDiagram(source) {
796
+ return createHash("sha256").update(source).digest("hex");
797
+ }
798
+ async function writeManifest(path, entries) {
799
+ const payload = {
800
+ count: entries.length,
801
+ entries
802
+ };
803
+ await ensureDir(dirname(path));
804
+ await writeFile(path, JSON.stringify(payload, null, 2) + "\n", "utf8");
805
+ }
806
+ function parseArgs(argv) {
807
+ const flags = {};
808
+ const positional = [];
809
+ for (let i = 0; i < argv.length; i += 1) {
810
+ const arg = argv[i];
811
+ if (arg.startsWith("--")) {
812
+ const trimmed = arg.slice(2);
813
+ const eq = trimmed.indexOf("=");
814
+ if (eq !== -1) {
815
+ const key = trimmed.slice(0, eq);
816
+ const value = trimmed.slice(eq + 1);
817
+ flags[key] = value;
818
+ continue;
819
+ }
820
+ const next = argv[i + 1];
821
+ if (next && !next.startsWith("-")) {
822
+ flags[trimmed] = next;
823
+ i += 1;
824
+ }
825
+ else {
826
+ flags[trimmed] = true;
827
+ }
828
+ continue;
829
+ }
830
+ if (arg.startsWith("-")) {
831
+ if (arg === "-h")
832
+ flags.help = true;
833
+ if (arg === "-q")
834
+ flags.quiet = true;
835
+ continue;
836
+ }
837
+ positional.push(arg);
838
+ }
839
+ return { flags, positional };
840
+ }
841
+ function getFlag(flags, name) {
842
+ const value = flags[name];
843
+ if (value === undefined || value === true)
844
+ return undefined;
845
+ return value;
846
+ }
847
+ function parseNumber(value) {
848
+ if (!value)
849
+ return undefined;
850
+ const parsed = Number(value);
851
+ return Number.isFinite(parsed) ? parsed : undefined;
852
+ }
853
+ function isHelp(command, flags) {
854
+ if (!command)
855
+ return true;
856
+ if (command === "help")
857
+ return true;
858
+ if (flags.help)
859
+ return true;
860
+ if (command === "--help")
861
+ return true;
862
+ return false;
863
+ }
864
+ async function ensureDir(path) {
865
+ if (!path || path === ".")
866
+ return;
867
+ await mkdir(path, { recursive: true });
868
+ }
869
+ function detectCapabilities() {
870
+ const termProgram = env.TERM_PROGRAM ?? "";
871
+ const term = env.TERM ?? "";
872
+ const lang = env.LANG ?? "";
873
+ return {
874
+ kitty: Boolean(env.KITTY_WINDOW_ID) || term.includes("xterm-kitty"),
875
+ iterm2: termProgram === "iTerm.app",
876
+ wezterm: termProgram === "WezTerm",
877
+ unicode: lang.toLowerCase().includes("utf-8")
878
+ };
879
+ }
880
+ async function checkEmbedded() {
881
+ const mermaid = await hasModule("mermaid");
882
+ const jsdom = await hasModule("jsdom");
883
+ const dompurify = await hasModule("dompurify");
884
+ return { ok: mermaid && jsdom, mermaid, jsdom, dompurify };
885
+ }
886
+ async function hasModule(name) {
887
+ try {
888
+ await import(name);
889
+ return true;
890
+ }
891
+ catch {
892
+ return false;
893
+ }
894
+ }
895
+ async function checkMmdc() {
896
+ const envPath = env.MERMKIT_MMDC_PATH;
897
+ const candidates = [];
898
+ if (envPath)
899
+ candidates.push(envPath);
900
+ const repoRoot = guessRepoRoot();
901
+ if (repoRoot)
902
+ candidates.push(join(repoRoot, "node_modules", ".bin", "mmdc"));
903
+ candidates.push(join(process.cwd(), "node_modules", ".bin", "mmdc"));
904
+ candidates.push("mmdc");
905
+ for (const candidate of candidates) {
906
+ const ok = await canRun(candidate, ["-h"]);
907
+ if (ok)
908
+ return { ok: true, path: candidate };
909
+ }
910
+ return { ok: false };
911
+ }
912
+ function canRun(command, args) {
913
+ return new Promise((resolve) => {
914
+ const child = spawn(command, args, { stdio: "ignore" });
915
+ child.on("error", () => resolve(false));
916
+ child.on("close", (code) => resolve(code === 0));
917
+ });
918
+ }
919
+ function guessRepoRoot() {
920
+ const current = fileURLToPath(import.meta.url);
921
+ return join(dirname(current), "..", "..", "..");
922
+ }
923
+ function printHelp() {
924
+ const name = basename(process.argv[1] ?? "mermkit");
925
+ stdout.write(`mermkit CLI\n\n` +
926
+ `Usage:\n` +
927
+ ` ${name} render --in diagram.mmd --out diagram.svg\n` +
928
+ ` ${name} render --stdin --format png --out out.png\n` +
929
+ ` ${name} extract --in README.md --out-dir diagrams/\n` +
930
+ ` ${name} term --in diagram.mmd\n\n` +
931
+ ` ${name} preview --in diagram.mmd --port 7070\n\n` +
932
+ ` ${name} tool-schema --format openai\n\n` +
933
+ ` ${name} doctor\n` +
934
+ ` ${name} serve (JSON over stdin/stdout)\n\n` +
935
+ `Commands:\n` +
936
+ ` render Render a diagram to svg/png/pdf/ascii\n` +
937
+ ` extract Extract fenced mermaid blocks from markdown\n` +
938
+ ` term Terminal-friendly rendering\n` +
939
+ ` doctor Report engine and terminal capabilities\n` +
940
+ ` serve JSON IPC mode for wrappers\n` +
941
+ ` preview Local preview server\n\n` +
942
+ ` tool-schema Print tool schema for agents\n\n` +
943
+ `Flags:\n` +
944
+ ` --in <file> Input file\n` +
945
+ ` --stdin Read input from stdin\n` +
946
+ ` --out <file> Output file (render)\n` +
947
+ ` --out-dir <dir> Output directory (render/extract)\n` +
948
+ ` --out-manifest <file> Write manifest JSON (render)\n` +
949
+ ` --format <fmt> svg|png|pdf|ascii|term\n` +
950
+ ` --theme <theme> light|dark|custom\n` +
951
+ ` --scale <n> Scale factor\n` +
952
+ ` --background <bg> transparent|#hex\n` +
953
+ ` --engine <engine> auto|embedded|mmdc|stub|ascii|<custom>\n` +
954
+ ` --ascii Force ASCII characters (vs Unicode)\n` +
955
+ ` --coords Show debug grid coordinates\n` +
956
+ ` --padding-x <n> Graph horizontal padding\n` +
957
+ ` --padding-y <n> Graph vertical padding\n` +
958
+ ` --border-padding <n> Node border padding\n` +
959
+ ` --host <host> Preview bind host (preview)\n` +
960
+ ` --port <port> Preview port (preview)\n` +
961
+ ` --json Machine-readable output\n` +
962
+ ` --quiet Suppress warnings\n`);
963
+ }
964
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@mermkit/cli",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "bin": {
6
+ "mermkit": "dist/cli.js",
7
+ "mmk": "dist/cli.js"
8
+ },
9
+ "main": "dist/cli.js",
10
+ "types": "dist/cli.d.ts",
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc -b"
16
+ },
17
+ "dependencies": {
18
+ "@mermkit/core": "0.1.0",
19
+ "@mermkit/render": "0.1.0",
20
+ "@mermkit/adapters": "0.1.0"
21
+ }
22
+ }