import { StringIndexable } from "../util"; import { AnyEntityMetadata } from "../metadata"; /** * Describes criteria entities processed by a query must adhere to. * * Immutable */ export declare class Filter { readonly criteria: Filter.Criteria; readonly length: number; constructor(criteria: Filter.Criteria); /** * Reduces another filter by reducing common (i.e. pointing to the same property) criteria. * * Returns null if the given filter is completely reduced, otherwise a new filter where one criteria has been partially reduced. * * Throws if the filters have a common criteria with incompatible value types. */ reduce(other: Filter): Filter | null; filter(items: T[]): T[]; private _itemMatches(item); toDtoFormat(metadata: AnyEntityMetadata): Filter; toEntityFormat(metadata: AnyEntityMetadata): Filter; } export declare module Filter { interface BooleanEqualityCriterion { op: "==" | "!="; type: "bool"; value: boolean | null; } interface NumberEqualityCriterion { op: "==" | "!="; type: "number"; value: number | null; } interface StringEqualityCriterion { op: "==" | "!="; type: "string"; value: string | null; } interface GuidEqualityCriterion { op: "==" | "!="; type: "guid"; value: string | null; } interface DateEqualityCriterion { op: "==" | "!="; type: "date"; value: Date | null; } type EqualityCriterion = BooleanEqualityCriterion | NumberEqualityCriterion | StringEqualityCriterion | GuidEqualityCriterion | DateEqualityCriterion; interface BooleanMemberCriterion { op: "in" | "not-in"; type: "bool"; values: Set; } interface NumberMemberCriterion { op: "in" | "not-in"; type: "number"; values: Set; } interface StringMemberCriterion { op: "in" | "not-in"; type: "string"; values: Set; } interface GuidMemberCriterion { op: "in" | "not-in"; type: "guid"; values: Set; } type MemberCriterion = BooleanMemberCriterion | NumberMemberCriterion | StringMemberCriterion | GuidMemberCriterion; interface BooleanSetCriterion { op: "common"; type: "bool"; values: Set; } interface NumberSetCriterion { op: "common"; type: "number"; values: Set; } interface StringSetCriterion { op: "common"; type: "string"; values: Set; } interface GuidSetCriterion { op: "common"; type: "guid"; values: Set; } type SetCriterion = BooleanSetCriterion | NumberSetCriterion | StringSetCriterion | GuidSetCriterion; interface NumberPointCriterion { op: "<" | "<=" | ">" | ">="; type: "number"; value: number; step: number; } interface StringPointCriterion { op: "<" | "<=" | ">" | ">="; type: "string"; value: string; } interface DatePointCriterion { op: "<" | "<=" | ">" | ">="; type: "date"; value: Date; } type PointCriterion = NumberPointCriterion | StringPointCriterion | DatePointCriterion; interface NumberRangeCriterion { op: "from-to"; type: "number"; range: [number, number]; step: number; } interface StringRangeCriterion { op: "from-to"; type: "string"; range: [string, string]; } interface DateRangeCriterion { op: "from-to"; type: "date"; range: [Date, Date]; } type RangeCriterion = NumberRangeCriterion | StringRangeCriterion | DateRangeCriterion; type SingleValueCriterion = EqualityCriterion | PointCriterion; type Criterion = EqualityCriterion | PointCriterion | MemberCriterion | SetCriterion | RangeCriterion; type Operations = Criterion["op"]; type SingleValueOperations = SingleValueCriterion["op"]; type Types = Criterion["type"]; type BooleanCriterion = BooleanEqualityCriterion | BooleanMemberCriterion | BooleanSetCriterion; type NumberCriterion = NumberEqualityCriterion | NumberPointCriterion | NumberMemberCriterion | NumberSetCriterion | NumberRangeCriterion; type StringCriterion = StringEqualityCriterion | StringPointCriterion | StringMemberCriterion | StringSetCriterion | StringRangeCriterion; type GuidCriterion = GuidEqualityCriterion | GuidMemberCriterion | GuidSetCriterion; type DateCriterion = DateEqualityCriterion | DatePointCriterion | DateRangeCriterion; interface Criteria { [property: string]: Criterion; } function isMemberCriterion(criterion: Criterion): criterion is MemberCriterion; function isSetCriterion(criterion: Criterion): criterion is SetCriterion; function isRangeCriterion(criterion: Criterion): criterion is RangeCriterion; function isPointCriterion(criterion: Criterion): criterion is PointCriterion; function isNull(type: Types): EqualityCriterion; function notNull(type: Types): EqualityCriterion; function equals(value: boolean): BooleanEqualityCriterion; function equals(value: number): NumberEqualityCriterion; function equals(value: string): StringEqualityCriterion; function equals(value: Date): DateEqualityCriterion; function notEquals(value: boolean): BooleanEqualityCriterion; function notEquals(value: number): NumberEqualityCriterion; function notEquals(value: string): StringEqualityCriterion; function notEquals(value: Date): DateEqualityCriterion; function less(value: number, step?: number): NumberPointCriterion; function less(value: string): StringPointCriterion; function less(value: Date): DatePointCriterion; function lessEquals(value: number, step?: number): NumberPointCriterion; function lessEquals(value: string): StringPointCriterion; function lessEquals(value: Date): DatePointCriterion; function greater(value: number, step?: number): NumberPointCriterion; function greater(value: string): StringPointCriterion; function greater(value: Date): DatePointCriterion; function greaterEquals(value: number, step?: number): NumberPointCriterion; function greaterEquals(value: string): StringPointCriterion; function greaterEquals(value: Date): DatePointCriterion; function inRange(from: number, to: number, step?: number): NumberRangeCriterion; function inRange(from: string, to: string): StringRangeCriterion; function inRange(from: Date, to: Date): DateRangeCriterion; function memberOf(values: Iterable): BooleanMemberCriterion; function memberOf(values: Iterable): NumberMemberCriterion; function memberOf(values: Iterable): StringMemberCriterion; function notMemberOf(values: Iterable): BooleanMemberCriterion; function notMemberOf(values: Iterable): NumberMemberCriterion; function notMemberOf(values: Iterable): StringMemberCriterion; }