Validate payloads from any NodeJS project.
The intention behind this repository is to maintain a payload validator package to use inside any NodeJS project.
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/corewill install everything once.
npm install @secjs/exceptionsThen you can install the package using:
npm install @secjs/validatorUse 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}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',// }// ]}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',// }// ]}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 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))}}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.
Made with 🖤 by jlenon7 👋

