import { Where } from '@loopback/filter'; import { Entity, juggler } from '@loopback/repository'; import { Knex } from 'knex'; import { PickKeys } from 'ts-essentials'; import { QueryFilter, QueryWhere } from '../../../filter'; import { Orm } from '../../../orm'; import { QuerySession } from '../../../session'; import { EntityClass, WhereExprKey, WhereValue } from '../../../types'; import { ClauseResolver } from '../clause'; import { Directive, FieldOperators } from '../types'; export type OperatorHandler = (this: WhereResolver, qb: Knex.QueryBuilder, condition: Condition, session: QuerySession) => void; interface Condition { directive?: Directive; op: string; key: KEY; value: WhereValue; params?: WhereValue[]; expression: unknown; } type RawCondition = Condition; export declare class OperatorHandlerRegistry { readonly handlers: { [key: string]: OperatorHandler; }; constructor(); init(): void; register(operator: FieldOperators, handler: OperatorHandler): void; get(operator: string): OperatorHandler; eq(): OperatorHandler; neq(): OperatorHandler; comparison(operator: string): OperatorHandler; not(): OperatorHandler; whereForArrayValue(op: PickKeys): OperatorHandler; whereLike(op: PickKeys, ignoreEmptyArray?: boolean): OperatorHandler; logical(op: 'where' | 'orWhere'): OperatorHandler; } export declare const DefaultOperatorHandlerRegistry: OperatorHandlerRegistry; export declare class WhereResolver extends ClauseResolver { registry: OperatorHandlerRegistry; constructor(entityClass: EntityClass, orm: Orm | juggler.DataSource, registry?: OperatorHandlerRegistry); resolve(qb: Knex.QueryBuilder, filter: QueryFilter | Where, session: QuerySession): void; build(qb: Knex.QueryBuilder, where: QueryWhere, session: QuerySession): void; protected invoke(qb: Knex.QueryBuilder, rawCondition: RawCondition, session: QuerySession): void; protected resolveCondition(condition: RawCondition, session: QuerySession): Condition; protected resolveKey(key: string, session: QuerySession): string; } export {};