@aggregion/mongo-like-query-to-sql
Version:
Mongo-like to SQL query converter
76 lines (75 loc) • 2.76 kB
TypeScript
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;