import { Factory, FactoryNode, FactoryNodeClass } from './Factory.js'; export interface VisitorNode> extends FactoryNode { childNodes?: N[]; } export type VisitorFunction> = (visitor: Factory>, node: N, ...args: any[]) => any; export interface Visitor> { visitTree(tree: N, ...args: any[]): any; visitNode(node: N, ...args: any[]): any; visitDefault(node: N, ...args: any[]): any; setNodeHandler(kind: string, handler: VisitorFunction): void; removeNodeHandler(kind: string): void; [property: string]: any; } export declare abstract class AbstractVisitor> implements Visitor { protected nodeHandlers: Map>; protected static methodName(kind: string): string; constructor(factory: Factory>); visitTree(tree: N, ...args: any[]): any; visitNode(node: N, ...args: any[]): any; visitDefault(node: N, ...args: any[]): void; setNodeHandler(kind: string, handler: VisitorFunction): void; removeNodeHandler(kind: string): void; }