🚨 Shai-Hulud Strikes Again:834 Packages Compromised.Technical Analysis
Socket
Book a DemoInstallSign in
Socket

next-validations

Package Overview
Dependencies
Maintainers
1
Versions
35
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

next-validations

<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->

latest
Source
npmnpm
Version
1.1.0
Version published
Weekly downloads
3.5K
38.45%
Maintainers
1
Weekly downloads
 
Created
Source

Welcome to next-validations 👋

All Contributors

Version Downloads/week Prerequisite License: MIT Twitter: jellydn

NextJS API Validations

🏠 Homepage

Demo

https://gyazo.com/bf4582f7b7aa0f0ae67c4cc337c4e974.gif

Prerequisites

  • node >=18
  • nextjs >= 9

Install

yarn add next-validations

Features

  • 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.

Usage

Validation of multiple modes

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);

Validate custom API endpoint with Yup

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,
    });
  },
});

Validate custom API endpoint with Zod

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);

Validate custom API endpoint with Valibot

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);

Validate custom API endpoint with fastest-validator

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);

Validate custom API endpoint with joi

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,
    });
  },
});

Run tests

yarn test

Author

👤 Huynh Duc Dung

Show your support

Give a ⭐️ if this project helped you!

kofi paypal buymeacoffee

Star History

Star History Chart

Contributors ✨

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!

Keywords

nextjs

FAQs

Package last updated on 24 May 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts