export type TraversalNode<V = unknown> = {
    property: string;
    value: V;
    level: number;
    parent: TraversalNode<V> | undefined;
};
export type TraversalVisit<V = unknown, R = unknown> = (node: TraversalNode<V>) => R;
export type TraversalDequeue<V = unknown> = (q: Array<TraversalNode<V>>) => TraversalNode<V>;
export type TraversalEnqueue<V = unknown, R = unknown> = (node: TraversalNode<V>, q: Array<TraversalNode<V>>, visitResult: R) => void;
export type TraversalOptions<V = unknown, R = unknown> = {
    visit: TraversalVisit<V, R>;
    dequeue: TraversalDequeue<V>;
    enqueue: TraversalEnqueue<V, R>;
};
export declare const makeSubnodes: (node: TraversalNode) => TraversalNode[];
export declare const shouldContinue: (visitResult: unknown) => boolean;
export type TraversalOrder = 'breadth' | 'depth';
export declare const DEFAULT_TRAVERSALS: Record<TraversalOrder, {
    dequeue: TraversalDequeue;
    enqueue: TraversalEnqueue;
}>;
/**
 * Generic tree traversal.
 */
export declare const traverse: <V = unknown, R = unknown>(root: V, { visit, dequeue, enqueue }: TraversalOptions<V, R>) => void;
export declare const traverseObjectDepthFirst: (root: unknown, visit: TraversalVisit) => void;
export declare const traverseObjectBreadthFirst: (root: unknown, visit: TraversalVisit) => void;
//# sourceMappingURL=traverse.d.ts.map