It is part of the ts-graphviz library, which is split into modular packages to improve maintainability, flexibility, and ease of use.
Features
The package adheres to object-oriented programming principles, allowing for:
- Creation and manipulation of graph elements
- Composition of complex graph structures
- Extension through inheritance and customization
- Type-safe graph construction with TypeScript
Usage Patterns
@ts-graphviz/core supports several patterns for creating and manipulating graphs:
Basic Object Creation
The most straightforward approach is to instantiate the model classes directly:
const graph = new Digraph();
const node1 = new Node('node1', { color: 'red' });
const node2 = new Node('node2', { color: 'blue' });
const edge = new Edge([node1, node2], { label: 'Edge Label' });
graph.addNode(node1);
graph.addNode(node2);
graph.addEdge(edge);
Factory Methods
Graph models provide factory methods to create and automatically add elements:
const graph = new Digraph();
const node1 = graph.createNode('node1', { color: 'red' });
const node2 = graph.createNode('node2', { color: 'blue' });
graph.createEdge([node1, node2], { label: 'Edge Label' });
Composition with Subgraphs
Graphs can be composed with subgraphs to create hierarchical structures:
const graph = new Digraph();
const subgraph = new Subgraph('cluster_0');
const node1 = new Node('node1');
const node2 = new Node('node2');
subgraph.addNode(node1);
subgraph.addNode(node2);
graph.addSubgraph(subgraph);
Customization and Extension
@ts-graphviz/core provides several mechanisms for customizing and extending its functionality:
Class Inheritance
You can create custom graph element classes by extending the base classes:
class MyCustomNode extends Node {
constructor(id: string) {
super(`node_${id}`, {
label: `Custom Node ${id}`,
shape: 'box'
});
}
}
class MyCustomEdge extends Edge {
constructor(targets: EdgeTargetTuple) {
super(targets, {
color: 'blue',
penwidth: '2.0'
});
}
}
const node1 = new MyCustomNode('A');
const node2 = new MyCustomNode('B');
const edge = new MyCustomEdge([node1, node2]);
Models Context API
The Models Context API allows you to specify which model classes should be used when creating graph element.
This is implemented through the with method on graph models:
const graph = new Digraph();
graph.with({
Node: MyCustomNode,
Edge: MyCustomEdge
});
const nodeA = graph.createNode('A');
const nodeB = graph.createNode('B');
const edge = graph.createEdge([nodeA, nodeB]);
Integration with AST
@ts-graphviz/core integrates with @ts-graphviz/ast to convert between the object model and the DOT language.
This integration enables:
- Converting graph models to DOT strings
- Parsing DOT strings into graph models
- Working with the abstract syntax tree directly
The main conversion functions that link @ts-graphviz/core with @ts-graphviz/ast are:
fromModel: Converts a graph model to an AST
toModel: Converts an AST to a graph model
These are then used by the main ts-graphviz package to implement the toDot and fromDot functions.
Contributors 👥
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors
specification. Contributions of any kind welcome!
Changelog 📜
See CHANGELOG.md for more details.
License ⚖️
This software is released under the MIT License, see LICENSE.