UNPKG

@aggregion/mongo-like-query-to-sql

Version:
76 lines (75 loc) 2.76 kB
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;