UNPKG

validlyjs

Version:

A high-performance Laravel-inspired validation library for TypeScript/JavaScript

15 lines (14 loc) 2.33 kB
import{Validator as r}from"validlyjs" import a from"fastify-plugin" class t{constructor(r={}){this.options={sources:["body","query","params"],errorStatus:422,errorFormat:"laravel",...r}}validate(a,t){const s={...this.options,...t} return async(t,e,o)=>{var i,u,d,n try{const c={};(null===(i=s.sources)||void 0===i?void 0:i.includes("body"))&&Object.assign(c,t.body),(null===(u=s.sources)||void 0===u?void 0:u.includes("query"))&&Object.assign(c,t.query),(null===(d=s.sources)||void 0===d?void 0:d.includes("params"))&&Object.assign(c,t.params),(null===(n=s.sources)||void 0===n?void 0:n.includes("headers"))&&Object.assign(c,t.headers) const l=new r(a,s),v=await l.validate(c) v.isValid?(t.validatedData=v.data,o()):s.onError?s.onError(v.errors,t,e):e.status(s.errorStatus||422).json({message:"Validation failed",errors:v.errors})}catch(r){o(r)}}}body(r,a){return this.validate(r,{...a,sources:["body"]})}query(r,a){return this.validate(r,{...a,sources:["query"]})}params(r,a){return this.validate(r,{...a,sources:["params"]})}}class s{constructor(r={}){this.options={sources:["body","query","params"],errorStatus:422,errorFormat:"laravel",...r}}validate(a,t){const s={...this.options,...t} return async(t,e)=>{var o,i,u,d try{const n={};(null===(o=s.sources)||void 0===o?void 0:o.includes("body"))&&Object.assign(n,t.body),(null===(i=s.sources)||void 0===i?void 0:i.includes("query"))&&Object.assign(n,t.query),(null===(u=s.sources)||void 0===u?void 0:u.includes("params"))&&Object.assign(n,t.params),(null===(d=s.sources)||void 0===d?void 0:d.includes("headers"))&&Object.assign(n,t.headers) const c=new r(a,s),l=await c.validate(n) if(!l.isValid)return s.onError?void s.onError(l.errors,t,e):e.code(s.errorStatus||422).send({message:"Validation failed",errors:l.errors}) t.validatedData=l.data}catch(r){throw r}}}body(r,a){return this.validate(r,{...a,sources:["body"]})}query(r,a){return this.validate(r,{...a,sources:["query"]})}params(r,a){return this.validate(r,{...a,sources:["params"]})}}const e=a(async function(r,a){const t=new s(a) r.decorate("validate",t.validate.bind(t)),r.decorate("validateBody",t.body.bind(t)),r.decorate("validateQuery",t.query.bind(t)),r.decorate("validateParams",t.params.bind(t))},{fastify:"5.x",name:"validly-plugin"}) export{t as ExpressValidator,s as FastifyValidator,e as validlyPlugin}