UNPKG

@syngrisi/syngrisi

Version:
52 lines (48 loc) 1.59 kB
import { z } from 'zod'; import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi'; import VersionSchema from '@schemas/common/Version.schema'; extendZodWithOpenApi(z); const mongooseIdRegex = /^[0-9a-fA-F]{24}$/; const id = z .string() .regex(mongooseIdRegex, { message: 'Invalid Mongoose ObjectId format: /^[0-9a-fA-F]{24}$/', }) .openapi({ description: 'baseline ID', example: "6bbF35cAB3C59dA969edAe79" }); export const commonValidations = { id, version: VersionSchema.openapi({ example: "1.1.2" }), positiveNumberString: z.string().refine(value => { const num = Number(value); return Number.isInteger(num) && num >= 0; }, { message: "String must be a positive number or 0" }), password: z.string() .min(6) .regex(/(?=.*[0-9])/, "Password must include a number") .regex(/(?=.*[a-z])/, "Password must include a lowercase letter") .regex(/(?=.*[A-Z])/, "Password must include an uppercase letter") .refine(value => { return /(?=.*[!@#$%^&*(),.?":{}|<>-])/.test(value); }, { message: "Password must include a special symbol" }) .openapi({ example: "Aa1!IJASSNOJ" }), username: z.string().min(1).openapi({ example: "john.doe@example.com" }), // TODO: workaround TBD date: z.string().refine(val => { const date = new Date(val); return !isNaN(date.getTime()); }, { message: 'Invalid date format' }), paramsId: { params: z.object({ id }) }, paramsTestId: { params: z.object({ testid: id }) }, success: z.object({ message: z.literal("success") }), };