import { types as t } from "@marko/compiler";
export declare const skip: unique symbol;
type VisitValue = null | void | t.Node | t.Node[];
type VisitKeys<T> = (string | number) & (T extends T ? {
    [K in keyof T]: T[K] extends VisitValue ? K : never;
}[keyof T] : never);
export declare function traverseReplace<T, K extends VisitKeys<T>, S>(container: T, key: K, enter: (node: t.Node, state?: S) => t.Node | void, state?: S): void;
export declare function traverseContains(node: undefined | null | t.Node | t.Node[], check: (node: t.Node) => void | boolean | typeof skip): boolean;
export declare function traverse(visit: (node: t.Node, parent?: t.Node, grandParent?: t.Node) => void | typeof skip, node: undefined | t.Node | t.Node[], parent?: t.Node, grandParent?: t.Node): void;
export {};
