import type * as ASTv1 from '../v1/api'; import type { VisitorKey } from '../v1/visitor-keys'; import type WalkerPath from './path'; export interface FullNodeTraversal { enter?(node: N, path: WalkerPath): void; exit?(node: N, path: WalkerPath): void; keys?: KeysVisitor; } export type NodeHandler = (node: N, path: WalkerPath) => ASTv1.Node | ASTv1.Node[] | undefined | void; export type NodeTraversal = FullNodeTraversal | NodeHandler; export type NodeVisitor = { [P in keyof ASTv1.Nodes]?: NodeTraversal; } & { All?: NodeTraversal; /** * @deprecated use Template or Block instead */ Program?: NodeTraversal; }; export interface FullKeyTraversal { enter?(node: N, key: K): void; exit?(node: N, key: K): void; } export type KeyHandler> = (node: N, key: K) => void; export type KeyTraversal> = FullKeyTraversal | KeyHandler; export type KeysVisitor = { [P in VisitorKey]?: KeyTraversal; } & { All?: KeyTraversal>; /** * @deprecated use Template or Block instead */ Program?: KeyTraversal; };