@vzeta/camunda-api-zod-schemas
Version:
Zod schemas and TypeScript types for Camunda 8 unified API
132 lines (131 loc) • 3.46 kB
JavaScript
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
};