export declare type GraphNode = { id: string; }; export declare type GraphEdge = { from: NodeType; to: NodeType; }; export declare type NodeVisitor = (block: NodeType, parent?: NodeType) => void; export declare abstract class Graph = GraphEdge> { root: NodeType; protected nodeIndex: Map; constructor(root: NodeType); abstract getOutwardEdges(node: NodeType): EdgeType[]; abstract getInwardEdges(node: NodeType): EdgeType[]; depthFirstSearch(visitor: NodeVisitor): void; generateGraphviz(): string; getNodeName(node: NodeType): string; getEdgeLabel(edge: EdgeType): string; getNode(id: string): NodeType | undefined; private depthFirstSearchInner; }