import assert from "node:assert/strict"; import test from "node:test"; import type { DiagramIRV2 } from "../../model/diagram-ir.js"; import { diagramIRToMermaid, diagramIRToStructuredMarkdown } from "./reverse.js"; const IR: DiagramIRV2 = { version: 2, title: "Platform", pages: [{ id: "system", title: "System", nodes: [ { id: "a", label: "Client" }, { id: "b", label: "API \"danger\"]\n%%{init: {}}%% [click](javascript:alert(1))" }, ], edges: [{ id: "call", source: "a", target: "b", label: "calls | inject" }], }], }; test("reverse Mermaid flowchart is deterministic and escapes untrusted labels", () => { const output = diagramIRToMermaid(IR); assert.equal(output, diagramIRToMermaid(IR)); assert.match(output, /^flowchart LR/m); assert.match(output, /n0\["Client"\]/); assert.match(output, /n0 -->\|"calls | inject"\| n1/); assert.doesNotMatch(output, /