@swiftlysingh/excalidraw-cli 1.0.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.
- package/LICENSE +21 -0
- package/README.md +159 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +152 -0
- package/dist/cli.js.map +1 -0
- package/dist/factory/connection-factory.d.ts +16 -0
- package/dist/factory/connection-factory.d.ts.map +1 -0
- package/dist/factory/connection-factory.js +91 -0
- package/dist/factory/connection-factory.js.map +1 -0
- package/dist/factory/element-factory.d.ts +16 -0
- package/dist/factory/element-factory.d.ts.map +1 -0
- package/dist/factory/element-factory.js +78 -0
- package/dist/factory/element-factory.js.map +1 -0
- package/dist/factory/index.d.ts +8 -0
- package/dist/factory/index.d.ts.map +1 -0
- package/dist/factory/index.js +8 -0
- package/dist/factory/index.js.map +1 -0
- package/dist/factory/node-factory.d.ts +24 -0
- package/dist/factory/node-factory.d.ts.map +1 -0
- package/dist/factory/node-factory.js +85 -0
- package/dist/factory/node-factory.js.map +1 -0
- package/dist/factory/text-factory.d.ts +42 -0
- package/dist/factory/text-factory.d.ts.map +1 -0
- package/dist/factory/text-factory.js +148 -0
- package/dist/factory/text-factory.js.map +1 -0
- package/dist/generator/excalidraw-generator.d.ts +17 -0
- package/dist/generator/excalidraw-generator.d.ts.map +1 -0
- package/dist/generator/excalidraw-generator.js +91 -0
- package/dist/generator/excalidraw-generator.js.map +1 -0
- package/dist/generator/index.d.ts +5 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +5 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/arrow-router.d.ts +48 -0
- package/dist/layout/arrow-router.d.ts.map +1 -0
- package/dist/layout/arrow-router.js +103 -0
- package/dist/layout/arrow-router.js.map +1 -0
- package/dist/layout/elk-layout.d.ts +11 -0
- package/dist/layout/elk-layout.d.ts.map +1 -0
- package/dist/layout/elk-layout.js +179 -0
- package/dist/layout/elk-layout.js.map +1 -0
- package/dist/layout/index.d.ts +6 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/index.js +6 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/parser/dsl-parser.d.ts +21 -0
- package/dist/parser/dsl-parser.d.ts.map +1 -0
- package/dist/parser/dsl-parser.js +249 -0
- package/dist/parser/dsl-parser.js.map +1 -0
- package/dist/parser/index.d.ts +6 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +6 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/json-parser.d.ts +16 -0
- package/dist/parser/json-parser.d.ts.map +1 -0
- package/dist/parser/json-parser.js +76 -0
- package/dist/parser/json-parser.js.map +1 -0
- package/dist/types/dsl.d.ts +127 -0
- package/dist/types/dsl.d.ts.map +1 -0
- package/dist/types/dsl.js +14 -0
- package/dist/types/dsl.js.map +1 -0
- package/dist/types/excalidraw.d.ts +171 -0
- package/dist/types/excalidraw.d.ts.map +1 -0
- package/dist/types/excalidraw.js +36 -0
- package/dist/types/excalidraw.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Arrow Router
|
|
3
|
+
*
|
|
4
|
+
* Calculates binding points for arrows connecting to shapes.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Calculate the binding point for an arrow endpoint on a node.
|
|
8
|
+
* Returns normalized coordinates [0-1] relative to the node.
|
|
9
|
+
*/
|
|
10
|
+
export function calculateBindingPoint(node, arrowPoint) {
|
|
11
|
+
// Calculate relative position
|
|
12
|
+
const relX = (arrowPoint.x - node.x) / node.width;
|
|
13
|
+
const relY = (arrowPoint.y - node.y) / node.height;
|
|
14
|
+
// Clamp to valid range [0, 1]
|
|
15
|
+
const fixedX = Math.max(0, Math.min(1, relX));
|
|
16
|
+
const fixedY = Math.max(0, Math.min(1, relY));
|
|
17
|
+
return {
|
|
18
|
+
elementId: node.id,
|
|
19
|
+
mode: 'orbit',
|
|
20
|
+
fixedPoint: [fixedX, fixedY],
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Find the best connection point on a node's edge for an arrow
|
|
25
|
+
* coming from a given direction.
|
|
26
|
+
*/
|
|
27
|
+
export function findEdgeConnectionPoint(node, fromPoint) {
|
|
28
|
+
const centerX = node.x + node.width / 2;
|
|
29
|
+
const centerY = node.y + node.height / 2;
|
|
30
|
+
// Calculate angle from center to fromPoint
|
|
31
|
+
const dx = fromPoint.x - centerX;
|
|
32
|
+
const dy = fromPoint.y - centerY;
|
|
33
|
+
const angle = Math.atan2(dy, dx);
|
|
34
|
+
// Determine which edge to connect to based on angle
|
|
35
|
+
// Top: -3π/4 to -π/4
|
|
36
|
+
// Right: -π/4 to π/4
|
|
37
|
+
// Bottom: π/4 to 3π/4
|
|
38
|
+
// Left: 3π/4 to -3π/4 (wrapping)
|
|
39
|
+
let x;
|
|
40
|
+
let y;
|
|
41
|
+
let relX;
|
|
42
|
+
let relY;
|
|
43
|
+
if (angle >= -Math.PI / 4 && angle < Math.PI / 4) {
|
|
44
|
+
// Connect to right edge
|
|
45
|
+
x = node.x + node.width;
|
|
46
|
+
y = centerY;
|
|
47
|
+
relX = 1;
|
|
48
|
+
relY = 0.5;
|
|
49
|
+
}
|
|
50
|
+
else if (angle >= Math.PI / 4 && angle < (3 * Math.PI) / 4) {
|
|
51
|
+
// Connect to bottom edge
|
|
52
|
+
x = centerX;
|
|
53
|
+
y = node.y + node.height;
|
|
54
|
+
relX = 0.5;
|
|
55
|
+
relY = 1;
|
|
56
|
+
}
|
|
57
|
+
else if (angle >= (-3 * Math.PI) / 4 && angle < -Math.PI / 4) {
|
|
58
|
+
// Connect to top edge
|
|
59
|
+
x = centerX;
|
|
60
|
+
y = node.y;
|
|
61
|
+
relX = 0.5;
|
|
62
|
+
relY = 0;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// Connect to left edge
|
|
66
|
+
x = node.x;
|
|
67
|
+
y = centerY;
|
|
68
|
+
relX = 0;
|
|
69
|
+
relY = 0.5;
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
x,
|
|
73
|
+
y,
|
|
74
|
+
binding: {
|
|
75
|
+
elementId: node.id,
|
|
76
|
+
mode: 'orbit',
|
|
77
|
+
fixedPoint: [relX, relY],
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Calculate arrow binding for a source node (where arrow starts)
|
|
83
|
+
*/
|
|
84
|
+
export function calculateStartBinding(sourceNode, targetNode) {
|
|
85
|
+
const targetCenter = {
|
|
86
|
+
x: targetNode.x + targetNode.width / 2,
|
|
87
|
+
y: targetNode.y + targetNode.height / 2,
|
|
88
|
+
};
|
|
89
|
+
const result = findEdgeConnectionPoint(sourceNode, targetCenter);
|
|
90
|
+
return { point: { x: result.x, y: result.y }, binding: result.binding };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Calculate arrow binding for a target node (where arrow ends)
|
|
94
|
+
*/
|
|
95
|
+
export function calculateEndBinding(sourceNode, targetNode) {
|
|
96
|
+
const sourceCenter = {
|
|
97
|
+
x: sourceNode.x + sourceNode.width / 2,
|
|
98
|
+
y: sourceNode.y + sourceNode.height / 2,
|
|
99
|
+
};
|
|
100
|
+
const result = findEdgeConnectionPoint(targetNode, sourceCenter);
|
|
101
|
+
return { point: { x: result.x, y: result.y }, binding: result.binding };
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=arrow-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arrow-router.js","sourceRoot":"","sources":["../../src/layout/arrow-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ELK.js Layout Engine
|
|
3
|
+
*
|
|
4
|
+
* Uses ELK (Eclipse Layout Kernel) for automatic graph layout.
|
|
5
|
+
*/
|
|
6
|
+
import type { FlowchartGraph, LayoutedGraph } from '../types/dsl.js';
|
|
7
|
+
/**
|
|
8
|
+
* Layout a flowchart graph using ELK
|
|
9
|
+
*/
|
|
10
|
+
export declare function layoutGraph(graph: FlowchartGraph): Promise<LayoutedGraph>;
|
|
11
|
+
//# sourceMappingURL=elk-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elk-layout.d.ts","sourceRoot":"","sources":["../../src/layout/elk-layout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAKd,MAAM,iBAAiB,CAAC;AAkFzB;;GAEG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAyI/E"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ELK.js Layout Engine
|
|
3
|
+
*
|
|
4
|
+
* Uses ELK (Eclipse Layout Kernel) for automatic graph layout.
|
|
5
|
+
*/
|
|
6
|
+
import _ELK from 'elkjs/lib/elk.bundled.js';
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
8
|
+
const ELK = _ELK;
|
|
9
|
+
/**
|
|
10
|
+
* Calculate node dimensions based on label and type
|
|
11
|
+
*/
|
|
12
|
+
function calculateNodeDimensions(node) {
|
|
13
|
+
const lines = node.label.split('\n');
|
|
14
|
+
const maxLineLength = Math.max(...lines.map((l) => l.length));
|
|
15
|
+
const lineCount = lines.length;
|
|
16
|
+
// Base character width (approximate)
|
|
17
|
+
const charWidth = 10;
|
|
18
|
+
const lineHeight = 25;
|
|
19
|
+
const paddingX = 40;
|
|
20
|
+
const paddingY = 30;
|
|
21
|
+
let width = maxLineLength * charWidth + paddingX;
|
|
22
|
+
let height = lineCount * lineHeight + paddingY;
|
|
23
|
+
// Minimum dimensions based on node type
|
|
24
|
+
const minDimensions = {
|
|
25
|
+
rectangle: { width: 100, height: 60 },
|
|
26
|
+
diamond: { width: 120, height: 80 },
|
|
27
|
+
ellipse: { width: 100, height: 60 },
|
|
28
|
+
database: { width: 100, height: 70 },
|
|
29
|
+
};
|
|
30
|
+
const min = minDimensions[node.type] || minDimensions.rectangle;
|
|
31
|
+
width = Math.max(width, min.width);
|
|
32
|
+
height = Math.max(height, min.height);
|
|
33
|
+
// Diamonds need extra space for the rotated shape
|
|
34
|
+
if (node.type === 'diamond') {
|
|
35
|
+
width = Math.max(width * 1.4, 140);
|
|
36
|
+
height = Math.max(height * 1.4, 100);
|
|
37
|
+
}
|
|
38
|
+
return { width, height };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Convert flow direction to ELK direction
|
|
42
|
+
*/
|
|
43
|
+
function getElkDirection(direction) {
|
|
44
|
+
const mapping = {
|
|
45
|
+
TB: 'DOWN',
|
|
46
|
+
BT: 'UP',
|
|
47
|
+
LR: 'RIGHT',
|
|
48
|
+
RL: 'LEFT',
|
|
49
|
+
};
|
|
50
|
+
return mapping[direction] || 'DOWN';
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Layout a flowchart graph using ELK
|
|
54
|
+
*/
|
|
55
|
+
export async function layoutGraph(graph) {
|
|
56
|
+
const elk = new ELK();
|
|
57
|
+
// Build ELK graph
|
|
58
|
+
const elkGraph = {
|
|
59
|
+
id: 'root',
|
|
60
|
+
layoutOptions: {
|
|
61
|
+
'elk.algorithm': 'layered',
|
|
62
|
+
'elk.direction': getElkDirection(graph.options.direction),
|
|
63
|
+
'elk.spacing.nodeNode': String(graph.options.nodeSpacing),
|
|
64
|
+
'elk.layered.spacing.baseValue': String(graph.options.rankSpacing),
|
|
65
|
+
'elk.layered.spacing.edgeNodeBetweenLayers': String(graph.options.nodeSpacing),
|
|
66
|
+
'elk.edgeRouting': 'ORTHOGONAL',
|
|
67
|
+
'elk.layered.crossingMinimization.strategy': 'LAYER_SWEEP',
|
|
68
|
+
'elk.layered.nodePlacement.strategy': 'NETWORK_SIMPLEX',
|
|
69
|
+
},
|
|
70
|
+
children: graph.nodes.map((node) => {
|
|
71
|
+
const dims = calculateNodeDimensions(node);
|
|
72
|
+
return {
|
|
73
|
+
id: node.id,
|
|
74
|
+
width: dims.width,
|
|
75
|
+
height: dims.height,
|
|
76
|
+
labels: [{ text: node.label }],
|
|
77
|
+
};
|
|
78
|
+
}),
|
|
79
|
+
edges: graph.edges.map((edge) => ({
|
|
80
|
+
id: edge.id,
|
|
81
|
+
sources: [edge.source],
|
|
82
|
+
targets: [edge.target],
|
|
83
|
+
labels: edge.label ? [{ text: edge.label }] : undefined,
|
|
84
|
+
})),
|
|
85
|
+
};
|
|
86
|
+
// Run ELK layout
|
|
87
|
+
const layoutResult = await elk.layout(elkGraph);
|
|
88
|
+
// Build node map for lookups
|
|
89
|
+
const nodeMap = new Map();
|
|
90
|
+
for (const node of graph.nodes) {
|
|
91
|
+
nodeMap.set(node.id, node);
|
|
92
|
+
}
|
|
93
|
+
// Extract layouted nodes
|
|
94
|
+
const layoutedNodes = [];
|
|
95
|
+
const elkNodeMap = new Map();
|
|
96
|
+
for (const elkNode of layoutResult.children || []) {
|
|
97
|
+
elkNodeMap.set(elkNode.id, elkNode);
|
|
98
|
+
const originalNode = nodeMap.get(elkNode.id);
|
|
99
|
+
if (originalNode) {
|
|
100
|
+
layoutedNodes.push({
|
|
101
|
+
...originalNode,
|
|
102
|
+
x: (elkNode.x || 0) + graph.options.padding,
|
|
103
|
+
y: (elkNode.y || 0) + graph.options.padding,
|
|
104
|
+
width: elkNode.width || 100,
|
|
105
|
+
height: elkNode.height || 60,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Extract layouted edges
|
|
110
|
+
const layoutedEdges = [];
|
|
111
|
+
for (const elkEdge of layoutResult.edges || []) {
|
|
112
|
+
const originalEdge = graph.edges.find((e) => e.id === elkEdge.id);
|
|
113
|
+
if (!originalEdge)
|
|
114
|
+
continue;
|
|
115
|
+
const section = elkEdge.sections?.[0];
|
|
116
|
+
let points = [];
|
|
117
|
+
let sourcePoint = { x: 0, y: 0 };
|
|
118
|
+
let targetPoint = { x: 0, y: 0 };
|
|
119
|
+
if (section) {
|
|
120
|
+
sourcePoint = {
|
|
121
|
+
x: section.startPoint.x + graph.options.padding,
|
|
122
|
+
y: section.startPoint.y + graph.options.padding,
|
|
123
|
+
};
|
|
124
|
+
targetPoint = {
|
|
125
|
+
x: section.endPoint.x + graph.options.padding,
|
|
126
|
+
y: section.endPoint.y + graph.options.padding,
|
|
127
|
+
};
|
|
128
|
+
// Build points array (relative to start point for Excalidraw)
|
|
129
|
+
points = [[0, 0]];
|
|
130
|
+
if (section.bendPoints) {
|
|
131
|
+
for (const bend of section.bendPoints) {
|
|
132
|
+
points.push([
|
|
133
|
+
bend.x + graph.options.padding - sourcePoint.x,
|
|
134
|
+
bend.y + graph.options.padding - sourcePoint.y,
|
|
135
|
+
]);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
points.push([targetPoint.x - sourcePoint.x, targetPoint.y - sourcePoint.y]);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// Fallback: calculate direct line between node centers
|
|
142
|
+
const sourceElk = elkNodeMap.get(originalEdge.source);
|
|
143
|
+
const targetElk = elkNodeMap.get(originalEdge.target);
|
|
144
|
+
if (sourceElk && targetElk) {
|
|
145
|
+
const sx = (sourceElk.x || 0) + (sourceElk.width || 0) / 2 + graph.options.padding;
|
|
146
|
+
const sy = (sourceElk.y || 0) + (sourceElk.height || 0) / 2 + graph.options.padding;
|
|
147
|
+
const tx = (targetElk.x || 0) + (targetElk.width || 0) / 2 + graph.options.padding;
|
|
148
|
+
const ty = (targetElk.y || 0) + (targetElk.height || 0) / 2 + graph.options.padding;
|
|
149
|
+
sourcePoint = { x: sx, y: sy };
|
|
150
|
+
targetPoint = { x: tx, y: ty };
|
|
151
|
+
points = [
|
|
152
|
+
[0, 0],
|
|
153
|
+
[tx - sx, ty - sy],
|
|
154
|
+
];
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
layoutedEdges.push({
|
|
158
|
+
...originalEdge,
|
|
159
|
+
points,
|
|
160
|
+
sourcePoint,
|
|
161
|
+
targetPoint,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
// Calculate total dimensions
|
|
165
|
+
let maxX = 0;
|
|
166
|
+
let maxY = 0;
|
|
167
|
+
for (const node of layoutedNodes) {
|
|
168
|
+
maxX = Math.max(maxX, node.x + node.width);
|
|
169
|
+
maxY = Math.max(maxY, node.y + node.height);
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
nodes: layoutedNodes,
|
|
173
|
+
edges: layoutedEdges,
|
|
174
|
+
options: graph.options,
|
|
175
|
+
width: maxX + graph.options.padding,
|
|
176
|
+
height: maxY + graph.options.padding,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=elk-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elk-layout.js","sourceRoot":"","sources":["../../src/layout/elk-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSL Parser for Flowchart Syntax
|
|
3
|
+
*
|
|
4
|
+
* Syntax:
|
|
5
|
+
* [Label] - Rectangle (process step)
|
|
6
|
+
* {Label} - Diamond (decision)
|
|
7
|
+
* (Label) - Ellipse (start/end)
|
|
8
|
+
* [[Label]] - Database
|
|
9
|
+
* A -> B - Connection
|
|
10
|
+
* A -> "label" -> B - Labeled connection
|
|
11
|
+
* A --> B - Dashed connection
|
|
12
|
+
* @direction TB - Set flow direction (TB, BT, LR, RL)
|
|
13
|
+
* @spacing N - Set node spacing
|
|
14
|
+
*/
|
|
15
|
+
import type { FlowchartGraph } from '../types/dsl.js';
|
|
16
|
+
/**
|
|
17
|
+
* Parse tokens into a FlowchartGraph
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseDSL(input: string): FlowchartGraph;
|
|
20
|
+
export { DEFAULT_LAYOUT_OPTIONS } from '../types/dsl.js';
|
|
21
|
+
//# sourceMappingURL=dsl-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsl-parser.d.ts","sourceRoot":"","sources":["../../src/parser/dsl-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,iBAAiB,CAAC;AA0JzB;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAiGtD;AAGD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSL Parser for Flowchart Syntax
|
|
3
|
+
*
|
|
4
|
+
* Syntax:
|
|
5
|
+
* [Label] - Rectangle (process step)
|
|
6
|
+
* {Label} - Diamond (decision)
|
|
7
|
+
* (Label) - Ellipse (start/end)
|
|
8
|
+
* [[Label]] - Database
|
|
9
|
+
* A -> B - Connection
|
|
10
|
+
* A -> "label" -> B - Labeled connection
|
|
11
|
+
* A --> B - Dashed connection
|
|
12
|
+
* @direction TB - Set flow direction (TB, BT, LR, RL)
|
|
13
|
+
* @spacing N - Set node spacing
|
|
14
|
+
*/
|
|
15
|
+
import { nanoid } from 'nanoid';
|
|
16
|
+
import { DEFAULT_LAYOUT_OPTIONS } from '../types/dsl.js';
|
|
17
|
+
/**
|
|
18
|
+
* Tokenize DSL input into tokens
|
|
19
|
+
*/
|
|
20
|
+
function tokenize(input) {
|
|
21
|
+
const tokens = [];
|
|
22
|
+
let i = 0;
|
|
23
|
+
const len = input.length;
|
|
24
|
+
while (i < len) {
|
|
25
|
+
// Skip whitespace (except newlines)
|
|
26
|
+
if (input[i] === ' ' || input[i] === '\t') {
|
|
27
|
+
i++;
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
// Newline
|
|
31
|
+
if (input[i] === '\n') {
|
|
32
|
+
tokens.push({ type: 'newline', value: '\n' });
|
|
33
|
+
i++;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
// Comment (skip rest of line)
|
|
37
|
+
if (input[i] === '#') {
|
|
38
|
+
while (i < len && input[i] !== '\n')
|
|
39
|
+
i++;
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
// Directive (@direction, @spacing)
|
|
43
|
+
if (input[i] === '@') {
|
|
44
|
+
let directive = '';
|
|
45
|
+
i++; // skip @
|
|
46
|
+
while (i < len && /[a-zA-Z0-9]/.test(input[i])) {
|
|
47
|
+
directive += input[i];
|
|
48
|
+
i++;
|
|
49
|
+
}
|
|
50
|
+
// Get directive value
|
|
51
|
+
while (i < len && (input[i] === ' ' || input[i] === '\t'))
|
|
52
|
+
i++;
|
|
53
|
+
let value = '';
|
|
54
|
+
while (i < len && input[i] !== '\n' && input[i] !== '#') {
|
|
55
|
+
value += input[i];
|
|
56
|
+
i++;
|
|
57
|
+
}
|
|
58
|
+
tokens.push({ type: 'directive', value: `${directive} ${value.trim()}` });
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
// Database [[Label]]
|
|
62
|
+
if (input[i] === '[' && input[i + 1] === '[') {
|
|
63
|
+
i += 2;
|
|
64
|
+
let label = '';
|
|
65
|
+
while (i < len && !(input[i] === ']' && input[i + 1] === ']')) {
|
|
66
|
+
label += input[i];
|
|
67
|
+
i++;
|
|
68
|
+
}
|
|
69
|
+
i += 2; // skip ]]
|
|
70
|
+
tokens.push({ type: 'node', value: label.trim(), nodeType: 'database' });
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
// Rectangle [Label]
|
|
74
|
+
if (input[i] === '[') {
|
|
75
|
+
i++;
|
|
76
|
+
let label = '';
|
|
77
|
+
let depth = 1;
|
|
78
|
+
while (i < len && depth > 0) {
|
|
79
|
+
if (input[i] === '[')
|
|
80
|
+
depth++;
|
|
81
|
+
else if (input[i] === ']')
|
|
82
|
+
depth--;
|
|
83
|
+
if (depth > 0)
|
|
84
|
+
label += input[i];
|
|
85
|
+
i++;
|
|
86
|
+
}
|
|
87
|
+
tokens.push({ type: 'node', value: label.trim(), nodeType: 'rectangle' });
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
// Diamond {Label}
|
|
91
|
+
if (input[i] === '{') {
|
|
92
|
+
i++;
|
|
93
|
+
let label = '';
|
|
94
|
+
let depth = 1;
|
|
95
|
+
while (i < len && depth > 0) {
|
|
96
|
+
if (input[i] === '{')
|
|
97
|
+
depth++;
|
|
98
|
+
else if (input[i] === '}')
|
|
99
|
+
depth--;
|
|
100
|
+
if (depth > 0)
|
|
101
|
+
label += input[i];
|
|
102
|
+
i++;
|
|
103
|
+
}
|
|
104
|
+
tokens.push({ type: 'node', value: label.trim(), nodeType: 'diamond' });
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
// Ellipse (Label)
|
|
108
|
+
if (input[i] === '(') {
|
|
109
|
+
i++;
|
|
110
|
+
let label = '';
|
|
111
|
+
let depth = 1;
|
|
112
|
+
while (i < len && depth > 0) {
|
|
113
|
+
if (input[i] === '(')
|
|
114
|
+
depth++;
|
|
115
|
+
else if (input[i] === ')')
|
|
116
|
+
depth--;
|
|
117
|
+
if (depth > 0)
|
|
118
|
+
label += input[i];
|
|
119
|
+
i++;
|
|
120
|
+
}
|
|
121
|
+
tokens.push({ type: 'node', value: label.trim(), nodeType: 'ellipse' });
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
// Dashed arrow -->
|
|
125
|
+
if (input[i] === '-' && input[i + 1] === '-' && input[i + 2] === '>') {
|
|
126
|
+
tokens.push({ type: 'arrow', value: '-->', dashed: true });
|
|
127
|
+
i += 3;
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
// Arrow ->
|
|
131
|
+
if (input[i] === '-' && input[i + 1] === '>') {
|
|
132
|
+
tokens.push({ type: 'arrow', value: '->' });
|
|
133
|
+
i += 2;
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
// Quoted label "text"
|
|
137
|
+
if (input[i] === '"') {
|
|
138
|
+
i++;
|
|
139
|
+
let label = '';
|
|
140
|
+
while (i < len && input[i] !== '"') {
|
|
141
|
+
if (input[i] === '\\' && i + 1 < len) {
|
|
142
|
+
i++;
|
|
143
|
+
label += input[i];
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
label += input[i];
|
|
147
|
+
}
|
|
148
|
+
i++;
|
|
149
|
+
}
|
|
150
|
+
i++; // skip closing "
|
|
151
|
+
tokens.push({ type: 'label', value: label });
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
// Skip unknown characters
|
|
155
|
+
i++;
|
|
156
|
+
}
|
|
157
|
+
return tokens;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Parse tokens into a FlowchartGraph
|
|
161
|
+
*/
|
|
162
|
+
export function parseDSL(input) {
|
|
163
|
+
const tokens = tokenize(input);
|
|
164
|
+
const nodes = new Map();
|
|
165
|
+
const edges = [];
|
|
166
|
+
const options = { ...DEFAULT_LAYOUT_OPTIONS };
|
|
167
|
+
// Helper to get or create node by label
|
|
168
|
+
function getOrCreateNode(label, type) {
|
|
169
|
+
// Use label as key for deduplication
|
|
170
|
+
const key = `${type}:${label}`;
|
|
171
|
+
if (!nodes.has(key)) {
|
|
172
|
+
nodes.set(key, {
|
|
173
|
+
id: nanoid(10),
|
|
174
|
+
type,
|
|
175
|
+
label,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
return nodes.get(key);
|
|
179
|
+
}
|
|
180
|
+
let i = 0;
|
|
181
|
+
let lastNode = null;
|
|
182
|
+
let pendingLabel = null;
|
|
183
|
+
let pendingDashed = false;
|
|
184
|
+
while (i < tokens.length) {
|
|
185
|
+
const token = tokens[i];
|
|
186
|
+
if (token.type === 'newline') {
|
|
187
|
+
lastNode = null;
|
|
188
|
+
pendingLabel = null;
|
|
189
|
+
pendingDashed = false;
|
|
190
|
+
i++;
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
if (token.type === 'directive') {
|
|
194
|
+
const [directive, ...valueParts] = token.value.split(' ');
|
|
195
|
+
const value = valueParts.join(' ');
|
|
196
|
+
if (directive === 'direction') {
|
|
197
|
+
const dir = value.toUpperCase();
|
|
198
|
+
if (dir === 'TB' || dir === 'BT' || dir === 'LR' || dir === 'RL') {
|
|
199
|
+
options.direction = dir;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
else if (directive === 'spacing') {
|
|
203
|
+
const spacing = parseInt(value, 10);
|
|
204
|
+
if (!isNaN(spacing)) {
|
|
205
|
+
options.nodeSpacing = spacing;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
i++;
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
if (token.type === 'node') {
|
|
212
|
+
const node = getOrCreateNode(token.value, token.nodeType);
|
|
213
|
+
if (lastNode) {
|
|
214
|
+
// Create edge from lastNode to this node
|
|
215
|
+
edges.push({
|
|
216
|
+
id: nanoid(10),
|
|
217
|
+
source: lastNode.id,
|
|
218
|
+
target: node.id,
|
|
219
|
+
label: pendingLabel || undefined,
|
|
220
|
+
style: pendingDashed ? { strokeStyle: 'dashed' } : undefined,
|
|
221
|
+
});
|
|
222
|
+
pendingLabel = null;
|
|
223
|
+
pendingDashed = false;
|
|
224
|
+
}
|
|
225
|
+
lastNode = node;
|
|
226
|
+
i++;
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
if (token.type === 'arrow') {
|
|
230
|
+
pendingDashed = token.dashed || false;
|
|
231
|
+
i++;
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
if (token.type === 'label') {
|
|
235
|
+
pendingLabel = token.value;
|
|
236
|
+
i++;
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
i++;
|
|
240
|
+
}
|
|
241
|
+
return {
|
|
242
|
+
nodes: Array.from(nodes.values()),
|
|
243
|
+
edges,
|
|
244
|
+
options,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
// Re-export DEFAULT_LAYOUT_OPTIONS
|
|
248
|
+
export { DEFAULT_LAYOUT_OPTIONS } from '../types/dsl.js';
|
|
249
|
+
//# sourceMappingURL=dsl-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsl-parser.js","sourceRoot":"","sources":["../../src/parser/dsl-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
|