Implement database for namespace data

This commit is contained in:
Kazuki Tsunemi 2023-03-10 19:37:54 +09:00
parent 4017bb3c49
commit 75502d076e
3 changed files with 67 additions and 7 deletions

View File

@ -14,7 +14,14 @@ import {
setDiagramTitle, setDiagramTitle,
getDiagramTitle, getDiagramTitle,
} from '../../commonDb'; } from '../../commonDb';
import { ClassRelation, ClassNode, ClassNote, ClassMap } from './classTypes'; import {
ClassRelation,
ClassNode,
ClassNote,
ClassMap,
NamespaceMap,
NamespaceNode,
} from './classTypes';
const MERMAID_DOM_ID_PREFIX = 'classId-'; const MERMAID_DOM_ID_PREFIX = 'classId-';
@ -22,6 +29,8 @@ let relations: ClassRelation[] = [];
let classes: ClassMap = {}; let classes: ClassMap = {};
let notes: ClassNote[] = []; let notes: ClassNote[] = [];
let classCounter = 0; let classCounter = 0;
let namespaces: NamespaceMap = {};
let namespaceCounter = 0;
let functions: any[] = []; let functions: any[] = [];
@ -100,6 +109,8 @@ export const clear = function () {
notes = []; notes = [];
functions = []; functions = [];
functions.push(setupToolTips); functions.push(setupToolTips);
namespaces = {};
namespaceCounter = 0;
commonClear(); commonClear();
}; };
@ -393,14 +404,28 @@ const setDirection = (dir: string) => {
}; };
/** /**
* Function called by parser when a namespace keyword has been found. * Function called by parser when a namespace definition has been found.
* *
* @param id - Id of the namespace to add * @param id - Id of the namespace to add
* @public * @public
*/ */
// eslint-disable-next-line @typescript-eslint/no-unused-vars export const addNamespace = function (name: string) {
export const addNamespace = function (id: string) { namespaces[name] = {
// TODO: Implement here id: name,
domId: MERMAID_DOM_ID_PREFIX + name + '-' + namespaceCounter,
classes: {},
children: {},
};
namespaceCounter++;
};
const getNamespace = function (name: string): NamespaceNode {
return namespaces[name];
};
const getNamespaces = function (): NamespaceMap {
return namespaces;
}; };
/** /**
@ -410,9 +435,14 @@ export const addNamespace = function (id: string) {
* @param classNames - Ids of the class to add * @param classNames - Ids of the class to add
* @public * @public
*/ */
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export const addClassesToNamespace = function (id: string, classNames: string[]) { export const addClassesToNamespace = function (id: string, classNames: string[]) {
// TODO: Implement here if (namespaces[id] !== undefined) {
classNames.map((className) => {
namespaces[id].classes[className] = classes[className];
delete classes[className];
classCounter--;
});
}
}; };
export default { export default {
@ -450,4 +480,6 @@ export default {
setClassLabel, setClassLabel,
addNamespace, addNamespace,
addClassesToNamespace, addClassesToNamespace,
getNamespace,
getNamespaces,
}; };

View File

@ -1008,6 +1008,25 @@ foo()
expect(classDb.setClickEvent).toHaveBeenCalledWith('Class1', 'functionCall'); expect(classDb.setClickEvent).toHaveBeenCalledWith('Class1', 'functionCall');
expect(classDb.setTooltip).toHaveBeenCalledWith('Class1', 'A tooltip'); expect(classDb.setTooltip).toHaveBeenCalledWith('Class1', 'A tooltip');
}); });
it('should add classes namespaces', function () {
const str = `classDiagram
namespace Namespace1 {
class Class1 {
int : test
string : foo
test()
foo()
}
class Class2
}`;
parser.parse(str);
const testNamespace = parser.yy.getNamespace('Namespace1');
expect(Object.keys(testNamespace.classes).length).toBe(2);
expect(Object.keys(testNamespace.children).length).toBe(0);
expect(testNamespace.classes['Class1'].id).toBe('Class1');
});
}); });
describe('when parsing classDiagram with text labels', () => { describe('when parsing classDiagram with text labels', () => {

View File

@ -52,4 +52,13 @@ export type ClassRelation = {
lineType: number; lineType: number;
}; };
}; };
export interface NamespaceNode {
id: string;
domId: string;
classes: ClassMap;
children: NamespaceMap;
}
export type ClassMap = Record<string, ClassNode>; export type ClassMap = Record<string, ClassNode>;
export type NamespaceMap = Record<string, NamespaceNode>;