import type { IConnection, IConnections } from '../interfaces'; type MultipleInputNodesError = { errorCode: 'Multiple Input Nodes'; nodes: Set; }; type MultipleOutputNodesError = { errorCode: 'Multiple Output Nodes'; nodes: Set; }; type InputEdgeToNonRootNode = { errorCode: 'Input Edge To Non-Root Node'; node: string; }; type OutputEdgeFromNonLeafNode = { errorCode: 'Output Edge From Non-Leaf Node'; node: string; }; type NoContinuousPathFromRootToLeaf = { errorCode: 'No Continuous Path From Root To Leaf In Selection'; start: string; end: string; }; export type ExtractableErrorResult = MultipleInputNodesError | MultipleOutputNodesError | InputEdgeToNonRootNode | OutputEdgeFromNonLeafNode | NoContinuousPathFromRootToLeaf; export type IConnectionAdjacencyList = Map>; /** * Find all edges leading into the graph described in `graphIds`. */ export declare function getInputEdges(graphIds: Set, adjacencyList: IConnectionAdjacencyList): Array<[string, IConnection]>; /** * Find all edges leading out of the graph described in `graphIds`. */ export declare function getOutputEdges(graphIds: Set, adjacencyList: IConnectionAdjacencyList): Array<[string, IConnection]>; export declare function getRootNodes(graphIds: Set, adjacencyList: IConnectionAdjacencyList): Set; export declare function getLeafNodes(graphIds: Set, adjacencyList: IConnectionAdjacencyList): Set; export declare function hasPath(start: string, end: string, adjacencyList: IConnectionAdjacencyList): boolean; export type ExtractableSubgraphData = { start?: string; end?: string; }; export declare function buildAdjacencyList(connectionsBySourceNode: IConnections): IConnectionAdjacencyList; /** * A subgraph is considered extractable if the following properties hold: * - 0-1 input nodes from outside the subgraph, to a root node * - 0-1 output nodes to outside the subgraph, from a leaf node * - continuous path between input and output nodes if they exist * * This also covers the requirement that all "inner" nodes between the root node * and the output node are selected, since this would otherwise create extra * input or output nodes. * * @returns An object containing optional start and end nodeIds * indicating which nodes have outside connections, OR * An array of errors if the selection is not valid. */ export declare function parseExtractableSubgraphSelection(graphIds: Set, adjacencyList: IConnectionAdjacencyList): ExtractableSubgraphData | ExtractableErrorResult[]; export {}; //# sourceMappingURL=graph-utils.d.ts.map