@regle/core 0.2.4 → 0.2.5

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 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 q(e){return e.map(t=>t instanceof Function?t():vue.unref(t))}function tt(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function rt(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(o=>o.trim()).filter(o=>o.includes("=")).length+e.length}function we(e,...t){let{message:r,validator:n,active:a,type:o,...u}=e,v=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator(S,...m){return e.validator(S,...q(m.length?m:t))},message(S,m){return typeof e.message=="function"?e.message(S,{...m,$params:q(m.$params?.length?m.$params:t)}):e.message},active(S,m){return typeof e.active=="function"?e.active(S,{...m,$params:q(m.$params?.length?m.$params:t)}):e.active??!0},exec(S){let m=e.validator(S,...q(t)),d;return m instanceof Promise?m.then(f=>(d=f,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)):(d=m,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)}},...u,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:v,_params:tt(t)}}function Oe(e){if(typeof e.validator=="function"){let r=we(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(rt(e.validator)>1){let a=function(...o){return we(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function L(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function nt(e){return L(e.value)}function K(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>K(n)))),r=="Map"&&(t=new Map([...e].map(n=>[K(n[0]),K(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,xt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=K(e[n]);}return t}function xt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function Ae(e,t,r){return e instanceof Function?e(t,r??0):e}function at(e,t){vue.isRef(e)?e.value=t:e=t;}function lt(e,t){vue.isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=vue.isRef(e)?e.value[n]:e[n];a={},de(a,t[n]);});}function de(e,t){Object.entries({...vue.unref(e),...t}).forEach(([r,n])=>{let a=vue.isRef(e)?e.value:e,o=vue.isRef(t[r])?t[r]._value:t[r],u=vue.isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(o)&&o.forEach((v,E)=>{a[r][E]={},de(a[r][E],o[E]);})):L(o)?de(u,o):vue.isRef(a[r])?a[r].value=o:a[r]=o;});}function ee(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function ye(e,t,r){let n,a=(...o)=>new Promise(u=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(u);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(u=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(u);},0);}),a}function Ct(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),u=Number(n[a]);if(o>u)return 1;if(u>o)return -1;if(!isNaN(o)&&isNaN(u))return 1;if(isNaN(o)&&!isNaN(u))return -1}return 0}var ie=Ct(vue.version,"3.5.0")!==-1;function It(){return Math.floor(Math.random()*Date.now()).toString()}function Fe(){return typeof window>"u"?It():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Me(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),a=vue.shallowRef(new Map),o=vue.shallowRef(new Map);function u(s){let l=t.value.get(s);if(l)return l;{let x=vue.ref({});return t.value.set(s,x),x}}function v(s){let l=r.value.get(s);if(l)return l;{let x=vue.ref([]);return r.value.set(s,x),x}}function E(s,l,x){o.value.set(`${s}-${l}`,x);}function $(s,l){return o.value.get(`${s}-${l}`)}function S(s,l){s&&l!=null&&o.value.delete(`${s}-${l}`);}function m(s,l){n.value.set(s,l);}function d(s){return n.value.get(s)??!1}function f(s,l){e.value.set(s,l);}function c(s,l){let x=e.value.get(s);return x?I(l,x)?{valid:!0}:{valid:!1}:void 0}function I(s,l){let x=Object.keys(l),V=Object.keys(s);return V.length!==x.length||!V.every(P=>x.includes(P))?!1:V.every(P=>{let h=s[P],w=l[P];return !w||!h||typeof h=="function"||typeof w=="function"||typeof h=="number"||typeof h=="boolean"?!1:h._params?h._params?.every((O,_)=>{if(typeof w=="number"||typeof w=="boolean")return !0;{let M=q(w._params),H=q(h._params);return M?.[_]===H?.[_]}}):!0})}function C(s){let l=a.value.get(s);if(l)return l;{let x=vue.ref(!1),V=vue.ref(!0),G=vue.ref({}),P=vue.ref(!1);return a.value.set(s,{$pending:x,$valid:V,$metadata:G,$validating:P}),{$pending:x,$valid:V,$metadata:G,$validating:P}}}return vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:f,setDirtyEntry:m,checkRuleDeclEntry:c,getDirtyState:d,trySetRuleStatusRef:C,getFieldsEntry:u,getCollectionsEntry:v,getArrayStatus:$,addArrayStatus:E,deleteArrayStatus:S,arrayStatusStorage:o}}function ot(e,t){return L(e.value)&&L(t.value)&&!Object.entries(t.value).some(r=>me(r))}function st(e){return !!e.value&&"$each"in e.value}function it(e){return !!e.value&&L(e.value)}function me(e){return L(e)&&"_validator"in e}function ge(e){return typeof e.value!="function"}function Ve(e){return L(e)&&"$fields"in e}function je(e){return "$each"in e||"$errors"in e}function _e({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function ct({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:u,$debounce:v}){let E=vue.effectScope(),$,S,m=vue.ref(!1),{$pending:d,$valid:f,$metadata:c,$validating:I}=u.trySetRuleStatusRef(`${o}.${n}`);function C(){$=E.run(()=>{let h=vue.computed(()=>({$invalid:!f.value,$params:H.value,...c.value})),w=vue.computed(()=>ge(r)?typeof r.value.active=="function"?r.value.active(a.value,h.value):r.value.active:!0),O=vue.computed(()=>{let y="",g=t?t[n]?.message:void 0;return g&&(typeof g=="function"?y=g(a.value,h.value):y=g),ge(r)&&(g&&!r.value._patched||(typeof r.value.message=="function"?y=r.value.message(a.value,h.value):y=r.value.message)),ee(y)&&(y="Error",console.warn(`No error message defined for ${o}.${n}`)),y}),_=vue.computed(()=>ge(r)&&r.value.type?r.value.type:n),M=vue.computed(()=>ge(r)?r.value.validator:r.value),H=vue.computed(()=>typeof r.value=="function"?[]:q(r.value._params??[])),D=vue.computed(()=>`${o}.${_.value}`);return {$active:w,$message:O,$type:_,$validator:M,$params:H,$path:D}}),S=vue.watch($.$params,V,{deep:!0});}C();function s(){f.value=!0,e.value&&(d.value=!0);}async function l(){let h=$.$validator.value,w=h(a.value,...$.$params.value),O=!1,_=a.value;try{s();let M;if(w instanceof Promise?M=await w:M=w,a.value!==_)return !0;if(typeof M=="boolean")O=M;else {let{$valid:H,...D}=M;O=H,c.value=D;}}catch{O=!1;}finally{d.value=!1;}return O}let x=ye(l,v??200);async function V(){I.value=!0;let h=!1;if(me(r.value)&&r.value._async)h=await x();else {let w=$.$validator.value,O=w(a.value,...$.$params.value);if(O instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(O!=null)if(typeof O=="boolean")h=O;else {let{$valid:_,...M}=O;h=_,c.value=M;}}return f.value=h,I.value=!1,h}function G(){f.value=!0,c.value={},d.value=!1,I.value=!1,C();}function P(){S(),E.stop(),E=vue.effectScope();}return vue.reactive({...$,$pending:d,$valid:f,$metadata:c,_haveAsync:m,$validating:I,$validate:V,$unwatch:P,$watch:C,$reset:G})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:u,externalErrors:v,onUnwatch:E,$isArray:$,initialState:S,shortcuts:m}){let d=vue.effectScope(),f,c=vue.ref(!1),I=vue.ref(!1),C=vue.ref([]),s,l,x,V,G,P=()=>{};function h(){C.value=v.value??[];}h();function w(){let j=t.value,U=o.checkRuleDeclEntry(n,j);y.value=Object.fromEntries(Object.entries(j).filter(([W])=>W.startsWith("$"))),D.value=Object.fromEntries(Object.entries(t.value).filter(([W])=>!W.startsWith("$")).map(([W,Q])=>{if(Q){let De=vue.toRef(()=>Q);return [W,ct({$dirty:c,customMessages:r,rule:De,ruleKey:W,state:e,path:n,storage:o,$debounce:y.value.$debounce})]}return []}).filter(W=>!!W.length)),M(),O(),U?.valid!=null&&(c.value=o.getDirtyState(n),c.value&&P()),o.addRuleDeclEntry(n,j);}function O(){P=f.$debounce.value?ye(H,f.$debounce.value??f.haveAnyAsyncRule?100:0):H;}function _(){D.value&&Object.entries(D.value).forEach(([j,U])=>{U.$unwatch();}),V(),c.value&&o.setDirtyEntry(n,c.value),s(),l(),x(),d.stop(),d=vue.effectScope(),E?.(),G?.();}function M(){D.value&&Object.entries(D.value).forEach(([j,U])=>{U.$watch();}),f=d.run(()=>{let j=vue.computed(()=>c.value),U=vue.computed(()=>y.value.$debounce),W=vue.computed(()=>y.value.$lazy!=null?y.value.$lazy:vue.unref(u.lazy)),Q=vue.computed(()=>y.value.$rewardEarly!=null?y.value.$rewardEarly:vue.unref(u.rewardEarly)),De=vue.computed(()=>y.value.$autoDirty!=null?y.value.$autoDirty:vue.unref(u.autoDirty)),gt=vue.computed(()=>Object.entries(D.value).some(([Z,J])=>J.$validating)),Ce=vue.computed(()=>pe.value&&!he.value&&c.value),Le=vue.computed(()=>Ce.value?_e({field:{$dirty:c.value,$externalErrors:C.value,$rules:D.value}}):[]),ze=vue.computed(()=>_e({field:{$dirty:c.value,$externalErrors:C.value,$rules:D.value},silent:!0})),Je=vue.computed(()=>!(pe.value||he.value)),he=vue.computed(()=>I.value||!Q.value?Object.entries(D.value).some(([Z,J])=>J.$pending):!1),pe=vue.computed(()=>C.value?.length?!0:!Q.value||Q.value&&I.value?Object.entries(D.value).some(([Z,J])=>!J.$valid):!1),Ye=vue.computed(()=>a),Ie=vue.computed(()=>c.value&&!ee(e.value)&&!gt.value?C.value?.length?!1:Q.value?Object.entries(D.value).every(([Z,J])=>J.$valid):!pe.value:!1),vt=vue.computed(()=>Object.entries(D.value).some(([Z,J])=>J._haveAsync));function $t(){m?.fields&&Object.entries(m.fields).forEach(([Z,J])=>{let St=vue.effectScope();Qe[Z]=St.run(()=>{let Xe=vue.ref();return vue.watchEffect(()=>{Xe.value=J({$dirty:c.value,$externalErrors:C.value,$value:e,$rules:D.value,$error:Ce.value,$pending:he.value,$invalid:pe.value,$valid:Ie.value,$errors:Le.value,$ready:Je.value,$silentErrors:ze.value,$anyDirty:j.value,$name:Ye.value});}),Xe});});}let Qe={};return $t(),vue.watch(Ie,Z=>{Z&&(I.value=!1);}),{$error:Ce,$pending:he,$invalid:pe,$valid:Ie,$debounce:U,$lazy:W,$errors:Le,$ready:Je,$silentErrors:ze,$rewardEarly:Q,$autoDirty:De,$anyDirty:j,$name:Ye,haveAnyAsyncRule:vt,$shortcuts:Qe}}),x=vue.watch(v,h),s=vue.watch(e,()=>{f.$autoDirty.value&&(c.value||(c.value=!0)),t.value instanceof Function&&w(),P(),f.$rewardEarly.value;},{deep:$?!0:ie?1:!0}),V=vue.watch(c,()=>{o.setDirtyEntry(n,c.value);}),l=vue.watch(f.$valid,j=>{f.$rewardEarly.value&&j&&(I.value=!1);}),G=vue.watch(f.haveAnyAsyncRule,O);}function H(){Object.entries(D.value).forEach(([j,U])=>{U.$validate();});}let D=vue.ref(),y=vue.ref();w();function g(){c.value=!1,C.value=[],Object.entries(D.value).forEach(([j,U])=>{U.$reset();}),f.$lazy.value||Object.entries(D.value).map(([j,U])=>U.$validate());}function p(){c.value||(c.value=!0,f.$rewardEarly.value,P());}let R=f.$debounce.value?ye(i,f.$debounce.value??0):i;async function i(){try{if(I.value=!0,f.$autoDirty.value&&c.value&&!f.$pending.value)return !f.$error.value;{let j=Object.entries(D.value).map(([W,Q])=>Q.$validate());return (await Promise.allSettled(j)).every(W=>W.status==="fulfilled"?W.value:!1)}}catch{return !1}}function b(){_(),e.value=at(e,S),g();}function T(j=!0){return c.value?e.value:null}function N(){C.value=[];}f.$lazy.value||i();let{$anyDirty:Y,$error:te,$errors:oe,$invalid:re,$name:B,$pending:F,$ready:A,$silentErrors:se,$valid:xe,$shortcuts:Se}=f;return vue.reactive({$dirty:c,$error:te,$errors:oe,$valid:xe,$invalid:re,$pending:F,$silentErrors:se,$anyDirty:Y,$ready:A,$name:B,$externalErrors:C,$value:e,$rules:D,...Se,$reset:g,$touch:p,$validate:R,$unwatch:_,$watch:M,$resetAll:b,$extractDirtyFields:T,$clearExternalErrors:N})}function ft({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:u,rules:v,externalErrors:E,initialState:$,shortcuts:S,fieldName:m}){let d=v.$key?v.$key:Fe(),f=`${t}.${String(d)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?f=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:d,enumerable:!1,configurable:!1,writable:!1}}));let c=vue.toRef(()=>E.value?.[r]),I=Te({state:o,rulesDef:vue.toRef(()=>v),customMessages:u,path:f,storage:a,options:n,externalErrors:c,initialState:$?.[r],shortcuts:S,fieldName:m});if(I){let C=o.value?.$id;I.$id=C??String(d),a.addArrayStatus(e,I.$id,I);}return I}function Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:u,initialState:v,shortcuts:E,fieldName:$}){let S=vue.effectScope(),m,d=vue.effectScope(),f;if(Array.isArray(e.value)&&!t.value.$each)return null;let c=vue.ref(),I=vue.ref(e.value),C,s=vue.ref({}),l=a.getCollectionsEntry(n);f=d.run(()=>{let p=vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(b=>typeof b!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(b=>me(b)):!1),R=vue.computed(()=>u.value?je(u.value)?u.value.$errors??[]:[]:[]),i=vue.computed(()=>u.value?je(u.value)?u.value.$each??[]:[]:[]);return {isPrimitiveArray:p,$externalErrorsField:R,$externalErrorsEach:i}}),x(),G();function x(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(c.value=Fe(),Object.defineProperties(e.value,{$id:{value:c.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(c.value=e.value.$id)),!f.isPrimitiveArray.value&&(I.value=s.value.$value,Array.isArray(e.value)&&t.value.$each?l.value=e.value.map((p,R)=>{let i=Ae(t.value.$each,vue.toRef(()=>p),R);if(i){let b=ft({$id:c.value,path:n,rules:i,stateValue:vue.toRef(()=>p),index:R,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:v[R],shortcuts:E,fieldName:$});return b||null}}).filter(p=>!!p):l.value=[],s.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:f.$externalErrorsField,$isArray:!0,initialState:v,shortcuts:E,fieldName:$}));}function V(){if(Array.isArray(e.value)){let p=K(l.value);l.value=e.value.map((R,i)=>{let b=vue.toRef(()=>R);if(R.$id&&l.value.find(T=>T.$id===R.$id)){let T=a.getArrayStatus(c.value,R.$id);return T?(T.$value=b,T):null}else {let T=Ae(t.value.$each,b,i);if(T){let N=ft({$id:c.value,path:n,rules:T,stateValue:b,index:i,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:v[i],fieldName:$});return N||null}}}).filter(R=>!!R),p.filter(R=>!e.value.find(i=>R.$id===i.$id)).forEach((R,i)=>{a.deleteArrayStatus(c.value,i.toString());});}else l.value=[];}function G(){C=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?x():V();},{deep:ie?1:!0,flush:"pre"}),m=S.run(()=>{let p=vue.computed(()=>s.value.$dirty&&l.value.every(A=>A.$dirty)),R=vue.computed(()=>s.value.$anyDirty||l.value.some(A=>A.$dirty)),i=vue.computed(()=>s.value.$invalid||l.value.some(A=>A.$invalid)),b=vue.computed(()=>s.value.$valid&&l.value.every(A=>A.$valid)),T=vue.computed(()=>s.value.$error||l.value.some(A=>A.$error)),N=vue.computed(()=>!(i.value||Y.value)),Y=vue.computed(()=>s.value.$pending||l.value.some(A=>A.$pending)),te=vue.computed(()=>({$errors:s.value.$errors,$each:l.value.map(A=>A.$errors)})),oe=vue.computed(()=>({$errors:s.value.$silentErrors,$each:l.value.map(A=>A.$silentErrors)})),re=vue.computed(()=>$);function B(){E?.collections&&Object.entries(E?.collections).forEach(([A,se])=>{let xe=vue.effectScope();F[A]=xe.run(()=>{let Se=vue.ref();return vue.watchEffect(()=>{Se.value=se({$dirty:p.value,$error:T.value,$pending:Y.value,$invalid:i.value,$valid:b.value,$errors:te.value,$ready:N.value,$silentErrors:oe.value,$anyDirty:R.value,$name:re.value,$each:l.value,$field:s.value,$value:e});}),Se});});}let F={};return B(),{$dirty:p,$anyDirty:R,$invalid:i,$valid:b,$error:T,$pending:Y,$errors:te,$silentErrors:oe,$ready:N,$name:re,$shortcuts:F}}),f.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),C());}function P(){C&&C(),s.value&&s.value.$unwatch(),l.value&&l.value.forEach(p=>{"$dirty"in p&&p.$unwatch();}),S.stop(),S=vue.effectScope(),d.stop(),d=vue.effectScope(!0);}function h(){s.value.$touch(),l.value.forEach(p=>{p.$touch();});}function w(){s.value.$reset(),l.value.forEach(p=>{p.$reset();});}async function O(){try{return (await Promise.all([s.value.$validate(),...l.value.map(R=>R.$validate())])).every(R=>!!R)}catch{return !1}}function _(){s.value.$clearExternalErrors(),l.value.forEach(p=>{p.$clearExternalErrors();});}function M(p=!0){let R=l.value.map(i=>{if(Ve(i))return i.$extractDirtyFields(p)});return p&&(R=R.filter(i=>L(i)?!ee(i):!!i)),R}function H(){console.log(v),P(),lt(e,v),w();}async function D(){return h(),await O()?e.value:!1}let{$shortcuts:y,...g}=m;return vue.reactive({$field:s,...g,...y,$each:l,$value:e,$validate:O,$unwatch:P,$watch:G,$touch:h,$reset:w,$resetAll:H,$extractDirtyFields:M,$parse:D,$clearExternalErrors:_})}function Be({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:u,externalErrors:v,validationGroups:E,initialState:$,shortcuts:S,fieldName:m}){let d,f,c=null;function s(y=!0){l.value=null,vue.triggerRef(l);let g=Object.fromEntries(Object.entries(e.value).map(([i,b])=>{if(b){let T=vue.toRef(t.value,i),N=vue.toRef(()=>b),Y=vue.toRef(()=>v.value?.[i]);return [i,Te({state:T,rulesDef:N,customMessages:r,path:n?`${n}.${i}`:i,storage:o,options:u,externalErrors:Y,initialState:$?.[i],shortcuts:S,fieldName:i})]}return []}).filter(i=>!!i.length&&i[1]!=null)),p=Object.fromEntries(Object.entries(vue.unref(v)??{}).filter(([i])=>!(i in e.value)).map(([i,b])=>{if(b){let T=vue.toRef(()=>({})),N=vue.toRef(()=>b);return [i,Te({state:vue.ref(void 0),rulesDef:T,customMessages:r,path:n?`${n}.${i}`:i,storage:o,options:u,externalErrors:N,initialState:$?.[i],fieldName:i})]}return []})),R=Object.fromEntries(Object.entries(E?.(g)??{}).map(([i,b])=>b.length?[i,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(T=>[T,Ke(vue.toRef(()=>b),T)])),...Object.fromEntries(["$errors","$silentErrors"].map(T=>[T,et(vue.toRef(()=>b),T)]))}]:[]));l.value={...g,...p,...R},y&&P();}let l=o.getFieldsEntry(n);s();function x(){s(!1),Object.entries(l.value).forEach(([y,g])=>{g.$reset();}),P();}function V(){Object.entries(l.value).forEach(([y,g])=>{g.$touch();});}async function G(){try{return (await Promise.allSettled(Object.entries(l.value).map(([g,p])=>p.$validate()))).every(g=>g.status==="fulfilled"?g.value:!1)}catch{return !1}}function P(){a&&(c=vue.watch(a,()=>{h(),s();},{deep:ie?1:!0,flush:"post"})),d=vue.effectScope(),f=d.run(()=>{let y=vue.computed(()=>!!Object.entries(l.value).length&&Object.entries(l.value).every(([B,F])=>F.$dirty)),g=vue.computed(()=>Object.entries(l.value).some(([B,F])=>F.$dirty)),p=vue.computed(()=>Object.entries(l.value).some(([B,F])=>F.$invalid)),R=vue.computed(()=>Object.entries(l.value).every(([B,F])=>F.$valid)),i=vue.computed(()=>y.value&&!T.value&&p.value),b=vue.computed(()=>!(p.value||T.value)),T=vue.computed(()=>Object.entries(l.value).some(([B,F])=>F.$pending)),N=vue.computed(()=>Object.fromEntries(Object.entries(l.value).map(([B,F])=>[B,F.$errors]))),Y=vue.computed(()=>Object.fromEntries(Object.entries(l.value).map(([B,F])=>[B,F.$silentErrors]))),te=vue.computed(()=>m);function oe(){S?.nested&&Object.entries(S.nested).forEach(([B,F])=>{let A=vue.effectScope();re[B]=A.run(()=>{let se=vue.ref();return vue.watchEffect(()=>{se.value=F({$dirty:y.value,$value:t,$error:i.value,$pending:T.value,$invalid:p.value,$valid:R.value,$ready:b.value,$anyDirty:g.value,$name:te.value,$silentErrors:Y.value,$errors:N.value,$fields:l.value});}),se});});}let re={};return oe(),{$dirty:y,$anyDirty:g,$invalid:p,$valid:R,$error:i,$pending:T,$errors:N,$silentErrors:Y,$ready:b,$name:te,$shortcuts:re}});}function h(){l.value&&Object.entries(l.value).forEach(([y,g])=>{g.$unwatch();}),c?.(),d.stop(),d=vue.effectScope();}function w(){Object.entries(l.value).forEach(([y,g])=>{g.$clearExternalErrors();});}function O(){h(),de(t,$??{}),x();}function _(y=!0){let g=Object.entries(l.value).map(([p,R])=>[p,R.$extractDirtyFields(y)]);return y&&(g=g.filter(([p,R])=>L(R)?!ee(R):Array.isArray(R)?R.length:!!R)),Object.fromEntries(g)}async function M(){return V(),await G()?t.value:!1}let{$shortcuts:H,...D}=f;return vue.reactive({...D,...H,$fields:l,$value:t,$resetAll:O,$reset:x,$touch:V,$validate:G,$unwatch:h,$watch:P,$clearExternalErrors:w,$extractDirtyFields:_,$parse:M})}function Te({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:u,index:v,initialState:E,shortcuts:$,onUnwatch:S,fieldName:m}){return st(t)?Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:v,externalErrors:u,initialState:E,fieldName:m,shortcuts:$}):ot(e,t)&&nt(e)?Be({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:v,initialState:E,shortcuts:$,fieldName:m,externalErrors:u}):it(t)?Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:v,externalErrors:u,onUnwatch:S,shortcuts:$,initialState:E,fieldName:m}):null}function Ue({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o}){let u=Me(),v=vue.computed(()=>vue.unref(t.externalErrors));return vue.reactive(Be({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:u,options:t,externalErrors:v,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root"}))}function We(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function a(o,u,v){let E=vue.isRef(u)?u:vue.computed(typeof u=="function"?u:()=>u),$={...n,...v},S=vue.isRef(o)?o:vue.ref(o),m=K(vue.toRaw(S.value));return {r$:Ue({scopeRules:E,state:S,options:$,initialState:m,customRules:e,shortcuts:r})}}return a}var yt=We();function He(){function e(t,r){return r}return e}var qe=He();function mt({rules:e,modifiers:t,shortcuts:r}){let n=We(e,t,r),a=He();return {useRegle:n,inferRules:a}}exports.InternalRuleType=Pe;exports.createRule=Oe;exports.defineRegleConfig=mt;exports.inferRules=qe;exports.unwrapRuleParameters=q;exports.useRegle=yt;
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
  };
@@ -244,15 +247,6 @@ type UnionToIntersection<Union> = (
244
247
  ? Intersection & Union
245
248
  : never;
246
249
 
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
250
  interface RegleBehaviourOptions {
257
251
  /**
258
252
  * Only display error when calling `r$.$parse()`
@@ -289,12 +283,20 @@ interface RegleValidationGroupOutput {
289
283
  type FieldRegleBehaviourOptions = AddDollarToOptions<RegleBehaviourOptions> & {
290
284
  $debounce?: number;
291
285
  };
286
+ type ShortcutCommonFn<T extends Record<string, any>> = {
287
+ [x: string]: (element: OmitByType<T, Function>) => unknown;
288
+ };
289
+ type RegleShortcutDefinition<TCustomRules extends Record<string, any> = Partial<DefaultValidators>> = {
290
+ fields?: ShortcutCommonFn<RegleFieldStatus<any, Partial<TCustomRules> & Partial<DefaultValidators>>>;
291
+ nested?: ShortcutCommonFn<RegleStatus<Record<string, any>, ReglePartialValidationTree<any, Partial<TCustomRules> & Partial<DefaultValidators>>>>;
292
+ collections?: ShortcutCommonFn<RegleCollectionStatus>;
293
+ };
292
294
  type AddDollarToOptions<T extends Record<string, any>> = {
293
295
  [K in keyof T as `$${string & K}`]: T[K];
294
296
  };
295
297
 
296
- interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree> = EmptyObject, TExternal extends RegleExternalErrorTree<TState> = never, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never> {
297
- r$: RegleRoot<TState, TRules, TValidationGroups, TExternal>;
298
+ interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree> = EmptyObject, TExternal extends RegleExternalErrorTree<TState> = never, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TShortcuts extends RegleShortcutDefinition = never> {
299
+ r$: RegleRoot<TState, TRules, TValidationGroups, TExternal, TShortcuts>;
298
300
  }
299
301
  type isDeepExact<T, U> = {
300
302
  [K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
@@ -311,8 +313,23 @@ type DeepSafeFormState<TState extends Record<string, any>, TRules extends RegleP
311
313
  [K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? never : K]-?: SafeProperty<TState[K], TRules[K]>;
312
314
  };
313
315
  type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends 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;
316
+
317
+ 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>;
318
+ declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>, RegleShortcutDefinition<any>>;
319
+
320
+ interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
321
+ <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;
322
+ <TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
323
+ }
324
+ declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
325
+
326
+ type InferRegleRoot<T extends () => useRegleFn<any, any>> = T extends () => infer U ? U extends Regle ? U['r$'] : never : never;
314
327
  type InferRegleRules<T extends useRegleFn<any>> = T extends useRegleFn<infer U> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
315
- type RegleRequiredRules<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> & {
328
+ type InferRegleShortcuts<T extends useRegleFn<any, any>> = T extends useRegleFn<any, infer U> ? U : {};
329
+ type RegleEnforceRequiredRules<TRules extends keyof DefaultValidators> = Omit<DefaultValidators, TRules> & {
330
+ [K in TRules as keyof TRules]-?: NonNullable<DefaultValidators[K]>;
331
+ };
332
+ 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
333
  [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
334
  };
318
335
 
@@ -575,7 +592,7 @@ type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalVal
575
592
  /**
576
593
  * @public
577
594
  */
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<TState> = never> = RegleStatus<TState, TRules, TExternal> & {} & ([TValidationGroups] extends [never] ? {} : {
595
+ 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<TState> = never, TShortcuts extends RegleShortcutDefinition = never> = RegleStatus<TState, TRules, TExternal, TShortcuts> & {} & ([TValidationGroups] extends [never] ? {} : {
579
596
  $groups: {
580
597
  readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
581
598
  };
@@ -583,32 +600,36 @@ type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules
583
600
  /**
584
601
  * @public
585
602
  */
586
- type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TExternal extends RegleExternalErrorTree<TState> = never> = RegleCommonStatus<TState> & {
603
+ type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TExternal extends RegleExternalErrorTree<TState> = never, TShortcuts extends RegleShortcutDefinition = never> = RegleCommonStatus<TState> & {
587
604
  readonly $fields: {
588
- readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey>;
605
+ readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey, TShortcuts>;
589
606
  };
590
607
  readonly $errors: RegleErrorTree<TRules, TExternal>;
591
608
  readonly $silentErrors: RegleErrorTree<TRules, TExternal>;
592
609
  $extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
593
610
  $parse: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
594
- };
611
+ } & ([TShortcuts['nested']] extends [never] ? {} : {
612
+ [K in keyof TShortcuts['nested']]: ReturnType<NonNullable<TShortcuts['nested']>[K]>;
613
+ });
595
614
  /**
596
615
  * @public
597
616
  */
598
- type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialValidationTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string> = TRule extends RegleCollectionRuleDefinition<any, any> ? NonNullable<TState[TKey]> extends Array<Record<string, any> | any> ? ExtractFromGetter<TRule['$each']> extends RegleRuleDecl | ReglePartialValidationTree<any> ? RegleCollectionStatus<TState[TKey], ExtractFromGetter<TRule['$each']>, TRule> : never : RegleFieldStatus<TState[TKey], TRule> : TRule extends ReglePartialValidationTree<any> ? NonNullable<TState[TKey]> extends Array<any> ? RegleCommonStatus<TState[TKey]> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? RegleStatus<TState[TKey], TRule> : RegleFieldStatus<TState[TKey], TRule> : RegleFieldStatus<TState[TKey], TRule>;
617
+ type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialValidationTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string, TShortcuts extends RegleShortcutDefinition = never> = TRule extends RegleCollectionRuleDefinition<any, any> ? NonNullable<TState[TKey]> extends Array<Record<string, any> | any> ? ExtractFromGetter<TRule['$each']> extends RegleRuleDecl | ReglePartialValidationTree<any> ? RegleCollectionStatus<TState[TKey], ExtractFromGetter<TRule['$each']>, TRule, TShortcuts> : never : RegleFieldStatus<TState[TKey], TRule, 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, never, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts>;
599
618
  /**
600
619
  * @public
601
620
  */
602
- interface RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>> extends Omit<RegleCommonStatus<TState>, '$value'> {
621
+ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = never> = Omit<RegleCommonStatus<TState>, '$value'> & {
603
622
  $value: Maybe<UnwrapNestedRefs<TState>>;
604
623
  readonly $errors: string[];
605
624
  readonly $silentErrors: string[];
606
- readonly $externalErrors?: string[];
625
+ readonly $externalErrors: string[];
607
626
  $extractDirtyFields: (filterNullishValues?: boolean) => Maybe<TState>;
608
627
  readonly $rules: {
609
628
  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
629
  };
611
- }
630
+ } & ([TShortcuts['fields']] extends [never] ? {} : {
631
+ [K in keyof TShortcuts['fields']]: ReturnType<NonNullable<TShortcuts['fields']>[K]>;
632
+ });
612
633
  /**
613
634
  * @public
614
635
  */
@@ -620,6 +641,7 @@ interface RegleCommonStatus<TValue = any> {
620
641
  readonly $pending: boolean;
621
642
  readonly $error: boolean;
622
643
  readonly $ready: boolean;
644
+ readonly $name: string;
623
645
  $id?: string;
624
646
  $value: UnwrapNestedRefs<TValue>;
625
647
  $touch(): void;
@@ -652,14 +674,17 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
652
674
  /**
653
675
  * @public
654
676
  */
655
- interface RegleCollectionStatus<TState extends any[] = any[], TRules extends RegleRuleDecl | ReglePartialValidationTree<any> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never> extends Omit<RegleFieldStatus<TState, TRules>, '$errors' | '$silentErrors' | '$extractDirtyFields'> {
656
- readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number>>;
657
- readonly $field: RegleFieldStatus<TState, TFieldRule>;
677
+ type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePartialValidationTree<Record<string, any>> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never, TShortcuts extends RegleShortcutDefinition = never> = Omit<RegleFieldStatus<TState, TRules, TShortcuts>, '$errors' | '$silentErrors' | '$extractDirtyFields' | '$externalErrors' | '$rules' | '$value'> & {
678
+ $value: Maybe<TState>;
679
+ readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number, TShortcuts>>;
680
+ readonly $field: RegleFieldStatus<TState, TFieldRule, TShortcuts>;
658
681
  readonly $errors: RegleErrorTree<TRules>;
659
682
  readonly $silentErrors: RegleErrorTree<TRules>;
660
683
  $extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
661
684
  $parse: () => Promise<false | SafeProperty<TState, TRules>>;
662
- }
685
+ } & ([TShortcuts['collections']] extends [never] ? {} : {
686
+ [K in keyof TShortcuts['collections']]: ReturnType<NonNullable<TShortcuts['collections']>[K]>;
687
+ });
663
688
 
664
689
  /**
665
690
  * @description
@@ -700,12 +725,13 @@ declare function createRule<TValue extends any, TParams extends any[], TReturn e
700
725
  */
701
726
  declare function unwrapRuleParameters<TParams extends any[]>(params: ParamDecl[]): TParams;
702
727
 
703
- declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>>({ rules, modifiers, }: {
728
+ declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<TCustomRules>>({ rules, modifiers, shortcuts, }: {
704
729
  rules?: () => TCustomRules;
705
730
  modifiers?: RegleBehaviourOptions;
731
+ shortcuts?: TShortcuts;
706
732
  }): {
707
- useRegle: useRegleFn<TCustomRules>;
733
+ useRegle: useRegleFn<TCustomRules, TShortcuts>;
708
734
  inferRules: inferRulesFn<TCustomRules>;
709
735
  };
710
736
 
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 RegleRequiredRules, 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 };
737
+ export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type 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
  };
@@ -244,15 +247,6 @@ type UnionToIntersection<Union> = (
244
247
  ? Intersection & Union
245
248
  : never;
246
249
 
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
250
  interface RegleBehaviourOptions {
257
251
  /**
258
252
  * Only display error when calling `r$.$parse()`
@@ -289,12 +283,20 @@ interface RegleValidationGroupOutput {
289
283
  type FieldRegleBehaviourOptions = AddDollarToOptions<RegleBehaviourOptions> & {
290
284
  $debounce?: number;
291
285
  };
286
+ type ShortcutCommonFn<T extends Record<string, any>> = {
287
+ [x: string]: (element: OmitByType<T, Function>) => unknown;
288
+ };
289
+ type RegleShortcutDefinition<TCustomRules extends Record<string, any> = Partial<DefaultValidators>> = {
290
+ fields?: ShortcutCommonFn<RegleFieldStatus<any, Partial<TCustomRules> & Partial<DefaultValidators>>>;
291
+ nested?: ShortcutCommonFn<RegleStatus<Record<string, any>, ReglePartialValidationTree<any, Partial<TCustomRules> & Partial<DefaultValidators>>>>;
292
+ collections?: ShortcutCommonFn<RegleCollectionStatus>;
293
+ };
292
294
  type AddDollarToOptions<T extends Record<string, any>> = {
293
295
  [K in keyof T as `$${string & K}`]: T[K];
294
296
  };
295
297
 
296
- interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree> = EmptyObject, TExternal extends RegleExternalErrorTree<TState> = never, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never> {
297
- r$: RegleRoot<TState, TRules, TValidationGroups, TExternal>;
298
+ interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree> = EmptyObject, TExternal extends RegleExternalErrorTree<TState> = never, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TShortcuts extends RegleShortcutDefinition = never> {
299
+ r$: RegleRoot<TState, TRules, TValidationGroups, TExternal, TShortcuts>;
298
300
  }
299
301
  type isDeepExact<T, U> = {
300
302
  [K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
@@ -311,8 +313,23 @@ type DeepSafeFormState<TState extends Record<string, any>, TRules extends RegleP
311
313
  [K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? never : K]-?: SafeProperty<TState[K], TRules[K]>;
312
314
  };
313
315
  type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends 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;
316
+
317
+ 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>;
318
+ declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>, RegleShortcutDefinition<any>>;
319
+
320
+ interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
321
+ <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;
322
+ <TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
323
+ }
324
+ declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
325
+
326
+ type InferRegleRoot<T extends () => useRegleFn<any, any>> = T extends () => infer U ? U extends Regle ? U['r$'] : never : never;
314
327
  type InferRegleRules<T extends useRegleFn<any>> = T extends useRegleFn<infer U> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
315
- type RegleRequiredRules<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> & {
328
+ type InferRegleShortcuts<T extends useRegleFn<any, any>> = T extends useRegleFn<any, infer U> ? U : {};
329
+ type RegleEnforceRequiredRules<TRules extends keyof DefaultValidators> = Omit<DefaultValidators, TRules> & {
330
+ [K in TRules as keyof TRules]-?: NonNullable<DefaultValidators[K]>;
331
+ };
332
+ 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
333
  [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
334
  };
318
335
 
@@ -575,7 +592,7 @@ type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalVal
575
592
  /**
576
593
  * @public
577
594
  */
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<TState> = never> = RegleStatus<TState, TRules, TExternal> & {} & ([TValidationGroups] extends [never] ? {} : {
595
+ 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<TState> = never, TShortcuts extends RegleShortcutDefinition = never> = RegleStatus<TState, TRules, TExternal, TShortcuts> & {} & ([TValidationGroups] extends [never] ? {} : {
579
596
  $groups: {
580
597
  readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
581
598
  };
@@ -583,32 +600,36 @@ type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules
583
600
  /**
584
601
  * @public
585
602
  */
586
- type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TExternal extends RegleExternalErrorTree<TState> = never> = RegleCommonStatus<TState> & {
603
+ type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TExternal extends RegleExternalErrorTree<TState> = never, TShortcuts extends RegleShortcutDefinition = never> = RegleCommonStatus<TState> & {
587
604
  readonly $fields: {
588
- readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey>;
605
+ readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey, TShortcuts>;
589
606
  };
590
607
  readonly $errors: RegleErrorTree<TRules, TExternal>;
591
608
  readonly $silentErrors: RegleErrorTree<TRules, TExternal>;
592
609
  $extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
593
610
  $parse: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
594
- };
611
+ } & ([TShortcuts['nested']] extends [never] ? {} : {
612
+ [K in keyof TShortcuts['nested']]: ReturnType<NonNullable<TShortcuts['nested']>[K]>;
613
+ });
595
614
  /**
596
615
  * @public
597
616
  */
598
- type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialValidationTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string> = TRule extends RegleCollectionRuleDefinition<any, any> ? NonNullable<TState[TKey]> extends Array<Record<string, any> | any> ? ExtractFromGetter<TRule['$each']> extends RegleRuleDecl | ReglePartialValidationTree<any> ? RegleCollectionStatus<TState[TKey], ExtractFromGetter<TRule['$each']>, TRule> : never : RegleFieldStatus<TState[TKey], TRule> : TRule extends ReglePartialValidationTree<any> ? NonNullable<TState[TKey]> extends Array<any> ? RegleCommonStatus<TState[TKey]> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? RegleStatus<TState[TKey], TRule> : RegleFieldStatus<TState[TKey], TRule> : RegleFieldStatus<TState[TKey], TRule>;
617
+ type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialValidationTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string, TShortcuts extends RegleShortcutDefinition = never> = TRule extends RegleCollectionRuleDefinition<any, any> ? NonNullable<TState[TKey]> extends Array<Record<string, any> | any> ? ExtractFromGetter<TRule['$each']> extends RegleRuleDecl | ReglePartialValidationTree<any> ? RegleCollectionStatus<TState[TKey], ExtractFromGetter<TRule['$each']>, TRule, TShortcuts> : never : RegleFieldStatus<TState[TKey], TRule, 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, never, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts>;
599
618
  /**
600
619
  * @public
601
620
  */
602
- interface RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>> extends Omit<RegleCommonStatus<TState>, '$value'> {
621
+ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = never> = Omit<RegleCommonStatus<TState>, '$value'> & {
603
622
  $value: Maybe<UnwrapNestedRefs<TState>>;
604
623
  readonly $errors: string[];
605
624
  readonly $silentErrors: string[];
606
- readonly $externalErrors?: string[];
625
+ readonly $externalErrors: string[];
607
626
  $extractDirtyFields: (filterNullishValues?: boolean) => Maybe<TState>;
608
627
  readonly $rules: {
609
628
  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
629
  };
611
- }
630
+ } & ([TShortcuts['fields']] extends [never] ? {} : {
631
+ [K in keyof TShortcuts['fields']]: ReturnType<NonNullable<TShortcuts['fields']>[K]>;
632
+ });
612
633
  /**
613
634
  * @public
614
635
  */
@@ -620,6 +641,7 @@ interface RegleCommonStatus<TValue = any> {
620
641
  readonly $pending: boolean;
621
642
  readonly $error: boolean;
622
643
  readonly $ready: boolean;
644
+ readonly $name: string;
623
645
  $id?: string;
624
646
  $value: UnwrapNestedRefs<TValue>;
625
647
  $touch(): void;
@@ -652,14 +674,17 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
652
674
  /**
653
675
  * @public
654
676
  */
655
- interface RegleCollectionStatus<TState extends any[] = any[], TRules extends RegleRuleDecl | ReglePartialValidationTree<any> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never> extends Omit<RegleFieldStatus<TState, TRules>, '$errors' | '$silentErrors' | '$extractDirtyFields'> {
656
- readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number>>;
657
- readonly $field: RegleFieldStatus<TState, TFieldRule>;
677
+ type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePartialValidationTree<Record<string, any>> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never, TShortcuts extends RegleShortcutDefinition = never> = Omit<RegleFieldStatus<TState, TRules, TShortcuts>, '$errors' | '$silentErrors' | '$extractDirtyFields' | '$externalErrors' | '$rules' | '$value'> & {
678
+ $value: Maybe<TState>;
679
+ readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number, TShortcuts>>;
680
+ readonly $field: RegleFieldStatus<TState, TFieldRule, TShortcuts>;
658
681
  readonly $errors: RegleErrorTree<TRules>;
659
682
  readonly $silentErrors: RegleErrorTree<TRules>;
660
683
  $extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
661
684
  $parse: () => Promise<false | SafeProperty<TState, TRules>>;
662
- }
685
+ } & ([TShortcuts['collections']] extends [never] ? {} : {
686
+ [K in keyof TShortcuts['collections']]: ReturnType<NonNullable<TShortcuts['collections']>[K]>;
687
+ });
663
688
 
664
689
  /**
665
690
  * @description
@@ -700,12 +725,13 @@ declare function createRule<TValue extends any, TParams extends any[], TReturn e
700
725
  */
701
726
  declare function unwrapRuleParameters<TParams extends any[]>(params: ParamDecl[]): TParams;
702
727
 
703
- declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>>({ rules, modifiers, }: {
728
+ declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<TCustomRules>>({ rules, modifiers, shortcuts, }: {
704
729
  rules?: () => TCustomRules;
705
730
  modifiers?: RegleBehaviourOptions;
731
+ shortcuts?: TShortcuts;
706
732
  }): {
707
- useRegle: useRegleFn<TCustomRules>;
733
+ useRegle: useRegleFn<TCustomRules, TShortcuts>;
708
734
  inferRules: inferRulesFn<TCustomRules>;
709
735
  };
710
736
 
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 RegleRequiredRules, 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 };
737
+ export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type 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 q(e){return e.map(t=>t instanceof Function?t():unref(t))}function tt(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function rt(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(o=>o.trim()).filter(o=>o.includes("=")).length+e.length}function we(e,...t){let{message:r,validator:n,active:a,type:o,...u}=e,v=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator(S,...m){return e.validator(S,...q(m.length?m:t))},message(S,m){return typeof e.message=="function"?e.message(S,{...m,$params:q(m.$params?.length?m.$params:t)}):e.message},active(S,m){return typeof e.active=="function"?e.active(S,{...m,$params:q(m.$params?.length?m.$params:t)}):e.active??!0},exec(S){let m=e.validator(S,...q(t)),d;return m instanceof Promise?m.then(f=>(d=f,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)):(d=m,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)}},...u,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:v,_params:tt(t)}}function Oe(e){if(typeof e.validator=="function"){let r=we(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(rt(e.validator)>1){let a=function(...o){return we(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function L(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function nt(e){return L(e.value)}function K(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>K(n)))),r=="Map"&&(t=new Map([...e].map(n=>[K(n[0]),K(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,xt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=K(e[n]);}return t}function xt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function Ae(e,t,r){return e instanceof Function?e(t,r??0):e}function at(e,t){isRef(e)?e.value=t:e=t;}function lt(e,t){isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=isRef(e)?e.value[n]:e[n];a={},de(a,t[n]);});}function de(e,t){Object.entries({...unref(e),...t}).forEach(([r,n])=>{let a=isRef(e)?e.value:e,o=isRef(t[r])?t[r]._value:t[r],u=isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(o)&&o.forEach((v,E)=>{a[r][E]={},de(a[r][E],o[E]);})):L(o)?de(u,o):isRef(a[r])?a[r].value=o:a[r]=o;});}function ee(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function ye(e,t,r){let n,a=(...o)=>new Promise(u=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(u);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(u=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(u);},0);}),a}function Ct(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),u=Number(n[a]);if(o>u)return 1;if(u>o)return -1;if(!isNaN(o)&&isNaN(u))return 1;if(isNaN(o)&&!isNaN(u))return -1}return 0}var ie=Ct(version,"3.5.0")!==-1;function It(){return Math.floor(Math.random()*Date.now()).toString()}function Fe(){return typeof window>"u"?It():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Me(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),o=shallowRef(new Map);function u(s){let l=t.value.get(s);if(l)return l;{let x=ref({});return t.value.set(s,x),x}}function v(s){let l=r.value.get(s);if(l)return l;{let x=ref([]);return r.value.set(s,x),x}}function E(s,l,x){o.value.set(`${s}-${l}`,x);}function $(s,l){return o.value.get(`${s}-${l}`)}function S(s,l){s&&l!=null&&o.value.delete(`${s}-${l}`);}function m(s,l){n.value.set(s,l);}function d(s){return n.value.get(s)??!1}function f(s,l){e.value.set(s,l);}function c(s,l){let x=e.value.get(s);return x?I(l,x)?{valid:!0}:{valid:!1}:void 0}function I(s,l){let x=Object.keys(l),V=Object.keys(s);return V.length!==x.length||!V.every(P=>x.includes(P))?!1:V.every(P=>{let h=s[P],w=l[P];return !w||!h||typeof h=="function"||typeof w=="function"||typeof h=="number"||typeof h=="boolean"?!1:h._params?h._params?.every((O,_)=>{if(typeof w=="number"||typeof w=="boolean")return !0;{let M=q(w._params),H=q(h._params);return M?.[_]===H?.[_]}}):!0})}function C(s){let l=a.value.get(s);if(l)return l;{let x=ref(!1),V=ref(!0),G=ref({}),P=ref(!1);return a.value.set(s,{$pending:x,$valid:V,$metadata:G,$validating:P}),{$pending:x,$valid:V,$metadata:G,$validating:P}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:f,setDirtyEntry:m,checkRuleDeclEntry:c,getDirtyState:d,trySetRuleStatusRef:C,getFieldsEntry:u,getCollectionsEntry:v,getArrayStatus:$,addArrayStatus:E,deleteArrayStatus:S,arrayStatusStorage:o}}function ot(e,t){return L(e.value)&&L(t.value)&&!Object.entries(t.value).some(r=>me(r))}function st(e){return !!e.value&&"$each"in e.value}function it(e){return !!e.value&&L(e.value)}function me(e){return L(e)&&"_validator"in e}function ge(e){return typeof e.value!="function"}function Ve(e){return L(e)&&"$fields"in e}function je(e){return "$each"in e||"$errors"in e}function _e({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function ct({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:u,$debounce:v}){let E=effectScope(),$,S,m=ref(!1),{$pending:d,$valid:f,$metadata:c,$validating:I}=u.trySetRuleStatusRef(`${o}.${n}`);function C(){$=E.run(()=>{let h=computed(()=>({$invalid:!f.value,$params:H.value,...c.value})),w=computed(()=>ge(r)?typeof r.value.active=="function"?r.value.active(a.value,h.value):r.value.active:!0),O=computed(()=>{let y="",g=t?t[n]?.message:void 0;return g&&(typeof g=="function"?y=g(a.value,h.value):y=g),ge(r)&&(g&&!r.value._patched||(typeof r.value.message=="function"?y=r.value.message(a.value,h.value):y=r.value.message)),ee(y)&&(y="Error",console.warn(`No error message defined for ${o}.${n}`)),y}),_=computed(()=>ge(r)&&r.value.type?r.value.type:n),M=computed(()=>ge(r)?r.value.validator:r.value),H=computed(()=>typeof r.value=="function"?[]:q(r.value._params??[])),D=computed(()=>`${o}.${_.value}`);return {$active:w,$message:O,$type:_,$validator:M,$params:H,$path:D}}),S=watch($.$params,V,{deep:!0});}C();function s(){f.value=!0,e.value&&(d.value=!0);}async function l(){let h=$.$validator.value,w=h(a.value,...$.$params.value),O=!1,_=a.value;try{s();let M;if(w instanceof Promise?M=await w:M=w,a.value!==_)return !0;if(typeof M=="boolean")O=M;else {let{$valid:H,...D}=M;O=H,c.value=D;}}catch{O=!1;}finally{d.value=!1;}return O}let x=ye(l,v??200);async function V(){I.value=!0;let h=!1;if(me(r.value)&&r.value._async)h=await x();else {let w=$.$validator.value,O=w(a.value,...$.$params.value);if(O instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(O!=null)if(typeof O=="boolean")h=O;else {let{$valid:_,...M}=O;h=_,c.value=M;}}return f.value=h,I.value=!1,h}function G(){f.value=!0,c.value={},d.value=!1,I.value=!1,C();}function P(){S(),E.stop(),E=effectScope();}return reactive({...$,$pending:d,$valid:f,$metadata:c,_haveAsync:m,$validating:I,$validate:V,$unwatch:P,$watch:C,$reset:G})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:u,externalErrors:v,onUnwatch:E,$isArray:$,initialState:S,shortcuts:m}){let d=effectScope(),f,c=ref(!1),I=ref(!1),C=ref([]),s,l,x,V,G,P=()=>{};function h(){C.value=v.value??[];}h();function w(){let j=t.value,U=o.checkRuleDeclEntry(n,j);y.value=Object.fromEntries(Object.entries(j).filter(([W])=>W.startsWith("$"))),D.value=Object.fromEntries(Object.entries(t.value).filter(([W])=>!W.startsWith("$")).map(([W,Q])=>{if(Q){let De=toRef(()=>Q);return [W,ct({$dirty:c,customMessages:r,rule:De,ruleKey:W,state:e,path:n,storage:o,$debounce:y.value.$debounce})]}return []}).filter(W=>!!W.length)),M(),O(),U?.valid!=null&&(c.value=o.getDirtyState(n),c.value&&P()),o.addRuleDeclEntry(n,j);}function O(){P=f.$debounce.value?ye(H,f.$debounce.value??f.haveAnyAsyncRule?100:0):H;}function _(){D.value&&Object.entries(D.value).forEach(([j,U])=>{U.$unwatch();}),V(),c.value&&o.setDirtyEntry(n,c.value),s(),l(),x(),d.stop(),d=effectScope(),E?.(),G?.();}function M(){D.value&&Object.entries(D.value).forEach(([j,U])=>{U.$watch();}),f=d.run(()=>{let j=computed(()=>c.value),U=computed(()=>y.value.$debounce),W=computed(()=>y.value.$lazy!=null?y.value.$lazy:unref(u.lazy)),Q=computed(()=>y.value.$rewardEarly!=null?y.value.$rewardEarly:unref(u.rewardEarly)),De=computed(()=>y.value.$autoDirty!=null?y.value.$autoDirty:unref(u.autoDirty)),gt=computed(()=>Object.entries(D.value).some(([Z,J])=>J.$validating)),Ce=computed(()=>pe.value&&!he.value&&c.value),Le=computed(()=>Ce.value?_e({field:{$dirty:c.value,$externalErrors:C.value,$rules:D.value}}):[]),ze=computed(()=>_e({field:{$dirty:c.value,$externalErrors:C.value,$rules:D.value},silent:!0})),Je=computed(()=>!(pe.value||he.value)),he=computed(()=>I.value||!Q.value?Object.entries(D.value).some(([Z,J])=>J.$pending):!1),pe=computed(()=>C.value?.length?!0:!Q.value||Q.value&&I.value?Object.entries(D.value).some(([Z,J])=>!J.$valid):!1),Ye=computed(()=>a),Ie=computed(()=>c.value&&!ee(e.value)&&!gt.value?C.value?.length?!1:Q.value?Object.entries(D.value).every(([Z,J])=>J.$valid):!pe.value:!1),vt=computed(()=>Object.entries(D.value).some(([Z,J])=>J._haveAsync));function $t(){m?.fields&&Object.entries(m.fields).forEach(([Z,J])=>{let St=effectScope();Qe[Z]=St.run(()=>{let Xe=ref();return watchEffect(()=>{Xe.value=J({$dirty:c.value,$externalErrors:C.value,$value:e,$rules:D.value,$error:Ce.value,$pending:he.value,$invalid:pe.value,$valid:Ie.value,$errors:Le.value,$ready:Je.value,$silentErrors:ze.value,$anyDirty:j.value,$name:Ye.value});}),Xe});});}let Qe={};return $t(),watch(Ie,Z=>{Z&&(I.value=!1);}),{$error:Ce,$pending:he,$invalid:pe,$valid:Ie,$debounce:U,$lazy:W,$errors:Le,$ready:Je,$silentErrors:ze,$rewardEarly:Q,$autoDirty:De,$anyDirty:j,$name:Ye,haveAnyAsyncRule:vt,$shortcuts:Qe}}),x=watch(v,h),s=watch(e,()=>{f.$autoDirty.value&&(c.value||(c.value=!0)),t.value instanceof Function&&w(),P(),f.$rewardEarly.value;},{deep:$?!0:ie?1:!0}),V=watch(c,()=>{o.setDirtyEntry(n,c.value);}),l=watch(f.$valid,j=>{f.$rewardEarly.value&&j&&(I.value=!1);}),G=watch(f.haveAnyAsyncRule,O);}function H(){Object.entries(D.value).forEach(([j,U])=>{U.$validate();});}let D=ref(),y=ref();w();function g(){c.value=!1,C.value=[],Object.entries(D.value).forEach(([j,U])=>{U.$reset();}),f.$lazy.value||Object.entries(D.value).map(([j,U])=>U.$validate());}function p(){c.value||(c.value=!0,f.$rewardEarly.value,P());}let R=f.$debounce.value?ye(i,f.$debounce.value??0):i;async function i(){try{if(I.value=!0,f.$autoDirty.value&&c.value&&!f.$pending.value)return !f.$error.value;{let j=Object.entries(D.value).map(([W,Q])=>Q.$validate());return (await Promise.allSettled(j)).every(W=>W.status==="fulfilled"?W.value:!1)}}catch{return !1}}function b(){_(),e.value=at(e,S),g();}function T(j=!0){return c.value?e.value:null}function N(){C.value=[];}f.$lazy.value||i();let{$anyDirty:Y,$error:te,$errors:oe,$invalid:re,$name:B,$pending:F,$ready:A,$silentErrors:se,$valid:xe,$shortcuts:Se}=f;return reactive({$dirty:c,$error:te,$errors:oe,$valid:xe,$invalid:re,$pending:F,$silentErrors:se,$anyDirty:Y,$ready:A,$name:B,$externalErrors:C,$value:e,$rules:D,...Se,$reset:g,$touch:p,$validate:R,$unwatch:_,$watch:M,$resetAll:b,$extractDirtyFields:T,$clearExternalErrors:N})}function ft({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:u,rules:v,externalErrors:E,initialState:$,shortcuts:S,fieldName:m}){let d=v.$key?v.$key:Fe(),f=`${t}.${String(d)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?f=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:d,enumerable:!1,configurable:!1,writable:!1}}));let c=toRef(()=>E.value?.[r]),I=Te({state:o,rulesDef:toRef(()=>v),customMessages:u,path:f,storage:a,options:n,externalErrors:c,initialState:$?.[r],shortcuts:S,fieldName:m});if(I){let C=o.value?.$id;I.$id=C??String(d),a.addArrayStatus(e,I.$id,I);}return I}function Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:u,initialState:v,shortcuts:E,fieldName:$}){let S=effectScope(),m,d=effectScope(),f;if(Array.isArray(e.value)&&!t.value.$each)return null;let c=ref(),I=ref(e.value),C,s=ref({}),l=a.getCollectionsEntry(n);f=d.run(()=>{let p=computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(b=>typeof b!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(b=>me(b)):!1),R=computed(()=>u.value?je(u.value)?u.value.$errors??[]:[]:[]),i=computed(()=>u.value?je(u.value)?u.value.$each??[]:[]:[]);return {isPrimitiveArray:p,$externalErrorsField:R,$externalErrorsEach:i}}),x(),G();function x(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(c.value=Fe(),Object.defineProperties(e.value,{$id:{value:c.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(c.value=e.value.$id)),!f.isPrimitiveArray.value&&(I.value=s.value.$value,Array.isArray(e.value)&&t.value.$each?l.value=e.value.map((p,R)=>{let i=Ae(t.value.$each,toRef(()=>p),R);if(i){let b=ft({$id:c.value,path:n,rules:i,stateValue:toRef(()=>p),index:R,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:v[R],shortcuts:E,fieldName:$});return b||null}}).filter(p=>!!p):l.value=[],s.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:f.$externalErrorsField,$isArray:!0,initialState:v,shortcuts:E,fieldName:$}));}function V(){if(Array.isArray(e.value)){let p=K(l.value);l.value=e.value.map((R,i)=>{let b=toRef(()=>R);if(R.$id&&l.value.find(T=>T.$id===R.$id)){let T=a.getArrayStatus(c.value,R.$id);return T?(T.$value=b,T):null}else {let T=Ae(t.value.$each,b,i);if(T){let N=ft({$id:c.value,path:n,rules:T,stateValue:b,index:i,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:v[i],fieldName:$});return N||null}}}).filter(R=>!!R),p.filter(R=>!e.value.find(i=>R.$id===i.$id)).forEach((R,i)=>{a.deleteArrayStatus(c.value,i.toString());});}else l.value=[];}function G(){C=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?x():V();},{deep:ie?1:!0,flush:"pre"}),m=S.run(()=>{let p=computed(()=>s.value.$dirty&&l.value.every(A=>A.$dirty)),R=computed(()=>s.value.$anyDirty||l.value.some(A=>A.$dirty)),i=computed(()=>s.value.$invalid||l.value.some(A=>A.$invalid)),b=computed(()=>s.value.$valid&&l.value.every(A=>A.$valid)),T=computed(()=>s.value.$error||l.value.some(A=>A.$error)),N=computed(()=>!(i.value||Y.value)),Y=computed(()=>s.value.$pending||l.value.some(A=>A.$pending)),te=computed(()=>({$errors:s.value.$errors,$each:l.value.map(A=>A.$errors)})),oe=computed(()=>({$errors:s.value.$silentErrors,$each:l.value.map(A=>A.$silentErrors)})),re=computed(()=>$);function B(){E?.collections&&Object.entries(E?.collections).forEach(([A,se])=>{let xe=effectScope();F[A]=xe.run(()=>{let Se=ref();return watchEffect(()=>{Se.value=se({$dirty:p.value,$error:T.value,$pending:Y.value,$invalid:i.value,$valid:b.value,$errors:te.value,$ready:N.value,$silentErrors:oe.value,$anyDirty:R.value,$name:re.value,$each:l.value,$field:s.value,$value:e});}),Se});});}let F={};return B(),{$dirty:p,$anyDirty:R,$invalid:i,$valid:b,$error:T,$pending:Y,$errors:te,$silentErrors:oe,$ready:N,$name:re,$shortcuts:F}}),f.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),C());}function P(){C&&C(),s.value&&s.value.$unwatch(),l.value&&l.value.forEach(p=>{"$dirty"in p&&p.$unwatch();}),S.stop(),S=effectScope(),d.stop(),d=effectScope(!0);}function h(){s.value.$touch(),l.value.forEach(p=>{p.$touch();});}function w(){s.value.$reset(),l.value.forEach(p=>{p.$reset();});}async function O(){try{return (await Promise.all([s.value.$validate(),...l.value.map(R=>R.$validate())])).every(R=>!!R)}catch{return !1}}function _(){s.value.$clearExternalErrors(),l.value.forEach(p=>{p.$clearExternalErrors();});}function M(p=!0){let R=l.value.map(i=>{if(Ve(i))return i.$extractDirtyFields(p)});return p&&(R=R.filter(i=>L(i)?!ee(i):!!i)),R}function H(){console.log(v),P(),lt(e,v),w();}async function D(){return h(),await O()?e.value:!1}let{$shortcuts:y,...g}=m;return reactive({$field:s,...g,...y,$each:l,$value:e,$validate:O,$unwatch:P,$watch:G,$touch:h,$reset:w,$resetAll:H,$extractDirtyFields:M,$parse:D,$clearExternalErrors:_})}function Be({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:u,externalErrors:v,validationGroups:E,initialState:$,shortcuts:S,fieldName:m}){let d,f,c=null;function s(y=!0){l.value=null,triggerRef(l);let g=Object.fromEntries(Object.entries(e.value).map(([i,b])=>{if(b){let T=toRef(t.value,i),N=toRef(()=>b),Y=toRef(()=>v.value?.[i]);return [i,Te({state:T,rulesDef:N,customMessages:r,path:n?`${n}.${i}`:i,storage:o,options:u,externalErrors:Y,initialState:$?.[i],shortcuts:S,fieldName:i})]}return []}).filter(i=>!!i.length&&i[1]!=null)),p=Object.fromEntries(Object.entries(unref(v)??{}).filter(([i])=>!(i in e.value)).map(([i,b])=>{if(b){let T=toRef(()=>({})),N=toRef(()=>b);return [i,Te({state:ref(void 0),rulesDef:T,customMessages:r,path:n?`${n}.${i}`:i,storage:o,options:u,externalErrors:N,initialState:$?.[i],fieldName:i})]}return []})),R=Object.fromEntries(Object.entries(E?.(g)??{}).map(([i,b])=>b.length?[i,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(T=>[T,Ke(toRef(()=>b),T)])),...Object.fromEntries(["$errors","$silentErrors"].map(T=>[T,et(toRef(()=>b),T)]))}]:[]));l.value={...g,...p,...R},y&&P();}let l=o.getFieldsEntry(n);s();function x(){s(!1),Object.entries(l.value).forEach(([y,g])=>{g.$reset();}),P();}function V(){Object.entries(l.value).forEach(([y,g])=>{g.$touch();});}async function G(){try{return (await Promise.allSettled(Object.entries(l.value).map(([g,p])=>p.$validate()))).every(g=>g.status==="fulfilled"?g.value:!1)}catch{return !1}}function P(){a&&(c=watch(a,()=>{h(),s();},{deep:ie?1:!0,flush:"post"})),d=effectScope(),f=d.run(()=>{let y=computed(()=>!!Object.entries(l.value).length&&Object.entries(l.value).every(([B,F])=>F.$dirty)),g=computed(()=>Object.entries(l.value).some(([B,F])=>F.$dirty)),p=computed(()=>Object.entries(l.value).some(([B,F])=>F.$invalid)),R=computed(()=>Object.entries(l.value).every(([B,F])=>F.$valid)),i=computed(()=>y.value&&!T.value&&p.value),b=computed(()=>!(p.value||T.value)),T=computed(()=>Object.entries(l.value).some(([B,F])=>F.$pending)),N=computed(()=>Object.fromEntries(Object.entries(l.value).map(([B,F])=>[B,F.$errors]))),Y=computed(()=>Object.fromEntries(Object.entries(l.value).map(([B,F])=>[B,F.$silentErrors]))),te=computed(()=>m);function oe(){S?.nested&&Object.entries(S.nested).forEach(([B,F])=>{let A=effectScope();re[B]=A.run(()=>{let se=ref();return watchEffect(()=>{se.value=F({$dirty:y.value,$value:t,$error:i.value,$pending:T.value,$invalid:p.value,$valid:R.value,$ready:b.value,$anyDirty:g.value,$name:te.value,$silentErrors:Y.value,$errors:N.value,$fields:l.value});}),se});});}let re={};return oe(),{$dirty:y,$anyDirty:g,$invalid:p,$valid:R,$error:i,$pending:T,$errors:N,$silentErrors:Y,$ready:b,$name:te,$shortcuts:re}});}function h(){l.value&&Object.entries(l.value).forEach(([y,g])=>{g.$unwatch();}),c?.(),d.stop(),d=effectScope();}function w(){Object.entries(l.value).forEach(([y,g])=>{g.$clearExternalErrors();});}function O(){h(),de(t,$??{}),x();}function _(y=!0){let g=Object.entries(l.value).map(([p,R])=>[p,R.$extractDirtyFields(y)]);return y&&(g=g.filter(([p,R])=>L(R)?!ee(R):Array.isArray(R)?R.length:!!R)),Object.fromEntries(g)}async function M(){return V(),await G()?t.value:!1}let{$shortcuts:H,...D}=f;return reactive({...D,...H,$fields:l,$value:t,$resetAll:O,$reset:x,$touch:V,$validate:G,$unwatch:h,$watch:P,$clearExternalErrors:w,$extractDirtyFields:_,$parse:M})}function Te({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:u,index:v,initialState:E,shortcuts:$,onUnwatch:S,fieldName:m}){return st(t)?Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:v,externalErrors:u,initialState:E,fieldName:m,shortcuts:$}):ot(e,t)&&nt(e)?Be({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:v,initialState:E,shortcuts:$,fieldName:m,externalErrors:u}):it(t)?Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:v,externalErrors:u,onUnwatch:S,shortcuts:$,initialState:E,fieldName:m}):null}function Ue({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o}){let u=Me(),v=computed(()=>unref(t.externalErrors));return reactive(Be({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:u,options:t,externalErrors:v,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root"}))}function We(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function a(o,u,v){let E=isRef(u)?u:computed(typeof u=="function"?u:()=>u),$={...n,...v},S=isRef(o)?o:ref(o),m=K(toRaw(S.value));return {r$:Ue({scopeRules:E,state:S,options:$,initialState:m,customRules:e,shortcuts:r})}}return a}var yt=We();function He(){function e(t,r){return r}return e}var qe=He();function mt({rules:e,modifiers:t,shortcuts:r}){let n=We(e,t,r),a=He();return {useRegle:n,inferRules:a}}export{Pe as InternalRuleType,Oe as createRule,mt as defineRegleConfig,qe as inferRules,q as unwrapRuleParameters,yt as useRegle};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regle/core",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "description": "Typescript-first model-based form validation library for Vue 3",
5
5
  "peerDependencies": {
6
6
  "vue": "^3.1.0"