Recover gracefully from mermaid render errors

When mermaid.render fails, suppress mermaid's "Syntax error"
overlay and show our own small warning above the original code
block so the source stays visible. Subsequent diagrams in the
same document still render.
This commit is contained in:
Rūdolfs Ošiņš
2026-05-07 18:31:28 +02:00
parent 9ebc5f6b3b
commit 6fb702f886
3 changed files with 43 additions and 20 deletions
Binary file not shown.
+10 -4
View File
@@ -125,20 +125,26 @@ test("math", async ({ page }) => {
await expect(page).toHaveScreenshot({ fullPage: true });
});
test("mermaid diagram", async ({ page }) => {
test("mermaid diagrams", async ({ page }) => {
await page.goto(`${markdownUrl}/tree/main/mermaid.md`, {
waitUntil: "networkidle",
});
await expect(page.locator(".mermaid-diagram svg")).toBeVisible();
await expect(page.locator(".mermaid-diagram svg")).toHaveCount(2);
await expect(page).toHaveScreenshot({ fullPage: true });
});
test("broken mermaid falls back to code block", async ({ page }) => {
test("broken mermaid shows warning and does not block subsequent diagrams", async ({
page,
}) => {
await page.goto(`${markdownUrl}/tree/main/mermaid-broken.md`, {
waitUntil: "networkidle",
});
// Our custom warning replaces mermaid's built-in error overlay.
await expect(page.locator(".mermaid-error")).toBeVisible();
// The original source for the broken diagram stays visible.
await expect(page.locator("pre code.language-mermaid")).toBeVisible();
await expect(page.locator(".mermaid-diagram")).toHaveCount(0);
// The valid diagram following the broken one still renders.
await expect(page.locator(".mermaid-diagram svg")).toHaveCount(1);
await expect(page).toHaveScreenshot({ fullPage: true });
});