/**
 * @packageDocumentation
 * @module utils
 */
export declare const reduceTrees: (subtreeKey: string) => <T extends Tree, R>(fn: TreeReducer<T, R>) => (seed: R) => (trees: T[]) => R;
export declare const mapTrees: (subtreeKey: string) => <T extends Tree, R extends Tree>(fn: TreeMapper<T, R>) => (trees: T[]) => R[];
export declare const filterTrees: (subtreeKey: string) => <T extends Tree>(fn: TreeFilter<T>) => (trees: T[]) => T[];
export declare const findPath: (subtreeKey: string) => <T extends Tree>(fn: TreeFilter<T>) => (trees: T[]) => T[];
export declare const firstPath: (subtreeKey: string) => <T extends Tree>(trees: T[]) => T[];
export declare function setNode<T extends Tree>(subtreeKey: string, path: number[], source: T[], target: T): T[];
export interface Tree {
    [key: string]: Tree[];
}
export declare type TreeReducer<T extends Tree, R> = (acc: R, currentNode: T, parents: T[], path: number[]) => R;
export declare type TreeMapper<T extends Tree, R extends Tree> = (tree: T, parents: T[], path: number[]) => R;
export declare type TreeFilter<T extends Tree> = (tree: T, parents: T[], path: number[]) => boolean;
