Skip to content

Commit

Permalink
fix: simply from and to in message to string type
Browse files Browse the repository at this point in the history
  • Loading branch information
ad1992 committed Apr 18, 2024
1 parent 3809732 commit 196d885
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* (c) 2014-2015 Knut Sveidqvist
* MIT license.
*
* Based on js sequence diagrams jison grammr
* Based on js sequence diagrams jison grammer
* https://bramp.github.io/js-sequence-diagrams/
* (c) 2012-2013 Andrew Brampton (bramp.net)
* Simplified BSD license.
Expand Down
15 changes: 6 additions & 9 deletions packages/mermaid/src/diagrams/sequence/sequenceDb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,17 +115,16 @@ const activationCount = (part: string) => {
if (!part) {
return 0;
}

for (i = 0; i < state.records.messages.length; i++) {
if (
state.records.messages[i].type === LINETYPE.ACTIVE_START &&
state.records.messages[i].from?.actor === part
state.records.messages[i].from === part
) {
count++;
}
if (
state.records.messages[i].type === LINETYPE.ACTIVE_END &&
state.records.messages[i].from?.actor === part
state.records.messages[i].from === part
) {
count--;
}
Expand Down Expand Up @@ -156,12 +155,10 @@ export const addSignal = function (
activate: boolean = false
) {
if (messageType === LINETYPE.ACTIVE_END) {
const cnt = activationCount(idFrom?.actor || '');
const cnt = activationCount(idFrom || '');
if (cnt < 1) {
// Bail out as there is an activation signal from an inactive participant
const error = new Error(
'Trying to inactivate an inactive participant (' + idFrom?.actor + ')'
);
const error = new Error('Trying to inactivate an inactive participant (' + idFrom + ')');

// @ts-ignore: we are passing hash param to the error object, however we should define our own custom error class to make it type safe
error.hash = {
Expand Down Expand Up @@ -516,10 +513,10 @@ export const apply = function (param: any | AddMessageParams | AddMessageParams[
state.records.destroyedActors[param.actor] = state.records.messages.length;
break;
case 'activeStart':
addSignal(param.actor, undefined, undefined, param.signalType);
addSignal(param.actor.actor, undefined, undefined, param.signalType);
break;
case 'activeEnd':
addSignal(param.actor, undefined, undefined, param.signalType);
addSignal(param.actor.actor, undefined, undefined, param.signalType);
break;
case 'addNote':
addNote(param.actor, param.placement, param.text);
Expand Down
16 changes: 8 additions & 8 deletions packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -534,10 +534,10 @@ deactivate Bob`;
expect(messages.length).toBe(4);
expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED);
expect(messages[1].type).toBe(diagram.db.LINETYPE.ACTIVE_START);
expect(messages[1].from.actor).toBe('Bob');
expect(messages[1].from).toBe('Bob');
expect(messages[2].type).toBe(diagram.db.LINETYPE.DOTTED);
expect(messages[3].type).toBe(diagram.db.LINETYPE.ACTIVE_END);
expect(messages[3].from.actor).toBe('Bob');
expect(messages[3].from).toBe('Bob');
});
it('should handle actor one line notation activation', async () => {
const str = `
Expand All @@ -556,10 +556,10 @@ deactivate Bob`;
expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED);
expect(messages[0].activate).toBeTruthy();
expect(messages[1].type).toBe(diagram.db.LINETYPE.ACTIVE_START);
expect(messages[1].from.actor).toBe('Bob');
expect(messages[1].from).toBe('Bob');
expect(messages[2].type).toBe(diagram.db.LINETYPE.DOTTED);
expect(messages[3].type).toBe(diagram.db.LINETYPE.ACTIVE_END);
expect(messages[3].from.actor).toBe('Bob');
expect(messages[3].from).toBe('Bob');
});
it('should handle stacked activations', async () => {
const str = `
Expand All @@ -579,14 +579,14 @@ deactivate Bob`;
expect(messages.length).toBe(8);
expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED);
expect(messages[1].type).toBe(diagram.db.LINETYPE.ACTIVE_START);
expect(messages[1].from.actor).toBe('Bob');
expect(messages[1].from).toBe('Bob');
expect(messages[2].type).toBe(diagram.db.LINETYPE.DOTTED);
expect(messages[3].type).toBe(diagram.db.LINETYPE.ACTIVE_START);
expect(messages[3].from.actor).toBe('Carol');
expect(messages[3].from).toBe('Carol');
expect(messages[5].type).toBe(diagram.db.LINETYPE.ACTIVE_END);
expect(messages[5].from.actor).toBe('Bob');
expect(messages[5].from).toBe('Bob');
expect(messages[7].type).toBe(diagram.db.LINETYPE.ACTIVE_END);
expect(messages[7].from.actor).toBe('Carol');
expect(messages[7].from).toBe('Carol');
});
it('should handle fail parsing when activating an inactive participant', async () => {
const str = `
Expand Down
18 changes: 9 additions & 9 deletions packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,15 +144,15 @@ export const bounds = {
this.updateBounds(_startx, _starty, _stopx, _stopy);
},
newActivation: function (message, diagram, actors) {
const actorRect = actors[message.from.actor];
const stackedSize = actorActivations(message.from.actor).length || 0;
const actorRect = actors[message.from];
const stackedSize = actorActivations(message.from).length || 0;
const x = actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2;
this.activations.push({
startx: x,
starty: this.verticalPos + 2,
stopx: x + conf.activationWidth,
stopy: undefined,
actor: message.from.actor,
actor: message.from,
anchored: svgDraw.anchorElement(diagram),
});
},
Expand All @@ -162,7 +162,7 @@ export const bounds = {
.map(function (activation) {
return activation.actor;
})
.lastIndexOf(message.from.actor);
.lastIndexOf(message.from);
return this.activations.splice(lastActorActivationIdx, 1)[0];
},
createLoop: function (title = { message: undefined, wrap: false, width: undefined }, fill) {
Expand Down Expand Up @@ -836,7 +836,7 @@ export const draw = async function (_text: string, id: string, _version: string,
activationData,
verticalPos,
conf,
actorActivations(msg.from.actor).length
actorActivations(msg.from).length
);

bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos);
Expand Down Expand Up @@ -1545,14 +1545,14 @@ const calculateLoopBounds = async function (messages, actors, _maxWidthPerActor,
break;
case diagObj.db.LINETYPE.ACTIVE_START:
{
const actorRect = actors[msg.from ? msg.from.actor : msg.to.actor];
const stackedSize = actorActivations(msg.from ? msg.from.actor : msg.to.actor).length;
const actorRect = actors[msg.from ? msg.from : msg.to.actor];
const stackedSize = actorActivations(msg.from ? msg.from : msg.to.actor).length;
const x =
actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2;
const toAdd = {
startx: x,
stopx: x + conf.activationWidth,
actor: msg.from.actor,
actor: msg.from,
enabled: true,
};
bounds.activations.push(toAdd);
Expand All @@ -1562,7 +1562,7 @@ const calculateLoopBounds = async function (messages, actors, _maxWidthPerActor,
{
const lastActorActivationIdx = bounds.activations
.map((a) => a.actor)
.lastIndexOf(msg.from.actor);
.lastIndexOf(msg.from);
delete bounds.activations.splice(lastActorActivationIdx, 1)[0];
}
break;
Expand Down
4 changes: 2 additions & 2 deletions packages/mermaid/src/diagrams/sequence/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ export interface Actor {
}

export interface Message {
from?: { actor: string };
to?: { actor: string };
from?: string;
to?: string;
message:
| string
| {
Expand Down

0 comments on commit 196d885

Please sign in to comment.