import { WalkNode } from "./node"; export type NodeType = 'array' | 'object' | 'value'; export type GraphMode = 'finiteTree' | 'tree' | 'graph' | 'infinite'; export type CallbackTiming = 'preVisit' | 'postVisit' | 'both'; export type TraversalMode = 'depth' | 'breadth'; export type OneOrMany = T | T[]; export type NodePathSegmentFormatter = (node: WalkNode) => string; export type CallbackFn = (node: WalkNode) => void; export type AsyncCallbackFn = CallbackFn | ((node: WalkNode) => Promise); export type NodeFilterFn = (node: WalkNode) => boolean; export type NodeVisitationRegister = { registerObjectVisit: (node: WalkNode) => void; objectHasBeenSeen: (node: WalkNode) => boolean; }; export declare const isMany: (p: OneOrMany) => p is T[]; export declare const asMany: (p: OneOrMany) => T[]; export type Context = { config: Config; callbacksByPosition: { [key: string]: Callback[]; }; }; export type Callback = { executionOrder: number; timing: CallbackTiming; filters: OneOrMany; callback: T; }; export type Config = { traversalMode: TraversalMode; onVisit: OneOrMany>; graphMode: GraphMode; parallelizeAsyncCallbacks: boolean; visitationRegister: NodeVisitationRegister; trackExecutedCallbacks: boolean; }; export type PartialConfig = Partial, 'onVisit'>> & { onVisit?: OneOrMany>>; };