import type { ESTree } from "meriyah";
export type NodeCounterFilterCallback<T extends ESTree.Node> = (node: T) => boolean;
export type NodeCounterMatchCallback<T extends ESTree.Node> = (node: T, nc: NodeCounter<T>) => void;
export interface NodeCounterOptions<T extends ESTree.Node> {
    name?: string;
    filter?: NodeCounterFilterCallback<T>;
    match?: NodeCounterMatchCallback<T>;
}
export declare class NodeCounter<T extends ESTree.Node = ESTree.Node> {
    #private;
    type: string;
    name: string;
    lookup: string | null;
    /**
     * @example
     * new NodeCounter("FunctionDeclaration");
     * new NodeCounter("VariableDeclaration[kind]");
     */
    constructor(type: string, options?: NodeCounterOptions<T>);
    get count(): number;
    get properties(): Record<string, number>;
    walk(node: ESTree.Node): void;
}
//# sourceMappingURL=NodeCounter.d.ts.map