export type SupportedTypes = Array; export type KeyOrValue = T & T[0]; export type ElemMatch = { [P in keyof T]?: SiftQuery; } export type Query = { $eq?: T[0]; $ne?: T[0]; $or?: Array>; $gt?: T[0]; $gte?: T[0]; $lt?: T[0]; $lte?: T[0]; $mod?: number[]; $in?: Array>; $nin?: Array>; $not?: SiftQuery; $type?: any; $all?: Array>; $size?: number; $nor?: Array>; $and?: Array>; $regex?: RegExp | string; $elemMatch?: ExternalQuery; $exists?: boolean; $where?: string | WhereFn; $options?: "i" | "g" | "m" | "u"; } export interface InternalQuery extends Query { } export type ExternalQuery = ElemMatch; export type WhereFn = (this: T[0], value: T[0], index: number, array: T) => boolean; export type FilterFn = (value: T, index?: number, array?: T[]) => boolean; export type SiftQuery = ExternalQuery & InternalQuery; export type PluginDefinition = { [index: string]: (a: T, b: T) => boolean | number; } export type PluginFunction = (sift: Sift) => PluginDefinition; export type Exec = (array: T) => T; export interface Sift { (query: RegExp, target: T, rawSelector?: any): T; (query: SiftQuery, rawSelector: (item: T) => boolean): Exec; (query: SiftQuery): FilterFn; (query: SiftQuery, target: T, rawSelector?: any): T; indexOf(query: SiftQuery, target: T, rawSelector?: any): number; compare(a: T, b: K): 0 | -1 | 1; } declare const Sift: Sift export default Sift