ts-graphvizの拡張
ts-graphviz
は拡張性を考慮して設計されており、中級ユーザーが特定のニーズに応じてライブラリの機能をカスタマイズおよび強化することができます。
このセクションでは、型システムの拡張方法とカスタム 実装の作成方法について説明します。
カスタムクラスの作成
既存のクラスを継承することで独自の実装を追加できます。 これにより、グラフ要素に対してカスタムの動作やデフォルト属性を定義することが可能になります。
import { Digraph, Node, Edge, EdgeTargetTuple, attribute as _, toDot } from 'ts-graphviz';
class MyCustomDigraph extends Digraph {
constructor() {
super('G', {
[_.label]: 'これはカスタム有向グラフです',
});
}
}
class MyCustomNode extends Node {
constructor(id: string) {
super(`node_${id}`, {
[_.label]: `これはカスタムノード ${id} です`,
});
}
}
class MyCustomEdge extends Edge {
constructor(targets: EdgeTargetTuple) {
super(targets, {
[_.label]: 'これはカスタムエッジです',
});
}
}
const digraph = new MyCustomDigraph();
const node1 = new MyCustomNode('A');
const node2 = new MyCustomNode('B');
const edge = new MyCustomEdge([node1, node2]);
digraph.addNode(node1);
digraph.addNode(node2);
digraph.addEdge(edge);
const dot = toDot(digraph);
console.log(dot);
/* 出力:
digraph "G" {
label = "これはカスタム有向グラフです";
"node_A" [
label = "これはカスタムノード A です";
];
"node_B" [
label = "これはカスタムノード B です";
];
"node_A" -> "node_B" [
label = "これはカスタムエッジです";
];
}
*/
モデルコンテキスト API (with
メソッド)
モデルコンテキスト API を使用して、グラフ内で生成されるオブジェクトのカスタムクラスを作成することもできます。
Digraph
、Graph
、および Subgraph
の with
メソッドを使用すると、カスタムモデルを事前に定義できます。
const g = new Digraph();
g.with({
Node: MyCustomNode,
Edge: MyCustomEdge,
});
const a = g.createNode('A'); // MyCustomNode のインスタンス
const b = g.createNode('B'); // MyCustomNode のインスタンス
g.createEdge([a, b]); // MyCustomEdge のインスタンス
const dot = toDot(g);
console.log(dot);
/* 出力:
digraph {
"node_A" [
label = "これはカスタムノード A です";
];
"node_B" [
label = "これはカスタムノード B です";
];
"node_A" -> "node_B" [
label = "これはカスタムエッジです";
];
}
*/
型システムの拡張
ts-graphviz
を使用すると、ライブラリの型システムを拡張してグラフ視覚化ソリューションをカスタマイズできます。これは、カスタムグラフレイアウト、出力フォーマット、またはデフォルトではサポートされていないカスタム属性を指定する必要がある場合に役立ちます。
$
記号を用いたカスタマイズ
カスタマイズを可能にするため、拡張を意図した型は $
記号で名前付けされています。以下にリストされていない型定義を拡張する必要がある場合は、$...
を用いて拡張できるかソースコードを確認してください。できない場合は、issue またはプルリクエストを作成してください。