UNPKG

@vzeta/camunda-api-zod-schemas

Version:

Zod schemas and TypeScript types for Camunda 8 unified API

132 lines (131 loc) 3.46 kB
import { z } from "zod"; const API_VERSION = "v2"; const advancedDateTimeFilterSchema = z.union([ z.string(), z.object({ $eq: z.string().optional(), $neq: z.string().optional(), $exists: z.boolean().optional(), $gt: z.string().optional(), $gte: z.string().optional(), $lt: z.string().optional(), $lte: z.string().optional(), $in: z.array(z.string()).optional() }) ]); const basicStringFilterSchema = z.object({ $eq: z.string().optional(), $neq: z.string().optional(), $exists: z.boolean().optional(), $in: z.array(z.string()).optional(), $notIn: z.array(z.string()).optional() }).or(z.string()); const advancedStringFilterSchema = z.object({ $eq: z.string().optional(), $neq: z.string().optional(), $exists: z.boolean().optional(), $in: z.array(z.string()).optional(), $notIn: z.array(z.string()).optional(), $like: z.string().optional() }).or(z.string()); const advancedIntegerFilterSchema = z.union([ z.number().int(), z.object({ $eq: z.number().int().optional(), $neq: z.number().int().optional(), $exists: z.boolean().optional(), $gt: z.number().int().optional(), $gte: z.number().int().optional(), $lt: z.number().int().optional(), $lte: z.number().int().optional(), $in: z.array(z.number().int()).optional() }) ]); function getOrFilterSchema(schema) { return z.object({ ...schema.shape, $or: z.array(schema).optional() }); } const problemDetailsSchema = z.object({ type: z.string(), title: z.string(), status: z.number(), detail: z.string(), instance: z.string() }); const querySortOrderSchema = z.enum(["asc", "desc"]); const queryPageSchema = z.object({ from: z.number().int(), limit: z.number().int(), before: z.string().optional(), after: z.string().optional() }).partial(); const queryResponsePageSchema = z.object({ totalItems: z.number(), startCursor: z.string().optional(), endCursor: z.string().optional() }); function getQueryResponseBodySchema(itemSchema) { return z.object({ items: z.array(itemSchema), page: queryResponsePageSchema }); } function getCollectionResponseBodySchema(itemSchema) { return z.object({ items: z.array(itemSchema) }); } function getQueryRequestSortSchema(fields) { return z.array( z.object({ field: z.enum(fields), order: z.enum(["asc", "desc"]).optional() }) ); } function getEnumFilterSchema(fields) { return z.union([ fields, z.object({ $eq: fields.optional(), $neq: fields.optional(), $exists: z.boolean().optional(), $in: z.array(fields).optional(), $notIn: z.array(fields).optional() }) ]); } function getQueryRequestBodySchema(options) { const { sortFields, filter } = options; return z.object({ sort: getQueryRequestSortSchema(sortFields), page: queryPageSchema, filter }).partial(); } const problemDetailResponseSchema = z.object({ type: z.string(), title: z.string(), status: z.number().min(400).max(600), detail: z.string(), instance: z.string() }); export { API_VERSION, advancedDateTimeFilterSchema, advancedIntegerFilterSchema, advancedStringFilterSchema, basicStringFilterSchema, getCollectionResponseBodySchema, getEnumFilterSchema, getOrFilterSchema, getQueryRequestBodySchema, getQueryResponseBodySchema, problemDetailResponseSchema, problemDetailsSchema, queryPageSchema, queryResponsePageSchema, querySortOrderSchema };