@regle/core 0.2.4 → 0.2.6

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