@regle/core 0.3.2 → 0.4.0

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/README.md CHANGED
@@ -8,9 +8,6 @@
8
8
  Regle \ʁɛɡl\ (French word for 'rule' ) is a Typescript-first model-based validation library for Vue 3.
9
9
  It's heavily inspired by Vuelidate.
10
10
 
11
- > ⚠️ Project is still in development, do not use it in production
12
- > API or function names can still change
13
-
14
11
 
15
12
  # 📚 Documentation
16
13
 
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var vue=require('vue');var xe=(t=>(t.Inline="__inline",t.Async="__async",t))(xe||{});function ke(e,r){return e.some(t=>t[r])}function qe(e,r){return e.reduce((t,a)=>{let n=a[r]||[];return t.concat(n)},[])}function k(e){return e.map(r=>r instanceof Function?r():vue.unref(r))}function ze(e){return e.map(r=>r instanceof Function||vue.isRef(r)?r:vue.toRef(()=>r))}function Je(e){let a=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return a?(a[0]||a[1]||a[2]||a[3]||a[4]||"").split(",").map(d=>d.trim()).filter(d=>d.length>0).length:0}function De(e,...r){let{validator:t,type:a}=e,n=a==="__async"||t.constructor.name==="AsyncFunction";return {...{validator(v,...c){return e.validator(v,...k(c.length?c:r))},message(v,c){return typeof e.message=="function"?e.message(v,{...c,$params:k(c.$params?.length?c.$params:r)}):e.message},active(v,c){return typeof e.active=="function"?e.active(v,{...c,$params:k(c.$params?.length?c.$params:r)}):e.active??!0},tooltip(v,c){return typeof e.tooltip=="function"?e.tooltip(v,{...c,$params:k(c.$params?.length?c.$params:r)}):e.tooltip??[]},exec(v){let c=e.validator(v,...k(r)),g;return c instanceof Promise?c.then(w=>(g=w,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)):(g=c,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_patched:!1,_async:n,_params:ze(r)}}function Ce(e){if(typeof e.validator=="function"){let t=De(e,...[]),a=e.validator.constructor.name==="AsyncFunction";if(Je(e.validator)>1){let n=function(...s){return De(e,...s)};return n.validator=t.validator,n.message=t.message,n.active=t.active,n.tooltip=t.tooltip,n.type=t.type,n.exec=t.exec,n._validator=t.validator,n._message=t.message,n._active=t.active,n._tooltip=t.tooltip,n._type=e.type,n._patched=!1,n._async=a,n}else return t}throw new Error("Validator must be a function")}function q(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ye(e){return q(e.value)}function ee(e){let r=e,t={}.toString.call(e).slice(8,-1);if(t=="Set"&&(r=new Set([...e].map(a=>ee(a)))),t=="Map"&&(r=new Map([...e].map(a=>[ee(a[0]),ee(a[1])]))),t=="Date"&&(r=new Date(e.getTime())),t=="RegExp"&&(r=RegExp(e.source,ht(e))),t=="Array"||t=="Object"){r=Array.isArray(e)?[]:{};for(let a in e)r[a]=ee(e[a]);}return r}function ht(e){if(typeof e.source.flags=="string")return e.source.flags;{let r=[];return e.global&&r.push("g"),e.ignoreCase&&r.push("i"),e.multiline&&r.push("m"),e.sticky&&r.push("y"),e.unicode&&r.push("u"),r.join("")}}function Ie(e,r,t){return e instanceof Function?e(r,t??0):e}function Qe(e,r){vue.isRef(e)?e.value=r:e=r;}function Xe(e,r){vue.isRef(e)?e.value=[]:e=[],r.forEach((t,a)=>{let n=vue.isRef(e)?e.value[a]:e[a];n={},ie(n,r[a]);});}function ie(e,r){Object.entries({...vue.unref(e),...r}).forEach(([t,a])=>{let n=vue.isRef(e)?e.value:e,s=vue.isRef(r[t])?r[t]._value:r[t],d=vue.isRef(n[t])?n[t].value:n[t];Array.isArray(n[t])?(n[t]=[],Array.isArray(s)&&s.forEach((v,c)=>{n[t][c]={},ie(n[t][c],s[c]);})):q(s)?ie(d,s):vue.isRef(n[t])?n[t].value=s:n[t]=s;});}function ge(e,r,t){let a,n=(...s)=>new Promise(d=>{clearTimeout(a),a=setTimeout(()=>{a=void 0,Promise.resolve(e.apply(this,[...s])).then(d);},r);});return n.cancel=()=>{clearTimeout(a),a=void 0;},n}function Tt(e,r){let t=String(e).split("."),a=String(r).split(".");for(let n=0;n<Math.min(t.length,a.length);n++){let s=Number(t[n]),d=Number(a[n]);if(s>d)return 1;if(d>s)return -1;if(!isNaN(s)&&isNaN(d))return 1;if(isNaN(s)&&!isNaN(d))return -1}return 0}var $e=Tt(vue.version,"3.5.0")!==-1;function Et(){return Math.floor(Math.random()*Date.now()).toString()}function Se(){return typeof window>"u"?Et():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Pe(){let e=vue.shallowRef(new Map),r=vue.shallowRef(new Map),t=vue.shallowRef(new Map),a=vue.shallowRef(new Map),n=vue.shallowRef(new Map),s=vue.shallowRef(new Map);function d(u){let i=r.value.get(u);if(i)return i;{let f=vue.ref({});return r.value.set(u,f),f}}function v(u){let i=t.value.get(u);if(i)return i;{let f=vue.ref([]);return t.value.set(u,f),f}}function c(u,i,f){s.value.set(`${u}-${i}`,f);}function g(u,i){return s.value.get(`${u}-${i}`)}function w(u,i){u&&i!=null&&s.value.delete(`${u}-${i}`);}function G(u,i){a.value.set(u,i);}function C(u){return a.value.get(u)??!1}function R(u,i){e.value.set(u,i);}function x(u,i){let f=e.value.get(u);return f?p(i,f)?{valid:!0}:{valid:!1}:void 0}function p(u,i){let f=Object.keys(i),j=Object.keys(u);return j.length!==f.length||!j.every(O=>f.includes(O))?!1:j.every(O=>{let b=u[O],A=i[O];return !A||!b||typeof b=="function"||typeof A=="function"||typeof b=="number"||typeof b=="boolean"?!1:b._params?b._params?.every((I,L)=>{if(typeof A=="number"||typeof A=="boolean")return !0;{let y=k(A._params),P=k(b._params);return y?.[L]===P?.[L]}}):!0})}function F(u){let i=n.value.get(u);if(i)return i;{let f=vue.ref(!1),j=vue.ref(!0),V=vue.ref({}),O=vue.ref(!1);return n.value.set(u,{$pending:f,$valid:j,$metadata:V,$validating:O}),{$pending:f,$valid:j,$metadata:V,$validating:O}}}return vue.onScopeDispose(()=>{e.value.clear(),r.value.clear(),t.value.clear(),a.value.clear(),n.value.clear(),s.value.clear();}),{addRuleDeclEntry:R,setDirtyEntry:G,checkRuleDeclEntry:x,getDirtyState:C,trySetRuleStatusRef:F,getFieldsEntry:d,getCollectionsEntry:v,getArrayStatus:g,addArrayStatus:c,deleteArrayStatus:w,arrayStatusStorage:s}}function Y(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}function Ze(e,r){return q(e.value)&&q(r.value)&&!Object.entries(r.value).some(t=>ce(t))}function Ke(e,r){return !!e.value&&"$each"in e.value||Array.isArray(r.value)}function et(e){return !!e.value&&q(e.value)}function ce(e){return q(e)&&"_validator"in e}function fe(e){return typeof e.value!="function"}function tt(e){return q(e)&&"$fields"in e}function Oe({field:e,silent:r=!1}){return Object.entries(e.$rules??{}).map(([t,a])=>r||!a.$valid&&e.$dirty&&!a.$validating?a.$message:null).filter(t=>!!t).reduce((t,a)=>typeof a=="string"?t?.concat([a]):t?.concat(a),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function rt({field:e}){return Object.entries(e.$rules??{}).map(([r,t])=>t.$tooltip).filter(r=>!!r).reduce((r,t)=>typeof t=="string"?r?.concat([t]):r?.concat(t),[])}function at({$dirty:e,customMessages:r,rule:t,ruleKey:a,state:n,path:s,storage:d,$debounce:v}){let c=vue.effectScope(),g,w,G=vue.ref(!1),{$pending:C,$valid:R,$metadata:x,$validating:p}=d.trySetRuleStatusRef(`${s}.${a}`);function F(){g=c.run(()=>{let b=vue.computed(()=>({$invalid:!R.value,$params:D.value,...x.value})),A=vue.computed(()=>fe(t)?typeof t.value.active=="function"?t.value.active(n.value,b.value):!!t.value.active:!0);function I(o){let m="",l=r?r[a]?.[o]:void 0;return l&&(typeof l=="function"?m=l(n.value,b.value):m=l),fe(t)&&(l&&!t.value._patched||(typeof t.value[o]=="function"?m=t.value[o](n.value,b.value):m=t.value[o]??"")),m}let L=vue.computed(()=>{let o=I("message");return Y(o)&&(o="Error",console.warn(`No error message defined for ${s}.${a}`)),o}),y=vue.computed(()=>I("tooltip")),P=vue.computed(()=>fe(t)&&t.value.type?t.value.type:a),T=vue.computed(()=>fe(t)?t.value.validator:t.value),D=vue.computed(()=>typeof t.value=="function"?[]:k(t.value._params??[])),_=vue.computed(()=>`${s}.${P.value}`);return {$active:A,$message:L,$type:P,$validator:T,$params:D,$path:_,$tooltip:y}}),w=vue.watch(g.$params,j,{deep:!0});}F();function u(){R.value=!0,e.value&&(C.value=!0);}async function i(){let b=g.$validator.value,A=b(n.value,...g.$params.value),I=!1,L=n.value;try{u();let y;if(A instanceof Promise?y=await A:y=A,n.value!==L)return !0;if(typeof y=="boolean")I=y;else {let{$valid:P,...T}=y;I=P,x.value=T;}}catch{I=!1;}finally{C.value=!1;}return I}let f=ge(i,v??200);async function j(){try{p.value=!0;let b=!1;if(ce(t.value)&&t.value._async)b=await f();else {let A=g.$validator.value,I=A(n.value,...g.$params.value);if(I 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(I!=null)if(typeof I=="boolean")b=I;else {let{$valid:L,...y}=I;b=L,x.value=y;}}return R.value=b,b}catch{return !1}finally{p.value=!1;}}function V(){R.value=!0,x.value={},C.value=!1,p.value=!1,F();}function O(){w(),c.stop(),c=vue.effectScope();}return vue.reactive({...g,$pending:C,$valid:R,$metadata:x,$haveAsync:G,$validating:p,$validate:j,$unwatch:O,$watch:F,$reset:V})}function be({state:e,rulesDef:r,customMessages:t,path:a,fieldName:n,storage:s,options:d,externalErrors:v,onUnwatch:c,$isArray:g,initialState:w,shortcuts:G}){let C=vue.effectScope(),R,x=[],p=vue.ref(!1),F=vue.ref(!1),u,i,f,j,V=()=>{};function O(){let $=r.value,W=s.checkRuleDeclEntry(a,$);P.value=Object.fromEntries(Object.entries($).filter(([H])=>H.startsWith("$"))),y.value=Object.fromEntries(Object.entries(r.value).filter(([H])=>!H.startsWith("$")).map(([H,U])=>{if(U){let M=vue.toRef(()=>U);return [H,at({$dirty:p,customMessages:t,rule:M,ruleKey:H,state:e,path:a,storage:s,$debounce:P.value.$debounce})]}return []}).filter(H=>!!H.length)),I(),b(),W?.valid!=null&&(p.value=s.getDirtyState(a),p.value&&V()),s.addRuleDeclEntry(a,$);}function b(){V=R.$debounce.value?ge(L,R.$debounce.value??R.$haveAnyAsyncRule?100:0):L;}function A(){y.value&&Object.entries(y.value).forEach(([$,W])=>{W.$unwatch();}),f(),p.value&&s.setDirtyEntry(a,p.value),u?.(),i?.(),C.stop(),C=vue.effectScope(),x.forEach($=>$.stop()),x=[],c?.(),j?.();}function I(){y.value&&Object.entries(y.value).forEach(([$,W])=>{W.$watch();}),R=C.run(()=>{let $=vue.computed(()=>p.value),W=vue.computed(()=>P.value.$debounce),H=vue.computed(()=>P.value.$lazy!=null?P.value.$lazy:vue.unref(d.lazy)),U=vue.computed(()=>E.value===!0?!1:P.value.$rewardEarly!=null?P.value.$rewardEarly:vue.unref(d.rewardEarly)),M=vue.computed(()=>P.value.$clearExternalErrorsOnChange!=null?P.value.$clearExternalErrorsOnChange:vue.unref(d.clearExternalErrorsOnChange)),E=vue.computed(()=>P.value.$autoDirty!=null?P.value.$autoDirty:vue.unref(d.autoDirty)),h=vue.computed(()=>Object.entries(y.value).some(([X,K])=>K.$validating)),Z=vue.computed(()=>ve.value&&!ye.value&&p.value),se=vue.computed(()=>Z.value?Oe({field:{$dirty:p.value,$externalErrors:v?.value,$rules:y.value}}):[]),ue=vue.computed(()=>Z.value?rt({field:{$rules:y.value}}):[]),Ne=vue.computed(()=>Oe({field:{$dirty:p.value,$externalErrors:v?.value,$rules:y.value},silent:!0})),We=vue.computed(()=>!(ve.value||ye.value)),ye=vue.computed(()=>F.value||!U.value?Object.entries(y.value).some(([X,K])=>K.$pending):!1),ve=vue.computed(()=>v?.value?.length?!0:Y(y.value)?!1:!U.value||U.value&&F.value?Object.entries(y.value).some(([X,K])=>!K.$valid):!1),Ue=vue.computed(()=>n),Ee=vue.computed(()=>v?.value?.length||Y(y.value)?!1:p.value&&!Y(e.value)&&!h.value?Object.values(y.value).every(X=>X.$valid&&X.$active):!1),mt=vue.computed(()=>Object.entries(y.value).some(([X,K])=>K.$haveAsync));function yt(){G?.fields&&Object.entries(G.fields).forEach(([X,K])=>{let He=vue.effectScope();Be[X]=He.run(()=>{let Le=vue.ref();return vue.watchEffect(()=>{Le.value=K(vue.reactive({$dirty:p,$externalErrors:v?.value??[],$value:e,$rules:y,$error:Z,$pending:ye,$invalid:ve,$valid:Ee,$errors:se,$ready:We,$silentErrors:Ne,$anyDirty:$,$tooltips:ue,$name:Ue}));}),Le}),x.push(He);});}let Be={};return yt(),vue.watch(Ee,X=>{X&&(F.value=!1);}),{$error:Z,$pending:ye,$invalid:ve,$valid:Ee,$debounce:W,$lazy:H,$errors:se,$ready:We,$silentErrors:Ne,$rewardEarly:U,$autoDirty:E,$clearExternalErrorsOnChange:M,$anyDirty:$,$name:Ue,$haveAnyAsyncRule:mt,$shortcuts:Be,$validating:h,$tooltips:ue}}),u=vue.watch(e,()=>{R.$autoDirty.value&&(p.value||(p.value=!0)),r.value instanceof Function&&O(),(R.$autoDirty.value||R.$rewardEarly.value&&R.$error.value)&&V(),R.$rewardEarly.value!==!0&&R.$clearExternalErrorsOnChange.value&&l();},{deep:g?!0:$e?1:!0}),f=vue.watch(p,()=>{s.setDirtyEntry(a,p.value);}),i=vue.watch(R.$valid,$=>{R.$rewardEarly.value&&$&&(F.value=!1);}),j=vue.watch(R.$haveAnyAsyncRule,b);}function L(){Object.values(y.value).forEach($=>{$.$validate();});}let y=vue.ref(),P=vue.ref();O();function T(){l(),p.value=!1,Object.entries(y.value).forEach(([$,W])=>{W.$reset();}),!R.$lazy.value&&R.$autoDirty.value&&Object.values(y.value).forEach($=>$.$validate());}function D($=!0,W=!1){p.value||(p.value=!0),W&&$?(R.$autoDirty.value||R.$rewardEarly.value&&R.$error.value)&&V():$&&V();}async function _(){try{let $=e.value;if(F.value=!0,!p.value)p.value=!0;else if(R.$autoDirty.value&&p.value&&!R.$pending.value)return {result:!R.$error.value,data:$};return Y(y.value)?{result:!0,data:$}:{result:(await Promise.allSettled(Object.entries(y.value).map(([U,M])=>M.$validate()))).every(U=>U.status==="fulfilled"?U.value===!0:!1),data:$}}catch{return {result:!1,data:e.value}}}function o(){A(),e.value=Qe(e,w),T();}function m($=!0){return p.value?e.value:null}function l(){v?.value?.length&&(v.value=[]);}!R.$lazy.value&&!p.value&&R.$autoDirty.value&&V();let{$shortcuts:S,$validating:N,...J}=R;return vue.reactive({$dirty:p,...J,$externalErrors:v,$value:e,$rules:y,...S,$reset:T,$touch:D,$validate:_,$unwatch:A,$watch:I,$resetAll:o,$extractDirtyFields:m,$clearExternalErrors:l})}function Ae({$id:e,path:r,index:t,options:a,storage:n,stateValue:s,customMessages:d,rules:v,externalErrors:c,initialState:g,shortcuts:w,fieldName:G}){let C=v.$key?v.$key:Se(),R=`${r}.${String(C)}`;typeof s.value=="object"&&s.value!=null&&(s.value.$id?R=`${r}.${s.value.$id}`:Object.defineProperties(s.value,{$id:{value:C,enumerable:!1,configurable:!1,writable:!1}}));let x=de({state:s,rulesDef:vue.toRef(()=>v),customMessages:d,path:R,storage:n,options:a,externalErrors:vue.toRef(c?.value??[],t),initialState:g?.[t],shortcuts:w,fieldName:G});if(x){let p=s.value?.$id;x.$id=p??String(C),n.addArrayStatus(e,x.$id,x);}return x}function ut({state:e,rulesDef:r,customMessages:t,path:a,storage:n,options:s,externalErrors:d,initialState:v,shortcuts:c,fieldName:g}){let w=vue.effectScope(),G,C=vue.effectScope(),R,x=[];if(!Array.isArray(e.value)&&!r.value.$each)return null;let p=vue.ref(),F=vue.ref(e.value),u,i=vue.ref({}),f=n.getCollectionsEntry(a);R=C.run(()=>({isPrimitiveArray:vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(m=>typeof m!="object"):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(m=>ce(m)):!1)})),j(),O();function j(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(p.value=Se(),Object.defineProperties(e.value,{$id:{value:p.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(p.value=e.value.$id)),!R.isPrimitiveArray.value&&(F.value=i.value.$value,Array.isArray(e.value)?f.value=e.value.map((o,m)=>{let l=Ie(r.value.$each,vue.toRef(()=>o),m),S=Ae({$id:p.value,path:a,customMessages:t,rules:l??{},stateValue:vue.toRef(()=>o),index:m,options:s,storage:n,externalErrors:vue.toRef(d?.value??{},"$each"),initialState:v?.[m],shortcuts:c,fieldName:g});return S||null}).filter(o=>!!o):f.value=[],i.value=be({state:e,rulesDef:r,customMessages:t,path:a,storage:n,options:s,externalErrors:vue.toRef(d?.value??{},"$self"),$isArray:!0,initialState:v,shortcuts:c,fieldName:g}));}function V(){if(Array.isArray(e.value)){let o=ee(f.value);f.value=e.value.map((m,l)=>{let S=vue.toRef(()=>m);if(m.$id&&f.value.find(N=>N.$id===m.$id)){let N=n.getArrayStatus(p.value,m.$id);return N?(N.$value=S,N):null}else {let N=Ie(r.value.$each,S,l);if(N){let J=Ae({$id:p.value,path:a,customMessages:t,rules:N,stateValue:S,index:l,options:s,storage:n,externalErrors:vue.toRef(d?.value??{},"$each"),initialState:v?.[l],shortcuts:c,fieldName:g});return J||null}}}).filter(m=>!!m),o.filter(m=>!e.value.find(l=>m.$id===l.$id)).forEach((m,l)=>{n.deleteArrayStatus(p.value,l.toString());});}else f.value=[];}function O(){u=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?j():V();},{deep:$e?1:!0,flush:"pre"}),G=w.run(()=>{let o=vue.computed(()=>i.value.$dirty&&f.value.every(h=>h.$dirty)),m=vue.computed(()=>i.value.$anyDirty||f.value.some(h=>h.$dirty)),l=vue.computed(()=>i.value.$invalid||f.value.some(h=>h.$invalid)),S=vue.computed(()=>(Y(i.value.$rules)?!0:i.value.$valid)&&f.value.every(h=>h.$valid)),N=vue.computed(()=>i.value.$error||f.value.some(h=>h.$error)),J=vue.computed(()=>!(l.value||$.value)),$=vue.computed(()=>i.value.$pending||f.value.some(h=>h.$pending)),W=vue.computed(()=>({$self:i.value.$errors,$each:f.value.map(h=>h.$errors)})),H=vue.computed(()=>({$self:i.value.$silentErrors,$each:f.value.map(h=>h.$silentErrors)})),U=vue.computed(()=>g);function M(){c?.collections&&Object.entries(c?.collections).forEach(([h,Z])=>{let se=vue.effectScope();E[h]=se.run(()=>{let ue=vue.ref();return vue.watchEffect(()=>{ue.value=Z(vue.reactive({$dirty:o,$error:N,$pending:$,$invalid:l,$valid:S,$errors:W,$ready:J,$silentErrors:H,$anyDirty:m,$name:U,$each:f,$field:i,$value:e}));}),ue}),x.push(se);});}let E={};return M(),{$dirty:o,$anyDirty:m,$invalid:l,$valid:S,$error:N,$pending:$,$errors:W,$silentErrors:H,$ready:J,$name:U,$shortcuts:E}}),R.isPrimitiveArray.value&&(console.warn(`${a} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),u());}function b(){u&&u(),i.value&&i.value.$unwatch(),f.value&&f.value.forEach(o=>{"$dirty"in o&&o.$unwatch();}),w.stop(),w=vue.effectScope(),C.stop(),C=vue.effectScope(!0),x.forEach(o=>o.stop()),x=[];}function A(o=!0,m=!1){i.value.$touch(o,m),f.value.forEach(l=>{l.$touch(o,m);});}function I(){i.value.$reset(),f.value.forEach(o=>{o.$reset();});}async function L(){let o=e.value;try{return {result:(await Promise.allSettled([i.value.$validate(),...f.value.map(S=>S.$validate())])).every(S=>S.status==="fulfilled"?S.value.result===!0:!1),data:o}}catch{return {result:!1,data:o}}}function y(){i.value.$clearExternalErrors(),f.value.forEach(o=>{o.$clearExternalErrors();});}function P(o=!0){let m=f.value.map(l=>{if(tt(l))return l.$extractDirtyFields(o)});return o&&(m=m.filter(l=>q(l)?!Y(l):!!l)),m}function T(){b(),Xe(e,v),I();}let{$shortcuts:D,..._}=G;return vue.reactive({$field:i,..._,...D,$each:f,$value:e,$validate:L,$unwatch:b,$watch:O,$touch:A,$reset:I,$resetAll:T,$extractDirtyFields:P,$clearExternalErrors:y})}function Fe({rulesDef:e,state:r,path:t="",rootRules:a,externalErrors:n,validationGroups:s,initialState:d,fieldName:v,...c}){let g=vue.effectScope(),w,G=[],C=null,R=null,x=null;async function F(T=!0){let D=Object.entries(e.value),_=Object.fromEntries(D.filter(([l,S])=>!!S).map(([l,S])=>{if(S){let N=vue.toRef(r.value,l),J=vue.toRef(()=>S),$=vue.toRef(n?.value??{},l);return [l,de({state:N,rulesDef:J,path:t?`${t}.${l}`:l,externalErrors:$,initialState:d?.[l],fieldName:l,...c})]}return []})),o=Object.fromEntries(Object.entries(vue.unref(n)??{}).filter(([l,S])=>!(l in e.value)&&!!S).map(([l])=>{let S=vue.toRef(r.value,l);return [l,de({state:S,rulesDef:vue.computed(()=>({})),path:t?`${t}.${l}`:l,externalErrors:vue.toRef(n?.value??{},l),initialState:d?.[l],fieldName:l,...c})]})),m=Object.fromEntries(Object.entries(r.value).filter(([l])=>!(l in e.value)&&!(l in(o.value??{}))).map(([l])=>{let S=vue.toRef(r.value,l);return [l,de({state:S,rulesDef:vue.computed(()=>({})),path:t?`${t}.${l}`:l,externalErrors:vue.toRef(n?.value??{},l),initialState:d?.[l],fieldName:l,...c})]}));u.value={..._,...o,...m},T&&V();}let u=c.storage.getFieldsEntry(t);F();function i(){R?.(),Object.values(u.value).forEach(T=>{T.$reset();}),j();}function f(T=!0,D=!1){Object.values(u.value).forEach(_=>{_.$touch(T,D);});}function j(){n?.value&&(R=vue.watch(n,()=>{O(),F();},{deep:!0}));}function V(){a&&(C=vue.watch(a,()=>{O(),F();},{deep:!0,flush:"post"}),j()),x=vue.watch(r,()=>{O(),F(),f(!0,!0);},{flush:"sync"}),w=g.run(()=>{let T=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([M,E])=>E?.$dirty)),D=vue.computed(()=>Object.entries(u.value).some(([M,E])=>E?.$dirty)),_=vue.computed(()=>Object.entries(u.value).some(([M,E])=>E?.$invalid)),o=vue.computed(()=>Object.entries(u.value).every(([M,E])=>E?.$valid)),m=vue.computed(()=>D.value&&!S.value&&_.value),l=vue.computed(()=>vue.unref(c.options.autoDirty)?D.value&&!(_.value||S.value):!(_.value||S.value)),S=vue.computed(()=>Object.entries(u.value).some(([M,E])=>E?.$pending)),N=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([M,E])=>[M,E?.$errors]))),J=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([M,E])=>[M,E?.$silentErrors]))),$=vue.computed(()=>v);function W(){c.shortcuts?.nested&&Object.entries(c.shortcuts.nested).forEach(([M,E])=>{let h=vue.effectScope();U[M]=h.run(()=>{let Z=vue.ref();return vue.watchEffect(()=>{Z.value=E(vue.reactive({$dirty:T,$value:r,$error:m,$pending:S,$invalid:_,$valid:o,$ready:l,$anyDirty:D,$name:$,$silentErrors:J,$errors:N,$fields:u}));}),Z}),G.push(h);});}let H=vue.computed(()=>s?Object.fromEntries(Object.entries(s?.(u.value)??{}).map(([M,E])=>E.length?[M,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(h=>[h,ke(E,h)])),...Object.fromEntries(["$errors","$silentErrors"].map(h=>[h,qe(E,h)]))}]:[])):{}),U={};return W(),{$dirty:T,$anyDirty:D,$invalid:_,$valid:o,$error:m,$pending:S,$errors:N,$silentErrors:J,$ready:l,$name:$,$shortcuts:U,$groups:H}});}function O(){C?.(),R?.(),x?.(),G.forEach(T=>T.stop()),G=[],u.value&&Object.entries(u.value).forEach(([T,D])=>{D.$unwatch();});}function b(){Object.entries(u.value).forEach(([T,D])=>{D.$clearExternalErrors();});}function A(){O(),ie(r,d??{}),F(!1),i(),V();}function I(T=!0){let D=Object.entries(u.value).map(([_,o])=>[_,o.$extractDirtyFields(T)]);return T&&(D=D.filter(([_,o])=>q(o)?!Y(o):Array.isArray(o)?o.length:!!o)),Object.fromEntries(D)}async function L(){try{let T=r.value;return {result:(await Promise.allSettled(Object.values(u.value).map(o=>o.$validate()))).every(o=>o.status==="fulfilled"?o.value.result===!0:!1),data:T}}catch{return {result:!1,data:r.value}}}let{$shortcuts:y,...P}=w;return vue.reactive({...P,...y,$fields:u,$value:r,$resetAll:A,$reset:i,$touch:f,$validate:L,$unwatch:O,$watch:V,$clearExternalErrors:b,$extractDirtyFields:I})}function de({rulesDef:e,externalErrors:r,...t}){return Ke(e,t.state)?ut({rulesDef:e,externalErrors:r,...t}):Ze(t.state,e)&&Ye(t.state)?Fe({rulesDef:e,externalErrors:r,...t}):et(e)?be({rulesDef:e,externalErrors:r,...t}):null}function je({initialState:e,options:r,scopeRules:t,state:a,customRules:n,shortcuts:s}){let d=Pe();return vue.reactive(Fe({rootRules:t,rulesDef:t,state:a,customMessages:n?.(),storage:d,options:r,externalErrors:r.externalErrors,validationGroups:r.validationGroups,initialState:e,shortcuts:s,fieldName:"root",path:""}))}function Ve(e,r,t){let a={autoDirty:r?.autoDirty??!0,lazy:r?.lazy??!1,rewardEarly:r?.rewardEarly??!1,clearExternalErrorsOnChange:r?.clearExternalErrorsOnChange??!0};function n(s,d,v){let c=vue.isRef(d)?d:vue.computed(typeof d=="function"?d:()=>d),g={...a,...v},w=vue.isRef(s)?s:vue.ref(s),G=ee(vue.toRaw(w.value));return {r$:je({scopeRules:c,state:w,options:g,initialState:G,customRules:e,shortcuts:t})}}return n}var pt=Ve();function _e(){function e(r,t){return t}return e}var Ge=_e();function dt({rules:e,modifiers:r,shortcuts:t}){let a=Ve(e,r,t),n=_e();return {useRegle:a,inferRules:n}}
1
+ 'use strict';var vue=require('vue');var xe=(t=>(t.Inline="__inline",t.Async="__async",t))(xe||{});function ke(e,r){return e.some(t=>t[r])}function qe(e,r){return e.reduce((t,n)=>{let a=n[r]||[];return t.concat(a)},[])}function k(e){return e.map(r=>r instanceof Function?r():vue.unref(r))}function ze(e){return e.map(r=>r instanceof Function||vue.isRef(r)?r:vue.toRef(()=>r))}function Je(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(d=>d.trim()).filter(d=>d.length>0).length:0}function De(e,...r){let{validator:t,type:n}=e,a=n==="__async"||t.constructor.name==="AsyncFunction";return {...{validator(f,...v){return e.validator(f,...k(v.length?v:r))},message(f){return typeof e.message=="function"?e.message({...f,$params:k(f?.$params?.length?f.$params:r)}):e.message},active(f){return typeof e.active=="function"?e.active({...f,$params:k(f.$params?.length?f.$params:r)}):e.active??!0},tooltip(f){return typeof e.tooltip=="function"?e.tooltip({...f,$params:k(f.$params?.length?f.$params:r)}):e.tooltip??[]},exec(f){let v=e.validator(f,...k(r)),g;return v instanceof Promise?v.then(w=>(g=w,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)):(g=v,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:a,_params:ze(r)}}function Ce(e){if(typeof e.validator=="function"){let t=De(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Je(e.validator)>1){let a=function(...s){return De(e,...s)};return a.validator=t.validator,a.message=t.message,a.active=t.active,a.tooltip=t.tooltip,a.type=t.type,a.exec=t.exec,a._validator=t.validator,a._message=t.message,a._active=t.active,a._tooltip=t.tooltip,a._type=e.type,a._message_pacthed=!1,a._tooltip_pacthed=!1,a._async=n,a}else return t}throw new Error("Validator must be a function")}function q(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ye(e){return q(e.value)}function ee(e){let r=e,t={}.toString.call(e).slice(8,-1);if(t=="Set"&&(r=new Set([...e].map(n=>ee(n)))),t=="Map"&&(r=new Map([...e].map(n=>[ee(n[0]),ee(n[1])]))),t=="Date"&&(r=new Date(e.getTime())),t=="RegExp"&&(r=RegExp(e.source,ht(e))),t=="Array"||t=="Object"){r=Array.isArray(e)?[]:{};for(let n in e)r[n]=ee(e[n]);}return r}function ht(e){if(typeof e.source.flags=="string")return e.source.flags;{let r=[];return e.global&&r.push("g"),e.ignoreCase&&r.push("i"),e.multiline&&r.push("m"),e.sticky&&r.push("y"),e.unicode&&r.push("u"),r.join("")}}function Ie(e,r,t){return e instanceof Function?e(r,t??0):e}function Qe(e,r){vue.isRef(e)?e.value=r:e=r;}function Xe(e,r){vue.isRef(e)?e.value=[]:e=[],r.forEach((t,n)=>{let a=vue.isRef(e)?e.value[n]:e[n];a={},ie(a,r[n]);});}function ie(e,r){Object.entries({...vue.unref(e),...r}).forEach(([t,n])=>{let a=vue.isRef(e)?e.value:e,s=vue.isRef(r[t])?r[t]._value:r[t],d=vue.isRef(a[t])?a[t].value:a[t];Array.isArray(a[t])?(a[t]=[],Array.isArray(s)&&s.forEach((f,v)=>{a[t][v]={},ie(a[t][v],s[v]);})):q(s)?ie(d,s):vue.isRef(a[t])?a[t].value=s:a[t]=s;});}function ge(e,r,t){let n,a=(...s)=>new Promise(d=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...s])).then(d);},r);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a}function Tt(e,r){let t=String(e).split("."),n=String(r).split(".");for(let a=0;a<Math.min(t.length,n.length);a++){let s=Number(t[a]),d=Number(n[a]);if(s>d)return 1;if(d>s)return -1;if(!isNaN(s)&&isNaN(d))return 1;if(isNaN(s)&&!isNaN(d))return -1}return 0}var $e=Tt(vue.version,"3.5.0")!==-1;function Et(){return Math.floor(Math.random()*Date.now()).toString()}function Se(){return typeof window>"u"?Et():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Pe(){let e=vue.shallowRef(new Map),r=vue.shallowRef(new Map),t=vue.shallowRef(new Map),n=vue.shallowRef(new Map),a=vue.shallowRef(new Map),s=vue.shallowRef(new Map);function d(u){let i=r.value.get(u);if(i)return i;{let c=vue.ref({});return r.value.set(u,c),c}}function f(u){let i=t.value.get(u);if(i)return i;{let c=vue.ref([]);return t.value.set(u,c),c}}function v(u,i,c){s.value.set(`${u}-${i}`,c);}function g(u,i){return s.value.get(`${u}-${i}`)}function w(u,i){u&&i!=null&&s.value.delete(`${u}-${i}`);}function G(u,i){n.value.set(u,i);}function C(u){return n.value.get(u)??!1}function R(u,i){e.value.set(u,i);}function x(u,i){let c=e.value.get(u);return c?p(i,c)?{valid:!0}:{valid:!1}:void 0}function p(u,i){let c=Object.keys(i),j=Object.keys(u);return j.length!==c.length||!j.every(O=>c.includes(O))?!1:j.every(O=>{let b=u[O],A=i[O];return !A||!b||typeof b=="function"||typeof A=="function"||typeof b=="number"||typeof b=="boolean"?!1:b._params?b._params?.every((I,L)=>{if(typeof A=="number"||typeof A=="boolean")return !0;{let y=k(A._params),P=k(b._params);return y?.[L]===P?.[L]}}):!0})}function M(u){let i=a.value.get(u);if(i)return i;{let c=vue.ref(!1),j=vue.ref(!0),_=vue.ref({}),O=vue.ref(!1);return a.value.set(u,{$pending:c,$valid:j,$metadata:_,$validating:O}),{$pending:c,$valid:j,$metadata:_,$validating:O}}}return vue.onScopeDispose(()=>{e.value.clear(),r.value.clear(),t.value.clear(),n.value.clear(),a.value.clear(),s.value.clear();}),{addRuleDeclEntry:R,setDirtyEntry:G,checkRuleDeclEntry:x,getDirtyState:C,trySetRuleStatusRef:M,getFieldsEntry:d,getCollectionsEntry:f,getArrayStatus:g,addArrayStatus:v,deleteArrayStatus:w,arrayStatusStorage:s}}function Y(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}function Ze(e,r){return q(e.value)&&q(r.value)&&!Object.entries(r.value).some(t=>ce(t))}function Ke(e,r){return !!e.value&&"$each"in e.value||Array.isArray(r.value)}function et(e){return !!e.value&&q(e.value)}function ce(e){return q(e)&&"_validator"in e}function fe(e){return typeof e.value!="function"}function tt(e){return q(e)&&"$fields"in e}function Oe({field:e,silent:r=!1}){return Object.entries(e.$rules??{}).map(([t,n])=>r||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(t=>!!t).reduce((t,n)=>typeof n=="string"?t?.concat([n]):t?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function rt({field:e}){return Object.entries(e.$rules??{}).map(([r,t])=>t.$tooltip).filter(r=>!!r).reduce((r,t)=>typeof t=="string"?r?.concat([t]):r?.concat(t),[])}function at({$dirty:e,customMessages:r,rule:t,ruleKey:n,state:a,path:s,storage:d,$debounce:f}){let v=vue.effectScope(),g,w,G=vue.ref(!1),{$pending:C,$valid:R,$metadata:x,$validating:p}=d.trySetRuleStatusRef(`${s}.${n}`);function M(){g=v.run(()=>{let b=vue.computed(()=>({$value:a.value,$invalid:!R.value,$pending:C.value,$dirty:e.value,$params:D.value,...x.value})),A=vue.computed(()=>fe(t)?typeof t.value.active=="function"?t.value.active(b.value):!!t.value.active:!0);function I(o){let m="",l=r?r[n]?.[o]:void 0;if(l&&(typeof l=="function"?m=l(b.value):m=l),fe(t)){let $=`_${o}_patched`;l&&!t.value[$]||(typeof t.value[o]=="function"?m=t.value[o](b.value):m=t.value[o]??"");}return m}let L=vue.computed(()=>{let o=I("message");return Y(o)&&(o="This field is not valid"),o}),y=vue.computed(()=>I("tooltip")),P=vue.computed(()=>fe(t)&&t.value.type?t.value.type:n),T=vue.computed(()=>fe(t)?t.value.validator:t.value),D=vue.computed(()=>typeof t.value=="function"?[]:k(t.value._params??[])),V=vue.computed(()=>`${s}.${P.value}`);return {$active:A,$message:L,$type:P,$validator:T,$params:D,$path:V,$tooltip:y}}),w=vue.watch(g.$params,j,{deep:!0});}M();function u(){R.value=!0,e.value&&(C.value=!0);}async function i(){let b=g.$validator.value,A=b(a.value,...g.$params.value),I=!1,L=a.value;try{u();let y;if(A instanceof Promise?y=await A:y=A,a.value!==L)return !0;if(typeof y=="boolean")I=y;else {let{$valid:P,...T}=y;I=P,x.value=T;}}catch{I=!1;}finally{C.value=!1;}return I}let c=ge(i,f??200);async function j(){try{p.value=!0;let b=!1;if(ce(t.value)&&t.value._async)b=await c();else {let A=g.$validator.value,I=A(a.value,...g.$params.value);if(I 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(I!=null)if(typeof I=="boolean")b=I;else {let{$valid:L,...y}=I;b=L,x.value=y;}}return R.value=b,b}catch{return !1}finally{p.value=!1;}}function _(){R.value=!0,x.value={},C.value=!1,p.value=!1,M();}function O(){w(),v.stop(),v=vue.effectScope();}return vue.reactive({...g,$pending:C,$valid:R,$metadata:x,$haveAsync:G,$validating:p,$validate:j,$unwatch:O,$watch:M,$reset:_})}function be({state:e,rulesDef:r,customMessages:t,path:n,fieldName:a,storage:s,options:d,externalErrors:f,onUnwatch:v,$isArray:g,initialState:w,shortcuts:G}){let C=vue.effectScope(),R,x=[],p=vue.ref(!1),M=vue.ref(!1),u,i,c,j,_=()=>{};function O(){let S=r.value,W=s.checkRuleDeclEntry(n,S);P.value=Object.fromEntries(Object.entries(S).filter(([H])=>H.startsWith("$"))),y.value=Object.fromEntries(Object.entries(r.value).filter(([H])=>!H.startsWith("$")).map(([H,U])=>{if(U){let F=vue.toRef(()=>U);return [H,at({$dirty:p,customMessages:t,rule:F,ruleKey:H,state:e,path:n,storage:s,$debounce:P.value.$debounce})]}return []}).filter(H=>!!H.length)),I(),b(),W?.valid!=null&&(p.value=s.getDirtyState(n),p.value&&_()),s.addRuleDeclEntry(n,S);}function b(){_=R.$debounce.value?ge(L,R.$debounce.value??R.$haveAnyAsyncRule?100:0):L;}function A(){y.value&&Object.entries(y.value).forEach(([S,W])=>{W.$unwatch();}),c(),p.value&&s.setDirtyEntry(n,p.value),u?.(),i?.(),C.stop(),C=vue.effectScope(),x.forEach(S=>S.stop()),x=[],v?.(),j?.();}function I(){y.value&&Object.entries(y.value).forEach(([S,W])=>{W.$watch();}),R=C.run(()=>{let S=vue.computed(()=>p.value),W=vue.computed(()=>P.value.$debounce),H=vue.computed(()=>P.value.$lazy!=null?P.value.$lazy:vue.unref(d.lazy)),U=vue.computed(()=>E.value===!0?!1:P.value.$rewardEarly!=null?P.value.$rewardEarly:vue.unref(d.rewardEarly)),F=vue.computed(()=>P.value.$clearExternalErrorsOnChange!=null?P.value.$clearExternalErrorsOnChange:vue.unref(d.clearExternalErrorsOnChange)),E=vue.computed(()=>P.value.$autoDirty!=null?P.value.$autoDirty:vue.unref(d.autoDirty)),h=vue.computed(()=>Object.entries(y.value).some(([X,Z])=>Z.$validating)),K=vue.computed(()=>ve.value&&!ye.value&&p.value),se=vue.computed(()=>K.value?Oe({field:{$dirty:p.value,$externalErrors:f?.value,$rules:y.value}}):[]),ue=vue.computed(()=>rt({field:{$rules:y.value}})),Ne=vue.computed(()=>Oe({field:{$dirty:p.value,$externalErrors:f?.value,$rules:y.value},silent:!0})),We=vue.computed(()=>!(ve.value||ye.value)),ye=vue.computed(()=>M.value||!U.value?Object.entries(y.value).some(([X,Z])=>Z.$pending):!1),ve=vue.computed(()=>f?.value?.length?!0:Y(y.value)?!1:!U.value||U.value&&M.value?Object.entries(y.value).some(([X,Z])=>!Z.$valid):!1),Ue=vue.computed(()=>a),Ee=vue.computed(()=>f?.value?.length||Y(y.value)?!1:p.value&&!Y(e.value)&&!h.value?Object.values(y.value).every(X=>X.$valid&&X.$active):!1),mt=vue.computed(()=>Object.entries(y.value).some(([X,Z])=>Z.$haveAsync));function yt(){G?.fields&&Object.entries(G.fields).forEach(([X,Z])=>{let He=vue.effectScope();Be[X]=He.run(()=>{let Le=vue.ref();return vue.watchEffect(()=>{Le.value=Z(vue.reactive({$dirty:p,$externalErrors:f?.value??[],$value:e,$rules:y,$error:K,$pending:ye,$invalid:ve,$valid:Ee,$errors:se,$ready:We,$silentErrors:Ne,$anyDirty:S,$tooltips:ue,$name:Ue}));}),Le}),x.push(He);});}let Be={};return yt(),vue.watch(Ee,X=>{X&&(M.value=!1);}),{$error:K,$pending:ye,$invalid:ve,$valid:Ee,$debounce:W,$lazy:H,$errors:se,$ready:We,$silentErrors:Ne,$rewardEarly:U,$autoDirty:E,$clearExternalErrorsOnChange:F,$anyDirty:S,$name:Ue,$haveAnyAsyncRule:mt,$shortcuts:Be,$validating:h,$tooltips:ue}}),u=vue.watch(e,()=>{R.$autoDirty.value&&(p.value||(p.value=!0)),r.value instanceof Function&&O(),(R.$autoDirty.value||R.$rewardEarly.value&&R.$error.value)&&_(),R.$rewardEarly.value!==!0&&R.$clearExternalErrorsOnChange.value&&l();},{deep:g?!0:$e?1:!0}),c=vue.watch(p,()=>{s.setDirtyEntry(n,p.value);}),i=vue.watch(R.$valid,S=>{R.$rewardEarly.value&&S&&(M.value=!1);}),j=vue.watch(R.$haveAnyAsyncRule,b);}function L(){Object.values(y.value).forEach(S=>{S.$validate();});}let y=vue.ref(),P=vue.ref();O();function T(){l(),p.value=!1,s.setDirtyEntry(n,!1),Object.entries(y.value).forEach(([S,W])=>{W.$reset();}),!R.$lazy.value&&R.$autoDirty.value&&Object.values(y.value).forEach(S=>S.$validate());}function D(S=!0,W=!1){p.value||(p.value=!0),W&&S?(R.$autoDirty.value||R.$rewardEarly.value&&R.$error.value)&&_():S&&_();}async function V(){try{let S=e.value;if(M.value=!0,!p.value)p.value=!0;else if(R.$autoDirty.value&&p.value&&!R.$pending.value)return {result:!R.$error.value,data:S};return Y(y.value)?{result:!0,data:S}:{result:(await Promise.allSettled(Object.entries(y.value).map(([U,F])=>F.$validate()))).every(U=>U.status==="fulfilled"?U.value===!0:!1),data:S}}catch{return {result:!1,data:e.value}}}function o(){A(),e.value=Qe(e,w),T();}function m(S=!0){return p.value?e.value:null}function l(){f?.value?.length&&(f.value=[]);}!R.$lazy.value&&!p.value&&R.$autoDirty.value&&_();let{$shortcuts:$,$validating:N,...J}=R;return vue.reactive({$dirty:p,...J,$externalErrors:f,$value:e,$rules:y,...$,$reset:T,$touch:D,$validate:V,$unwatch:A,$watch:I,$resetAll:o,$extractDirtyFields:m,$clearExternalErrors:l})}function Ae({$id:e,path:r,index:t,options:n,storage:a,stateValue:s,customMessages:d,rules:f,externalErrors:v,initialState:g,shortcuts:w,fieldName:G}){let C=f.$key?f.$key:Se(),R=`${r}.${String(C)}`;typeof s.value=="object"&&s.value!=null&&(s.value.$id?R=`${r}.${s.value.$id}`:Object.defineProperties(s.value,{$id:{value:C,enumerable:!1,configurable:!1,writable:!1}}));let x=de({state:s,rulesDef:vue.toRef(()=>f),customMessages:d,path:R,storage:a,options:n,externalErrors:vue.toRef(v?.value??[],t),initialState:g?.[t],shortcuts:w,fieldName:G});if(x){let p=s.value?.$id;x.$id=p??String(C),a.addArrayStatus(e,x.$id,x);}return x}function ut({state:e,rulesDef:r,customMessages:t,path:n,storage:a,options:s,externalErrors:d,initialState:f,shortcuts:v,fieldName:g}){let w=vue.effectScope(),G,C=vue.effectScope(),R,x=[];if(!Array.isArray(e.value)&&!r.value.$each)return null;let p=vue.ref(),M=vue.ref(e.value),u,i=vue.ref({}),c=a.getCollectionsEntry(n);R=C.run(()=>({isPrimitiveArray:vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(m=>typeof m!="object"):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(m=>ce(m)):!1)})),j(),O();function j(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(p.value=Se(),Object.defineProperties(e.value,{$id:{value:p.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(p.value=e.value.$id)),!R.isPrimitiveArray.value&&(M.value=i.value.$value,Array.isArray(e.value)?c.value=e.value.map((o,m)=>{let l=Ie(r.value.$each,vue.toRef(()=>o),m),$=Ae({$id:p.value,path:n,customMessages:t,rules:l??{},stateValue:vue.toRef(()=>o),index:m,options:s,storage:a,externalErrors:vue.toRef(d?.value??{},"$each"),initialState:f?.[m],shortcuts:v,fieldName:g});return $||null}).filter(o=>!!o):c.value=[],i.value=be({state:e,rulesDef:r,customMessages:t,path:n,storage:a,options:s,externalErrors:vue.toRef(d?.value??{},"$self"),$isArray:!0,initialState:f,shortcuts:v,fieldName:g}));}function _(){if(Array.isArray(e.value)){let o=ee(c.value);c.value=e.value.map((m,l)=>{let $=vue.toRef(()=>m);if(m.$id&&c.value.find(N=>N.$id===m.$id)){let N=a.getArrayStatus(p.value,m.$id);return N?(N.$value=$,N):null}else {let N=Ie(r.value.$each,$,l);if(N){let J=Ae({$id:p.value,path:n,customMessages:t,rules:N,stateValue:$,index:l,options:s,storage:a,externalErrors:vue.toRef(d?.value??{},"$each"),initialState:f?.[l],shortcuts:v,fieldName:g});return J||null}}}).filter(m=>!!m),o.filter(m=>!e.value.find(l=>m.$id===l.$id)).forEach((m,l)=>{a.deleteArrayStatus(p.value,l.toString());});}else c.value=[];}function O(){u=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?j():_();},{deep:$e?1:!0,flush:"pre"}),G=w.run(()=>{let o=vue.computed(()=>i.value.$dirty&&c.value.every(h=>h.$dirty)),m=vue.computed(()=>i.value.$anyDirty||c.value.some(h=>h.$dirty)),l=vue.computed(()=>i.value.$invalid||c.value.some(h=>h.$invalid)),$=vue.computed(()=>(Y(i.value.$rules)?!0:i.value.$valid)&&c.value.every(h=>h.$valid)),N=vue.computed(()=>i.value.$error||c.value.some(h=>h.$error)),J=vue.computed(()=>!(l.value||S.value)),S=vue.computed(()=>i.value.$pending||c.value.some(h=>h.$pending)),W=vue.computed(()=>({$self:i.value.$errors,$each:c.value.map(h=>h.$errors)})),H=vue.computed(()=>({$self:i.value.$silentErrors,$each:c.value.map(h=>h.$silentErrors)})),U=vue.computed(()=>g);function F(){v?.collections&&Object.entries(v?.collections).forEach(([h,K])=>{let se=vue.effectScope();E[h]=se.run(()=>{let ue=vue.ref();return vue.watchEffect(()=>{ue.value=K(vue.reactive({$dirty:o,$error:N,$pending:S,$invalid:l,$valid:$,$errors:W,$ready:J,$silentErrors:H,$anyDirty:m,$name:U,$each:c,$field:i,$value:e}));}),ue}),x.push(se);});}let E={};return F(),{$dirty:o,$anyDirty:m,$invalid:l,$valid:$,$error:N,$pending:S,$errors:W,$silentErrors:H,$ready:J,$name:U,$shortcuts:E}}),R.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`),u());}function b(){u&&u(),i.value&&i.value.$unwatch(),c.value&&c.value.forEach(o=>{"$dirty"in o&&o.$unwatch();}),w.stop(),w=vue.effectScope(),C.stop(),C=vue.effectScope(!0),x.forEach(o=>o.stop()),x=[];}function A(o=!0,m=!1){i.value.$touch(o,m),c.value.forEach(l=>{l.$touch(o,m);});}function I(){i.value.$reset(),c.value.forEach(o=>{o.$reset();});}async function L(){let o=e.value;try{return {result:(await Promise.allSettled([i.value.$validate(),...c.value.map($=>$.$validate())])).every($=>$.status==="fulfilled"?$.value.result===!0:!1),data:o}}catch{return {result:!1,data:o}}}function y(){i.value.$clearExternalErrors(),c.value.forEach(o=>{o.$clearExternalErrors();});}function P(o=!0){let m=c.value.map(l=>{if(tt(l))return l.$extractDirtyFields(o)});return o&&(m=m.filter(l=>q(l)?!Y(l):!!l)),m}function T(){b(),Xe(e,f),I();}let{$shortcuts:D,...V}=G;return vue.reactive({$field:i,...V,...D,$each:c,$value:e,$validate:L,$unwatch:b,$watch:O,$touch:A,$reset:I,$resetAll:T,$extractDirtyFields:P,$clearExternalErrors:y})}function Me({rulesDef:e,state:r,path:t="",rootRules:n,externalErrors:a,validationGroups:s,initialState:d,fieldName:f,...v}){let g=vue.effectScope(),w,G=[],C=null,R=null,x=null;async function M(T=!0){let D=Object.entries(e.value),V=Object.fromEntries(D.filter(([l,$])=>!!$).map(([l,$])=>{if($){let N=vue.toRef(r.value,l),J=vue.toRef(()=>$),S=vue.toRef(a?.value??{},l);return [l,de({state:N,rulesDef:J,path:t?`${t}.${l}`:l,externalErrors:S,initialState:d?.[l],fieldName:l,...v})]}return []})),o=Object.fromEntries(Object.entries(vue.unref(a)??{}).filter(([l,$])=>!(l in e.value)&&!!$).map(([l])=>{let $=vue.toRef(r.value,l);return [l,de({state:$,rulesDef:vue.computed(()=>({})),path:t?`${t}.${l}`:l,externalErrors:vue.toRef(a?.value??{},l),initialState:d?.[l],fieldName:l,...v})]})),m=Object.fromEntries(Object.entries(r.value).filter(([l])=>!(l in e.value)&&!(l in(o.value??{}))).map(([l])=>{let $=vue.toRef(r.value,l);return [l,de({state:$,rulesDef:vue.computed(()=>({})),path:t?`${t}.${l}`:l,externalErrors:vue.toRef(a?.value??{},l),initialState:d?.[l],fieldName:l,...v})]}));u.value={...V,...o,...m},T&&_();}let u=v.storage.getFieldsEntry(t);M();function i(){R?.(),Object.values(u.value).forEach(T=>{T.$reset();}),j();}function c(T=!0,D=!1){Object.values(u.value).forEach(V=>{V.$touch(T,D);});}function j(){a?.value&&(R=vue.watch(a,()=>{O(),M();},{deep:!0}));}function _(){n&&(C=vue.watch(n,()=>{O(),M();},{deep:!0,flush:"post"}),j()),x=vue.watch(r,()=>{O(),M(),c(!0,!0);},{flush:"sync"}),w=g.run(()=>{let T=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([F,E])=>E?.$dirty)),D=vue.computed(()=>Object.entries(u.value).some(([F,E])=>E?.$dirty)),V=vue.computed(()=>Object.entries(u.value).some(([F,E])=>E?.$invalid)),o=vue.computed(()=>Object.entries(u.value).every(([F,E])=>E?.$valid)),m=vue.computed(()=>D.value&&!$.value&&V.value),l=vue.computed(()=>vue.unref(v.options.autoDirty)?D.value&&!(V.value||$.value):!(V.value||$.value)),$=vue.computed(()=>Object.entries(u.value).some(([F,E])=>E?.$pending)),N=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([F,E])=>[F,E?.$errors]))),J=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([F,E])=>[F,E?.$silentErrors]))),S=vue.computed(()=>f);function W(){v.shortcuts?.nested&&Object.entries(v.shortcuts.nested).forEach(([F,E])=>{let h=vue.effectScope();U[F]=h.run(()=>{let K=vue.ref();return vue.watchEffect(()=>{K.value=E(vue.reactive({$dirty:T,$value:r,$error:m,$pending:$,$invalid:V,$valid:o,$ready:l,$anyDirty:D,$name:S,$silentErrors:J,$errors:N,$fields:u}));}),K}),G.push(h);});}let H=vue.computed(()=>s?Object.fromEntries(Object.entries(s?.(u.value)??{}).map(([F,E])=>E.length?[F,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(h=>[h,ke(E,h)])),...Object.fromEntries(["$errors","$silentErrors"].map(h=>[h,qe(E,h)]))}]:[])):{}),U={};return W(),{$dirty:T,$anyDirty:D,$invalid:V,$valid:o,$error:m,$pending:$,$errors:N,$silentErrors:J,$ready:l,$name:S,$shortcuts:U,$groups:H}});}function O(){C?.(),R?.(),x?.(),G.forEach(T=>T.stop()),G=[],u.value&&Object.entries(u.value).forEach(([T,D])=>{D.$unwatch();});}function b(){Object.entries(u.value).forEach(([T,D])=>{D.$clearExternalErrors();});}async function A(){O(),ie(r,d??{}),i(),M();}function I(T=!0){let D=Object.entries(u.value).map(([V,o])=>[V,o.$extractDirtyFields(T)]);return T&&(D=D.filter(([V,o])=>q(o)?!Y(o):Array.isArray(o)?o.length:!!o)),Object.fromEntries(D)}async function L(){try{let T=r.value;return {result:(await Promise.allSettled(Object.values(u.value).map(o=>o.$validate()))).every(o=>o.status==="fulfilled"?o.value.result===!0:!1),data:T}}catch{return {result:!1,data:r.value}}}let{$shortcuts:y,...P}=w;return vue.reactive({...P,...y,$fields:u,$value:r,$resetAll:A,$reset:i,$touch:c,$validate:L,$unwatch:O,$watch:_,$clearExternalErrors:b,$extractDirtyFields:I})}function de({rulesDef:e,externalErrors:r,...t}){return Ke(e,t.state)?ut({rulesDef:e,externalErrors:r,...t}):Ze(t.state,e)&&Ye(t.state)?Me({rulesDef:e,externalErrors:r,...t}):et(e)?be({rulesDef:e,externalErrors:r,...t}):null}function je({initialState:e,options:r,scopeRules:t,state:n,customRules:a,shortcuts:s}){let d=Pe();return vue.reactive(Me({rootRules:t,rulesDef:t,state:n,customMessages:a?.(),storage:d,options:r,externalErrors:r.externalErrors,validationGroups:r.validationGroups,initialState:e,shortcuts:s,fieldName:"root",path:""}))}function Ve(e,r,t){let n={autoDirty:r?.autoDirty??!0,lazy:r?.lazy??!1,rewardEarly:r?.rewardEarly??!1,clearExternalErrorsOnChange:r?.clearExternalErrorsOnChange??!0};function a(s,d,f){let v=vue.isRef(d)?d:vue.computed(typeof d=="function"?d:()=>d),g={...n,...f},w=vue.isRef(s)?s:vue.ref(s),G=ee(vue.toRaw(w.value));return {r$:je({scopeRules:v,state:w,options:g,initialState:G,customRules:e,shortcuts:t})}}return a}var pt=Ve();function _e(){function e(r,t){return t}return e}var Ge=_e();function dt({rules:e,modifiers:r,shortcuts:t}){let n=Ve(e,r,t),a=_e();return {useRegle:n,inferRules:a}}
2
2
  exports.InternalRuleType=xe;exports.createRule=Ce;exports.defineRegleConfig=dt;exports.inferRules=Ge;exports.unwrapRuleParameters=k;exports.useRegle=pt;
package/dist/index.d.cts CHANGED
@@ -311,22 +311,20 @@ type CheckDeepExact<T, U> = [U] extends [never] ? false : T extends RegleCollect
311
311
  type DeepReactiveState<T extends Record<string, any>> = {
312
312
  [K in keyof T]: MaybeRef<T[K]>;
313
313
  };
314
- type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>> = [unknown] extends [TState] ? {} : Prettify<{
314
+ type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> | undefined> = [unknown] extends [TState] ? {} : TRules extends undefined ? TState : TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> ? Prettify<{
315
315
  [K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? K : never]?: SafeProperty<TState[K], TRules[K]>;
316
316
  } & {
317
317
  [K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? never : K]-?: NonNullable<SafeProperty<TState[K], TRules[K]>>;
318
- }>;
318
+ }> : TState;
319
319
  type FieldHaveRequiredRule<TRule extends RegleRuleDecl> = unknown extends TRule['required'] ? false : TRule['required'] extends undefined ? false : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? true : false : false;
320
- type ObjectHaveAtLeastOneRequiredField<TState, TRule extends ReglePartialRuleTree<any, any>> = TState extends Maybe<TState> ? {
321
- [K in keyof TRule]: TRule[K] extends RegleRuleDecl ? FieldHaveRequiredRule<TRule[K]> : false;
322
- }[keyof TRule] : true;
323
- type ArrayHaveAtLeastOneRequiredField<TState, TRule extends RegleCollectionRuleDefinition<any, any>> = TState extends Maybe<TState> ? {
324
- [K in keyof ExtractFromGetter<TRule['$each']>]: ExtractFromGetter<TRule['$each']>[K] extends RegleRuleDecl ? FieldHaveRequiredRule<ExtractFromGetter<TRule['$each']>[K]> : false;
325
- }[keyof ExtractFromGetter<TRule['$each']>] : true;
326
- type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = [unknown] extends [TState] ? unknown : TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, ExtractFromGetter<TRule['$each']>>[] : TState : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? DeepSafeFormState<NonNullable<TState> extends Record<string, any> ? NonNullable<TState> : {}, TRule> : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends true ? TState : Maybe<TState> : TState : TState;
320
+ type ObjectHaveAtLeastOneRequiredField<TState extends Record<string, any>, TRule extends ReglePartialRuleTree<TState, any>> = TState extends Maybe<TState> ? {
321
+ [K in keyof NonNullable<TState>]-?: IsPropertyOutputRequired<NonNullable<TState>[K], TRule[K]>;
322
+ }[keyof TState] extends false ? false : true : true;
323
+ type ArrayHaveAtLeastOneRequiredField<TState extends Maybe<any[]>, TRule extends RegleCollectionRuleDecl<TState>> = TState extends Maybe<TState> ? FieldHaveRequiredRule<Omit<TRule, '$each'> extends RegleRuleDecl ? Omit<TRule, '$each'> : {}> | ObjectHaveAtLeastOneRequiredField<ArrayElement<NonNullable<TState>>, ExtractFromGetter<TRule['$each']> extends undefined ? {} : NonNullable<ExtractFromGetter<TRule['$each']>>> extends false ? false : true : true;
324
+ type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = [unknown] extends [TState] ? unknown : TRule extends RegleCollectionRuleDecl<any, any> ? TState extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, ExtractFromGetter<TRule['$each']>>[] : TState : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? DeepSafeFormState<NonNullable<TState> extends Record<string, any> ? NonNullable<TState> : {}, TRule> : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends true ? TState : Maybe<TState> : TState : TState;
327
325
  type IsPropertyOutputRequired<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = [
328
326
  unknown
329
- ] extends [TState] ? unknown : TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? ArrayHaveAtLeastOneRequiredField<TState, TRule> extends true ? true : false : false : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? ObjectHaveAtLeastOneRequiredField<TState, TRule> extends true ? true : false : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends true ? true : false : false : false;
327
+ ] extends [TState] ? unknown : NonNullable<TState> extends Array<any> ? TRule extends RegleCollectionRuleDecl<any, any> ? ArrayHaveAtLeastOneRequiredField<NonNullable<TState>, TRule> extends false ? false : true : false : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? ObjectHaveAtLeastOneRequiredField<NonNullable<TState> extends Record<string, any> ? NonNullable<TState> : {}, TRule> extends false ? false : true : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends false ? false : true : false : false;
330
328
  type SafeFieldProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? Maybe<TState> : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? Maybe<TState> : Maybe<TState> : Maybe<TState> : Maybe<TState>;
331
329
 
332
330
  type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TValidationGroups, TShortcuts>;
@@ -367,11 +365,12 @@ type UnwrapRegleUniversalParams<T extends ParamDecl[] = [], F = CreateFn<T>> = [
367
365
  */
368
366
  interface RegleInternalRuleDefs<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> {
369
367
  _validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
370
- _message: string | string[] | ((value: Maybe<TValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[]);
371
- _active?: boolean | ((value: Maybe<TValue>, metadata: PossibleRegleRuleMetadataConsumer) => boolean);
372
- _tooltip?: string | string[] | ((value: Maybe<TValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[]);
368
+ _message: string | string[] | ((metadata: PossibleRegleRuleMetadataConsumer<TValue>) => string | string[]);
369
+ _active?: boolean | ((metadata: PossibleRegleRuleMetadataConsumer<TValue>) => boolean);
370
+ _tooltip?: string | string[] | ((metadata: PossibleRegleRuleMetadataConsumer<TValue>) => string | string[]);
373
371
  _type?: string;
374
- _patched: boolean;
372
+ _message_patched: boolean;
373
+ _tooltip_patched: boolean;
375
374
  _params?: RegleUniversalParams<TParams>;
376
375
  _async: TAsync;
377
376
  }
@@ -385,9 +384,9 @@ declare enum InternalRuleType {
385
384
  * */
386
385
  interface RegleRuleDefinition<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = boolean, TMetaData extends RegleRuleMetadataDefinition = RegleRuleMetadataDefinition, TFilteredValue extends any = TValue extends Date & File & infer M ? M : TValue> extends RegleInternalRuleDefs<TFilteredValue, TParams, TAsync, TMetaData> {
387
386
  validator: RegleRuleDefinitionProcessor<TFilteredValue, TParams, TAsync extends false ? TMetaData : Promise<TMetaData>>;
388
- message: (value: Maybe<TFilteredValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[];
389
- active: (value: Maybe<TFilteredValue>, metadata: PossibleRegleRuleMetadataConsumer) => boolean;
390
- tooltip: (value: Maybe<TFilteredValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[];
387
+ message: (metadata: PossibleRegleRuleMetadataConsumer<TFilteredValue>) => string | string[];
388
+ active: (metadata: PossibleRegleRuleMetadataConsumer<TFilteredValue>) => boolean;
389
+ tooltip: (metadata: PossibleRegleRuleMetadataConsumer<TFilteredValue>) => string | string[];
391
390
  type?: string;
392
391
  exec: (value: Maybe<TFilteredValue>) => TAsync extends false ? TMetaData : Promise<TMetaData>;
393
392
  }
@@ -411,17 +410,21 @@ type UnwrapRuleWithParams<T extends RegleRuleRaw<any> | undefined> = T extends R
411
410
  * Define a rule Metadata definition
412
411
  */
413
412
  type RegleRuleMetadataDefinition = RegleRuleMetadataExtended | boolean;
414
- type DefaultMetadataProperties = Pick<ExcludeByType<RegleCommonStatus, Function>, '$invalid'>;
413
+ type DefaultMetadataProperties = Pick<ExcludeByType<RegleCommonStatus, Function>, '$invalid' | '$dirty' | '$pending'>;
415
414
  /**
416
415
  * Will be used to consumme metadata on related helpers and rule status
417
416
  */
418
- type RegleRuleMetadataConsumer<TParams extends any[] = never, TMetadata extends RegleRuleMetadataDefinition = boolean> = DefaultMetadataProperties & (TParams extends never ? {} : {
417
+ type RegleRuleMetadataConsumer<TValue extends any, TParams extends any[] = never, TMetadata extends RegleRuleMetadataDefinition = boolean> = {
418
+ $value: Maybe<TValue>;
419
+ } & DefaultMetadataProperties & (TParams extends never ? {} : {
419
420
  $params: TParams;
420
421
  }) & (Exclude<TMetadata, boolean> extends RegleRuleMetadataExtended ? TMetadata extends boolean ? Partial<Omit<Exclude<TMetadata, boolean>, '$valid'>> : Omit<Exclude<TMetadata, boolean>, '$valid'> : {});
421
422
  /**
422
423
  * Will be used to consumme metadata on related helpers and rule status
423
424
  */
424
- type PossibleRegleRuleMetadataConsumer = DefaultMetadataProperties & {
425
+ type PossibleRegleRuleMetadataConsumer<TValue> = {
426
+ $value: Maybe<TValue>;
427
+ } & DefaultMetadataProperties & {
425
428
  $params?: any[];
426
429
  };
427
430
  /**
@@ -435,14 +438,14 @@ type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync e
435
438
  */
436
439
  type InferRegleRule<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetaData extends RegleRuleMetadataDefinition = boolean> = [TParams] extends [[]] ? RegleRuleDefinition<TValue, TParams, TAsync, TMetaData> : RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetaData>;
437
440
  type RegleRuleDefinitionProcessor<TValue extends any = any, TParams extends any[] = [], TReturn = any> = (value: Maybe<TValue>, ...params: TParams) => TReturn;
438
- type RegleRuleDefinitionWithMetadataProcessor<TValue extends any, TMetadata extends RegleRuleMetadataConsumer<any, any>, TReturn = any> = ((value: Maybe<TValue>, metadata: TMetadata) => TReturn) | TReturn;
441
+ type RegleRuleDefinitionWithMetadataProcessor<TValue extends any, TMetadata extends RegleRuleMetadataConsumer<TValue, any>, TReturn = any> = ((metadata: TMetadata) => TReturn) | TReturn;
439
442
  type RegleCollectionRuleDefinition<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = (RegleRuleDecl<NonNullable<TValue>, TCustomRules> & {
440
443
  $each: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>>;
441
444
  }) | ({
442
445
  $each: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>>;
443
446
  } & FieldRegleBehaviourOptions);
444
447
 
445
- type RegleInitPropertyGetter<TValue, TReturn, TParams extends [...any[]], TMetadata extends RegleRuleMetadataDefinition> = TReturn | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => TReturn);
448
+ type RegleInitPropertyGetter<TValue, TReturn, TParams extends [...any[]], TMetadata extends RegleRuleMetadataDefinition> = TReturn | ((metadata: RegleRuleMetadataConsumer<TValue, TParams, TMetadata>) => TReturn);
446
449
  /**
447
450
  * @argument
448
451
  * createRule arguments options
package/dist/index.d.ts CHANGED
@@ -311,22 +311,20 @@ type CheckDeepExact<T, U> = [U] extends [never] ? false : T extends RegleCollect
311
311
  type DeepReactiveState<T extends Record<string, any>> = {
312
312
  [K in keyof T]: MaybeRef<T[K]>;
313
313
  };
314
- type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>> = [unknown] extends [TState] ? {} : Prettify<{
314
+ type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> | undefined> = [unknown] extends [TState] ? {} : TRules extends undefined ? TState : TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> ? Prettify<{
315
315
  [K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? K : never]?: SafeProperty<TState[K], TRules[K]>;
316
316
  } & {
317
317
  [K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? never : K]-?: NonNullable<SafeProperty<TState[K], TRules[K]>>;
318
- }>;
318
+ }> : TState;
319
319
  type FieldHaveRequiredRule<TRule extends RegleRuleDecl> = unknown extends TRule['required'] ? false : TRule['required'] extends undefined ? false : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? true : false : false;
320
- type ObjectHaveAtLeastOneRequiredField<TState, TRule extends ReglePartialRuleTree<any, any>> = TState extends Maybe<TState> ? {
321
- [K in keyof TRule]: TRule[K] extends RegleRuleDecl ? FieldHaveRequiredRule<TRule[K]> : false;
322
- }[keyof TRule] : true;
323
- type ArrayHaveAtLeastOneRequiredField<TState, TRule extends RegleCollectionRuleDefinition<any, any>> = TState extends Maybe<TState> ? {
324
- [K in keyof ExtractFromGetter<TRule['$each']>]: ExtractFromGetter<TRule['$each']>[K] extends RegleRuleDecl ? FieldHaveRequiredRule<ExtractFromGetter<TRule['$each']>[K]> : false;
325
- }[keyof ExtractFromGetter<TRule['$each']>] : true;
326
- type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = [unknown] extends [TState] ? unknown : TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, ExtractFromGetter<TRule['$each']>>[] : TState : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? DeepSafeFormState<NonNullable<TState> extends Record<string, any> ? NonNullable<TState> : {}, TRule> : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends true ? TState : Maybe<TState> : TState : TState;
320
+ type ObjectHaveAtLeastOneRequiredField<TState extends Record<string, any>, TRule extends ReglePartialRuleTree<TState, any>> = TState extends Maybe<TState> ? {
321
+ [K in keyof NonNullable<TState>]-?: IsPropertyOutputRequired<NonNullable<TState>[K], TRule[K]>;
322
+ }[keyof TState] extends false ? false : true : true;
323
+ type ArrayHaveAtLeastOneRequiredField<TState extends Maybe<any[]>, TRule extends RegleCollectionRuleDecl<TState>> = TState extends Maybe<TState> ? FieldHaveRequiredRule<Omit<TRule, '$each'> extends RegleRuleDecl ? Omit<TRule, '$each'> : {}> | ObjectHaveAtLeastOneRequiredField<ArrayElement<NonNullable<TState>>, ExtractFromGetter<TRule['$each']> extends undefined ? {} : NonNullable<ExtractFromGetter<TRule['$each']>>> extends false ? false : true : true;
324
+ type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = [unknown] extends [TState] ? unknown : TRule extends RegleCollectionRuleDecl<any, any> ? TState extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, ExtractFromGetter<TRule['$each']>>[] : TState : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? DeepSafeFormState<NonNullable<TState> extends Record<string, any> ? NonNullable<TState> : {}, TRule> : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends true ? TState : Maybe<TState> : TState : TState;
327
325
  type IsPropertyOutputRequired<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = [
328
326
  unknown
329
- ] extends [TState] ? unknown : TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? ArrayHaveAtLeastOneRequiredField<TState, TRule> extends true ? true : false : false : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? ObjectHaveAtLeastOneRequiredField<TState, TRule> extends true ? true : false : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends true ? true : false : false : false;
327
+ ] extends [TState] ? unknown : NonNullable<TState> extends Array<any> ? TRule extends RegleCollectionRuleDecl<any, any> ? ArrayHaveAtLeastOneRequiredField<NonNullable<TState>, TRule> extends false ? false : true : false : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? ObjectHaveAtLeastOneRequiredField<NonNullable<TState> extends Record<string, any> ? NonNullable<TState> : {}, TRule> extends false ? false : true : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends false ? false : true : false : false;
330
328
  type SafeFieldProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? Maybe<TState> : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? Maybe<TState> : Maybe<TState> : Maybe<TState> : Maybe<TState>;
331
329
 
332
330
  type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TValidationGroups, TShortcuts>;
@@ -367,11 +365,12 @@ type UnwrapRegleUniversalParams<T extends ParamDecl[] = [], F = CreateFn<T>> = [
367
365
  */
368
366
  interface RegleInternalRuleDefs<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> {
369
367
  _validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
370
- _message: string | string[] | ((value: Maybe<TValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[]);
371
- _active?: boolean | ((value: Maybe<TValue>, metadata: PossibleRegleRuleMetadataConsumer) => boolean);
372
- _tooltip?: string | string[] | ((value: Maybe<TValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[]);
368
+ _message: string | string[] | ((metadata: PossibleRegleRuleMetadataConsumer<TValue>) => string | string[]);
369
+ _active?: boolean | ((metadata: PossibleRegleRuleMetadataConsumer<TValue>) => boolean);
370
+ _tooltip?: string | string[] | ((metadata: PossibleRegleRuleMetadataConsumer<TValue>) => string | string[]);
373
371
  _type?: string;
374
- _patched: boolean;
372
+ _message_patched: boolean;
373
+ _tooltip_patched: boolean;
375
374
  _params?: RegleUniversalParams<TParams>;
376
375
  _async: TAsync;
377
376
  }
@@ -385,9 +384,9 @@ declare enum InternalRuleType {
385
384
  * */
386
385
  interface RegleRuleDefinition<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = boolean, TMetaData extends RegleRuleMetadataDefinition = RegleRuleMetadataDefinition, TFilteredValue extends any = TValue extends Date & File & infer M ? M : TValue> extends RegleInternalRuleDefs<TFilteredValue, TParams, TAsync, TMetaData> {
387
386
  validator: RegleRuleDefinitionProcessor<TFilteredValue, TParams, TAsync extends false ? TMetaData : Promise<TMetaData>>;
388
- message: (value: Maybe<TFilteredValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[];
389
- active: (value: Maybe<TFilteredValue>, metadata: PossibleRegleRuleMetadataConsumer) => boolean;
390
- tooltip: (value: Maybe<TFilteredValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[];
387
+ message: (metadata: PossibleRegleRuleMetadataConsumer<TFilteredValue>) => string | string[];
388
+ active: (metadata: PossibleRegleRuleMetadataConsumer<TFilteredValue>) => boolean;
389
+ tooltip: (metadata: PossibleRegleRuleMetadataConsumer<TFilteredValue>) => string | string[];
391
390
  type?: string;
392
391
  exec: (value: Maybe<TFilteredValue>) => TAsync extends false ? TMetaData : Promise<TMetaData>;
393
392
  }
@@ -411,17 +410,21 @@ type UnwrapRuleWithParams<T extends RegleRuleRaw<any> | undefined> = T extends R
411
410
  * Define a rule Metadata definition
412
411
  */
413
412
  type RegleRuleMetadataDefinition = RegleRuleMetadataExtended | boolean;
414
- type DefaultMetadataProperties = Pick<ExcludeByType<RegleCommonStatus, Function>, '$invalid'>;
413
+ type DefaultMetadataProperties = Pick<ExcludeByType<RegleCommonStatus, Function>, '$invalid' | '$dirty' | '$pending'>;
415
414
  /**
416
415
  * Will be used to consumme metadata on related helpers and rule status
417
416
  */
418
- type RegleRuleMetadataConsumer<TParams extends any[] = never, TMetadata extends RegleRuleMetadataDefinition = boolean> = DefaultMetadataProperties & (TParams extends never ? {} : {
417
+ type RegleRuleMetadataConsumer<TValue extends any, TParams extends any[] = never, TMetadata extends RegleRuleMetadataDefinition = boolean> = {
418
+ $value: Maybe<TValue>;
419
+ } & DefaultMetadataProperties & (TParams extends never ? {} : {
419
420
  $params: TParams;
420
421
  }) & (Exclude<TMetadata, boolean> extends RegleRuleMetadataExtended ? TMetadata extends boolean ? Partial<Omit<Exclude<TMetadata, boolean>, '$valid'>> : Omit<Exclude<TMetadata, boolean>, '$valid'> : {});
421
422
  /**
422
423
  * Will be used to consumme metadata on related helpers and rule status
423
424
  */
424
- type PossibleRegleRuleMetadataConsumer = DefaultMetadataProperties & {
425
+ type PossibleRegleRuleMetadataConsumer<TValue> = {
426
+ $value: Maybe<TValue>;
427
+ } & DefaultMetadataProperties & {
425
428
  $params?: any[];
426
429
  };
427
430
  /**
@@ -435,14 +438,14 @@ type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync e
435
438
  */
436
439
  type InferRegleRule<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetaData extends RegleRuleMetadataDefinition = boolean> = [TParams] extends [[]] ? RegleRuleDefinition<TValue, TParams, TAsync, TMetaData> : RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetaData>;
437
440
  type RegleRuleDefinitionProcessor<TValue extends any = any, TParams extends any[] = [], TReturn = any> = (value: Maybe<TValue>, ...params: TParams) => TReturn;
438
- type RegleRuleDefinitionWithMetadataProcessor<TValue extends any, TMetadata extends RegleRuleMetadataConsumer<any, any>, TReturn = any> = ((value: Maybe<TValue>, metadata: TMetadata) => TReturn) | TReturn;
441
+ type RegleRuleDefinitionWithMetadataProcessor<TValue extends any, TMetadata extends RegleRuleMetadataConsumer<TValue, any>, TReturn = any> = ((metadata: TMetadata) => TReturn) | TReturn;
439
442
  type RegleCollectionRuleDefinition<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = (RegleRuleDecl<NonNullable<TValue>, TCustomRules> & {
440
443
  $each: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>>;
441
444
  }) | ({
442
445
  $each: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>>;
443
446
  } & FieldRegleBehaviourOptions);
444
447
 
445
- type RegleInitPropertyGetter<TValue, TReturn, TParams extends [...any[]], TMetadata extends RegleRuleMetadataDefinition> = TReturn | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => TReturn);
448
+ type RegleInitPropertyGetter<TValue, TReturn, TParams extends [...any[]], TMetadata extends RegleRuleMetadataDefinition> = TReturn | ((metadata: RegleRuleMetadataConsumer<TValue, TParams, TMetadata>) => TReturn);
446
449
  /**
447
450
  * @argument
448
451
  * createRule arguments options
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import {unref,version,isRef,toRef,computed,ref,toRaw,reactive,shallowRef,onScopeDispose,effectScope,watch,watchEffect}from'vue';var xe=(t=>(t.Inline="__inline",t.Async="__async",t))(xe||{});function ke(e,r){return e.some(t=>t[r])}function qe(e,r){return e.reduce((t,a)=>{let n=a[r]||[];return t.concat(n)},[])}function k(e){return e.map(r=>r instanceof Function?r():unref(r))}function ze(e){return e.map(r=>r instanceof Function||isRef(r)?r:toRef(()=>r))}function Je(e){let a=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return a?(a[0]||a[1]||a[2]||a[3]||a[4]||"").split(",").map(d=>d.trim()).filter(d=>d.length>0).length:0}function De(e,...r){let{validator:t,type:a}=e,n=a==="__async"||t.constructor.name==="AsyncFunction";return {...{validator(v,...c){return e.validator(v,...k(c.length?c:r))},message(v,c){return typeof e.message=="function"?e.message(v,{...c,$params:k(c.$params?.length?c.$params:r)}):e.message},active(v,c){return typeof e.active=="function"?e.active(v,{...c,$params:k(c.$params?.length?c.$params:r)}):e.active??!0},tooltip(v,c){return typeof e.tooltip=="function"?e.tooltip(v,{...c,$params:k(c.$params?.length?c.$params:r)}):e.tooltip??[]},exec(v){let c=e.validator(v,...k(r)),g;return c instanceof Promise?c.then(w=>(g=w,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)):(g=c,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_patched:!1,_async:n,_params:ze(r)}}function Ce(e){if(typeof e.validator=="function"){let t=De(e,...[]),a=e.validator.constructor.name==="AsyncFunction";if(Je(e.validator)>1){let n=function(...s){return De(e,...s)};return n.validator=t.validator,n.message=t.message,n.active=t.active,n.tooltip=t.tooltip,n.type=t.type,n.exec=t.exec,n._validator=t.validator,n._message=t.message,n._active=t.active,n._tooltip=t.tooltip,n._type=e.type,n._patched=!1,n._async=a,n}else return t}throw new Error("Validator must be a function")}function q(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ye(e){return q(e.value)}function ee(e){let r=e,t={}.toString.call(e).slice(8,-1);if(t=="Set"&&(r=new Set([...e].map(a=>ee(a)))),t=="Map"&&(r=new Map([...e].map(a=>[ee(a[0]),ee(a[1])]))),t=="Date"&&(r=new Date(e.getTime())),t=="RegExp"&&(r=RegExp(e.source,ht(e))),t=="Array"||t=="Object"){r=Array.isArray(e)?[]:{};for(let a in e)r[a]=ee(e[a]);}return r}function ht(e){if(typeof e.source.flags=="string")return e.source.flags;{let r=[];return e.global&&r.push("g"),e.ignoreCase&&r.push("i"),e.multiline&&r.push("m"),e.sticky&&r.push("y"),e.unicode&&r.push("u"),r.join("")}}function Ie(e,r,t){return e instanceof Function?e(r,t??0):e}function Qe(e,r){isRef(e)?e.value=r:e=r;}function Xe(e,r){isRef(e)?e.value=[]:e=[],r.forEach((t,a)=>{let n=isRef(e)?e.value[a]:e[a];n={},ie(n,r[a]);});}function ie(e,r){Object.entries({...unref(e),...r}).forEach(([t,a])=>{let n=isRef(e)?e.value:e,s=isRef(r[t])?r[t]._value:r[t],d=isRef(n[t])?n[t].value:n[t];Array.isArray(n[t])?(n[t]=[],Array.isArray(s)&&s.forEach((v,c)=>{n[t][c]={},ie(n[t][c],s[c]);})):q(s)?ie(d,s):isRef(n[t])?n[t].value=s:n[t]=s;});}function ge(e,r,t){let a,n=(...s)=>new Promise(d=>{clearTimeout(a),a=setTimeout(()=>{a=void 0,Promise.resolve(e.apply(this,[...s])).then(d);},r);});return n.cancel=()=>{clearTimeout(a),a=void 0;},n}function Tt(e,r){let t=String(e).split("."),a=String(r).split(".");for(let n=0;n<Math.min(t.length,a.length);n++){let s=Number(t[n]),d=Number(a[n]);if(s>d)return 1;if(d>s)return -1;if(!isNaN(s)&&isNaN(d))return 1;if(isNaN(s)&&!isNaN(d))return -1}return 0}var $e=Tt(version,"3.5.0")!==-1;function Et(){return Math.floor(Math.random()*Date.now()).toString()}function Se(){return typeof window>"u"?Et():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Pe(){let e=shallowRef(new Map),r=shallowRef(new Map),t=shallowRef(new Map),a=shallowRef(new Map),n=shallowRef(new Map),s=shallowRef(new Map);function d(u){let i=r.value.get(u);if(i)return i;{let f=ref({});return r.value.set(u,f),f}}function v(u){let i=t.value.get(u);if(i)return i;{let f=ref([]);return t.value.set(u,f),f}}function c(u,i,f){s.value.set(`${u}-${i}`,f);}function g(u,i){return s.value.get(`${u}-${i}`)}function w(u,i){u&&i!=null&&s.value.delete(`${u}-${i}`);}function G(u,i){a.value.set(u,i);}function C(u){return a.value.get(u)??!1}function R(u,i){e.value.set(u,i);}function x(u,i){let f=e.value.get(u);return f?p(i,f)?{valid:!0}:{valid:!1}:void 0}function p(u,i){let f=Object.keys(i),j=Object.keys(u);return j.length!==f.length||!j.every(O=>f.includes(O))?!1:j.every(O=>{let b=u[O],A=i[O];return !A||!b||typeof b=="function"||typeof A=="function"||typeof b=="number"||typeof b=="boolean"?!1:b._params?b._params?.every((I,L)=>{if(typeof A=="number"||typeof A=="boolean")return !0;{let y=k(A._params),P=k(b._params);return y?.[L]===P?.[L]}}):!0})}function F(u){let i=n.value.get(u);if(i)return i;{let f=ref(!1),j=ref(!0),V=ref({}),O=ref(!1);return n.value.set(u,{$pending:f,$valid:j,$metadata:V,$validating:O}),{$pending:f,$valid:j,$metadata:V,$validating:O}}}return onScopeDispose(()=>{e.value.clear(),r.value.clear(),t.value.clear(),a.value.clear(),n.value.clear(),s.value.clear();}),{addRuleDeclEntry:R,setDirtyEntry:G,checkRuleDeclEntry:x,getDirtyState:C,trySetRuleStatusRef:F,getFieldsEntry:d,getCollectionsEntry:v,getArrayStatus:g,addArrayStatus:c,deleteArrayStatus:w,arrayStatusStorage:s}}function Y(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}function Ze(e,r){return q(e.value)&&q(r.value)&&!Object.entries(r.value).some(t=>ce(t))}function Ke(e,r){return !!e.value&&"$each"in e.value||Array.isArray(r.value)}function et(e){return !!e.value&&q(e.value)}function ce(e){return q(e)&&"_validator"in e}function fe(e){return typeof e.value!="function"}function tt(e){return q(e)&&"$fields"in e}function Oe({field:e,silent:r=!1}){return Object.entries(e.$rules??{}).map(([t,a])=>r||!a.$valid&&e.$dirty&&!a.$validating?a.$message:null).filter(t=>!!t).reduce((t,a)=>typeof a=="string"?t?.concat([a]):t?.concat(a),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function rt({field:e}){return Object.entries(e.$rules??{}).map(([r,t])=>t.$tooltip).filter(r=>!!r).reduce((r,t)=>typeof t=="string"?r?.concat([t]):r?.concat(t),[])}function at({$dirty:e,customMessages:r,rule:t,ruleKey:a,state:n,path:s,storage:d,$debounce:v}){let c=effectScope(),g,w,G=ref(!1),{$pending:C,$valid:R,$metadata:x,$validating:p}=d.trySetRuleStatusRef(`${s}.${a}`);function F(){g=c.run(()=>{let b=computed(()=>({$invalid:!R.value,$params:D.value,...x.value})),A=computed(()=>fe(t)?typeof t.value.active=="function"?t.value.active(n.value,b.value):!!t.value.active:!0);function I(o){let m="",l=r?r[a]?.[o]:void 0;return l&&(typeof l=="function"?m=l(n.value,b.value):m=l),fe(t)&&(l&&!t.value._patched||(typeof t.value[o]=="function"?m=t.value[o](n.value,b.value):m=t.value[o]??"")),m}let L=computed(()=>{let o=I("message");return Y(o)&&(o="Error",console.warn(`No error message defined for ${s}.${a}`)),o}),y=computed(()=>I("tooltip")),P=computed(()=>fe(t)&&t.value.type?t.value.type:a),T=computed(()=>fe(t)?t.value.validator:t.value),D=computed(()=>typeof t.value=="function"?[]:k(t.value._params??[])),_=computed(()=>`${s}.${P.value}`);return {$active:A,$message:L,$type:P,$validator:T,$params:D,$path:_,$tooltip:y}}),w=watch(g.$params,j,{deep:!0});}F();function u(){R.value=!0,e.value&&(C.value=!0);}async function i(){let b=g.$validator.value,A=b(n.value,...g.$params.value),I=!1,L=n.value;try{u();let y;if(A instanceof Promise?y=await A:y=A,n.value!==L)return !0;if(typeof y=="boolean")I=y;else {let{$valid:P,...T}=y;I=P,x.value=T;}}catch{I=!1;}finally{C.value=!1;}return I}let f=ge(i,v??200);async function j(){try{p.value=!0;let b=!1;if(ce(t.value)&&t.value._async)b=await f();else {let A=g.$validator.value,I=A(n.value,...g.$params.value);if(I 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(I!=null)if(typeof I=="boolean")b=I;else {let{$valid:L,...y}=I;b=L,x.value=y;}}return R.value=b,b}catch{return !1}finally{p.value=!1;}}function V(){R.value=!0,x.value={},C.value=!1,p.value=!1,F();}function O(){w(),c.stop(),c=effectScope();}return reactive({...g,$pending:C,$valid:R,$metadata:x,$haveAsync:G,$validating:p,$validate:j,$unwatch:O,$watch:F,$reset:V})}function be({state:e,rulesDef:r,customMessages:t,path:a,fieldName:n,storage:s,options:d,externalErrors:v,onUnwatch:c,$isArray:g,initialState:w,shortcuts:G}){let C=effectScope(),R,x=[],p=ref(!1),F=ref(!1),u,i,f,j,V=()=>{};function O(){let $=r.value,W=s.checkRuleDeclEntry(a,$);P.value=Object.fromEntries(Object.entries($).filter(([H])=>H.startsWith("$"))),y.value=Object.fromEntries(Object.entries(r.value).filter(([H])=>!H.startsWith("$")).map(([H,U])=>{if(U){let M=toRef(()=>U);return [H,at({$dirty:p,customMessages:t,rule:M,ruleKey:H,state:e,path:a,storage:s,$debounce:P.value.$debounce})]}return []}).filter(H=>!!H.length)),I(),b(),W?.valid!=null&&(p.value=s.getDirtyState(a),p.value&&V()),s.addRuleDeclEntry(a,$);}function b(){V=R.$debounce.value?ge(L,R.$debounce.value??R.$haveAnyAsyncRule?100:0):L;}function A(){y.value&&Object.entries(y.value).forEach(([$,W])=>{W.$unwatch();}),f(),p.value&&s.setDirtyEntry(a,p.value),u?.(),i?.(),C.stop(),C=effectScope(),x.forEach($=>$.stop()),x=[],c?.(),j?.();}function I(){y.value&&Object.entries(y.value).forEach(([$,W])=>{W.$watch();}),R=C.run(()=>{let $=computed(()=>p.value),W=computed(()=>P.value.$debounce),H=computed(()=>P.value.$lazy!=null?P.value.$lazy:unref(d.lazy)),U=computed(()=>E.value===!0?!1:P.value.$rewardEarly!=null?P.value.$rewardEarly:unref(d.rewardEarly)),M=computed(()=>P.value.$clearExternalErrorsOnChange!=null?P.value.$clearExternalErrorsOnChange:unref(d.clearExternalErrorsOnChange)),E=computed(()=>P.value.$autoDirty!=null?P.value.$autoDirty:unref(d.autoDirty)),h=computed(()=>Object.entries(y.value).some(([X,K])=>K.$validating)),Z=computed(()=>ve.value&&!ye.value&&p.value),se=computed(()=>Z.value?Oe({field:{$dirty:p.value,$externalErrors:v?.value,$rules:y.value}}):[]),ue=computed(()=>Z.value?rt({field:{$rules:y.value}}):[]),Ne=computed(()=>Oe({field:{$dirty:p.value,$externalErrors:v?.value,$rules:y.value},silent:!0})),We=computed(()=>!(ve.value||ye.value)),ye=computed(()=>F.value||!U.value?Object.entries(y.value).some(([X,K])=>K.$pending):!1),ve=computed(()=>v?.value?.length?!0:Y(y.value)?!1:!U.value||U.value&&F.value?Object.entries(y.value).some(([X,K])=>!K.$valid):!1),Ue=computed(()=>n),Ee=computed(()=>v?.value?.length||Y(y.value)?!1:p.value&&!Y(e.value)&&!h.value?Object.values(y.value).every(X=>X.$valid&&X.$active):!1),mt=computed(()=>Object.entries(y.value).some(([X,K])=>K.$haveAsync));function yt(){G?.fields&&Object.entries(G.fields).forEach(([X,K])=>{let He=effectScope();Be[X]=He.run(()=>{let Le=ref();return watchEffect(()=>{Le.value=K(reactive({$dirty:p,$externalErrors:v?.value??[],$value:e,$rules:y,$error:Z,$pending:ye,$invalid:ve,$valid:Ee,$errors:se,$ready:We,$silentErrors:Ne,$anyDirty:$,$tooltips:ue,$name:Ue}));}),Le}),x.push(He);});}let Be={};return yt(),watch(Ee,X=>{X&&(F.value=!1);}),{$error:Z,$pending:ye,$invalid:ve,$valid:Ee,$debounce:W,$lazy:H,$errors:se,$ready:We,$silentErrors:Ne,$rewardEarly:U,$autoDirty:E,$clearExternalErrorsOnChange:M,$anyDirty:$,$name:Ue,$haveAnyAsyncRule:mt,$shortcuts:Be,$validating:h,$tooltips:ue}}),u=watch(e,()=>{R.$autoDirty.value&&(p.value||(p.value=!0)),r.value instanceof Function&&O(),(R.$autoDirty.value||R.$rewardEarly.value&&R.$error.value)&&V(),R.$rewardEarly.value!==!0&&R.$clearExternalErrorsOnChange.value&&l();},{deep:g?!0:$e?1:!0}),f=watch(p,()=>{s.setDirtyEntry(a,p.value);}),i=watch(R.$valid,$=>{R.$rewardEarly.value&&$&&(F.value=!1);}),j=watch(R.$haveAnyAsyncRule,b);}function L(){Object.values(y.value).forEach($=>{$.$validate();});}let y=ref(),P=ref();O();function T(){l(),p.value=!1,Object.entries(y.value).forEach(([$,W])=>{W.$reset();}),!R.$lazy.value&&R.$autoDirty.value&&Object.values(y.value).forEach($=>$.$validate());}function D($=!0,W=!1){p.value||(p.value=!0),W&&$?(R.$autoDirty.value||R.$rewardEarly.value&&R.$error.value)&&V():$&&V();}async function _(){try{let $=e.value;if(F.value=!0,!p.value)p.value=!0;else if(R.$autoDirty.value&&p.value&&!R.$pending.value)return {result:!R.$error.value,data:$};return Y(y.value)?{result:!0,data:$}:{result:(await Promise.allSettled(Object.entries(y.value).map(([U,M])=>M.$validate()))).every(U=>U.status==="fulfilled"?U.value===!0:!1),data:$}}catch{return {result:!1,data:e.value}}}function o(){A(),e.value=Qe(e,w),T();}function m($=!0){return p.value?e.value:null}function l(){v?.value?.length&&(v.value=[]);}!R.$lazy.value&&!p.value&&R.$autoDirty.value&&V();let{$shortcuts:S,$validating:N,...J}=R;return reactive({$dirty:p,...J,$externalErrors:v,$value:e,$rules:y,...S,$reset:T,$touch:D,$validate:_,$unwatch:A,$watch:I,$resetAll:o,$extractDirtyFields:m,$clearExternalErrors:l})}function Ae({$id:e,path:r,index:t,options:a,storage:n,stateValue:s,customMessages:d,rules:v,externalErrors:c,initialState:g,shortcuts:w,fieldName:G}){let C=v.$key?v.$key:Se(),R=`${r}.${String(C)}`;typeof s.value=="object"&&s.value!=null&&(s.value.$id?R=`${r}.${s.value.$id}`:Object.defineProperties(s.value,{$id:{value:C,enumerable:!1,configurable:!1,writable:!1}}));let x=de({state:s,rulesDef:toRef(()=>v),customMessages:d,path:R,storage:n,options:a,externalErrors:toRef(c?.value??[],t),initialState:g?.[t],shortcuts:w,fieldName:G});if(x){let p=s.value?.$id;x.$id=p??String(C),n.addArrayStatus(e,x.$id,x);}return x}function ut({state:e,rulesDef:r,customMessages:t,path:a,storage:n,options:s,externalErrors:d,initialState:v,shortcuts:c,fieldName:g}){let w=effectScope(),G,C=effectScope(),R,x=[];if(!Array.isArray(e.value)&&!r.value.$each)return null;let p=ref(),F=ref(e.value),u,i=ref({}),f=n.getCollectionsEntry(a);R=C.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(m=>typeof m!="object"):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(m=>ce(m)):!1)})),j(),O();function j(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(p.value=Se(),Object.defineProperties(e.value,{$id:{value:p.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(p.value=e.value.$id)),!R.isPrimitiveArray.value&&(F.value=i.value.$value,Array.isArray(e.value)?f.value=e.value.map((o,m)=>{let l=Ie(r.value.$each,toRef(()=>o),m),S=Ae({$id:p.value,path:a,customMessages:t,rules:l??{},stateValue:toRef(()=>o),index:m,options:s,storage:n,externalErrors:toRef(d?.value??{},"$each"),initialState:v?.[m],shortcuts:c,fieldName:g});return S||null}).filter(o=>!!o):f.value=[],i.value=be({state:e,rulesDef:r,customMessages:t,path:a,storage:n,options:s,externalErrors:toRef(d?.value??{},"$self"),$isArray:!0,initialState:v,shortcuts:c,fieldName:g}));}function V(){if(Array.isArray(e.value)){let o=ee(f.value);f.value=e.value.map((m,l)=>{let S=toRef(()=>m);if(m.$id&&f.value.find(N=>N.$id===m.$id)){let N=n.getArrayStatus(p.value,m.$id);return N?(N.$value=S,N):null}else {let N=Ie(r.value.$each,S,l);if(N){let J=Ae({$id:p.value,path:a,customMessages:t,rules:N,stateValue:S,index:l,options:s,storage:n,externalErrors:toRef(d?.value??{},"$each"),initialState:v?.[l],shortcuts:c,fieldName:g});return J||null}}}).filter(m=>!!m),o.filter(m=>!e.value.find(l=>m.$id===l.$id)).forEach((m,l)=>{n.deleteArrayStatus(p.value,l.toString());});}else f.value=[];}function O(){u=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?j():V();},{deep:$e?1:!0,flush:"pre"}),G=w.run(()=>{let o=computed(()=>i.value.$dirty&&f.value.every(h=>h.$dirty)),m=computed(()=>i.value.$anyDirty||f.value.some(h=>h.$dirty)),l=computed(()=>i.value.$invalid||f.value.some(h=>h.$invalid)),S=computed(()=>(Y(i.value.$rules)?!0:i.value.$valid)&&f.value.every(h=>h.$valid)),N=computed(()=>i.value.$error||f.value.some(h=>h.$error)),J=computed(()=>!(l.value||$.value)),$=computed(()=>i.value.$pending||f.value.some(h=>h.$pending)),W=computed(()=>({$self:i.value.$errors,$each:f.value.map(h=>h.$errors)})),H=computed(()=>({$self:i.value.$silentErrors,$each:f.value.map(h=>h.$silentErrors)})),U=computed(()=>g);function M(){c?.collections&&Object.entries(c?.collections).forEach(([h,Z])=>{let se=effectScope();E[h]=se.run(()=>{let ue=ref();return watchEffect(()=>{ue.value=Z(reactive({$dirty:o,$error:N,$pending:$,$invalid:l,$valid:S,$errors:W,$ready:J,$silentErrors:H,$anyDirty:m,$name:U,$each:f,$field:i,$value:e}));}),ue}),x.push(se);});}let E={};return M(),{$dirty:o,$anyDirty:m,$invalid:l,$valid:S,$error:N,$pending:$,$errors:W,$silentErrors:H,$ready:J,$name:U,$shortcuts:E}}),R.isPrimitiveArray.value&&(console.warn(`${a} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),u());}function b(){u&&u(),i.value&&i.value.$unwatch(),f.value&&f.value.forEach(o=>{"$dirty"in o&&o.$unwatch();}),w.stop(),w=effectScope(),C.stop(),C=effectScope(!0),x.forEach(o=>o.stop()),x=[];}function A(o=!0,m=!1){i.value.$touch(o,m),f.value.forEach(l=>{l.$touch(o,m);});}function I(){i.value.$reset(),f.value.forEach(o=>{o.$reset();});}async function L(){let o=e.value;try{return {result:(await Promise.allSettled([i.value.$validate(),...f.value.map(S=>S.$validate())])).every(S=>S.status==="fulfilled"?S.value.result===!0:!1),data:o}}catch{return {result:!1,data:o}}}function y(){i.value.$clearExternalErrors(),f.value.forEach(o=>{o.$clearExternalErrors();});}function P(o=!0){let m=f.value.map(l=>{if(tt(l))return l.$extractDirtyFields(o)});return o&&(m=m.filter(l=>q(l)?!Y(l):!!l)),m}function T(){b(),Xe(e,v),I();}let{$shortcuts:D,..._}=G;return reactive({$field:i,..._,...D,$each:f,$value:e,$validate:L,$unwatch:b,$watch:O,$touch:A,$reset:I,$resetAll:T,$extractDirtyFields:P,$clearExternalErrors:y})}function Fe({rulesDef:e,state:r,path:t="",rootRules:a,externalErrors:n,validationGroups:s,initialState:d,fieldName:v,...c}){let g=effectScope(),w,G=[],C=null,R=null,x=null;async function F(T=!0){let D=Object.entries(e.value),_=Object.fromEntries(D.filter(([l,S])=>!!S).map(([l,S])=>{if(S){let N=toRef(r.value,l),J=toRef(()=>S),$=toRef(n?.value??{},l);return [l,de({state:N,rulesDef:J,path:t?`${t}.${l}`:l,externalErrors:$,initialState:d?.[l],fieldName:l,...c})]}return []})),o=Object.fromEntries(Object.entries(unref(n)??{}).filter(([l,S])=>!(l in e.value)&&!!S).map(([l])=>{let S=toRef(r.value,l);return [l,de({state:S,rulesDef:computed(()=>({})),path:t?`${t}.${l}`:l,externalErrors:toRef(n?.value??{},l),initialState:d?.[l],fieldName:l,...c})]})),m=Object.fromEntries(Object.entries(r.value).filter(([l])=>!(l in e.value)&&!(l in(o.value??{}))).map(([l])=>{let S=toRef(r.value,l);return [l,de({state:S,rulesDef:computed(()=>({})),path:t?`${t}.${l}`:l,externalErrors:toRef(n?.value??{},l),initialState:d?.[l],fieldName:l,...c})]}));u.value={..._,...o,...m},T&&V();}let u=c.storage.getFieldsEntry(t);F();function i(){R?.(),Object.values(u.value).forEach(T=>{T.$reset();}),j();}function f(T=!0,D=!1){Object.values(u.value).forEach(_=>{_.$touch(T,D);});}function j(){n?.value&&(R=watch(n,()=>{O(),F();},{deep:!0}));}function V(){a&&(C=watch(a,()=>{O(),F();},{deep:!0,flush:"post"}),j()),x=watch(r,()=>{O(),F(),f(!0,!0);},{flush:"sync"}),w=g.run(()=>{let T=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([M,E])=>E?.$dirty)),D=computed(()=>Object.entries(u.value).some(([M,E])=>E?.$dirty)),_=computed(()=>Object.entries(u.value).some(([M,E])=>E?.$invalid)),o=computed(()=>Object.entries(u.value).every(([M,E])=>E?.$valid)),m=computed(()=>D.value&&!S.value&&_.value),l=computed(()=>unref(c.options.autoDirty)?D.value&&!(_.value||S.value):!(_.value||S.value)),S=computed(()=>Object.entries(u.value).some(([M,E])=>E?.$pending)),N=computed(()=>Object.fromEntries(Object.entries(u.value).map(([M,E])=>[M,E?.$errors]))),J=computed(()=>Object.fromEntries(Object.entries(u.value).map(([M,E])=>[M,E?.$silentErrors]))),$=computed(()=>v);function W(){c.shortcuts?.nested&&Object.entries(c.shortcuts.nested).forEach(([M,E])=>{let h=effectScope();U[M]=h.run(()=>{let Z=ref();return watchEffect(()=>{Z.value=E(reactive({$dirty:T,$value:r,$error:m,$pending:S,$invalid:_,$valid:o,$ready:l,$anyDirty:D,$name:$,$silentErrors:J,$errors:N,$fields:u}));}),Z}),G.push(h);});}let H=computed(()=>s?Object.fromEntries(Object.entries(s?.(u.value)??{}).map(([M,E])=>E.length?[M,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(h=>[h,ke(E,h)])),...Object.fromEntries(["$errors","$silentErrors"].map(h=>[h,qe(E,h)]))}]:[])):{}),U={};return W(),{$dirty:T,$anyDirty:D,$invalid:_,$valid:o,$error:m,$pending:S,$errors:N,$silentErrors:J,$ready:l,$name:$,$shortcuts:U,$groups:H}});}function O(){C?.(),R?.(),x?.(),G.forEach(T=>T.stop()),G=[],u.value&&Object.entries(u.value).forEach(([T,D])=>{D.$unwatch();});}function b(){Object.entries(u.value).forEach(([T,D])=>{D.$clearExternalErrors();});}function A(){O(),ie(r,d??{}),F(!1),i(),V();}function I(T=!0){let D=Object.entries(u.value).map(([_,o])=>[_,o.$extractDirtyFields(T)]);return T&&(D=D.filter(([_,o])=>q(o)?!Y(o):Array.isArray(o)?o.length:!!o)),Object.fromEntries(D)}async function L(){try{let T=r.value;return {result:(await Promise.allSettled(Object.values(u.value).map(o=>o.$validate()))).every(o=>o.status==="fulfilled"?o.value.result===!0:!1),data:T}}catch{return {result:!1,data:r.value}}}let{$shortcuts:y,...P}=w;return reactive({...P,...y,$fields:u,$value:r,$resetAll:A,$reset:i,$touch:f,$validate:L,$unwatch:O,$watch:V,$clearExternalErrors:b,$extractDirtyFields:I})}function de({rulesDef:e,externalErrors:r,...t}){return Ke(e,t.state)?ut({rulesDef:e,externalErrors:r,...t}):Ze(t.state,e)&&Ye(t.state)?Fe({rulesDef:e,externalErrors:r,...t}):et(e)?be({rulesDef:e,externalErrors:r,...t}):null}function je({initialState:e,options:r,scopeRules:t,state:a,customRules:n,shortcuts:s}){let d=Pe();return reactive(Fe({rootRules:t,rulesDef:t,state:a,customMessages:n?.(),storage:d,options:r,externalErrors:r.externalErrors,validationGroups:r.validationGroups,initialState:e,shortcuts:s,fieldName:"root",path:""}))}function Ve(e,r,t){let a={autoDirty:r?.autoDirty??!0,lazy:r?.lazy??!1,rewardEarly:r?.rewardEarly??!1,clearExternalErrorsOnChange:r?.clearExternalErrorsOnChange??!0};function n(s,d,v){let c=isRef(d)?d:computed(typeof d=="function"?d:()=>d),g={...a,...v},w=isRef(s)?s:ref(s),G=ee(toRaw(w.value));return {r$:je({scopeRules:c,state:w,options:g,initialState:G,customRules:e,shortcuts:t})}}return n}var pt=Ve();function _e(){function e(r,t){return t}return e}var Ge=_e();function dt({rules:e,modifiers:r,shortcuts:t}){let a=Ve(e,r,t),n=_e();return {useRegle:a,inferRules:n}}
1
+ import {unref,version,isRef,toRef,computed,ref,toRaw,reactive,shallowRef,onScopeDispose,effectScope,watch,watchEffect}from'vue';var xe=(t=>(t.Inline="__inline",t.Async="__async",t))(xe||{});function ke(e,r){return e.some(t=>t[r])}function qe(e,r){return e.reduce((t,n)=>{let a=n[r]||[];return t.concat(a)},[])}function k(e){return e.map(r=>r instanceof Function?r():unref(r))}function ze(e){return e.map(r=>r instanceof Function||isRef(r)?r:toRef(()=>r))}function Je(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(d=>d.trim()).filter(d=>d.length>0).length:0}function De(e,...r){let{validator:t,type:n}=e,a=n==="__async"||t.constructor.name==="AsyncFunction";return {...{validator(f,...v){return e.validator(f,...k(v.length?v:r))},message(f){return typeof e.message=="function"?e.message({...f,$params:k(f?.$params?.length?f.$params:r)}):e.message},active(f){return typeof e.active=="function"?e.active({...f,$params:k(f.$params?.length?f.$params:r)}):e.active??!0},tooltip(f){return typeof e.tooltip=="function"?e.tooltip({...f,$params:k(f.$params?.length?f.$params:r)}):e.tooltip??[]},exec(f){let v=e.validator(f,...k(r)),g;return v instanceof Promise?v.then(w=>(g=w,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)):(g=v,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:a,_params:ze(r)}}function Ce(e){if(typeof e.validator=="function"){let t=De(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Je(e.validator)>1){let a=function(...s){return De(e,...s)};return a.validator=t.validator,a.message=t.message,a.active=t.active,a.tooltip=t.tooltip,a.type=t.type,a.exec=t.exec,a._validator=t.validator,a._message=t.message,a._active=t.active,a._tooltip=t.tooltip,a._type=e.type,a._message_pacthed=!1,a._tooltip_pacthed=!1,a._async=n,a}else return t}throw new Error("Validator must be a function")}function q(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ye(e){return q(e.value)}function ee(e){let r=e,t={}.toString.call(e).slice(8,-1);if(t=="Set"&&(r=new Set([...e].map(n=>ee(n)))),t=="Map"&&(r=new Map([...e].map(n=>[ee(n[0]),ee(n[1])]))),t=="Date"&&(r=new Date(e.getTime())),t=="RegExp"&&(r=RegExp(e.source,ht(e))),t=="Array"||t=="Object"){r=Array.isArray(e)?[]:{};for(let n in e)r[n]=ee(e[n]);}return r}function ht(e){if(typeof e.source.flags=="string")return e.source.flags;{let r=[];return e.global&&r.push("g"),e.ignoreCase&&r.push("i"),e.multiline&&r.push("m"),e.sticky&&r.push("y"),e.unicode&&r.push("u"),r.join("")}}function Ie(e,r,t){return e instanceof Function?e(r,t??0):e}function Qe(e,r){isRef(e)?e.value=r:e=r;}function Xe(e,r){isRef(e)?e.value=[]:e=[],r.forEach((t,n)=>{let a=isRef(e)?e.value[n]:e[n];a={},ie(a,r[n]);});}function ie(e,r){Object.entries({...unref(e),...r}).forEach(([t,n])=>{let a=isRef(e)?e.value:e,s=isRef(r[t])?r[t]._value:r[t],d=isRef(a[t])?a[t].value:a[t];Array.isArray(a[t])?(a[t]=[],Array.isArray(s)&&s.forEach((f,v)=>{a[t][v]={},ie(a[t][v],s[v]);})):q(s)?ie(d,s):isRef(a[t])?a[t].value=s:a[t]=s;});}function ge(e,r,t){let n,a=(...s)=>new Promise(d=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...s])).then(d);},r);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a}function Tt(e,r){let t=String(e).split("."),n=String(r).split(".");for(let a=0;a<Math.min(t.length,n.length);a++){let s=Number(t[a]),d=Number(n[a]);if(s>d)return 1;if(d>s)return -1;if(!isNaN(s)&&isNaN(d))return 1;if(isNaN(s)&&!isNaN(d))return -1}return 0}var $e=Tt(version,"3.5.0")!==-1;function Et(){return Math.floor(Math.random()*Date.now()).toString()}function Se(){return typeof window>"u"?Et():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Pe(){let e=shallowRef(new Map),r=shallowRef(new Map),t=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),s=shallowRef(new Map);function d(u){let i=r.value.get(u);if(i)return i;{let c=ref({});return r.value.set(u,c),c}}function f(u){let i=t.value.get(u);if(i)return i;{let c=ref([]);return t.value.set(u,c),c}}function v(u,i,c){s.value.set(`${u}-${i}`,c);}function g(u,i){return s.value.get(`${u}-${i}`)}function w(u,i){u&&i!=null&&s.value.delete(`${u}-${i}`);}function G(u,i){n.value.set(u,i);}function C(u){return n.value.get(u)??!1}function R(u,i){e.value.set(u,i);}function x(u,i){let c=e.value.get(u);return c?p(i,c)?{valid:!0}:{valid:!1}:void 0}function p(u,i){let c=Object.keys(i),j=Object.keys(u);return j.length!==c.length||!j.every(O=>c.includes(O))?!1:j.every(O=>{let b=u[O],A=i[O];return !A||!b||typeof b=="function"||typeof A=="function"||typeof b=="number"||typeof b=="boolean"?!1:b._params?b._params?.every((I,L)=>{if(typeof A=="number"||typeof A=="boolean")return !0;{let y=k(A._params),P=k(b._params);return y?.[L]===P?.[L]}}):!0})}function M(u){let i=a.value.get(u);if(i)return i;{let c=ref(!1),j=ref(!0),_=ref({}),O=ref(!1);return a.value.set(u,{$pending:c,$valid:j,$metadata:_,$validating:O}),{$pending:c,$valid:j,$metadata:_,$validating:O}}}return onScopeDispose(()=>{e.value.clear(),r.value.clear(),t.value.clear(),n.value.clear(),a.value.clear(),s.value.clear();}),{addRuleDeclEntry:R,setDirtyEntry:G,checkRuleDeclEntry:x,getDirtyState:C,trySetRuleStatusRef:M,getFieldsEntry:d,getCollectionsEntry:f,getArrayStatus:g,addArrayStatus:v,deleteArrayStatus:w,arrayStatusStorage:s}}function Y(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}function Ze(e,r){return q(e.value)&&q(r.value)&&!Object.entries(r.value).some(t=>ce(t))}function Ke(e,r){return !!e.value&&"$each"in e.value||Array.isArray(r.value)}function et(e){return !!e.value&&q(e.value)}function ce(e){return q(e)&&"_validator"in e}function fe(e){return typeof e.value!="function"}function tt(e){return q(e)&&"$fields"in e}function Oe({field:e,silent:r=!1}){return Object.entries(e.$rules??{}).map(([t,n])=>r||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(t=>!!t).reduce((t,n)=>typeof n=="string"?t?.concat([n]):t?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function rt({field:e}){return Object.entries(e.$rules??{}).map(([r,t])=>t.$tooltip).filter(r=>!!r).reduce((r,t)=>typeof t=="string"?r?.concat([t]):r?.concat(t),[])}function at({$dirty:e,customMessages:r,rule:t,ruleKey:n,state:a,path:s,storage:d,$debounce:f}){let v=effectScope(),g,w,G=ref(!1),{$pending:C,$valid:R,$metadata:x,$validating:p}=d.trySetRuleStatusRef(`${s}.${n}`);function M(){g=v.run(()=>{let b=computed(()=>({$value:a.value,$invalid:!R.value,$pending:C.value,$dirty:e.value,$params:D.value,...x.value})),A=computed(()=>fe(t)?typeof t.value.active=="function"?t.value.active(b.value):!!t.value.active:!0);function I(o){let m="",l=r?r[n]?.[o]:void 0;if(l&&(typeof l=="function"?m=l(b.value):m=l),fe(t)){let $=`_${o}_patched`;l&&!t.value[$]||(typeof t.value[o]=="function"?m=t.value[o](b.value):m=t.value[o]??"");}return m}let L=computed(()=>{let o=I("message");return Y(o)&&(o="This field is not valid"),o}),y=computed(()=>I("tooltip")),P=computed(()=>fe(t)&&t.value.type?t.value.type:n),T=computed(()=>fe(t)?t.value.validator:t.value),D=computed(()=>typeof t.value=="function"?[]:k(t.value._params??[])),V=computed(()=>`${s}.${P.value}`);return {$active:A,$message:L,$type:P,$validator:T,$params:D,$path:V,$tooltip:y}}),w=watch(g.$params,j,{deep:!0});}M();function u(){R.value=!0,e.value&&(C.value=!0);}async function i(){let b=g.$validator.value,A=b(a.value,...g.$params.value),I=!1,L=a.value;try{u();let y;if(A instanceof Promise?y=await A:y=A,a.value!==L)return !0;if(typeof y=="boolean")I=y;else {let{$valid:P,...T}=y;I=P,x.value=T;}}catch{I=!1;}finally{C.value=!1;}return I}let c=ge(i,f??200);async function j(){try{p.value=!0;let b=!1;if(ce(t.value)&&t.value._async)b=await c();else {let A=g.$validator.value,I=A(a.value,...g.$params.value);if(I 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(I!=null)if(typeof I=="boolean")b=I;else {let{$valid:L,...y}=I;b=L,x.value=y;}}return R.value=b,b}catch{return !1}finally{p.value=!1;}}function _(){R.value=!0,x.value={},C.value=!1,p.value=!1,M();}function O(){w(),v.stop(),v=effectScope();}return reactive({...g,$pending:C,$valid:R,$metadata:x,$haveAsync:G,$validating:p,$validate:j,$unwatch:O,$watch:M,$reset:_})}function be({state:e,rulesDef:r,customMessages:t,path:n,fieldName:a,storage:s,options:d,externalErrors:f,onUnwatch:v,$isArray:g,initialState:w,shortcuts:G}){let C=effectScope(),R,x=[],p=ref(!1),M=ref(!1),u,i,c,j,_=()=>{};function O(){let S=r.value,W=s.checkRuleDeclEntry(n,S);P.value=Object.fromEntries(Object.entries(S).filter(([H])=>H.startsWith("$"))),y.value=Object.fromEntries(Object.entries(r.value).filter(([H])=>!H.startsWith("$")).map(([H,U])=>{if(U){let F=toRef(()=>U);return [H,at({$dirty:p,customMessages:t,rule:F,ruleKey:H,state:e,path:n,storage:s,$debounce:P.value.$debounce})]}return []}).filter(H=>!!H.length)),I(),b(),W?.valid!=null&&(p.value=s.getDirtyState(n),p.value&&_()),s.addRuleDeclEntry(n,S);}function b(){_=R.$debounce.value?ge(L,R.$debounce.value??R.$haveAnyAsyncRule?100:0):L;}function A(){y.value&&Object.entries(y.value).forEach(([S,W])=>{W.$unwatch();}),c(),p.value&&s.setDirtyEntry(n,p.value),u?.(),i?.(),C.stop(),C=effectScope(),x.forEach(S=>S.stop()),x=[],v?.(),j?.();}function I(){y.value&&Object.entries(y.value).forEach(([S,W])=>{W.$watch();}),R=C.run(()=>{let S=computed(()=>p.value),W=computed(()=>P.value.$debounce),H=computed(()=>P.value.$lazy!=null?P.value.$lazy:unref(d.lazy)),U=computed(()=>E.value===!0?!1:P.value.$rewardEarly!=null?P.value.$rewardEarly:unref(d.rewardEarly)),F=computed(()=>P.value.$clearExternalErrorsOnChange!=null?P.value.$clearExternalErrorsOnChange:unref(d.clearExternalErrorsOnChange)),E=computed(()=>P.value.$autoDirty!=null?P.value.$autoDirty:unref(d.autoDirty)),h=computed(()=>Object.entries(y.value).some(([X,Z])=>Z.$validating)),K=computed(()=>ve.value&&!ye.value&&p.value),se=computed(()=>K.value?Oe({field:{$dirty:p.value,$externalErrors:f?.value,$rules:y.value}}):[]),ue=computed(()=>rt({field:{$rules:y.value}})),Ne=computed(()=>Oe({field:{$dirty:p.value,$externalErrors:f?.value,$rules:y.value},silent:!0})),We=computed(()=>!(ve.value||ye.value)),ye=computed(()=>M.value||!U.value?Object.entries(y.value).some(([X,Z])=>Z.$pending):!1),ve=computed(()=>f?.value?.length?!0:Y(y.value)?!1:!U.value||U.value&&M.value?Object.entries(y.value).some(([X,Z])=>!Z.$valid):!1),Ue=computed(()=>a),Ee=computed(()=>f?.value?.length||Y(y.value)?!1:p.value&&!Y(e.value)&&!h.value?Object.values(y.value).every(X=>X.$valid&&X.$active):!1),mt=computed(()=>Object.entries(y.value).some(([X,Z])=>Z.$haveAsync));function yt(){G?.fields&&Object.entries(G.fields).forEach(([X,Z])=>{let He=effectScope();Be[X]=He.run(()=>{let Le=ref();return watchEffect(()=>{Le.value=Z(reactive({$dirty:p,$externalErrors:f?.value??[],$value:e,$rules:y,$error:K,$pending:ye,$invalid:ve,$valid:Ee,$errors:se,$ready:We,$silentErrors:Ne,$anyDirty:S,$tooltips:ue,$name:Ue}));}),Le}),x.push(He);});}let Be={};return yt(),watch(Ee,X=>{X&&(M.value=!1);}),{$error:K,$pending:ye,$invalid:ve,$valid:Ee,$debounce:W,$lazy:H,$errors:se,$ready:We,$silentErrors:Ne,$rewardEarly:U,$autoDirty:E,$clearExternalErrorsOnChange:F,$anyDirty:S,$name:Ue,$haveAnyAsyncRule:mt,$shortcuts:Be,$validating:h,$tooltips:ue}}),u=watch(e,()=>{R.$autoDirty.value&&(p.value||(p.value=!0)),r.value instanceof Function&&O(),(R.$autoDirty.value||R.$rewardEarly.value&&R.$error.value)&&_(),R.$rewardEarly.value!==!0&&R.$clearExternalErrorsOnChange.value&&l();},{deep:g?!0:$e?1:!0}),c=watch(p,()=>{s.setDirtyEntry(n,p.value);}),i=watch(R.$valid,S=>{R.$rewardEarly.value&&S&&(M.value=!1);}),j=watch(R.$haveAnyAsyncRule,b);}function L(){Object.values(y.value).forEach(S=>{S.$validate();});}let y=ref(),P=ref();O();function T(){l(),p.value=!1,s.setDirtyEntry(n,!1),Object.entries(y.value).forEach(([S,W])=>{W.$reset();}),!R.$lazy.value&&R.$autoDirty.value&&Object.values(y.value).forEach(S=>S.$validate());}function D(S=!0,W=!1){p.value||(p.value=!0),W&&S?(R.$autoDirty.value||R.$rewardEarly.value&&R.$error.value)&&_():S&&_();}async function V(){try{let S=e.value;if(M.value=!0,!p.value)p.value=!0;else if(R.$autoDirty.value&&p.value&&!R.$pending.value)return {result:!R.$error.value,data:S};return Y(y.value)?{result:!0,data:S}:{result:(await Promise.allSettled(Object.entries(y.value).map(([U,F])=>F.$validate()))).every(U=>U.status==="fulfilled"?U.value===!0:!1),data:S}}catch{return {result:!1,data:e.value}}}function o(){A(),e.value=Qe(e,w),T();}function m(S=!0){return p.value?e.value:null}function l(){f?.value?.length&&(f.value=[]);}!R.$lazy.value&&!p.value&&R.$autoDirty.value&&_();let{$shortcuts:$,$validating:N,...J}=R;return reactive({$dirty:p,...J,$externalErrors:f,$value:e,$rules:y,...$,$reset:T,$touch:D,$validate:V,$unwatch:A,$watch:I,$resetAll:o,$extractDirtyFields:m,$clearExternalErrors:l})}function Ae({$id:e,path:r,index:t,options:n,storage:a,stateValue:s,customMessages:d,rules:f,externalErrors:v,initialState:g,shortcuts:w,fieldName:G}){let C=f.$key?f.$key:Se(),R=`${r}.${String(C)}`;typeof s.value=="object"&&s.value!=null&&(s.value.$id?R=`${r}.${s.value.$id}`:Object.defineProperties(s.value,{$id:{value:C,enumerable:!1,configurable:!1,writable:!1}}));let x=de({state:s,rulesDef:toRef(()=>f),customMessages:d,path:R,storage:a,options:n,externalErrors:toRef(v?.value??[],t),initialState:g?.[t],shortcuts:w,fieldName:G});if(x){let p=s.value?.$id;x.$id=p??String(C),a.addArrayStatus(e,x.$id,x);}return x}function ut({state:e,rulesDef:r,customMessages:t,path:n,storage:a,options:s,externalErrors:d,initialState:f,shortcuts:v,fieldName:g}){let w=effectScope(),G,C=effectScope(),R,x=[];if(!Array.isArray(e.value)&&!r.value.$each)return null;let p=ref(),M=ref(e.value),u,i=ref({}),c=a.getCollectionsEntry(n);R=C.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(m=>typeof m!="object"):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(m=>ce(m)):!1)})),j(),O();function j(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(p.value=Se(),Object.defineProperties(e.value,{$id:{value:p.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(p.value=e.value.$id)),!R.isPrimitiveArray.value&&(M.value=i.value.$value,Array.isArray(e.value)?c.value=e.value.map((o,m)=>{let l=Ie(r.value.$each,toRef(()=>o),m),$=Ae({$id:p.value,path:n,customMessages:t,rules:l??{},stateValue:toRef(()=>o),index:m,options:s,storage:a,externalErrors:toRef(d?.value??{},"$each"),initialState:f?.[m],shortcuts:v,fieldName:g});return $||null}).filter(o=>!!o):c.value=[],i.value=be({state:e,rulesDef:r,customMessages:t,path:n,storage:a,options:s,externalErrors:toRef(d?.value??{},"$self"),$isArray:!0,initialState:f,shortcuts:v,fieldName:g}));}function _(){if(Array.isArray(e.value)){let o=ee(c.value);c.value=e.value.map((m,l)=>{let $=toRef(()=>m);if(m.$id&&c.value.find(N=>N.$id===m.$id)){let N=a.getArrayStatus(p.value,m.$id);return N?(N.$value=$,N):null}else {let N=Ie(r.value.$each,$,l);if(N){let J=Ae({$id:p.value,path:n,customMessages:t,rules:N,stateValue:$,index:l,options:s,storage:a,externalErrors:toRef(d?.value??{},"$each"),initialState:f?.[l],shortcuts:v,fieldName:g});return J||null}}}).filter(m=>!!m),o.filter(m=>!e.value.find(l=>m.$id===l.$id)).forEach((m,l)=>{a.deleteArrayStatus(p.value,l.toString());});}else c.value=[];}function O(){u=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?j():_();},{deep:$e?1:!0,flush:"pre"}),G=w.run(()=>{let o=computed(()=>i.value.$dirty&&c.value.every(h=>h.$dirty)),m=computed(()=>i.value.$anyDirty||c.value.some(h=>h.$dirty)),l=computed(()=>i.value.$invalid||c.value.some(h=>h.$invalid)),$=computed(()=>(Y(i.value.$rules)?!0:i.value.$valid)&&c.value.every(h=>h.$valid)),N=computed(()=>i.value.$error||c.value.some(h=>h.$error)),J=computed(()=>!(l.value||S.value)),S=computed(()=>i.value.$pending||c.value.some(h=>h.$pending)),W=computed(()=>({$self:i.value.$errors,$each:c.value.map(h=>h.$errors)})),H=computed(()=>({$self:i.value.$silentErrors,$each:c.value.map(h=>h.$silentErrors)})),U=computed(()=>g);function F(){v?.collections&&Object.entries(v?.collections).forEach(([h,K])=>{let se=effectScope();E[h]=se.run(()=>{let ue=ref();return watchEffect(()=>{ue.value=K(reactive({$dirty:o,$error:N,$pending:S,$invalid:l,$valid:$,$errors:W,$ready:J,$silentErrors:H,$anyDirty:m,$name:U,$each:c,$field:i,$value:e}));}),ue}),x.push(se);});}let E={};return F(),{$dirty:o,$anyDirty:m,$invalid:l,$valid:$,$error:N,$pending:S,$errors:W,$silentErrors:H,$ready:J,$name:U,$shortcuts:E}}),R.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`),u());}function b(){u&&u(),i.value&&i.value.$unwatch(),c.value&&c.value.forEach(o=>{"$dirty"in o&&o.$unwatch();}),w.stop(),w=effectScope(),C.stop(),C=effectScope(!0),x.forEach(o=>o.stop()),x=[];}function A(o=!0,m=!1){i.value.$touch(o,m),c.value.forEach(l=>{l.$touch(o,m);});}function I(){i.value.$reset(),c.value.forEach(o=>{o.$reset();});}async function L(){let o=e.value;try{return {result:(await Promise.allSettled([i.value.$validate(),...c.value.map($=>$.$validate())])).every($=>$.status==="fulfilled"?$.value.result===!0:!1),data:o}}catch{return {result:!1,data:o}}}function y(){i.value.$clearExternalErrors(),c.value.forEach(o=>{o.$clearExternalErrors();});}function P(o=!0){let m=c.value.map(l=>{if(tt(l))return l.$extractDirtyFields(o)});return o&&(m=m.filter(l=>q(l)?!Y(l):!!l)),m}function T(){b(),Xe(e,f),I();}let{$shortcuts:D,...V}=G;return reactive({$field:i,...V,...D,$each:c,$value:e,$validate:L,$unwatch:b,$watch:O,$touch:A,$reset:I,$resetAll:T,$extractDirtyFields:P,$clearExternalErrors:y})}function Me({rulesDef:e,state:r,path:t="",rootRules:n,externalErrors:a,validationGroups:s,initialState:d,fieldName:f,...v}){let g=effectScope(),w,G=[],C=null,R=null,x=null;async function M(T=!0){let D=Object.entries(e.value),V=Object.fromEntries(D.filter(([l,$])=>!!$).map(([l,$])=>{if($){let N=toRef(r.value,l),J=toRef(()=>$),S=toRef(a?.value??{},l);return [l,de({state:N,rulesDef:J,path:t?`${t}.${l}`:l,externalErrors:S,initialState:d?.[l],fieldName:l,...v})]}return []})),o=Object.fromEntries(Object.entries(unref(a)??{}).filter(([l,$])=>!(l in e.value)&&!!$).map(([l])=>{let $=toRef(r.value,l);return [l,de({state:$,rulesDef:computed(()=>({})),path:t?`${t}.${l}`:l,externalErrors:toRef(a?.value??{},l),initialState:d?.[l],fieldName:l,...v})]})),m=Object.fromEntries(Object.entries(r.value).filter(([l])=>!(l in e.value)&&!(l in(o.value??{}))).map(([l])=>{let $=toRef(r.value,l);return [l,de({state:$,rulesDef:computed(()=>({})),path:t?`${t}.${l}`:l,externalErrors:toRef(a?.value??{},l),initialState:d?.[l],fieldName:l,...v})]}));u.value={...V,...o,...m},T&&_();}let u=v.storage.getFieldsEntry(t);M();function i(){R?.(),Object.values(u.value).forEach(T=>{T.$reset();}),j();}function c(T=!0,D=!1){Object.values(u.value).forEach(V=>{V.$touch(T,D);});}function j(){a?.value&&(R=watch(a,()=>{O(),M();},{deep:!0}));}function _(){n&&(C=watch(n,()=>{O(),M();},{deep:!0,flush:"post"}),j()),x=watch(r,()=>{O(),M(),c(!0,!0);},{flush:"sync"}),w=g.run(()=>{let T=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([F,E])=>E?.$dirty)),D=computed(()=>Object.entries(u.value).some(([F,E])=>E?.$dirty)),V=computed(()=>Object.entries(u.value).some(([F,E])=>E?.$invalid)),o=computed(()=>Object.entries(u.value).every(([F,E])=>E?.$valid)),m=computed(()=>D.value&&!$.value&&V.value),l=computed(()=>unref(v.options.autoDirty)?D.value&&!(V.value||$.value):!(V.value||$.value)),$=computed(()=>Object.entries(u.value).some(([F,E])=>E?.$pending)),N=computed(()=>Object.fromEntries(Object.entries(u.value).map(([F,E])=>[F,E?.$errors]))),J=computed(()=>Object.fromEntries(Object.entries(u.value).map(([F,E])=>[F,E?.$silentErrors]))),S=computed(()=>f);function W(){v.shortcuts?.nested&&Object.entries(v.shortcuts.nested).forEach(([F,E])=>{let h=effectScope();U[F]=h.run(()=>{let K=ref();return watchEffect(()=>{K.value=E(reactive({$dirty:T,$value:r,$error:m,$pending:$,$invalid:V,$valid:o,$ready:l,$anyDirty:D,$name:S,$silentErrors:J,$errors:N,$fields:u}));}),K}),G.push(h);});}let H=computed(()=>s?Object.fromEntries(Object.entries(s?.(u.value)??{}).map(([F,E])=>E.length?[F,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(h=>[h,ke(E,h)])),...Object.fromEntries(["$errors","$silentErrors"].map(h=>[h,qe(E,h)]))}]:[])):{}),U={};return W(),{$dirty:T,$anyDirty:D,$invalid:V,$valid:o,$error:m,$pending:$,$errors:N,$silentErrors:J,$ready:l,$name:S,$shortcuts:U,$groups:H}});}function O(){C?.(),R?.(),x?.(),G.forEach(T=>T.stop()),G=[],u.value&&Object.entries(u.value).forEach(([T,D])=>{D.$unwatch();});}function b(){Object.entries(u.value).forEach(([T,D])=>{D.$clearExternalErrors();});}async function A(){O(),ie(r,d??{}),i(),M();}function I(T=!0){let D=Object.entries(u.value).map(([V,o])=>[V,o.$extractDirtyFields(T)]);return T&&(D=D.filter(([V,o])=>q(o)?!Y(o):Array.isArray(o)?o.length:!!o)),Object.fromEntries(D)}async function L(){try{let T=r.value;return {result:(await Promise.allSettled(Object.values(u.value).map(o=>o.$validate()))).every(o=>o.status==="fulfilled"?o.value.result===!0:!1),data:T}}catch{return {result:!1,data:r.value}}}let{$shortcuts:y,...P}=w;return reactive({...P,...y,$fields:u,$value:r,$resetAll:A,$reset:i,$touch:c,$validate:L,$unwatch:O,$watch:_,$clearExternalErrors:b,$extractDirtyFields:I})}function de({rulesDef:e,externalErrors:r,...t}){return Ke(e,t.state)?ut({rulesDef:e,externalErrors:r,...t}):Ze(t.state,e)&&Ye(t.state)?Me({rulesDef:e,externalErrors:r,...t}):et(e)?be({rulesDef:e,externalErrors:r,...t}):null}function je({initialState:e,options:r,scopeRules:t,state:n,customRules:a,shortcuts:s}){let d=Pe();return reactive(Me({rootRules:t,rulesDef:t,state:n,customMessages:a?.(),storage:d,options:r,externalErrors:r.externalErrors,validationGroups:r.validationGroups,initialState:e,shortcuts:s,fieldName:"root",path:""}))}function Ve(e,r,t){let n={autoDirty:r?.autoDirty??!0,lazy:r?.lazy??!1,rewardEarly:r?.rewardEarly??!1,clearExternalErrorsOnChange:r?.clearExternalErrorsOnChange??!0};function a(s,d,f){let v=isRef(d)?d:computed(typeof d=="function"?d:()=>d),g={...n,...f},w=isRef(s)?s:ref(s),G=ee(toRaw(w.value));return {r$:je({scopeRules:v,state:w,options:g,initialState:G,customRules:e,shortcuts:t})}}return a}var pt=Ve();function _e(){function e(r,t){return t}return e}var Ge=_e();function dt({rules:e,modifiers:r,shortcuts:t}){let n=Ve(e,r,t),a=_e();return {useRegle:n,inferRules:a}}
2
2
  export{xe as InternalRuleType,Ce as createRule,dt as defineRegleConfig,Ge as inferRules,k as unwrapRuleParameters,pt as useRegle};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regle/core",
3
- "version": "0.3.2",
3
+ "version": "0.4.0",
4
4
  "description": "Typescript-first model-based form validation library for Vue 3",
5
5
  "peerDependencies": {
6
6
  "vue": "^3.1.0"
@@ -51,9 +51,21 @@
51
51
  "name": "Victor Garcia",
52
52
  "url": "https://github.com/victorgarciaesgi"
53
53
  },
54
+ "keywords": [
55
+ "vue forms",
56
+ "vue validation library",
57
+ "vue forms typescript",
58
+ "vue model validation",
59
+ "vue zod",
60
+ "vue typescript forms",
61
+ "regle",
62
+ "reglejs",
63
+ "regle vue",
64
+ "regle vue forms",
65
+ "regle vue form"
66
+ ],
54
67
  "license": "MIT",
55
68
  "scripts": {
56
- "lint": "eslint --ext .ts --ext .vue .",
57
69
  "typecheck": "tsc --noEmit",
58
70
  "build": "tsup --minify",
59
71
  "build:sourcemaps": "tsup --clean false --sourcemap inline",