/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

export declare class Node<T> {
	readonly key: string;
	readonly data: T;
	readonly incoming: Map<string, Node<T>>;
	readonly outgoing: Map<string, Node<T>>;
	constructor(key: string, data: T);
}
export declare class Graph<T> {
	private readonly _hashFn;
	private readonly _nodes;
	constructor(_hashFn: (element: T) => string);
	roots(): Node<T>[];
	insertEdge(from: T, to: T): void;
	removeNode(data: T): void;
	lookupOrInsertNode(data: T): Node<T>;
	lookup(data: T): Node<T> | undefined;
	isEmpty(): boolean;
	toString(): string;
	/**
	 * This is brute force and slow and **only** be used
	 * to trouble shoot.
	 */
	findCycleSlow(): string | undefined;
	private _findCycle;
}
