collab/mermaid/docs/diagrams/flowchart-code-flow.mmdblame
View source
6dd74de1---
6dd74de2references:
6dd74de3 - "File: /packages/mermaid/src/diagrams/flowchart/flowDiagram.ts"
6dd74de4 - "File: /packages/mermaid/src/diagrams/flowchart/flowDb.ts"
6dd74de5 - "File: /packages/mermaid/src/diagrams/flowchart/flowDetector.ts"
6dd74de6 - "File: /packages/mermaid/src/diagrams/flowchart/flowDetector-v2.ts"
6dd74de7 - "File: /packages/mermaid/src/diagrams/flowchart/flowRenderer-v3-unified.ts"
6dd74de8 - "File: /packages/mermaid/src/diagrams/flowchart/styles.ts"
6dd74de9 - "File: /packages/mermaid/src/diagrams/flowchart/types.ts"
6dd74de10 - "File: /packages/mermaid/src/diagrams/flowchart/flowChartShapes.js"
6dd74de11 - "File: /packages/mermaid/src/diagrams/flowchart/parser/flowParser.ts"
6dd74de12 - "File: /packages/mermaid/src/diagrams/flowchart/elk/detector.ts"
6dd74de13generationTime: 2025-07-23T10:31:53.266Z
6dd74de14---
6dd74de15flowchart TD
6dd74de16 %% Entry Points and Detection
6dd74de17 Input["User Input Text"] --> Detection{Detection Phase}
6dd74de18
6dd74de19 Detection --> flowDetector["flowDetector.ts<br/>detector(txt, config)"]
6dd74de20 Detection --> flowDetectorV2["flowDetector-v2.ts<br/>detector(txt, config)"]
6dd74de21 Detection --> elkDetector["elk/detector.ts<br/>detector(txt, config)"]
6dd74de22
6dd74de23 flowDetector --> |"Checks /^\s*graph/"| DetectLegacy{Legacy Flowchart?}
6dd74de24 flowDetectorV2 --> |"Checks /^\s*flowchart/"| DetectNew{New Flowchart?}
6dd74de25 elkDetector --> |"Checks /^\s*flowchart-elk/"| DetectElk{ELK Layout?}
6dd74de26
6dd74de27 DetectLegacy --> |Yes| LoadDiagram
6dd74de28 DetectNew --> |Yes| LoadDiagram
6dd74de29 DetectElk --> |Yes| LoadDiagram
6dd74de30
6dd74de31 %% Loading Phase
6dd74de32 LoadDiagram["loader() function"] --> flowDiagram["flowDiagram.ts<br/>diagram object"]
6dd74de33
6dd74de34 flowDiagram --> DiagramStructure{Diagram Components}
6dd74de35 DiagramStructure --> Parser["parser: flowParser"]
6dd74de36 DiagramStructure --> Database["db: new FlowDB()"]
6dd74de37 DiagramStructure --> Renderer["renderer: flowRenderer-v3-unified"]
6dd74de38 DiagramStructure --> Styles["styles: flowStyles"]
6dd74de39 DiagramStructure --> Init["init: (cnf: MermaidConfig)"]
6dd74de40
6dd74de41 %% Parser Phase
6dd74de42 Parser --> flowParser["parser/flowParser.ts<br/>newParser.parse(src)"]
6dd74de43 flowParser --> |"Preprocesses src"| RemoveWhitespace["Remove trailing whitespace<br/>src.replace(/}\s*\n/g, '}\n')"]
6dd74de44 RemoveWhitespace --> flowJison["parser/flow.jison<br/>flowJisonParser.parse(newSrc)"]
6dd74de45
6dd74de46 flowJison --> ParseGraph["Parse Graph Structure"]
6dd74de47 ParseGraph --> ParseVertices["Parse Vertices"]
6dd74de48 ParseGraph --> ParseEdges["Parse Edges"]
6dd74de49 ParseGraph --> ParseSubgraphs["Parse Subgraphs"]
6dd74de50 ParseGraph --> ParseClasses["Parse Classes"]
6dd74de51 ParseGraph --> ParseStyles["Parse Styles"]
6dd74de52
6dd74de53 %% Database Phase - FlowDB Class
6dd74de54 Database --> FlowDBClass["flowDb.ts<br/>FlowDB class"]
6dd74de55
6dd74de56 FlowDBClass --> DBInit["constructor()<br/>- Initialize counters<br/>- Bind methods<br/>- Setup toolTips<br/>- Call clear()"]
6dd74de57
6dd74de58 DBInit --> DBMethods{FlowDB Methods}
6dd74de59
6dd74de60 DBMethods --> addVertex["addVertex(id, textObj, type, style,<br/>classes, dir, props, metadata)"]
6dd74de61 DBMethods --> addLink["addLink(_start[], _end[], linkData)"]
6dd74de62 DBMethods --> addSingleLink["addSingleLink(_start, _end, type, id)"]
6dd74de63 DBMethods --> setDirection["setDirection(dir)"]
6dd74de64 DBMethods --> addSubGraph["addSubGraph(nodes[], id, title)"]
6dd74de65 DBMethods --> addClass["addClass(id, style)"]
6dd74de66 DBMethods --> setClass["setClass(ids, className)"]
6dd74de67 DBMethods --> setTooltip["setTooltip(ids, tooltip)"]
6dd74de68 DBMethods --> setClickEvent["setClickEvent(id, functionName, args)"]
6dd74de69 DBMethods --> setClickFun["setClickFun(id, functionName, args)"]
6dd74de70
6dd74de71 %% Vertex Processing
6dd74de72 addVertex --> VertexProcess{Vertex Processing}
6dd74de73 VertexProcess --> CreateVertex["Create FlowVertex object<br/>- id, labelType, domId<br/>- styles[], classes[]"]
6dd74de74 VertexProcess --> SanitizeText["sanitizeText(textObj.text)"]
6dd74de75 VertexProcess --> ParseMetadata["Parse YAML metadata<br/>yaml.load(yamlData)"]
6dd74de76 VertexProcess --> SetVertexProps["Set vertex properties<br/>- shape, label, icon, form<br/>- pos, img, constraint, w, h"]
6dd74de77
6dd74de78 %% Edge Processing
6dd74de79 addSingleLink --> EdgeProcess{Edge Processing}
6dd74de80 EdgeProcess --> CreateEdge["Create FlowEdge object<br/>- start, end, type, text<br/>- labelType, classes[]"]
6dd74de81 EdgeProcess --> ProcessLinkText["Process link text<br/>- sanitizeText()<br/>- strip quotes"]
6dd74de82 EdgeProcess --> SetEdgeProps["Set edge properties<br/>- type, stroke, length"]
6dd74de83 EdgeProcess --> GenerateEdgeId["Generate edge ID<br/>getEdgeId(start, end, counter)"]
6dd74de84 EdgeProcess --> ValidateEdgeLimit["Validate edge limit<br/>maxEdges check"]
6dd74de85
6dd74de86 %% Data Collection
6dd74de87 DBMethods --> GetData["getData()"]
6dd74de88 GetData --> CollectNodes["Collect nodes[] from vertices"]
6dd74de89 GetData --> CollectEdges["Collect edges[] from edges"]
6dd74de90 GetData --> ProcessSubGraphs["Process subgraphs<br/>- parentDB Map<br/>- subGraphDB Map"]
6dd74de91 GetData --> AddNodeFromVertex["addNodeFromVertex()<br/>for each vertex"]
6dd74de92 GetData --> ProcessEdgeTypes["destructEdgeType()<br/>arrowTypeStart, arrowTypeEnd"]
6dd74de93
6dd74de94 %% Node Creation
6dd74de95 AddNodeFromVertex --> NodeCreation{Node Creation}
6dd74de96 NodeCreation --> FindExistingNode["findNode(nodes, vertex.id)"]
6dd74de97 NodeCreation --> CreateBaseNode["Create base node<br/>- id, label, parentId<br/>- cssStyles, cssClasses<br/>- shape, domId, tooltip"]
6dd74de98 NodeCreation --> GetCompiledStyles["getCompiledStyles(classDefs)"]
6dd74de99 NodeCreation --> GetTypeFromVertex["getTypeFromVertex(vertex)"]
6dd74de100
6dd74de101 %% Rendering Phase
6dd74de102 Renderer --> flowRendererV3["flowRenderer-v3-unified.ts<br/>draw(text, id, version, diag)"]
6dd74de103
6dd74de104 flowRendererV3 --> RenderInit["Initialize rendering<br/>- getConfig()<br/>- handle securityLevel<br/>- getDiagramElement()"]
6dd74de105
6dd74de106 RenderInit --> GetLayoutData["diag.db.getData()<br/>as LayoutData"]
6dd74de107 GetLayoutData --> SetupLayoutData["Setup layout data<br/>- type, layoutAlgorithm<br/>- direction, spacing<br/>- markers, diagramId"]
6dd74de108
6dd74de109 SetupLayoutData --> CallRender["render(data4Layout, svg)"]
6dd74de110 CallRender --> SetupViewPort["setupViewPortForSVG(svg, padding)"]
6dd74de111 SetupViewPort --> ProcessLinks["Process vertex links<br/>- create anchor elements<br/>- handle click events"]
6dd74de112
6dd74de113 %% Shape Rendering
6dd74de114 CallRender --> ShapeSystem["flowChartShapes.js<br/>Shape Functions"]
6dd74de115
6dd74de116 ShapeSystem --> ShapeFunctions{Shape Functions}
6dd74de117 ShapeFunctions --> question["question(parent, bbox, node)"]
6dd74de118 ShapeFunctions --> hexagon["hexagon(parent, bbox, node)"]
6dd74de119 ShapeFunctions --> rect_left_inv_arrow["rect_left_inv_arrow(parent, bbox, node)"]
6dd74de120 ShapeFunctions --> lean_right["lean_right(parent, bbox, node)"]
6dd74de121 ShapeFunctions --> lean_left["lean_left(parent, bbox, node)"]
6dd74de122
6dd74de123 ShapeFunctions --> insertPolygonShape["insertPolygonShape(parent, w, h, points)"]
6dd74de124 ShapeFunctions --> intersectPolygon["intersectPolygon(node, points, point)"]
6dd74de125 ShapeFunctions --> intersectRect["intersectRect(node, point)"]
6dd74de126
6dd74de127 %% Styling System
6dd74de128 Styles --> stylesTS["styles.ts<br/>getStyles(options)"]
6dd74de129 stylesTS --> StyleOptions["FlowChartStyleOptions<br/>- arrowheadColor, border2<br/>- clusterBkg, mainBkg<br/>- fontFamily, textColor"]
6dd74de130
6dd74de131 StyleOptions --> GenerateCSS["Generate CSS styles<br/>- .label, .cluster-label<br/>- .node, .edgePath<br/>- .flowchart-link, .edgeLabel"]
6dd74de132 GenerateCSS --> GetIconStyles["getIconStyles()"]
6dd74de133
6dd74de134 %% Type System
6dd74de135 Parser --> TypeSystem["types.ts<br/>Type Definitions"]
6dd74de136 TypeSystem --> FlowVertex["FlowVertex interface"]
6dd74de137 TypeSystem --> FlowEdge["FlowEdge interface"]
6dd74de138 TypeSystem --> FlowClass["FlowClass interface"]
6dd74de139 TypeSystem --> FlowSubGraph["FlowSubGraph interface"]
6dd74de140 TypeSystem --> FlowVertexTypeParam["FlowVertexTypeParam<br/>Shape types"]
6dd74de141
6dd74de142 %% Utility Functions
6dd74de143 DBMethods --> UtilityFunctions{Utility Functions}
6dd74de144 UtilityFunctions --> lookUpDomId["lookUpDomId(id)"]
6dd74de145 UtilityFunctions --> getClasses["getClasses()"]
6dd74de146 UtilityFunctions --> getDirection["getDirection()"]
6dd74de147 UtilityFunctions --> getVertices["getVertices()"]
6dd74de148 UtilityFunctions --> getEdges["getEdges()"]
6dd74de149 UtilityFunctions --> getSubGraphs["getSubGraphs()"]
6dd74de150 UtilityFunctions --> clear["clear()"]
6dd74de151 UtilityFunctions --> defaultConfig["defaultConfig()"]
6dd74de152
6dd74de153 %% Event Handling
6dd74de154 ProcessLinks --> EventHandling{Event Handling}
6dd74de155 EventHandling --> setupToolTips["setupToolTips(element)"]
6dd74de156 EventHandling --> bindFunctions["bindFunctions(element)"]
6dd74de157 EventHandling --> runFunc["utils.runFunc(functionName, args)"]
6dd74de158
6dd74de159 %% Common Database Functions
6dd74de160 DBMethods --> CommonDB["commonDb.js functions"]
6dd74de161 CommonDB --> setAccTitle["setAccTitle()"]
6dd74de162 CommonDB --> getAccTitle["getAccTitle()"]
6dd74de163 CommonDB --> setAccDescription["setAccDescription()"]
6dd74de164 CommonDB --> getAccDescription["getAccDescription()"]
6dd74de165 CommonDB --> setDiagramTitle["setDiagramTitle()"]
6dd74de166 CommonDB --> getDiagramTitle["getDiagramTitle()"]
6dd74de167 CommonDB --> commonClear["clear()"]
6dd74de168
6dd74de169 %% Final Output
6dd74de170 ProcessLinks --> FinalSVG["Final SVG Output"]
6dd74de171
6dd74de172 %% Layout Algorithm Selection
6dd74de173 SetupLayoutData --> LayoutAlgorithm{Layout Algorithm}
6dd74de174 LayoutAlgorithm --> Dagre["dagre<br/>(default)"]
6dd74de175 LayoutAlgorithm --> DagreWrapper["dagre-wrapper<br/>(v2 renderer)"]
6dd74de176 LayoutAlgorithm --> ELK["elk<br/>(external package)"]
6dd74de177
6dd74de178 %% Testing Components
6dd74de179 FlowDBClass --> TestFiles["Test Files"]
6dd74de180 TestFiles --> flowDbSpec["flowDb.spec.ts"]
6dd74de181 TestFiles --> flowChartShapesSpec["flowChartShapes.spec.js"]
6dd74de182 TestFiles --> ParserTests["parser/*.spec.js files<br/>- flow-text.spec.js<br/>- flow-edges.spec.js<br/>- flow-style.spec.js<br/>- subgraph.spec.js"]
6dd74de183
6dd74de184 %% Configuration
6dd74de185 Init --> ConfigSetup["Configuration Setup"]
6dd74de186 ConfigSetup --> FlowchartConfig["cnf.flowchart config"]
6dd74de187 ConfigSetup --> ArrowMarkers["arrowMarkerAbsolute"]
6dd74de188 ConfigSetup --> LayoutConfig["layout config"]
6dd74de189 ConfigSetup --> SetConfig["setConfig() calls"]