UNPKG

alpidate

Version:

A model-based validation plugin for Alpine.js, inspired by Vuelidate.

2 lines (1 loc) 2.84 kB
var x=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var V=(r,e)=>{for(var i in e)x(r,i,{get:e[i],enumerable:!0})},W=(r,e,i,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of A(e))!E.call(r,s)&&s!==i&&x(r,s,{get:()=>e[s],enumerable:!(t=j(e,s))||t.enumerable});return r};var q=r=>W(x({},"__esModule",{value:!0}),r);var K={};V(K,{default:()=>v});module.exports=q(K);function w(r,e,i){let t={$invalid:!1};return e.forEach(s=>{let[c,l]=s.split(":"),n=!1;switch(c){case"required":n=r===null||r===""||r===void 0||Array.isArray(r)&&r.length===0;break;case"requiredIf":let[$,p]=l.split(","),f=i[$];""+f===p&&(n=r===null||r===""||r===void 0);break;case"array":n=!Array.isArray(r);break;case"min":(typeof r=="string"||Array.isArray(r))&&(n=r.length<Number(l));break;case"max":(typeof r=="string"||Array.isArray(r))&&(n=r.length>Number(l));break;case"numeric":n=isNaN(r);break;case"email":n=!/^\w+([.-]?\w+)*@\w+([.-]?\w+)*(\.\w{2,3})+$/.test(r);break;case"regex":try{let b=l?new RegExp(l):null;n=b?!b.test(r):!0}catch{n=!0}break}t[c]=n,n&&(t.$invalid=!0)}),t}function N(r,e){let i={};for(let t in e)if(t.includes("*")){let c=t.split(".")[0];(r[c]||[]).forEach((n,$)=>{let p=t.replace("*",$);i[p]=e[t]})}else i[t]=e[t];return i}function R(r,e,i){let t=N(r,e);for(let s in t)r[i].validate(s),r.$watch(s,()=>r[i].validate(s));return r}function O(r){r.magic("validation",()=>(e,i=null)=>{i||(i="$v"),e[i]={},e[i].$touch=!1,e[i].$invalid=!0;let t=JSON.parse(JSON.stringify(e.validations));e[i].validate=(s=null)=>{let c=N(e,t),l=s?[s]:Object.keys(c);s||(e[i].$touch=!0),l.forEach(n=>{let $=c[n],p=n.split("."),f=e[i],u=e;p.forEach((o,a)=>{var d;if(!isNaN(Number(o))){u=u[o];return}f[o]||(f[o]={$invalid:!1}),f=f[o],u=(d=u[o])!=null?d:u[o]}),Object.assign(f,w(u,$,e)),Array.isArray(u)&&Object.keys(t).find(a=>a.includes("*")&&a.startsWith(p[0]))&&(f.each=u.map((a,d)=>{let m={};return Object.keys(t).filter(h=>h.startsWith(p[0]+".*")).map(h=>({fieldName:h.split(".").slice(-1)[0],rules:t[h]})).forEach(h=>{m[h.fieldName]=w(a[h.fieldName],h.rules,e)}),m}),f.$invalid=f.each.some(a=>Object.values(a).some(d=>d.$invalid)));let b=n.split(".");if(b.length>1){let o=e[i];for(let a=0;a<b.length-1;a++){let d=b[a];if(!o[d])continue;let m=o[d];m.$invalid=Object.values(m).filter(g=>typeof g=="object"&&g!==null).some(g=>g.$invalid),o=m}}})},e[i].reset=()=>e[i].$touch=!1,e=R(e,t,i),e.$watch(i,()=>{e[i].$invalid=Object.keys(e[i]).some(s=>{if(s.startsWith("$"))return!1;let c=e[i][s];return c.$invalid?!0:c.each?c.each.some(l=>Object.values(l).some(n=>n.$invalid)):!1})}),Object.entries(t).forEach(([s,c])=>{c.forEach(l=>{if(l.startsWith("requiredIf:")){let n=l.split(":")[1].split(",")[0];e.$watch(n,()=>{e[i].validate(s)})}})})})}var v=O;0&&(module.exports={});