export declare type Scalar = number | string | null;
export declare type MongoFunction = '$has' | '$hasAll' | '$hasAny' | '$notHasAll' | '$notHasAny' | '$notHas';
export declare type SQLFunction = 'has' | 'hasAll' | 'hasAny' | 'notHasAll' | 'notHasAny' | 'notHas';
export declare type MongoOp = '$and' | '$or' | '$lt' | '$gt' | '$lte' | '$gte' | '$eq' | '$ne' | '$in' | '$nin' | '$not' | '$is';
export declare type SQLOp = 'AND' | 'OR' | '<' | '>' | '<=' | '>=' | '=' | '!=' | 'IN' | 'NOT IN' | 'NOT' | 'IS';
export declare type SimpleQuery = {
    $and?: SimpleQuery[];
    $or?: SimpleQuery[];
    $lt?: number | string;
    $gt?: number | string;
    $lte?: number | string;
    $gte?: number | string;
    $eq?: Scalar;
    $ne?: Scalar;
    $in?: Scalar[];
    $nin?: Scalar[];
    $not?: Scalar | SimpleQuery;
    $is?: Scalar | SimpleQuery;
    $has?: Scalar;
    $hasAll?: Scalar | Scalar[];
    $hasAny?: Scalar | Scalar[];
    $notHasAll?: Scalar | Scalar[];
    $notHasAny?: Scalar | Scalar[];
    [key: string]: Scalar | Scalar[] | SimpleQuery | SimpleQuery[] | undefined;
};
export declare type SubQueryOperator = '$inSubquery' | '$ninSubquery';
export declare type SubQueryType = {
    from: string;
    field: string;
    where?: SimpleQuery;
    groupBy?: string;
    having?: string;
};
export declare type SubQuery = {
    [key in SubQueryOperator]?: SubQueryType;
};
export declare type Query = SimpleQuery & SubQuery;
export declare type SubQueryAST = {
    whereAST: ASTTree;
    from: string;
    field: string;
    foreigns?: {
        [key: string]: boolean;
    };
    groupBy?: string;
    having?: string;
};
export declare type ASTSubTree = {
    op?: SQLOp;
    field?: string;
    inSubquery?: SubQueryAST;
    ninSubquery?: SubQueryAST;
    value?: any;
    func?: SQLFunction;
};
export declare type ASTTreeMix = {
    values: ASTTree[];
    op?: SQLOp;
};
export declare type ASTTree = ASTSubTree | ASTSubTree[] | ASTTreeMix | ASTTreeMix[];
export declare type ParseableObj = {
    where: Scalar | Scalar[] | Query | Query[];
    parentField?: string;
    parentOp?: MongoOp;
    parentIsArray?: boolean;
};
export declare type ParsedAST<WhereType, ParentType> = {
    ast: WhereType extends Scalar ? Scalar : ParentType extends '$in' | '$nin' ? Scalar[] : ASTTree;
    foreigns?: {
        [key: string]: boolean;
    };
};
export declare const parseObjToAST: ({ where, parentField, parentOp, parentIsArray }: ParseableObj) => ParsedAST<string | number | Scalar[] | Query | Query[] | null, "$and" | "$or" | "$lt" | "$gt" | "$lte" | "$gte" | "$eq" | "$ne" | "$in" | "$nin" | "$not" | "$is" | undefined>;
export declare const convertASTToSQL: (ast: ASTTree) => string;
export declare const objToSQL: (where: Query) => string;
