
Research
Security News
The Growing Risk of Malicious Browser Extensions
Socket researchers uncover how browser extensions in trusted stores are used to hijack sessions, redirect traffic, and manipulate user behavior.
@kodepandai/node-input-validator
Advanced tools
validation library for nodejs, inspired by laravel.
NIV (Node Input Validator) is a validation library for node.js. You can also extend library to add custom rules.
Note: For use case of any rule, please check test cases, If you have any doubt or confusion with documentation or regarding rule behaviour.
npm i node-input-validator@v5
This library supports both cjs and esm.
Using CJS
const { Validator } = require('node-input-validator');
Using ESM
import { Validator } from 'node-input-validator';
For detailed documentation, see https://bitnbytes.io/docs/niv/index.html
const { Validator, Rules } = require('node-input-validator');
const v = new Validator(
{ name: '' },
{ name: 'required|alpha' },
);
v.validate().then((passed) => {
console.log(passed);
if (!passed) {
console.log(v.getErrors());
}
});
const { Validator, Rules } = require('node-input-validator');
const v = new Validator(
{ name: '' },
{ name: ['required', 'alpha'] },
);
v.validate().then(function (passed) {
console.log(passed);
console.log(v.errors);
});
const { Validator, Rules } = require('node-input-validator');
const v = new Validator(
{ name: '' },
{ name: [Rules.required(), Rules.alpha()] },
);
v.validate().then(function (passed) {
console.log(passed);
console.log(v.errors);
});
const { Validator, Rules } = require('node-input-validator');
const v = new Validator(
{ name: '' },
{ name: [Rules.required(), Rules.alpha()] },
);
const passed = await v.validate()
console.log(passed);
console.log(v.errors);
import { Validator, Rules } from 'node-input-validator';
const v: Validator = new Validator(
{ name: '' },
{ name: [Rules.required()] },
);
const passed: boolean = await v.validate();
console.log(passed);
console.log(v.errors);
const niv = require('node-input-validator');
// keep this under your error handler
app.use(niv.koa());
// if validation fails, this will auto abort request with status code 422 and errors in body
await ctx.validate({
name: 'required|maxLength:50',
username: 'required|maxLength:15',
email: 'required|email',
password: 'required'
});
// validation passes
// do some code
const cutomInputs = {...}
// if validation fails, this will auto abort request with status code 422 and errors in body
await ctx.validate({
name: 'required|maxLength:50',
username: 'required|maxLength:15',
email: 'required|email',
password: 'required'
}, cutomInputs);
// validation passes
// do some code
// if validation fails, this will auto abort request with status code 422 and errors in body
await ctx.validate({
name: 'required|maxLength:50',
username: 'required|maxLength:15',
email: 'required|email',
password: 'required'
}, ctx.request.body, { email: 'E-mail is required' });
// validation passes
// do some code
const v = await ctx.validator(ctx.request.body, {
name: 'required|maxLength:50',
username: 'required|maxLength:15',
email: 'required|email',
password: 'required'
});
// in case validation fails
if (v.fails()) {
ctx.status = 422;
ctx.body = v.errors;
return;
}
// do some code
const { Validator } = require('node-input-validator');
app.post('login', function (req, res) {
const v = new Validator(req.body, {
email: 'required|email',
password: 'required'
});
v.validate().then((matched) => {
if (!matched) {
res.status(422).send(v.errors);
}
});
});
const v = new Validator(
{
product: {
id: '1',
name: '',
price: '',
active: 'yes',
}
},
{
'product': 'required|object',
'product.id': 'required|integer',
'product.name': 'required',
'product.price': 'required|integer',
'product.active': 'required|integer'
},
);
const matched = await v.validate();
let v = new Validator(
{
roles: ['admin', 'manager', 'member']
},
{
'roles': 'required|array',
'roles.*': 'required|string'
},
);
const matched = await v.validate();
let v = new Validator(
{
plans: [
{ price: '25', title: 'OK' },
{ price: '', title: '' },
{ price: '30' },
{ price: '', title: 'Title' }
]
},
{
'plans': 'required|array',
'plans.*.price': 'required|integer',
'plans.*.title': 'required'
},
);
const matched = await v.validate();
const niv = require('node-input-validator');
niv.extend('even', () => {
return {
name: 'even',
handler: (v) => v % 2,
}
});
// Add message for your rule
niv.Messages.extend({
even: 'The :attr value must be an even number.',
required: 'The attribute is required.',
})
// modify existing rule message
niv.Messages.extend({
required: 'The attribute is required.',
});
// add custom message on required rule for name
niv.Messages.addCustomMessages({
'name.required': 'The name is required.',
});
// or no matter what the rule is use common message for name
niv.Messages.addCustomMessages({
name: 'The name is malformed.',
});
// email in error message will be replaced with E-mail
niv.Messages.addNiceNames({
email: 'E-mail',
});
const { Validator } = require('node-input-validator');
const v = new Validator(
{},
{
email: 'required|email',
},
)
// this will only replace email with E-mail for error message of this instance
v.niceNames({
email: 'E-mail',
});
v.validate()
To use date rules, you has to install moment or date-fns
const { MomentAdapter, useDateAdapter } = require('node-input-validator');
const moment = require('moment');
useDateAdapter(new MomentAdapter(moment));
const { DateFnsAdapter, useDateAdapter } = require('node-input-validator');
const dateFns = require('date-fns');
useDateAdapter(new DateFnsAdapter(dateFns));
To use validator rules, first your need to install it
npm i validator
Then your can use all rules of validator.js as sub rule under rule validator.
const { Validator } = require('node-input-validator');
const v = new Validator(
{},
{
email: 'validator:isEmail',
},
)
v.validate()
Passing arguments to validator.js rules, example passing locale to isAlpha rule.
const { Validator } = require('node-input-validator');
const v = new Validator(
req.body,
{
email: 'validator:isAlpha,pt-BR',
},
)
v.validate()
const { Validator, Rules } = require('node-input-validator');
const v = new Validator(
req.body,
{
email: [Rules.validator('isAlpha', ['pt-BR'])],
},
)
v.validate()
Note: You have to manually add messages for most validator.js rules.
Package internaly remove "is" from validator.js rule and make it lowercase.
For example: isEmail -> email, hence it can use existing email message.
For rules documentation, see https://bitnbytes.io/docs/niv/modules/rules.html
Many thanks
FAQs
validation library for nodejs, inspired by laravel.
The npm package @kodepandai/node-input-validator receives a total of 5 weekly downloads. As such, @kodepandai/node-input-validator popularity was classified as not popular.
We found that @kodepandai/node-input-validator demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Research
Security News
Socket researchers uncover how browser extensions in trusted stores are used to hijack sessions, redirect traffic, and manipulate user behavior.
Research
Security News
An in-depth analysis of credential stealers, crypto drainers, cryptojackers, and clipboard hijackers abusing open source package registries to compromise Web3 development environments.
Security News
pnpm 10.12.1 introduces a global virtual store for faster installs and new options for managing dependencies with version catalogs.