import { Node } from './node';
/**
 * Base dependency graph class.
 */
export declare class Graph {
    private nodes;
    private outgoingEdges;
    private incomingEdges;
    /**
     * Add a node to the graph.
     * @param node Node object.
     */
    private ensureNode;
    /**
     * Remove a node from the graph.
     * @param node Node instance.
     */
    removeNode(node: Node): void;
    /**
     * Checks to see if the graph contains a Node.
     * @param node Node instance.
     */
    hasNode(node: Node): boolean;
    /**
     * Returns the number of nodes in a graph.
     */
    get size(): number;
    /**
     *  Adds a node dependence. "from" is dependent on "to"
     *  @param from Node instance.
     *  @param to  Node instance.
     */
    addDependency(from: Node, to: Node): void;
    /**
     * Removes a node dependence. "from" is no longer dependent on "to".
     * @param from Node instance.
     * @param to  Node instance.
     * @todo Test this function.
     */
    removeDependency(from: Node, to: Node): void;
    /**
     * Get dependency nodes for a Node. (Required nodes for this node to execute).
     * @param node Node instance.
     */
    dependenciesOf(node: Node): Node[];
    /**
     * Get dependents nodes for a Node. (Nodes that require this node to complete).
     * @param node Node instance.
     */
    dependentsOf(node: Node): Node[];
    /**
     * Breadth first search.
     */
    traverse(): Promise<void>;
    /**
     * Clears the value of a node and the values of dependent nodes
     * @param node Node instance.
     */
    clearNodeAndDependents(node: Node): Promise<void>;
    /**
     * Resets the graph by resetting each node in the graph.
     */
    reset(): void;
    /**
     * Prints graph nodes and node dependents.
     */
    ls(): void;
}
