declare type TraverserCallback = (node: Node, depth?: number) => boolean | void;
export interface Node<T = unknown> {
    key: string;
    value?: T;
    parents: Set<Node>;
    children: Set<Node>;
    traverseChildren: (cb: TraverserCallback, depth?: number) => boolean;
    traverseParents: (cb: TraverserCallback) => boolean;
}
export declare const createNode: <T = unknown>(key: string, parents: Array<Node>, value?: T | undefined) => Node<T>;
export interface Tree {
    add: <T>(key: string, parent: Node | Node[] | null, value?: T) => Node<T>;
    get: <T = unknown>(key: string) => Node<T>;
    has: (key: string) => boolean;
    getRoots: () => Node[];
    traverseRoots: (cb: TraverserCallback) => boolean;
    dump: () => Tree;
}
export declare const createTree: () => Tree;
export {};
