UNPKG

@synstack/query

Version:
41 lines (37 loc) 1.73 kB
import { z } from 'zod/v4'; type BasePredicates<PREDICATES = never> = { and: BasePredicates<PREDICATES>[]; } | { or: BasePredicates<PREDICATES>[]; } | { not: BasePredicates<PREDICATES>; } | { always: true; } | { never: true; } | PREDICATES; interface QueryPredicate<NAME extends string, PARAMS, INPUT = unknown> { name: NAME; schema: z.ZodType<{ [key in NAME]: PARAMS; }>; handler: (params: PARAMS) => (content: INPUT) => boolean; } declare class QueryEngine<PREDICATES = never, INPUT = never> { private predicates; private _schema; protected constructor(predicates: Array<QueryPredicate<string, any, INPUT>>); static default<INPUT = never>(): QueryEngine<never, INPUT>; static addPredicate<NAME extends string, PARAM, INPUT>(name: NAME, params: z.ZodType<PARAM>, handler: (params: PARAM) => (input: INPUT) => boolean): QueryEngine<{ [n in NAME]: PARAM; }, INPUT>; addPredicate<NAME extends string, PARAM>(name: NAME, params: z.ZodType<PARAM>, handler: (params: PARAM) => (input: INPUT) => boolean): QueryEngine<PREDICATES | { [n in NAME]: PARAM; }, INPUT>; get schema(): z.ZodType<BasePredicates<PREDICATES>, unknown, z.core.$ZodTypeInternals<BasePredicates<PREDICATES>, unknown>>; get jsonSchema(): z.core.JSONSchema.JSONSchema; match(query: unknown, input: INPUT, options?: { skipQueryValidation?: boolean; }): boolean; } declare namespace QueryEngine { type InferInput<T extends QueryEngine<any, any>> = T extends QueryEngine<any, infer INPUT> ? INPUT : never; type InferQuery<T extends QueryEngine<any, any>> = T extends QueryEngine<infer PREDICATES, any> ? BasePredicates<PREDICATES> : never; } export { QueryEngine };