mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-08-18 15:56:43 +02:00
Merge branch 'develop' into sidv/stateDB-ts
This commit is contained in:
5
.changeset/silver-olives-marry.md
Normal file
5
.changeset/silver-olives-marry.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'mermaid': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix: `mermaidAPI.getDiagramFromText()` now returns a new different db for each sequence diagram. Added unique IDs for messages.
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,16 +1,26 @@
|
|||||||
import type { DiagramDefinition } from '../../diagram-api/types.js';
|
import type { DiagramDefinition } from '../../diagram-api/types.js';
|
||||||
// @ts-ignore: JISON doesn't support types
|
// @ts-ignore: JISON doesn't support types
|
||||||
import parser from './parser/sequenceDiagram.jison';
|
import parser from './parser/sequenceDiagram.jison';
|
||||||
import db from './sequenceDb.js';
|
import { SequenceDB } from './sequenceDb.js';
|
||||||
import styles from './styles.js';
|
import styles from './styles.js';
|
||||||
|
import { setConfig } from '../../diagram-api/diagramAPI.js';
|
||||||
import renderer from './sequenceRenderer.js';
|
import renderer from './sequenceRenderer.js';
|
||||||
|
import type { MermaidConfig } from '../../config.type.js';
|
||||||
|
|
||||||
export const diagram: DiagramDefinition = {
|
export const diagram: DiagramDefinition = {
|
||||||
parser,
|
parser,
|
||||||
db,
|
get db() {
|
||||||
|
return new SequenceDB();
|
||||||
|
},
|
||||||
renderer,
|
renderer,
|
||||||
styles,
|
styles,
|
||||||
init: ({ wrap }) => {
|
init: (cnf: MermaidConfig) => {
|
||||||
db.setWrap(wrap);
|
if (!cnf.sequence) {
|
||||||
|
cnf.sequence = {};
|
||||||
|
}
|
||||||
|
if (cnf.wrap) {
|
||||||
|
cnf.sequence.wrap = cnf.wrap;
|
||||||
|
setConfig({ sequence: { wrap: cnf.wrap } });
|
||||||
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@@ -1538,7 +1538,6 @@ const calculateLoopBounds = async function (messages, actors, _maxWidthPerActor,
|
|||||||
let current, noteModel, msgModel;
|
let current, noteModel, msgModel;
|
||||||
|
|
||||||
for (const msg of messages) {
|
for (const msg of messages) {
|
||||||
msg.id = utils.random({ length: 10 });
|
|
||||||
switch (msg.type) {
|
switch (msg.type) {
|
||||||
case diagObj.db.LINETYPE.LOOP_START:
|
case diagObj.db.LINETYPE.LOOP_START:
|
||||||
case diagObj.db.LINETYPE.ALT_START:
|
case diagObj.db.LINETYPE.ALT_START:
|
||||||
|
@@ -20,6 +20,7 @@ export interface Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface Message {
|
export interface Message {
|
||||||
|
id: string;
|
||||||
from?: string;
|
from?: string;
|
||||||
to?: string;
|
to?: string;
|
||||||
message:
|
message:
|
||||||
|
@@ -67,10 +67,11 @@ vi.mock('stylis', () => {
|
|||||||
|
|
||||||
import { compile, serialize } from 'stylis';
|
import { compile, serialize } from 'stylis';
|
||||||
import { Diagram } from './Diagram.js';
|
import { Diagram } from './Diagram.js';
|
||||||
import { decodeEntities, encodeEntities } from './utils.js';
|
|
||||||
import { toBase64 } from './utils/base64.js';
|
|
||||||
import { ClassDB } from './diagrams/class/classDb.js';
|
import { ClassDB } from './diagrams/class/classDb.js';
|
||||||
import { FlowDB } from './diagrams/flowchart/flowDb.js';
|
import { FlowDB } from './diagrams/flowchart/flowDb.js';
|
||||||
|
import { SequenceDB } from './diagrams/sequence/sequenceDb.js';
|
||||||
|
import { decodeEntities, encodeEntities } from './utils.js';
|
||||||
|
import { toBase64 } from './utils/base64.js';
|
||||||
import { StateDB } from './diagrams/state/stateDb.js';
|
import { StateDB } from './diagrams/state/stateDb.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -925,28 +926,18 @@ graph TD;A--x|text including URL space|B;`)
|
|||||||
);
|
);
|
||||||
const sequenceDiagram2 = await mermaidAPI.getDiagramFromText(
|
const sequenceDiagram2 = await mermaidAPI.getDiagramFromText(
|
||||||
`sequenceDiagram
|
`sequenceDiagram
|
||||||
|
actor A1
|
||||||
Alice->>+John: Hello John, how are you?
|
Alice->>+John: Hello John, how are you?
|
||||||
Alice->>+John: John, can you hear me?
|
Alice->>+John: John, can you hear me?
|
||||||
John-->>-Alice: Hi Alice, I can hear you!
|
John-->>-Alice: Hi Alice, I can hear you!
|
||||||
John-->>-Alice: I feel great!`
|
John-->>-Alice: I feel great!`
|
||||||
);
|
);
|
||||||
// Since sequenceDiagram will return same Db object each time, we can compare the db to be same.
|
|
||||||
expect(sequenceDiagram1.db).toBe(sequenceDiagram2.db);
|
// Since sequenceDiagram will return new Db object each time, we can compare the db to be different.
|
||||||
|
expect(sequenceDiagram1.db).not.toBe(sequenceDiagram2.db);
|
||||||
|
assert(sequenceDiagram1.db instanceof SequenceDB);
|
||||||
|
assert(sequenceDiagram2.db instanceof SequenceDB);
|
||||||
|
expect(sequenceDiagram1.db.getActors()).not.toEqual(sequenceDiagram2.db.getActors());
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// Sequence Diagram currently uses a singleton DB, so this test will fail
|
|
||||||
it.fails('should not modify db when rendering different sequence diagrams', async () => {
|
|
||||||
const sequenceDiagram1 = await mermaidAPI.getDiagramFromText(
|
|
||||||
`sequenceDiagram
|
|
||||||
Alice->>Bob: Hello Bob, how are you?
|
|
||||||
Bob-->>John: How about you John?`
|
|
||||||
);
|
|
||||||
const sequenceDiagram2 = await mermaidAPI.getDiagramFromText(
|
|
||||||
`sequenceDiagram
|
|
||||||
Alice->>Bob: Hello Bob, how are you?
|
|
||||||
Bob-->>John: How about you John?`
|
|
||||||
);
|
|
||||||
expect(sequenceDiagram1.db).not.toBe(sequenceDiagram2.db);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user