/** * @internal * Represents a graph. Each node is associated to a set of nodes that can be directly reached from it in a single step. */ export type Graph = { [node: string]: Set; }; /** * @internal * Represents from which all cycles have been removed using strongly connected components. Also holds information on all groups. */ export type StronglyConnectedGraph = { acyclicGraph: Graph; originalLabelToAcyclicLabel: { [originalLabel: string]: string; }; acyclicLabelToGroup: { [newLabel: string]: string[]; }; }; /** * @internal * Creates a graph from a series of edges and optionally additional nodes. * @param edges edges between nodes, [from, to]. * @param additionalNodes nodes which do not appear in any edge. * @return a graph built using the provided parameters. */ export declare function graphFromEdges(edges: [string, string][], additionalNodes?: string[]): Graph; /** * @internal * Get the nodes reachable from each node in an acyclic graph. Exclude the node itself. * @param graph an acyclic graph. * @return all nodes reachable from each node in the graph with 1 or more steps. */ export declare function reachSetsAcyclic(graph: Graph): { [node: string]: Set; }; /** * @internal * Get a new graph where each cycle has been replaced by a single node, with label chosen from the labels of nodes in the cycle (the specific way * the label is chosen is implementation-dependant). * @param graph a graph. * @return the new graph and dictionaries to allow mapping between original labels and labels in the new graph */ export declare function acyclic(graph: Graph): StronglyConnectedGraph;