validlyjs
Version:
A high-performance Laravel-inspired validation library for TypeScript/JavaScript
91 lines (90 loc) • 3.66 kB
JavaScript
async function e(e,a,t,r){try{const n=r.compile(e),i=n.length
for(let e=0;i>e;e++){const r=n[e]
let i
if(r.async)i=await r.validator(a,t)
else{const e=r.validator(a,t)
i=e instanceof Promise?await e:e}if(!i.passed)return!1}return!0}catch(e){return!1}}async function a(e,a,t,n,i){try{const s=n.compile(e)
let l=!0
const c=[],o=s.length
for(let e=0;o>e;e++){const n=s[e]
let i
if(n.async)i=await n.validator(a,t)
else{const e=n.validator(a,t)
i=e instanceof Promise?await e:e}if(!i.passed){l=!1,c.push(r(n.name,n.parameters))
break}}if(l)return!0
if(c.length>0)i.push(c.join(" and "))
else{const e=s.map(e=>e.name).join(", ")
i.push(e)}return!1}catch(e){return!1}}function t(e){e.length>0?global.lastUnionFormats=e:delete global.lastUnionFormats}function r(e,a){var t,r
const n=e+JSON.stringify(a)
if(l.has(n))return l.get(n)
let i
switch(e){case"string.email":i="a valid email address"
break
case"string.min":i=`at least ${(null==a?void 0:a[0])||"N"} characters`
break
case"string.max":i=`at most ${(null==a?void 0:a[0])||"N"} characters`
break
case"string.length":i=`exactly ${(null==a?void 0:a[0])||"N"} characters`
break
case"string.uuid":i="a valid UUID"
break
case"string.url":i="a valid URL"
break
case"string.alpha":i="only alphabetic characters"
break
case"string.alphanumeric":i="only alphanumeric characters"
break
case"string.numeric":i="only numeric characters"
break
case"number.min":i="at least "+((null==a?void 0:a[0])||"N")
break
case"number.max":i="at most "+((null==a?void 0:a[0])||"N")
break
case"number.between":i=`between ${(null==a?void 0:a[0])||"N"} and ${(null==a?void 0:a[1])||"N"}`
break
case"number.integer":i="a whole number"
break
case"number.positive":i="a positive number"
break
case"number.negative":i="a negative number"
break
case"date.after":i="after "+((null==a?void 0:a[0])||"specified date")
break
case"date.before":i="before "+((null==a?void 0:a[0])||"specified date")
break
case"date.format":i=`in ${(null==a?void 0:a[0])||"specified"} format`
break
case"array.min":i=`at least ${(null==a?void 0:a[0])||"N"} items`
break
case"array.max":i=`at most ${(null==a?void 0:a[0])||"N"} items`
break
case"array.length":i=`exactly ${(null==a?void 0:a[0])||"N"} items`
break
case"file.max":i=`at most ${(null==a?void 0:a[0])||"N"} bytes`
break
case"file.min":i=`at least ${(null==a?void 0:a[0])||"N"} bytes`
break
case"file.mimes":i="one of these types: "+((null===(r=null===(t=null==a?void 0:a[0])||void 0===t?void 0:t.join)||void 0===r?void 0:r.call(t,", "))||"specified types")
break
case"required":i="required"
break
case"boolean":i="true or false"
break
default:i=e.replace(/\./g," ")}return l.set(n,i),i}var n=require("./index-CwS8y5AW.js")
let i=null,s=null
const l=new Map
exports.unionRule={name:"union",validate:async(r,l,c,o)=>{const u=l[0],f=l[2]||{},{optimizeUnions:d=!0,parallelValidation:b=!1}=f
if(!u||!Array.isArray(u)||0===u.length)return!1
const m=(s||(s=new n.R((i||(i=new n.a),i))),s),v={field:c,data:o,path:c},k=[]
return b&&u.length>1?await async function(a,t,r,n){const i=a.length,s=Array(i)
for(let l=0;i>l;l++)s[l]=e(a[l],t,r,n)
const l=await Promise.all(s)
for(let e=0;i>e;e++)if(l[e])return!0
return!1}(u,r,v,m):d?await async function(e,r,n,i,s){const l=new Map,c=e.length
for(let t=0;c>t;t++){const c=e[t],o=JSON.stringify(c)+JSON.stringify(r)
if(l.has(o)){if(l.get(o))return!0
continue}const u=await a(c,r,n,i,s)
if(l.set(o,u),u)return!0}return t(s),!1}(u,r,v,m,k):await async function(e,r,n,i,s){const l=e.length
for(let t=0;l>t;t++)if(await a(e[t],r,n,i,s))return!0
return t(s),!1}(u,r,v,m,k)},message:"The {field} field must match one of these formats: {formats}",async:!0,priority:1}