import * as t from '@babel/types'; export declare type NodeType = type extends keyof t.Aliases ? t.Aliases[type] : Extract; export declare type SimpleFunction = (node: NodeType, state: TState) => void; export declare type SimpleVisitors = { [key in keyof t.Aliases | t.Node['type']]?: SimpleFunction | { enter?: SimpleFunction; exit?: SimpleFunction; }; }; export declare function simple(visitors: SimpleVisitors): (node: t.Node, state: TState) => void; export declare type AncestorFunction = (node: NodeType, state: TState, ancestors: t.Node[]) => void; export declare type AncestorVisitor = { [key in keyof t.Aliases | t.Node['type']]?: AncestorFunction | { enter?: AncestorFunction; exit?: AncestorFunction; }; }; export declare function ancestor(visitors: AncestorVisitor): (node: t.Node, state: TState) => void; export declare type RecursiveVisitors = { [key in keyof t.Aliases | t.Node['type']]?: (node: NodeType, state: TState, recurse: (node: t.Node) => void) => void; }; export declare function recursive(visitors: RecursiveVisitors): (node: t.Node, state: TState) => void;