export type Filter = LogicalOperator | FieldFilter; export type LogicalOperator = AndOperator | OrOperator | NotOperator; export type AndOperator = { $and: Filter[]; }; export type OrOperator = { $or: Filter[]; }; type NotOperator = { $not: Filter; }; export type FieldFilter = { [fieldName: string]: FieldOperator; }; type FieldOperator = EqOperator | NeOperator | GeOperator | GtOperator | LeOperator | LtOperator | StartsWithOperator | EndsWithOperator | ContainsOperator | HasSomeOperator | HasAllOperator | InOperator | ExistsOperator; type EqOperator = T | null; type NeOperator = { $ne: T; }; type GeOperator = { $gte: T; }; type GtOperator = { $gt: T; }; type LeOperator = { $lte: T; }; type LtOperator = { $lt: T; }; type StartsWithOperator = { $startsWith: T; }; type EndsWithOperator = { $endsWith: T; }; type ContainsOperator = { $contains: T; }; type HasSomeOperator = { $hasSome: T[]; }; type HasAllOperator = { $hasAll: T[]; }; type InOperator = { $in: T[]; }; type ExistsOperator = { $exists: boolean; }; export declare function isLogicalOperator(filter: Filter): filter is LogicalOperator; export declare function isAndOperator(filter: Filter): filter is AndOperator; export declare function isOrOperator(filter: Filter): filter is OrOperator; export declare function isNotOperator(filter: Filter): filter is NotOperator; export declare function and(a?: Filter, b?: Filter): Filter | undefined; export declare function or(a?: Filter, b?: Filter): Filter | undefined; export declare function not(a?: Filter): Filter | undefined; export {};