Skip to content

Repository files navigation

Validator ✅

Validate payloads from any NodeJS project.

GitHub followersGitHub stars

Buy Me A Coffee

GitHub language countRepository sizeLicenseCommitizen

The intention behind this repository is to maintain a payload validator package to use inside any NodeJS project.

Installation

To use the high potential from this package you need to install first this other packages from SecJS, it keeps as dev dependency because one day @secjs/core will install everything once.

npm install @secjs/exceptions

Then you can install the package using:

npm install @secjs/validator

Validator

Use Validator class to extend in your validation classes

import{Validator}from'@secjs/validator'exportclassUserValidatorextendsValidator{getschema(){return{name: 'string|required',email: 'email|required',}}getupdateSchema(){return{name: 'string',email: 'string',}}}constuserValidator=newUserValidator()try{constvalidatedData=awaituserValidator.validate({name: 'João',email: 'lenonSec7@gmail.com'},'schema')returnvalidatedData}catch(error){// All the validation errors foundthrowerror}

Nice validator options

Fail on first and clean the data

import{Validator}from'@secjs/validator'exportclassUserValidatorextendsValidator{getvalidateAll(){returnfalse}getremoveAdditional(){returntrue}getschema(){return{name: 'string|required',email: 'email|required',}}}constuserValidator=newUserValidator()try{constvalidatedData=awaituserValidator.validate({name: 'João',email: 'lenonSec7@gmail.com',additionalProp: 'hello'},'schema')returnvalidatedData// { name: 'João', email: 'lenonSec7@gmail.com' } without additionalProp}catch(error){// Only the first validation error foundthrowerror// [// {// message: 'required validation failed on name',// validation: 'required',// field: 'name',// }// ]}

Custom error messages

Use custom error messages and Internationalization support

import{Validator}from'@secjs/validator'exportclassUserValidatorextendsValidator{getmessages(){return{email: '{{ field }} is not a valid email',// pt-br'name.required': '{{ field }} é obrigatório para criar um usuário'}}getschema(){return{name: 'string|required',email: 'email|required',}}}constuserValidator=newUserValidator()try{// try implementation...}catch(error){throwerror// [// {// message: 'name é obrigatório para criar um usuário',// validation: 'required',// field: 'name',// },// {// message: 'email is not a valid email',// validation: 'email',// field: 'email',// }// ]}

Sanitizer

Use Sanitizer class to extend in your validation classes

import{Sanitizer}from'@secjs/validator'exportclassUserSanitizerextendsSanitizer{getschema(){return{email: 'trim|lower_case',}}getupdateSchema(){return{email: 'trim|lower_case',}}}constuserSanitizer=newUserSanitizer()userSanitizer.sanitize({email: 'lenonSec7@gmail.com '},'schema')// Return the object with sanitizations implemented// { email: 'lenonsec7@gmail.com' }

Extend Validator and Sanitizer

Extend validation and sanitizer rules

import*ashefrom'he'import{Validator,Sanitizer}from'@secjs/validator'exportclassExtendValidator{protectedvalidator: Validatorconstructor(){this.validator=newValidator()this.validator.extendAsync('unique',this.unique)}// Returning false will fail the validationunique=async(data: any,field: string,args: string[])=>{constrepository=this.getRepository(args[0])constmodel=awaitrepository.getOne(null,{where: {[field]: this.validator.getValue(data,field)},})return!model}}exportclassExtendSanitizer{protectedsanitizer: Sanitizerconstructor(){this.sanitizer=newSanitizer()this.sanitizer.extend('escape',this.escape)}escape=async(data: any,field: string,args: string[],config: any)=>{letfieldValue=this.sanitizer.getValue(data,field)if(typeof(fieldValue)!=='string'){return}this.sanitizer.patchValue(data,field,he.escape(fieldValue))}}

More rules

This project is using indicative package to implement class Sanitizer and Validator if you want to check all the validation and sanitizer rules check indicative documentation.


License

Made with 🖤 by jlenon7 👋

About

✅ Validate and sanitize payloads in Node.js

Topics

Resources

Contributing

Stars

4 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages