validlyjs
Version:
A high-performance Laravel-inspired validation library for TypeScript/JavaScript
15 lines (14 loc) • 2.33 kB
JavaScript
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}