@syngrisi/syngrisi
Version:
Syngrisi - Visual Testing Tool
52 lines (48 loc) • 1.59 kB
text/typescript
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")
}),
};