@querykitjs/zod
v2.0.0
Published
Zod schemas that validate the querykit request contract (filters, sort, pagination) — types stay in sync with @querykitjs/core.
Maintainers
Readme
English · O'zbekcha
@querykitjs/zod
querykit so'rov kontraktini (filter/sort/pagination) tekshiruvchi zod schema'lar. Operatorlar
@querykitjs/coredan;z.inferchiqishi core tiplariga mos.
Backend list endpoint'lariga kelayotgan JSON body'ni validatsiya qiladi — to'liq operatorlar to'plami, nested and/or/not filter, va uchala paginatsiya (offset/infinite/cursor). Validatsiyalangan payload'ni to'g'ridan-to'g'ri querykit repository'ga uzatasiz.
O'rnatish
bun add @querykitjs/zod zod
# @querykitjs/core avtomatik keladi (dependency); zod — peerFoydalanish (Hono misol)
import { sValidator } from "@hono/zod-validator";
import { offsetParamsSchema } from "@querykitjs/zod";
import { buyersRepository } from "@/db/repositories/buyers.repository";
buyersRoute.post("/list", sValidator("json", offsetParamsSchema), async ctx => {
const params = ctx.req.valid("json"); // validatsiyalangan + core-mos
const { data, meta } = await buyersRepository.findList(params);
return ctx.json({ data, meta });
});Infinite/cursor uchun infiniteParamsSchema / cursorParamsSchema.
Nimani tekshiradi
- Filter — flat massiv (
{key, operation, value}[]) yoki nestedand/or/notdaraxt. - Operatorlar — core'ning to'liq to'plami:
= != > >= < <=,like/ilike/notLike,contains/startsWith/endsWith(+ token%_%/%_/_%),in/notIn,between/notBetween,isNull/isNotNull. - Sort —
{ key, direction }[](ko'p-maydon). - Paginatsiya — offset (
page/perPage), infinite (limit/offset), cursor (limit/cursor/cursorKey/order/direction). with(relations),columns,withDeleted.- Eski
typemaydoni e'tiborsiz qoldiriladi (rad etilmaydi) — migratsiya oson.
Schema'lar
| Schema | Vazifasi |
| ----------------------------------- | -------------------------------------------------- |
| filterOperatorSchema | operator enum (core FILTER_OPERATORSdan) |
| fieldConditionSchema | { key, operation?, value? } |
| filterNodeSchema / filterSchema | nested tugun / to'liq filter (nested yoki flat) |
| sortSchema | sort (3 shakl) |
| baseParamsSchema | filter/sort/columns/with/withDeleted |
| offsetParamsSchema | + page/perPage |
| infiniteParamsSchema | + limit/offset |
| cursorParamsSchema | + limit/cursor/cursorKey/order/direction |
Inferred tiplar ham eksport qilinadi: OffsetParams, InfiniteParams, CursorParams, FilterInput, ... — barchasi @querykitjs/core tiplariga assignable.
Core moslik
filterOperatorSchema = z.enum(FILTER_OPERATORS) — operatorlar core'dan bir marta. z.infer chiqishi @querykitjs/corening FieldCondition/Filter/FilterOperator tiplariga assignable (typecheck darajasida qat'iy tekshiriladi), shuning uchun validatsiyalangan natijani repo'ga uzatish tipli mos keladi.
Litsenziya
MIT © Suhrobbek Soatov
