import type { CypherEnvironment } from "../Environment";
import type { Variable } from "../references/Variable";
import type { Expr } from "../types";
import { Clause } from "./Clause";
import type { Create } from "./Create";
import type { Merge } from "./Merge";
import { WithCreate } from "./mixins/clauses/WithCreate";
import { WithMerge } from "./mixins/clauses/WithMerge";
import { WithReturn } from "./mixins/clauses/WithReturn";
import { WithWith } from "./mixins/clauses/WithWith";
import { WithDelete } from "./mixins/sub-clauses/WithDelete";
import { WithSetRemove } from "./mixins/sub-clauses/WithSetRemove";
export interface Foreach extends WithWith, WithReturn, WithSetRemove, WithDelete, WithCreate, WithMerge {
}
/**
 * Valid Clauses to be used inside {@link Foreach}
 * @group Clauses */
export type ForeachClauses = Foreach | Create | Merge;
/**
 * @see {@link https://neo4j.com/docs/cypher-manual/current/clauses/foreach/ | Cypher Documentation}
 * @group Clauses
 */
export declare class Foreach extends Clause {
    private readonly variable;
    private listExpr;
    private mapClause;
    constructor(variable: Variable);
    /** @deprecated Use `in` and `do` instead of passing the constructor */
    constructor(variable: Variable, listExpr: Expr, mapClause: ForeachClauses);
    in(listExpr: Expr): this;
    do(mapClause: ForeachClauses): this;
    /** @internal */
    getCypher(env: CypherEnvironment): string;
}
