diff --git a/.changeset/strong-laws-confess.md b/.changeset/strong-laws-confess.md new file mode 100644 index 000000000..be0621d10 --- /dev/null +++ b/.changeset/strong-laws-confess.md @@ -0,0 +1,9 @@ +--- +'mermaid': patch +--- + +fix: fallback to raw text instead of rendering _Unsupported markdown_ or empty blocks + +Instead of printing **Unsupported markdown: XXX**, or empty blocks when using a markdown feature +that Mermaid does not yet support when `htmlLabels: true`(default) or `htmlLabels: false`, +fallback to the raw markdown text. diff --git a/cypress/integration/rendering/flowchart-v2.spec.js b/cypress/integration/rendering/flowchart-v2.spec.js index 69ff10b00..6756c433d 100644 --- a/cypress/integration/rendering/flowchart-v2.spec.js +++ b/cypress/integration/rendering/flowchart-v2.spec.js @@ -1164,4 +1164,26 @@ end ` ); }); + + describe('when rendering unsuported markdown', () => { + const graph = `flowchart TB + mermaid{"What is\nyourmermaid version?"} --> v10["<11"] --"\`<**1**1\`"--> fine["No bug"] + mermaid --> v11[">= v11"] -- ">= v11" --> broken["Affected by https://github.com/mermaid-js/mermaid/issues/5824"] + subgraph subgraph1["\`How to fix **fix**\`"] + broken --> B["B"] + end + githost["Github, Gitlab, BitBucket, etc."] + githost2["\`Github, Gitlab, BitBucket, etc.\`"] + a["1."] + b["- x"] + `; + + it('should render raw strings', () => { + imgSnapshotTest(graph); + }); + + it('should render raw strings with htmlLabels: false', () => { + imgSnapshotTest(graph, { htmlLabels: false }); + }); + }); }); diff --git a/packages/mermaid/src/rendering-util/handle-markdown-text.spec.ts b/packages/mermaid/src/rendering-util/handle-markdown-text.spec.ts index 3ab4167a2..2000d58b8 100644 --- a/packages/mermaid/src/rendering-util/handle-markdown-text.spec.ts +++ b/packages/mermaid/src/rendering-util/handle-markdown-text.spec.ts @@ -285,7 +285,11 @@ test('markdownToHTML - Unsupported formatting', () => { - l1 - l2 - l3`) - ).toMatchInlineSnapshot('"
Hello
Unsupported markdown: list"'); + ).toMatchInlineSnapshot(` + "Hello
- l1 + - l2 + - l3" + `); }); test('markdownToHTML - no auto wrapping', () => { diff --git a/packages/mermaid/src/rendering-util/handle-markdown-text.ts b/packages/mermaid/src/rendering-util/handle-markdown-text.ts index f898875cf..b20b334f4 100644 --- a/packages/mermaid/src/rendering-util/handle-markdown-text.ts +++ b/packages/mermaid/src/rendering-util/handle-markdown-text.ts @@ -3,6 +3,7 @@ import { marked } from 'marked'; import { dedent } from 'ts-dedent'; import type { MarkdownLine, MarkdownWordType } from './types.js'; import type { MermaidConfig } from '../config.type.js'; +import { log } from '../logger.js'; /** * @param markdown - markdown to process @@ -61,6 +62,8 @@ export function markdownToLines(markdown: string, config: MermaidConfig = {}): M }); } else if (treeNode.type === 'html') { lines[currentLine].push({ content: treeNode.text, type: 'normal' }); + } else { + lines[currentLine].push({ content: treeNode.raw, type: 'normal' }); } }); @@ -89,7 +92,8 @@ export function markdownToHTML(markdown: string, { markdownAutoWrap }: MermaidCo } else if (node.type === 'escape') { return node.text; } - return `Unsupported markdown: ${node.type}`; + log.warn(`Unsupported markdown: ${node.type}`); + return node.raw; } return nodes.map(output).join('');