import { Extract } from 'cosmokit'; import { Eval } from './eval.ts'; import { AtomicTypes, Comparable, Flatten, Indexable, RegExpLike, Values } from './utils.ts'; import { Selection } from './selection.ts'; export type Query = Query.Expr> | Query.Shorthand | Selection.Callback; export declare namespace Query { export interface FieldExpr { $or?: Field[]; $and?: Field[]; $not?: Field; $exists?: boolean; $in?: Extract; $nin?: Extract; $eq?: Extract; $ne?: Extract; $gt?: Extract; $gte?: Extract; $lt?: Extract; $lte?: Extract; $el?: T extends (infer U)[] ? Field : never; $size?: Extract; $regex?: Extract; $regexFor?: Extract; $bitsAllClear?: Extract; $bitsAllSet?: Extract; $bitsAnyClear?: Extract; $bitsAnySet?: Extract; $some?: T extends (infer U)[] ? Query : never; $none?: T extends (infer U)[] ? Query : never; $every?: T extends (infer U)[] ? Query : never; } export interface LogicalExpr { $or?: Expr[]; $and?: Expr[]; $not?: Expr; /** @deprecated use query callback instead */ $expr?: Eval.Term; } export type Shorthand = Extract | Extract | Extract; export type Field = FieldExpr | Shorthand; type NonNullExpr = T extends Values | any[] ? Field : T extends object ? Expr> | Selection.Callback : Field; export type Expr = LogicalExpr & { [K in keyof T]?: (undefined extends T[K] ? null : never) | NonNullExpr>; }; export {}; } export declare function executeQuery(data: any, query: Query.Expr, ref: string, env?: any): boolean;