Skip to content

Commit 21e0d53

Browse files
programmatically generate dot file
1 parent dd2ade6 commit 21e0d53

File tree

5 files changed

+53
-18
lines changed

5 files changed

+53
-18
lines changed

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
"pnpm": {
88
"onlyBuiltDependencies": [
99
"@swc/core"
10-
]
10+
],
11+
"patchedDependencies": {
12+
"graphviz-builder": "patches/graphviz-builder.patch"
13+
}
1114
},
1215
"scripts": {
1316
"typecheck": "tsc -b --verbose",

packages/viz/examples/vizjs.ts

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { instance } from '@viz-js/viz';
22
import { promises as fs } from 'node:fs';
33
import path from 'node:path';
44
import { fileURLToPath } from 'node:url';
5+
import { digraph } from 'graphviz-builder';
56

67
// ES Module equivalent for __dirname
78
const __filename = fileURLToPath(import.meta.url);
@@ -10,22 +11,26 @@ const __dirname = path.dirname(__filename);
1011
async function generateGraphImage() {
1112
console.log('Generating graph image using @viz-js/viz...');
1213

13-
// Define a simple graph in DOT language
14-
const dotGraph = `
15-
digraph SimpleGraph {
16-
rankdir=LR; // Left to right layout
17-
node [shape=box, style=rounded]; // Node shape
18-
A [label="Start Node"];
19-
B [label="Middle Node"];
20-
C [label="End Node"];
21-
22-
A -> B [label="Step 1"];
23-
B -> C [label="Step 2"];
24-
A -> C [label="Skip", style=dashed];
25-
}
26-
`;
27-
2814
try {
15+
// Create a directed graph (digraph)
16+
const g = digraph('SimpleGraph');
17+
18+
// Add nodes with attributes
19+
const nodeA = g.createNode('A', { label: 'Start Node', shape: 'box', style: 'rounded' });
20+
const nodeB = g.createNode('B', { label: 'Middle Node', shape: 'box', style: 'rounded' });
21+
const nodeC = g.createNode('C', { label: 'End Node', shape: 'box', style: 'rounded' });
22+
23+
// Add edges with attributes
24+
g.createEdge([nodeA, nodeB], { label: 'Step 1' });
25+
g.createEdge([nodeB, nodeC], { label: 'Step 2' });
26+
g.createEdge([nodeA, nodeC], { label: 'Skip', style: 'dashed' });
27+
28+
// Generate the DOT string
29+
const dotGraph = g.toDot();
30+
31+
console.log('Generated DOT string:');
32+
console.log(dotGraph);
33+
2934
// Get the Viz renderer instance
3035
const viz = await instance();
3136

packages/viz/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"build": "rimraf dist && tsdown",
3030
"dev": "tsdown --watch",
3131
"prepublishOnly": "cp ../../README.md ./README.md",
32-
"example:vizjs": "tsx ./examples/vizjs.ts"
32+
"example": "tsx ./examples/vizjs.ts"
3333
},
3434
"devDependencies": {
3535
"@types/node": "^22.14.1",
@@ -48,6 +48,7 @@
4848
"access": "public"
4949
},
5050
"dependencies": {
51-
"@viz-js/viz": "^3.12.0"
51+
"@viz-js/viz": "^3.12.0",
52+
"graphviz-builder": "^0.1.1"
5253
}
5354
}

patches/graphviz-builder.patch

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
diff --git a/lib/deps/core_ext/hash.js b/lib/deps/core_ext/hash.js
2+
index f075d9c4cf496a236e0aee6b6191e3ab371aae2d..562decc8683e554514204a4a70472077678d0da3 100644
3+
--- a/lib/deps/core_ext/hash.js
4+
+++ b/lib/deps/core_ext/hash.js
5+
@@ -1,6 +1,6 @@
6+
var Hash = function() {
7+
this.items = new Map();
8+
- var i, value;
9+
+ var i, value, l;
10+
for (i = 0, l = arguments.length; i < l; i += 2) {
11+
value = arguments[i + 1];
12+
if (value !== undefined) {

pnpm-lock.yaml

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)