next-validations
    Preparing search index...

    next-validations

    Welcome to next-validations πŸ‘‹

    All Contributors

    Version Downloads/week Prerequisite License: MIT Twitter: jellydn

    NextJS API Validations

    https://gyazo.com/bf4582f7b7aa0f0ae67c4cc337c4e974.gif

    • node >=18
    • nextjs >= 9
    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!

    kofi paypal buymeacoffee

    Star History Chart

    Thanks goes to these wonderful people (emoji key):

    Dung Duc Huynh (Kaka)
    Dung Duc Huynh (Kaka)

    πŸ’» πŸ“–
    Alexis Rico
    Alexis Rico

    πŸ’»
    AndrΓ© Costa
    AndrΓ© Costa

    πŸ’»

    This project follows the all-contributors specification. Contributions of any kind welcome!