import { Filter, ShortHandEqualType } from '@loopback/filter'; import { KeyOf, Operators, PredicateComparison } from '@loopback/filter/src/query'; import { AnyObject } from '@loopback/repository'; export type ExprVar = any; export type NullablePredicateComparison = Omit, 'eq' | 'neq'> & { eq?: PT | null; neq?: PT | null; }; /** * Condition clause * * @example * ```ts * { * name: {inq: ['John', 'Mary']}, * status: 'ACTIVE', * age: {gte: 40} * } * ``` */ export type QueryCondition = { [P in KeyOf]?: NullablePredicateComparison | (MT[P] & ShortHandEqualType) | null; } | Record | ShortHandEqualType | null>; export type QueryWhere = QueryCondition | QueryAndClause | QueryOrClause | ExprClause | JoinClause; export type ExprClause = { $expr: { [op in Operators]?: [ExprVar, ExprVar]; }; }; export type JoinClause = { $join: string | string[]; }; /** * And clause * * @example * ```ts * { * and: [...], * } * ``` */ export interface QueryAndClause { and: QueryWhere[]; } /** * Or clause * * @example * ```ts * { * or: [...], * } * ``` */ export interface QueryOrClause { or: QueryWhere[]; } export type QueryFilter = Omit, 'where'> & { where?: QueryWhere; };