jellydn/next-validations(opens in a new tab)
Language: TypeScript
NextJS API Validations, support Zod, Yup, Fastest-Validator, Joi, and more
- stars
- 60
- watchers
- 1
- forks
- 4
- open issues
- 12
- Last updated
- 10/29/2026
Language: TypeScript
NextJS API Validations, support Zod, Yup, Fastest-Validator, Joi, and more
NextJS API Validations
yarn add next-validations
Support for Multiple Validation Libraries: This package is designed to work seamlessly with a variety of popular validation libraries. These include Yup, Fastest-Validator, Joi, Zod, and Valibot. This means you can choose the library that best suits your project's needs.
Integration with TypeSchema: next-validations integrates with TypeSchema - Universal adapter for TypeScript schema validation. This allows for even more flexibility and compatibility with additional validation libraries.
yarn add yup joi next-validations @typeschema/yup @typeschema/yoi
import Joi from 'joi'; import { NextApiRequest, NextApiResponse } from 'next'; import { createRouter } from 'next-connect'; import { withValidations } from 'next-validations'; import * as yup from 'yup'; const querySchema = yup.object().shape({ type: yup.string().oneOf(['email', 'sms']).required(), }); const validateQuery = { schema: querySchema, mode: 'query', } as const; const bodySchema = Joi.object({ phone: Joi.string().required(), email: Joi.string().email().required(), name: Joi.string().required(), }); const validateBody = { schema: bodySchema, mode: 'body', } as const; const validate = withValidations([validateQuery, validateBody]); const handler = (req: NextApiRequest, res: NextApiResponse) => { res.status(200).json({ ...req.body, ...req.query }); }; export default connect().post(validate(), handler);
yarn add yup next-validations @typeschema/yup
import { NextApiRequest, NextApiResponse } from 'next'; import { withValidation } from 'next-validations'; import * as yup from 'yup'; const schema = yup.object().shape({ name: yup.string().required(), }); const validate = withValidation({ schema, mode: 'query', }); const handler = (req: NextApiRequest, res: NextApiResponse) => { res.status(200).json(req.query); }; const router = createRouter(); router.post(validate(), handler); export default router.handler({ onError: (err, _req, _event) => { return new NextResponse('Something broke!', { status: (err as any)?.statusCode ?? 500, }); }, });
yarn add zod next-validations @typeschema/zod
import { NextApiRequest, NextApiResponse } from 'next'; import { withValidation } from 'next-validations'; import { z } from 'zod'; const schema = z.object({ username: z.string().min(6), }); const validate = withValidation({ schema, mode: 'body', }); const handler = (req: NextApiRequest, res: NextApiResponse) => { res.status(200).json(req.body); }; export default validate(handler);
yarn add valibot next-validations @typeschema/valibot
import { NextApiRequest, NextApiResponse } from 'next'; import { withValidation } from 'next-validations'; import * as valibot from 'valibot'; const schema = valibot.object({ name: valibot.string([valibot.minLength(4)]), }); const validate = withValidation({ schema, mode: 'query', }); const handler = (req: NextApiRequest, res: NextApiResponse) => { res.status(200).json(req.query); }; export default validate(handler);
yarn add fastest-validator next-validations @typeschema/fastest-validator
import { NextApiRequest, NextApiResponse } from 'next'; import { withValidation } from 'next-validations'; const schema = { name: { type: 'string', min: 3, max: 255 }, email: { type: 'email' }, age: 'number', }; const validate = withValidation({ // This is fastest-validator schema, the type is not working nicely with TypeScript schema: schema as any, mode: 'body', }); const handler = (req: NextApiRequest, res: NextApiResponse) => { res.status(200).json(req.body); }; export default validate(handler);
yarn add joi next-connect next-validations @typeschema/joi
import Joi from 'joi'; import { NextApiRequest, NextApiResponse } from 'next'; import { createRouter } from 'next-connect'; import { withValidation } from 'next-validations'; const schema = Joi.object({ dob: Joi.date().iso(), email: Joi.string().email().required(), name: Joi.string().required(), }); const validate = withValidation({ schema, mode: 'body', }); const handler = (req: NextApiRequest, res: NextApiResponse) => { res.status(200).json(req.body); }; const router = createRouter(); router.post(validate(), handler); export default router.handler({ onError: (err, _req, _event) => { return new NextResponse('Something broke!', { status: (err as any)?.statusCode ?? 500, }); }, });
yarn test👤 Huynh Duc Dung
Give a ⭐️ if this project helped you!
Thanks goes to these wonderful people (emoji key):
Dung Duc Huynh (Kaka) 💻 📖 |
Alexis Rico 💻 |
André Costa 💻 |
This project follows the all-contributors specification. Contributions of any kind welcome!