From 7b3fd044e8e6dd8e573f4c858f6985f27d42cd4c Mon Sep 17 00:00:00 2001 From: NourBz Date: Tue, 22 Apr 2025 21:18:03 +0100 Subject: [PATCH 1/2] fix(sequenceDiagram): allow empty message after colon (Fixes #6518) --- .../mermaid/src/diagrams/sequence/parser/sequenceDiagram.jison | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/mermaid/src/diagrams/sequence/parser/sequenceDiagram.jison b/packages/mermaid/src/diagrams/sequence/parser/sequenceDiagram.jison index 11b39d232..d2e81df5f 100644 --- a/packages/mermaid/src/diagrams/sequence/parser/sequenceDiagram.jison +++ b/packages/mermaid/src/diagrams/sequence/parser/sequenceDiagram.jison @@ -84,7 +84,8 @@ accDescr\s*"{"\s* { this.begin("acc_descr_multili \-\-[x] return 'DOTTED_CROSS'; \-[\)] return 'SOLID_POINT'; \-\-[\)] return 'DOTTED_POINT'; -":"(?:(?:no)?wrap:)?[^#\n;]+ return 'TXT'; +":"(?:(?:no)?wrap:)?[^#\n;]* return 'TXT'; +":" return 'TXT'; "+" return '+'; "-" return '-'; <> return 'NEWLINE'; From c17277e743b1c12e4134fba44c62a7d5885f2574 Mon Sep 17 00:00:00 2001 From: NourBz Date: Tue, 22 Apr 2025 21:45:24 +0100 Subject: [PATCH 2/2] added changeset and unit test --- .changeset/sixty-deer-tell.md | 5 +++++ .../diagrams/sequence/sequenceDiagram.spec.js | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 .changeset/sixty-deer-tell.md diff --git a/.changeset/sixty-deer-tell.md b/.changeset/sixty-deer-tell.md new file mode 100644 index 000000000..fd48d2aea --- /dev/null +++ b/.changeset/sixty-deer-tell.md @@ -0,0 +1,5 @@ +--- +'mermaid': major +--- + +fix: allow sequence diagram arrows with a trailing colon but no message diff --git a/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js b/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js index b21052ea6..c3b8c2b4a 100644 --- a/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js +++ b/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js @@ -2022,4 +2022,20 @@ describe('sequence db class', () => { expect(Object.hasOwn(sequenceDb, fun)).toBe(true); } }); + // This test verifies that messages with a colon but no content (e.g., "Alice->>Bob:") + // are correctly parsed as valid messages with an empty string as the message content. + + it('should parse a message with a trailing colon but no content', async () => { + const diagram = await Diagram.fromText(` +sequenceDiagram +Alice->>Bob: +Bob->>Alice:Got it! +`); + + const messages = diagram.db.getMessages(); + expect(messages.length).toBe(2); + expect(messages[0].message).toBe(''); + expect(messages[0].from).toBe('Alice'); + expect(messages[0].to).toBe('Bob'); + }); });