mermaid-ast 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +194 -7
  2. package/dist/builder/class-builder.d.ts +148 -0
  3. package/dist/builder/class-builder.d.ts.map +1 -0
  4. package/dist/builder/class-builder.js +318 -0
  5. package/dist/builder/flowchart-builder.d.ts +123 -0
  6. package/dist/builder/flowchart-builder.d.ts.map +1 -0
  7. package/dist/builder/flowchart-builder.js +257 -0
  8. package/dist/builder/index.d.ts +10 -0
  9. package/dist/builder/index.d.ts.map +1 -0
  10. package/dist/builder/index.js +9 -0
  11. package/dist/builder/sequence-builder.d.ts +174 -0
  12. package/dist/builder/sequence-builder.d.ts.map +1 -0
  13. package/dist/builder/sequence-builder.js +443 -0
  14. package/dist/builder/state-builder.d.ts +156 -0
  15. package/dist/builder/state-builder.d.ts.map +1 -0
  16. package/dist/builder/state-builder.js +314 -0
  17. package/dist/index.d.ts +4 -3
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +6 -4
  20. package/dist/parser/class-parser.d.ts +1 -1
  21. package/dist/parser/class-parser.d.ts.map +1 -1
  22. package/dist/parser/class-parser.js +36 -32
  23. package/dist/parser/flowchart-parser.d.ts +1 -1
  24. package/dist/parser/flowchart-parser.d.ts.map +1 -1
  25. package/dist/parser/flowchart-parser.js +51 -53
  26. package/dist/parser/index.d.ts +4 -4
  27. package/dist/parser/index.d.ts.map +1 -1
  28. package/dist/parser/index.js +13 -13
  29. package/dist/parser/sequence-parser.d.ts +1 -1
  30. package/dist/parser/sequence-parser.d.ts.map +1 -1
  31. package/dist/parser/sequence-parser.js +88 -82
  32. package/dist/parser/state-parser.d.ts +1 -1
  33. package/dist/parser/state-parser.d.ts.map +1 -1
  34. package/dist/parser/state-parser.js +35 -36
  35. package/dist/renderer/class-renderer.d.ts +3 -2
  36. package/dist/renderer/class-renderer.d.ts.map +1 -1
  37. package/dist/renderer/class-renderer.js +101 -140
  38. package/dist/renderer/doc.d.ts +318 -0
  39. package/dist/renderer/doc.d.ts.map +1 -0
  40. package/dist/renderer/doc.js +300 -0
  41. package/dist/renderer/flowchart-renderer.d.ts +3 -2
  42. package/dist/renderer/flowchart-renderer.d.ts.map +1 -1
  43. package/dist/renderer/flowchart-renderer.js +275 -131
  44. package/dist/renderer/index.d.ts +5 -5
  45. package/dist/renderer/index.d.ts.map +1 -1
  46. package/dist/renderer/index.js +11 -11
  47. package/dist/renderer/sequence-renderer.d.ts +3 -6
  48. package/dist/renderer/sequence-renderer.d.ts.map +1 -1
  49. package/dist/renderer/sequence-renderer.js +147 -171
  50. package/dist/renderer/state-renderer.d.ts +3 -2
  51. package/dist/renderer/state-renderer.d.ts.map +1 -1
  52. package/dist/renderer/state-renderer.js +81 -100
  53. package/dist/types/class.d.ts +6 -6
  54. package/dist/types/class.js +2 -2
  55. package/dist/types/flowchart.d.ts +8 -8
  56. package/dist/types/flowchart.js +2 -2
  57. package/dist/types/index.d.ts +8 -7
  58. package/dist/types/index.d.ts.map +1 -1
  59. package/dist/types/index.js +7 -6
  60. package/dist/types/render-options.d.ts +57 -0
  61. package/dist/types/render-options.d.ts.map +1 -0
  62. package/dist/types/render-options.js +37 -0
  63. package/dist/types/sequence.d.ts +20 -20
  64. package/dist/types/sequence.js +1 -1
  65. package/dist/types/state.d.ts +12 -12
  66. package/dist/types/state.js +2 -2
  67. package/dist/utils.d.ts +29 -0
  68. package/dist/utils.d.ts.map +1 -0
  69. package/dist/utils.js +30 -0
  70. package/dist/vendored/LICENSE +21 -0
  71. package/package.json +11 -3
package/README.md CHANGED
@@ -17,9 +17,25 @@ This library provides a way to programmatically work with Mermaid diagrams by pa
17
17
 
18
18
  ## Supported Diagram Types
19
19
 
20
- - **Flowchart** (`flowchart`, `graph`)
21
- - **Sequence Diagram** (`sequenceDiagram`)
22
- - **Class Diagram** (`classDiagram`)
20
+ | Diagram Type | Parse | Render | Builder |
21
+ |--------------|-------|--------|---------|
22
+ | Flowchart (`flowchart`, `graph`) | ✅ | ✅ | ✅ |
23
+ | Sequence (`sequenceDiagram`) | ✅ | ✅ | ✅ |
24
+ | Class (`classDiagram`) | ✅ | ✅ | ✅ |
25
+ | State (`stateDiagram`) | ✅ | ✅ | ✅ |
26
+ | ER Diagram (`erDiagram`) | ❌ | ❌ | ❌ |
27
+ | Gantt (`gantt`) | ❌ | ❌ | ❌ |
28
+ | Journey (`journey`) | ❌ | ❌ | ❌ |
29
+ | Mindmap (`mindmap`) | ❌ | ❌ | ❌ |
30
+ | Timeline (`timeline`) | ❌ | ❌ | ❌ |
31
+ | Pie (`pie`) | ❌ | ❌ | ❌ |
32
+ | Quadrant (`quadrantChart`) | ❌ | ❌ | ❌ |
33
+ | Requirement (`requirementDiagram`) | ❌ | ❌ | ❌ |
34
+ | Git Graph (`gitGraph`) | ❌ | ❌ | ❌ |
35
+ | C4 (`C4Context`, etc.) | ❌ | ❌ | ❌ |
36
+ | Sankey (`sankey`) | ❌ | ❌ | ❌ |
37
+ | XY Chart (`xychart`) | ❌ | ❌ | ❌ |
38
+ | Block (`block`) | ❌ | ❌ | ❌ |
23
39
 
24
40
  ## Installation
25
41
 
@@ -131,6 +147,156 @@ detectDiagramType("classDiagram\n class Animal"); // "class"
131
147
  detectDiagramType("unknown diagram"); // null
132
148
  ```
133
149
 
150
+ ## Fluent Builder API
151
+
152
+ Build diagrams programmatically with a chainable, type-safe API:
153
+
154
+ ### Flowchart Builder
155
+
156
+ ```typescript
157
+ import { flowchart, render } from "mermaid-ast";
158
+
159
+ const ast = flowchart("LR")
160
+ .node("A", "Start", { shape: "stadium" })
161
+ .node("B", "Process")
162
+ .node("C", "End", { shape: "circle" })
163
+ .link("A", "B", { text: "begin" })
164
+ .link("B", "C", { stroke: "dotted" })
165
+ .subgraph("sub1", "My Group", (s) => {
166
+ s.node("D", "Inner").link("D", "B");
167
+ })
168
+ .classDef("highlight", { fill: "#f9f" })
169
+ .class("A", "highlight")
170
+ .build();
171
+
172
+ const text = render(ast);
173
+ ```
174
+
175
+ ### Sequence Builder
176
+
177
+ ```typescript
178
+ import { sequence, render } from "mermaid-ast";
179
+
180
+ const ast = sequence()
181
+ .participant("A", "Alice")
182
+ .actor("B", "Bob")
183
+ .message("A", "B", "Hello!", { arrow: "solid" })
184
+ .loop("Every minute", (l) => {
185
+ l.message("B", "A", "Ping");
186
+ })
187
+ .alt([
188
+ { condition: "Success", build: (b) => b.message("A", "B", "OK") },
189
+ { condition: "Failure", build: (b) => b.message("A", "B", "Error") },
190
+ ])
191
+ .note("A", "Important!", { placement: "right_of" })
192
+ .build();
193
+
194
+ const text = render(ast);
195
+ ```
196
+
197
+ ### Class Diagram Builder
198
+
199
+ ```typescript
200
+ import { classDiagram, render } from "mermaid-ast";
201
+
202
+ const ast = classDiagram()
203
+ .class("Animal", (c) => {
204
+ c.property("name: string", "+")
205
+ .property("age: int", "-")
206
+ .method("speak()", "+");
207
+ })
208
+ .class("Dog")
209
+ .extends("Dog", "Animal")
210
+ .composition("Dog", "Tail")
211
+ .class("Tail")
212
+ .build();
213
+
214
+ const text = render(ast);
215
+ ```
216
+
217
+ ### State Diagram Builder
218
+
219
+ ```typescript
220
+ import { stateDiagram, render } from "mermaid-ast";
221
+
222
+ const ast = stateDiagram()
223
+ .state("Idle", { description: "Waiting for input" })
224
+ .state("Running")
225
+ .state("Done")
226
+ .initial("Idle")
227
+ .transition("Idle", "Running", { label: "start" })
228
+ .transition("Running", "Done", { label: "complete" })
229
+ .final("Done")
230
+ .composite("Running", (c) => {
231
+ c.state("Step1").state("Step2").transition("Step1", "Step2");
232
+ })
233
+ .build();
234
+
235
+ const text = render(ast);
236
+ ```
237
+
238
+ ### Builder Validation
239
+
240
+ By default, `.build()` validates the diagram (e.g., ensures links reference existing nodes):
241
+
242
+ ```typescript
243
+ // This throws FlowchartValidationError
244
+ flowchart().node("A").link("A", "B").build();
245
+ // Error: Link target node 'B' does not exist
246
+
247
+ // Skip validation if needed
248
+ flowchart().node("A").link("A", "B").build({ validate: false });
249
+ ```
250
+
251
+ ### Render Options (Pretty-Print)
252
+
253
+ All render functions accept an optional `RenderOptions` object to customize output formatting:
254
+
255
+ ```typescript
256
+ import { renderFlowchart, parseFlowchart } from "mermaid-ast";
257
+ import type { RenderOptions } from "mermaid-ast";
258
+
259
+ const ast = parseFlowchart(`flowchart LR
260
+ A[Start] --> B[Middle] --> C[End]
261
+ classDef highlight fill:#f9f
262
+ class A highlight`);
263
+
264
+ // Default output (4-space indent)
265
+ renderFlowchart(ast);
266
+
267
+ // Custom indent (2 spaces)
268
+ renderFlowchart(ast, { indent: 2 });
269
+
270
+ // Tab indent
271
+ renderFlowchart(ast, { indent: "tab" });
272
+
273
+ // Sort nodes alphabetically
274
+ renderFlowchart(ast, { sortNodes: true });
275
+
276
+ // Flowchart-specific: inline classes (A:::highlight instead of separate class statement)
277
+ renderFlowchart(ast, { inlineClasses: true });
278
+
279
+ // Flowchart-specific: chain links (A --> B --> C on one line)
280
+ renderFlowchart(ast, { compactLinks: true });
281
+
282
+ // Combine options
283
+ renderFlowchart(ast, {
284
+ indent: 2,
285
+ sortNodes: true,
286
+ inlineClasses: true,
287
+ compactLinks: true,
288
+ });
289
+ ```
290
+
291
+ #### Available Options
292
+
293
+ | Option | Type | Default | Description |
294
+ |--------|------|---------|-------------|
295
+ | `indent` | `number \| "tab"` | `4` | Number of spaces for indentation, or `"tab"` for tabs |
296
+ | `sortNodes` | `boolean` | `false` | Sort node/actor/class declarations alphabetically |
297
+ | `inlineClasses` | `boolean` | `false` | (Flowchart only) Use `A:::className` instead of separate `class` statements |
298
+ | `compactLinks` | `boolean` | `false` | (Flowchart only) Chain consecutive links: `A --> B --> C` |
299
+
134
300
  ## API Reference
135
301
 
136
302
  ### Core Functions
@@ -138,7 +304,7 @@ detectDiagramType("unknown diagram"); // null
138
304
  | Function | Description |
139
305
  |----------|-------------|
140
306
  | `parse(input: string): MermaidAST` | Parse any supported diagram |
141
- | `render(ast: MermaidAST): string` | Render any supported AST |
307
+ | `render(ast: MermaidAST, options?: RenderOptions): string` | Render any supported AST |
142
308
  | `detectDiagramType(input: string): DiagramType \| null` | Detect diagram type |
143
309
 
144
310
  ### Flowchart Functions
@@ -146,7 +312,7 @@ detectDiagramType("unknown diagram"); // null
146
312
  | Function | Description |
147
313
  |----------|-------------|
148
314
  | `parseFlowchart(input: string): FlowchartAST` | Parse flowchart diagram |
149
- | `renderFlowchart(ast: FlowchartAST): string` | Render flowchart AST |
315
+ | `renderFlowchart(ast: FlowchartAST, options?: RenderOptions): string` | Render flowchart AST |
150
316
  | `isFlowchartDiagram(input: string): boolean` | Check if input is flowchart |
151
317
 
152
318
  ### Sequence Diagram Functions
@@ -154,7 +320,7 @@ detectDiagramType("unknown diagram"); // null
154
320
  | Function | Description |
155
321
  |----------|-------------|
156
322
  | `parseSequence(input: string): SequenceAST` | Parse sequence diagram |
157
- | `renderSequence(ast: SequenceAST): string` | Render sequence AST |
323
+ | `renderSequence(ast: SequenceAST, options?: RenderOptions): string` | Render sequence AST |
158
324
  | `isSequenceDiagram(input: string): boolean` | Check if input is sequence |
159
325
 
160
326
  ### Class Diagram Functions
@@ -162,7 +328,7 @@ detectDiagramType("unknown diagram"); // null
162
328
  | Function | Description |
163
329
  |----------|-------------|
164
330
  | `parseClassDiagram(input: string): ClassDiagramAST` | Parse class diagram |
165
- | `renderClassDiagram(ast: ClassDiagramAST): string` | Render class diagram AST |
331
+ | `renderClassDiagram(ast: ClassDiagramAST, options?: RenderOptions): string` | Render class diagram AST |
166
332
  | `isClassDiagram(input: string): boolean` | Check if input is class diagram |
167
333
 
168
334
  ## Supported Flowchart Features
@@ -186,6 +352,25 @@ detectDiagramType("unknown diagram"); // null
186
352
  - **Notes**: `note left of`, `note right of`, `note over`
187
353
  - **Actor lifecycle**: `create`, `destroy`
188
354
 
355
+ ## Limitations
356
+
357
+ ### Comments Not Preserved
358
+
359
+ Mermaid supports `%%` line comments, but **comments are not preserved** during parsing. The JISON parsers discard comments during lexing, so they are not included in the AST and will not appear in rendered output.
360
+
361
+ ```mermaid
362
+ flowchart LR
363
+ %% This comment will be lost
364
+ A --> B
365
+ ```
366
+
367
+ After round-trip, the comment is gone:
368
+
369
+ ```mermaid
370
+ flowchart LR
371
+ A --> B
372
+ ```
373
+
189
374
  ## Supported Class Diagram Features
190
375
 
191
376
  - **Classes**: With labels, members (attributes and methods)
@@ -296,6 +481,8 @@ mermaid-ast/
296
481
 
297
482
  MIT
298
483
 
484
+ This project includes JISON parsers from [mermaid.js](https://github.com/mermaid-js/mermaid) (MIT License, Copyright (c) 2014 - 2022 Knut Sveidqvist). See [THIRD-PARTY-NOTICES.md](./THIRD-PARTY-NOTICES.md) for details.
485
+
299
486
  ---
300
487
 
301
488
  ## How This Library Was Built
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Class Diagram Builder
3
+ *
4
+ * Fluent API for constructing Class Diagram ASTs programmatically.
5
+ */
6
+ import { type ClassDiagramAST, type ClassDirection, type ClassMember, type LineType, type RelationType } from '../types/class.js';
7
+ /**
8
+ * Options for adding a class
9
+ */
10
+ export interface ClassOptions {
11
+ label?: string;
12
+ annotations?: string[];
13
+ cssClasses?: string[];
14
+ }
15
+ /**
16
+ * Options for adding a relation
17
+ */
18
+ export interface RelationOptions {
19
+ type1?: RelationType;
20
+ type2?: RelationType;
21
+ lineType?: LineType;
22
+ label1?: string;
23
+ label2?: string;
24
+ label?: string;
25
+ }
26
+ /**
27
+ * Options for build()
28
+ */
29
+ export interface ClassBuildOptions {
30
+ validate?: boolean;
31
+ }
32
+ /**
33
+ * Validation error for invalid AST
34
+ */
35
+ export declare class ClassDiagramValidationError extends Error {
36
+ constructor(message: string);
37
+ }
38
+ /**
39
+ * Builder for class members
40
+ */
41
+ export declare class ClassMemberBuilder {
42
+ private members;
43
+ /**
44
+ * Add a property/attribute
45
+ */
46
+ property(text: string, visibility?: '+' | '-' | '#' | '~'): this;
47
+ /**
48
+ * Add a method
49
+ */
50
+ method(text: string, visibility?: '+' | '-' | '#' | '~'): this;
51
+ /**
52
+ * Get the members
53
+ */
54
+ getMembers(): ClassMember[];
55
+ }
56
+ /**
57
+ * Fluent builder for Class Diagram ASTs
58
+ */
59
+ export declare class ClassDiagramBuilder {
60
+ private ast;
61
+ private currentNamespace;
62
+ constructor(direction?: ClassDirection);
63
+ /**
64
+ * Set the direction
65
+ */
66
+ direction(direction: ClassDirection): this;
67
+ /**
68
+ * Add a class
69
+ */
70
+ class(id: string, builderFn?: (builder: ClassMemberBuilder) => void, options?: ClassOptions): this;
71
+ /**
72
+ * Add a relation between two classes
73
+ */
74
+ relation(id1: string, id2: string, options?: RelationOptions): this;
75
+ /**
76
+ * Add an inheritance/extension relation (A extends B)
77
+ */
78
+ extends(child: string, parent: string, label?: string): this;
79
+ /**
80
+ * Add an implementation relation (A implements B)
81
+ */
82
+ implements(implementer: string, interface_: string, label?: string): this;
83
+ /**
84
+ * Add a composition relation (A has B, strong ownership)
85
+ */
86
+ composition(owner: string, owned: string, label?: string): this;
87
+ /**
88
+ * Add an aggregation relation (A has B, weak ownership)
89
+ */
90
+ aggregation(owner: string, owned: string, label?: string): this;
91
+ /**
92
+ * Add a dependency relation (A depends on B)
93
+ */
94
+ dependency(dependent: string, dependency: string, label?: string): this;
95
+ /**
96
+ * Add a namespace
97
+ */
98
+ namespace(name: string, builderFn: (builder: ClassDiagramBuilder) => void): this;
99
+ /**
100
+ * Add a note
101
+ */
102
+ note(text: string, forClass?: string): this;
103
+ /**
104
+ * Define a CSS class style
105
+ */
106
+ classDef(name: string, styles: string[]): this;
107
+ /**
108
+ * Apply a CSS class to a class
109
+ */
110
+ cssClass(classId: string, cssClassName: string): this;
111
+ /**
112
+ * Add a link to a class
113
+ */
114
+ link(classId: string, url: string, target?: string): this;
115
+ /**
116
+ * Add a callback to a class
117
+ */
118
+ callback(classId: string, callback: string, args?: string): this;
119
+ /**
120
+ * Add a tooltip to a class
121
+ */
122
+ tooltip(classId: string, tooltip: string): this;
123
+ /**
124
+ * Add an annotation to a class (e.g., <<interface>>, <<abstract>>)
125
+ */
126
+ annotate(classId: string, annotation: string): this;
127
+ /**
128
+ * Set the accessibility title
129
+ */
130
+ accTitle(title: string): this;
131
+ /**
132
+ * Set the accessibility description
133
+ */
134
+ accDescription(description: string): this;
135
+ /**
136
+ * Validate the AST
137
+ */
138
+ private validate;
139
+ /**
140
+ * Build and return the ClassDiagramAST
141
+ */
142
+ build(options?: ClassBuildOptions): ClassDiagramAST;
143
+ }
144
+ /**
145
+ * Create a new ClassDiagramBuilder
146
+ */
147
+ export declare function classDiagram(direction?: ClassDirection): ClassDiagramBuilder;
148
+ //# sourceMappingURL=class-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-builder.d.ts","sourceRoot":"","sources":["../../src/builder/class-builder.ts"],"names":[],"mappings":"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"}