@regle/core 0.2.4 → 0.2.6
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 +86 -41
- package/dist/index.d.ts +86 -41
- 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 de=(r=>(r.Inline="__inline",r.Async="__async",r))(de||{});function Fe(e,t){return vue.computed(()=>e.value.some(r=>r[t]))}function Me(e,t){return vue.computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function _(e){return e.map(t=>t instanceof Function?t():vue.unref(t))}function Ve(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function je(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(l=>l.trim()).filter(l=>l.includes("=")).length+e.length}function ye(e,...t){let{message:r,validator:n,active:a,type:l,...p}=e,b=l==="__async"||n.constructor.name==="AsyncFunction";return {...{validator(v,...c){return e.validator(v,..._(c.length?c:t))},message(v,c){return typeof e.message=="function"?e.message(v,{...c,$params:_(c.$params?.length?c.$params:t)}):e.message},active(v,c){return typeof e.active=="function"?e.active(v,{...c,$params:_(c.$params?.length?c.$params:t)}):e.active??!0},exec(v){let c=e.validator(v,..._(t)),o;return c instanceof Promise?c.then(I=>(o=I,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)):(o=c,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)}},...p,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:b,_params:Ve(t)}}function me(e){if(typeof e.validator=="function"){let r=ye(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(je(e.validator)>1){let a=function(...l){return ye(e,...l)};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 k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function _e(e){return k(e.value)}function L(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>L(n)))),r=="Map"&&(t=new Map([...e].map(n=>[L(n[0]),L(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,st(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=L(e[n]);}return t}function st(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 ge(e,t,r){return e instanceof Function?e(t,r??0):e}function ke(e,t){vue.isRef(e)?e.value=t:e=t;}function Ge(e,t){vue.isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=vue.isRef(e)?e.value[n]:e[n];a={},re(a,t[n]);});}function re(e,t){Object.entries({...vue.unref(e),...t}).forEach(([r,n])=>{let a=vue.isRef(e)?e.value:e,l=vue.isRef(t[r])?t[r]._value:t[r],p=vue.isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(l)&&l.forEach((b,D)=>{a[r][D]={},re(a[r][D],l[D]);})):k(l)?re(p,l):vue.isRef(a[r])?a[r].value=l:a[r]=l;});}function z(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 ne(e,t,r){let n,a=(...l)=>new Promise(p=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(p);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...l)=>new Promise(p=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(p);},0);}),a}function ut(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let l=Number(r[a]),p=Number(n[a]);if(l>p)return 1;if(p>l)return -1;if(!isNaN(l)&&isNaN(p))return 1;if(isNaN(l)&&!isNaN(p))return -1}return 0}var Z=ut(vue.version,"3.5.0")!==-1;function ct(){return Math.floor(Math.random()*Date.now()).toString()}function ve(){return typeof window>"u"?ct():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function $e(){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),l=vue.shallowRef(new Map);function p(d){let y=t.value.get(d);if(y)return y;{let h=vue.ref({});return t.value.set(d,h),h}}function b(d){let y=r.value.get(d);if(y)return y;{let h=vue.ref([]);return r.value.set(d,h),h}}function D(d,y,h){l.value.set(`${d}-${y}`,h);}function C(d,y){return l.value.get(`${d}-${y}`)}function v(d,y){d&&y!=null&&l.value.delete(`${d}-${y}`);}function c(d,y){n.value.set(d,y);}function o(d){return n.value.get(d)??!1}function I(d,y){e.value.set(d,y);}function P(d,y){let h=e.value.get(d);return h?$(y,h)?{valid:!0}:{valid:!1}:void 0}function $(d,y){let h=Object.keys(y),w=Object.keys(d);return w.length!==h.length||!w.every(F=>h.includes(F))?!1:w.every(F=>{let T=d[F],O=y[F];return !O||!T||typeof T=="function"||typeof O=="function"||typeof T=="number"||typeof T=="boolean"?!1:T._params?T._params?.every((A,E)=>{if(typeof O=="number"||typeof O=="boolean")return !0;{let s=_(O._params),i=_(T._params);return s?.[E]===i?.[E]}}):!0})}function f(d){let y=a.value.get(d);if(y)return y;{let h=vue.ref(!1),w=vue.ref(!0),M=vue.ref({}),F=vue.ref(!1);return a.value.set(d,{$pending:h,$valid:w,$metadata:M,$validating:F}),{$pending:h,$valid:w,$metadata:M,$validating:F}}}return vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),l.value.clear();}),{addRuleDeclEntry:I,setDirtyEntry:c,checkRuleDeclEntry:P,getDirtyState:o,trySetRuleStatusRef:f,getFieldsEntry:p,getCollectionsEntry:b,getArrayStatus:C,addArrayStatus:D,deleteArrayStatus:v,arrayStatusStorage:l}}function Be(e,t){return k(e.value)&&k(t.value)&&!Object.entries(t.value).some(r=>ae(r))}function Ne(e){return !!e.value&&"$each"in e.value}function Ue(e){return !!e.value&&k(e.value)}function ae(e){return k(e)&&"_validator"in e}function le(e){return typeof e.value!="function"}function Se(e){return k(e)&&"$fields"in e}function Ee(e){return "$each"in e||"$errors"in e}function be({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 He({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:l,storage:p,$debounce:b}){let D=vue.effectScope(),C,v,c=vue.ref(!1),{$pending:o,$valid:I,$metadata:P,$validating:$}=p.trySetRuleStatusRef(`${l}.${n}`);function f(){C=D.run(()=>{let T=vue.computed(()=>({$invalid:!I.value,$params:i.value,...P.value})),O=vue.computed(()=>le(r)?typeof r.value.active=="function"?r.value.active(a.value,T.value):r.value.active:!0),A=vue.computed(()=>{let u="",m=t?t[n]?.message:void 0;return m&&(typeof m=="function"?u=m(a.value,T.value):u=m),le(r)&&(m&&!r.value._patched||(typeof r.value.message=="function"?u=r.value.message(a.value,T.value):u=r.value.message)),z(u)&&(u="Error",console.warn(`No error message defined for ${l}.${n}`)),u}),E=vue.computed(()=>le(r)&&r.value.type?r.value.type:n),s=vue.computed(()=>le(r)?r.value.validator:r.value),i=vue.computed(()=>typeof r.value=="function"?[]:_(r.value._params??[])),R=vue.computed(()=>`${l}.${E.value}`);return {$active:O,$message:A,$type:E,$validator:s,$params:i,$path:R}}),v=vue.watch(C.$params,w,{deep:!0});}f();function d(){I.value=!0,e.value&&(o.value=!0);}async function y(){let T=C.$validator.value,O=T(a.value,...C.$params.value),A=!1,E=a.value;try{d();let s;if(O instanceof Promise?s=await O:s=O,a.value!==E)return !0;if(typeof s=="boolean")A=s;else {let{$valid:i,...R}=s;A=i,P.value=R;}}catch{A=!1;}finally{o.value=!1;}return A}let h=ne(y,b??200);async function w(){$.value=!0;let T=!1;if(ae(r.value)&&r.value._async)T=await h();else {let O=C.$validator.value,A=O(a.value,...C.$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")T=A;else {let{$valid:E,...s}=A;T=E,P.value=s;}}return I.value=T,$.value=!1,T}function M(){I.value=!0,P.value={},o.value=!1,$.value=!1,f();}function F(){v(),D.stop(),D=vue.effectScope();}return vue.reactive({...C,$pending:o,$valid:I,$metadata:P,_haveAsync:c,$validating:$,$validate:w,$unwatch:F,$watch:f,$reset:M})}function ue({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:p,onUnwatch:b,$isArray:D,initialState:C}){let v=vue.effectScope(),c,o=vue.ref(!1),I=vue.ref(!1),P=vue.ref([]),$,f,d,y,h,w=()=>{};function M(){P.value=p.value??[];}M();function F(){let g=t.value,S=a.checkRuleDeclEntry(n,g);i.value=Object.fromEntries(Object.entries(g).filter(([V])=>V.startsWith("$"))),s.value=Object.fromEntries(Object.entries(t.value).filter(([V])=>!V.startsWith("$")).map(([V,U])=>{if(U){let Re=vue.toRef(()=>U);return [V,He({$dirty:o,customMessages:r,rule:Re,ruleKey:V,state:e,path:n,storage:a,$debounce:i.value.$debounce})]}return []}).filter(V=>!!V.length)),A(),T(),S?.valid!=null&&(o.value=a.getDirtyState(n),o.value&&w()),a.addRuleDeclEntry(n,g);}function T(){w=c.$debounce.value?ne(E,c.$debounce.value??c.haveAnyAsyncRule?100:0):E;}function O(){s.value&&Object.entries(s.value).forEach(([g,S])=>{S.$unwatch();}),y(),o.value&&a.setDirtyEntry(n,o.value),$(),f(),d(),v.stop(),v=vue.effectScope(),b?.(),h?.();}function A(){s.value&&Object.entries(s.value).forEach(([g,S])=>{S.$watch();}),c=v.run(()=>{let g=vue.computed(()=>o.value),S=vue.computed(()=>i.value.$debounce),V=vue.computed(()=>i.value.$lazy!=null?i.value.$lazy:vue.unref(l.lazy)),U=vue.computed(()=>i.value.$rewardEarly!=null?i.value.$rewardEarly:vue.unref(l.rewardEarly)),Re=vue.computed(()=>i.value.$autoDirty!=null?i.value.$autoDirty:vue.unref(l.autoDirty)),Ze=vue.computed(()=>Object.entries(s.value).some(([X,W])=>W.$validating)),we=vue.computed(()=>ie.value&&!pe.value&&o.value),Ke=vue.computed(()=>we.value?be({field:{$dirty:o.value,$externalErrors:P.value,$rules:s.value}}):[]),et=vue.computed(()=>be({field:{$dirty:o.value,$externalErrors:P.value,$rules:s.value},silent:!0})),tt=vue.computed(()=>!(ie.value||pe.value)),pe=vue.computed(()=>I.value||!U.value?Object.entries(s.value).some(([X,W])=>W.$pending):!1),ie=vue.computed(()=>P.value?.length?!0:!U.value||U.value&&I.value?Object.entries(s.value).some(([X,W])=>!W.$valid):!1),Oe=vue.computed(()=>o.value&&!z(e.value)&&!Ze.value?P.value?.length?!1:U.value?Object.entries(s.value).every(([X,W])=>W.$valid):!ie.value:!1),rt=vue.computed(()=>Object.entries(s.value).some(([X,W])=>W._haveAsync));return vue.watch(Oe,X=>{X&&(I.value=!1);}),{$error:we,$pending:pe,$invalid:ie,$valid:Oe,$debounce:S,$lazy:V,$errors:Ke,$ready:tt,$silentErrors:et,$rewardEarly:U,$autoDirty:Re,$anyDirty:g,haveAnyAsyncRule:rt}}),d=vue.watch(p,M),$=vue.watch(e,()=>{c.$autoDirty.value&&(o.value||(o.value=!0)),t.value instanceof Function&&F(),w(),c.$rewardEarly.value;},{deep:D?!0:Z?1:!0}),y=vue.watch(o,()=>{a.setDirtyEntry(n,o.value);}),f=vue.watch(c.$valid,g=>{c.$rewardEarly.value&&g&&(I.value=!1);}),h=vue.watch(c.haveAnyAsyncRule,T);}function E(){Object.entries(s.value).forEach(([g,S])=>{S.$validate();});}let s=vue.ref(),i=vue.ref();F();function R(){o.value=!1,P.value=[],Object.entries(s.value).forEach(([g,S])=>{S.$reset();}),c.$lazy.value||Object.entries(s.value).map(([g,S])=>S.$validate());}function u(){o.value||(o.value=!0,c.$rewardEarly.value,w());}let m=c.$debounce.value?ne(x,c.$debounce.value??0):x;async function x(){try{if(I.value=!0,c.$autoDirty.value&&o.value&&!c.$pending.value)return !c.$error.value;{let g=Object.entries(s.value).map(([V,U])=>U.$validate());return (await Promise.allSettled(g)).every(V=>V.status==="fulfilled"?V.value:!1)}}catch{return !1}}function G(){O(),e.value=ke(e,C),R();}function q(g=!0){return o.value?e.value:null}function B(){P.value=[];}return c.$lazy.value||x(),vue.reactive({$dirty:o,...c,$externalErrors:P,$value:e,$rules:s,$reset:R,$touch:u,$validate:m,$unwatch:O,$watch:A,$resetAll:G,$extractDirtyFields:q,$clearExternalErrors:B})}function Le({$id:e,path:t,index:r,options:n,storage:a,stateValue:l,customMessages:p,rules:b,externalErrors:D,initialState:C}){let v=b.$key?b.$key:ve(),c=`${t}.${String(v)}`;typeof l.value=="object"&&l.value!=null&&(l.value.$id?c=`${t}.${l.value.$id}`:Object.defineProperties(l.value,{$id:{value:v,enumerable:!1,configurable:!1,writable:!1}}));let o=vue.toRef(()=>D.value?.[r]),I=fe({state:l,rulesDef:vue.toRef(()=>b),customMessages:p,path:c,storage:a,options:n,externalErrors:o,initialState:C?.[r]});if(I){let P=l.value?.$id;I.$id=P??String(v),a.addArrayStatus(e,I.$id,I);}return I}function ze({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:p,initialState:b}){let D=vue.effectScope(),C,v=vue.effectScope(),c;if(Array.isArray(e.value)&&!t.value.$each)return null;let o=vue.ref(),I=vue.ref(e.value),P,$=vue.ref({}),f=a.getCollectionsEntry(n);c=v.run(()=>{let i=vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(m=>typeof m!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(m=>ae(m)):!1),R=vue.computed(()=>p.value?Ee(p.value)?p.value.$errors??[]:[]:[]),u=vue.computed(()=>p.value?Ee(p.value)?p.value.$each??[]:[]:[]);return {isPrimitiveArray:i,$externalErrorsField:R,$externalErrorsEach:u}}),d(),h();function d(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(o.value=ve(),Object.defineProperties(e.value,{$id:{value:o.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(o.value=e.value.$id)),!c.isPrimitiveArray.value&&(I.value=$.value.$value,Array.isArray(e.value)&&t.value.$each?f.value=e.value.map((i,R)=>{let u=ge(t.value.$each,vue.toRef(()=>i),R);if(u){let m=Le({$id:o.value,path:n,rules:u,stateValue:vue.toRef(()=>i),index:R,options:l,storage:a,externalErrors:c.$externalErrorsEach,initialState:b[R]});return m||null}}).filter(i=>!!i):f.value=[],$.value=ue({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:c.$externalErrorsField,$isArray:!0,initialState:b}));}function y(){if(Array.isArray(e.value)){let i=L(f.value);f.value=e.value.map((R,u)=>{let m=vue.toRef(()=>R);if(R.$id&&f.value.find(x=>x.$id===R.$id)){let x=a.getArrayStatus(o.value,R.$id);return x?(x.$value=m,x):null}else {let x=ge(t.value.$each,m,u);if(x){let G=Le({$id:o.value,path:n,rules:x,stateValue:m,index:u,options:l,storage:a,externalErrors:c.$externalErrorsEach,initialState:b[u]});return G||null}}}).filter(R=>!!R),i.filter(R=>!e.value.find(u=>R.$id===u.$id)).forEach((R,u)=>{a.deleteArrayStatus(o.value,u.toString());});}else f.value=[];}function h(){P=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?d():y();},{deep:Z?1:!0,flush:"pre"}),C=D.run(()=>{let i=vue.computed(()=>$.value.$dirty&&f.value.every(S=>S.$dirty)),R=vue.computed(()=>$.value.$anyDirty||f.value.some(S=>S.$dirty)),u=vue.computed(()=>$.value.$invalid||f.value.some(S=>S.$invalid)),m=vue.computed(()=>$.value.$valid&&f.value.every(S=>S.$valid)),x=vue.computed(()=>$.value.$error||f.value.some(S=>S.$error)),G=vue.computed(()=>!(u.value||q.value)),q=vue.computed(()=>$.value.$pending||f.value.some(S=>S.$pending)),B=vue.computed(()=>({$errors:$.value.$errors,$each:f.value.map(S=>S.$errors)})),g=vue.computed(()=>({$errors:$.value.$silentErrors,$each:f.value.map(S=>S.$silentErrors)}));return {$dirty:i,$anyDirty:R,$invalid:u,$valid:m,$error:x,$pending:q,$errors:B,$silentErrors:g,$ready:G}}),c.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`),P());}function w(){P&&P(),$.value&&$.value.$unwatch(),f.value&&f.value.forEach(i=>{"$dirty"in i&&i.$unwatch();}),D.stop(),D=vue.effectScope(),v.stop(),v=vue.effectScope(!0);}function M(){$.value.$touch(),f.value.forEach(i=>{i.$touch();});}function F(){$.value.$reset(),f.value.forEach(i=>{i.$reset();});}async function T(){try{return (await Promise.all([$.value.$validate(),...f.value.map(R=>R.$validate())])).every(R=>!!R)}catch{return !1}}function O(){$.value.$clearExternalErrors(),f.value.forEach(i=>{i.$clearExternalErrors();});}function A(i=!0){let R=f.value.map(u=>{if(Se(u))return u.$extractDirtyFields(i)});return i&&(R=R.filter(u=>k(u)?!z(u):!!u)),R}function E(){console.log(b),w(),Ge(e,b),F();}async function s(){return M(),await T()?e.value:!1}return vue.reactive({$field:$,...C,$each:f,$value:e,$validate:T,$unwatch:w,$watch:h,$touch:M,$reset:F,$resetAll:E,$extractDirtyFields:A,$parse:s,$clearExternalErrors:O})}function Te({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:l,options:p,externalErrors:b,validationGroups:D,initialState:C}){let v,c,o=null;function $(E=!0){f.value=null,vue.triggerRef(f);let s=Object.fromEntries(Object.entries(e.value).map(([u,m])=>{if(m){let x=vue.toRef(t.value,u),G=vue.toRef(()=>m),q=vue.toRef(()=>b.value?.[u]);return [u,fe({state:x,rulesDef:G,customMessages:r,path:n?`${n}.${u}`:u,storage:l,options:p,externalErrors:q,initialState:C?.[u]})]}return []}).filter(u=>!!u.length&&u[1]!=null)),i=Object.fromEntries(Object.entries(vue.unref(b)??{}).filter(([u])=>!(u in e.value)).map(([u,m])=>{if(m){let x=vue.toRef(()=>({})),G=vue.toRef(()=>m);return [u,fe({state:vue.ref(void 0),rulesDef:x,customMessages:r,path:n?`${n}.${u}`:u,storage:l,options:p,externalErrors:G,initialState:C?.[u]})]}return []})),R=Object.fromEntries(Object.entries(D?.(s)??{}).map(([u,m])=>m.length?[u,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(x=>[x,Fe(vue.toRef(()=>m),x)])),...Object.fromEntries(["$errors","$silentErrors"].map(x=>[x,Me(vue.toRef(()=>m),x)]))}]:[]));f.value={...s,...i,...R},E&&w();}let f=l.getFieldsEntry(n);$();function d(){$(!1),Object.entries(f.value).forEach(([E,s])=>{s.$reset();}),w();}function y(){Object.entries(f.value).forEach(([E,s])=>{s.$touch();});}async function h(){try{return (await Promise.allSettled(Object.entries(f.value).map(([s,i])=>i.$validate()))).every(s=>s.status==="fulfilled"?s.value:!1)}catch{return !1}}function w(){a&&(o=vue.watch(a,()=>{M(),$();},{deep:Z?1:!0,flush:"post"})),v=vue.effectScope(),c=v.run(()=>{let E=vue.computed(()=>!!Object.entries(f.value).length&&Object.entries(f.value).every(([B,g])=>g.$dirty)),s=vue.computed(()=>Object.entries(f.value).some(([B,g])=>g.$dirty)),i=vue.computed(()=>Object.entries(f.value).some(([B,g])=>g.$invalid)),R=vue.computed(()=>Object.entries(f.value).every(([B,g])=>g.$valid)),u=vue.computed(()=>E.value&&!x.value&&i.value),m=vue.computed(()=>!(i.value||x.value)),x=vue.computed(()=>Object.entries(f.value).some(([B,g])=>g.$pending)),G=vue.computed(()=>Object.fromEntries(Object.entries(f.value).map(([B,g])=>[B,g.$errors]))),q=vue.computed(()=>Object.fromEntries(Object.entries(f.value).map(([B,g])=>[B,g.$silentErrors])));return {$dirty:E,$anyDirty:s,$invalid:i,$valid:R,$error:u,$pending:x,$errors:G,$silentErrors:q,$ready:m}});}function M(){f.value&&Object.entries(f.value).forEach(([E,s])=>{s.$unwatch();}),o?.(),v.stop(),v=vue.effectScope();}function F(){Object.entries(f.value).forEach(([E,s])=>{s.$clearExternalErrors();});}function T(){M(),re(t,C??{}),d();}function O(E=!0){let s=Object.entries(f.value).map(([i,R])=>[i,R.$extractDirtyFields(E)]);return E&&(s=s.filter(([i,R])=>k(R)?!z(R):Array.isArray(R)?R.length:!!R)),Object.fromEntries(s)}async function A(){return y(),await h()?t.value:!1}return vue.reactive({...c,$fields:f,$value:t,$resetAll:T,$reset:d,$touch:y,$validate:h,$unwatch:M,$watch:w,$clearExternalErrors:F,$extractDirtyFields:O,$parse:A})}function fe({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:p,index:b,initialState:D,onUnwatch:C}){return Ne(t)?ze({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:b,externalErrors:p,initialState:D}):Be(e,t)&&_e(e)?Te({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:l,index:b,initialState:D,externalErrors:p}):Ue(t)?ue({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:b,externalErrors:p,onUnwatch:C,initialState:D}):null}function De({initialState:e,options:t,scopeRules:r,state:n,customRules:a}){let l=$e(),p=vue.computed(()=>vue.unref(t.externalErrors));return vue.reactive(Te({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:l,options:t,externalErrors:p,validationGroups:t.validationGroups,initialState:e}))}function Ce(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,l,p){let b=vue.isRef(l)?l:vue.computed(typeof l=="function"?l:()=>l),D={...r,...p},C=vue.isRef(a)?a:vue.ref(a),v=L(vue.toRaw(C.value));return {r$:De({scopeRules:b,state:C,options:D,initialState:v,customRules:e})}}return n}var Qe=Ce();function Ie(){function e(t,r){return r}return e}var Pe=Ie();function Xe({rules:e,modifiers:t}){let r=Ce(e,t),n=Ie();return {useRegle:r,inferRules:n}}exports.InternalRuleType=de;exports.createRule=me;exports.defineRegleConfig=Xe;exports.inferRules=Pe;exports.unwrapRuleParameters=_;exports.useRegle=Qe;
|
|
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 L(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,S=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator(g,...m){return e.validator(g,...L(m.length?m:t))},message(g,m){return typeof e.message=="function"?e.message(g,{...m,$params:L(m.$params?.length?m.$params:t)}):e.message},active(g,m){return typeof e.active=="function"?e.active(g,{...m,$params:L(m.$params?.length?m.$params:t)}):e.active??!0},exec(g){let m=e.validator(g,...L(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: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 z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function nt(e){return z(e.value)}function re(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>re(n)))),r=="Map"&&(t=new Map([...e].map(n=>[re(n[0]),re(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]=re(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((S,E)=>{a[r][E]={},de(a[r][E],o[E]);})):z(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 se=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(i){let l=t.value.get(i);if(l)return l;{let x=vue.ref({});return t.value.set(i,x),x}}function S(i){let l=r.value.get(i);if(l)return l;{let x=vue.ref([]);return r.value.set(i,x),x}}function E(i,l,x){o.value.set(`${i}-${l}`,x);}function h(i,l){return o.value.get(`${i}-${l}`)}function g(i,l){i&&l!=null&&o.value.delete(`${i}-${l}`);}function m(i,l){n.value.set(i,l);}function d(i){return n.value.get(i)??!1}function f(i,l){e.value.set(i,l);}function c(i,l){let x=e.value.get(i);return x?I(l,x)?{valid:!0}:{valid:!1}:void 0}function I(i,l){let x=Object.keys(l),j=Object.keys(i);return j.length!==x.length||!j.every(w=>x.includes(w))?!1:j.every(w=>{let b=i[w],O=l[w];return !O||!b||typeof b=="function"||typeof O=="function"||typeof b=="number"||typeof b=="boolean"?!1:b._params?b._params?.every((A,N)=>{if(typeof O=="number"||typeof O=="boolean")return !0;{let V=L(O._params),q=L(b._params);return V?.[N]===q?.[N]}}):!0})}function C(i){let l=a.value.get(i);if(l)return l;{let x=vue.ref(!1),j=vue.ref(!0),G=vue.ref({}),w=vue.ref(!1);return a.value.set(i,{$pending:x,$valid:j,$metadata:G,$validating:w}),{$pending:x,$valid:j,$metadata:G,$validating:w}}}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:S,getArrayStatus:h,addArrayStatus:E,deleteArrayStatus:g,arrayStatusStorage:o}}function ot(e,t){return z(e.value)&&z(t.value)&&!Object.entries(t.value).some(r=>me(r))}function it(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function st(e){return !!e.value&&z(e.value)}function me(e){return z(e)&&"_validator"in e}function ve(e){return typeof e.value!="function"}function Ve(e){return z(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:S}){let E=vue.effectScope(),h,g,m=vue.ref(!1),{$pending:d,$valid:f,$metadata:c,$validating:I}=u.trySetRuleStatusRef(`${o}.${n}`);function C(){h=E.run(()=>{let b=vue.computed(()=>({$invalid:!f.value,$params:q.value,...c.value})),O=vue.computed(()=>ve(r)?typeof r.value.active=="function"?r.value.active(a.value,b.value):r.value.active:!0),A=vue.computed(()=>{let y="",v=t?t[n]?.message:void 0;return v&&(typeof v=="function"?y=v(a.value,b.value):y=v),ve(r)&&(v&&!r.value._patched||(typeof r.value.message=="function"?y=r.value.message(a.value,b.value):y=r.value.message)),ee(y)&&(y="Error",console.warn(`No error message defined for ${o}.${n}`)),y}),N=vue.computed(()=>ve(r)&&r.value.type?r.value.type:n),V=vue.computed(()=>ve(r)?r.value.validator:r.value),q=vue.computed(()=>typeof r.value=="function"?[]:L(r.value._params??[])),D=vue.computed(()=>`${o}.${N.value}`);return {$active:O,$message:A,$type:N,$validator:V,$params:q,$path:D}}),g=vue.watch(h.$params,j,{deep:!0});}C();function i(){f.value=!0,e.value&&(d.value=!0);}async function l(){let b=h.$validator.value,O=b(a.value,...h.$params.value),A=!1,N=a.value;try{i();let V;if(O instanceof Promise?V=await O:V=O,a.value!==N)return !0;if(typeof V=="boolean")A=V;else {let{$valid:q,...D}=V;A=q,c.value=D;}}catch{A=!1;}finally{d.value=!1;}return A}let x=ye(l,S??200);async function j(){I.value=!0;let b=!1;if(me(r.value)&&r.value._async)b=await x();else {let O=h.$validator.value,A=O(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")b=A;else {let{$valid:N,...V}=A;b=N,c.value=V;}}return f.value=b,I.value=!1,b}function G(){f.value=!0,c.value={},d.value=!1,I.value=!1,C();}function w(){g(),E.stop(),E=vue.effectScope();}return vue.reactive({...h,$pending:d,$valid:f,$metadata:c,_haveAsync:m,$validating:I,$validate:j,$unwatch:w,$watch:C,$reset:G})}function be({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:u,externalErrors:S,onUnwatch:E,$isArray:h,initialState:g,shortcuts:m}){let d=vue.effectScope(),f,c=vue.ref(!1),I=vue.ref(!1),C=vue.ref([]),i,l,x,j,G,w=()=>{};function b(){C.value=S.value??[];}b();function O(){let _=t.value,W=o.checkRuleDeclEntry(n,_);y.value=Object.fromEntries(Object.entries(_).filter(([H])=>H.startsWith("$"))),D.value=Object.fromEntries(Object.entries(t.value).filter(([H])=>!H.startsWith("$")).map(([H,X])=>{if(X){let De=vue.toRef(()=>X);return [H,ct({$dirty:c,customMessages:r,rule:De,ruleKey:H,state:e,path:n,storage:o,$debounce:y.value.$debounce})]}return []}).filter(H=>!!H.length)),V(),A(),W?.valid!=null&&(c.value=o.getDirtyState(n),c.value&&w()),o.addRuleDeclEntry(n,_);}function A(){w=f.$debounce.value?ye(q,f.$debounce.value??f.haveAnyAsyncRule?100:0):q;}function N(){D.value&&Object.entries(D.value).forEach(([_,W])=>{W.$unwatch();}),j(),c.value&&o.setDirtyEntry(n,c.value),i(),l(),x(),d.stop(),d=vue.effectScope(),E?.(),G?.();}function V(){D.value&&Object.entries(D.value).forEach(([_,W])=>{W.$watch();}),f=d.run(()=>{let _=vue.computed(()=>c.value),W=vue.computed(()=>y.value.$debounce),H=vue.computed(()=>y.value.$lazy!=null?y.value.$lazy:vue.unref(u.lazy)),X=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)),vt=vue.computed(()=>Object.entries(D.value).some(([te,Q])=>Q.$validating)),Ce=vue.computed(()=>pe.value&&!Ee.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||Ee.value)),Ee=vue.computed(()=>I.value||!X.value?Object.entries(D.value).some(([te,Q])=>Q.$pending):!1),pe=vue.computed(()=>C.value?.length?!0:!X.value||X.value&&I.value?Object.entries(D.value).some(([te,Q])=>!Q.$valid):!1),Ye=vue.computed(()=>a),Ie=vue.computed(()=>ee(D.value)?!0:c.value&&!ee(e.value)&&!vt.value?C.value?.length?!1:X.value?Object.entries(D.value).every(([te,Q])=>Q.$valid):!pe.value:!1),gt=vue.computed(()=>Object.entries(D.value).some(([te,Q])=>Q._haveAsync));function $t(){m?.fields&&Object.entries(m.fields).forEach(([te,Q])=>{let St=vue.effectScope();Qe[te]=St.run(()=>{let Xe=vue.ref();return vue.watchEffect(()=>{Xe.value=Q({$dirty:c.value,$externalErrors:C.value,$value:e,$rules:D.value,$error:Ce.value,$pending:Ee.value,$invalid:pe.value,$valid:Ie.value,$errors:Le.value,$ready:Je.value,$silentErrors:ze.value,$anyDirty:_.value,$name:Ye.value});}),Xe});});}let Qe={};return $t(),vue.watch(Ie,te=>{te&&(I.value=!1);}),{$error:Ce,$pending:Ee,$invalid:pe,$valid:Ie,$debounce:W,$lazy:H,$errors:Le,$ready:Je,$silentErrors:ze,$rewardEarly:X,$autoDirty:De,$anyDirty:_,$name:Ye,haveAnyAsyncRule:gt,$shortcuts:Qe}}),x=vue.watch(S,b),i=vue.watch(e,()=>{f.$autoDirty.value&&(c.value||(c.value=!0)),t.value instanceof Function&&O(),w(),f.$rewardEarly.value;},{deep:h?!0:se?1:!0}),j=vue.watch(c,()=>{o.setDirtyEntry(n,c.value);}),l=vue.watch(f.$valid,_=>{f.$rewardEarly.value&&_&&(I.value=!1);}),G=vue.watch(f.haveAnyAsyncRule,A);}function q(){Object.entries(D.value).forEach(([_,W])=>{W.$validate();});}let D=vue.ref(),y=vue.ref();O();function v(){c.value=!1,C.value=[],Object.entries(D.value).forEach(([_,W])=>{W.$reset();}),f.$lazy.value||Object.entries(D.value).map(([_,W])=>W.$validate());}function R(){c.value||(c.value=!0,f.$rewardEarly.value,w());}let p=f.$debounce.value?ye($,f.$debounce.value??0):$;async function $(){try{if(I.value=!0,f.$autoDirty.value&&c.value&&!f.$pending.value)return !f.$error.value;{let _=Object.entries(D.value).map(([H,X])=>X.$validate());return (await Promise.allSettled(_)).every(H=>H.status==="fulfilled"?H.value:!1)}}catch{return !1}}function s(){N(),e.value=at(e,g),v();}function T(_=!0){return c.value?e.value:null}function P(){C.value=[];}f.$lazy.value||$();let{$anyDirty:k,$error:Y,$errors:oe,$invalid:ne,$name:U,$pending:M,$ready:F,$silentErrors:ie,$valid:xe,$shortcuts:he}=f;return vue.reactive({$dirty:c,$error:Y,$errors:oe,$valid:xe,$invalid:ne,$pending:M,$silentErrors:ie,$anyDirty:k,$ready:F,$name:U,$externalErrors:C,$value:e,$rules:D,...he,$reset:v,$touch:R,$validate:p,$unwatch:N,$watch:V,$resetAll:s,$extractDirtyFields:T,$clearExternalErrors:P})}function ft({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:u,rules:S,externalErrors:E,initialState:h,shortcuts:g,fieldName:m}){let d=S.$key?S.$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=Se({state:o,rulesDef:vue.toRef(()=>S),customMessages:u,path:f,storage:a,options:n,externalErrors:c,initialState:h?.[r],shortcuts:g,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:S,shortcuts:E,fieldName:h}){let g=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,i=vue.ref({}),l=a.getCollectionsEntry(n);f=d.run(()=>{let R=vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(s=>typeof s!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(s=>me(s)):!1),p=vue.computed(()=>u.value?je(u.value)?u.value.$errors??[]:[]:[]),$=vue.computed(()=>u.value?je(u.value)?u.value.$each??[]:[]:[]);return {isPrimitiveArray:R,$externalErrorsField:p,$externalErrorsEach:$}}),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=i.value.$value,Array.isArray(e.value)?l.value=e.value.map((R,p)=>{let $=Ae(t.value.$each,vue.toRef(()=>R),p),s=ft({$id:c.value,path:n,rules:$??{},stateValue:vue.toRef(()=>R),index:p,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:S[p],shortcuts:E,fieldName:h});return s||null}).filter(R=>!!R):l.value=[],i.value=be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:f.$externalErrorsField,$isArray:!0,initialState:S,shortcuts:E,fieldName:h}));}function j(){if(Array.isArray(e.value)){let R=re(l.value);l.value=e.value.map((p,$)=>{let s=vue.toRef(()=>p);if(p.$id&&l.value.find(T=>T.$id===p.$id)){let T=a.getArrayStatus(c.value,p.$id);return T?(T.$value=s,T):null}else {let T=Ae(t.value.$each,s,$);if(T){let P=ft({$id:c.value,path:n,rules:T,stateValue:s,index:$,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:S[$],shortcuts:E,fieldName:h});return P||null}}}).filter(p=>!!p),R.filter(p=>!e.value.find($=>p.$id===$.$id)).forEach((p,$)=>{a.deleteArrayStatus(c.value,$.toString());});}else l.value=[];}function G(){C=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?x():j();},{deep:se?1:!0,flush:"pre"}),m=g.run(()=>{let R=vue.computed(()=>i.value.$dirty&&l.value.every(F=>F.$dirty)),p=vue.computed(()=>i.value.$anyDirty||l.value.some(F=>F.$dirty)),$=vue.computed(()=>i.value.$invalid||l.value.some(F=>F.$invalid)),s=vue.computed(()=>i.value.$valid&&l.value.every(F=>F.$valid)),T=vue.computed(()=>i.value.$error||l.value.some(F=>F.$error)),P=vue.computed(()=>!($.value||k.value)),k=vue.computed(()=>i.value.$pending||l.value.some(F=>F.$pending)),Y=vue.computed(()=>({$errors:i.value.$errors,$each:l.value.map(F=>F.$errors)})),oe=vue.computed(()=>({$errors:i.value.$silentErrors,$each:l.value.map(F=>F.$silentErrors)})),ne=vue.computed(()=>h);function U(){E?.collections&&Object.entries(E?.collections).forEach(([F,ie])=>{let xe=vue.effectScope();M[F]=xe.run(()=>{let he=vue.ref();return vue.watchEffect(()=>{he.value=ie({$dirty:R.value,$error:T.value,$pending:k.value,$invalid:$.value,$valid:s.value,$errors:Y.value,$ready:P.value,$silentErrors:oe.value,$anyDirty:p.value,$name:ne.value,$each:l.value,$field:i.value,$value:e});}),he});});}let M={};return U(),{$dirty:R,$anyDirty:p,$invalid:$,$valid:s,$error:T,$pending:k,$errors:Y,$silentErrors:oe,$ready:P,$name:ne,$shortcuts:M}}),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 w(){C&&C(),i.value&&i.value.$unwatch(),l.value&&l.value.forEach(R=>{"$dirty"in R&&R.$unwatch();}),g.stop(),g=vue.effectScope(),d.stop(),d=vue.effectScope(!0);}function b(){i.value.$touch(),l.value.forEach(R=>{R.$touch();});}function O(){i.value.$reset(),l.value.forEach(R=>{R.$reset();});}async function A(){try{return (await Promise.all([i.value.$validate(),...l.value.map(p=>p.$validate())])).every(p=>!!p)}catch{return !1}}function N(){i.value.$clearExternalErrors(),l.value.forEach(R=>{R.$clearExternalErrors();});}function V(R=!0){let p=l.value.map($=>{if(Ve($))return $.$extractDirtyFields(R)});return R&&(p=p.filter($=>z($)?!ee($):!!$)),p}function q(){console.log(S),w(),lt(e,S),O();}async function D(){return b(),await A()?e.value:!1}let{$shortcuts:y,...v}=m;return vue.reactive({$field:i,...v,...y,$each:l,$value:e,$validate:A,$unwatch:w,$watch:G,$touch:b,$reset:O,$resetAll:q,$extractDirtyFields:V,$parse:D,$clearExternalErrors:N})}function ke({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:u,externalErrors:S,validationGroups:E,initialState:h,shortcuts:g,fieldName:m}){let d,f,c=null;function i(y=!0){l.value=null,vue.triggerRef(l);let v=Object.fromEntries(Object.entries(e.value).map(([s,T])=>{if(T){let P=vue.toRef(t.value,s),k=vue.toRef(()=>T),Y=vue.toRef(()=>S.value?.[s]);return [s,Se({state:P,rulesDef:k,customMessages:r,path:n?`${n}.${s}`:s,storage:o,options:u,externalErrors:Y,initialState:h?.[s],shortcuts:g,fieldName:s})]}return []}).filter(s=>!!s.length&&s[1]!=null)),R=Object.fromEntries(Object.entries(vue.unref(S)??{}).filter(([s])=>!(s in e.value)).map(([s,T])=>{if(T){let P=vue.toRef(t.value,s),k=vue.toRef(()=>({})),Y=vue.toRef(()=>T);return [s,Se({state:P,rulesDef:k,customMessages:r,path:n?`${n}.${s}`:s,storage:o,options:u,externalErrors:Y,initialState:h?.[s],shortcuts:g,fieldName:s})]}return []})),p=Object.fromEntries(Object.entries(t.value).filter(([s])=>!(s in e.value)&&!(s in(R.value??{}))).map(([s,T])=>{let P=vue.toRef(t.value,s),k=vue.toRef(()=>({}));return [s,Se({state:P,rulesDef:k,customMessages:r,path:n?`${n}.${s}`:s,storage:o,options:u,externalErrors:vue.ref(),initialState:h?.[s],shortcuts:g,fieldName:s})]})),$=Object.fromEntries(Object.entries(E?.(v)??{}).map(([s,T])=>T.length?[s,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(P=>[P,Ke(vue.toRef(()=>T),P)])),...Object.fromEntries(["$errors","$silentErrors"].map(P=>[P,et(vue.toRef(()=>T),P)]))}]:[]));l.value={...v,...R,...p,...$},y&&w();}let l=o.getFieldsEntry(n);i();function x(){i(!1),Object.entries(l.value).forEach(([y,v])=>{v.$reset();}),w();}function j(){Object.entries(l.value).forEach(([y,v])=>{v.$touch();});}async function G(){try{return (await Promise.allSettled(Object.entries(l.value).map(([v,R])=>R.$validate()))).every(v=>v.status==="fulfilled"?v.value:!1)}catch{return !1}}function w(){a&&(c=vue.watch(a,()=>{b(),i();},{deep:se?1:!0,flush:"post"})),d=vue.effectScope(),f=d.run(()=>{let y=vue.computed(()=>!!Object.entries(l.value).length&&Object.entries(l.value).every(([U,M])=>M?.$dirty)),v=vue.computed(()=>Object.entries(l.value).some(([U,M])=>M?.$dirty)),R=vue.computed(()=>Object.entries(l.value).some(([U,M])=>M?.$invalid)),p=vue.computed(()=>Object.entries(l.value).every(([U,M])=>M?.$valid)),$=vue.computed(()=>y.value&&!T.value&&R.value),s=vue.computed(()=>!(R.value||T.value)),T=vue.computed(()=>Object.entries(l.value).some(([U,M])=>M?.$pending)),P=vue.computed(()=>Object.fromEntries(Object.entries(l.value).map(([U,M])=>[U,M?.$errors]))),k=vue.computed(()=>Object.fromEntries(Object.entries(l.value).map(([U,M])=>[U,M?.$silentErrors]))),Y=vue.computed(()=>m);function oe(){g?.nested&&Object.entries(g.nested).forEach(([U,M])=>{let F=vue.effectScope();ne[U]=F.run(()=>{let ie=vue.ref();return vue.watchEffect(()=>{ie.value=M({$dirty:y.value,$value:t,$error:$.value,$pending:T.value,$invalid:R.value,$valid:p.value,$ready:s.value,$anyDirty:v.value,$name:Y.value,$silentErrors:k.value,$errors:P.value,$fields:l.value});}),ie});});}let ne={};return oe(),{$dirty:y,$anyDirty:v,$invalid:R,$valid:p,$error:$,$pending:T,$errors:P,$silentErrors:k,$ready:s,$name:Y,$shortcuts:ne}});}function b(){l.value&&Object.entries(l.value).forEach(([y,v])=>{v.$unwatch();}),c?.(),d.stop(),d=vue.effectScope();}function O(){Object.entries(l.value).forEach(([y,v])=>{v.$clearExternalErrors();});}function A(){b(),de(t,h??{}),x();}function N(y=!0){let v=Object.entries(l.value).map(([R,p])=>[R,p.$extractDirtyFields(y)]);return y&&(v=v.filter(([R,p])=>z(p)?!ee(p):Array.isArray(p)?p.length:!!p)),Object.fromEntries(v)}async function V(){return j(),await G()?t.value:!1}let{$shortcuts:q,...D}=f;return vue.reactive({...D,...q,$fields:l,$value:t,$resetAll:A,$reset:x,$touch:j,$validate:G,$unwatch:b,$watch:w,$clearExternalErrors:O,$extractDirtyFields:N,$parse:V})}function Se({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:u,index:S,initialState:E,shortcuts:h,onUnwatch:g,fieldName:m}){return it(t,e)?Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:S,externalErrors:u,initialState:E,fieldName:m,shortcuts:h}):ot(e,t)&&nt(e)?ke({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:S,initialState:E,shortcuts:h,fieldName:m,externalErrors:u}):st(t)?be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:S,externalErrors:u,onUnwatch:g,shortcuts:h,initialState:E,fieldName:m}):null}function Ue({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o}){let u=Me(),S=vue.computed(()=>vue.unref(t.externalErrors));return vue.reactive(ke({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:u,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};function a(o,u,S){let E=vue.isRef(u)?u:vue.computed(typeof u=="function"?u:()=>u),h={...n,...S},g=vue.isRef(o)?o:vue.ref(o),m=re(vue.toRaw(g.value));return {r$:Ue({scopeRules:E,state:g,options:h,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=L;exports.useRegle=yt;
|
package/dist/index.d.cts
CHANGED
|
@@ -7,6 +7,9 @@ type Maybe<T = any> = T | null | undefined;
|
|
|
7
7
|
type MaybeGetter<T, V = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V>, index: number) => T & TAdd);
|
|
8
8
|
type Unwrap<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : UnwrapNestedRefs<T>;
|
|
9
9
|
type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends ((value: Ref<any>, index: number) => infer U extends Record<string, any>) ? U : T;
|
|
10
|
+
type OmitByType<T extends Record<string, any>, U> = {
|
|
11
|
+
[K in keyof T as T[K] extends U ? never : K]: T[K];
|
|
12
|
+
};
|
|
10
13
|
type DeepMaybeRef<T extends Record<string, any>> = {
|
|
11
14
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
12
15
|
};
|
|
@@ -69,6 +72,23 @@ Unfortunately, `Record<string, never>`, `Record<keyof any, never>` and `Record<n
|
|
|
69
72
|
*/
|
|
70
73
|
type EmptyObject = {[emptyObjectSymbol]?: never};
|
|
71
74
|
|
|
75
|
+
/**
|
|
76
|
+
Returns a `boolean` for whether the type is strictly equal to an empty plain object, the `{}` value.
|
|
77
|
+
|
|
78
|
+
@example
|
|
79
|
+
```
|
|
80
|
+
import type {IsEmptyObject} from 'type-fest';
|
|
81
|
+
|
|
82
|
+
type Pass = IsEmptyObject<{}>; //=> true
|
|
83
|
+
type Fail = IsEmptyObject<[]>; //=> false
|
|
84
|
+
type Fail = IsEmptyObject<null>; //=> false
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
@see EmptyObject
|
|
88
|
+
@category Object
|
|
89
|
+
*/
|
|
90
|
+
type IsEmptyObject<T> = T extends EmptyObject ? true : false;
|
|
91
|
+
|
|
72
92
|
/**
|
|
73
93
|
Matches any primitive, `void`, `Date`, or `RegExp` value.
|
|
74
94
|
*/
|
|
@@ -244,15 +264,6 @@ type UnionToIntersection<Union> = (
|
|
|
244
264
|
? Intersection & Union
|
|
245
265
|
: never;
|
|
246
266
|
|
|
247
|
-
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups>;
|
|
248
|
-
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>>;
|
|
249
|
-
|
|
250
|
-
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
251
|
-
<TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
252
|
-
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
253
|
-
}
|
|
254
|
-
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
255
|
-
|
|
256
267
|
interface RegleBehaviourOptions {
|
|
257
268
|
/**
|
|
258
269
|
* Only display error when calling `r$.$parse()`
|
|
@@ -272,7 +283,7 @@ interface RegleBehaviourOptions {
|
|
|
272
283
|
*/
|
|
273
284
|
rewardEarly?: boolean;
|
|
274
285
|
}
|
|
275
|
-
interface LocalRegleBehaviourOptions<TState extends Record<string, any>, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree>, TExternal extends RegleExternalErrorTree<TState
|
|
286
|
+
interface LocalRegleBehaviourOptions<TState extends Record<string, any>, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree>, TExternal extends RegleExternalErrorTree<TState> = {}, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}> {
|
|
276
287
|
externalErrors?: MaybeRef<TExternal>;
|
|
277
288
|
validationGroups?: (fields: RegleStatus<TState, TRules>['$fields']) => TValidationGroups;
|
|
278
289
|
}
|
|
@@ -289,12 +300,20 @@ interface RegleValidationGroupOutput {
|
|
|
289
300
|
type FieldRegleBehaviourOptions = AddDollarToOptions<RegleBehaviourOptions> & {
|
|
290
301
|
$debounce?: number;
|
|
291
302
|
};
|
|
303
|
+
type ShortcutCommonFn<T extends Record<string, any>> = {
|
|
304
|
+
[x: string]: (element: OmitByType<T, Function>) => unknown;
|
|
305
|
+
};
|
|
306
|
+
type RegleShortcutDefinition<TCustomRules extends Record<string, any> = Partial<DefaultValidators>> = {
|
|
307
|
+
fields?: ShortcutCommonFn<RegleFieldStatus<any, Partial<TCustomRules> & Partial<DefaultValidators>>>;
|
|
308
|
+
nested?: ShortcutCommonFn<RegleStatus<Record<string, any>, ReglePartialValidationTree<any, Partial<TCustomRules> & Partial<DefaultValidators>>>>;
|
|
309
|
+
collections?: ShortcutCommonFn<RegleCollectionStatus>;
|
|
310
|
+
};
|
|
292
311
|
type AddDollarToOptions<T extends Record<string, any>> = {
|
|
293
312
|
[K in keyof T as `$${string & K}`]: T[K];
|
|
294
313
|
};
|
|
295
314
|
|
|
296
|
-
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree> = EmptyObject, TExternal extends RegleExternalErrorTree<TState> =
|
|
297
|
-
r$: RegleRoot<TState, TRules, TValidationGroups, TExternal>;
|
|
315
|
+
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree> = EmptyObject, TExternal extends RegleExternalErrorTree<TState> = {}, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}, TShortcuts extends RegleShortcutDefinition = {}> {
|
|
316
|
+
r$: RegleRoot<TState, TRules, TValidationGroups, TExternal, TShortcuts>;
|
|
298
317
|
}
|
|
299
318
|
type isDeepExact<T, U> = {
|
|
300
319
|
[K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
|
|
@@ -311,8 +330,23 @@ type DeepSafeFormState<TState extends Record<string, any>, TRules extends RegleP
|
|
|
311
330
|
[K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? never : K]-?: SafeProperty<TState[K], TRules[K]>;
|
|
312
331
|
};
|
|
313
332
|
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 ReglePartialValidationTree<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;
|
|
333
|
+
|
|
334
|
+
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups, TShortcuts>;
|
|
335
|
+
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>, RegleShortcutDefinition<any>>;
|
|
336
|
+
|
|
337
|
+
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
338
|
+
<TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
339
|
+
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
340
|
+
}
|
|
341
|
+
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
342
|
+
|
|
343
|
+
type InferRegleRoot<T extends () => useRegleFn<any, any>> = T extends () => infer U ? U extends Regle ? U['r$'] : never : never;
|
|
314
344
|
type InferRegleRules<T extends useRegleFn<any>> = T extends useRegleFn<infer U> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
|
|
315
|
-
type
|
|
345
|
+
type InferRegleShortcuts<T extends useRegleFn<any, any>> = T extends useRegleFn<any, infer U> ? U : {};
|
|
346
|
+
type RegleEnforceRequiredRules<TRules extends keyof DefaultValidators> = Omit<DefaultValidators, TRules> & {
|
|
347
|
+
[K in TRules as keyof TRules]-?: NonNullable<DefaultValidators[K]>;
|
|
348
|
+
};
|
|
349
|
+
type RegleEnforceCustomRequiredRules<T extends Partial<AllRulesDeclarations> | useRegleFn<any>, TRules extends T extends useRegleFn<any> ? keyof InferRegleRules<T> : keyof T> = Omit<T extends useRegleFn<any> ? InferRegleRules<T> : T extends Partial<AllRulesDeclarations> ? UnwrapRuleTree<T> : {}, TRules> & {
|
|
316
350
|
[K in TRules]-?: T extends useRegleFn<any> ? K extends keyof InferRegleRules<T> ? NonNullable<InferRegleRules<T>[K]> : never : K extends keyof T ? NonNullable<T[K]> : never;
|
|
317
351
|
};
|
|
318
352
|
|
|
@@ -550,32 +584,32 @@ type InlineRuleDeclaration<TValue extends any = any, TParams extends any[] = any
|
|
|
550
584
|
* */
|
|
551
585
|
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>;
|
|
552
586
|
|
|
553
|
-
type RegleErrorTree<TRules extends ReglePartialValidationTree<any, any>, TExternal extends RegleExternalErrorTree<Record<string, unknown>> =
|
|
554
|
-
readonly [K in keyof TRules]: RegleValidationErrors<TRules[K], K extends keyof TExternal ? TExternal[K] :
|
|
587
|
+
type RegleErrorTree<TRules extends ReglePartialValidationTree<any, any>, TExternal extends RegleExternalErrorTree<Record<string, unknown>> | undefined = {}> = {
|
|
588
|
+
readonly [K in keyof TRules]: RegleValidationErrors<TRules[K], K extends keyof NonNullable<TExternal> ? NonNullable<TExternal>[K] : {}>;
|
|
555
589
|
} & {
|
|
556
|
-
readonly [K in keyof NonPresentKeys<TRules, TExternal
|
|
590
|
+
readonly [K in keyof NonPresentKeys<TRules, NonNullable<TExternal>>]?: RegleExternalValidationErrorsReport<NonNullable<TExternal>[K]>;
|
|
557
591
|
};
|
|
558
|
-
type RegleValidationErrors<TRule extends RegleFormPropertyType<any, any> | undefined =
|
|
559
|
-
type RegleCollectionErrors<TRule extends RegleFormPropertyType<any, any> | undefined =
|
|
592
|
+
type RegleValidationErrors<TRule extends RegleFormPropertyType<any, any> | undefined = {}, TExternalError extends RegleExternalValidationErrors<any> | undefined = {}> = TRule extends RegleCollectionRuleDefinition ? RegleCollectionErrors<ExtractFromGetter<TRule['$each']>, TExternalError extends RegleExternalCollectionErrors ? ArrayElement<TExternalError['$each']> : {}> : TRule extends RegleRuleDecl<any, any> ? string[] : TRule extends ReglePartialValidationTree<any, any> ? RegleErrorTree<TRule, TExternalError extends RegleExternalErrorTree ? TExternalError : {}> : string[];
|
|
593
|
+
type RegleCollectionErrors<TRule extends RegleFormPropertyType<any, any> | undefined = {}, TExternalError extends RegleExternalValidationErrors<any> | undefined = {}> = {
|
|
560
594
|
readonly $errors: string[];
|
|
561
595
|
readonly $each: RegleValidationErrors<TRule, TExternalError>[];
|
|
562
596
|
};
|
|
563
|
-
type RegleExternalErrorTree<TState extends Record<string, any> = Record<string, any>> = {
|
|
597
|
+
type RegleExternalErrorTree<TState extends Record<string, any> | undefined = Record<string, any>> = {
|
|
564
598
|
[K in keyof TState]?: RegleExternalValidationErrors<TState[K]>;
|
|
565
599
|
};
|
|
566
600
|
type RegleExternalValidationErrors<TValue extends any> = [NonNullable<TValue>] extends [
|
|
567
601
|
never
|
|
568
|
-
] ? 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[];
|
|
569
|
-
type RegleExternalCollectionErrors<TValue extends any = any
|
|
602
|
+
] ? string[] : NonNullable<TValue> extends Array<infer U extends Record<string, any> | undefined> ? RegleExternalCollectionErrors<U> : NonNullable<TValue> extends Date ? string[] : NonNullable<TValue> extends File ? string[] : TValue extends Record<string, any> ? RegleExternalErrorTree<TValue> : string[];
|
|
603
|
+
type RegleExternalCollectionErrors<TValue extends Record<string, any> | undefined = Record<string, any>> = {
|
|
570
604
|
$errors?: string[];
|
|
571
|
-
$each?:
|
|
605
|
+
$each?: RegleExternalErrorTree<TValue>[];
|
|
572
606
|
};
|
|
573
|
-
type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalValidationErrors<any> | undefined =
|
|
607
|
+
type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalValidationErrors<any> | undefined = {}> = NonNullable<TExternalError> extends RegleExternalCollectionErrors ? TExternalError : NonNullable<TExternalError> extends string[] ? string[] : NonNullable<TExternalError> extends RegleExternalErrorTree<any> ? RegleExternalErrorTree<TExternalError> : string[];
|
|
574
608
|
|
|
575
609
|
/**
|
|
576
610
|
* @public
|
|
577
611
|
*/
|
|
578
|
-
type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TExternal extends RegleExternalErrorTree<
|
|
612
|
+
type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TExternal extends RegleExternalErrorTree<any> = EmptyObject, TShortcuts extends RegleShortcutDefinition = {}> = RegleStatus<TState, TRules, TExternal, TShortcuts> & ([TValidationGroups] extends [never] ? {} : {
|
|
579
613
|
$groups: {
|
|
580
614
|
readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
|
|
581
615
|
};
|
|
@@ -583,32 +617,38 @@ type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules
|
|
|
583
617
|
/**
|
|
584
618
|
* @public
|
|
585
619
|
*/
|
|
586
|
-
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TExternal extends RegleExternalErrorTree<
|
|
620
|
+
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TExternal extends RegleExternalErrorTree<any> | undefined = {}, TShortcuts extends RegleShortcutDefinition = {}> = RegleCommonStatus<TState> & {
|
|
587
621
|
readonly $fields: {
|
|
588
|
-
readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey>;
|
|
589
|
-
}
|
|
622
|
+
readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey, TKey extends keyof NonNullable<TExternal> ? NonNullable<TExternal>[TKey] extends RegleExternalErrorTree<any> ? NonNullable<TExternal>[TKey] : {} : {}, TShortcuts>;
|
|
623
|
+
} & (IsEmptyObject<TExternal> extends true ? {} : {
|
|
624
|
+
readonly [TKey in keyof NonPresentKeys<TRules, NonNullable<TExternal>>]?: InferRegleStatusType<ReglePartialValidationTree<TKey extends keyof TState ? TState[TKey] : {}>, TState, TKey, TKey extends keyof NonNullable<TExternal> ? NonNullable<TExternal>[TKey] extends RegleExternalErrorTree<any> ? NonNullable<TExternal>[TKey] : {} : {}, TShortcuts>;
|
|
625
|
+
});
|
|
590
626
|
readonly $errors: RegleErrorTree<TRules, TExternal>;
|
|
591
627
|
readonly $silentErrors: RegleErrorTree<TRules, TExternal>;
|
|
592
628
|
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
593
629
|
$parse: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
|
|
594
|
-
}
|
|
630
|
+
} & ([TShortcuts['nested']] extends [never] ? {} : {
|
|
631
|
+
[K in keyof TShortcuts['nested']]: ReturnType<NonNullable<TShortcuts['nested']>[K]>;
|
|
632
|
+
});
|
|
595
633
|
/**
|
|
596
634
|
* @public
|
|
597
635
|
*/
|
|
598
|
-
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialValidationTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string
|
|
636
|
+
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialValidationTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string, TExternal extends RegleExternalErrorTree<any> | undefined = {}, TShortcuts extends RegleShortcutDefinition = {}> = NonNullable<TState[TKey]> extends Array<Record<string, any> | any> ? TRule extends RegleCollectionRuleDefinition<any, any> ? ExtractFromGetter<TRule['$each']> extends RegleRuleDecl | ReglePartialValidationTree<any> ? RegleCollectionStatus<TState[TKey], ExtractFromGetter<TRule['$each']>, TRule, TExternal, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : RegleCollectionStatus<TState[TKey], ReglePartialValidationTree<TState[TKey]>, TRule, TExternal, TShortcuts> : TRule extends ReglePartialValidationTree<any> ? NonNullable<TState[TKey]> extends Array<any> ? RegleCommonStatus<TState[TKey]> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? RegleStatus<TState[TKey], TRule, TExternal, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? RegleStatus<TState[TKey], ReglePartialValidationTree<TState[TKey]>, TExternal, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts>;
|
|
599
637
|
/**
|
|
600
638
|
* @public
|
|
601
639
|
*/
|
|
602
|
-
|
|
640
|
+
type RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = never> = Omit<RegleCommonStatus<TState>, '$value'> & {
|
|
603
641
|
$value: Maybe<UnwrapNestedRefs<TState>>;
|
|
604
642
|
readonly $errors: string[];
|
|
605
643
|
readonly $silentErrors: string[];
|
|
606
|
-
readonly $externalErrors
|
|
644
|
+
readonly $externalErrors: string[];
|
|
607
645
|
$extractDirtyFields: (filterNullishValues?: boolean) => Maybe<TState>;
|
|
608
646
|
readonly $rules: {
|
|
609
647
|
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>;
|
|
610
648
|
};
|
|
611
|
-
}
|
|
649
|
+
} & ([TShortcuts['fields']] extends [never] ? {} : {
|
|
650
|
+
[K in keyof TShortcuts['fields']]: ReturnType<NonNullable<TShortcuts['fields']>[K]>;
|
|
651
|
+
});
|
|
612
652
|
/**
|
|
613
653
|
* @public
|
|
614
654
|
*/
|
|
@@ -620,6 +660,7 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
620
660
|
readonly $pending: boolean;
|
|
621
661
|
readonly $error: boolean;
|
|
622
662
|
readonly $ready: boolean;
|
|
663
|
+
readonly $name: string;
|
|
623
664
|
$id?: string;
|
|
624
665
|
$value: UnwrapNestedRefs<TValue>;
|
|
625
666
|
$touch(): void;
|
|
@@ -652,14 +693,17 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
652
693
|
/**
|
|
653
694
|
* @public
|
|
654
695
|
*/
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
readonly $
|
|
658
|
-
readonly $
|
|
659
|
-
readonly $
|
|
696
|
+
type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePartialValidationTree<Record<string, any>> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never, TExternal extends RegleExternalErrorTree<any> | undefined = {}, TShortcuts extends RegleShortcutDefinition = {}> = Omit<RegleFieldStatus<TState, TRules, TShortcuts>, '$errors' | '$silentErrors' | '$extractDirtyFields' | '$externalErrors' | '$rules' | '$value'> & {
|
|
697
|
+
$value: Maybe<TState>;
|
|
698
|
+
readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number, NonNullable<TExternal> extends RegleExternalCollectionErrors ? NonNullable<NonNullable<TExternal>['$each']> extends Array<any> ? ArrayElement<NonNullable<NonNullable<TExternal>['$each']>> : {} : {}, TShortcuts>>;
|
|
699
|
+
readonly $field: RegleFieldStatus<TState, TFieldRule, TShortcuts>;
|
|
700
|
+
readonly $errors: RegleErrorTree<TRules, TExternal>;
|
|
701
|
+
readonly $silentErrors: RegleErrorTree<TRules, TExternal>;
|
|
660
702
|
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
661
703
|
$parse: () => Promise<false | SafeProperty<TState, TRules>>;
|
|
662
|
-
}
|
|
704
|
+
} & ([TShortcuts['collections']] extends [never] ? {} : {
|
|
705
|
+
[K in keyof TShortcuts['collections']]: ReturnType<NonNullable<TShortcuts['collections']>[K]>;
|
|
706
|
+
});
|
|
663
707
|
|
|
664
708
|
/**
|
|
665
709
|
* @description
|
|
@@ -700,12 +744,13 @@ declare function createRule<TValue extends any, TParams extends any[], TReturn e
|
|
|
700
744
|
*/
|
|
701
745
|
declare function unwrapRuleParameters<TParams extends any[]>(params: ParamDecl[]): TParams;
|
|
702
746
|
|
|
703
|
-
declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>>({ rules, modifiers, }: {
|
|
747
|
+
declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<TCustomRules>>({ rules, modifiers, shortcuts, }: {
|
|
704
748
|
rules?: () => TCustomRules;
|
|
705
749
|
modifiers?: RegleBehaviourOptions;
|
|
750
|
+
shortcuts?: TShortcuts;
|
|
706
751
|
}): {
|
|
707
|
-
useRegle: useRegleFn<TCustomRules>;
|
|
752
|
+
useRegle: useRegleFn<TCustomRules, TShortcuts>;
|
|
708
753
|
inferRules: inferRulesFn<TCustomRules>;
|
|
709
754
|
};
|
|
710
755
|
|
|
711
|
-
export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRule, type InferRegleRules, 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 RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleExternalValidationErrorsReport, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, type
|
|
756
|
+
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 RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleExternalValidationErrorsReport, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, 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 RegleValidationTree, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle };
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,9 @@ type Maybe<T = any> = T | null | undefined;
|
|
|
7
7
|
type MaybeGetter<T, V = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V>, index: number) => T & TAdd);
|
|
8
8
|
type Unwrap<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : UnwrapNestedRefs<T>;
|
|
9
9
|
type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends ((value: Ref<any>, index: number) => infer U extends Record<string, any>) ? U : T;
|
|
10
|
+
type OmitByType<T extends Record<string, any>, U> = {
|
|
11
|
+
[K in keyof T as T[K] extends U ? never : K]: T[K];
|
|
12
|
+
};
|
|
10
13
|
type DeepMaybeRef<T extends Record<string, any>> = {
|
|
11
14
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
12
15
|
};
|
|
@@ -69,6 +72,23 @@ Unfortunately, `Record<string, never>`, `Record<keyof any, never>` and `Record<n
|
|
|
69
72
|
*/
|
|
70
73
|
type EmptyObject = {[emptyObjectSymbol]?: never};
|
|
71
74
|
|
|
75
|
+
/**
|
|
76
|
+
Returns a `boolean` for whether the type is strictly equal to an empty plain object, the `{}` value.
|
|
77
|
+
|
|
78
|
+
@example
|
|
79
|
+
```
|
|
80
|
+
import type {IsEmptyObject} from 'type-fest';
|
|
81
|
+
|
|
82
|
+
type Pass = IsEmptyObject<{}>; //=> true
|
|
83
|
+
type Fail = IsEmptyObject<[]>; //=> false
|
|
84
|
+
type Fail = IsEmptyObject<null>; //=> false
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
@see EmptyObject
|
|
88
|
+
@category Object
|
|
89
|
+
*/
|
|
90
|
+
type IsEmptyObject<T> = T extends EmptyObject ? true : false;
|
|
91
|
+
|
|
72
92
|
/**
|
|
73
93
|
Matches any primitive, `void`, `Date`, or `RegExp` value.
|
|
74
94
|
*/
|
|
@@ -244,15 +264,6 @@ type UnionToIntersection<Union> = (
|
|
|
244
264
|
? Intersection & Union
|
|
245
265
|
: never;
|
|
246
266
|
|
|
247
|
-
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups>;
|
|
248
|
-
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>>;
|
|
249
|
-
|
|
250
|
-
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
251
|
-
<TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
252
|
-
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
253
|
-
}
|
|
254
|
-
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
255
|
-
|
|
256
267
|
interface RegleBehaviourOptions {
|
|
257
268
|
/**
|
|
258
269
|
* Only display error when calling `r$.$parse()`
|
|
@@ -272,7 +283,7 @@ interface RegleBehaviourOptions {
|
|
|
272
283
|
*/
|
|
273
284
|
rewardEarly?: boolean;
|
|
274
285
|
}
|
|
275
|
-
interface LocalRegleBehaviourOptions<TState extends Record<string, any>, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree>, TExternal extends RegleExternalErrorTree<TState
|
|
286
|
+
interface LocalRegleBehaviourOptions<TState extends Record<string, any>, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree>, TExternal extends RegleExternalErrorTree<TState> = {}, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}> {
|
|
276
287
|
externalErrors?: MaybeRef<TExternal>;
|
|
277
288
|
validationGroups?: (fields: RegleStatus<TState, TRules>['$fields']) => TValidationGroups;
|
|
278
289
|
}
|
|
@@ -289,12 +300,20 @@ interface RegleValidationGroupOutput {
|
|
|
289
300
|
type FieldRegleBehaviourOptions = AddDollarToOptions<RegleBehaviourOptions> & {
|
|
290
301
|
$debounce?: number;
|
|
291
302
|
};
|
|
303
|
+
type ShortcutCommonFn<T extends Record<string, any>> = {
|
|
304
|
+
[x: string]: (element: OmitByType<T, Function>) => unknown;
|
|
305
|
+
};
|
|
306
|
+
type RegleShortcutDefinition<TCustomRules extends Record<string, any> = Partial<DefaultValidators>> = {
|
|
307
|
+
fields?: ShortcutCommonFn<RegleFieldStatus<any, Partial<TCustomRules> & Partial<DefaultValidators>>>;
|
|
308
|
+
nested?: ShortcutCommonFn<RegleStatus<Record<string, any>, ReglePartialValidationTree<any, Partial<TCustomRules> & Partial<DefaultValidators>>>>;
|
|
309
|
+
collections?: ShortcutCommonFn<RegleCollectionStatus>;
|
|
310
|
+
};
|
|
292
311
|
type AddDollarToOptions<T extends Record<string, any>> = {
|
|
293
312
|
[K in keyof T as `$${string & K}`]: T[K];
|
|
294
313
|
};
|
|
295
314
|
|
|
296
|
-
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree> = EmptyObject, TExternal extends RegleExternalErrorTree<TState> =
|
|
297
|
-
r$: RegleRoot<TState, TRules, TValidationGroups, TExternal>;
|
|
315
|
+
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree> = EmptyObject, TExternal extends RegleExternalErrorTree<TState> = {}, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}, TShortcuts extends RegleShortcutDefinition = {}> {
|
|
316
|
+
r$: RegleRoot<TState, TRules, TValidationGroups, TExternal, TShortcuts>;
|
|
298
317
|
}
|
|
299
318
|
type isDeepExact<T, U> = {
|
|
300
319
|
[K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
|
|
@@ -311,8 +330,23 @@ type DeepSafeFormState<TState extends Record<string, any>, TRules extends RegleP
|
|
|
311
330
|
[K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? never : K]-?: SafeProperty<TState[K], TRules[K]>;
|
|
312
331
|
};
|
|
313
332
|
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 ReglePartialValidationTree<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;
|
|
333
|
+
|
|
334
|
+
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups, TShortcuts>;
|
|
335
|
+
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>, RegleShortcutDefinition<any>>;
|
|
336
|
+
|
|
337
|
+
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
338
|
+
<TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
339
|
+
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
340
|
+
}
|
|
341
|
+
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
342
|
+
|
|
343
|
+
type InferRegleRoot<T extends () => useRegleFn<any, any>> = T extends () => infer U ? U extends Regle ? U['r$'] : never : never;
|
|
314
344
|
type InferRegleRules<T extends useRegleFn<any>> = T extends useRegleFn<infer U> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
|
|
315
|
-
type
|
|
345
|
+
type InferRegleShortcuts<T extends useRegleFn<any, any>> = T extends useRegleFn<any, infer U> ? U : {};
|
|
346
|
+
type RegleEnforceRequiredRules<TRules extends keyof DefaultValidators> = Omit<DefaultValidators, TRules> & {
|
|
347
|
+
[K in TRules as keyof TRules]-?: NonNullable<DefaultValidators[K]>;
|
|
348
|
+
};
|
|
349
|
+
type RegleEnforceCustomRequiredRules<T extends Partial<AllRulesDeclarations> | useRegleFn<any>, TRules extends T extends useRegleFn<any> ? keyof InferRegleRules<T> : keyof T> = Omit<T extends useRegleFn<any> ? InferRegleRules<T> : T extends Partial<AllRulesDeclarations> ? UnwrapRuleTree<T> : {}, TRules> & {
|
|
316
350
|
[K in TRules]-?: T extends useRegleFn<any> ? K extends keyof InferRegleRules<T> ? NonNullable<InferRegleRules<T>[K]> : never : K extends keyof T ? NonNullable<T[K]> : never;
|
|
317
351
|
};
|
|
318
352
|
|
|
@@ -550,32 +584,32 @@ type InlineRuleDeclaration<TValue extends any = any, TParams extends any[] = any
|
|
|
550
584
|
* */
|
|
551
585
|
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>;
|
|
552
586
|
|
|
553
|
-
type RegleErrorTree<TRules extends ReglePartialValidationTree<any, any>, TExternal extends RegleExternalErrorTree<Record<string, unknown>> =
|
|
554
|
-
readonly [K in keyof TRules]: RegleValidationErrors<TRules[K], K extends keyof TExternal ? TExternal[K] :
|
|
587
|
+
type RegleErrorTree<TRules extends ReglePartialValidationTree<any, any>, TExternal extends RegleExternalErrorTree<Record<string, unknown>> | undefined = {}> = {
|
|
588
|
+
readonly [K in keyof TRules]: RegleValidationErrors<TRules[K], K extends keyof NonNullable<TExternal> ? NonNullable<TExternal>[K] : {}>;
|
|
555
589
|
} & {
|
|
556
|
-
readonly [K in keyof NonPresentKeys<TRules, TExternal
|
|
590
|
+
readonly [K in keyof NonPresentKeys<TRules, NonNullable<TExternal>>]?: RegleExternalValidationErrorsReport<NonNullable<TExternal>[K]>;
|
|
557
591
|
};
|
|
558
|
-
type RegleValidationErrors<TRule extends RegleFormPropertyType<any, any> | undefined =
|
|
559
|
-
type RegleCollectionErrors<TRule extends RegleFormPropertyType<any, any> | undefined =
|
|
592
|
+
type RegleValidationErrors<TRule extends RegleFormPropertyType<any, any> | undefined = {}, TExternalError extends RegleExternalValidationErrors<any> | undefined = {}> = TRule extends RegleCollectionRuleDefinition ? RegleCollectionErrors<ExtractFromGetter<TRule['$each']>, TExternalError extends RegleExternalCollectionErrors ? ArrayElement<TExternalError['$each']> : {}> : TRule extends RegleRuleDecl<any, any> ? string[] : TRule extends ReglePartialValidationTree<any, any> ? RegleErrorTree<TRule, TExternalError extends RegleExternalErrorTree ? TExternalError : {}> : string[];
|
|
593
|
+
type RegleCollectionErrors<TRule extends RegleFormPropertyType<any, any> | undefined = {}, TExternalError extends RegleExternalValidationErrors<any> | undefined = {}> = {
|
|
560
594
|
readonly $errors: string[];
|
|
561
595
|
readonly $each: RegleValidationErrors<TRule, TExternalError>[];
|
|
562
596
|
};
|
|
563
|
-
type RegleExternalErrorTree<TState extends Record<string, any> = Record<string, any>> = {
|
|
597
|
+
type RegleExternalErrorTree<TState extends Record<string, any> | undefined = Record<string, any>> = {
|
|
564
598
|
[K in keyof TState]?: RegleExternalValidationErrors<TState[K]>;
|
|
565
599
|
};
|
|
566
600
|
type RegleExternalValidationErrors<TValue extends any> = [NonNullable<TValue>] extends [
|
|
567
601
|
never
|
|
568
|
-
] ? 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[];
|
|
569
|
-
type RegleExternalCollectionErrors<TValue extends any = any
|
|
602
|
+
] ? string[] : NonNullable<TValue> extends Array<infer U extends Record<string, any> | undefined> ? RegleExternalCollectionErrors<U> : NonNullable<TValue> extends Date ? string[] : NonNullable<TValue> extends File ? string[] : TValue extends Record<string, any> ? RegleExternalErrorTree<TValue> : string[];
|
|
603
|
+
type RegleExternalCollectionErrors<TValue extends Record<string, any> | undefined = Record<string, any>> = {
|
|
570
604
|
$errors?: string[];
|
|
571
|
-
$each?:
|
|
605
|
+
$each?: RegleExternalErrorTree<TValue>[];
|
|
572
606
|
};
|
|
573
|
-
type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalValidationErrors<any> | undefined =
|
|
607
|
+
type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalValidationErrors<any> | undefined = {}> = NonNullable<TExternalError> extends RegleExternalCollectionErrors ? TExternalError : NonNullable<TExternalError> extends string[] ? string[] : NonNullable<TExternalError> extends RegleExternalErrorTree<any> ? RegleExternalErrorTree<TExternalError> : string[];
|
|
574
608
|
|
|
575
609
|
/**
|
|
576
610
|
* @public
|
|
577
611
|
*/
|
|
578
|
-
type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TExternal extends RegleExternalErrorTree<
|
|
612
|
+
type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TExternal extends RegleExternalErrorTree<any> = EmptyObject, TShortcuts extends RegleShortcutDefinition = {}> = RegleStatus<TState, TRules, TExternal, TShortcuts> & ([TValidationGroups] extends [never] ? {} : {
|
|
579
613
|
$groups: {
|
|
580
614
|
readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
|
|
581
615
|
};
|
|
@@ -583,32 +617,38 @@ type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules
|
|
|
583
617
|
/**
|
|
584
618
|
* @public
|
|
585
619
|
*/
|
|
586
|
-
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TExternal extends RegleExternalErrorTree<
|
|
620
|
+
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TExternal extends RegleExternalErrorTree<any> | undefined = {}, TShortcuts extends RegleShortcutDefinition = {}> = RegleCommonStatus<TState> & {
|
|
587
621
|
readonly $fields: {
|
|
588
|
-
readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey>;
|
|
589
|
-
}
|
|
622
|
+
readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey, TKey extends keyof NonNullable<TExternal> ? NonNullable<TExternal>[TKey] extends RegleExternalErrorTree<any> ? NonNullable<TExternal>[TKey] : {} : {}, TShortcuts>;
|
|
623
|
+
} & (IsEmptyObject<TExternal> extends true ? {} : {
|
|
624
|
+
readonly [TKey in keyof NonPresentKeys<TRules, NonNullable<TExternal>>]?: InferRegleStatusType<ReglePartialValidationTree<TKey extends keyof TState ? TState[TKey] : {}>, TState, TKey, TKey extends keyof NonNullable<TExternal> ? NonNullable<TExternal>[TKey] extends RegleExternalErrorTree<any> ? NonNullable<TExternal>[TKey] : {} : {}, TShortcuts>;
|
|
625
|
+
});
|
|
590
626
|
readonly $errors: RegleErrorTree<TRules, TExternal>;
|
|
591
627
|
readonly $silentErrors: RegleErrorTree<TRules, TExternal>;
|
|
592
628
|
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
593
629
|
$parse: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
|
|
594
|
-
}
|
|
630
|
+
} & ([TShortcuts['nested']] extends [never] ? {} : {
|
|
631
|
+
[K in keyof TShortcuts['nested']]: ReturnType<NonNullable<TShortcuts['nested']>[K]>;
|
|
632
|
+
});
|
|
595
633
|
/**
|
|
596
634
|
* @public
|
|
597
635
|
*/
|
|
598
|
-
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialValidationTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string
|
|
636
|
+
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialValidationTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string, TExternal extends RegleExternalErrorTree<any> | undefined = {}, TShortcuts extends RegleShortcutDefinition = {}> = NonNullable<TState[TKey]> extends Array<Record<string, any> | any> ? TRule extends RegleCollectionRuleDefinition<any, any> ? ExtractFromGetter<TRule['$each']> extends RegleRuleDecl | ReglePartialValidationTree<any> ? RegleCollectionStatus<TState[TKey], ExtractFromGetter<TRule['$each']>, TRule, TExternal, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : RegleCollectionStatus<TState[TKey], ReglePartialValidationTree<TState[TKey]>, TRule, TExternal, TShortcuts> : TRule extends ReglePartialValidationTree<any> ? NonNullable<TState[TKey]> extends Array<any> ? RegleCommonStatus<TState[TKey]> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? RegleStatus<TState[TKey], TRule, TExternal, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? RegleStatus<TState[TKey], ReglePartialValidationTree<TState[TKey]>, TExternal, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts>;
|
|
599
637
|
/**
|
|
600
638
|
* @public
|
|
601
639
|
*/
|
|
602
|
-
|
|
640
|
+
type RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = never> = Omit<RegleCommonStatus<TState>, '$value'> & {
|
|
603
641
|
$value: Maybe<UnwrapNestedRefs<TState>>;
|
|
604
642
|
readonly $errors: string[];
|
|
605
643
|
readonly $silentErrors: string[];
|
|
606
|
-
readonly $externalErrors
|
|
644
|
+
readonly $externalErrors: string[];
|
|
607
645
|
$extractDirtyFields: (filterNullishValues?: boolean) => Maybe<TState>;
|
|
608
646
|
readonly $rules: {
|
|
609
647
|
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>;
|
|
610
648
|
};
|
|
611
|
-
}
|
|
649
|
+
} & ([TShortcuts['fields']] extends [never] ? {} : {
|
|
650
|
+
[K in keyof TShortcuts['fields']]: ReturnType<NonNullable<TShortcuts['fields']>[K]>;
|
|
651
|
+
});
|
|
612
652
|
/**
|
|
613
653
|
* @public
|
|
614
654
|
*/
|
|
@@ -620,6 +660,7 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
620
660
|
readonly $pending: boolean;
|
|
621
661
|
readonly $error: boolean;
|
|
622
662
|
readonly $ready: boolean;
|
|
663
|
+
readonly $name: string;
|
|
623
664
|
$id?: string;
|
|
624
665
|
$value: UnwrapNestedRefs<TValue>;
|
|
625
666
|
$touch(): void;
|
|
@@ -652,14 +693,17 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
652
693
|
/**
|
|
653
694
|
* @public
|
|
654
695
|
*/
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
readonly $
|
|
658
|
-
readonly $
|
|
659
|
-
readonly $
|
|
696
|
+
type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePartialValidationTree<Record<string, any>> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never, TExternal extends RegleExternalErrorTree<any> | undefined = {}, TShortcuts extends RegleShortcutDefinition = {}> = Omit<RegleFieldStatus<TState, TRules, TShortcuts>, '$errors' | '$silentErrors' | '$extractDirtyFields' | '$externalErrors' | '$rules' | '$value'> & {
|
|
697
|
+
$value: Maybe<TState>;
|
|
698
|
+
readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number, NonNullable<TExternal> extends RegleExternalCollectionErrors ? NonNullable<NonNullable<TExternal>['$each']> extends Array<any> ? ArrayElement<NonNullable<NonNullable<TExternal>['$each']>> : {} : {}, TShortcuts>>;
|
|
699
|
+
readonly $field: RegleFieldStatus<TState, TFieldRule, TShortcuts>;
|
|
700
|
+
readonly $errors: RegleErrorTree<TRules, TExternal>;
|
|
701
|
+
readonly $silentErrors: RegleErrorTree<TRules, TExternal>;
|
|
660
702
|
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
661
703
|
$parse: () => Promise<false | SafeProperty<TState, TRules>>;
|
|
662
|
-
}
|
|
704
|
+
} & ([TShortcuts['collections']] extends [never] ? {} : {
|
|
705
|
+
[K in keyof TShortcuts['collections']]: ReturnType<NonNullable<TShortcuts['collections']>[K]>;
|
|
706
|
+
});
|
|
663
707
|
|
|
664
708
|
/**
|
|
665
709
|
* @description
|
|
@@ -700,12 +744,13 @@ declare function createRule<TValue extends any, TParams extends any[], TReturn e
|
|
|
700
744
|
*/
|
|
701
745
|
declare function unwrapRuleParameters<TParams extends any[]>(params: ParamDecl[]): TParams;
|
|
702
746
|
|
|
703
|
-
declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>>({ rules, modifiers, }: {
|
|
747
|
+
declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<TCustomRules>>({ rules, modifiers, shortcuts, }: {
|
|
704
748
|
rules?: () => TCustomRules;
|
|
705
749
|
modifiers?: RegleBehaviourOptions;
|
|
750
|
+
shortcuts?: TShortcuts;
|
|
706
751
|
}): {
|
|
707
|
-
useRegle: useRegleFn<TCustomRules>;
|
|
752
|
+
useRegle: useRegleFn<TCustomRules, TShortcuts>;
|
|
708
753
|
inferRules: inferRulesFn<TCustomRules>;
|
|
709
754
|
};
|
|
710
755
|
|
|
711
|
-
export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRule, type InferRegleRules, 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 RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleExternalValidationErrorsReport, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, type
|
|
756
|
+
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 RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleExternalValidationErrorsReport, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, 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 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}from'vue';var de=(r=>(r.Inline="__inline",r.Async="__async",r))(de||{});function Fe(e,t){return computed(()=>e.value.some(r=>r[t]))}function Me(e,t){return computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function _(e){return e.map(t=>t instanceof Function?t():unref(t))}function Ve(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function je(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(l=>l.trim()).filter(l=>l.includes("=")).length+e.length}function ye(e,...t){let{message:r,validator:n,active:a,type:l,...p}=e,b=l==="__async"||n.constructor.name==="AsyncFunction";return {...{validator(v,...c){return e.validator(v,..._(c.length?c:t))},message(v,c){return typeof e.message=="function"?e.message(v,{...c,$params:_(c.$params?.length?c.$params:t)}):e.message},active(v,c){return typeof e.active=="function"?e.active(v,{...c,$params:_(c.$params?.length?c.$params:t)}):e.active??!0},exec(v){let c=e.validator(v,..._(t)),o;return c instanceof Promise?c.then(I=>(o=I,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)):(o=c,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)}},...p,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:b,_params:Ve(t)}}function me(e){if(typeof e.validator=="function"){let r=ye(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(je(e.validator)>1){let a=function(...l){return ye(e,...l)};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 k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function _e(e){return k(e.value)}function L(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>L(n)))),r=="Map"&&(t=new Map([...e].map(n=>[L(n[0]),L(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,st(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=L(e[n]);}return t}function st(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 ge(e,t,r){return e instanceof Function?e(t,r??0):e}function ke(e,t){isRef(e)?e.value=t:e=t;}function Ge(e,t){isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=isRef(e)?e.value[n]:e[n];a={},re(a,t[n]);});}function re(e,t){Object.entries({...unref(e),...t}).forEach(([r,n])=>{let a=isRef(e)?e.value:e,l=isRef(t[r])?t[r]._value:t[r],p=isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(l)&&l.forEach((b,D)=>{a[r][D]={},re(a[r][D],l[D]);})):k(l)?re(p,l):isRef(a[r])?a[r].value=l:a[r]=l;});}function z(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 ne(e,t,r){let n,a=(...l)=>new Promise(p=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(p);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...l)=>new Promise(p=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(p);},0);}),a}function ut(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let l=Number(r[a]),p=Number(n[a]);if(l>p)return 1;if(p>l)return -1;if(!isNaN(l)&&isNaN(p))return 1;if(isNaN(l)&&!isNaN(p))return -1}return 0}var Z=ut(version,"3.5.0")!==-1;function ct(){return Math.floor(Math.random()*Date.now()).toString()}function ve(){return typeof window>"u"?ct():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function $e(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),l=shallowRef(new Map);function p(d){let y=t.value.get(d);if(y)return y;{let h=ref({});return t.value.set(d,h),h}}function b(d){let y=r.value.get(d);if(y)return y;{let h=ref([]);return r.value.set(d,h),h}}function D(d,y,h){l.value.set(`${d}-${y}`,h);}function C(d,y){return l.value.get(`${d}-${y}`)}function v(d,y){d&&y!=null&&l.value.delete(`${d}-${y}`);}function c(d,y){n.value.set(d,y);}function o(d){return n.value.get(d)??!1}function I(d,y){e.value.set(d,y);}function P(d,y){let h=e.value.get(d);return h?$(y,h)?{valid:!0}:{valid:!1}:void 0}function $(d,y){let h=Object.keys(y),w=Object.keys(d);return w.length!==h.length||!w.every(F=>h.includes(F))?!1:w.every(F=>{let T=d[F],O=y[F];return !O||!T||typeof T=="function"||typeof O=="function"||typeof T=="number"||typeof T=="boolean"?!1:T._params?T._params?.every((A,E)=>{if(typeof O=="number"||typeof O=="boolean")return !0;{let s=_(O._params),i=_(T._params);return s?.[E]===i?.[E]}}):!0})}function f(d){let y=a.value.get(d);if(y)return y;{let h=ref(!1),w=ref(!0),M=ref({}),F=ref(!1);return a.value.set(d,{$pending:h,$valid:w,$metadata:M,$validating:F}),{$pending:h,$valid:w,$metadata:M,$validating:F}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),l.value.clear();}),{addRuleDeclEntry:I,setDirtyEntry:c,checkRuleDeclEntry:P,getDirtyState:o,trySetRuleStatusRef:f,getFieldsEntry:p,getCollectionsEntry:b,getArrayStatus:C,addArrayStatus:D,deleteArrayStatus:v,arrayStatusStorage:l}}function Be(e,t){return k(e.value)&&k(t.value)&&!Object.entries(t.value).some(r=>ae(r))}function Ne(e){return !!e.value&&"$each"in e.value}function Ue(e){return !!e.value&&k(e.value)}function ae(e){return k(e)&&"_validator"in e}function le(e){return typeof e.value!="function"}function Se(e){return k(e)&&"$fields"in e}function Ee(e){return "$each"in e||"$errors"in e}function be({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 He({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:l,storage:p,$debounce:b}){let D=effectScope(),C,v,c=ref(!1),{$pending:o,$valid:I,$metadata:P,$validating:$}=p.trySetRuleStatusRef(`${l}.${n}`);function f(){C=D.run(()=>{let T=computed(()=>({$invalid:!I.value,$params:i.value,...P.value})),O=computed(()=>le(r)?typeof r.value.active=="function"?r.value.active(a.value,T.value):r.value.active:!0),A=computed(()=>{let u="",m=t?t[n]?.message:void 0;return m&&(typeof m=="function"?u=m(a.value,T.value):u=m),le(r)&&(m&&!r.value._patched||(typeof r.value.message=="function"?u=r.value.message(a.value,T.value):u=r.value.message)),z(u)&&(u="Error",console.warn(`No error message defined for ${l}.${n}`)),u}),E=computed(()=>le(r)&&r.value.type?r.value.type:n),s=computed(()=>le(r)?r.value.validator:r.value),i=computed(()=>typeof r.value=="function"?[]:_(r.value._params??[])),R=computed(()=>`${l}.${E.value}`);return {$active:O,$message:A,$type:E,$validator:s,$params:i,$path:R}}),v=watch(C.$params,w,{deep:!0});}f();function d(){I.value=!0,e.value&&(o.value=!0);}async function y(){let T=C.$validator.value,O=T(a.value,...C.$params.value),A=!1,E=a.value;try{d();let s;if(O instanceof Promise?s=await O:s=O,a.value!==E)return !0;if(typeof s=="boolean")A=s;else {let{$valid:i,...R}=s;A=i,P.value=R;}}catch{A=!1;}finally{o.value=!1;}return A}let h=ne(y,b??200);async function w(){$.value=!0;let T=!1;if(ae(r.value)&&r.value._async)T=await h();else {let O=C.$validator.value,A=O(a.value,...C.$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")T=A;else {let{$valid:E,...s}=A;T=E,P.value=s;}}return I.value=T,$.value=!1,T}function M(){I.value=!0,P.value={},o.value=!1,$.value=!1,f();}function F(){v(),D.stop(),D=effectScope();}return reactive({...C,$pending:o,$valid:I,$metadata:P,_haveAsync:c,$validating:$,$validate:w,$unwatch:F,$watch:f,$reset:M})}function ue({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:p,onUnwatch:b,$isArray:D,initialState:C}){let v=effectScope(),c,o=ref(!1),I=ref(!1),P=ref([]),$,f,d,y,h,w=()=>{};function M(){P.value=p.value??[];}M();function F(){let g=t.value,S=a.checkRuleDeclEntry(n,g);i.value=Object.fromEntries(Object.entries(g).filter(([V])=>V.startsWith("$"))),s.value=Object.fromEntries(Object.entries(t.value).filter(([V])=>!V.startsWith("$")).map(([V,U])=>{if(U){let Re=toRef(()=>U);return [V,He({$dirty:o,customMessages:r,rule:Re,ruleKey:V,state:e,path:n,storage:a,$debounce:i.value.$debounce})]}return []}).filter(V=>!!V.length)),A(),T(),S?.valid!=null&&(o.value=a.getDirtyState(n),o.value&&w()),a.addRuleDeclEntry(n,g);}function T(){w=c.$debounce.value?ne(E,c.$debounce.value??c.haveAnyAsyncRule?100:0):E;}function O(){s.value&&Object.entries(s.value).forEach(([g,S])=>{S.$unwatch();}),y(),o.value&&a.setDirtyEntry(n,o.value),$(),f(),d(),v.stop(),v=effectScope(),b?.(),h?.();}function A(){s.value&&Object.entries(s.value).forEach(([g,S])=>{S.$watch();}),c=v.run(()=>{let g=computed(()=>o.value),S=computed(()=>i.value.$debounce),V=computed(()=>i.value.$lazy!=null?i.value.$lazy:unref(l.lazy)),U=computed(()=>i.value.$rewardEarly!=null?i.value.$rewardEarly:unref(l.rewardEarly)),Re=computed(()=>i.value.$autoDirty!=null?i.value.$autoDirty:unref(l.autoDirty)),Ze=computed(()=>Object.entries(s.value).some(([X,W])=>W.$validating)),we=computed(()=>ie.value&&!pe.value&&o.value),Ke=computed(()=>we.value?be({field:{$dirty:o.value,$externalErrors:P.value,$rules:s.value}}):[]),et=computed(()=>be({field:{$dirty:o.value,$externalErrors:P.value,$rules:s.value},silent:!0})),tt=computed(()=>!(ie.value||pe.value)),pe=computed(()=>I.value||!U.value?Object.entries(s.value).some(([X,W])=>W.$pending):!1),ie=computed(()=>P.value?.length?!0:!U.value||U.value&&I.value?Object.entries(s.value).some(([X,W])=>!W.$valid):!1),Oe=computed(()=>o.value&&!z(e.value)&&!Ze.value?P.value?.length?!1:U.value?Object.entries(s.value).every(([X,W])=>W.$valid):!ie.value:!1),rt=computed(()=>Object.entries(s.value).some(([X,W])=>W._haveAsync));return watch(Oe,X=>{X&&(I.value=!1);}),{$error:we,$pending:pe,$invalid:ie,$valid:Oe,$debounce:S,$lazy:V,$errors:Ke,$ready:tt,$silentErrors:et,$rewardEarly:U,$autoDirty:Re,$anyDirty:g,haveAnyAsyncRule:rt}}),d=watch(p,M),$=watch(e,()=>{c.$autoDirty.value&&(o.value||(o.value=!0)),t.value instanceof Function&&F(),w(),c.$rewardEarly.value;},{deep:D?!0:Z?1:!0}),y=watch(o,()=>{a.setDirtyEntry(n,o.value);}),f=watch(c.$valid,g=>{c.$rewardEarly.value&&g&&(I.value=!1);}),h=watch(c.haveAnyAsyncRule,T);}function E(){Object.entries(s.value).forEach(([g,S])=>{S.$validate();});}let s=ref(),i=ref();F();function R(){o.value=!1,P.value=[],Object.entries(s.value).forEach(([g,S])=>{S.$reset();}),c.$lazy.value||Object.entries(s.value).map(([g,S])=>S.$validate());}function u(){o.value||(o.value=!0,c.$rewardEarly.value,w());}let m=c.$debounce.value?ne(x,c.$debounce.value??0):x;async function x(){try{if(I.value=!0,c.$autoDirty.value&&o.value&&!c.$pending.value)return !c.$error.value;{let g=Object.entries(s.value).map(([V,U])=>U.$validate());return (await Promise.allSettled(g)).every(V=>V.status==="fulfilled"?V.value:!1)}}catch{return !1}}function G(){O(),e.value=ke(e,C),R();}function q(g=!0){return o.value?e.value:null}function B(){P.value=[];}return c.$lazy.value||x(),reactive({$dirty:o,...c,$externalErrors:P,$value:e,$rules:s,$reset:R,$touch:u,$validate:m,$unwatch:O,$watch:A,$resetAll:G,$extractDirtyFields:q,$clearExternalErrors:B})}function Le({$id:e,path:t,index:r,options:n,storage:a,stateValue:l,customMessages:p,rules:b,externalErrors:D,initialState:C}){let v=b.$key?b.$key:ve(),c=`${t}.${String(v)}`;typeof l.value=="object"&&l.value!=null&&(l.value.$id?c=`${t}.${l.value.$id}`:Object.defineProperties(l.value,{$id:{value:v,enumerable:!1,configurable:!1,writable:!1}}));let o=toRef(()=>D.value?.[r]),I=fe({state:l,rulesDef:toRef(()=>b),customMessages:p,path:c,storage:a,options:n,externalErrors:o,initialState:C?.[r]});if(I){let P=l.value?.$id;I.$id=P??String(v),a.addArrayStatus(e,I.$id,I);}return I}function ze({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:p,initialState:b}){let D=effectScope(),C,v=effectScope(),c;if(Array.isArray(e.value)&&!t.value.$each)return null;let o=ref(),I=ref(e.value),P,$=ref({}),f=a.getCollectionsEntry(n);c=v.run(()=>{let i=computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(m=>typeof m!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(m=>ae(m)):!1),R=computed(()=>p.value?Ee(p.value)?p.value.$errors??[]:[]:[]),u=computed(()=>p.value?Ee(p.value)?p.value.$each??[]:[]:[]);return {isPrimitiveArray:i,$externalErrorsField:R,$externalErrorsEach:u}}),d(),h();function d(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(o.value=ve(),Object.defineProperties(e.value,{$id:{value:o.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(o.value=e.value.$id)),!c.isPrimitiveArray.value&&(I.value=$.value.$value,Array.isArray(e.value)&&t.value.$each?f.value=e.value.map((i,R)=>{let u=ge(t.value.$each,toRef(()=>i),R);if(u){let m=Le({$id:o.value,path:n,rules:u,stateValue:toRef(()=>i),index:R,options:l,storage:a,externalErrors:c.$externalErrorsEach,initialState:b[R]});return m||null}}).filter(i=>!!i):f.value=[],$.value=ue({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:c.$externalErrorsField,$isArray:!0,initialState:b}));}function y(){if(Array.isArray(e.value)){let i=L(f.value);f.value=e.value.map((R,u)=>{let m=toRef(()=>R);if(R.$id&&f.value.find(x=>x.$id===R.$id)){let x=a.getArrayStatus(o.value,R.$id);return x?(x.$value=m,x):null}else {let x=ge(t.value.$each,m,u);if(x){let G=Le({$id:o.value,path:n,rules:x,stateValue:m,index:u,options:l,storage:a,externalErrors:c.$externalErrorsEach,initialState:b[u]});return G||null}}}).filter(R=>!!R),i.filter(R=>!e.value.find(u=>R.$id===u.$id)).forEach((R,u)=>{a.deleteArrayStatus(o.value,u.toString());});}else f.value=[];}function h(){P=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?d():y();},{deep:Z?1:!0,flush:"pre"}),C=D.run(()=>{let i=computed(()=>$.value.$dirty&&f.value.every(S=>S.$dirty)),R=computed(()=>$.value.$anyDirty||f.value.some(S=>S.$dirty)),u=computed(()=>$.value.$invalid||f.value.some(S=>S.$invalid)),m=computed(()=>$.value.$valid&&f.value.every(S=>S.$valid)),x=computed(()=>$.value.$error||f.value.some(S=>S.$error)),G=computed(()=>!(u.value||q.value)),q=computed(()=>$.value.$pending||f.value.some(S=>S.$pending)),B=computed(()=>({$errors:$.value.$errors,$each:f.value.map(S=>S.$errors)})),g=computed(()=>({$errors:$.value.$silentErrors,$each:f.value.map(S=>S.$silentErrors)}));return {$dirty:i,$anyDirty:R,$invalid:u,$valid:m,$error:x,$pending:q,$errors:B,$silentErrors:g,$ready:G}}),c.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`),P());}function w(){P&&P(),$.value&&$.value.$unwatch(),f.value&&f.value.forEach(i=>{"$dirty"in i&&i.$unwatch();}),D.stop(),D=effectScope(),v.stop(),v=effectScope(!0);}function M(){$.value.$touch(),f.value.forEach(i=>{i.$touch();});}function F(){$.value.$reset(),f.value.forEach(i=>{i.$reset();});}async function T(){try{return (await Promise.all([$.value.$validate(),...f.value.map(R=>R.$validate())])).every(R=>!!R)}catch{return !1}}function O(){$.value.$clearExternalErrors(),f.value.forEach(i=>{i.$clearExternalErrors();});}function A(i=!0){let R=f.value.map(u=>{if(Se(u))return u.$extractDirtyFields(i)});return i&&(R=R.filter(u=>k(u)?!z(u):!!u)),R}function E(){console.log(b),w(),Ge(e,b),F();}async function s(){return M(),await T()?e.value:!1}return reactive({$field:$,...C,$each:f,$value:e,$validate:T,$unwatch:w,$watch:h,$touch:M,$reset:F,$resetAll:E,$extractDirtyFields:A,$parse:s,$clearExternalErrors:O})}function Te({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:l,options:p,externalErrors:b,validationGroups:D,initialState:C}){let v,c,o=null;function $(E=!0){f.value=null,triggerRef(f);let s=Object.fromEntries(Object.entries(e.value).map(([u,m])=>{if(m){let x=toRef(t.value,u),G=toRef(()=>m),q=toRef(()=>b.value?.[u]);return [u,fe({state:x,rulesDef:G,customMessages:r,path:n?`${n}.${u}`:u,storage:l,options:p,externalErrors:q,initialState:C?.[u]})]}return []}).filter(u=>!!u.length&&u[1]!=null)),i=Object.fromEntries(Object.entries(unref(b)??{}).filter(([u])=>!(u in e.value)).map(([u,m])=>{if(m){let x=toRef(()=>({})),G=toRef(()=>m);return [u,fe({state:ref(void 0),rulesDef:x,customMessages:r,path:n?`${n}.${u}`:u,storage:l,options:p,externalErrors:G,initialState:C?.[u]})]}return []})),R=Object.fromEntries(Object.entries(D?.(s)??{}).map(([u,m])=>m.length?[u,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(x=>[x,Fe(toRef(()=>m),x)])),...Object.fromEntries(["$errors","$silentErrors"].map(x=>[x,Me(toRef(()=>m),x)]))}]:[]));f.value={...s,...i,...R},E&&w();}let f=l.getFieldsEntry(n);$();function d(){$(!1),Object.entries(f.value).forEach(([E,s])=>{s.$reset();}),w();}function y(){Object.entries(f.value).forEach(([E,s])=>{s.$touch();});}async function h(){try{return (await Promise.allSettled(Object.entries(f.value).map(([s,i])=>i.$validate()))).every(s=>s.status==="fulfilled"?s.value:!1)}catch{return !1}}function w(){a&&(o=watch(a,()=>{M(),$();},{deep:Z?1:!0,flush:"post"})),v=effectScope(),c=v.run(()=>{let E=computed(()=>!!Object.entries(f.value).length&&Object.entries(f.value).every(([B,g])=>g.$dirty)),s=computed(()=>Object.entries(f.value).some(([B,g])=>g.$dirty)),i=computed(()=>Object.entries(f.value).some(([B,g])=>g.$invalid)),R=computed(()=>Object.entries(f.value).every(([B,g])=>g.$valid)),u=computed(()=>E.value&&!x.value&&i.value),m=computed(()=>!(i.value||x.value)),x=computed(()=>Object.entries(f.value).some(([B,g])=>g.$pending)),G=computed(()=>Object.fromEntries(Object.entries(f.value).map(([B,g])=>[B,g.$errors]))),q=computed(()=>Object.fromEntries(Object.entries(f.value).map(([B,g])=>[B,g.$silentErrors])));return {$dirty:E,$anyDirty:s,$invalid:i,$valid:R,$error:u,$pending:x,$errors:G,$silentErrors:q,$ready:m}});}function M(){f.value&&Object.entries(f.value).forEach(([E,s])=>{s.$unwatch();}),o?.(),v.stop(),v=effectScope();}function F(){Object.entries(f.value).forEach(([E,s])=>{s.$clearExternalErrors();});}function T(){M(),re(t,C??{}),d();}function O(E=!0){let s=Object.entries(f.value).map(([i,R])=>[i,R.$extractDirtyFields(E)]);return E&&(s=s.filter(([i,R])=>k(R)?!z(R):Array.isArray(R)?R.length:!!R)),Object.fromEntries(s)}async function A(){return y(),await h()?t.value:!1}return reactive({...c,$fields:f,$value:t,$resetAll:T,$reset:d,$touch:y,$validate:h,$unwatch:M,$watch:w,$clearExternalErrors:F,$extractDirtyFields:O,$parse:A})}function fe({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:p,index:b,initialState:D,onUnwatch:C}){return Ne(t)?ze({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:b,externalErrors:p,initialState:D}):Be(e,t)&&_e(e)?Te({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:l,index:b,initialState:D,externalErrors:p}):Ue(t)?ue({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:b,externalErrors:p,onUnwatch:C,initialState:D}):null}function De({initialState:e,options:t,scopeRules:r,state:n,customRules:a}){let l=$e(),p=computed(()=>unref(t.externalErrors));return reactive(Te({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:l,options:t,externalErrors:p,validationGroups:t.validationGroups,initialState:e}))}function Ce(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,l,p){let b=isRef(l)?l:computed(typeof l=="function"?l:()=>l),D={...r,...p},C=isRef(a)?a:ref(a),v=L(toRaw(C.value));return {r$:De({scopeRules:b,state:C,options:D,initialState:v,customRules:e})}}return n}var Qe=Ce();function Ie(){function e(t,r){return r}return e}var Pe=Ie();function Xe({rules:e,modifiers:t}){let r=Ce(e,t),n=Ie();return {useRegle:r,inferRules:n}}export{de as InternalRuleType,me as createRule,Xe as defineRegleConfig,Pe as inferRules,_ as unwrapRuleParameters,Qe 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 L(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,S=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator(g,...m){return e.validator(g,...L(m.length?m:t))},message(g,m){return typeof e.message=="function"?e.message(g,{...m,$params:L(m.$params?.length?m.$params:t)}):e.message},active(g,m){return typeof e.active=="function"?e.active(g,{...m,$params:L(m.$params?.length?m.$params:t)}):e.active??!0},exec(g){let m=e.validator(g,...L(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: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 z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function nt(e){return z(e.value)}function re(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>re(n)))),r=="Map"&&(t=new Map([...e].map(n=>[re(n[0]),re(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]=re(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((S,E)=>{a[r][E]={},de(a[r][E],o[E]);})):z(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 se=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(i){let l=t.value.get(i);if(l)return l;{let x=ref({});return t.value.set(i,x),x}}function S(i){let l=r.value.get(i);if(l)return l;{let x=ref([]);return r.value.set(i,x),x}}function E(i,l,x){o.value.set(`${i}-${l}`,x);}function h(i,l){return o.value.get(`${i}-${l}`)}function g(i,l){i&&l!=null&&o.value.delete(`${i}-${l}`);}function m(i,l){n.value.set(i,l);}function d(i){return n.value.get(i)??!1}function f(i,l){e.value.set(i,l);}function c(i,l){let x=e.value.get(i);return x?I(l,x)?{valid:!0}:{valid:!1}:void 0}function I(i,l){let x=Object.keys(l),j=Object.keys(i);return j.length!==x.length||!j.every(w=>x.includes(w))?!1:j.every(w=>{let b=i[w],O=l[w];return !O||!b||typeof b=="function"||typeof O=="function"||typeof b=="number"||typeof b=="boolean"?!1:b._params?b._params?.every((A,N)=>{if(typeof O=="number"||typeof O=="boolean")return !0;{let V=L(O._params),q=L(b._params);return V?.[N]===q?.[N]}}):!0})}function C(i){let l=a.value.get(i);if(l)return l;{let x=ref(!1),j=ref(!0),G=ref({}),w=ref(!1);return a.value.set(i,{$pending:x,$valid:j,$metadata:G,$validating:w}),{$pending:x,$valid:j,$metadata:G,$validating:w}}}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:S,getArrayStatus:h,addArrayStatus:E,deleteArrayStatus:g,arrayStatusStorage:o}}function ot(e,t){return z(e.value)&&z(t.value)&&!Object.entries(t.value).some(r=>me(r))}function it(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function st(e){return !!e.value&&z(e.value)}function me(e){return z(e)&&"_validator"in e}function ve(e){return typeof e.value!="function"}function Ve(e){return z(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:S}){let E=effectScope(),h,g,m=ref(!1),{$pending:d,$valid:f,$metadata:c,$validating:I}=u.trySetRuleStatusRef(`${o}.${n}`);function C(){h=E.run(()=>{let b=computed(()=>({$invalid:!f.value,$params:q.value,...c.value})),O=computed(()=>ve(r)?typeof r.value.active=="function"?r.value.active(a.value,b.value):r.value.active:!0),A=computed(()=>{let y="",v=t?t[n]?.message:void 0;return v&&(typeof v=="function"?y=v(a.value,b.value):y=v),ve(r)&&(v&&!r.value._patched||(typeof r.value.message=="function"?y=r.value.message(a.value,b.value):y=r.value.message)),ee(y)&&(y="Error",console.warn(`No error message defined for ${o}.${n}`)),y}),N=computed(()=>ve(r)&&r.value.type?r.value.type:n),V=computed(()=>ve(r)?r.value.validator:r.value),q=computed(()=>typeof r.value=="function"?[]:L(r.value._params??[])),D=computed(()=>`${o}.${N.value}`);return {$active:O,$message:A,$type:N,$validator:V,$params:q,$path:D}}),g=watch(h.$params,j,{deep:!0});}C();function i(){f.value=!0,e.value&&(d.value=!0);}async function l(){let b=h.$validator.value,O=b(a.value,...h.$params.value),A=!1,N=a.value;try{i();let V;if(O instanceof Promise?V=await O:V=O,a.value!==N)return !0;if(typeof V=="boolean")A=V;else {let{$valid:q,...D}=V;A=q,c.value=D;}}catch{A=!1;}finally{d.value=!1;}return A}let x=ye(l,S??200);async function j(){I.value=!0;let b=!1;if(me(r.value)&&r.value._async)b=await x();else {let O=h.$validator.value,A=O(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")b=A;else {let{$valid:N,...V}=A;b=N,c.value=V;}}return f.value=b,I.value=!1,b}function G(){f.value=!0,c.value={},d.value=!1,I.value=!1,C();}function w(){g(),E.stop(),E=effectScope();}return reactive({...h,$pending:d,$valid:f,$metadata:c,_haveAsync:m,$validating:I,$validate:j,$unwatch:w,$watch:C,$reset:G})}function be({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:u,externalErrors:S,onUnwatch:E,$isArray:h,initialState:g,shortcuts:m}){let d=effectScope(),f,c=ref(!1),I=ref(!1),C=ref([]),i,l,x,j,G,w=()=>{};function b(){C.value=S.value??[];}b();function O(){let _=t.value,W=o.checkRuleDeclEntry(n,_);y.value=Object.fromEntries(Object.entries(_).filter(([H])=>H.startsWith("$"))),D.value=Object.fromEntries(Object.entries(t.value).filter(([H])=>!H.startsWith("$")).map(([H,X])=>{if(X){let De=toRef(()=>X);return [H,ct({$dirty:c,customMessages:r,rule:De,ruleKey:H,state:e,path:n,storage:o,$debounce:y.value.$debounce})]}return []}).filter(H=>!!H.length)),V(),A(),W?.valid!=null&&(c.value=o.getDirtyState(n),c.value&&w()),o.addRuleDeclEntry(n,_);}function A(){w=f.$debounce.value?ye(q,f.$debounce.value??f.haveAnyAsyncRule?100:0):q;}function N(){D.value&&Object.entries(D.value).forEach(([_,W])=>{W.$unwatch();}),j(),c.value&&o.setDirtyEntry(n,c.value),i(),l(),x(),d.stop(),d=effectScope(),E?.(),G?.();}function V(){D.value&&Object.entries(D.value).forEach(([_,W])=>{W.$watch();}),f=d.run(()=>{let _=computed(()=>c.value),W=computed(()=>y.value.$debounce),H=computed(()=>y.value.$lazy!=null?y.value.$lazy:unref(u.lazy)),X=computed(()=>y.value.$rewardEarly!=null?y.value.$rewardEarly:unref(u.rewardEarly)),De=computed(()=>y.value.$autoDirty!=null?y.value.$autoDirty:unref(u.autoDirty)),vt=computed(()=>Object.entries(D.value).some(([te,Q])=>Q.$validating)),Ce=computed(()=>pe.value&&!Ee.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||Ee.value)),Ee=computed(()=>I.value||!X.value?Object.entries(D.value).some(([te,Q])=>Q.$pending):!1),pe=computed(()=>C.value?.length?!0:!X.value||X.value&&I.value?Object.entries(D.value).some(([te,Q])=>!Q.$valid):!1),Ye=computed(()=>a),Ie=computed(()=>ee(D.value)?!0:c.value&&!ee(e.value)&&!vt.value?C.value?.length?!1:X.value?Object.entries(D.value).every(([te,Q])=>Q.$valid):!pe.value:!1),gt=computed(()=>Object.entries(D.value).some(([te,Q])=>Q._haveAsync));function $t(){m?.fields&&Object.entries(m.fields).forEach(([te,Q])=>{let St=effectScope();Qe[te]=St.run(()=>{let Xe=ref();return watchEffect(()=>{Xe.value=Q({$dirty:c.value,$externalErrors:C.value,$value:e,$rules:D.value,$error:Ce.value,$pending:Ee.value,$invalid:pe.value,$valid:Ie.value,$errors:Le.value,$ready:Je.value,$silentErrors:ze.value,$anyDirty:_.value,$name:Ye.value});}),Xe});});}let Qe={};return $t(),watch(Ie,te=>{te&&(I.value=!1);}),{$error:Ce,$pending:Ee,$invalid:pe,$valid:Ie,$debounce:W,$lazy:H,$errors:Le,$ready:Je,$silentErrors:ze,$rewardEarly:X,$autoDirty:De,$anyDirty:_,$name:Ye,haveAnyAsyncRule:gt,$shortcuts:Qe}}),x=watch(S,b),i=watch(e,()=>{f.$autoDirty.value&&(c.value||(c.value=!0)),t.value instanceof Function&&O(),w(),f.$rewardEarly.value;},{deep:h?!0:se?1:!0}),j=watch(c,()=>{o.setDirtyEntry(n,c.value);}),l=watch(f.$valid,_=>{f.$rewardEarly.value&&_&&(I.value=!1);}),G=watch(f.haveAnyAsyncRule,A);}function q(){Object.entries(D.value).forEach(([_,W])=>{W.$validate();});}let D=ref(),y=ref();O();function v(){c.value=!1,C.value=[],Object.entries(D.value).forEach(([_,W])=>{W.$reset();}),f.$lazy.value||Object.entries(D.value).map(([_,W])=>W.$validate());}function R(){c.value||(c.value=!0,f.$rewardEarly.value,w());}let p=f.$debounce.value?ye($,f.$debounce.value??0):$;async function $(){try{if(I.value=!0,f.$autoDirty.value&&c.value&&!f.$pending.value)return !f.$error.value;{let _=Object.entries(D.value).map(([H,X])=>X.$validate());return (await Promise.allSettled(_)).every(H=>H.status==="fulfilled"?H.value:!1)}}catch{return !1}}function s(){N(),e.value=at(e,g),v();}function T(_=!0){return c.value?e.value:null}function P(){C.value=[];}f.$lazy.value||$();let{$anyDirty:k,$error:Y,$errors:oe,$invalid:ne,$name:U,$pending:M,$ready:F,$silentErrors:ie,$valid:xe,$shortcuts:he}=f;return reactive({$dirty:c,$error:Y,$errors:oe,$valid:xe,$invalid:ne,$pending:M,$silentErrors:ie,$anyDirty:k,$ready:F,$name:U,$externalErrors:C,$value:e,$rules:D,...he,$reset:v,$touch:R,$validate:p,$unwatch:N,$watch:V,$resetAll:s,$extractDirtyFields:T,$clearExternalErrors:P})}function ft({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:u,rules:S,externalErrors:E,initialState:h,shortcuts:g,fieldName:m}){let d=S.$key?S.$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=Se({state:o,rulesDef:toRef(()=>S),customMessages:u,path:f,storage:a,options:n,externalErrors:c,initialState:h?.[r],shortcuts:g,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:S,shortcuts:E,fieldName:h}){let g=effectScope(),m,d=effectScope(),f;if(!Array.isArray(e.value)&&!t.value.$each)return null;let c=ref(),I=ref(e.value),C,i=ref({}),l=a.getCollectionsEntry(n);f=d.run(()=>{let R=computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(s=>typeof s!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(s=>me(s)):!1),p=computed(()=>u.value?je(u.value)?u.value.$errors??[]:[]:[]),$=computed(()=>u.value?je(u.value)?u.value.$each??[]:[]:[]);return {isPrimitiveArray:R,$externalErrorsField:p,$externalErrorsEach:$}}),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=i.value.$value,Array.isArray(e.value)?l.value=e.value.map((R,p)=>{let $=Ae(t.value.$each,toRef(()=>R),p),s=ft({$id:c.value,path:n,rules:$??{},stateValue:toRef(()=>R),index:p,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:S[p],shortcuts:E,fieldName:h});return s||null}).filter(R=>!!R):l.value=[],i.value=be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:f.$externalErrorsField,$isArray:!0,initialState:S,shortcuts:E,fieldName:h}));}function j(){if(Array.isArray(e.value)){let R=re(l.value);l.value=e.value.map((p,$)=>{let s=toRef(()=>p);if(p.$id&&l.value.find(T=>T.$id===p.$id)){let T=a.getArrayStatus(c.value,p.$id);return T?(T.$value=s,T):null}else {let T=Ae(t.value.$each,s,$);if(T){let P=ft({$id:c.value,path:n,rules:T,stateValue:s,index:$,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:S[$],shortcuts:E,fieldName:h});return P||null}}}).filter(p=>!!p),R.filter(p=>!e.value.find($=>p.$id===$.$id)).forEach((p,$)=>{a.deleteArrayStatus(c.value,$.toString());});}else l.value=[];}function G(){C=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?x():j();},{deep:se?1:!0,flush:"pre"}),m=g.run(()=>{let R=computed(()=>i.value.$dirty&&l.value.every(F=>F.$dirty)),p=computed(()=>i.value.$anyDirty||l.value.some(F=>F.$dirty)),$=computed(()=>i.value.$invalid||l.value.some(F=>F.$invalid)),s=computed(()=>i.value.$valid&&l.value.every(F=>F.$valid)),T=computed(()=>i.value.$error||l.value.some(F=>F.$error)),P=computed(()=>!($.value||k.value)),k=computed(()=>i.value.$pending||l.value.some(F=>F.$pending)),Y=computed(()=>({$errors:i.value.$errors,$each:l.value.map(F=>F.$errors)})),oe=computed(()=>({$errors:i.value.$silentErrors,$each:l.value.map(F=>F.$silentErrors)})),ne=computed(()=>h);function U(){E?.collections&&Object.entries(E?.collections).forEach(([F,ie])=>{let xe=effectScope();M[F]=xe.run(()=>{let he=ref();return watchEffect(()=>{he.value=ie({$dirty:R.value,$error:T.value,$pending:k.value,$invalid:$.value,$valid:s.value,$errors:Y.value,$ready:P.value,$silentErrors:oe.value,$anyDirty:p.value,$name:ne.value,$each:l.value,$field:i.value,$value:e});}),he});});}let M={};return U(),{$dirty:R,$anyDirty:p,$invalid:$,$valid:s,$error:T,$pending:k,$errors:Y,$silentErrors:oe,$ready:P,$name:ne,$shortcuts:M}}),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 w(){C&&C(),i.value&&i.value.$unwatch(),l.value&&l.value.forEach(R=>{"$dirty"in R&&R.$unwatch();}),g.stop(),g=effectScope(),d.stop(),d=effectScope(!0);}function b(){i.value.$touch(),l.value.forEach(R=>{R.$touch();});}function O(){i.value.$reset(),l.value.forEach(R=>{R.$reset();});}async function A(){try{return (await Promise.all([i.value.$validate(),...l.value.map(p=>p.$validate())])).every(p=>!!p)}catch{return !1}}function N(){i.value.$clearExternalErrors(),l.value.forEach(R=>{R.$clearExternalErrors();});}function V(R=!0){let p=l.value.map($=>{if(Ve($))return $.$extractDirtyFields(R)});return R&&(p=p.filter($=>z($)?!ee($):!!$)),p}function q(){console.log(S),w(),lt(e,S),O();}async function D(){return b(),await A()?e.value:!1}let{$shortcuts:y,...v}=m;return reactive({$field:i,...v,...y,$each:l,$value:e,$validate:A,$unwatch:w,$watch:G,$touch:b,$reset:O,$resetAll:q,$extractDirtyFields:V,$parse:D,$clearExternalErrors:N})}function ke({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:u,externalErrors:S,validationGroups:E,initialState:h,shortcuts:g,fieldName:m}){let d,f,c=null;function i(y=!0){l.value=null,triggerRef(l);let v=Object.fromEntries(Object.entries(e.value).map(([s,T])=>{if(T){let P=toRef(t.value,s),k=toRef(()=>T),Y=toRef(()=>S.value?.[s]);return [s,Se({state:P,rulesDef:k,customMessages:r,path:n?`${n}.${s}`:s,storage:o,options:u,externalErrors:Y,initialState:h?.[s],shortcuts:g,fieldName:s})]}return []}).filter(s=>!!s.length&&s[1]!=null)),R=Object.fromEntries(Object.entries(unref(S)??{}).filter(([s])=>!(s in e.value)).map(([s,T])=>{if(T){let P=toRef(t.value,s),k=toRef(()=>({})),Y=toRef(()=>T);return [s,Se({state:P,rulesDef:k,customMessages:r,path:n?`${n}.${s}`:s,storage:o,options:u,externalErrors:Y,initialState:h?.[s],shortcuts:g,fieldName:s})]}return []})),p=Object.fromEntries(Object.entries(t.value).filter(([s])=>!(s in e.value)&&!(s in(R.value??{}))).map(([s,T])=>{let P=toRef(t.value,s),k=toRef(()=>({}));return [s,Se({state:P,rulesDef:k,customMessages:r,path:n?`${n}.${s}`:s,storage:o,options:u,externalErrors:ref(),initialState:h?.[s],shortcuts:g,fieldName:s})]})),$=Object.fromEntries(Object.entries(E?.(v)??{}).map(([s,T])=>T.length?[s,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(P=>[P,Ke(toRef(()=>T),P)])),...Object.fromEntries(["$errors","$silentErrors"].map(P=>[P,et(toRef(()=>T),P)]))}]:[]));l.value={...v,...R,...p,...$},y&&w();}let l=o.getFieldsEntry(n);i();function x(){i(!1),Object.entries(l.value).forEach(([y,v])=>{v.$reset();}),w();}function j(){Object.entries(l.value).forEach(([y,v])=>{v.$touch();});}async function G(){try{return (await Promise.allSettled(Object.entries(l.value).map(([v,R])=>R.$validate()))).every(v=>v.status==="fulfilled"?v.value:!1)}catch{return !1}}function w(){a&&(c=watch(a,()=>{b(),i();},{deep:se?1:!0,flush:"post"})),d=effectScope(),f=d.run(()=>{let y=computed(()=>!!Object.entries(l.value).length&&Object.entries(l.value).every(([U,M])=>M?.$dirty)),v=computed(()=>Object.entries(l.value).some(([U,M])=>M?.$dirty)),R=computed(()=>Object.entries(l.value).some(([U,M])=>M?.$invalid)),p=computed(()=>Object.entries(l.value).every(([U,M])=>M?.$valid)),$=computed(()=>y.value&&!T.value&&R.value),s=computed(()=>!(R.value||T.value)),T=computed(()=>Object.entries(l.value).some(([U,M])=>M?.$pending)),P=computed(()=>Object.fromEntries(Object.entries(l.value).map(([U,M])=>[U,M?.$errors]))),k=computed(()=>Object.fromEntries(Object.entries(l.value).map(([U,M])=>[U,M?.$silentErrors]))),Y=computed(()=>m);function oe(){g?.nested&&Object.entries(g.nested).forEach(([U,M])=>{let F=effectScope();ne[U]=F.run(()=>{let ie=ref();return watchEffect(()=>{ie.value=M({$dirty:y.value,$value:t,$error:$.value,$pending:T.value,$invalid:R.value,$valid:p.value,$ready:s.value,$anyDirty:v.value,$name:Y.value,$silentErrors:k.value,$errors:P.value,$fields:l.value});}),ie});});}let ne={};return oe(),{$dirty:y,$anyDirty:v,$invalid:R,$valid:p,$error:$,$pending:T,$errors:P,$silentErrors:k,$ready:s,$name:Y,$shortcuts:ne}});}function b(){l.value&&Object.entries(l.value).forEach(([y,v])=>{v.$unwatch();}),c?.(),d.stop(),d=effectScope();}function O(){Object.entries(l.value).forEach(([y,v])=>{v.$clearExternalErrors();});}function A(){b(),de(t,h??{}),x();}function N(y=!0){let v=Object.entries(l.value).map(([R,p])=>[R,p.$extractDirtyFields(y)]);return y&&(v=v.filter(([R,p])=>z(p)?!ee(p):Array.isArray(p)?p.length:!!p)),Object.fromEntries(v)}async function V(){return j(),await G()?t.value:!1}let{$shortcuts:q,...D}=f;return reactive({...D,...q,$fields:l,$value:t,$resetAll:A,$reset:x,$touch:j,$validate:G,$unwatch:b,$watch:w,$clearExternalErrors:O,$extractDirtyFields:N,$parse:V})}function Se({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:u,index:S,initialState:E,shortcuts:h,onUnwatch:g,fieldName:m}){return it(t,e)?Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:S,externalErrors:u,initialState:E,fieldName:m,shortcuts:h}):ot(e,t)&&nt(e)?ke({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:S,initialState:E,shortcuts:h,fieldName:m,externalErrors:u}):st(t)?be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:S,externalErrors:u,onUnwatch:g,shortcuts:h,initialState:E,fieldName:m}):null}function Ue({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o}){let u=Me(),S=computed(()=>unref(t.externalErrors));return reactive(ke({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:u,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};function a(o,u,S){let E=isRef(u)?u:computed(typeof u=="function"?u:()=>u),h={...n,...S},g=isRef(o)?o:ref(o),m=re(toRaw(g.value));return {r$:Ue({scopeRules:E,state:g,options:h,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,L as unwrapRuleParameters,yt as useRegle};
|