@regle/core 0.2.5 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +50 -53
- package/dist/index.d.ts +50 -53
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var vue=require('vue');var Pe=(r=>(r.Inline="__inline",r.Async="__async",r))(Pe||{});function Ke(e,t){return vue.computed(()=>e.value.some(r=>r[t]))}function et(e,t){return vue.computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function q(e){return e.map(t=>t instanceof Function?t():vue.unref(t))}function tt(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function rt(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(o=>o.trim()).filter(o=>o.includes("=")).length+e.length}function we(e,...t){let{message:r,validator:n,active:a,type:o,...u}=e,v=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator(S,...m){return e.validator(S,...q(m.length?m:t))},message(S,m){return typeof e.message=="function"?e.message(S,{...m,$params:q(m.$params?.length?m.$params:t)}):e.message},active(S,m){return typeof e.active=="function"?e.active(S,{...m,$params:q(m.$params?.length?m.$params:t)}):e.active??!0},exec(S){let m=e.validator(S,...q(t)),d;return m instanceof Promise?m.then(f=>(d=f,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)):(d=m,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)}},...u,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:v,_params:tt(t)}}function Oe(e){if(typeof e.validator=="function"){let r=we(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(rt(e.validator)>1){let a=function(...o){return we(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function L(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function nt(e){return L(e.value)}function K(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>K(n)))),r=="Map"&&(t=new Map([...e].map(n=>[K(n[0]),K(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,xt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=K(e[n]);}return t}function xt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function Ae(e,t,r){return e instanceof Function?e(t,r??0):e}function at(e,t){vue.isRef(e)?e.value=t:e=t;}function lt(e,t){vue.isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=vue.isRef(e)?e.value[n]:e[n];a={},de(a,t[n]);});}function de(e,t){Object.entries({...vue.unref(e),...t}).forEach(([r,n])=>{let a=vue.isRef(e)?e.value:e,o=vue.isRef(t[r])?t[r]._value:t[r],u=vue.isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(o)&&o.forEach((v,E)=>{a[r][E]={},de(a[r][E],o[E]);})):L(o)?de(u,o):vue.isRef(a[r])?a[r].value=o:a[r]=o;});}function ee(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function ye(e,t,r){let n,a=(...o)=>new Promise(u=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(u);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(u=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(u);},0);}),a}function Ct(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),u=Number(n[a]);if(o>u)return 1;if(u>o)return -1;if(!isNaN(o)&&isNaN(u))return 1;if(isNaN(o)&&!isNaN(u))return -1}return 0}var ie=Ct(vue.version,"3.5.0")!==-1;function It(){return Math.floor(Math.random()*Date.now()).toString()}function Fe(){return typeof window>"u"?It():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Me(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),a=vue.shallowRef(new Map),o=vue.shallowRef(new Map);function u(s){let l=t.value.get(s);if(l)return l;{let x=vue.ref({});return t.value.set(s,x),x}}function v(s){let l=r.value.get(s);if(l)return l;{let x=vue.ref([]);return r.value.set(s,x),x}}function E(s,l,x){o.value.set(`${s}-${l}`,x);}function $(s,l){return o.value.get(`${s}-${l}`)}function S(s,l){s&&l!=null&&o.value.delete(`${s}-${l}`);}function m(s,l){n.value.set(s,l);}function d(s){return n.value.get(s)??!1}function f(s,l){e.value.set(s,l);}function c(s,l){let x=e.value.get(s);return x?I(l,x)?{valid:!0}:{valid:!1}:void 0}function I(s,l){let x=Object.keys(l),V=Object.keys(s);return V.length!==x.length||!V.every(P=>x.includes(P))?!1:V.every(P=>{let h=s[P],w=l[P];return !w||!h||typeof h=="function"||typeof w=="function"||typeof h=="number"||typeof h=="boolean"?!1:h._params?h._params?.every((O,_)=>{if(typeof w=="number"||typeof w=="boolean")return !0;{let M=q(w._params),H=q(h._params);return M?.[_]===H?.[_]}}):!0})}function C(s){let l=a.value.get(s);if(l)return l;{let x=vue.ref(!1),V=vue.ref(!0),G=vue.ref({}),P=vue.ref(!1);return a.value.set(s,{$pending:x,$valid:V,$metadata:G,$validating:P}),{$pending:x,$valid:V,$metadata:G,$validating:P}}}return vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:f,setDirtyEntry:m,checkRuleDeclEntry:c,getDirtyState:d,trySetRuleStatusRef:C,getFieldsEntry:u,getCollectionsEntry:v,getArrayStatus:$,addArrayStatus:E,deleteArrayStatus:S,arrayStatusStorage:o}}function ot(e,t){return L(e.value)&&L(t.value)&&!Object.entries(t.value).some(r=>me(r))}function st(e){return !!e.value&&"$each"in e.value}function it(e){return !!e.value&&L(e.value)}function me(e){return L(e)&&"_validator"in e}function ge(e){return typeof e.value!="function"}function Ve(e){return L(e)&&"$fields"in e}function je(e){return "$each"in e||"$errors"in e}function _e({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function ct({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:u,$debounce:v}){let E=vue.effectScope(),$,S,m=vue.ref(!1),{$pending:d,$valid:f,$metadata:c,$validating:I}=u.trySetRuleStatusRef(`${o}.${n}`);function C(){$=E.run(()=>{let h=vue.computed(()=>({$invalid:!f.value,$params:H.value,...c.value})),w=vue.computed(()=>ge(r)?typeof r.value.active=="function"?r.value.active(a.value,h.value):r.value.active:!0),O=vue.computed(()=>{let y="",g=t?t[n]?.message:void 0;return g&&(typeof g=="function"?y=g(a.value,h.value):y=g),ge(r)&&(g&&!r.value._patched||(typeof r.value.message=="function"?y=r.value.message(a.value,h.value):y=r.value.message)),ee(y)&&(y="Error",console.warn(`No error message defined for ${o}.${n}`)),y}),_=vue.computed(()=>ge(r)&&r.value.type?r.value.type:n),M=vue.computed(()=>ge(r)?r.value.validator:r.value),H=vue.computed(()=>typeof r.value=="function"?[]:q(r.value._params??[])),D=vue.computed(()=>`${o}.${_.value}`);return {$active:w,$message:O,$type:_,$validator:M,$params:H,$path:D}}),S=vue.watch($.$params,V,{deep:!0});}C();function s(){f.value=!0,e.value&&(d.value=!0);}async function l(){let h=$.$validator.value,w=h(a.value,...$.$params.value),O=!1,_=a.value;try{s();let M;if(w instanceof Promise?M=await w:M=w,a.value!==_)return !0;if(typeof M=="boolean")O=M;else {let{$valid:H,...D}=M;O=H,c.value=D;}}catch{O=!1;}finally{d.value=!1;}return O}let x=ye(l,v??200);async function V(){I.value=!0;let h=!1;if(me(r.value)&&r.value._async)h=await x();else {let w=$.$validator.value,O=w(a.value,...$.$params.value);if(O instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(O!=null)if(typeof O=="boolean")h=O;else {let{$valid:_,...M}=O;h=_,c.value=M;}}return f.value=h,I.value=!1,h}function G(){f.value=!0,c.value={},d.value=!1,I.value=!1,C();}function P(){S(),E.stop(),E=vue.effectScope();}return vue.reactive({...$,$pending:d,$valid:f,$metadata:c,_haveAsync:m,$validating:I,$validate:V,$unwatch:P,$watch:C,$reset:G})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:u,externalErrors:v,onUnwatch:E,$isArray:$,initialState:S,shortcuts:m}){let d=vue.effectScope(),f,c=vue.ref(!1),I=vue.ref(!1),C=vue.ref([]),s,l,x,V,G,P=()=>{};function h(){C.value=v.value??[];}h();function w(){let j=t.value,U=o.checkRuleDeclEntry(n,j);y.value=Object.fromEntries(Object.entries(j).filter(([W])=>W.startsWith("$"))),D.value=Object.fromEntries(Object.entries(t.value).filter(([W])=>!W.startsWith("$")).map(([W,Q])=>{if(Q){let De=vue.toRef(()=>Q);return [W,ct({$dirty:c,customMessages:r,rule:De,ruleKey:W,state:e,path:n,storage:o,$debounce:y.value.$debounce})]}return []}).filter(W=>!!W.length)),M(),O(),U?.valid!=null&&(c.value=o.getDirtyState(n),c.value&&P()),o.addRuleDeclEntry(n,j);}function O(){P=f.$debounce.value?ye(H,f.$debounce.value??f.haveAnyAsyncRule?100:0):H;}function _(){D.value&&Object.entries(D.value).forEach(([j,U])=>{U.$unwatch();}),V(),c.value&&o.setDirtyEntry(n,c.value),s(),l(),x(),d.stop(),d=vue.effectScope(),E?.(),G?.();}function M(){D.value&&Object.entries(D.value).forEach(([j,U])=>{U.$watch();}),f=d.run(()=>{let j=vue.computed(()=>c.value),U=vue.computed(()=>y.value.$debounce),W=vue.computed(()=>y.value.$lazy!=null?y.value.$lazy:vue.unref(u.lazy)),Q=vue.computed(()=>y.value.$rewardEarly!=null?y.value.$rewardEarly:vue.unref(u.rewardEarly)),De=vue.computed(()=>y.value.$autoDirty!=null?y.value.$autoDirty:vue.unref(u.autoDirty)),gt=vue.computed(()=>Object.entries(D.value).some(([Z,J])=>J.$validating)),Ce=vue.computed(()=>pe.value&&!he.value&&c.value),Le=vue.computed(()=>Ce.value?_e({field:{$dirty:c.value,$externalErrors:C.value,$rules:D.value}}):[]),ze=vue.computed(()=>_e({field:{$dirty:c.value,$externalErrors:C.value,$rules:D.value},silent:!0})),Je=vue.computed(()=>!(pe.value||he.value)),he=vue.computed(()=>I.value||!Q.value?Object.entries(D.value).some(([Z,J])=>J.$pending):!1),pe=vue.computed(()=>C.value?.length?!0:!Q.value||Q.value&&I.value?Object.entries(D.value).some(([Z,J])=>!J.$valid):!1),Ye=vue.computed(()=>a),Ie=vue.computed(()=>c.value&&!ee(e.value)&&!gt.value?C.value?.length?!1:Q.value?Object.entries(D.value).every(([Z,J])=>J.$valid):!pe.value:!1),vt=vue.computed(()=>Object.entries(D.value).some(([Z,J])=>J._haveAsync));function $t(){m?.fields&&Object.entries(m.fields).forEach(([Z,J])=>{let St=vue.effectScope();Qe[Z]=St.run(()=>{let Xe=vue.ref();return vue.watchEffect(()=>{Xe.value=J({$dirty:c.value,$externalErrors:C.value,$value:e,$rules:D.value,$error:Ce.value,$pending:he.value,$invalid:pe.value,$valid:Ie.value,$errors:Le.value,$ready:Je.value,$silentErrors:ze.value,$anyDirty:j.value,$name:Ye.value});}),Xe});});}let Qe={};return $t(),vue.watch(Ie,Z=>{Z&&(I.value=!1);}),{$error:Ce,$pending:he,$invalid:pe,$valid:Ie,$debounce:U,$lazy:W,$errors:Le,$ready:Je,$silentErrors:ze,$rewardEarly:Q,$autoDirty:De,$anyDirty:j,$name:Ye,haveAnyAsyncRule:vt,$shortcuts:Qe}}),x=vue.watch(v,h),s=vue.watch(e,()=>{f.$autoDirty.value&&(c.value||(c.value=!0)),t.value instanceof Function&&w(),P(),f.$rewardEarly.value;},{deep:$?!0:ie?1:!0}),V=vue.watch(c,()=>{o.setDirtyEntry(n,c.value);}),l=vue.watch(f.$valid,j=>{f.$rewardEarly.value&&j&&(I.value=!1);}),G=vue.watch(f.haveAnyAsyncRule,O);}function H(){Object.entries(D.value).forEach(([j,U])=>{U.$validate();});}let D=vue.ref(),y=vue.ref();w();function g(){c.value=!1,C.value=[],Object.entries(D.value).forEach(([j,U])=>{U.$reset();}),f.$lazy.value||Object.entries(D.value).map(([j,U])=>U.$validate());}function p(){c.value||(c.value=!0,f.$rewardEarly.value,P());}let R=f.$debounce.value?ye(i,f.$debounce.value??0):i;async function i(){try{if(I.value=!0,f.$autoDirty.value&&c.value&&!f.$pending.value)return !f.$error.value;{let j=Object.entries(D.value).map(([W,Q])=>Q.$validate());return (await Promise.allSettled(j)).every(W=>W.status==="fulfilled"?W.value:!1)}}catch{return !1}}function b(){_(),e.value=at(e,S),g();}function T(j=!0){return c.value?e.value:null}function N(){C.value=[];}f.$lazy.value||i();let{$anyDirty:Y,$error:te,$errors:oe,$invalid:re,$name:B,$pending:F,$ready:A,$silentErrors:se,$valid:xe,$shortcuts:Se}=f;return vue.reactive({$dirty:c,$error:te,$errors:oe,$valid:xe,$invalid:re,$pending:F,$silentErrors:se,$anyDirty:Y,$ready:A,$name:B,$externalErrors:C,$value:e,$rules:D,...Se,$reset:g,$touch:p,$validate:R,$unwatch:_,$watch:M,$resetAll:b,$extractDirtyFields:T,$clearExternalErrors:N})}function ft({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:u,rules:v,externalErrors:E,initialState:$,shortcuts:S,fieldName:m}){let d=v.$key?v.$key:Fe(),f=`${t}.${String(d)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?f=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:d,enumerable:!1,configurable:!1,writable:!1}}));let c=vue.toRef(()=>E.value?.[r]),I=Te({state:o,rulesDef:vue.toRef(()=>v),customMessages:u,path:f,storage:a,options:n,externalErrors:c,initialState:$?.[r],shortcuts:S,fieldName:m});if(I){let C=o.value?.$id;I.$id=C??String(d),a.addArrayStatus(e,I.$id,I);}return I}function Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:u,initialState:v,shortcuts:E,fieldName:$}){let S=vue.effectScope(),m,d=vue.effectScope(),f;if(Array.isArray(e.value)&&!t.value.$each)return null;let c=vue.ref(),I=vue.ref(e.value),C,s=vue.ref({}),l=a.getCollectionsEntry(n);f=d.run(()=>{let p=vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(b=>typeof b!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(b=>me(b)):!1),R=vue.computed(()=>u.value?je(u.value)?u.value.$errors??[]:[]:[]),i=vue.computed(()=>u.value?je(u.value)?u.value.$each??[]:[]:[]);return {isPrimitiveArray:p,$externalErrorsField:R,$externalErrorsEach:i}}),x(),G();function x(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(c.value=Fe(),Object.defineProperties(e.value,{$id:{value:c.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(c.value=e.value.$id)),!f.isPrimitiveArray.value&&(I.value=s.value.$value,Array.isArray(e.value)&&t.value.$each?l.value=e.value.map((p,R)=>{let i=Ae(t.value.$each,vue.toRef(()=>p),R);if(i){let b=ft({$id:c.value,path:n,rules:i,stateValue:vue.toRef(()=>p),index:R,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:v[R],shortcuts:E,fieldName:$});return b||null}}).filter(p=>!!p):l.value=[],s.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:f.$externalErrorsField,$isArray:!0,initialState:v,shortcuts:E,fieldName:$}));}function V(){if(Array.isArray(e.value)){let p=K(l.value);l.value=e.value.map((R,i)=>{let b=vue.toRef(()=>R);if(R.$id&&l.value.find(T=>T.$id===R.$id)){let T=a.getArrayStatus(c.value,R.$id);return T?(T.$value=b,T):null}else {let T=Ae(t.value.$each,b,i);if(T){let N=ft({$id:c.value,path:n,rules:T,stateValue:b,index:i,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:v[i],fieldName:$});return N||null}}}).filter(R=>!!R),p.filter(R=>!e.value.find(i=>R.$id===i.$id)).forEach((R,i)=>{a.deleteArrayStatus(c.value,i.toString());});}else l.value=[];}function G(){C=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?x():V();},{deep:ie?1:!0,flush:"pre"}),m=S.run(()=>{let p=vue.computed(()=>s.value.$dirty&&l.value.every(A=>A.$dirty)),R=vue.computed(()=>s.value.$anyDirty||l.value.some(A=>A.$dirty)),i=vue.computed(()=>s.value.$invalid||l.value.some(A=>A.$invalid)),b=vue.computed(()=>s.value.$valid&&l.value.every(A=>A.$valid)),T=vue.computed(()=>s.value.$error||l.value.some(A=>A.$error)),N=vue.computed(()=>!(i.value||Y.value)),Y=vue.computed(()=>s.value.$pending||l.value.some(A=>A.$pending)),te=vue.computed(()=>({$errors:s.value.$errors,$each:l.value.map(A=>A.$errors)})),oe=vue.computed(()=>({$errors:s.value.$silentErrors,$each:l.value.map(A=>A.$silentErrors)})),re=vue.computed(()=>$);function B(){E?.collections&&Object.entries(E?.collections).forEach(([A,se])=>{let xe=vue.effectScope();F[A]=xe.run(()=>{let Se=vue.ref();return vue.watchEffect(()=>{Se.value=se({$dirty:p.value,$error:T.value,$pending:Y.value,$invalid:i.value,$valid:b.value,$errors:te.value,$ready:N.value,$silentErrors:oe.value,$anyDirty:R.value,$name:re.value,$each:l.value,$field:s.value,$value:e});}),Se});});}let F={};return B(),{$dirty:p,$anyDirty:R,$invalid:i,$valid:b,$error:T,$pending:Y,$errors:te,$silentErrors:oe,$ready:N,$name:re,$shortcuts:F}}),f.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),C());}function P(){C&&C(),s.value&&s.value.$unwatch(),l.value&&l.value.forEach(p=>{"$dirty"in p&&p.$unwatch();}),S.stop(),S=vue.effectScope(),d.stop(),d=vue.effectScope(!0);}function h(){s.value.$touch(),l.value.forEach(p=>{p.$touch();});}function w(){s.value.$reset(),l.value.forEach(p=>{p.$reset();});}async function O(){try{return (await Promise.all([s.value.$validate(),...l.value.map(R=>R.$validate())])).every(R=>!!R)}catch{return !1}}function _(){s.value.$clearExternalErrors(),l.value.forEach(p=>{p.$clearExternalErrors();});}function M(p=!0){let R=l.value.map(i=>{if(Ve(i))return i.$extractDirtyFields(p)});return p&&(R=R.filter(i=>L(i)?!ee(i):!!i)),R}function H(){console.log(v),P(),lt(e,v),w();}async function D(){return h(),await O()?e.value:!1}let{$shortcuts:y,...g}=m;return vue.reactive({$field:s,...g,...y,$each:l,$value:e,$validate:O,$unwatch:P,$watch:G,$touch:h,$reset:w,$resetAll:H,$extractDirtyFields:M,$parse:D,$clearExternalErrors:_})}function Be({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:u,externalErrors:v,validationGroups:E,initialState:$,shortcuts:S,fieldName:m}){let d,f,c=null;function s(y=!0){l.value=null,vue.triggerRef(l);let g=Object.fromEntries(Object.entries(e.value).map(([i,b])=>{if(b){let T=vue.toRef(t.value,i),N=vue.toRef(()=>b),Y=vue.toRef(()=>v.value?.[i]);return [i,Te({state:T,rulesDef:N,customMessages:r,path:n?`${n}.${i}`:i,storage:o,options:u,externalErrors:Y,initialState:$?.[i],shortcuts:S,fieldName:i})]}return []}).filter(i=>!!i.length&&i[1]!=null)),p=Object.fromEntries(Object.entries(vue.unref(v)??{}).filter(([i])=>!(i in e.value)).map(([i,b])=>{if(b){let T=vue.toRef(()=>({})),N=vue.toRef(()=>b);return [i,Te({state:vue.ref(void 0),rulesDef:T,customMessages:r,path:n?`${n}.${i}`:i,storage:o,options:u,externalErrors:N,initialState:$?.[i],fieldName:i})]}return []})),R=Object.fromEntries(Object.entries(E?.(g)??{}).map(([i,b])=>b.length?[i,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(T=>[T,Ke(vue.toRef(()=>b),T)])),...Object.fromEntries(["$errors","$silentErrors"].map(T=>[T,et(vue.toRef(()=>b),T)]))}]:[]));l.value={...g,...p,...R},y&&P();}let l=o.getFieldsEntry(n);s();function x(){s(!1),Object.entries(l.value).forEach(([y,g])=>{g.$reset();}),P();}function V(){Object.entries(l.value).forEach(([y,g])=>{g.$touch();});}async function G(){try{return (await Promise.allSettled(Object.entries(l.value).map(([g,p])=>p.$validate()))).every(g=>g.status==="fulfilled"?g.value:!1)}catch{return !1}}function P(){a&&(c=vue.watch(a,()=>{h(),s();},{deep:ie?1:!0,flush:"post"})),d=vue.effectScope(),f=d.run(()=>{let y=vue.computed(()=>!!Object.entries(l.value).length&&Object.entries(l.value).every(([B,F])=>F.$dirty)),g=vue.computed(()=>Object.entries(l.value).some(([B,F])=>F.$dirty)),p=vue.computed(()=>Object.entries(l.value).some(([B,F])=>F.$invalid)),R=vue.computed(()=>Object.entries(l.value).every(([B,F])=>F.$valid)),i=vue.computed(()=>y.value&&!T.value&&p.value),b=vue.computed(()=>!(p.value||T.value)),T=vue.computed(()=>Object.entries(l.value).some(([B,F])=>F.$pending)),N=vue.computed(()=>Object.fromEntries(Object.entries(l.value).map(([B,F])=>[B,F.$errors]))),Y=vue.computed(()=>Object.fromEntries(Object.entries(l.value).map(([B,F])=>[B,F.$silentErrors]))),te=vue.computed(()=>m);function oe(){S?.nested&&Object.entries(S.nested).forEach(([B,F])=>{let A=vue.effectScope();re[B]=A.run(()=>{let se=vue.ref();return vue.watchEffect(()=>{se.value=F({$dirty:y.value,$value:t,$error:i.value,$pending:T.value,$invalid:p.value,$valid:R.value,$ready:b.value,$anyDirty:g.value,$name:te.value,$silentErrors:Y.value,$errors:N.value,$fields:l.value});}),se});});}let re={};return oe(),{$dirty:y,$anyDirty:g,$invalid:p,$valid:R,$error:i,$pending:T,$errors:N,$silentErrors:Y,$ready:b,$name:te,$shortcuts:re}});}function h(){l.value&&Object.entries(l.value).forEach(([y,g])=>{g.$unwatch();}),c?.(),d.stop(),d=vue.effectScope();}function w(){Object.entries(l.value).forEach(([y,g])=>{g.$clearExternalErrors();});}function O(){h(),de(t,$??{}),x();}function _(y=!0){let g=Object.entries(l.value).map(([p,R])=>[p,R.$extractDirtyFields(y)]);return y&&(g=g.filter(([p,R])=>L(R)?!ee(R):Array.isArray(R)?R.length:!!R)),Object.fromEntries(g)}async function M(){return V(),await G()?t.value:!1}let{$shortcuts:H,...D}=f;return vue.reactive({...D,...H,$fields:l,$value:t,$resetAll:O,$reset:x,$touch:V,$validate:G,$unwatch:h,$watch:P,$clearExternalErrors:w,$extractDirtyFields:_,$parse:M})}function Te({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:u,index:v,initialState:E,shortcuts:$,onUnwatch:S,fieldName:m}){return st(t)?Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:v,externalErrors:u,initialState:E,fieldName:m,shortcuts:$}):ot(e,t)&&nt(e)?Be({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:v,initialState:E,shortcuts:$,fieldName:m,externalErrors:u}):it(t)?Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:v,externalErrors:u,onUnwatch:S,shortcuts:$,initialState:E,fieldName:m}):null}function Ue({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o}){let u=Me(),v=vue.computed(()=>vue.unref(t.externalErrors));return vue.reactive(Be({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:u,options:t,externalErrors:v,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root"}))}function We(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function a(o,u,v){let E=vue.isRef(u)?u:vue.computed(typeof u=="function"?u:()=>u),$={...n,...v},S=vue.isRef(o)?o:vue.ref(o),m=K(vue.toRaw(S.value));return {r$:Ue({scopeRules:E,state:S,options:$,initialState:m,customRules:e,shortcuts:r})}}return a}var yt=We();function He(){function e(t,r){return r}return e}var qe=He();function mt({rules:e,modifiers:t,shortcuts:r}){let n=We(e,t,r),a=He();return {useRegle:n,inferRules:a}}exports.InternalRuleType=Pe;exports.createRule=Oe;exports.defineRegleConfig=mt;exports.inferRules=qe;exports.unwrapRuleParameters=q;exports.useRegle=yt;
|
|
1
|
+
'use strict';var vue=require('vue');var Pe=(r=>(r.Inline="__inline",r.Async="__async",r))(Pe||{});function Ke(e,t){return vue.computed(()=>e.value.some(r=>r[t]))}function et(e,t){return vue.computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function q(e){return e.map(t=>t instanceof Function?t():vue.unref(t))}function tt(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function rt(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(o=>o.trim()).filter(o=>o.includes("=")).length+e.length}function we(e,...t){let{message:r,validator:n,active:a,type:o,...c}=e,S=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator($,...g){return e.validator($,...q(g.length?g:t))},message($,g){return typeof e.message=="function"?e.message($,{...g,$params:q(g.$params?.length?g.$params:t)}):e.message},active($,g){return typeof e.active=="function"?e.active($,{...g,$params:q(g.$params?.length?g.$params:t)}):e.active??!0},exec($){let g=e.validator($,...q(t)),y;return g instanceof Promise?g.then(v=>(y=v,typeof y=="object"&&"$valid"in y?y.$valid:typeof y=="boolean"?y:!1)):(y=g,typeof y=="object"&&"$valid"in y?y.$valid:typeof y=="boolean"?y:!1)}},...c,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:S,_params:tt(t)}}function Oe(e){if(typeof e.validator=="function"){let r=we(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(rt(e.validator)>1){let a=function(...o){return we(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function L(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function nt(e){return L(e.value)}function te(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>te(n)))),r=="Map"&&(t=new Map([...e].map(n=>[te(n[0]),te(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,Tt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=te(e[n]);}return t}function Tt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function Ae(e,t,r){return e instanceof Function?e(t,r??0):e}function at(e,t){vue.isRef(e)?e.value=t:e=t;}function lt(e,t){vue.isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=vue.isRef(e)?e.value[n]:e[n];a={},pe(a,t[n]);});}function pe(e,t){Object.entries({...vue.unref(e),...t}).forEach(([r,n])=>{let a=vue.isRef(e)?e.value:e,o=vue.isRef(t[r])?t[r]._value:t[r],c=vue.isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(o)&&o.forEach((S,b)=>{a[r][b]={},pe(a[r][b],o[b]);})):L(o)?pe(c,o):vue.isRef(a[r])?a[r].value=o:a[r]=o;});}function Q(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function he(e,t,r){let n,a=(...o)=>new Promise(c=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(c);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(c=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(c);},0);}),a}function Dt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),c=Number(n[a]);if(o>c)return 1;if(c>o)return -1;if(!isNaN(o)&&isNaN(c))return 1;if(isNaN(o)&&!isNaN(c))return -1}return 0}var se=Dt(vue.version,"3.5.0")!==-1;function Ct(){return Math.floor(Math.random()*Date.now()).toString()}function Fe(){return typeof window>"u"?Ct():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Me(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),a=vue.shallowRef(new Map),o=vue.shallowRef(new Map);function c(s){let l=t.value.get(s);if(l)return l;{let x=vue.ref({});return t.value.set(s,x),x}}function S(s){let l=r.value.get(s);if(l)return l;{let x=vue.ref([]);return r.value.set(s,x),x}}function b(s,l,x){o.value.set(`${s}-${l}`,x);}function h(s,l){return o.value.get(`${s}-${l}`)}function $(s,l){s&&l!=null&&o.value.delete(`${s}-${l}`);}function g(s,l){n.value.set(s,l);}function y(s){return n.value.get(s)??!1}function v(s,l){e.value.set(s,l);}function f(s,l){let x=e.value.get(s);return x?I(l,x)?{valid:!0}:{valid:!1}:void 0}function I(s,l){let x=Object.keys(l),V=Object.keys(s);return V.length!==x.length||!V.every(P=>x.includes(P))?!1:V.every(P=>{let E=s[P],w=l[P];return !w||!E||typeof E=="function"||typeof w=="function"||typeof E=="number"||typeof E=="boolean"?!1:E._params?E._params?.every((A,_)=>{if(typeof w=="number"||typeof w=="boolean")return !0;{let M=q(w._params),U=q(E._params);return M?.[_]===U?.[_]}}):!0})}function D(s){let l=a.value.get(s);if(l)return l;{let x=vue.ref(!1),V=vue.ref(!0),G=vue.ref({}),P=vue.ref(!1);return a.value.set(s,{$pending:x,$valid:V,$metadata:G,$validating:P}),{$pending:x,$valid:V,$metadata:G,$validating:P}}}return vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:v,setDirtyEntry:g,checkRuleDeclEntry:f,getDirtyState:y,trySetRuleStatusRef:D,getFieldsEntry:c,getCollectionsEntry:S,getArrayStatus:h,addArrayStatus:b,deleteArrayStatus:$,arrayStatusStorage:o}}function ot(e,t){return L(e.value)&&L(t.value)&&!Object.entries(t.value).some(r=>de(r))}function st(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function ut(e){return !!e.value&&L(e.value)}function de(e){return L(e)&&"_validator"in e}function ve(e){return typeof e.value!="function"}function je(e){return L(e)&&"$fields"in e}function Ve(e){return "$each"in e||"$errors"in e}function _e({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function ct({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:c,$debounce:S}){let b=vue.effectScope(),h,$,g=vue.ref(!1),{$pending:y,$valid:v,$metadata:f,$validating:I}=c.trySetRuleStatusRef(`${o}.${n}`);function D(){h=b.run(()=>{let E=vue.computed(()=>({$invalid:!v.value,$params:U.value,...f.value})),w=vue.computed(()=>ve(r)?typeof r.value.active=="function"?r.value.active(a.value,E.value):!!r.value.active:!0),A=vue.computed(()=>{let p="",u=t?t[n]?.message:void 0;return u&&(typeof u=="function"?p=u(a.value,E.value):p=u),ve(r)&&(u&&!r.value._patched||(typeof r.value.message=="function"?p=r.value.message(a.value,E.value):p=r.value.message)),Q(p)&&(p="Error",console.warn(`No error message defined for ${o}.${n}`)),p}),_=vue.computed(()=>ve(r)&&r.value.type?r.value.type:n),M=vue.computed(()=>ve(r)?r.value.validator:r.value),U=vue.computed(()=>typeof r.value=="function"?[]:q(r.value._params??[])),R=vue.computed(()=>`${o}.${_.value}`);return {$active:w,$message:A,$type:_,$validator:M,$params:U,$path:R}}),$=vue.watch(h.$params,V,{deep:!0});}D();function s(){v.value=!0,e.value&&(y.value=!0);}async function l(){let E=h.$validator.value,w=E(a.value,...h.$params.value),A=!1,_=a.value;try{s();let M;if(w instanceof Promise?M=await w:M=w,a.value!==_)return !0;if(typeof M=="boolean")A=M;else {let{$valid:U,...R}=M;A=U,f.value=R;}}catch{A=!1;}finally{y.value=!1;}return A}let x=he(l,S??200);async function V(){try{I.value=!0;let E=!1;if(de(r.value)&&r.value._async)E=await x();else {let w=h.$validator.value,A=w(a.value,...h.$params.value);if(A instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(A!=null)if(typeof A=="boolean")E=A;else {let{$valid:_,...M}=A;E=_,f.value=M;}}return v.value=E,E}catch{return !1}finally{I.value=!1;}}function G(){v.value=!0,f.value={},y.value=!1,I.value=!1,D();}function P(){$(),b.stop(),b=vue.effectScope();}return vue.reactive({...h,$pending:y,$valid:v,$metadata:f,_haveAsync:g,$validating:I,$validate:V,$unwatch:P,$watch:D,$reset:G})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:c,externalErrors:S,onUnwatch:b,$isArray:h,initialState:$,shortcuts:g}){let y=vue.effectScope(),v,f=vue.ref(!1),I=vue.ref(!1),D=vue.ref([]),s,l,x,V,G,P=()=>{};function E(){D.value=S.value??[];}E();function w(){let j=t.value,J=o.checkRuleDeclEntry(n,j);p.value=Object.fromEntries(Object.entries(j).filter(([W])=>W.startsWith("$"))),R.value=Object.fromEntries(Object.entries(t.value).filter(([W])=>!W.startsWith("$")).map(([W,Z])=>{if(Z){let De=vue.toRef(()=>Z);return [W,ct({$dirty:f,customMessages:r,rule:De,ruleKey:W,state:e,path:n,storage:o,$debounce:p.value.$debounce})]}return []}).filter(W=>!!W.length)),M(),A(),J?.valid!=null&&(f.value=o.getDirtyState(n),f.value&&P()),o.addRuleDeclEntry(n,j);}function A(){P=v.$debounce.value?he(U,v.$debounce.value??v.haveAnyAsyncRule?100:0):U;}function _(){R.value&&Object.entries(R.value).forEach(([j,J])=>{J.$unwatch();}),V(),f.value&&o.setDirtyEntry(n,f.value),s(),l(),x(),y.stop(),y=vue.effectScope(),b?.(),G?.();}function M(){R.value&&Object.entries(R.value).forEach(([j,J])=>{J.$watch();}),v=y.run(()=>{let j=vue.computed(()=>f.value),J=vue.computed(()=>p.value.$debounce),W=vue.computed(()=>p.value.$lazy!=null?p.value.$lazy:vue.unref(c.lazy)),Z=vue.computed(()=>p.value.$rewardEarly!=null?p.value.$rewardEarly:vue.unref(c.rewardEarly)),De=vue.computed(()=>p.value.$clearExternalErrorsOnChange!=null?p.value.$clearExternalErrorsOnChange:vue.unref(c.clearExternalErrorsOnChange)),yt=vue.computed(()=>p.value.$autoDirty!=null?p.value.$autoDirty:vue.unref(c.autoDirty)),qe=vue.computed(()=>Object.entries(R.value).some(([ee,Y])=>Y.$validating)),Ce=vue.computed(()=>Re.value&&!Se.value&&f.value),Le=vue.computed(()=>Ce.value?_e({field:{$dirty:f.value,$externalErrors:D.value,$rules:R.value}}):[]),ze=vue.computed(()=>_e({field:{$dirty:f.value,$externalErrors:D.value,$rules:R.value},silent:!0})),Je=vue.computed(()=>!(Re.value||Se.value)),Se=vue.computed(()=>I.value||!Z.value?Object.entries(R.value).some(([ee,Y])=>Y.$pending):!1),Re=vue.computed(()=>D.value?.length?!0:Q(R.value)?!1:!Z.value||Z.value&&I.value?Object.entries(R.value).some(([ee,Y])=>!Y.$valid):!1),Ye=vue.computed(()=>a),Ie=vue.computed(()=>Q(R.value)?!1:f.value&&!Q(e.value)&&!qe.value?D.value?.length?!1:Z.value?Object.entries(R.value).every(([ee,Y])=>Y.$valid):!Re.value:!1),gt=vue.computed(()=>Object.entries(R.value).some(([ee,Y])=>Y._haveAsync));function mt(){g?.fields&&Object.entries(g.fields).forEach(([ee,Y])=>{let $t=vue.effectScope();Qe[ee]=$t.run(()=>{let Xe=vue.ref();return vue.watchEffect(()=>{Xe.value=Y({$dirty:f.value,$externalErrors:D.value,$value:e,$rules:R.value,$error:Ce.value,$pending:Se.value,$invalid:Re.value,$valid:Ie.value,$errors:Le.value,$ready:Je.value,$silentErrors:ze.value,$anyDirty:j.value,$name:Ye.value});}),Xe});});}let Qe={};return mt(),vue.watch(Ie,ee=>{ee&&(I.value=!1);}),{$error:Ce,$pending:Se,$invalid:Re,$valid:Ie,$debounce:J,$lazy:W,$errors:Le,$ready:Je,$silentErrors:ze,$rewardEarly:Z,$autoDirty:yt,$clearExternalErrorsOnChange:De,$anyDirty:j,$name:Ye,haveAnyAsyncRule:gt,$shortcuts:Qe,$validating:qe}}),x=vue.watch(S,E),s=vue.watch(e,()=>{v.$autoDirty.value&&(f.value||(f.value=!0)),t.value instanceof Function&&w(),P(),v.$rewardEarly.value!==!0&&v.$clearExternalErrorsOnChange.value&&C();},{deep:h?!0:se?1:!0}),V=vue.watch(f,()=>{o.setDirtyEntry(n,f.value);}),l=vue.watch(v.$valid,j=>{v.$rewardEarly.value&&j&&(I.value=!1);}),G=vue.watch(v.haveAnyAsyncRule,A);}function U(){Object.values(R.value).forEach(j=>{j.$validate();});}let R=vue.ref(),p=vue.ref();w();function u(){f.value=!1,D.value=[],Object.entries(R.value).forEach(([j,J])=>{J.$reset();}),v.$lazy.value||Object.entries(R.value).map(([j,J])=>J.$validate());}function d(j=!0){f.value||(f.value=!0,j&&P());}async function m(){try{if(I.value=!0,!f.value)f.value=!0;else if(v.$autoDirty.value&&f.value&&!v.$pending.value)return !v.$error.value;return (await Promise.allSettled(Object.entries(R.value).map(([W,Z])=>Z.$validate()))).every(W=>W.status==="fulfilled"?!!W.value:!1)?e.value:!1}catch{return !1}}function i(){_(),e.value=at(e,$),u();}function T(j=!0){return f.value?e.value:null}function C(){D.value=[];}v.$lazy.value||P();let{$anyDirty:B,$error:H,$errors:le,$invalid:re,$name:k,$pending:F,$ready:O,$silentErrors:oe,$valid:xe,$shortcuts:$e,$validating:Qt}=v;return vue.reactive({$dirty:f,$error:H,$errors:le,$valid:xe,$invalid:re,$pending:F,$silentErrors:oe,$anyDirty:B,$ready:O,$name:k,$externalErrors:D,$value:e,$rules:R,...$e,$reset:u,$touch:d,$validate:m,$unwatch:_,$watch:M,$resetAll:i,$extractDirtyFields:T,$clearExternalErrors:C})}function ft({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:c,rules:S,externalErrors:b,initialState:h,shortcuts:$,fieldName:g}){let y=S.$key?S.$key:Fe(),v=`${t}.${String(y)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?v=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:y,enumerable:!1,configurable:!1,writable:!1}}));let f=vue.toRef(()=>b.value?.[r]),I=me({state:o,rulesDef:vue.toRef(()=>S),customMessages:c,path:v,storage:a,options:n,externalErrors:f,initialState:h?.[r],shortcuts:$,fieldName:g});if(I){let D=o.value?.$id;I.$id=D??String(y),a.addArrayStatus(e,I.$id,I);}return I}function Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:c,initialState:S,shortcuts:b,fieldName:h}){let $=vue.effectScope(),g,y=vue.effectScope(),v;if(!Array.isArray(e.value)&&!t.value.$each)return null;let f=vue.ref(),I=vue.ref(e.value),D,s=vue.ref({}),l=a.getCollectionsEntry(n);v=y.run(()=>{let u=vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(i=>typeof i!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(i=>de(i)):!1),d=vue.computed(()=>c.value?Ve(c.value)?c.value.$errors??[]:[]:[]),m=vue.computed(()=>c.value?Ve(c.value)?c.value.$each??[]:[]:[]);return {isPrimitiveArray:u,$externalErrorsField:d,$externalErrorsEach:m}}),x(),G();function x(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(f.value=Fe(),Object.defineProperties(e.value,{$id:{value:f.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(f.value=e.value.$id)),!v.isPrimitiveArray.value&&(I.value=s.value.$value,Array.isArray(e.value)?l.value=e.value.map((u,d)=>{let m=Ae(t.value.$each,vue.toRef(()=>u),d),i=ft({$id:f.value,path:n,rules:m??{},stateValue:vue.toRef(()=>u),index:d,options:o,storage:a,externalErrors:v.$externalErrorsEach,initialState:S[d],shortcuts:b,fieldName:h});return i||null}).filter(u=>!!u):l.value=[],s.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:v.$externalErrorsField,$isArray:!0,initialState:S,shortcuts:b,fieldName:h}));}function V(){if(Array.isArray(e.value)){let u=te(l.value);l.value=e.value.map((d,m)=>{let i=vue.toRef(()=>d);if(d.$id&&l.value.find(T=>T.$id===d.$id)){let T=a.getArrayStatus(f.value,d.$id);return T?(T.$value=i,T):null}else {let T=Ae(t.value.$each,i,m);if(T){let C=ft({$id:f.value,path:n,rules:T,stateValue:i,index:m,options:o,storage:a,externalErrors:v.$externalErrorsEach,initialState:S[m],shortcuts:b,fieldName:h});return C||null}}}).filter(d=>!!d),u.filter(d=>!e.value.find(m=>d.$id===m.$id)).forEach((d,m)=>{a.deleteArrayStatus(f.value,m.toString());});}else l.value=[];}function G(){D=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?x():V();},{deep:se?1:!0,flush:"pre"}),g=$.run(()=>{let u=vue.computed(()=>s.value.$dirty&&l.value.every(O=>O.$dirty)),d=vue.computed(()=>s.value.$anyDirty||l.value.some(O=>O.$dirty)),m=vue.computed(()=>s.value.$invalid||l.value.some(O=>O.$invalid)),i=vue.computed(()=>(Q(s.value.$rules)?!0:s.value.$valid)&&l.value.every(O=>O.$valid)),T=vue.computed(()=>s.value.$error||l.value.some(O=>O.$error)),C=vue.computed(()=>!(m.value||B.value)),B=vue.computed(()=>s.value.$pending||l.value.some(O=>O.$pending)),H=vue.computed(()=>({$errors:s.value.$errors,$each:l.value.map(O=>O.$errors)})),le=vue.computed(()=>({$errors:s.value.$silentErrors,$each:l.value.map(O=>O.$silentErrors)})),re=vue.computed(()=>h);function k(){b?.collections&&Object.entries(b?.collections).forEach(([O,oe])=>{let xe=vue.effectScope();F[O]=xe.run(()=>{let $e=vue.ref();return vue.watchEffect(()=>{$e.value=oe({$dirty:u.value,$error:T.value,$pending:B.value,$invalid:m.value,$valid:i.value,$errors:H.value,$ready:C.value,$silentErrors:le.value,$anyDirty:d.value,$name:re.value,$each:l.value,$field:s.value,$value:e});}),$e});});}let F={};return k(),{$dirty:u,$anyDirty:d,$invalid:m,$valid:i,$error:T,$pending:B,$errors:H,$silentErrors:le,$ready:C,$name:re,$shortcuts:F}}),v.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),D());}function P(){D&&D(),s.value&&s.value.$unwatch(),l.value&&l.value.forEach(u=>{"$dirty"in u&&u.$unwatch();}),$.stop(),$=vue.effectScope(),y.stop(),y=vue.effectScope(!0);}function E(u=!0){s.value.$touch(u),l.value.forEach(d=>{d.$touch(u);});}function w(){s.value.$reset(),l.value.forEach(u=>{u.$reset();});}async function A(){try{return (await Promise.all([s.value.$validate(),...l.value.map(m=>m.$validate())])).every(m=>m.value!==!1)?e.value:!1}catch{return !1}}function _(){s.value.$clearExternalErrors(),l.value.forEach(u=>{u.$clearExternalErrors();});}function M(u=!0){let d=l.value.map(m=>{if(je(m))return m.$extractDirtyFields(u)});return u&&(d=d.filter(m=>L(m)?!Q(m):!!m)),d}function U(){P(),lt(e,S),w();}let{$shortcuts:R,...p}=g;return vue.reactive({$field:s,...p,...R,$each:l,$value:e,$validate:A,$unwatch:P,$watch:G,$touch:E,$reset:w,$resetAll:U,$extractDirtyFields:M,$clearExternalErrors:_})}function Be({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:c,externalErrors:S,validationGroups:b,initialState:h,shortcuts:$,fieldName:g}){let y,v,f=null;function s(R=!0){l.value=null,vue.triggerRef(l);let p=Object.fromEntries(Object.entries(e.value).map(([i,T])=>{if(T){let C=vue.toRef(t.value,i),B=vue.toRef(()=>T),H=vue.toRef(()=>S.value?.[i]);return [i,me({state:C,rulesDef:B,customMessages:r,path:n?`${n}.${i}`:i,storage:o,options:c,externalErrors:H,initialState:h?.[i],shortcuts:$,fieldName:i})]}return []}).filter(i=>!!i.length&&i[1]!=null)),u=Object.fromEntries(Object.entries(vue.unref(S)??{}).filter(([i])=>!(i in e.value)).map(([i,T])=>{if(T){let C=vue.toRef(t.value,i),B=vue.toRef(()=>({})),H=vue.toRef(()=>T);return [i,me({state:C,rulesDef:B,customMessages:r,path:n?`${n}.${i}`:i,storage:o,options:c,externalErrors:H,initialState:h?.[i],shortcuts:$,fieldName:i})]}return []})),d=Object.fromEntries(Object.entries(t.value).filter(([i])=>!(i in e.value)&&!(i in(u.value??{}))).map(([i,T])=>{let C=vue.toRef(t.value,i),B=vue.toRef(()=>({})),H=vue.toRef(()=>S.value?.[i]);return [i,me({state:C,rulesDef:B,customMessages:r,path:n?`${n}.${i}`:i,storage:o,options:c,externalErrors:H,initialState:h?.[i],shortcuts:$,fieldName:i})]})),m=Object.fromEntries(Object.entries(b?.(p)??{}).map(([i,T])=>T.length?[i,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(C=>[C,Ke(vue.toRef(()=>T),C)])),...Object.fromEntries(["$errors","$silentErrors"].map(C=>[C,et(vue.toRef(()=>T),C)]))}]:[]));l.value={...p,...u,...d,...m},R&&P();}let l=o.getFieldsEntry(n);s();function x(){s(!1),Object.entries(l.value).forEach(([R,p])=>{p.$reset();}),P();}function V(R=!0){Object.values(l.value).forEach(p=>{p.$touch(R);});}async function G(){try{return (await Promise.allSettled(Object.values(l.value).map(u=>u.$validate()))).every(u=>u.status==="fulfilled"?u.value!==!1:!1)?t.value:!1}catch{return !1}}function P(){a&&(f=vue.watch(a,()=>{E(),s();},{deep:se?1:!0,flush:"post"})),y=vue.effectScope(),v=y.run(()=>{let R=vue.computed(()=>!!Object.entries(l.value).length&&Object.entries(l.value).every(([k,F])=>F?.$dirty)),p=vue.computed(()=>Object.entries(l.value).some(([k,F])=>F?.$dirty)),u=vue.computed(()=>Object.entries(l.value).some(([k,F])=>F?.$invalid)),d=vue.computed(()=>Object.entries(l.value).every(([k,F])=>F?.$valid)),m=vue.computed(()=>R.value&&!T.value&&u.value),i=vue.computed(()=>!(u.value||T.value)),T=vue.computed(()=>Object.entries(l.value).some(([k,F])=>F?.$pending)),C=vue.computed(()=>Object.fromEntries(Object.entries(l.value).map(([k,F])=>[k,F?.$errors]))),B=vue.computed(()=>Object.fromEntries(Object.entries(l.value).map(([k,F])=>[k,F?.$silentErrors]))),H=vue.computed(()=>g);function le(){$?.nested&&Object.entries($.nested).forEach(([k,F])=>{let O=vue.effectScope();re[k]=O.run(()=>{let oe=vue.ref();return vue.watchEffect(()=>{oe.value=F({$dirty:R.value,$value:t,$error:m.value,$pending:T.value,$invalid:u.value,$valid:d.value,$ready:i.value,$anyDirty:p.value,$name:H.value,$silentErrors:B.value,$errors:C.value,$fields:l.value});}),oe});});}let re={};return le(),{$dirty:R,$anyDirty:p,$invalid:u,$valid:d,$error:m,$pending:T,$errors:C,$silentErrors:B,$ready:i,$name:H,$shortcuts:re}});}function E(){l.value&&Object.entries(l.value).forEach(([R,p])=>{p.$unwatch();}),f?.(),y.stop(),y=vue.effectScope();}function w(){Object.entries(l.value).forEach(([R,p])=>{p.$clearExternalErrors();});}function A(){E(),pe(t,h??{}),x();}function _(R=!0){let p=Object.entries(l.value).map(([u,d])=>[u,d.$extractDirtyFields(R)]);return R&&(p=p.filter(([u,d])=>L(d)?!Q(d):Array.isArray(d)?d.length:!!d)),Object.fromEntries(p)}let{$shortcuts:M,...U}=v;return vue.reactive({...U,...M,$fields:l,$value:t,$resetAll:A,$reset:x,$touch:V,$validate:G,$unwatch:E,$watch:P,$clearExternalErrors:w,$extractDirtyFields:_})}function me({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:c,index:S,initialState:b,shortcuts:h,onUnwatch:$,fieldName:g}){return st(t,e)?Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:S,externalErrors:c,initialState:b,fieldName:g,shortcuts:h}):ot(e,t)&&nt(e)?Be({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:S,initialState:b,shortcuts:h,fieldName:g,externalErrors:c}):ut(t)?Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:S,externalErrors:c,onUnwatch:$,shortcuts:h,initialState:b,fieldName:g}):null}function ke({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o}){let c=Me(),S=vue.computed(()=>vue.unref(t.externalErrors));return vue.reactive(Be({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:c,options:t,externalErrors:S,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root"}))}function We(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange??!0};function a(o,c,S){let b=vue.isRef(c)?c:vue.computed(typeof c=="function"?c:()=>c),h={...n,...S},$=vue.isRef(o)?o:vue.ref(o),g=te(vue.toRaw($.value));return {r$:ke({scopeRules:b,state:$,options:h,initialState:g,customRules:e,shortcuts:r})}}return a}var dt=We();function Ue(){function e(t,r){return r}return e}var He=Ue();function vt({rules:e,modifiers:t,shortcuts:r}){let n=We(e,t,r),a=Ue();return {useRegle:n,inferRules:a}}exports.InternalRuleType=Pe;exports.createRule=Oe;exports.defineRegleConfig=vt;exports.inferRules=He;exports.unwrapRuleParameters=q;exports.useRegle=dt;
|
package/dist/index.d.cts
CHANGED
|
@@ -16,7 +16,6 @@ type DeepMaybeRef<T extends Record<string, any>> = {
|
|
|
16
16
|
type ExcludeByType<T, U> = {
|
|
17
17
|
[K in keyof T as T[K] extends U ? never : K]: T[K] extends U ? never : T[K];
|
|
18
18
|
};
|
|
19
|
-
type NonPresentKeys<TSource extends Record<string, any>, Target extends Record<string, any>> = Omit<Target, keyof TSource>;
|
|
20
19
|
type NoInferLegacy<A extends any> = [A][A extends any ? 0 : never];
|
|
21
20
|
|
|
22
21
|
type ArrayElement<T> = T extends Array<infer U> ? U : never;
|
|
@@ -249,7 +248,7 @@ type UnionToIntersection<Union> = (
|
|
|
249
248
|
|
|
250
249
|
interface RegleBehaviourOptions {
|
|
251
250
|
/**
|
|
252
|
-
* Only display error when calling `r$.$
|
|
251
|
+
* Only display error when calling `r$.$validate()`
|
|
253
252
|
* @default false
|
|
254
253
|
*/
|
|
255
254
|
lazy?: boolean;
|
|
@@ -259,15 +258,20 @@ interface RegleBehaviourOptions {
|
|
|
259
258
|
*/
|
|
260
259
|
autoDirty?: boolean;
|
|
261
260
|
/**
|
|
262
|
-
* The fields will turn valid when they are, but not invalid unless calling `r$.$
|
|
261
|
+
* The fields will turn valid when they are, but not invalid unless calling `r$.$validate()`
|
|
263
262
|
* @default false
|
|
264
263
|
*
|
|
265
|
-
* @experimental report any bug
|
|
266
264
|
*/
|
|
267
265
|
rewardEarly?: boolean;
|
|
266
|
+
/**
|
|
267
|
+
* Define wether or not the external errors should be cleared when updating a field
|
|
268
|
+
* @default true
|
|
269
|
+
*
|
|
270
|
+
*/
|
|
271
|
+
clearExternalErrorsOnChange?: boolean;
|
|
268
272
|
}
|
|
269
|
-
interface LocalRegleBehaviourOptions<TState extends Record<string, any>, TRules extends
|
|
270
|
-
externalErrors?: MaybeRef<
|
|
273
|
+
interface LocalRegleBehaviourOptions<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}> {
|
|
274
|
+
externalErrors?: MaybeRef<RegleExternalErrorTree<Unwrap<TState>>>;
|
|
271
275
|
validationGroups?: (fields: RegleStatus<TState, TRules>['$fields']) => TValidationGroups;
|
|
272
276
|
}
|
|
273
277
|
type RegleValidationGroupEntry = RegleFieldStatus<any, any>;
|
|
@@ -288,43 +292,44 @@ type ShortcutCommonFn<T extends Record<string, any>> = {
|
|
|
288
292
|
};
|
|
289
293
|
type RegleShortcutDefinition<TCustomRules extends Record<string, any> = Partial<DefaultValidators>> = {
|
|
290
294
|
fields?: ShortcutCommonFn<RegleFieldStatus<any, Partial<TCustomRules> & Partial<DefaultValidators>>>;
|
|
291
|
-
nested?: ShortcutCommonFn<RegleStatus<Record<string, any>,
|
|
295
|
+
nested?: ShortcutCommonFn<RegleStatus<Record<string, any>, ReglePartialRuleTree<any, Partial<TCustomRules> & Partial<DefaultValidators>>>>;
|
|
292
296
|
collections?: ShortcutCommonFn<RegleCollectionStatus>;
|
|
293
297
|
};
|
|
294
298
|
type AddDollarToOptions<T extends Record<string, any>> = {
|
|
295
299
|
[K in keyof T as `$${string & K}`]: T[K];
|
|
296
300
|
};
|
|
297
301
|
|
|
298
|
-
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends
|
|
299
|
-
r$: RegleRoot<TState, TRules, TValidationGroups,
|
|
302
|
+
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> = EmptyObject, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}, TShortcuts extends RegleShortcutDefinition = {}> {
|
|
303
|
+
r$: RegleRoot<TState, TRules, TValidationGroups, TShortcuts>;
|
|
300
304
|
}
|
|
301
305
|
type isDeepExact<T, U> = {
|
|
302
306
|
[K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
|
|
303
307
|
}[keyof T] extends true ? true : false;
|
|
304
|
-
type CheckDeepExact<T, U> = [U] extends [never] ? false : T extends RegleCollectionRuleDecl ? U extends RegleCollectionRuleDecl ? isDeepExact<NonNullable<T['$each']>, UnionToIntersection<NonNullable<U['$each']>>> : T extends RegleRuleDecl ? true : T extends
|
|
308
|
+
type CheckDeepExact<T, U> = [U] extends [never] ? false : T extends RegleCollectionRuleDecl ? U extends RegleCollectionRuleDecl ? isDeepExact<NonNullable<T['$each']>, UnionToIntersection<NonNullable<U['$each']>>> : T extends RegleRuleDecl ? true : T extends ReglePartialRuleTree<any> ? isDeepExact<T, U> : false : T extends RegleRuleDecl ? true : T extends ReglePartialRuleTree<any> ? isDeepExact<T, U> : false;
|
|
305
309
|
type DeepReactiveState<T extends Record<string, any>> = {
|
|
306
310
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
307
311
|
};
|
|
308
|
-
type DeepSafeFormState<TState extends Record<string, any>, TRules extends
|
|
312
|
+
type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>> = [unknown] extends [TState] ? {} : {
|
|
309
313
|
[K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? K : never]?: [
|
|
310
314
|
SafeProperty<TState[K], TRules[K]>
|
|
311
315
|
] extends [never] ? TState[K] : SafeProperty<TState[K], TRules[K]>;
|
|
312
316
|
} & {
|
|
313
317
|
[K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? never : K]-?: SafeProperty<TState[K], TRules[K]>;
|
|
314
318
|
};
|
|
315
|
-
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends
|
|
319
|
+
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = [unknown] extends [TState] ? unknown : TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends ReglePartialRuleTree<any, any> ? TState extends Record<string, any> ? DeepSafeFormState<TState, TRule> : TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? never : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? TState : never : never : never : never;
|
|
320
|
+
type SafeFieldProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? Maybe<TState> : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? Maybe<TState> : Maybe<TState> : Maybe<TState> : Maybe<TState>;
|
|
316
321
|
|
|
317
|
-
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends
|
|
322
|
+
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TValidationGroups, TShortcuts>;
|
|
318
323
|
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>, RegleShortcutDefinition<any>>;
|
|
319
324
|
|
|
320
325
|
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
321
|
-
<TState extends Record<string, any>, TRules extends
|
|
322
|
-
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules):
|
|
326
|
+
<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): TRules;
|
|
327
|
+
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): TRules;
|
|
323
328
|
}
|
|
324
329
|
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
325
330
|
|
|
326
|
-
type InferRegleRoot<T extends () =>
|
|
327
|
-
type InferRegleRules<T extends useRegleFn<any>> = T extends useRegleFn<infer U> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
|
|
331
|
+
type InferRegleRoot<T extends (...args: any[]) => Regle<any, any, any, any>> = T extends (...args: any[]) => infer U ? U extends Regle<any, any, any, any> ? Prettify<U['r$']> : never : never;
|
|
332
|
+
type InferRegleRules<T extends useRegleFn<any, any>> = T extends useRegleFn<infer U, any> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
|
|
328
333
|
type InferRegleShortcuts<T extends useRegleFn<any, any>> = T extends useRegleFn<any, infer U> ? U : {};
|
|
329
334
|
type RegleEnforceRequiredRules<TRules extends keyof DefaultValidators> = Omit<DefaultValidators, TRules> & {
|
|
330
335
|
[K in TRules as keyof TRules]-?: NonNullable<DefaultValidators[K]>;
|
|
@@ -517,25 +522,25 @@ type AllRulesDeclarations = CustomRulesDeclarationTree & {
|
|
|
517
522
|
/**
|
|
518
523
|
* @public
|
|
519
524
|
*/
|
|
520
|
-
type
|
|
525
|
+
type ReglePartialRuleTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
521
526
|
[TKey in keyof TForm]?: RegleFormPropertyType<TForm[TKey], TCustomRules>;
|
|
522
527
|
};
|
|
523
528
|
/**
|
|
524
529
|
* @public
|
|
525
530
|
*/
|
|
526
|
-
type
|
|
531
|
+
type RegleRuleTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
527
532
|
[TKey in keyof TForm]: RegleFormPropertyType<TForm[TKey], TCustomRules>;
|
|
528
533
|
};
|
|
529
534
|
/**
|
|
530
535
|
* @public
|
|
531
536
|
*/
|
|
532
|
-
type RegleComputedRules<TForm extends MaybeRef<Record<string, any>> | DeepReactiveState<Record<string, any>>, TCustomRules extends Partial<AllRulesDeclarations> | Regle<any, any> = Partial<AllRulesDeclarations>, TState = Unwrap<TForm>, TCustom = TCustomRules extends Regle<any, infer R> ? R extends
|
|
537
|
+
type RegleComputedRules<TForm extends MaybeRef<Record<string, any>> | DeepReactiveState<Record<string, any>>, TCustomRules extends Partial<AllRulesDeclarations> | Regle<any, any> = Partial<AllRulesDeclarations>, TState = Unwrap<TForm>, TCustom = TCustomRules extends Regle<any, infer R> ? R extends ReglePartialRuleTree<any, infer C> ? C : Partial<AllRulesDeclarations> : TCustomRules> = {
|
|
533
538
|
[TKey in keyof TState]?: RegleFormPropertyType<TState[TKey], TCustom extends Partial<AllRulesDeclarations> ? TCustom : {}>;
|
|
534
539
|
};
|
|
535
540
|
/**
|
|
536
541
|
* @public
|
|
537
542
|
*/
|
|
538
|
-
type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue>] extends [never] ? RegleRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Array<any> ? RegleCollectionRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Date ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends File ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends Ref<infer V> ? RegleFormPropertyType<V, TCustomRules> : NonNullable<TValue> extends Record<string, any> ?
|
|
543
|
+
type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue>] extends [never] ? RegleRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Array<any> ? RegleCollectionRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Date ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends File ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends Ref<infer V> ? RegleFormPropertyType<V, TCustomRules> : NonNullable<TValue> extends Record<string, any> ? ReglePartialRuleTree<NonNullable<TValue>, TCustomRules> : RegleRuleDecl<NonNullable<TValue>, TCustomRules>;
|
|
539
544
|
/**
|
|
540
545
|
* @public
|
|
541
546
|
* Rule tree for a form property
|
|
@@ -567,32 +572,22 @@ type InlineRuleDeclaration<TValue extends any = any, TParams extends any[] = any
|
|
|
567
572
|
* */
|
|
568
573
|
type FormRuleDeclaration<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition> = RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn, TAsync extends boolean = boolean> = InlineRuleDeclaration<TValue, TParams, TReturn> | RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
|
|
569
574
|
|
|
570
|
-
type RegleErrorTree<
|
|
571
|
-
readonly [K in keyof
|
|
572
|
-
} & {
|
|
573
|
-
readonly [K in keyof NonPresentKeys<TRules, TExternal>]: RegleExternalValidationErrorsReport<TExternal[K]>;
|
|
575
|
+
type RegleErrorTree<TState = Record<string, any> | any[]> = {
|
|
576
|
+
readonly [K in keyof TState]: RegleValidationErrors<TState[K]>;
|
|
574
577
|
};
|
|
575
|
-
type
|
|
576
|
-
|
|
578
|
+
type RegleExternalErrorTree<TState = Record<string, any> | any[]> = PartialDeep<RegleErrorTree<TState>, {
|
|
579
|
+
recurseIntoArrays: true;
|
|
580
|
+
}>;
|
|
581
|
+
type RegleValidationErrors<TState extends Record<string, any> | any[] | unknown = never> = NonNullable<TState> extends Array<infer U extends Record<string, any>> ? RegleCollectionErrors<U> : NonNullable<TState> extends Date | File ? string[] : NonNullable<TState> extends Record<string, any> ? RegleErrorTree<TState> : string[];
|
|
582
|
+
type RegleCollectionErrors<TState extends Record<string, any>> = {
|
|
577
583
|
readonly $errors: string[];
|
|
578
|
-
readonly $each: RegleValidationErrors<
|
|
579
|
-
};
|
|
580
|
-
type RegleExternalErrorTree<TState extends Record<string, any> = Record<string, any>> = {
|
|
581
|
-
[K in keyof TState]?: RegleExternalValidationErrors<TState[K]>;
|
|
584
|
+
readonly $each: RegleValidationErrors<TState>[];
|
|
582
585
|
};
|
|
583
|
-
type RegleExternalValidationErrors<TValue extends any> = [NonNullable<TValue>] extends [
|
|
584
|
-
never
|
|
585
|
-
] ? string[] : TValue extends Array<infer U> ? RegleExternalCollectionErrors<U> : NonNullable<TValue> extends Date ? string[] : NonNullable<TValue> extends File ? string[] : TValue extends Record<string, any> ? RegleExternalErrorTree<TValue> : string[];
|
|
586
|
-
type RegleExternalCollectionErrors<TValue extends any = any> = {
|
|
587
|
-
$errors?: string[];
|
|
588
|
-
$each?: RegleExternalValidationErrors<TValue>[];
|
|
589
|
-
};
|
|
590
|
-
type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalValidationErrors<any> | undefined = never> = TExternalError extends RegleExternalCollectionErrors ? RegleCollectionErrors<TExternalError['$each']> : TExternalError extends string[] ? string[] : TExternalError extends RegleExternalErrorTree<any> ? RegleErrorTree<TExternalError> : string[];
|
|
591
586
|
|
|
592
587
|
/**
|
|
593
588
|
* @public
|
|
594
589
|
*/
|
|
595
|
-
type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules extends
|
|
590
|
+
type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialRuleTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TShortcuts extends RegleShortcutDefinition = {}> = RegleStatus<TState, TRules, TShortcuts> & ([TValidationGroups] extends [never] ? {} : {
|
|
596
591
|
$groups: {
|
|
597
592
|
readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
|
|
598
593
|
};
|
|
@@ -600,21 +595,23 @@ type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules
|
|
|
600
595
|
/**
|
|
601
596
|
* @public
|
|
602
597
|
*/
|
|
603
|
-
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends
|
|
598
|
+
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialRuleTree<TState> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = {}> = RegleCommonStatus<TState> & {
|
|
604
599
|
readonly $fields: {
|
|
605
|
-
readonly [TKey in keyof
|
|
600
|
+
readonly [TKey in keyof TState]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey, TShortcuts>;
|
|
601
|
+
} & {
|
|
602
|
+
readonly [TKey in keyof TState as TRules[TKey] extends NonNullable<TRules[TKey]> ? TKey : never]-?: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey, TShortcuts>;
|
|
606
603
|
};
|
|
607
|
-
readonly $errors: RegleErrorTree<
|
|
608
|
-
readonly $silentErrors: RegleErrorTree<
|
|
604
|
+
readonly $errors: RegleErrorTree<TState>;
|
|
605
|
+
readonly $silentErrors: RegleErrorTree<TState>;
|
|
609
606
|
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
610
|
-
$
|
|
607
|
+
$validate: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
|
|
611
608
|
} & ([TShortcuts['nested']] extends [never] ? {} : {
|
|
612
609
|
[K in keyof TShortcuts['nested']]: ReturnType<NonNullable<TShortcuts['nested']>[K]>;
|
|
613
610
|
});
|
|
614
611
|
/**
|
|
615
612
|
* @public
|
|
616
613
|
*/
|
|
617
|
-
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl |
|
|
614
|
+
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialRuleTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string, TShortcuts extends RegleShortcutDefinition = {}> = NonNullable<TState[TKey]> extends Array<Record<string, any> | any> ? TRule extends RegleCollectionRuleDefinition<any, any> ? ExtractFromGetter<TRule['$each']> extends ReglePartialRuleTree<any> ? RegleCollectionStatus<TState[TKey], ExtractFromGetter<TRule['$each']>, TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : RegleCollectionStatus<TState[TKey], {}, TRule, TShortcuts> : TRule extends ReglePartialRuleTree<any> ? NonNullable<TState[TKey]> extends Array<any> ? RegleCommonStatus<TState[TKey]> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? RegleStatus<TState[TKey], TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? RegleStatus<TState[TKey], ReglePartialRuleTree<TState[TKey]>, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts>;
|
|
618
615
|
/**
|
|
619
616
|
* @public
|
|
620
617
|
*/
|
|
@@ -624,6 +621,7 @@ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormProperty
|
|
|
624
621
|
readonly $silentErrors: string[];
|
|
625
622
|
readonly $externalErrors: string[];
|
|
626
623
|
$extractDirtyFields: (filterNullishValues?: boolean) => Maybe<TState>;
|
|
624
|
+
$validate: () => Promise<false | SafeFieldProperty<TState, TRules>>;
|
|
627
625
|
readonly $rules: {
|
|
628
626
|
readonly [TRuleKey in keyof Omit<TRules, '$each' | keyof FieldRegleBehaviourOptions>]: RegleRuleStatus<TState, TRules[TRuleKey] extends RegleRuleDefinition<any, infer TParams, any> ? TParams : [], TRules[TRuleKey] extends RegleRuleDefinition<any, any, any, infer TMetadata> ? TMetadata : TRules[TRuleKey] extends InlineRuleDeclaration<any, any[], infer TMetadata> ? TMetadata extends Promise<infer P> ? P : TMetadata : any>;
|
|
629
627
|
};
|
|
@@ -644,10 +642,9 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
644
642
|
readonly $name: string;
|
|
645
643
|
$id?: string;
|
|
646
644
|
$value: UnwrapNestedRefs<TValue>;
|
|
647
|
-
$touch(): void;
|
|
645
|
+
$touch(runCommit?: boolean): void;
|
|
648
646
|
$reset(): void;
|
|
649
647
|
$resetAll: () => void;
|
|
650
|
-
$validate(): Promise<boolean>;
|
|
651
648
|
$unwatch(): void;
|
|
652
649
|
$watch(): void;
|
|
653
650
|
$clearExternalErrors(): void;
|
|
@@ -674,14 +671,14 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
674
671
|
/**
|
|
675
672
|
* @public
|
|
676
673
|
*/
|
|
677
|
-
type RegleCollectionStatus<TState extends any[] = any[], TRules extends
|
|
674
|
+
type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePartialRuleTree<ArrayElement<TState>> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never, TShortcuts extends RegleShortcutDefinition = {}> = Omit<RegleFieldStatus<TState, TRules, TShortcuts>, '$errors' | '$silentErrors' | '$extractDirtyFields' | '$externalErrors' | '$rules' | '$value' | '$validate'> & {
|
|
678
675
|
$value: Maybe<TState>;
|
|
679
676
|
readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number, TShortcuts>>;
|
|
680
677
|
readonly $field: RegleFieldStatus<TState, TFieldRule, TShortcuts>;
|
|
681
|
-
readonly $errors:
|
|
682
|
-
readonly $silentErrors:
|
|
678
|
+
readonly $errors: RegleCollectionErrors<TState>;
|
|
679
|
+
readonly $silentErrors: RegleCollectionErrors<TState>;
|
|
683
680
|
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
684
|
-
$
|
|
681
|
+
$validate: () => Promise<false | DeepSafeFormState<ArrayElement<TState>, TRules>>[];
|
|
685
682
|
} & ([TShortcuts['collections']] extends [never] ? {} : {
|
|
686
683
|
[K in keyof TShortcuts['collections']]: ReturnType<NonNullable<TShortcuts['collections']>[K]>;
|
|
687
684
|
});
|
|
@@ -734,4 +731,4 @@ declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarat
|
|
|
734
731
|
inferRules: inferRulesFn<TCustomRules>;
|
|
735
732
|
};
|
|
736
733
|
|
|
737
|
-
export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type
|
|
734
|
+
export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type RegleExternalErrorTree, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialRuleTree, type RegleRoot, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleRuleTree as RegleValidationTree, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle };
|
package/dist/index.d.ts
CHANGED
|
@@ -16,7 +16,6 @@ type DeepMaybeRef<T extends Record<string, any>> = {
|
|
|
16
16
|
type ExcludeByType<T, U> = {
|
|
17
17
|
[K in keyof T as T[K] extends U ? never : K]: T[K] extends U ? never : T[K];
|
|
18
18
|
};
|
|
19
|
-
type NonPresentKeys<TSource extends Record<string, any>, Target extends Record<string, any>> = Omit<Target, keyof TSource>;
|
|
20
19
|
type NoInferLegacy<A extends any> = [A][A extends any ? 0 : never];
|
|
21
20
|
|
|
22
21
|
type ArrayElement<T> = T extends Array<infer U> ? U : never;
|
|
@@ -249,7 +248,7 @@ type UnionToIntersection<Union> = (
|
|
|
249
248
|
|
|
250
249
|
interface RegleBehaviourOptions {
|
|
251
250
|
/**
|
|
252
|
-
* Only display error when calling `r$.$
|
|
251
|
+
* Only display error when calling `r$.$validate()`
|
|
253
252
|
* @default false
|
|
254
253
|
*/
|
|
255
254
|
lazy?: boolean;
|
|
@@ -259,15 +258,20 @@ interface RegleBehaviourOptions {
|
|
|
259
258
|
*/
|
|
260
259
|
autoDirty?: boolean;
|
|
261
260
|
/**
|
|
262
|
-
* The fields will turn valid when they are, but not invalid unless calling `r$.$
|
|
261
|
+
* The fields will turn valid when they are, but not invalid unless calling `r$.$validate()`
|
|
263
262
|
* @default false
|
|
264
263
|
*
|
|
265
|
-
* @experimental report any bug
|
|
266
264
|
*/
|
|
267
265
|
rewardEarly?: boolean;
|
|
266
|
+
/**
|
|
267
|
+
* Define wether or not the external errors should be cleared when updating a field
|
|
268
|
+
* @default true
|
|
269
|
+
*
|
|
270
|
+
*/
|
|
271
|
+
clearExternalErrorsOnChange?: boolean;
|
|
268
272
|
}
|
|
269
|
-
interface LocalRegleBehaviourOptions<TState extends Record<string, any>, TRules extends
|
|
270
|
-
externalErrors?: MaybeRef<
|
|
273
|
+
interface LocalRegleBehaviourOptions<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}> {
|
|
274
|
+
externalErrors?: MaybeRef<RegleExternalErrorTree<Unwrap<TState>>>;
|
|
271
275
|
validationGroups?: (fields: RegleStatus<TState, TRules>['$fields']) => TValidationGroups;
|
|
272
276
|
}
|
|
273
277
|
type RegleValidationGroupEntry = RegleFieldStatus<any, any>;
|
|
@@ -288,43 +292,44 @@ type ShortcutCommonFn<T extends Record<string, any>> = {
|
|
|
288
292
|
};
|
|
289
293
|
type RegleShortcutDefinition<TCustomRules extends Record<string, any> = Partial<DefaultValidators>> = {
|
|
290
294
|
fields?: ShortcutCommonFn<RegleFieldStatus<any, Partial<TCustomRules> & Partial<DefaultValidators>>>;
|
|
291
|
-
nested?: ShortcutCommonFn<RegleStatus<Record<string, any>,
|
|
295
|
+
nested?: ShortcutCommonFn<RegleStatus<Record<string, any>, ReglePartialRuleTree<any, Partial<TCustomRules> & Partial<DefaultValidators>>>>;
|
|
292
296
|
collections?: ShortcutCommonFn<RegleCollectionStatus>;
|
|
293
297
|
};
|
|
294
298
|
type AddDollarToOptions<T extends Record<string, any>> = {
|
|
295
299
|
[K in keyof T as `$${string & K}`]: T[K];
|
|
296
300
|
};
|
|
297
301
|
|
|
298
|
-
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends
|
|
299
|
-
r$: RegleRoot<TState, TRules, TValidationGroups,
|
|
302
|
+
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> = EmptyObject, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}, TShortcuts extends RegleShortcutDefinition = {}> {
|
|
303
|
+
r$: RegleRoot<TState, TRules, TValidationGroups, TShortcuts>;
|
|
300
304
|
}
|
|
301
305
|
type isDeepExact<T, U> = {
|
|
302
306
|
[K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
|
|
303
307
|
}[keyof T] extends true ? true : false;
|
|
304
|
-
type CheckDeepExact<T, U> = [U] extends [never] ? false : T extends RegleCollectionRuleDecl ? U extends RegleCollectionRuleDecl ? isDeepExact<NonNullable<T['$each']>, UnionToIntersection<NonNullable<U['$each']>>> : T extends RegleRuleDecl ? true : T extends
|
|
308
|
+
type CheckDeepExact<T, U> = [U] extends [never] ? false : T extends RegleCollectionRuleDecl ? U extends RegleCollectionRuleDecl ? isDeepExact<NonNullable<T['$each']>, UnionToIntersection<NonNullable<U['$each']>>> : T extends RegleRuleDecl ? true : T extends ReglePartialRuleTree<any> ? isDeepExact<T, U> : false : T extends RegleRuleDecl ? true : T extends ReglePartialRuleTree<any> ? isDeepExact<T, U> : false;
|
|
305
309
|
type DeepReactiveState<T extends Record<string, any>> = {
|
|
306
310
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
307
311
|
};
|
|
308
|
-
type DeepSafeFormState<TState extends Record<string, any>, TRules extends
|
|
312
|
+
type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>> = [unknown] extends [TState] ? {} : {
|
|
309
313
|
[K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? K : never]?: [
|
|
310
314
|
SafeProperty<TState[K], TRules[K]>
|
|
311
315
|
] extends [never] ? TState[K] : SafeProperty<TState[K], TRules[K]>;
|
|
312
316
|
} & {
|
|
313
317
|
[K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? never : K]-?: SafeProperty<TState[K], TRules[K]>;
|
|
314
318
|
};
|
|
315
|
-
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends
|
|
319
|
+
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = [unknown] extends [TState] ? unknown : TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends ReglePartialRuleTree<any, any> ? TState extends Record<string, any> ? DeepSafeFormState<TState, TRule> : TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? never : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? TState : never : never : never : never;
|
|
320
|
+
type SafeFieldProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? Maybe<TState> : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? Maybe<TState> : Maybe<TState> : Maybe<TState> : Maybe<TState>;
|
|
316
321
|
|
|
317
|
-
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends
|
|
322
|
+
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TValidationGroups, TShortcuts>;
|
|
318
323
|
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>, RegleShortcutDefinition<any>>;
|
|
319
324
|
|
|
320
325
|
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
321
|
-
<TState extends Record<string, any>, TRules extends
|
|
322
|
-
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules):
|
|
326
|
+
<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): TRules;
|
|
327
|
+
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): TRules;
|
|
323
328
|
}
|
|
324
329
|
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
325
330
|
|
|
326
|
-
type InferRegleRoot<T extends () =>
|
|
327
|
-
type InferRegleRules<T extends useRegleFn<any>> = T extends useRegleFn<infer U> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
|
|
331
|
+
type InferRegleRoot<T extends (...args: any[]) => Regle<any, any, any, any>> = T extends (...args: any[]) => infer U ? U extends Regle<any, any, any, any> ? Prettify<U['r$']> : never : never;
|
|
332
|
+
type InferRegleRules<T extends useRegleFn<any, any>> = T extends useRegleFn<infer U, any> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
|
|
328
333
|
type InferRegleShortcuts<T extends useRegleFn<any, any>> = T extends useRegleFn<any, infer U> ? U : {};
|
|
329
334
|
type RegleEnforceRequiredRules<TRules extends keyof DefaultValidators> = Omit<DefaultValidators, TRules> & {
|
|
330
335
|
[K in TRules as keyof TRules]-?: NonNullable<DefaultValidators[K]>;
|
|
@@ -517,25 +522,25 @@ type AllRulesDeclarations = CustomRulesDeclarationTree & {
|
|
|
517
522
|
/**
|
|
518
523
|
* @public
|
|
519
524
|
*/
|
|
520
|
-
type
|
|
525
|
+
type ReglePartialRuleTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
521
526
|
[TKey in keyof TForm]?: RegleFormPropertyType<TForm[TKey], TCustomRules>;
|
|
522
527
|
};
|
|
523
528
|
/**
|
|
524
529
|
* @public
|
|
525
530
|
*/
|
|
526
|
-
type
|
|
531
|
+
type RegleRuleTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
527
532
|
[TKey in keyof TForm]: RegleFormPropertyType<TForm[TKey], TCustomRules>;
|
|
528
533
|
};
|
|
529
534
|
/**
|
|
530
535
|
* @public
|
|
531
536
|
*/
|
|
532
|
-
type RegleComputedRules<TForm extends MaybeRef<Record<string, any>> | DeepReactiveState<Record<string, any>>, TCustomRules extends Partial<AllRulesDeclarations> | Regle<any, any> = Partial<AllRulesDeclarations>, TState = Unwrap<TForm>, TCustom = TCustomRules extends Regle<any, infer R> ? R extends
|
|
537
|
+
type RegleComputedRules<TForm extends MaybeRef<Record<string, any>> | DeepReactiveState<Record<string, any>>, TCustomRules extends Partial<AllRulesDeclarations> | Regle<any, any> = Partial<AllRulesDeclarations>, TState = Unwrap<TForm>, TCustom = TCustomRules extends Regle<any, infer R> ? R extends ReglePartialRuleTree<any, infer C> ? C : Partial<AllRulesDeclarations> : TCustomRules> = {
|
|
533
538
|
[TKey in keyof TState]?: RegleFormPropertyType<TState[TKey], TCustom extends Partial<AllRulesDeclarations> ? TCustom : {}>;
|
|
534
539
|
};
|
|
535
540
|
/**
|
|
536
541
|
* @public
|
|
537
542
|
*/
|
|
538
|
-
type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue>] extends [never] ? RegleRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Array<any> ? RegleCollectionRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Date ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends File ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends Ref<infer V> ? RegleFormPropertyType<V, TCustomRules> : NonNullable<TValue> extends Record<string, any> ?
|
|
543
|
+
type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue>] extends [never] ? RegleRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Array<any> ? RegleCollectionRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Date ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends File ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends Ref<infer V> ? RegleFormPropertyType<V, TCustomRules> : NonNullable<TValue> extends Record<string, any> ? ReglePartialRuleTree<NonNullable<TValue>, TCustomRules> : RegleRuleDecl<NonNullable<TValue>, TCustomRules>;
|
|
539
544
|
/**
|
|
540
545
|
* @public
|
|
541
546
|
* Rule tree for a form property
|
|
@@ -567,32 +572,22 @@ type InlineRuleDeclaration<TValue extends any = any, TParams extends any[] = any
|
|
|
567
572
|
* */
|
|
568
573
|
type FormRuleDeclaration<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition> = RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn, TAsync extends boolean = boolean> = InlineRuleDeclaration<TValue, TParams, TReturn> | RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
|
|
569
574
|
|
|
570
|
-
type RegleErrorTree<
|
|
571
|
-
readonly [K in keyof
|
|
572
|
-
} & {
|
|
573
|
-
readonly [K in keyof NonPresentKeys<TRules, TExternal>]: RegleExternalValidationErrorsReport<TExternal[K]>;
|
|
575
|
+
type RegleErrorTree<TState = Record<string, any> | any[]> = {
|
|
576
|
+
readonly [K in keyof TState]: RegleValidationErrors<TState[K]>;
|
|
574
577
|
};
|
|
575
|
-
type
|
|
576
|
-
|
|
578
|
+
type RegleExternalErrorTree<TState = Record<string, any> | any[]> = PartialDeep<RegleErrorTree<TState>, {
|
|
579
|
+
recurseIntoArrays: true;
|
|
580
|
+
}>;
|
|
581
|
+
type RegleValidationErrors<TState extends Record<string, any> | any[] | unknown = never> = NonNullable<TState> extends Array<infer U extends Record<string, any>> ? RegleCollectionErrors<U> : NonNullable<TState> extends Date | File ? string[] : NonNullable<TState> extends Record<string, any> ? RegleErrorTree<TState> : string[];
|
|
582
|
+
type RegleCollectionErrors<TState extends Record<string, any>> = {
|
|
577
583
|
readonly $errors: string[];
|
|
578
|
-
readonly $each: RegleValidationErrors<
|
|
579
|
-
};
|
|
580
|
-
type RegleExternalErrorTree<TState extends Record<string, any> = Record<string, any>> = {
|
|
581
|
-
[K in keyof TState]?: RegleExternalValidationErrors<TState[K]>;
|
|
584
|
+
readonly $each: RegleValidationErrors<TState>[];
|
|
582
585
|
};
|
|
583
|
-
type RegleExternalValidationErrors<TValue extends any> = [NonNullable<TValue>] extends [
|
|
584
|
-
never
|
|
585
|
-
] ? string[] : TValue extends Array<infer U> ? RegleExternalCollectionErrors<U> : NonNullable<TValue> extends Date ? string[] : NonNullable<TValue> extends File ? string[] : TValue extends Record<string, any> ? RegleExternalErrorTree<TValue> : string[];
|
|
586
|
-
type RegleExternalCollectionErrors<TValue extends any = any> = {
|
|
587
|
-
$errors?: string[];
|
|
588
|
-
$each?: RegleExternalValidationErrors<TValue>[];
|
|
589
|
-
};
|
|
590
|
-
type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalValidationErrors<any> | undefined = never> = TExternalError extends RegleExternalCollectionErrors ? RegleCollectionErrors<TExternalError['$each']> : TExternalError extends string[] ? string[] : TExternalError extends RegleExternalErrorTree<any> ? RegleErrorTree<TExternalError> : string[];
|
|
591
586
|
|
|
592
587
|
/**
|
|
593
588
|
* @public
|
|
594
589
|
*/
|
|
595
|
-
type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules extends
|
|
590
|
+
type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialRuleTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TShortcuts extends RegleShortcutDefinition = {}> = RegleStatus<TState, TRules, TShortcuts> & ([TValidationGroups] extends [never] ? {} : {
|
|
596
591
|
$groups: {
|
|
597
592
|
readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
|
|
598
593
|
};
|
|
@@ -600,21 +595,23 @@ type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules
|
|
|
600
595
|
/**
|
|
601
596
|
* @public
|
|
602
597
|
*/
|
|
603
|
-
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends
|
|
598
|
+
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialRuleTree<TState> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = {}> = RegleCommonStatus<TState> & {
|
|
604
599
|
readonly $fields: {
|
|
605
|
-
readonly [TKey in keyof
|
|
600
|
+
readonly [TKey in keyof TState]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey, TShortcuts>;
|
|
601
|
+
} & {
|
|
602
|
+
readonly [TKey in keyof TState as TRules[TKey] extends NonNullable<TRules[TKey]> ? TKey : never]-?: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey, TShortcuts>;
|
|
606
603
|
};
|
|
607
|
-
readonly $errors: RegleErrorTree<
|
|
608
|
-
readonly $silentErrors: RegleErrorTree<
|
|
604
|
+
readonly $errors: RegleErrorTree<TState>;
|
|
605
|
+
readonly $silentErrors: RegleErrorTree<TState>;
|
|
609
606
|
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
610
|
-
$
|
|
607
|
+
$validate: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
|
|
611
608
|
} & ([TShortcuts['nested']] extends [never] ? {} : {
|
|
612
609
|
[K in keyof TShortcuts['nested']]: ReturnType<NonNullable<TShortcuts['nested']>[K]>;
|
|
613
610
|
});
|
|
614
611
|
/**
|
|
615
612
|
* @public
|
|
616
613
|
*/
|
|
617
|
-
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl |
|
|
614
|
+
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialRuleTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string, TShortcuts extends RegleShortcutDefinition = {}> = NonNullable<TState[TKey]> extends Array<Record<string, any> | any> ? TRule extends RegleCollectionRuleDefinition<any, any> ? ExtractFromGetter<TRule['$each']> extends ReglePartialRuleTree<any> ? RegleCollectionStatus<TState[TKey], ExtractFromGetter<TRule['$each']>, TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : RegleCollectionStatus<TState[TKey], {}, TRule, TShortcuts> : TRule extends ReglePartialRuleTree<any> ? NonNullable<TState[TKey]> extends Array<any> ? RegleCommonStatus<TState[TKey]> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? RegleStatus<TState[TKey], TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? RegleStatus<TState[TKey], ReglePartialRuleTree<TState[TKey]>, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts>;
|
|
618
615
|
/**
|
|
619
616
|
* @public
|
|
620
617
|
*/
|
|
@@ -624,6 +621,7 @@ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormProperty
|
|
|
624
621
|
readonly $silentErrors: string[];
|
|
625
622
|
readonly $externalErrors: string[];
|
|
626
623
|
$extractDirtyFields: (filterNullishValues?: boolean) => Maybe<TState>;
|
|
624
|
+
$validate: () => Promise<false | SafeFieldProperty<TState, TRules>>;
|
|
627
625
|
readonly $rules: {
|
|
628
626
|
readonly [TRuleKey in keyof Omit<TRules, '$each' | keyof FieldRegleBehaviourOptions>]: RegleRuleStatus<TState, TRules[TRuleKey] extends RegleRuleDefinition<any, infer TParams, any> ? TParams : [], TRules[TRuleKey] extends RegleRuleDefinition<any, any, any, infer TMetadata> ? TMetadata : TRules[TRuleKey] extends InlineRuleDeclaration<any, any[], infer TMetadata> ? TMetadata extends Promise<infer P> ? P : TMetadata : any>;
|
|
629
627
|
};
|
|
@@ -644,10 +642,9 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
644
642
|
readonly $name: string;
|
|
645
643
|
$id?: string;
|
|
646
644
|
$value: UnwrapNestedRefs<TValue>;
|
|
647
|
-
$touch(): void;
|
|
645
|
+
$touch(runCommit?: boolean): void;
|
|
648
646
|
$reset(): void;
|
|
649
647
|
$resetAll: () => void;
|
|
650
|
-
$validate(): Promise<boolean>;
|
|
651
648
|
$unwatch(): void;
|
|
652
649
|
$watch(): void;
|
|
653
650
|
$clearExternalErrors(): void;
|
|
@@ -674,14 +671,14 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
674
671
|
/**
|
|
675
672
|
* @public
|
|
676
673
|
*/
|
|
677
|
-
type RegleCollectionStatus<TState extends any[] = any[], TRules extends
|
|
674
|
+
type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePartialRuleTree<ArrayElement<TState>> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never, TShortcuts extends RegleShortcutDefinition = {}> = Omit<RegleFieldStatus<TState, TRules, TShortcuts>, '$errors' | '$silentErrors' | '$extractDirtyFields' | '$externalErrors' | '$rules' | '$value' | '$validate'> & {
|
|
678
675
|
$value: Maybe<TState>;
|
|
679
676
|
readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number, TShortcuts>>;
|
|
680
677
|
readonly $field: RegleFieldStatus<TState, TFieldRule, TShortcuts>;
|
|
681
|
-
readonly $errors:
|
|
682
|
-
readonly $silentErrors:
|
|
678
|
+
readonly $errors: RegleCollectionErrors<TState>;
|
|
679
|
+
readonly $silentErrors: RegleCollectionErrors<TState>;
|
|
683
680
|
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
684
|
-
$
|
|
681
|
+
$validate: () => Promise<false | DeepSafeFormState<ArrayElement<TState>, TRules>>[];
|
|
685
682
|
} & ([TShortcuts['collections']] extends [never] ? {} : {
|
|
686
683
|
[K in keyof TShortcuts['collections']]: ReturnType<NonNullable<TShortcuts['collections']>[K]>;
|
|
687
684
|
});
|
|
@@ -734,4 +731,4 @@ declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarat
|
|
|
734
731
|
inferRules: inferRulesFn<TCustomRules>;
|
|
735
732
|
};
|
|
736
733
|
|
|
737
|
-
export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type
|
|
734
|
+
export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type RegleExternalErrorTree, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialRuleTree, type RegleRoot, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleRuleTree as RegleValidationTree, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {unref,version,isRef,toRef,computed,ref,toRaw,reactive,shallowRef,onScopeDispose,triggerRef,watch,effectScope,watchEffect}from'vue';var Pe=(r=>(r.Inline="__inline",r.Async="__async",r))(Pe||{});function Ke(e,t){return computed(()=>e.value.some(r=>r[t]))}function et(e,t){return computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function q(e){return e.map(t=>t instanceof Function?t():unref(t))}function tt(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function rt(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(o=>o.trim()).filter(o=>o.includes("=")).length+e.length}function we(e,...t){let{message:r,validator:n,active:a,type:o,...u}=e,v=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator(S,...m){return e.validator(S,...q(m.length?m:t))},message(S,m){return typeof e.message=="function"?e.message(S,{...m,$params:q(m.$params?.length?m.$params:t)}):e.message},active(S,m){return typeof e.active=="function"?e.active(S,{...m,$params:q(m.$params?.length?m.$params:t)}):e.active??!0},exec(S){let m=e.validator(S,...q(t)),d;return m instanceof Promise?m.then(f=>(d=f,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)):(d=m,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)}},...u,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:v,_params:tt(t)}}function Oe(e){if(typeof e.validator=="function"){let r=we(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(rt(e.validator)>1){let a=function(...o){return we(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function L(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function nt(e){return L(e.value)}function K(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>K(n)))),r=="Map"&&(t=new Map([...e].map(n=>[K(n[0]),K(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,xt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=K(e[n]);}return t}function xt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function Ae(e,t,r){return e instanceof Function?e(t,r??0):e}function at(e,t){isRef(e)?e.value=t:e=t;}function lt(e,t){isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=isRef(e)?e.value[n]:e[n];a={},de(a,t[n]);});}function de(e,t){Object.entries({...unref(e),...t}).forEach(([r,n])=>{let a=isRef(e)?e.value:e,o=isRef(t[r])?t[r]._value:t[r],u=isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(o)&&o.forEach((v,E)=>{a[r][E]={},de(a[r][E],o[E]);})):L(o)?de(u,o):isRef(a[r])?a[r].value=o:a[r]=o;});}function ee(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function ye(e,t,r){let n,a=(...o)=>new Promise(u=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(u);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(u=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(u);},0);}),a}function Ct(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),u=Number(n[a]);if(o>u)return 1;if(u>o)return -1;if(!isNaN(o)&&isNaN(u))return 1;if(isNaN(o)&&!isNaN(u))return -1}return 0}var ie=Ct(version,"3.5.0")!==-1;function It(){return Math.floor(Math.random()*Date.now()).toString()}function Fe(){return typeof window>"u"?It():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Me(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),o=shallowRef(new Map);function u(s){let l=t.value.get(s);if(l)return l;{let x=ref({});return t.value.set(s,x),x}}function v(s){let l=r.value.get(s);if(l)return l;{let x=ref([]);return r.value.set(s,x),x}}function E(s,l,x){o.value.set(`${s}-${l}`,x);}function $(s,l){return o.value.get(`${s}-${l}`)}function S(s,l){s&&l!=null&&o.value.delete(`${s}-${l}`);}function m(s,l){n.value.set(s,l);}function d(s){return n.value.get(s)??!1}function f(s,l){e.value.set(s,l);}function c(s,l){let x=e.value.get(s);return x?I(l,x)?{valid:!0}:{valid:!1}:void 0}function I(s,l){let x=Object.keys(l),V=Object.keys(s);return V.length!==x.length||!V.every(P=>x.includes(P))?!1:V.every(P=>{let h=s[P],w=l[P];return !w||!h||typeof h=="function"||typeof w=="function"||typeof h=="number"||typeof h=="boolean"?!1:h._params?h._params?.every((O,_)=>{if(typeof w=="number"||typeof w=="boolean")return !0;{let M=q(w._params),H=q(h._params);return M?.[_]===H?.[_]}}):!0})}function C(s){let l=a.value.get(s);if(l)return l;{let x=ref(!1),V=ref(!0),G=ref({}),P=ref(!1);return a.value.set(s,{$pending:x,$valid:V,$metadata:G,$validating:P}),{$pending:x,$valid:V,$metadata:G,$validating:P}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:f,setDirtyEntry:m,checkRuleDeclEntry:c,getDirtyState:d,trySetRuleStatusRef:C,getFieldsEntry:u,getCollectionsEntry:v,getArrayStatus:$,addArrayStatus:E,deleteArrayStatus:S,arrayStatusStorage:o}}function ot(e,t){return L(e.value)&&L(t.value)&&!Object.entries(t.value).some(r=>me(r))}function st(e){return !!e.value&&"$each"in e.value}function it(e){return !!e.value&&L(e.value)}function me(e){return L(e)&&"_validator"in e}function ge(e){return typeof e.value!="function"}function Ve(e){return L(e)&&"$fields"in e}function je(e){return "$each"in e||"$errors"in e}function _e({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function ct({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:u,$debounce:v}){let E=effectScope(),$,S,m=ref(!1),{$pending:d,$valid:f,$metadata:c,$validating:I}=u.trySetRuleStatusRef(`${o}.${n}`);function C(){$=E.run(()=>{let h=computed(()=>({$invalid:!f.value,$params:H.value,...c.value})),w=computed(()=>ge(r)?typeof r.value.active=="function"?r.value.active(a.value,h.value):r.value.active:!0),O=computed(()=>{let y="",g=t?t[n]?.message:void 0;return g&&(typeof g=="function"?y=g(a.value,h.value):y=g),ge(r)&&(g&&!r.value._patched||(typeof r.value.message=="function"?y=r.value.message(a.value,h.value):y=r.value.message)),ee(y)&&(y="Error",console.warn(`No error message defined for ${o}.${n}`)),y}),_=computed(()=>ge(r)&&r.value.type?r.value.type:n),M=computed(()=>ge(r)?r.value.validator:r.value),H=computed(()=>typeof r.value=="function"?[]:q(r.value._params??[])),D=computed(()=>`${o}.${_.value}`);return {$active:w,$message:O,$type:_,$validator:M,$params:H,$path:D}}),S=watch($.$params,V,{deep:!0});}C();function s(){f.value=!0,e.value&&(d.value=!0);}async function l(){let h=$.$validator.value,w=h(a.value,...$.$params.value),O=!1,_=a.value;try{s();let M;if(w instanceof Promise?M=await w:M=w,a.value!==_)return !0;if(typeof M=="boolean")O=M;else {let{$valid:H,...D}=M;O=H,c.value=D;}}catch{O=!1;}finally{d.value=!1;}return O}let x=ye(l,v??200);async function V(){I.value=!0;let h=!1;if(me(r.value)&&r.value._async)h=await x();else {let w=$.$validator.value,O=w(a.value,...$.$params.value);if(O instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(O!=null)if(typeof O=="boolean")h=O;else {let{$valid:_,...M}=O;h=_,c.value=M;}}return f.value=h,I.value=!1,h}function G(){f.value=!0,c.value={},d.value=!1,I.value=!1,C();}function P(){S(),E.stop(),E=effectScope();}return reactive({...$,$pending:d,$valid:f,$metadata:c,_haveAsync:m,$validating:I,$validate:V,$unwatch:P,$watch:C,$reset:G})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:u,externalErrors:v,onUnwatch:E,$isArray:$,initialState:S,shortcuts:m}){let d=effectScope(),f,c=ref(!1),I=ref(!1),C=ref([]),s,l,x,V,G,P=()=>{};function h(){C.value=v.value??[];}h();function w(){let j=t.value,U=o.checkRuleDeclEntry(n,j);y.value=Object.fromEntries(Object.entries(j).filter(([W])=>W.startsWith("$"))),D.value=Object.fromEntries(Object.entries(t.value).filter(([W])=>!W.startsWith("$")).map(([W,Q])=>{if(Q){let De=toRef(()=>Q);return [W,ct({$dirty:c,customMessages:r,rule:De,ruleKey:W,state:e,path:n,storage:o,$debounce:y.value.$debounce})]}return []}).filter(W=>!!W.length)),M(),O(),U?.valid!=null&&(c.value=o.getDirtyState(n),c.value&&P()),o.addRuleDeclEntry(n,j);}function O(){P=f.$debounce.value?ye(H,f.$debounce.value??f.haveAnyAsyncRule?100:0):H;}function _(){D.value&&Object.entries(D.value).forEach(([j,U])=>{U.$unwatch();}),V(),c.value&&o.setDirtyEntry(n,c.value),s(),l(),x(),d.stop(),d=effectScope(),E?.(),G?.();}function M(){D.value&&Object.entries(D.value).forEach(([j,U])=>{U.$watch();}),f=d.run(()=>{let j=computed(()=>c.value),U=computed(()=>y.value.$debounce),W=computed(()=>y.value.$lazy!=null?y.value.$lazy:unref(u.lazy)),Q=computed(()=>y.value.$rewardEarly!=null?y.value.$rewardEarly:unref(u.rewardEarly)),De=computed(()=>y.value.$autoDirty!=null?y.value.$autoDirty:unref(u.autoDirty)),gt=computed(()=>Object.entries(D.value).some(([Z,J])=>J.$validating)),Ce=computed(()=>pe.value&&!he.value&&c.value),Le=computed(()=>Ce.value?_e({field:{$dirty:c.value,$externalErrors:C.value,$rules:D.value}}):[]),ze=computed(()=>_e({field:{$dirty:c.value,$externalErrors:C.value,$rules:D.value},silent:!0})),Je=computed(()=>!(pe.value||he.value)),he=computed(()=>I.value||!Q.value?Object.entries(D.value).some(([Z,J])=>J.$pending):!1),pe=computed(()=>C.value?.length?!0:!Q.value||Q.value&&I.value?Object.entries(D.value).some(([Z,J])=>!J.$valid):!1),Ye=computed(()=>a),Ie=computed(()=>c.value&&!ee(e.value)&&!gt.value?C.value?.length?!1:Q.value?Object.entries(D.value).every(([Z,J])=>J.$valid):!pe.value:!1),vt=computed(()=>Object.entries(D.value).some(([Z,J])=>J._haveAsync));function $t(){m?.fields&&Object.entries(m.fields).forEach(([Z,J])=>{let St=effectScope();Qe[Z]=St.run(()=>{let Xe=ref();return watchEffect(()=>{Xe.value=J({$dirty:c.value,$externalErrors:C.value,$value:e,$rules:D.value,$error:Ce.value,$pending:he.value,$invalid:pe.value,$valid:Ie.value,$errors:Le.value,$ready:Je.value,$silentErrors:ze.value,$anyDirty:j.value,$name:Ye.value});}),Xe});});}let Qe={};return $t(),watch(Ie,Z=>{Z&&(I.value=!1);}),{$error:Ce,$pending:he,$invalid:pe,$valid:Ie,$debounce:U,$lazy:W,$errors:Le,$ready:Je,$silentErrors:ze,$rewardEarly:Q,$autoDirty:De,$anyDirty:j,$name:Ye,haveAnyAsyncRule:vt,$shortcuts:Qe}}),x=watch(v,h),s=watch(e,()=>{f.$autoDirty.value&&(c.value||(c.value=!0)),t.value instanceof Function&&w(),P(),f.$rewardEarly.value;},{deep:$?!0:ie?1:!0}),V=watch(c,()=>{o.setDirtyEntry(n,c.value);}),l=watch(f.$valid,j=>{f.$rewardEarly.value&&j&&(I.value=!1);}),G=watch(f.haveAnyAsyncRule,O);}function H(){Object.entries(D.value).forEach(([j,U])=>{U.$validate();});}let D=ref(),y=ref();w();function g(){c.value=!1,C.value=[],Object.entries(D.value).forEach(([j,U])=>{U.$reset();}),f.$lazy.value||Object.entries(D.value).map(([j,U])=>U.$validate());}function p(){c.value||(c.value=!0,f.$rewardEarly.value,P());}let R=f.$debounce.value?ye(i,f.$debounce.value??0):i;async function i(){try{if(I.value=!0,f.$autoDirty.value&&c.value&&!f.$pending.value)return !f.$error.value;{let j=Object.entries(D.value).map(([W,Q])=>Q.$validate());return (await Promise.allSettled(j)).every(W=>W.status==="fulfilled"?W.value:!1)}}catch{return !1}}function b(){_(),e.value=at(e,S),g();}function T(j=!0){return c.value?e.value:null}function N(){C.value=[];}f.$lazy.value||i();let{$anyDirty:Y,$error:te,$errors:oe,$invalid:re,$name:B,$pending:F,$ready:A,$silentErrors:se,$valid:xe,$shortcuts:Se}=f;return reactive({$dirty:c,$error:te,$errors:oe,$valid:xe,$invalid:re,$pending:F,$silentErrors:se,$anyDirty:Y,$ready:A,$name:B,$externalErrors:C,$value:e,$rules:D,...Se,$reset:g,$touch:p,$validate:R,$unwatch:_,$watch:M,$resetAll:b,$extractDirtyFields:T,$clearExternalErrors:N})}function ft({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:u,rules:v,externalErrors:E,initialState:$,shortcuts:S,fieldName:m}){let d=v.$key?v.$key:Fe(),f=`${t}.${String(d)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?f=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:d,enumerable:!1,configurable:!1,writable:!1}}));let c=toRef(()=>E.value?.[r]),I=Te({state:o,rulesDef:toRef(()=>v),customMessages:u,path:f,storage:a,options:n,externalErrors:c,initialState:$?.[r],shortcuts:S,fieldName:m});if(I){let C=o.value?.$id;I.$id=C??String(d),a.addArrayStatus(e,I.$id,I);}return I}function Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:u,initialState:v,shortcuts:E,fieldName:$}){let S=effectScope(),m,d=effectScope(),f;if(Array.isArray(e.value)&&!t.value.$each)return null;let c=ref(),I=ref(e.value),C,s=ref({}),l=a.getCollectionsEntry(n);f=d.run(()=>{let p=computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(b=>typeof b!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(b=>me(b)):!1),R=computed(()=>u.value?je(u.value)?u.value.$errors??[]:[]:[]),i=computed(()=>u.value?je(u.value)?u.value.$each??[]:[]:[]);return {isPrimitiveArray:p,$externalErrorsField:R,$externalErrorsEach:i}}),x(),G();function x(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(c.value=Fe(),Object.defineProperties(e.value,{$id:{value:c.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(c.value=e.value.$id)),!f.isPrimitiveArray.value&&(I.value=s.value.$value,Array.isArray(e.value)&&t.value.$each?l.value=e.value.map((p,R)=>{let i=Ae(t.value.$each,toRef(()=>p),R);if(i){let b=ft({$id:c.value,path:n,rules:i,stateValue:toRef(()=>p),index:R,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:v[R],shortcuts:E,fieldName:$});return b||null}}).filter(p=>!!p):l.value=[],s.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:f.$externalErrorsField,$isArray:!0,initialState:v,shortcuts:E,fieldName:$}));}function V(){if(Array.isArray(e.value)){let p=K(l.value);l.value=e.value.map((R,i)=>{let b=toRef(()=>R);if(R.$id&&l.value.find(T=>T.$id===R.$id)){let T=a.getArrayStatus(c.value,R.$id);return T?(T.$value=b,T):null}else {let T=Ae(t.value.$each,b,i);if(T){let N=ft({$id:c.value,path:n,rules:T,stateValue:b,index:i,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:v[i],fieldName:$});return N||null}}}).filter(R=>!!R),p.filter(R=>!e.value.find(i=>R.$id===i.$id)).forEach((R,i)=>{a.deleteArrayStatus(c.value,i.toString());});}else l.value=[];}function G(){C=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?x():V();},{deep:ie?1:!0,flush:"pre"}),m=S.run(()=>{let p=computed(()=>s.value.$dirty&&l.value.every(A=>A.$dirty)),R=computed(()=>s.value.$anyDirty||l.value.some(A=>A.$dirty)),i=computed(()=>s.value.$invalid||l.value.some(A=>A.$invalid)),b=computed(()=>s.value.$valid&&l.value.every(A=>A.$valid)),T=computed(()=>s.value.$error||l.value.some(A=>A.$error)),N=computed(()=>!(i.value||Y.value)),Y=computed(()=>s.value.$pending||l.value.some(A=>A.$pending)),te=computed(()=>({$errors:s.value.$errors,$each:l.value.map(A=>A.$errors)})),oe=computed(()=>({$errors:s.value.$silentErrors,$each:l.value.map(A=>A.$silentErrors)})),re=computed(()=>$);function B(){E?.collections&&Object.entries(E?.collections).forEach(([A,se])=>{let xe=effectScope();F[A]=xe.run(()=>{let Se=ref();return watchEffect(()=>{Se.value=se({$dirty:p.value,$error:T.value,$pending:Y.value,$invalid:i.value,$valid:b.value,$errors:te.value,$ready:N.value,$silentErrors:oe.value,$anyDirty:R.value,$name:re.value,$each:l.value,$field:s.value,$value:e});}),Se});});}let F={};return B(),{$dirty:p,$anyDirty:R,$invalid:i,$valid:b,$error:T,$pending:Y,$errors:te,$silentErrors:oe,$ready:N,$name:re,$shortcuts:F}}),f.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),C());}function P(){C&&C(),s.value&&s.value.$unwatch(),l.value&&l.value.forEach(p=>{"$dirty"in p&&p.$unwatch();}),S.stop(),S=effectScope(),d.stop(),d=effectScope(!0);}function h(){s.value.$touch(),l.value.forEach(p=>{p.$touch();});}function w(){s.value.$reset(),l.value.forEach(p=>{p.$reset();});}async function O(){try{return (await Promise.all([s.value.$validate(),...l.value.map(R=>R.$validate())])).every(R=>!!R)}catch{return !1}}function _(){s.value.$clearExternalErrors(),l.value.forEach(p=>{p.$clearExternalErrors();});}function M(p=!0){let R=l.value.map(i=>{if(Ve(i))return i.$extractDirtyFields(p)});return p&&(R=R.filter(i=>L(i)?!ee(i):!!i)),R}function H(){console.log(v),P(),lt(e,v),w();}async function D(){return h(),await O()?e.value:!1}let{$shortcuts:y,...g}=m;return reactive({$field:s,...g,...y,$each:l,$value:e,$validate:O,$unwatch:P,$watch:G,$touch:h,$reset:w,$resetAll:H,$extractDirtyFields:M,$parse:D,$clearExternalErrors:_})}function Be({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:u,externalErrors:v,validationGroups:E,initialState:$,shortcuts:S,fieldName:m}){let d,f,c=null;function s(y=!0){l.value=null,triggerRef(l);let g=Object.fromEntries(Object.entries(e.value).map(([i,b])=>{if(b){let T=toRef(t.value,i),N=toRef(()=>b),Y=toRef(()=>v.value?.[i]);return [i,Te({state:T,rulesDef:N,customMessages:r,path:n?`${n}.${i}`:i,storage:o,options:u,externalErrors:Y,initialState:$?.[i],shortcuts:S,fieldName:i})]}return []}).filter(i=>!!i.length&&i[1]!=null)),p=Object.fromEntries(Object.entries(unref(v)??{}).filter(([i])=>!(i in e.value)).map(([i,b])=>{if(b){let T=toRef(()=>({})),N=toRef(()=>b);return [i,Te({state:ref(void 0),rulesDef:T,customMessages:r,path:n?`${n}.${i}`:i,storage:o,options:u,externalErrors:N,initialState:$?.[i],fieldName:i})]}return []})),R=Object.fromEntries(Object.entries(E?.(g)??{}).map(([i,b])=>b.length?[i,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(T=>[T,Ke(toRef(()=>b),T)])),...Object.fromEntries(["$errors","$silentErrors"].map(T=>[T,et(toRef(()=>b),T)]))}]:[]));l.value={...g,...p,...R},y&&P();}let l=o.getFieldsEntry(n);s();function x(){s(!1),Object.entries(l.value).forEach(([y,g])=>{g.$reset();}),P();}function V(){Object.entries(l.value).forEach(([y,g])=>{g.$touch();});}async function G(){try{return (await Promise.allSettled(Object.entries(l.value).map(([g,p])=>p.$validate()))).every(g=>g.status==="fulfilled"?g.value:!1)}catch{return !1}}function P(){a&&(c=watch(a,()=>{h(),s();},{deep:ie?1:!0,flush:"post"})),d=effectScope(),f=d.run(()=>{let y=computed(()=>!!Object.entries(l.value).length&&Object.entries(l.value).every(([B,F])=>F.$dirty)),g=computed(()=>Object.entries(l.value).some(([B,F])=>F.$dirty)),p=computed(()=>Object.entries(l.value).some(([B,F])=>F.$invalid)),R=computed(()=>Object.entries(l.value).every(([B,F])=>F.$valid)),i=computed(()=>y.value&&!T.value&&p.value),b=computed(()=>!(p.value||T.value)),T=computed(()=>Object.entries(l.value).some(([B,F])=>F.$pending)),N=computed(()=>Object.fromEntries(Object.entries(l.value).map(([B,F])=>[B,F.$errors]))),Y=computed(()=>Object.fromEntries(Object.entries(l.value).map(([B,F])=>[B,F.$silentErrors]))),te=computed(()=>m);function oe(){S?.nested&&Object.entries(S.nested).forEach(([B,F])=>{let A=effectScope();re[B]=A.run(()=>{let se=ref();return watchEffect(()=>{se.value=F({$dirty:y.value,$value:t,$error:i.value,$pending:T.value,$invalid:p.value,$valid:R.value,$ready:b.value,$anyDirty:g.value,$name:te.value,$silentErrors:Y.value,$errors:N.value,$fields:l.value});}),se});});}let re={};return oe(),{$dirty:y,$anyDirty:g,$invalid:p,$valid:R,$error:i,$pending:T,$errors:N,$silentErrors:Y,$ready:b,$name:te,$shortcuts:re}});}function h(){l.value&&Object.entries(l.value).forEach(([y,g])=>{g.$unwatch();}),c?.(),d.stop(),d=effectScope();}function w(){Object.entries(l.value).forEach(([y,g])=>{g.$clearExternalErrors();});}function O(){h(),de(t,$??{}),x();}function _(y=!0){let g=Object.entries(l.value).map(([p,R])=>[p,R.$extractDirtyFields(y)]);return y&&(g=g.filter(([p,R])=>L(R)?!ee(R):Array.isArray(R)?R.length:!!R)),Object.fromEntries(g)}async function M(){return V(),await G()?t.value:!1}let{$shortcuts:H,...D}=f;return reactive({...D,...H,$fields:l,$value:t,$resetAll:O,$reset:x,$touch:V,$validate:G,$unwatch:h,$watch:P,$clearExternalErrors:w,$extractDirtyFields:_,$parse:M})}function Te({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:u,index:v,initialState:E,shortcuts:$,onUnwatch:S,fieldName:m}){return st(t)?Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:v,externalErrors:u,initialState:E,fieldName:m,shortcuts:$}):ot(e,t)&&nt(e)?Be({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:v,initialState:E,shortcuts:$,fieldName:m,externalErrors:u}):it(t)?Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:v,externalErrors:u,onUnwatch:S,shortcuts:$,initialState:E,fieldName:m}):null}function Ue({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o}){let u=Me(),v=computed(()=>unref(t.externalErrors));return reactive(Be({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:u,options:t,externalErrors:v,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root"}))}function We(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function a(o,u,v){let E=isRef(u)?u:computed(typeof u=="function"?u:()=>u),$={...n,...v},S=isRef(o)?o:ref(o),m=K(toRaw(S.value));return {r$:Ue({scopeRules:E,state:S,options:$,initialState:m,customRules:e,shortcuts:r})}}return a}var yt=We();function He(){function e(t,r){return r}return e}var qe=He();function mt({rules:e,modifiers:t,shortcuts:r}){let n=We(e,t,r),a=He();return {useRegle:n,inferRules:a}}export{Pe as InternalRuleType,Oe as createRule,mt as defineRegleConfig,qe as inferRules,q as unwrapRuleParameters,yt as useRegle};
|
|
1
|
+
import {unref,version,isRef,toRef,computed,ref,toRaw,reactive,shallowRef,onScopeDispose,triggerRef,watch,effectScope,watchEffect}from'vue';var Pe=(r=>(r.Inline="__inline",r.Async="__async",r))(Pe||{});function Ke(e,t){return computed(()=>e.value.some(r=>r[t]))}function et(e,t){return computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function q(e){return e.map(t=>t instanceof Function?t():unref(t))}function tt(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function rt(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(o=>o.trim()).filter(o=>o.includes("=")).length+e.length}function we(e,...t){let{message:r,validator:n,active:a,type:o,...c}=e,S=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator($,...g){return e.validator($,...q(g.length?g:t))},message($,g){return typeof e.message=="function"?e.message($,{...g,$params:q(g.$params?.length?g.$params:t)}):e.message},active($,g){return typeof e.active=="function"?e.active($,{...g,$params:q(g.$params?.length?g.$params:t)}):e.active??!0},exec($){let g=e.validator($,...q(t)),y;return g instanceof Promise?g.then(v=>(y=v,typeof y=="object"&&"$valid"in y?y.$valid:typeof y=="boolean"?y:!1)):(y=g,typeof y=="object"&&"$valid"in y?y.$valid:typeof y=="boolean"?y:!1)}},...c,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:S,_params:tt(t)}}function Oe(e){if(typeof e.validator=="function"){let r=we(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(rt(e.validator)>1){let a=function(...o){return we(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function L(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function nt(e){return L(e.value)}function te(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>te(n)))),r=="Map"&&(t=new Map([...e].map(n=>[te(n[0]),te(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,Tt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=te(e[n]);}return t}function Tt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function Ae(e,t,r){return e instanceof Function?e(t,r??0):e}function at(e,t){isRef(e)?e.value=t:e=t;}function lt(e,t){isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=isRef(e)?e.value[n]:e[n];a={},pe(a,t[n]);});}function pe(e,t){Object.entries({...unref(e),...t}).forEach(([r,n])=>{let a=isRef(e)?e.value:e,o=isRef(t[r])?t[r]._value:t[r],c=isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(o)&&o.forEach((S,b)=>{a[r][b]={},pe(a[r][b],o[b]);})):L(o)?pe(c,o):isRef(a[r])?a[r].value=o:a[r]=o;});}function Q(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function he(e,t,r){let n,a=(...o)=>new Promise(c=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(c);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(c=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(c);},0);}),a}function Dt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),c=Number(n[a]);if(o>c)return 1;if(c>o)return -1;if(!isNaN(o)&&isNaN(c))return 1;if(isNaN(o)&&!isNaN(c))return -1}return 0}var se=Dt(version,"3.5.0")!==-1;function Ct(){return Math.floor(Math.random()*Date.now()).toString()}function Fe(){return typeof window>"u"?Ct():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Me(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),o=shallowRef(new Map);function c(s){let l=t.value.get(s);if(l)return l;{let x=ref({});return t.value.set(s,x),x}}function S(s){let l=r.value.get(s);if(l)return l;{let x=ref([]);return r.value.set(s,x),x}}function b(s,l,x){o.value.set(`${s}-${l}`,x);}function h(s,l){return o.value.get(`${s}-${l}`)}function $(s,l){s&&l!=null&&o.value.delete(`${s}-${l}`);}function g(s,l){n.value.set(s,l);}function y(s){return n.value.get(s)??!1}function v(s,l){e.value.set(s,l);}function f(s,l){let x=e.value.get(s);return x?I(l,x)?{valid:!0}:{valid:!1}:void 0}function I(s,l){let x=Object.keys(l),V=Object.keys(s);return V.length!==x.length||!V.every(P=>x.includes(P))?!1:V.every(P=>{let E=s[P],w=l[P];return !w||!E||typeof E=="function"||typeof w=="function"||typeof E=="number"||typeof E=="boolean"?!1:E._params?E._params?.every((A,_)=>{if(typeof w=="number"||typeof w=="boolean")return !0;{let M=q(w._params),U=q(E._params);return M?.[_]===U?.[_]}}):!0})}function D(s){let l=a.value.get(s);if(l)return l;{let x=ref(!1),V=ref(!0),G=ref({}),P=ref(!1);return a.value.set(s,{$pending:x,$valid:V,$metadata:G,$validating:P}),{$pending:x,$valid:V,$metadata:G,$validating:P}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:v,setDirtyEntry:g,checkRuleDeclEntry:f,getDirtyState:y,trySetRuleStatusRef:D,getFieldsEntry:c,getCollectionsEntry:S,getArrayStatus:h,addArrayStatus:b,deleteArrayStatus:$,arrayStatusStorage:o}}function ot(e,t){return L(e.value)&&L(t.value)&&!Object.entries(t.value).some(r=>de(r))}function st(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function ut(e){return !!e.value&&L(e.value)}function de(e){return L(e)&&"_validator"in e}function ve(e){return typeof e.value!="function"}function je(e){return L(e)&&"$fields"in e}function Ve(e){return "$each"in e||"$errors"in e}function _e({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function ct({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:c,$debounce:S}){let b=effectScope(),h,$,g=ref(!1),{$pending:y,$valid:v,$metadata:f,$validating:I}=c.trySetRuleStatusRef(`${o}.${n}`);function D(){h=b.run(()=>{let E=computed(()=>({$invalid:!v.value,$params:U.value,...f.value})),w=computed(()=>ve(r)?typeof r.value.active=="function"?r.value.active(a.value,E.value):!!r.value.active:!0),A=computed(()=>{let p="",u=t?t[n]?.message:void 0;return u&&(typeof u=="function"?p=u(a.value,E.value):p=u),ve(r)&&(u&&!r.value._patched||(typeof r.value.message=="function"?p=r.value.message(a.value,E.value):p=r.value.message)),Q(p)&&(p="Error",console.warn(`No error message defined for ${o}.${n}`)),p}),_=computed(()=>ve(r)&&r.value.type?r.value.type:n),M=computed(()=>ve(r)?r.value.validator:r.value),U=computed(()=>typeof r.value=="function"?[]:q(r.value._params??[])),R=computed(()=>`${o}.${_.value}`);return {$active:w,$message:A,$type:_,$validator:M,$params:U,$path:R}}),$=watch(h.$params,V,{deep:!0});}D();function s(){v.value=!0,e.value&&(y.value=!0);}async function l(){let E=h.$validator.value,w=E(a.value,...h.$params.value),A=!1,_=a.value;try{s();let M;if(w instanceof Promise?M=await w:M=w,a.value!==_)return !0;if(typeof M=="boolean")A=M;else {let{$valid:U,...R}=M;A=U,f.value=R;}}catch{A=!1;}finally{y.value=!1;}return A}let x=he(l,S??200);async function V(){try{I.value=!0;let E=!1;if(de(r.value)&&r.value._async)E=await x();else {let w=h.$validator.value,A=w(a.value,...h.$params.value);if(A instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(A!=null)if(typeof A=="boolean")E=A;else {let{$valid:_,...M}=A;E=_,f.value=M;}}return v.value=E,E}catch{return !1}finally{I.value=!1;}}function G(){v.value=!0,f.value={},y.value=!1,I.value=!1,D();}function P(){$(),b.stop(),b=effectScope();}return reactive({...h,$pending:y,$valid:v,$metadata:f,_haveAsync:g,$validating:I,$validate:V,$unwatch:P,$watch:D,$reset:G})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:c,externalErrors:S,onUnwatch:b,$isArray:h,initialState:$,shortcuts:g}){let y=effectScope(),v,f=ref(!1),I=ref(!1),D=ref([]),s,l,x,V,G,P=()=>{};function E(){D.value=S.value??[];}E();function w(){let j=t.value,J=o.checkRuleDeclEntry(n,j);p.value=Object.fromEntries(Object.entries(j).filter(([W])=>W.startsWith("$"))),R.value=Object.fromEntries(Object.entries(t.value).filter(([W])=>!W.startsWith("$")).map(([W,Z])=>{if(Z){let De=toRef(()=>Z);return [W,ct({$dirty:f,customMessages:r,rule:De,ruleKey:W,state:e,path:n,storage:o,$debounce:p.value.$debounce})]}return []}).filter(W=>!!W.length)),M(),A(),J?.valid!=null&&(f.value=o.getDirtyState(n),f.value&&P()),o.addRuleDeclEntry(n,j);}function A(){P=v.$debounce.value?he(U,v.$debounce.value??v.haveAnyAsyncRule?100:0):U;}function _(){R.value&&Object.entries(R.value).forEach(([j,J])=>{J.$unwatch();}),V(),f.value&&o.setDirtyEntry(n,f.value),s(),l(),x(),y.stop(),y=effectScope(),b?.(),G?.();}function M(){R.value&&Object.entries(R.value).forEach(([j,J])=>{J.$watch();}),v=y.run(()=>{let j=computed(()=>f.value),J=computed(()=>p.value.$debounce),W=computed(()=>p.value.$lazy!=null?p.value.$lazy:unref(c.lazy)),Z=computed(()=>p.value.$rewardEarly!=null?p.value.$rewardEarly:unref(c.rewardEarly)),De=computed(()=>p.value.$clearExternalErrorsOnChange!=null?p.value.$clearExternalErrorsOnChange:unref(c.clearExternalErrorsOnChange)),yt=computed(()=>p.value.$autoDirty!=null?p.value.$autoDirty:unref(c.autoDirty)),qe=computed(()=>Object.entries(R.value).some(([ee,Y])=>Y.$validating)),Ce=computed(()=>Re.value&&!Se.value&&f.value),Le=computed(()=>Ce.value?_e({field:{$dirty:f.value,$externalErrors:D.value,$rules:R.value}}):[]),ze=computed(()=>_e({field:{$dirty:f.value,$externalErrors:D.value,$rules:R.value},silent:!0})),Je=computed(()=>!(Re.value||Se.value)),Se=computed(()=>I.value||!Z.value?Object.entries(R.value).some(([ee,Y])=>Y.$pending):!1),Re=computed(()=>D.value?.length?!0:Q(R.value)?!1:!Z.value||Z.value&&I.value?Object.entries(R.value).some(([ee,Y])=>!Y.$valid):!1),Ye=computed(()=>a),Ie=computed(()=>Q(R.value)?!1:f.value&&!Q(e.value)&&!qe.value?D.value?.length?!1:Z.value?Object.entries(R.value).every(([ee,Y])=>Y.$valid):!Re.value:!1),gt=computed(()=>Object.entries(R.value).some(([ee,Y])=>Y._haveAsync));function mt(){g?.fields&&Object.entries(g.fields).forEach(([ee,Y])=>{let $t=effectScope();Qe[ee]=$t.run(()=>{let Xe=ref();return watchEffect(()=>{Xe.value=Y({$dirty:f.value,$externalErrors:D.value,$value:e,$rules:R.value,$error:Ce.value,$pending:Se.value,$invalid:Re.value,$valid:Ie.value,$errors:Le.value,$ready:Je.value,$silentErrors:ze.value,$anyDirty:j.value,$name:Ye.value});}),Xe});});}let Qe={};return mt(),watch(Ie,ee=>{ee&&(I.value=!1);}),{$error:Ce,$pending:Se,$invalid:Re,$valid:Ie,$debounce:J,$lazy:W,$errors:Le,$ready:Je,$silentErrors:ze,$rewardEarly:Z,$autoDirty:yt,$clearExternalErrorsOnChange:De,$anyDirty:j,$name:Ye,haveAnyAsyncRule:gt,$shortcuts:Qe,$validating:qe}}),x=watch(S,E),s=watch(e,()=>{v.$autoDirty.value&&(f.value||(f.value=!0)),t.value instanceof Function&&w(),P(),v.$rewardEarly.value!==!0&&v.$clearExternalErrorsOnChange.value&&C();},{deep:h?!0:se?1:!0}),V=watch(f,()=>{o.setDirtyEntry(n,f.value);}),l=watch(v.$valid,j=>{v.$rewardEarly.value&&j&&(I.value=!1);}),G=watch(v.haveAnyAsyncRule,A);}function U(){Object.values(R.value).forEach(j=>{j.$validate();});}let R=ref(),p=ref();w();function u(){f.value=!1,D.value=[],Object.entries(R.value).forEach(([j,J])=>{J.$reset();}),v.$lazy.value||Object.entries(R.value).map(([j,J])=>J.$validate());}function d(j=!0){f.value||(f.value=!0,j&&P());}async function m(){try{if(I.value=!0,!f.value)f.value=!0;else if(v.$autoDirty.value&&f.value&&!v.$pending.value)return !v.$error.value;return (await Promise.allSettled(Object.entries(R.value).map(([W,Z])=>Z.$validate()))).every(W=>W.status==="fulfilled"?!!W.value:!1)?e.value:!1}catch{return !1}}function i(){_(),e.value=at(e,$),u();}function T(j=!0){return f.value?e.value:null}function C(){D.value=[];}v.$lazy.value||P();let{$anyDirty:B,$error:H,$errors:le,$invalid:re,$name:k,$pending:F,$ready:O,$silentErrors:oe,$valid:xe,$shortcuts:$e,$validating:Qt}=v;return reactive({$dirty:f,$error:H,$errors:le,$valid:xe,$invalid:re,$pending:F,$silentErrors:oe,$anyDirty:B,$ready:O,$name:k,$externalErrors:D,$value:e,$rules:R,...$e,$reset:u,$touch:d,$validate:m,$unwatch:_,$watch:M,$resetAll:i,$extractDirtyFields:T,$clearExternalErrors:C})}function ft({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:c,rules:S,externalErrors:b,initialState:h,shortcuts:$,fieldName:g}){let y=S.$key?S.$key:Fe(),v=`${t}.${String(y)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?v=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:y,enumerable:!1,configurable:!1,writable:!1}}));let f=toRef(()=>b.value?.[r]),I=me({state:o,rulesDef:toRef(()=>S),customMessages:c,path:v,storage:a,options:n,externalErrors:f,initialState:h?.[r],shortcuts:$,fieldName:g});if(I){let D=o.value?.$id;I.$id=D??String(y),a.addArrayStatus(e,I.$id,I);}return I}function Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:c,initialState:S,shortcuts:b,fieldName:h}){let $=effectScope(),g,y=effectScope(),v;if(!Array.isArray(e.value)&&!t.value.$each)return null;let f=ref(),I=ref(e.value),D,s=ref({}),l=a.getCollectionsEntry(n);v=y.run(()=>{let u=computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(i=>typeof i!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(i=>de(i)):!1),d=computed(()=>c.value?Ve(c.value)?c.value.$errors??[]:[]:[]),m=computed(()=>c.value?Ve(c.value)?c.value.$each??[]:[]:[]);return {isPrimitiveArray:u,$externalErrorsField:d,$externalErrorsEach:m}}),x(),G();function x(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(f.value=Fe(),Object.defineProperties(e.value,{$id:{value:f.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(f.value=e.value.$id)),!v.isPrimitiveArray.value&&(I.value=s.value.$value,Array.isArray(e.value)?l.value=e.value.map((u,d)=>{let m=Ae(t.value.$each,toRef(()=>u),d),i=ft({$id:f.value,path:n,rules:m??{},stateValue:toRef(()=>u),index:d,options:o,storage:a,externalErrors:v.$externalErrorsEach,initialState:S[d],shortcuts:b,fieldName:h});return i||null}).filter(u=>!!u):l.value=[],s.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:v.$externalErrorsField,$isArray:!0,initialState:S,shortcuts:b,fieldName:h}));}function V(){if(Array.isArray(e.value)){let u=te(l.value);l.value=e.value.map((d,m)=>{let i=toRef(()=>d);if(d.$id&&l.value.find(T=>T.$id===d.$id)){let T=a.getArrayStatus(f.value,d.$id);return T?(T.$value=i,T):null}else {let T=Ae(t.value.$each,i,m);if(T){let C=ft({$id:f.value,path:n,rules:T,stateValue:i,index:m,options:o,storage:a,externalErrors:v.$externalErrorsEach,initialState:S[m],shortcuts:b,fieldName:h});return C||null}}}).filter(d=>!!d),u.filter(d=>!e.value.find(m=>d.$id===m.$id)).forEach((d,m)=>{a.deleteArrayStatus(f.value,m.toString());});}else l.value=[];}function G(){D=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?x():V();},{deep:se?1:!0,flush:"pre"}),g=$.run(()=>{let u=computed(()=>s.value.$dirty&&l.value.every(O=>O.$dirty)),d=computed(()=>s.value.$anyDirty||l.value.some(O=>O.$dirty)),m=computed(()=>s.value.$invalid||l.value.some(O=>O.$invalid)),i=computed(()=>(Q(s.value.$rules)?!0:s.value.$valid)&&l.value.every(O=>O.$valid)),T=computed(()=>s.value.$error||l.value.some(O=>O.$error)),C=computed(()=>!(m.value||B.value)),B=computed(()=>s.value.$pending||l.value.some(O=>O.$pending)),H=computed(()=>({$errors:s.value.$errors,$each:l.value.map(O=>O.$errors)})),le=computed(()=>({$errors:s.value.$silentErrors,$each:l.value.map(O=>O.$silentErrors)})),re=computed(()=>h);function k(){b?.collections&&Object.entries(b?.collections).forEach(([O,oe])=>{let xe=effectScope();F[O]=xe.run(()=>{let $e=ref();return watchEffect(()=>{$e.value=oe({$dirty:u.value,$error:T.value,$pending:B.value,$invalid:m.value,$valid:i.value,$errors:H.value,$ready:C.value,$silentErrors:le.value,$anyDirty:d.value,$name:re.value,$each:l.value,$field:s.value,$value:e});}),$e});});}let F={};return k(),{$dirty:u,$anyDirty:d,$invalid:m,$valid:i,$error:T,$pending:B,$errors:H,$silentErrors:le,$ready:C,$name:re,$shortcuts:F}}),v.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),D());}function P(){D&&D(),s.value&&s.value.$unwatch(),l.value&&l.value.forEach(u=>{"$dirty"in u&&u.$unwatch();}),$.stop(),$=effectScope(),y.stop(),y=effectScope(!0);}function E(u=!0){s.value.$touch(u),l.value.forEach(d=>{d.$touch(u);});}function w(){s.value.$reset(),l.value.forEach(u=>{u.$reset();});}async function A(){try{return (await Promise.all([s.value.$validate(),...l.value.map(m=>m.$validate())])).every(m=>m.value!==!1)?e.value:!1}catch{return !1}}function _(){s.value.$clearExternalErrors(),l.value.forEach(u=>{u.$clearExternalErrors();});}function M(u=!0){let d=l.value.map(m=>{if(je(m))return m.$extractDirtyFields(u)});return u&&(d=d.filter(m=>L(m)?!Q(m):!!m)),d}function U(){P(),lt(e,S),w();}let{$shortcuts:R,...p}=g;return reactive({$field:s,...p,...R,$each:l,$value:e,$validate:A,$unwatch:P,$watch:G,$touch:E,$reset:w,$resetAll:U,$extractDirtyFields:M,$clearExternalErrors:_})}function Be({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:c,externalErrors:S,validationGroups:b,initialState:h,shortcuts:$,fieldName:g}){let y,v,f=null;function s(R=!0){l.value=null,triggerRef(l);let p=Object.fromEntries(Object.entries(e.value).map(([i,T])=>{if(T){let C=toRef(t.value,i),B=toRef(()=>T),H=toRef(()=>S.value?.[i]);return [i,me({state:C,rulesDef:B,customMessages:r,path:n?`${n}.${i}`:i,storage:o,options:c,externalErrors:H,initialState:h?.[i],shortcuts:$,fieldName:i})]}return []}).filter(i=>!!i.length&&i[1]!=null)),u=Object.fromEntries(Object.entries(unref(S)??{}).filter(([i])=>!(i in e.value)).map(([i,T])=>{if(T){let C=toRef(t.value,i),B=toRef(()=>({})),H=toRef(()=>T);return [i,me({state:C,rulesDef:B,customMessages:r,path:n?`${n}.${i}`:i,storage:o,options:c,externalErrors:H,initialState:h?.[i],shortcuts:$,fieldName:i})]}return []})),d=Object.fromEntries(Object.entries(t.value).filter(([i])=>!(i in e.value)&&!(i in(u.value??{}))).map(([i,T])=>{let C=toRef(t.value,i),B=toRef(()=>({})),H=toRef(()=>S.value?.[i]);return [i,me({state:C,rulesDef:B,customMessages:r,path:n?`${n}.${i}`:i,storage:o,options:c,externalErrors:H,initialState:h?.[i],shortcuts:$,fieldName:i})]})),m=Object.fromEntries(Object.entries(b?.(p)??{}).map(([i,T])=>T.length?[i,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(C=>[C,Ke(toRef(()=>T),C)])),...Object.fromEntries(["$errors","$silentErrors"].map(C=>[C,et(toRef(()=>T),C)]))}]:[]));l.value={...p,...u,...d,...m},R&&P();}let l=o.getFieldsEntry(n);s();function x(){s(!1),Object.entries(l.value).forEach(([R,p])=>{p.$reset();}),P();}function V(R=!0){Object.values(l.value).forEach(p=>{p.$touch(R);});}async function G(){try{return (await Promise.allSettled(Object.values(l.value).map(u=>u.$validate()))).every(u=>u.status==="fulfilled"?u.value!==!1:!1)?t.value:!1}catch{return !1}}function P(){a&&(f=watch(a,()=>{E(),s();},{deep:se?1:!0,flush:"post"})),y=effectScope(),v=y.run(()=>{let R=computed(()=>!!Object.entries(l.value).length&&Object.entries(l.value).every(([k,F])=>F?.$dirty)),p=computed(()=>Object.entries(l.value).some(([k,F])=>F?.$dirty)),u=computed(()=>Object.entries(l.value).some(([k,F])=>F?.$invalid)),d=computed(()=>Object.entries(l.value).every(([k,F])=>F?.$valid)),m=computed(()=>R.value&&!T.value&&u.value),i=computed(()=>!(u.value||T.value)),T=computed(()=>Object.entries(l.value).some(([k,F])=>F?.$pending)),C=computed(()=>Object.fromEntries(Object.entries(l.value).map(([k,F])=>[k,F?.$errors]))),B=computed(()=>Object.fromEntries(Object.entries(l.value).map(([k,F])=>[k,F?.$silentErrors]))),H=computed(()=>g);function le(){$?.nested&&Object.entries($.nested).forEach(([k,F])=>{let O=effectScope();re[k]=O.run(()=>{let oe=ref();return watchEffect(()=>{oe.value=F({$dirty:R.value,$value:t,$error:m.value,$pending:T.value,$invalid:u.value,$valid:d.value,$ready:i.value,$anyDirty:p.value,$name:H.value,$silentErrors:B.value,$errors:C.value,$fields:l.value});}),oe});});}let re={};return le(),{$dirty:R,$anyDirty:p,$invalid:u,$valid:d,$error:m,$pending:T,$errors:C,$silentErrors:B,$ready:i,$name:H,$shortcuts:re}});}function E(){l.value&&Object.entries(l.value).forEach(([R,p])=>{p.$unwatch();}),f?.(),y.stop(),y=effectScope();}function w(){Object.entries(l.value).forEach(([R,p])=>{p.$clearExternalErrors();});}function A(){E(),pe(t,h??{}),x();}function _(R=!0){let p=Object.entries(l.value).map(([u,d])=>[u,d.$extractDirtyFields(R)]);return R&&(p=p.filter(([u,d])=>L(d)?!Q(d):Array.isArray(d)?d.length:!!d)),Object.fromEntries(p)}let{$shortcuts:M,...U}=v;return reactive({...U,...M,$fields:l,$value:t,$resetAll:A,$reset:x,$touch:V,$validate:G,$unwatch:E,$watch:P,$clearExternalErrors:w,$extractDirtyFields:_})}function me({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:c,index:S,initialState:b,shortcuts:h,onUnwatch:$,fieldName:g}){return st(t,e)?Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:S,externalErrors:c,initialState:b,fieldName:g,shortcuts:h}):ot(e,t)&&nt(e)?Be({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:S,initialState:b,shortcuts:h,fieldName:g,externalErrors:c}):ut(t)?Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:S,externalErrors:c,onUnwatch:$,shortcuts:h,initialState:b,fieldName:g}):null}function ke({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o}){let c=Me(),S=computed(()=>unref(t.externalErrors));return reactive(Be({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:c,options:t,externalErrors:S,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root"}))}function We(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange??!0};function a(o,c,S){let b=isRef(c)?c:computed(typeof c=="function"?c:()=>c),h={...n,...S},$=isRef(o)?o:ref(o),g=te(toRaw($.value));return {r$:ke({scopeRules:b,state:$,options:h,initialState:g,customRules:e,shortcuts:r})}}return a}var dt=We();function Ue(){function e(t,r){return r}return e}var He=Ue();function vt({rules:e,modifiers:t,shortcuts:r}){let n=We(e,t,r),a=Ue();return {useRegle:n,inferRules:a}}export{Pe as InternalRuleType,Oe as createRule,vt as defineRegleConfig,He as inferRules,q as unwrapRuleParameters,dt as useRegle};
|