From 2d2add5b4407ea5a40b1d497fa4aa565b4efa9f2 Mon Sep 17 00:00:00 2001 From: kairi003 Date: Tue, 3 Sep 2024 03:48:33 +0900 Subject: [PATCH] Change: use Map for notes --- packages/mermaid/src/diagrams/class/classDb.ts | 18 ++++++++++++++---- .../src/diagrams/class/classDiagram.spec.ts | 8 ++++---- .../src/diagrams/class/classRenderer-v2.ts | 6 +++--- .../src/diagrams/class/classRenderer.js | 2 +- .../mermaid/src/diagrams/class/classTypes.ts | 3 +++ 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/packages/mermaid/src/diagrams/class/classDb.ts b/packages/mermaid/src/diagrams/class/classDb.ts index a59c1eada..490671e76 100644 --- a/packages/mermaid/src/diagrams/class/classDb.ts +++ b/packages/mermaid/src/diagrams/class/classDb.ts @@ -27,7 +27,7 @@ const MERMAID_DOM_ID_PREFIX = 'classId-'; let relations: ClassRelation[] = []; let classes = new Map(); -let notes: ClassNote[] = []; +let notes = new Map(); let classCounter = 0; let namespaces = new Map(); let namespaceCounter = 0; @@ -108,7 +108,7 @@ export const lookUpDomId = function (_id: string): string { export const clear = function () { relations = []; classes = new Map(); - notes = []; + notes = new Map(); functions = []; functions.push(setupToolTips); namespaces = new Map(); @@ -129,6 +129,11 @@ export const getRelations = function (): ClassRelation[] { return relations; }; +export const getNote = function (id: string | number) { + const key = typeof id === 'number' ? `note${id}` : id; + return notes.get(key)!; +} + export const getNotes = function () { return notes; }; @@ -200,12 +205,15 @@ export const addMembers = function (className: string, members: string[]) { }; export const addNote = function (text: string, className: string) { + const index = notes.size; const note = { - id: `note${notes.length}`, + id: `note${index}`, class: className, text: text, + index: index, }; - notes.push(note); + notes.set(note.id, note); + return note.id; }; export const cleanupLabel = function (label: string) { @@ -427,6 +435,7 @@ export const addNamespace = function (id: string) { namespaces.set(id, { id: id, classes: new Map(), + notes: new Map(), children: {}, domId: MERMAID_DOM_ID_PREFIX + id + '-' + namespaceCounter, } as NamespaceNode); @@ -485,6 +494,7 @@ export default { clear, getClass, getClasses, + getNote, getNotes, addAnnotation, addNote, diff --git a/packages/mermaid/src/diagrams/class/classDiagram.spec.ts b/packages/mermaid/src/diagrams/class/classDiagram.spec.ts index 9804b325e..7153ff8ca 100644 --- a/packages/mermaid/src/diagrams/class/classDiagram.spec.ts +++ b/packages/mermaid/src/diagrams/class/classDiagram.spec.ts @@ -327,7 +327,7 @@ class C13["With Città foreign language"] note "This is a keyword: ${keyword}. It truly is." `; parser.parse(str); - expect(classDb.getNotes()[0].text).toEqual(`This is a keyword: ${keyword}. It truly is.`); + expect(classDb.getNote(0).text).toEqual(`This is a keyword: ${keyword}. It truly is.`); }); it.each(keywords)( @@ -337,7 +337,7 @@ class C13["With Città foreign language"] note "${keyword}"`; parser.parse(str); - expect(classDb.getNotes()[0].text).toEqual(`${keyword}`); + expect(classDb.getNote(0).text).toEqual(`${keyword}`); } ); @@ -351,7 +351,7 @@ class C13["With Città foreign language"] `; parser.parse(str); - expect(classDb.getNotes()[0].text).toEqual(`This is a keyword: ${keyword}. It truly is.`); + expect(classDb.getNote(0).text).toEqual(`This is a keyword: ${keyword}. It truly is.`); }); it.each(keywords)( @@ -366,7 +366,7 @@ class C13["With Città foreign language"] `; parser.parse(str); - expect(classDb.getNotes()[0].text).toEqual(`${keyword}`); + expect(classDb.getNote(0).text).toEqual(`${keyword}`); } ); diff --git a/packages/mermaid/src/diagrams/class/classRenderer-v2.ts b/packages/mermaid/src/diagrams/class/classRenderer-v2.ts index 0f02efa0d..f27a144ef 100644 --- a/packages/mermaid/src/diagrams/class/classRenderer-v2.ts +++ b/packages/mermaid/src/diagrams/class/classRenderer-v2.ts @@ -8,7 +8,7 @@ import utils, { getEdgeId } from '../../utils.js'; import { interpolateToCurve, getStylesFromArray } from '../../utils.js'; import { setupGraphViewbox } from '../../setupGraphViewbox.js'; import common from '../common/common.js'; -import type { ClassRelation, ClassNote, ClassMap, NamespaceMap } from './classTypes.js'; +import type { ClassRelation, ClassMap, ClassNoteMap, NamespaceMap } from './classTypes.js'; import type { EdgeData } from '../../types.js'; const sanitizeText = (txt: string) => common.sanitizeText(txt, getConfig()); @@ -144,7 +144,7 @@ export const addClasses = function ( * @param classes - Classes */ export const addNotes = function ( - notes: ClassNote[], + notes: ClassNoteMap, g: graphlib.Graph, startEdgeId: number, classes: ClassMap @@ -329,7 +329,7 @@ export const draw = async function (text: string, id: string, _version: string, const namespaces: NamespaceMap = diagObj.db.getNamespaces(); const classes: ClassMap = diagObj.db.getClasses(); const relations: ClassRelation[] = diagObj.db.getRelations(); - const notes: ClassNote[] = diagObj.db.getNotes(); + const notes: ClassNoteMap = diagObj.db.getNotes(); log.info(relations); addNamespaces(namespaces, g, id, diagObj); addClasses(classes, g, id, diagObj); diff --git a/packages/mermaid/src/diagrams/class/classRenderer.js b/packages/mermaid/src/diagrams/class/classRenderer.js index 27e525537..a16eee5d4 100644 --- a/packages/mermaid/src/diagrams/class/classRenderer.js +++ b/packages/mermaid/src/diagrams/class/classRenderer.js @@ -206,7 +206,7 @@ export const draw = function (text, id, _version, diagObj) { ); }); - const notes = diagObj.db.getNotes(); + const notes = diagObj.db.getNotes().values(); notes.forEach(function (note) { log.debug(`Adding note: ${JSON.stringify(note)}`); const node = svgDraw.drawNote(diagram, note, conf, diagObj); diff --git a/packages/mermaid/src/diagrams/class/classTypes.ts b/packages/mermaid/src/diagrams/class/classTypes.ts index f1955a224..563c6ec4b 100644 --- a/packages/mermaid/src/diagrams/class/classTypes.ts +++ b/packages/mermaid/src/diagrams/class/classTypes.ts @@ -136,6 +136,7 @@ export interface ClassNote { id: string; class: string; text: string; + index: number; } export interface ClassRelation { @@ -158,8 +159,10 @@ export interface NamespaceNode { id: string; domId: string; classes: ClassMap; + notes: ClassNoteMap; children: NamespaceMap; } export type ClassMap = Map; +export type ClassNoteMap = Map; export type NamespaceMap = Map;