import { IEnumerable, IQueryable } from '../../collections';
import { IGenQLClient } from '../../collections/graphql/graphql-queryable';
type SelectResult<TModel, TSelectInput> = TSelectInput extends Record<string, any> ? {
    [K in keyof TSelectInput as TSelectInput[K] extends true ? K : never]: K extends keyof TModel ? TModel[K] : never;
} : TSelectInput;
export declare class GraphQLUnifiedBuilder<TModel = unknown, TSelect = TModel, TWhereInput = any, TOrderByInput = any, TInclude = any, TSelectInput = any, TCreateInput = any, TUpdateInput = any, TWhereUniqueInput = any> {
    private readonly queryBuilder;
    private readonly mutationBuilder;
    constructor(genqlClient: IGenQLClient, queryOperationName: string, mutationOperationNames: {
        create: string;
        createMany?: string;
        update: string;
        updateMany?: string;
        upsert?: string;
        delete: string;
        deleteMany?: string;
    }, operationType?: 'query' | 'mutation' | 'subscription');
    factory: () => GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    Where(where: TWhereInput): this;
    Select<TSelectFields extends TSelectInput>(select: TSelectFields): GraphQLUnifiedBuilder<TModel, SelectResult<TModel, TSelectFields>, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    Include(include: TInclude): this;
    OrderBy(orderBy: TOrderByInput): this;
    Take(n: number): this;
    Skip(n: number): this;
    ToEnumerable(): Promise<IEnumerable<TSelect>>;
    ToArray(): Promise<TSelect[]>;
    First(): Promise<TSelect | null>;
    FirstOrDefault(): Promise<TSelect | undefined>;
    Single(): Promise<TSelect | null>;
    Count(): Promise<number>;
    Exists(): Promise<boolean>;
    Any(): Promise<boolean>;
    Min(field: string): Promise<any>;
    Max(field: string): Promise<any>;
    Sum(field: string): Promise<number>;
    Avg(field: string): Promise<number>;
    Project<TResult>(selector: (item: TSelect) => TResult): Promise<IEnumerable<TResult>>;
    Create(data: TCreateInput): Promise<TModel>;
    CreateMany(data: TCreateInput[]): Promise<{
        count: number;
    } | TModel[]>;
    Update(where: TWhereUniqueInput, data: TUpdateInput): Promise<TModel>;
    UpdateMany(where: TWhereInput, data: TUpdateInput): Promise<{
        count: number;
    }>;
    Upsert(where: TWhereUniqueInput, create: TCreateInput, update: TUpdateInput): Promise<TModel>;
    Delete(where: TWhereUniqueInput): Promise<TModel>;
    DeleteMany(where: TWhereInput): Promise<{
        count: number;
    }>;
    BulkUpsert(records: Array<{
        where: TWhereUniqueInput;
        create: TCreateInput;
        update: TUpdateInput;
    }>): Promise<TModel[]>;
    ExecuteCustomMutation(operationName: string, args: any, selection?: any): Promise<any>;
    ExecuteBatch(mutations: Array<{
        operationName: string;
        args: any;
        selection?: any;
    }>): Promise<any[]>;
    AsQueryable(): IQueryable<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    ContextFactory(): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    Fresh(): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    New(): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    Subscribe(): AsyncIterable<TSelect>;
    AsAsyncEnumerable(): import("../../collections").IAsyncEnumerable<TSelect>;
    WhereEquals(field: keyof TModel, value: any): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereContains(field: keyof TModel, value: string): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereStartsWith(field: keyof TModel, value: string): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereEndsWith(field: keyof TModel, value: string): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereIn(field: keyof TModel, values: any[]): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereNotIn(field: keyof TModel, values: any[]): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereGreaterThan(field: keyof TModel, value: any): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereGreaterThanOrEqual(field: keyof TModel, value: any): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereLessThan(field: keyof TModel, value: any): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereLessThanOrEqual(field: keyof TModel, value: any): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereBetween(field: keyof TModel, min: any, max: any): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereNull(field: keyof TModel): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereNotNull(field: keyof TModel): GraphQLUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
}
export {};
