import Cypher from "@neo4j/cypher-builder";
import type { ConcreteEntityAdapter } from "../../../../schema-model/entity/model-adapters/ConcreteEntityAdapter";
import { RelationshipAdapter } from "../../../../schema-model/relationship/model-adapters/RelationshipAdapter";
import { QueryASTContext } from "../QueryASTContext";
import type { QueryASTNode } from "../QueryASTNode";
import type { AggregationField } from "../fields/aggregation-fields/AggregationField";
import type { Filter } from "../filters/Filter";
import type { AuthorizationFilters } from "../filters/authorization-filters/AuthorizationFilters";
import type { EntitySelection } from "../selection/EntitySelection";
import type { OperationTranspileResult } from "./operations";
import { Operation } from "./operations";
export declare class AggregationOperation extends Operation {
    readonly entity: ConcreteEntityAdapter | RelationshipAdapter;
    private selection;
    protected directed: boolean;
    fields: AggregationField[];
    nodeFields: AggregationField[];
    edgeFields: AggregationField[];
    protected authFilters: AuthorizationFilters[];
    aggregationProjectionMap: Cypher.Map;
    protected filters: Filter[];
    constructor({ entity, directed, selection, }: {
        entity: ConcreteEntityAdapter | RelationshipAdapter;
        directed?: boolean;
        selection: EntitySelection;
    });
    setFields(fields: AggregationField[]): void;
    addFilters(...filters: Filter[]): void;
    addAuthFilters(...filter: AuthorizationFilters[]): void;
    getChildren(): QueryASTNode[];
    setNodeFields(fields: AggregationField[]): void;
    setEdgeFields(fields: AggregationField[]): void;
    transpile(context: QueryASTContext): OperationTranspileResult;
    protected getAuthFilterPredicate(context: QueryASTContext): Cypher.Predicate[];
    protected getFieldProjectionClause(target: Cypher.Variable, returnVariable: Cypher.Variable, field: AggregationField): Cypher.Clause;
    private getPattern;
    private createContext;
    private transpileAggregation;
    private getPredicates;
    private getValidations;
    private createSubquery;
}
//# sourceMappingURL=AggregationOperation.d.ts.map