import { TransactionT } from '../../core/transaction';
export interface WherePGStatement {
    $any: Array<string | number>;
    $all: Array<string | number>;
}
export declare type WhereLogic = Partial<{
    $ne: string | number | WhereLogic;
    $in: Array<string | number>;
    $not: boolean | string | number;
    $notIn: Array<string | number>;
    $gte: number | string | Date;
    $gt: number | string | Date;
    $lte: number | string | Date;
    $lt: number | string | Date;
    $like: string | WherePGStatement;
    $iLike: string | WherePGStatement;
    $ilike: string | WherePGStatement;
    $notLike: string | WherePGStatement;
    $notILike: string | WherePGStatement;
    $between: [number, number];
    "..": [number, number];
    $notBetween: [number, number];
    "!..": [number, number];
    $overlap: [number, number];
    "&&": [number, number];
    $contains: any;
    "@>": any;
    $contained: any;
    "<@": any;
}>;
export declare type WhereClauseSimpleValue<T> = T | null;
export declare type WhereClauseComplexValue<T> = {
    $not: WhereClauseSimpleValue<T>;
} | {
    $in: WhereClauseSimpleValue<T>[];
} | {
    $notIn: WhereClauseSimpleValue<T>[];
} | {
    $gt: T;
} | {
    $gte: T;
} | {
    $lt: T;
} | {
    $lte: T;
} | {
    $between: [T, T];
} | {
    $notBetween: [T, T];
} | {
    $like: string;
} | WhereClauseT<T>;
export declare type WhereClauseValueT<T> = WhereClauseSimpleValue<T> | WhereClauseComplexValue<T>;
export declare type WhereClauseT<T> = {
    [K in keyof (T)]?: WhereClauseValueT<T[K]>;
} & {
    $and?: WhereClauseT<T>[];
    $or?: WhereClauseT<T>[];
};
export declare type WhereOptions<T> = WhereClauseT<T>;
export declare type IncludeClauseT<T> = string[];
export declare type OrderingT<T> = [keyof (T), 'ASC' | 'DESC'];
export declare type OrderClauseT<T> = OrderingT<T>[];
export declare type QueryT<T> = {
    where?: WhereClauseT<T>;
    include?: IncludeClauseT<T>;
    order?: OrderClauseT<T>;
    limit?: number;
    offset?: number;
    transaction?: TransactionT;
};
export declare type DefaultsClauseT<T> = {
    [K in keyof (T)]: T[K] | null;
};
export interface FindOrCreateQueryT<T> extends QueryT<T> {
    defaults?: DefaultsClauseT<T>;
}
export declare type CountQueryT<T> = {
    where?: WhereClauseT<T>;
    include?: IncludeClauseT<T>;
    transaction?: TransactionT;
};
export declare type DestroyQueryT<T> = {
    where?: WhereClauseT<T>;
    limit?: number;
};
