@regle/core 0.1.9 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var vue=require('vue');function F(e){return e.map(t=>t instanceof Function?t():vue.unref(t))}function Ce(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function Ie(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(o=>o.trim()).filter(o=>o.includes("=")).length+e.length}function se(e,...t){let{message:r,validator:n,active:a,...o}=e,m=n.constructor.name==="AsyncFunction";return {...{validator(y,...i){return e.validator(y,...F(i.length?i:t))},message(y,i){return typeof e.message=="function"?e.message(y,{...i,$params:F(i.$params?.length?i.$params:t)}):e.message},active(y,i){return typeof e.active=="function"?e.active(y,{...i,$params:F(i.$params?.length?i.$params:t)}):e.active??!0},exec(y){let i=e.validator(y,...F(t)),l;return i instanceof Promise?i.then(T=>(l=T,typeof l=="object"&&"$valid"in l?l.$valid:typeof l=="boolean"?l:!1)):(l=i,typeof l=="object"&&"$valid"in l?l.$valid:typeof l=="boolean"?l:!1)}},...o,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:m,_params:Ce(t)}}function ie(e){if(typeof e.validator=="function"){let r=se(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Ie(e.validator)>1){let a=function(...o){return se(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pe(e){return k(e.value)}function G(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>G(n)))),r=="Map"&&(t=new Map([...e].map(n=>[G(n[0]),G(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,et(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=G(e[n]);}return t}function et(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function ue(e,t,r){return e instanceof Function?e(t,r??0):e}function te(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function Q(e,t,r){let n,a=(...o)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(m);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(m);},0);}),a}function rt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),m=Number(n[a]);if(o>m)return 1;if(m>o)return -1;if(!isNaN(o)&&isNaN(m))return 1;if(isNaN(o)&&!isNaN(m))return -1}return 0}var H=rt(vue.version,"3.5.0")!==-1;function nt(){return Math.floor(Math.random()*Date.now()).toString()}function ce(){return typeof window>"u"?nt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function fe(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),a=vue.shallowRef(new Map),o=vue.shallowRef(new Map);function m(p){let R=t.value.get(p);if(R)return R;{let d=vue.ref({});return t.value.set(p,d),d}}function I(p){let R=r.value.get(p);if(R)return R;{let d=vue.ref([]);return r.value.set(p,d),d}}function P(p,R,d){o.value.set(`${p}-${R}`,d);}function y(p,R){return o.value.get(`${p}-${R}`)}function i(p,R){p&&R!=null&&o.value.delete(`${p}-${R}`);}function l(p,R){n.value.set(p,R);}function T(p){return n.value.get(p)??!1}function h(p,R){e.value.set(p,R);}function E(p,R){let d=e.value.get(p);return d?u(R,d)?{valid:!0}:{valid:!1}:void 0}function u(p,R){let d=Object.keys(R),w=Object.keys(p);return w.length!==d.length||!w.every(g=>d.includes(g))?!1:w.every(g=>{let c=p[g],s=R[g];return !s||!c||typeof c=="function"||typeof s=="function"||typeof c=="number"||typeof c=="boolean"?!1:c._params?c._params?.every((f,C)=>{if(typeof s=="number"||typeof s=="boolean")return !0;{let v=F(s._params),S=F(c._params);return v?.[C]===S?.[C]}}):!0})}function M(p){let R=a.value.get(p);if(R)return R;{let d=vue.ref(!1),w=vue.ref(!0),x=vue.ref({}),g=vue.ref(!1);return a.value.set(p,{$pending:d,$valid:w,$metadata:x,$validating:g}),{$pending:d,$valid:w,$metadata:x,$validating:g}}}return vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:h,setDirtyEntry:l,checkRuleDeclEntry:E,getDirtyState:T,trySetRuleStatusRef:M,getFieldsEntry:m,getCollectionsEntry:I,getArrayStatus:y,addArrayStatus:P,deleteArrayStatus:i,arrayStatusStorage:o}}function we(e,t){return k(e.value)&&k(t.value)&&!Object.entries(t.value).some(r=>Re(r))}function Oe(e){return !!e.value&&"$each"in e.value}function Ae(e){return !!e.value&&k(e.value)}function Re(e){return k(e)&&"_validator"in e}function X(e){return typeof e.value!="function"}function pe(e){return k(e)&&"$fields"in e}function de(e){return !!e&&"$each"in e}function me(e){return !!e&&"$rules"in e}function ge(e){return "$each"in e||"$errors"in e}function N({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function Me(e,t=!1){return pe(e)?ye(e.$fields):de(e)?{$errors:e.$field.$rules?N({field:e.$field,silent:t}):[],$each:e.$each.map(r=>Me(r,t))}:me(e)?e.$error?N({field:e,silent:t}):e.$externalErrors??[]:[]}function ot(e,t=!1){return e.map(r=>Me(r,t))}function ye(e,t=!1){return Object.fromEntries(Object.entries(e).map(([r,n])=>pe(n)?[r,ye(n.$fields,t)]:de(n)?[r,{$errors:N({field:n.$field,silent:t}),$each:ot(n.$each,t)}]:me(n)?n.$error?[r,N({field:n,silent:t})]:[r,n.$externalErrors??[]]:[r,[]]))}function Fe(e){return vue.computed(()=>ye(e.$fields))}var Ve=(r=>(r.Inline="__inline",r.Async="__async",r))(Ve||{});function _e(e,t){return vue.computed(()=>e.value.some(r=>r[t]))}function ke(e,t){return vue.computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function Be({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:m,$debounce:I}){let P=vue.effectScope(),y,i,{$pending:l,$valid:T,$metadata:h,$validating:E}=m.trySetRuleStatusRef(`${o}.${n}`);function u(){y=P.run(()=>{let x=vue.computed(()=>({$invalid:!T.value,$params:C.value,...h.value})),g=vue.computed(()=>X(r)?typeof r.value.active=="function"?r.value.active(a.value,x.value):r.value.active:!0),c=vue.computed(()=>{let S="",D=t?t[n]?.message:void 0;return D&&(typeof D=="function"?S=D(a.value,x.value):S=D),X(r)&&(D&&!r.value._patched||(typeof r.value.message=="function"?S=r.value.message(a.value,x.value):S=r.value.message)),te(S)&&(S="Error",console.warn(`No error message defined for ${o}.${n}`)),S}),s=vue.computed(()=>X(r)&&r.value.type?r.value.type:n),f=vue.computed(()=>X(r)?r.value.validator:r.value),C=vue.computed(()=>typeof r.value=="function"?[]:F(r.value._params??[])),v=vue.computed(()=>`${o}.${s.value}`);return {$active:g,$message:c,$type:s,$validator:f,$params:C,$path:v}}),i=vue.watch(y.$params,R,{deep:!0});}u();async function M(x){let g=!1;try{T.value=!0,e.value&&(l.value=!0);let c=await x;if(typeof c=="boolean")g=c;else {let{$valid:s,...f}=c;g=s,h.value=f;}}catch{g=!1;}finally{l.value=!1;}return g}let p=Q(M,I??100);async function R(){E.value=!0;let x=y.$validator.value,g=!1,c=x(a.value,...y.$params.value);if(c instanceof Promise)g=await p(c);else if(c!=null)if(typeof c=="boolean")g=c;else {let{$valid:s,...f}=c;g=s,h.value=f;}return T.value=g,E.value=!1,g}function d(){T.value=!0,h.value={},l.value=!1,E.value=!1,u();}function w(){i(),P.stop(),P=vue.effectScope();}return vue.reactive({...y,$pending:l,$valid:T,$metadata:h,$validate:R,$unwatch:w,$watch:u,$reset:d})}function re({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:I,onUnwatch:P}){let y=vue.effectScope(),i,l=vue.ref(!1),T=vue.ref(!1),h=vue.ref([]),E,u,M,p,R=()=>{};function d(){h.value=m.value??[];}d();function w(){let $=t.value,b=a.checkRuleDeclEntry(n,$);f.value=Object.fromEntries(Object.entries($).filter(([A])=>A.startsWith("$"))),s.value=Object.fromEntries(Object.entries(t.value).filter(([A])=>!A.startsWith("$")).map(([A,_])=>{if(_){let le=vue.toRef(()=>_);return [A,Be({$dirty:l,customMessages:r,rule:le,ruleKey:A,state:e,path:n,storage:a,$debounce:f.value.$debounce})]}return []}).filter(A=>!!A.length)),g(),R=i.$debounce.value?Q(c,i.$debounce.value??0):c,b?.valid!=null&&(l.value=a.getDirtyState(n),l.value&&R()),a.addRuleDeclEntry(n,$);}function x(){s.value&&Object.entries(s.value).forEach(([$,b])=>{b.$unwatch();}),p(),l.value&&a.setDirtyEntry(n,l.value),E(),u(),M(),y.stop(),y=vue.effectScope(),P?.();}function g(){s.value&&Object.entries(s.value).forEach(([$,b])=>{b.$watch();}),i=y.run(()=>{let $=vue.computed(()=>l.value),b=vue.computed(()=>f.value.$debounce),A=vue.computed(()=>f.value.$lazy!=null?f.value.$lazy:vue.unref(o.lazy)),_=vue.computed(()=>f.value.$rewardEarly!=null?f.value.$rewardEarly:vue.unref(o.rewardEarly)),le=vue.computed(()=>f.value.$autoDirty!=null?f.value.$autoDirty:vue.unref(o.autoDirty)),Je=vue.computed(()=>oe.value&&!he.value&&l.value),Qe=vue.computed(()=>N({field:{$dirty:l.value,$externalErrors:h.value,$rules:s.value}})),Xe=vue.computed(()=>N({field:{$dirty:l.value,$externalErrors:h.value,$rules:s.value},silent:!0})),he=vue.computed(()=>T.value||!_.value?Object.entries(s.value).some(([ee,J])=>J.$pending):!1),oe=vue.computed(()=>h.value?.length?!0:!_.value||_.value&&T.value?Object.entries(s.value).some(([ee,J])=>!J.$valid):!1),De=vue.computed(()=>l.value&&!te(e.value)?h.value?.length?!1:_.value?Object.entries(s.value).every(([ee,J])=>J.$valid):!oe.value:!1);return vue.watch(De,ee=>{ee&&(T.value=!1);}),{$error:Je,$pending:he,$invalid:oe,$valid:De,$debounce:b,$lazy:A,$errors:Qe,$silentErrors:Xe,$rewardEarly:_,$autoDirty:le,$anyDirty:$}}),M=vue.watch(m,d),E=vue.watch(e,()=>{i.$autoDirty.value&&(l.value||(l.value=!0)),t.value instanceof Function&&w(),R(),i.$rewardEarly.value;},{deep:H?1:!0}),p=vue.watch(l,()=>{a.setDirtyEntry(n,l.value);}),u=vue.watch(i.$valid,$=>{i.$rewardEarly.value&&$&&(T.value=!1);});}function c(){Object.entries(s.value).forEach(([$,b])=>{b.$validate();});}let s=vue.ref(),f=vue.ref();w();function C(){l.value=!1,h.value=[],Object.entries(s.value).forEach(([$,b])=>{b.$reset();}),i.$lazy.value||Object.entries(s.value).map(([$,b])=>b.$validate());}function v(){l.value||(l.value=!0,i.$rewardEarly.value,R());}let S=i.$debounce.value?Q(D,i.$debounce.value??0):D;async function D(){try{if(T.value=!0,i.$autoDirty.value&&l.value&&!i.$pending.value)return !i.$error.value;{let $=Object.entries(s.value).map(([A,_])=>_.$validate());return (await Promise.allSettled($)).every(A=>A.status==="fulfilled"?A.value:!1)}}catch{return !1}}function O(){h.value=[];}return i.$lazy.value||D(),vue.reactive({$dirty:l,...i,$externalErrors:h,$value:e,$rules:s,$reset:C,$touch:v,$validate:S,$unwatch:x,$watch:g,$clearExternalErrors:O})}function Ue({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:m,rules:I,externalErrors:P}){let y=I.$key?I.$key:ce(),i=`${t}.${String(y)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?i=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:y,enumerable:!1,configurable:!1,writable:!1}}));let l=vue.toRef(()=>P.value?.[r]),T=ae({state:o,rulesDef:vue.toRef(()=>I),customMessages:m,path:i,storage:a,options:n,externalErrors:l});if(T){let h=o.value?.$id;T.$id=h??String(y),a.addArrayStatus(e,T.$id,T);}return T}function We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m}){let I=vue.effectScope(),P,y=vue.effectScope(),i;if(Array.isArray(e.value)&&!t.value.$each)return null;let l=vue.ref(),T=vue.ref(e.value),h,E=vue.ref({}),u=a.getCollectionsEntry(n);i=y.run(()=>{let s=vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(v=>typeof v!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(v=>Re(v)):!1),f=vue.computed(()=>m.value?ge(m.value)?m.value.$errors??[]:[]:[]),C=vue.computed(()=>m.value?ge(m.value)?m.value.$each??[]:[]:[]);return {isPrimitiveArray:s,$externalErrorsField:f,$externalErrorsEach:C}}),M(),R();function M(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(l.value=ce(),Object.defineProperties(e.value,{$id:{value:l.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(l.value=e.value.$id)),!i.isPrimitiveArray.value&&(T.value=E.value.$value,Array.isArray(e.value)&&t.value.$each?u.value=e.value.map((s,f)=>{let C=ue(t.value.$each,vue.toRef(()=>s),f);if(C){let v=Ue({$id:l.value,path:n,rules:C,stateValue:vue.toRef(()=>s),index:f,options:o,storage:a,externalErrors:i.$externalErrorsEach});return v||null}}).filter(s=>!!s):u.value=[],E.value=re({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:i.$externalErrorsField}));}function p(){if(Array.isArray(e.value)){let s=G(u.value);u.value=e.value.map((f,C)=>{let v=vue.toRef(()=>f);if(f.$id&&u.value.find(S=>S.$id===f.$id)){let S=a.getArrayStatus(l.value,f.$id);return S?(S.$value=v,S):null}else {let S=ue(t.value.$each,v,C);if(S){let D=Ue({$id:l.value,path:n,rules:S,stateValue:v,index:C,options:o,storage:a,externalErrors:i.$externalErrorsEach});return D||null}}}).filter(f=>!!f),s.filter(f=>!e.value.find(C=>f.$id===C.$id)).forEach((f,C)=>{a.deleteArrayStatus(l.value,C.toString());});}else u.value=[];}function R(){h=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?M():p();},{deep:H?1:!0,flush:"pre"}),P=I.run(()=>{let s=vue.computed(()=>E.value.$dirty&&u.value.every(b=>b.$dirty)),f=vue.computed(()=>E.value.$anyDirty||u.value.some(b=>b.$dirty)),C=vue.computed(()=>E.value.$invalid||u.value.some(b=>b.$invalid)),v=vue.computed(()=>E.value.$valid&&u.value.every(b=>b.$valid)),S=vue.computed(()=>E.value.$error||u.value.some(b=>b.$error)),D=vue.computed(()=>E.value.$pending||u.value.some(b=>b.$pending)),O=vue.computed(()=>({$errors:E.value.$errors,$each:u.value.map(b=>b.$errors)})),$=vue.computed(()=>({$errors:E.value.$silentErrors,$each:u.value.map(b=>b.$silentErrors)}));return {$dirty:s,$anyDirty:f,$invalid:C,$valid:v,$error:S,$pending:D,$errors:O,$silentErrors:$}}),i.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`),h());}function d(){h&&h(),E.value&&E.value.$unwatch(),u.value&&u.value.forEach(s=>{"$dirty"in s&&s.$unwatch();}),I.stop(),I=vue.effectScope(),y.stop(),y=vue.effectScope(!0);}function w(){E.value.$touch(),u.value.forEach(s=>{s.$touch();});}function x(){E.value.$reset(),u.value.forEach(s=>{s.$reset();});}async function g(){try{return (await Promise.all([E.value.$validate(),...u.value.map(f=>f.$validate())])).every(f=>!!f)}catch{return !1}}function c(){}return vue.reactive({$field:E,...P,$each:u,$value:e,$validate:g,$unwatch:d,$watch:R,$touch:w,$reset:x,$clearExternalErrors:c})}function Se({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:m,externalErrors:I,validationGroups:P}){let y,i,l;function E(g=!0,c=!1){u.value=null,vue.triggerRef(u);let s=Object.fromEntries(Object.entries(e.value).map(([v,S])=>{if(S){let D=vue.toRef(t.value,v),O=vue.toRef(()=>S),$=vue.toRef(()=>I.value?.[v]);return [v,ae({state:D,rulesDef:O,customMessages:r,path:n?`${n}.${v}`:v,storage:o,options:m,externalErrors:$})]}return []}).filter(v=>!!v.length&&v[1]!=null)),f=Object.fromEntries(Object.entries(vue.unref(I)??{}).filter(([v])=>!(v in e.value)).map(([v,S])=>{if(S){let D=vue.toRef(()=>({})),O=vue.toRef(()=>S);return [v,ae({state:vue.ref(void 0),rulesDef:D,customMessages:r,path:n?`${n}.${v}`:v,storage:o,options:m,externalErrors:O})]}return []})),C=Object.fromEntries(Object.entries(P?.(s)??{}).map(([v,S])=>S.length?[v,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(D=>[D,_e(vue.toRef(()=>S),D)])),...Object.fromEntries(["$errors","$silentErrors"].map(D=>[D,ke(vue.toRef(()=>S),D)]))}]:[]));u.value={...s,...f,...C},g&&d();}let u=o.getFieldsEntry(n);E();function M(){E(!1),Object.entries(u.value).forEach(([g,c])=>{c.$reset();}),d();}function p(){Object.entries(u.value).forEach(([g,c])=>{c.$touch();});}async function R(){try{return (await Promise.allSettled(Object.entries(u.value).map(([c,s])=>s.$validate()))).every(c=>c.status==="fulfilled"?c.value:!1)}catch{return !1}}function d(){a&&(l=vue.watch(a,()=>{w(),E();},{deep:H?1:!0,flush:"post"})),y=vue.effectScope(),i=y.run(()=>{let g=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([O,$])=>$.$dirty)),c=vue.computed(()=>Object.entries(u.value).some(([O,$])=>$.$dirty)),s=vue.computed(()=>Object.entries(u.value).some(([O,$])=>$.$invalid)),f=vue.computed(()=>Object.entries(u.value).every(([O,$])=>$.$valid)),C=vue.computed(()=>Object.entries(u.value).some(([O,$])=>$.$error)),v=vue.computed(()=>Object.entries(u.value).some(([O,$])=>$.$pending)),S=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([O,$])=>[O,$.$errors]))),D=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([O,$])=>[O,$.$silentErrors])));return {$dirty:g,$anyDirty:c,$invalid:s,$valid:f,$error:C,$pending:v,$errors:S,$silentErrors:D}});}function w(){u.value&&Object.entries(u.value).forEach(([g,c])=>{c.$unwatch();}),l?.(),y.stop(),y=vue.effectScope();}function x(){Object.entries(u.value).forEach(([g,c])=>{c.$clearExternalErrors();});}return vue.reactive({...i,$fields:u,$value:t,$reset:M,$touch:p,$validate:R,$unwatch:w,$watch:d,$clearExternalErrors:x})}function ae({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:I,onUnwatch:P}){return Oe(t)?We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:I,externalErrors:m}):we(e,t)&&Pe(e)?Se({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:I,externalErrors:m}):Ae(t)?re({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:I,externalErrors:m,onUnwatch:P}):null}function Ee(e,t,r,n){let a=fe(),o=vue.computed(()=>vue.unref(r.externalErrors)),m=vue.reactive(Se({rootRules:e,scopeRules:e,state:t,customMessages:n?.(),storage:a,options:r,externalErrors:o,validationGroups:r.validationGroups})),I=Fe(m);return {regle:m,errors:I}}function be(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,o,m){let I=vue.isRef(o)?o:vue.computed(typeof o=="function"?o:()=>o),P={...r,...m},y=vue.isRef(a)?a:vue.ref(a),i=G(vue.toRaw(y.value)),{regle:l,errors:T}=Ee(I,y,P,e);function h(){l.$unwatch(),E(a,i),l.$reset();}function E(p,R){Object.entries(R).forEach(([d,w])=>{let x=vue.isRef(p)?p.value:p,g=vue.isRef(x[d])?x[d].value:x[d],c=vue.isRef(R[d])?R[d]._value:R[d];Array.isArray(c)&&Array.isArray(g)?(x[d]=[],c.forEach((s,f)=>{x[d][f]={},E(x[d][f],c[f]);})):k(c)?E(g,c):vue.isRef(x[d])?x[d].value=c:x[d]=c;});}let u=vue.computed(()=>!(l.$invalid||l.$pending));async function M(){return l.$touch(),await l.$validate()?y.value:!1}return {regle:l,r$:l,errors:T,resetAll:h,validateState:M,ready:u,state:y}}return n}var Le=be();function xe(){function e(t,r){return r}return e}var Te=xe();function ze({rules:e,modifiers:t}){let r=be(e,t),n=xe();return {useRegle:r,inferRules:n}}exports.InternalRuleType=Ve;exports.createRule=ie;exports.defineRegleConfig=ze;exports.inferRules=Te;exports.unwrapRuleParameters=F;exports.useRegle=Le;
1
+ 'use strict';var vue=require('vue');var ce=(r=>(r.Inline="__inline",r.Async="__async",r))(ce||{});function Ae(e,t){return vue.computed(()=>e.value.some(r=>r[t]))}function Me(e,t){return vue.computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function j(e){return e.map(t=>t instanceof Function?t():vue.unref(t))}function Fe(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function Ve(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(o=>o.trim()).filter(o=>o.includes("=")).length+e.length}function fe(e,...t){let{message:r,validator:n,active:a,type:o,...m}=e,T=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator($,...s){return e.validator($,...j(s.length?s:t))},message($,s){return typeof e.message=="function"?e.message($,{...s,$params:j(s.$params?.length?s.$params:t)}):e.message},active($,s){return typeof e.active=="function"?e.active($,{...s,$params:j(s.$params?.length?s.$params:t)}):e.active??!0},exec($){let s=e.validator($,...j(t)),i;return s instanceof Promise?s.then(h=>(i=h,typeof i=="object"&&"$valid"in i?i.$valid:typeof i=="boolean"?i:!1)):(i=s,typeof i=="object"&&"$valid"in i?i.$valid:typeof i=="boolean"?i:!1)}},...m,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:T,_params:Fe(t)}}function Re(e){if(typeof e.validator=="function"){let r=fe(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Ve(e.validator)>1){let a=function(...o){return fe(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function B(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function je(e){return B(e.value)}function U(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>U(n)))),r=="Map"&&(t=new Map([...e].map(n=>[U(n[0]),U(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,lt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=U(e[n]);}return t}function lt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function pe(e,t,r){return e instanceof Function?e(t,r??0):e}function ae(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function K(e,t,r){let n,a=(...o)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(m);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(m);},0);}),a}function st(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),m=Number(n[a]);if(o>m)return 1;if(m>o)return -1;if(!isNaN(o)&&isNaN(m))return 1;if(isNaN(o)&&!isNaN(m))return -1}return 0}var J=st(vue.version,"3.5.0")!==-1;function it(){return Math.floor(Math.random()*Date.now()).toString()}function de(){return typeof window>"u"?it():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function me(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),a=vue.shallowRef(new Map),o=vue.shallowRef(new Map);function m(p){let c=t.value.get(p);if(c)return c;{let x=vue.ref({});return t.value.set(p,x),x}}function T(p){let c=r.value.get(p);if(c)return c;{let x=vue.ref([]);return r.value.set(p,x),x}}function P(p,c,x){o.value.set(`${p}-${c}`,x);}function S(p,c){return o.value.get(`${p}-${c}`)}function $(p,c){p&&c!=null&&o.value.delete(`${p}-${c}`);}function s(p,c){n.value.set(p,c);}function i(p){return n.value.get(p)??!1}function h(p,c){e.value.set(p,c);}function y(p,c){let x=e.value.get(p);return x?u(c,x)?{valid:!0}:{valid:!1}:void 0}function u(p,c){let x=Object.keys(c),E=Object.keys(p);return E.length!==x.length||!E.every(v=>x.includes(v))?!1:E.every(v=>{let d=p[v],f=c[v];return !f||!d||typeof d=="function"||typeof f=="function"||typeof d=="number"||typeof d=="boolean"?!1:d._params?d._params?.every((R,b)=>{if(typeof f=="number"||typeof f=="boolean")return !0;{let l=j(f._params),g=j(d._params);return l?.[b]===g?.[b]}}):!0})}function O(p){let c=a.value.get(p);if(c)return c;{let x=vue.ref(!1),E=vue.ref(!0),A=vue.ref({}),v=vue.ref(!1);return a.value.set(p,{$pending:x,$valid:E,$metadata:A,$validating:v}),{$pending:x,$valid:E,$metadata:A,$validating:v}}}return vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:h,setDirtyEntry:s,checkRuleDeclEntry:y,getDirtyState:i,trySetRuleStatusRef:O,getFieldsEntry:m,getCollectionsEntry:T,getArrayStatus:S,addArrayStatus:P,deleteArrayStatus:$,arrayStatusStorage:o}}function _e(e,t){return B(e.value)&&B(t.value)&&!Object.entries(t.value).some(r=>ee(r))}function Ge(e){return !!e.value&&"$each"in e.value}function ke(e){return !!e.value&&B(e.value)}function ee(e){return B(e)&&"_validator"in e}function te(e){return typeof e.value!="function"}function ye(e){return B(e)&&"$fields"in e}function ge(e){return !!e&&"$each"in e}function ve(e){return !!e&&"$rules"in e}function $e(e){return "$each"in e||"$errors"in e}function H({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function Be(e,t=!1){return ye(e)?Se(e.$fields):ge(e)?{$errors:e.$field.$rules?H({field:e.$field,silent:t}):[],$each:e.$each.map(r=>Be(r,t))}:ve(e)?e.$error?H({field:e,silent:t}):e.$externalErrors??[]:[]}function ft(e,t=!1){return e.map(r=>Be(r,t))}function Se(e,t=!1){return Object.fromEntries(Object.entries(e).map(([r,n])=>ye(n)?[r,Se(n.$fields,t)]:ge(n)?[r,{$errors:H({field:n.$field,silent:t}),$each:ft(n.$each,t)}]:ve(n)?n.$error?[r,H({field:n,silent:t})]:[r,n.$externalErrors??[]]:[r,[]]))}function Ne(e){return vue.computed(()=>Se(e.$fields))}function We({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:m,$debounce:T}){let P=vue.effectScope(),S,$,s=vue.ref(!1),{$pending:i,$valid:h,$metadata:y,$validating:u}=m.trySetRuleStatusRef(`${o}.${n}`);function O(){S=P.run(()=>{let d=vue.computed(()=>({$invalid:!h.value,$params:g.value,...y.value})),f=vue.computed(()=>te(r)?typeof r.value.active=="function"?r.value.active(a.value,d.value):r.value.active:!0),R=vue.computed(()=>{let C="",D=t?t[n]?.message:void 0;return D&&(typeof D=="function"?C=D(a.value,d.value):C=D),te(r)&&(D&&!r.value._patched||(typeof r.value.message=="function"?C=r.value.message(a.value,d.value):C=r.value.message)),ae(C)&&(C="Error",console.warn(`No error message defined for ${o}.${n}`)),C}),b=vue.computed(()=>te(r)&&r.value.type?r.value.type:n),l=vue.computed(()=>te(r)?r.value.validator:r.value),g=vue.computed(()=>typeof r.value=="function"?[]:j(r.value._params??[])),I=vue.computed(()=>`${o}.${b.value}`);return {$active:f,$message:R,$type:b,$validator:l,$params:g,$path:I}}),$=vue.watch(S.$params,E,{deep:!0});}O();function p(){h.value=!0,e.value&&(i.value=!0);}async function c(){let d=S.$validator.value,f=d(a.value,...S.$params.value),R=!1,b=a.value;try{p();let l;if(f instanceof Promise?l=await f:l=f,a.value!==b)return !0;if(typeof l=="boolean")R=l;else {let{$valid:g,...I}=l;R=g,y.value=I;}}catch{R=!1;}finally{i.value=!1;}return R}let x=K(c,T??200);async function E(){u.value=!0;let d=!1;if(ee(r.value)&&r.value._async)d=await x();else {let f=S.$validator.value,R=f(a.value,...S.$params.value);if(R 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(R!=null)if(typeof R=="boolean")d=R;else {let{$valid:b,...l}=R;d=b,y.value=l;}}return h.value=d,u.value=!1,d}function A(){h.value=!0,y.value={},i.value=!1,u.value=!1,O();}function v(){$(),P.stop(),P=vue.effectScope();}return vue.reactive({...S,$pending:i,$valid:h,$metadata:y,_haveAsync:s,$validating:u,$validate:E,$unwatch:v,$watch:O,$reset:A})}function le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:T,onUnwatch:P,$isArray:S}){let $=vue.effectScope(),s,i=vue.ref(!1),h=vue.ref(!1),y=vue.ref([]),u,O,p,c,x,E=()=>{};function A(){y.value=m.value??[];}A();function v(){let M=t.value,F=a.checkRuleDeclEntry(n,M);g.value=Object.fromEntries(Object.entries(M).filter(([V])=>V.startsWith("$"))),l.value=Object.fromEntries(Object.entries(t.value).filter(([V])=>!V.startsWith("$")).map(([V,k])=>{if(k){let ie=vue.toRef(()=>k);return [V,We({$dirty:i,customMessages:r,rule:ie,ruleKey:V,state:e,path:n,storage:a,$debounce:g.value.$debounce})]}return []}).filter(V=>!!V.length)),R(),d(),F?.valid!=null&&(i.value=a.getDirtyState(n),i.value&&E()),a.addRuleDeclEntry(n,M);}function d(){E=s.$debounce.value?K(b,s.$debounce.value??s.haveAnyAsyncRule?100:0):b;}function f(){l.value&&Object.entries(l.value).forEach(([M,F])=>{F.$unwatch();}),c(),i.value&&a.setDirtyEntry(n,i.value),u(),O(),p(),$.stop(),$=vue.effectScope(),P?.(),x?.();}function R(){l.value&&Object.entries(l.value).forEach(([M,F])=>{F.$watch();}),s=$.run(()=>{let M=vue.computed(()=>i.value),F=vue.computed(()=>g.value.$debounce),V=vue.computed(()=>g.value.$lazy!=null?g.value.$lazy:vue.unref(o.lazy)),k=vue.computed(()=>g.value.$rewardEarly!=null?g.value.$rewardEarly:vue.unref(o.rewardEarly)),ie=vue.computed(()=>g.value.$autoDirty!=null?g.value.$autoDirty:vue.unref(o.autoDirty)),Ze=vue.computed(()=>Object.entries(l.value).some(([z,N])=>N.$validating)),Ie=vue.computed(()=>ue.value&&!Pe.value&&i.value),Ke=vue.computed(()=>Ie.value?H({field:{$dirty:i.value,$externalErrors:y.value,$rules:l.value}}):[]),et=vue.computed(()=>H({field:{$dirty:i.value,$externalErrors:y.value,$rules:l.value},silent:!0})),Pe=vue.computed(()=>h.value||!k.value?Object.entries(l.value).some(([z,N])=>N.$pending):!1),ue=vue.computed(()=>y.value?.length?!0:!k.value||k.value&&h.value?Object.entries(l.value).some(([z,N])=>!N.$valid):!1),we=vue.computed(()=>i.value&&!ae(e.value)&&!Ze.value?y.value?.length?!1:k.value?Object.entries(l.value).every(([z,N])=>N.$valid):!ue.value:!1),tt=vue.computed(()=>Object.entries(l.value).some(([z,N])=>N._haveAsync));return vue.watch(we,z=>{z&&(h.value=!1);}),{$error:Ie,$pending:Pe,$invalid:ue,$valid:we,$debounce:F,$lazy:V,$errors:Ke,$silentErrors:et,$rewardEarly:k,$autoDirty:ie,$anyDirty:M,haveAnyAsyncRule:tt}}),p=vue.watch(m,A),u=vue.watch(e,()=>{s.$autoDirty.value&&(i.value||(i.value=!0)),t.value instanceof Function&&v(),E(),s.$rewardEarly.value;},{deep:S?!0:J?1:!0}),c=vue.watch(i,()=>{a.setDirtyEntry(n,i.value);}),O=vue.watch(s.$valid,M=>{s.$rewardEarly.value&&M&&(h.value=!1);}),x=vue.watch(s.haveAnyAsyncRule,d);}function b(){Object.entries(l.value).forEach(([M,F])=>{F.$validate();});}let l=vue.ref(),g=vue.ref();v();function I(){i.value=!1,y.value=[],Object.entries(l.value).forEach(([M,F])=>{F.$reset();}),s.$lazy.value||Object.entries(l.value).map(([M,F])=>F.$validate());}function C(){i.value||(i.value=!0,s.$rewardEarly.value,E());}let D=s.$debounce.value?K(w,s.$debounce.value??0):w;async function w(){try{if(h.value=!0,s.$autoDirty.value&&i.value&&!s.$pending.value)return !s.$error.value;{let M=Object.entries(l.value).map(([V,k])=>k.$validate());return (await Promise.allSettled(M)).every(V=>V.status==="fulfilled"?V.value:!1)}}catch{return !1}}function Xe(){y.value=[];}return s.$lazy.value||w(),vue.reactive({$dirty:i,...s,$externalErrors:y,$value:e,$rules:l,$reset:I,$touch:C,$validate:D,$unwatch:f,$watch:R,$clearExternalErrors:Xe})}function qe({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:m,rules:T,externalErrors:P}){let S=T.$key?T.$key:de(),$=`${t}.${String(S)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?$=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:S,enumerable:!1,configurable:!1,writable:!1}}));let s=vue.toRef(()=>P.value?.[r]),i=se({state:o,rulesDef:vue.toRef(()=>T),customMessages:m,path:$,storage:a,options:n,externalErrors:s});if(i){let h=o.value?.$id;i.$id=h??String(S),a.addArrayStatus(e,i.$id,i);}return i}function Le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m}){let T=vue.effectScope(),P,S=vue.effectScope(),$;if(Array.isArray(e.value)&&!t.value.$each)return null;let s=vue.ref(),i=vue.ref(e.value),h,y=vue.ref({}),u=a.getCollectionsEntry(n);$=S.run(()=>{let f=vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(l=>typeof l!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(l=>ee(l)):!1),R=vue.computed(()=>m.value?$e(m.value)?m.value.$errors??[]:[]:[]),b=vue.computed(()=>m.value?$e(m.value)?m.value.$each??[]:[]:[]);return {isPrimitiveArray:f,$externalErrorsField:R,$externalErrorsEach:b}}),O(),c();function O(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(s.value=de(),Object.defineProperties(e.value,{$id:{value:s.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(s.value=e.value.$id)),!$.isPrimitiveArray.value&&(i.value=y.value.$value,Array.isArray(e.value)&&t.value.$each?u.value=e.value.map((f,R)=>{let b=pe(t.value.$each,vue.toRef(()=>f),R);if(b){let l=qe({$id:s.value,path:n,rules:b,stateValue:vue.toRef(()=>f),index:R,options:o,storage:a,externalErrors:$.$externalErrorsEach});return l||null}}).filter(f=>!!f):u.value=[],y.value=le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:$.$externalErrorsField,$isArray:!0}));}function p(){if(Array.isArray(e.value)){let f=U(u.value);u.value=e.value.map((R,b)=>{let l=vue.toRef(()=>R);if(R.$id&&u.value.find(g=>g.$id===R.$id)){let g=a.getArrayStatus(s.value,R.$id);return g?(g.$value=l,g):null}else {let g=pe(t.value.$each,l,b);if(g){let I=qe({$id:s.value,path:n,rules:g,stateValue:l,index:b,options:o,storage:a,externalErrors:$.$externalErrorsEach});return I||null}}}).filter(R=>!!R),f.filter(R=>!e.value.find(b=>R.$id===b.$id)).forEach((R,b)=>{a.deleteArrayStatus(s.value,b.toString());});}else u.value=[];}function c(){h=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?O():p();},{deep:J?1:!0,flush:"pre"}),P=T.run(()=>{let f=vue.computed(()=>y.value.$dirty&&u.value.every(w=>w.$dirty)),R=vue.computed(()=>y.value.$anyDirty||u.value.some(w=>w.$dirty)),b=vue.computed(()=>y.value.$invalid||u.value.some(w=>w.$invalid)),l=vue.computed(()=>y.value.$valid&&u.value.every(w=>w.$valid)),g=vue.computed(()=>y.value.$error||u.value.some(w=>w.$error)),I=vue.computed(()=>y.value.$pending||u.value.some(w=>w.$pending)),C=vue.computed(()=>({$errors:y.value.$errors,$each:u.value.map(w=>w.$errors)})),D=vue.computed(()=>({$errors:y.value.$silentErrors,$each:u.value.map(w=>w.$silentErrors)}));return {$dirty:f,$anyDirty:R,$invalid:b,$valid:l,$error:g,$pending:I,$errors:C,$silentErrors:D}}),$.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`),h());}function x(){h&&h(),y.value&&y.value.$unwatch(),u.value&&u.value.forEach(f=>{"$dirty"in f&&f.$unwatch();}),T.stop(),T=vue.effectScope(),S.stop(),S=vue.effectScope(!0);}function E(){y.value.$touch(),u.value.forEach(f=>{f.$touch();});}function A(){y.value.$reset(),u.value.forEach(f=>{f.$reset();});}async function v(){try{return (await Promise.all([y.value.$validate(),...u.value.map(R=>R.$validate())])).every(R=>!!R)}catch{return !1}}function d(){}return vue.reactive({$field:y,...P,$each:u,$value:e,$validate:v,$unwatch:x,$watch:c,$touch:E,$reset:A,$clearExternalErrors:d})}function he({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:m,externalErrors:T,validationGroups:P}){let S,$,s=null;function y(v=!0,d=!1){u.value=null,vue.triggerRef(u);let f=Object.fromEntries(Object.entries(e.value).map(([l,g])=>{if(g){let I=vue.toRef(t.value,l),C=vue.toRef(()=>g),D=vue.toRef(()=>T.value?.[l]);return [l,se({state:I,rulesDef:C,customMessages:r,path:n?`${n}.${l}`:l,storage:o,options:m,externalErrors:D})]}return []}).filter(l=>!!l.length&&l[1]!=null)),R=Object.fromEntries(Object.entries(vue.unref(T)??{}).filter(([l])=>!(l in e.value)).map(([l,g])=>{if(g){let I=vue.toRef(()=>({})),C=vue.toRef(()=>g);return [l,se({state:vue.ref(void 0),rulesDef:I,customMessages:r,path:n?`${n}.${l}`:l,storage:o,options:m,externalErrors:C})]}return []})),b=Object.fromEntries(Object.entries(P?.(f)??{}).map(([l,g])=>g.length?[l,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(I=>[I,Ae(vue.toRef(()=>g),I)])),...Object.fromEntries(["$errors","$silentErrors"].map(I=>[I,Me(vue.toRef(()=>g),I)]))}]:[]));u.value={...f,...R,...b},v&&x();}let u=o.getFieldsEntry(n);y();function O(){y(!1),Object.entries(u.value).forEach(([v,d])=>{d.$reset();}),x();}function p(){Object.entries(u.value).forEach(([v,d])=>{d.$touch();});}async function c(){try{return (await Promise.allSettled(Object.entries(u.value).map(([d,f])=>f.$validate()))).every(d=>d.status==="fulfilled"?d.value:!1)}catch{return !1}}function x(){a&&(s=vue.watch(a,()=>{E(),y();},{deep:J?1:!0,flush:"post"})),S=vue.effectScope(),$=S.run(()=>{let v=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([C,D])=>D.$dirty)),d=vue.computed(()=>Object.entries(u.value).some(([C,D])=>D.$dirty)),f=vue.computed(()=>Object.entries(u.value).some(([C,D])=>D.$invalid)),R=vue.computed(()=>Object.entries(u.value).every(([C,D])=>D.$valid)),b=vue.computed(()=>v.value&&!l.value&&f.value),l=vue.computed(()=>Object.entries(u.value).some(([C,D])=>D.$pending)),g=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,D])=>[C,D.$errors]))),I=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,D])=>[C,D.$silentErrors])));return {$dirty:v,$anyDirty:d,$invalid:f,$valid:R,$error:b,$pending:l,$errors:g,$silentErrors:I}});}function E(){u.value&&Object.entries(u.value).forEach(([v,d])=>{d.$unwatch();}),s?.(),S.stop(),S=vue.effectScope();}function A(){Object.entries(u.value).forEach(([v,d])=>{d.$clearExternalErrors();});}return vue.reactive({...$,$fields:u,$value:t,$reset:O,$touch:p,$validate:c,$unwatch:E,$watch:x,$clearExternalErrors:A})}function se({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:T,onUnwatch:P}){return Ge(t)?Le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:T,externalErrors:m}):_e(e,t)&&je(e)?he({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:T,externalErrors:m}):ke(t)?le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:T,externalErrors:m,onUnwatch:P}):null}function xe(e,t,r,n){let a=me(),o=vue.computed(()=>vue.unref(r.externalErrors)),m=vue.reactive(he({rootRules:e,scopeRules:e,state:t,customMessages:n?.(),storage:a,options:r,externalErrors:o,validationGroups:r.validationGroups})),T=Ne(m);return {regle:m,errors:T}}function Te(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,o,m){let T=vue.isRef(o)?o:vue.computed(typeof o=="function"?o:()=>o),P={...r,...m},S=vue.isRef(a)?a:vue.ref(a),$=U(vue.toRaw(S.value)),{regle:s}=xe(T,S,P,e);function i(){s.$unwatch(),h(a,$),s.$reset();}function h(O,p){Object.entries(p).forEach(([c,x])=>{let E=vue.isRef(O)?O.value:O,A=vue.isRef(E[c])?E[c].value:E[c],v=vue.isRef(p[c])?p[c]._value:p[c];Array.isArray(v)&&Array.isArray(A)?(E[c]=[],v.forEach((d,f)=>{E[c][f]={},h(E[c][f],v[f]);})):B(v)?h(A,v):vue.isRef(E[c])?E[c].value=v:E[c]=v;});}let y=vue.computed(()=>!(s.$invalid||s.$pending));async function u(){return s.$touch(),await s.$validate()?S.value:!1}return {r$:s,resetAll:i,validateState:u,ready:y,state:S}}return n}var Ye=Te();function De(){function e(t,r){return r}return e}var Ce=De();function Qe({rules:e,modifiers:t}){let r=Te(e,t),n=De();return {useRegle:r,inferRules:n}}exports.InternalRuleType=ce;exports.createRule=Re;exports.defineRegleConfig=Qe;exports.inferRules=Ce;exports.unwrapRuleParameters=j;exports.useRegle=Ye;
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, ComputedRef } from 'vue';
1
+ import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, MaybeRefOrGetter, ComputedRef } from 'vue';
2
2
 
3
3
  type Prettify<T> = T extends infer R ? {
4
4
  [K in keyof R]: R[K];
@@ -6,7 +6,7 @@ type Prettify<T> = T extends infer R ? {
6
6
  type Maybe<T = any> = T | null | undefined;
7
7
  type MaybeGetter<T, V = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V>, index: number) => T & TAdd);
8
8
  type Unwrap<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : UnwrapNestedRefs<T>;
9
- type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends MaybeGetter<infer U, any, any> ? U : never;
9
+ type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends ((value: Ref<any>, index: number) => infer U extends Record<string, any>) ? U : T;
10
10
  type DeepMaybeRef<T extends Record<string, any>> = {
11
11
  [K in keyof T]: MaybeRef<T[K]>;
12
12
  };
@@ -157,13 +157,17 @@ type AddDollarToOptions<T extends Record<string, any>> = {
157
157
  [K in keyof T as `$${string & K}`]: T[K];
158
158
  };
159
159
 
160
+ type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups>;
161
+ declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>>;
162
+
163
+ interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
164
+ <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): typeof rulesFactory;
165
+ <TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
166
+ }
167
+ declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
168
+
160
169
  interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree> = EmptyObject, TExternal extends RegleExternalErrorTree<TState> = never, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never> {
161
- regle: RegleStatus<TState, TRules, TValidationGroups>;
162
- r$: RegleStatus<TState, TRules, TValidationGroups>;
163
- /** Show active errors based on your behaviour options (lazy, autoDirty)
164
- * It allow you to skip scouting the `regle` object
165
- */
166
- errors: RegleErrorTree<TRules, TExternal>;
170
+ r$: RegleStatus<TState, TRules, TValidationGroups, TExternal>;
167
171
  ready: ComputedRef<boolean>;
168
172
  resetAll: () => void;
169
173
  validateState: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
@@ -184,6 +188,10 @@ type DeepSafeFormState<TState extends Record<string, any>, TRules extends RegleP
184
188
  [K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? never : K]-?: SafeProperty<TState[K], TRules[K]>;
185
189
  };
186
190
  type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends ReglePartialValidationTree<any, any> ? TState extends Record<string, any> ? DeepSafeFormState<TState, TRule> : TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? never : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? TState : never : never : never : never;
191
+ type InferRegleRules<T extends useRegleFn<any>> = T extends useRegleFn<infer U> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
192
+ type RegleRequiredRules<T extends Partial<AllRulesDeclarations> | useRegleFn<any>, TRules extends T extends useRegleFn<any> ? keyof InferRegleRules<T> : keyof T> = Omit<T extends useRegleFn<any> ? InferRegleRules<T> : T extends Partial<AllRulesDeclarations> ? UnwrapRuleTree<T> : {}, TRules> & {
193
+ [K in TRules]-?: T extends useRegleFn<any> ? K extends keyof InferRegleRules<T> ? NonNullable<InferRegleRules<T>[K]> : never : K extends keyof T ? NonNullable<T[K]> : never;
194
+ };
187
195
 
188
196
  type ParamDecl<T = any> = MaybeRef<Maybe<T>> | (() => Maybe<T>);
189
197
  type CreateFn<T extends any[]> = (...args: T) => any;
@@ -239,6 +247,12 @@ type RegleRuleMetadataExtended = {
239
247
  $valid: boolean;
240
248
  [x: string]: any;
241
249
  };
250
+ type UnwrapRuleTree<T extends {
251
+ [x: string]: RegleRuleRaw<any> | undefined;
252
+ }> = {
253
+ [K in keyof T]: UnwrapRuleWithParams<T[K]>;
254
+ };
255
+ type UnwrapRuleWithParams<T extends RegleRuleRaw<any> | undefined> = T extends RegleRuleWithParamsDefinition<infer TValue, infer TParams, infer TAsync, infer TMetadata> ? RegleRuleDefinition<TValue, TParams, TAsync, TMetadata> : T;
242
256
  /**
243
257
  * Define a rule Metadata definition
244
258
  */
@@ -259,7 +273,7 @@ type PossibleRegleRuleMetadataConsumer = DefaultMetadataProperties & {
259
273
  /**
260
274
  * Generic types for a created RegleRule
261
275
  */
262
- type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetaData extends RegleRuleMetadataDefinition = boolean> = RegleRuleDefinition<TValue, TParams, TAsync, TMetaData> | RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetaData>;
276
+ type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = boolean, TMetaData extends RegleRuleMetadataDefinition = boolean> = RegleRuleDefinition<TValue, TParams, TAsync, TMetaData> | RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetaData>;
263
277
  /**
264
278
  * Process the type of a created rule with `createRule`.
265
279
  * For a rule with params it will return a function
@@ -345,7 +359,10 @@ type DefaultValidators = {
345
359
  numeric: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
346
360
  regex: RegleRuleWithParamsDefinition<string, [regexp: RegExp], false, boolean>;
347
361
  required: RegleRuleDefinition<unknown, []>;
348
- sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown], false, boolean>;
362
+ sameAs: RegleRuleWithParamsDefinition<unknown, [
363
+ target: unknown,
364
+ otherName?: string
365
+ ], false, boolean>;
349
366
  startsWith: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
350
367
  url: RegleRuleDefinition<string, [], false, boolean, string>;
351
368
  };
@@ -353,7 +370,9 @@ type DefaultValidators = {
353
370
  type CustomRulesDeclarationTree = {
354
371
  [x: string]: RegleRuleRaw<any, any, boolean, any> | undefined;
355
372
  };
356
- type AllRulesDeclarations = CustomRulesDeclarationTree & DefaultValidators;
373
+ type AllRulesDeclarations = CustomRulesDeclarationTree & {
374
+ [K in keyof DefaultValidators]: RegleRuleRaw<any, any, boolean, any> | undefined;
375
+ };
357
376
 
358
377
  /**
359
378
  * @public
@@ -382,7 +401,7 @@ type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDe
382
401
  * Rule tree for a form property
383
402
  */
384
403
  type RegleRuleDecl<TValue extends any = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = FieldRegleBehaviourOptions & {
385
- [TKey in keyof TCustomRules]?: NonNullable<TCustomRules[TKey]> extends RegleRuleWithParamsDefinition<any, infer TParams> ? RegleRuleDefinition<TValue, TParams, boolean> : NonNullable<TCustomRules[TKey]> extends RegleRuleDefinition<any, any, any, any> ? FormRuleDeclaration<TValue, any> : FormRuleDeclaration<TValue, any> | FieldRegleBehaviourOptions[keyof FieldRegleBehaviourOptions];
404
+ [TKey in keyof TCustomRules]?: NonNullable<TCustomRules[TKey]> extends RegleRuleWithParamsDefinition<any, infer TParams> ? RegleRuleDefinition<TValue, [...TParams, ...args: [...any[]]], boolean> : NonNullable<TCustomRules[TKey]> extends RegleRuleDefinition<any, any, any, any> ? FormRuleDeclaration<TValue, any> : FormRuleDeclaration<TValue, any> | FieldRegleBehaviourOptions[keyof FieldRegleBehaviourOptions];
386
405
  };
387
406
  /**
388
407
  * @public
@@ -433,12 +452,12 @@ type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalVal
433
452
  /**
434
453
  * @public
435
454
  */
436
- type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never> = RegleCommonStatus<TState> & {
455
+ type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TExternal extends RegleExternalErrorTree<TState> = never> = RegleCommonStatus<TState> & {
437
456
  readonly $fields: {
438
457
  readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey>;
439
458
  };
440
- readonly $errors: RegleErrorTree<TRules>;
441
- readonly $silentErrors: RegleErrorTree<TRules>;
459
+ readonly $errors: RegleErrorTree<TRules, TExternal>;
460
+ readonly $silentErrors: RegleErrorTree<TRules, TExternal>;
442
461
  } & ([TValidationGroups] extends [never] ? {} : {
443
462
  $groups: {
444
463
  readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
@@ -451,7 +470,7 @@ type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl
451
470
  /**
452
471
  * @public
453
472
  */
454
- interface RegleFieldStatus<TState extends any = unknown, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>> extends RegleCommonStatus<TState> {
473
+ interface RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>> extends RegleCommonStatus<TState> {
455
474
  $value: UnwrapNestedRefs<TState>;
456
475
  readonly $errors: string[];
457
476
  readonly $silentErrors: string[];
@@ -482,7 +501,7 @@ interface RegleCommonStatus<TValue = any> {
482
501
  /**
483
502
  * @public
484
503
  */
485
- type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata extends RegleRuleMetadataDefinition = never> = {
504
+ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata extends RegleRuleMetadataDefinition = any> = {
486
505
  readonly $type: string;
487
506
  readonly $message: string | string[];
488
507
  readonly $active: boolean;
@@ -490,10 +509,12 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
490
509
  readonly $pending: boolean;
491
510
  readonly $path: string;
492
511
  readonly $metadata: TMetadata;
493
- $validator: (value: TValue, ...args: TParams) => boolean | Promise<boolean>;
512
+ $validator: (value: Maybe<TValue>, ...args: TParams) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>;
494
513
  $validate(): Promise<boolean>;
495
514
  $reset(): void;
496
- } & ([TParams] extends [[]] ? {} : {
515
+ } & ([TParams] extends [never[]] ? {} : [unknown[]] extends [TParams] ? {
516
+ readonly $params?: any[];
517
+ } : {
497
518
  readonly $params: TParams;
498
519
  });
499
520
  /**
@@ -545,15 +566,6 @@ declare function createRule<TValue extends any, TParams extends any[], TReturn e
545
566
  */
546
567
  declare function unwrapRuleParameters<TParams extends any[]>(params: ParamDecl[]): TParams;
547
568
 
548
- type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules | (() => TRules) | ComputedRef<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups>;
549
- declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>>;
550
-
551
- interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
552
- <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): typeof rulesFactory;
553
- <TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
554
- }
555
- declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
556
-
557
569
  declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>>({ rules, modifiers, }: {
558
570
  rules?: () => TCustomRules;
559
571
  modifiers?: RegleBehaviourOptions;
@@ -562,4 +574,4 @@ declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarat
562
574
  inferRules: inferRulesFn<TCustomRules>;
563
575
  };
564
576
 
565
- export { type DeepMaybeRef, type FormRuleDeclaration, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleExternalValidationErrorsReport, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleValidationTree, type Unwrap, type UnwrapRegleUniversalParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle };
577
+ export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRule, type InferRegleRules, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleExternalValidationErrorsReport, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, type RegleRequiredRules, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleValidationTree, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, ComputedRef } from 'vue';
1
+ import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, MaybeRefOrGetter, ComputedRef } from 'vue';
2
2
 
3
3
  type Prettify<T> = T extends infer R ? {
4
4
  [K in keyof R]: R[K];
@@ -6,7 +6,7 @@ type Prettify<T> = T extends infer R ? {
6
6
  type Maybe<T = any> = T | null | undefined;
7
7
  type MaybeGetter<T, V = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V>, index: number) => T & TAdd);
8
8
  type Unwrap<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : UnwrapNestedRefs<T>;
9
- type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends MaybeGetter<infer U, any, any> ? U : never;
9
+ type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends ((value: Ref<any>, index: number) => infer U extends Record<string, any>) ? U : T;
10
10
  type DeepMaybeRef<T extends Record<string, any>> = {
11
11
  [K in keyof T]: MaybeRef<T[K]>;
12
12
  };
@@ -157,13 +157,17 @@ type AddDollarToOptions<T extends Record<string, any>> = {
157
157
  [K in keyof T as `$${string & K}`]: T[K];
158
158
  };
159
159
 
160
+ type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups>;
161
+ declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>>;
162
+
163
+ interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
164
+ <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): typeof rulesFactory;
165
+ <TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
166
+ }
167
+ declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
168
+
160
169
  interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree> = EmptyObject, TExternal extends RegleExternalErrorTree<TState> = never, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never> {
161
- regle: RegleStatus<TState, TRules, TValidationGroups>;
162
- r$: RegleStatus<TState, TRules, TValidationGroups>;
163
- /** Show active errors based on your behaviour options (lazy, autoDirty)
164
- * It allow you to skip scouting the `regle` object
165
- */
166
- errors: RegleErrorTree<TRules, TExternal>;
170
+ r$: RegleStatus<TState, TRules, TValidationGroups, TExternal>;
167
171
  ready: ComputedRef<boolean>;
168
172
  resetAll: () => void;
169
173
  validateState: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
@@ -184,6 +188,10 @@ type DeepSafeFormState<TState extends Record<string, any>, TRules extends RegleP
184
188
  [K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? never : K]-?: SafeProperty<TState[K], TRules[K]>;
185
189
  };
186
190
  type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends ReglePartialValidationTree<any, any> ? TState extends Record<string, any> ? DeepSafeFormState<TState, TRule> : TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? never : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? TState : never : never : never : never;
191
+ type InferRegleRules<T extends useRegleFn<any>> = T extends useRegleFn<infer U> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
192
+ type RegleRequiredRules<T extends Partial<AllRulesDeclarations> | useRegleFn<any>, TRules extends T extends useRegleFn<any> ? keyof InferRegleRules<T> : keyof T> = Omit<T extends useRegleFn<any> ? InferRegleRules<T> : T extends Partial<AllRulesDeclarations> ? UnwrapRuleTree<T> : {}, TRules> & {
193
+ [K in TRules]-?: T extends useRegleFn<any> ? K extends keyof InferRegleRules<T> ? NonNullable<InferRegleRules<T>[K]> : never : K extends keyof T ? NonNullable<T[K]> : never;
194
+ };
187
195
 
188
196
  type ParamDecl<T = any> = MaybeRef<Maybe<T>> | (() => Maybe<T>);
189
197
  type CreateFn<T extends any[]> = (...args: T) => any;
@@ -239,6 +247,12 @@ type RegleRuleMetadataExtended = {
239
247
  $valid: boolean;
240
248
  [x: string]: any;
241
249
  };
250
+ type UnwrapRuleTree<T extends {
251
+ [x: string]: RegleRuleRaw<any> | undefined;
252
+ }> = {
253
+ [K in keyof T]: UnwrapRuleWithParams<T[K]>;
254
+ };
255
+ type UnwrapRuleWithParams<T extends RegleRuleRaw<any> | undefined> = T extends RegleRuleWithParamsDefinition<infer TValue, infer TParams, infer TAsync, infer TMetadata> ? RegleRuleDefinition<TValue, TParams, TAsync, TMetadata> : T;
242
256
  /**
243
257
  * Define a rule Metadata definition
244
258
  */
@@ -259,7 +273,7 @@ type PossibleRegleRuleMetadataConsumer = DefaultMetadataProperties & {
259
273
  /**
260
274
  * Generic types for a created RegleRule
261
275
  */
262
- type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetaData extends RegleRuleMetadataDefinition = boolean> = RegleRuleDefinition<TValue, TParams, TAsync, TMetaData> | RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetaData>;
276
+ type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = boolean, TMetaData extends RegleRuleMetadataDefinition = boolean> = RegleRuleDefinition<TValue, TParams, TAsync, TMetaData> | RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetaData>;
263
277
  /**
264
278
  * Process the type of a created rule with `createRule`.
265
279
  * For a rule with params it will return a function
@@ -345,7 +359,10 @@ type DefaultValidators = {
345
359
  numeric: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
346
360
  regex: RegleRuleWithParamsDefinition<string, [regexp: RegExp], false, boolean>;
347
361
  required: RegleRuleDefinition<unknown, []>;
348
- sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown], false, boolean>;
362
+ sameAs: RegleRuleWithParamsDefinition<unknown, [
363
+ target: unknown,
364
+ otherName?: string
365
+ ], false, boolean>;
349
366
  startsWith: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
350
367
  url: RegleRuleDefinition<string, [], false, boolean, string>;
351
368
  };
@@ -353,7 +370,9 @@ type DefaultValidators = {
353
370
  type CustomRulesDeclarationTree = {
354
371
  [x: string]: RegleRuleRaw<any, any, boolean, any> | undefined;
355
372
  };
356
- type AllRulesDeclarations = CustomRulesDeclarationTree & DefaultValidators;
373
+ type AllRulesDeclarations = CustomRulesDeclarationTree & {
374
+ [K in keyof DefaultValidators]: RegleRuleRaw<any, any, boolean, any> | undefined;
375
+ };
357
376
 
358
377
  /**
359
378
  * @public
@@ -382,7 +401,7 @@ type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDe
382
401
  * Rule tree for a form property
383
402
  */
384
403
  type RegleRuleDecl<TValue extends any = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = FieldRegleBehaviourOptions & {
385
- [TKey in keyof TCustomRules]?: NonNullable<TCustomRules[TKey]> extends RegleRuleWithParamsDefinition<any, infer TParams> ? RegleRuleDefinition<TValue, TParams, boolean> : NonNullable<TCustomRules[TKey]> extends RegleRuleDefinition<any, any, any, any> ? FormRuleDeclaration<TValue, any> : FormRuleDeclaration<TValue, any> | FieldRegleBehaviourOptions[keyof FieldRegleBehaviourOptions];
404
+ [TKey in keyof TCustomRules]?: NonNullable<TCustomRules[TKey]> extends RegleRuleWithParamsDefinition<any, infer TParams> ? RegleRuleDefinition<TValue, [...TParams, ...args: [...any[]]], boolean> : NonNullable<TCustomRules[TKey]> extends RegleRuleDefinition<any, any, any, any> ? FormRuleDeclaration<TValue, any> : FormRuleDeclaration<TValue, any> | FieldRegleBehaviourOptions[keyof FieldRegleBehaviourOptions];
386
405
  };
387
406
  /**
388
407
  * @public
@@ -433,12 +452,12 @@ type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalVal
433
452
  /**
434
453
  * @public
435
454
  */
436
- type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never> = RegleCommonStatus<TState> & {
455
+ type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TExternal extends RegleExternalErrorTree<TState> = never> = RegleCommonStatus<TState> & {
437
456
  readonly $fields: {
438
457
  readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey>;
439
458
  };
440
- readonly $errors: RegleErrorTree<TRules>;
441
- readonly $silentErrors: RegleErrorTree<TRules>;
459
+ readonly $errors: RegleErrorTree<TRules, TExternal>;
460
+ readonly $silentErrors: RegleErrorTree<TRules, TExternal>;
442
461
  } & ([TValidationGroups] extends [never] ? {} : {
443
462
  $groups: {
444
463
  readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
@@ -451,7 +470,7 @@ type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl
451
470
  /**
452
471
  * @public
453
472
  */
454
- interface RegleFieldStatus<TState extends any = unknown, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>> extends RegleCommonStatus<TState> {
473
+ interface RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>> extends RegleCommonStatus<TState> {
455
474
  $value: UnwrapNestedRefs<TState>;
456
475
  readonly $errors: string[];
457
476
  readonly $silentErrors: string[];
@@ -482,7 +501,7 @@ interface RegleCommonStatus<TValue = any> {
482
501
  /**
483
502
  * @public
484
503
  */
485
- type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata extends RegleRuleMetadataDefinition = never> = {
504
+ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata extends RegleRuleMetadataDefinition = any> = {
486
505
  readonly $type: string;
487
506
  readonly $message: string | string[];
488
507
  readonly $active: boolean;
@@ -490,10 +509,12 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
490
509
  readonly $pending: boolean;
491
510
  readonly $path: string;
492
511
  readonly $metadata: TMetadata;
493
- $validator: (value: TValue, ...args: TParams) => boolean | Promise<boolean>;
512
+ $validator: (value: Maybe<TValue>, ...args: TParams) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>;
494
513
  $validate(): Promise<boolean>;
495
514
  $reset(): void;
496
- } & ([TParams] extends [[]] ? {} : {
515
+ } & ([TParams] extends [never[]] ? {} : [unknown[]] extends [TParams] ? {
516
+ readonly $params?: any[];
517
+ } : {
497
518
  readonly $params: TParams;
498
519
  });
499
520
  /**
@@ -545,15 +566,6 @@ declare function createRule<TValue extends any, TParams extends any[], TReturn e
545
566
  */
546
567
  declare function unwrapRuleParameters<TParams extends any[]>(params: ParamDecl[]): TParams;
547
568
 
548
- type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules | (() => TRules) | ComputedRef<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups>;
549
- declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>>;
550
-
551
- interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
552
- <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): typeof rulesFactory;
553
- <TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
554
- }
555
- declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
556
-
557
569
  declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>>({ rules, modifiers, }: {
558
570
  rules?: () => TCustomRules;
559
571
  modifiers?: RegleBehaviourOptions;
@@ -562,4 +574,4 @@ declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarat
562
574
  inferRules: inferRulesFn<TCustomRules>;
563
575
  };
564
576
 
565
- export { type DeepMaybeRef, type FormRuleDeclaration, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleExternalValidationErrorsReport, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleValidationTree, type Unwrap, type UnwrapRegleUniversalParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle };
577
+ export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRule, type InferRegleRules, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleExternalValidationErrorsReport, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, type RegleRequiredRules, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleValidationTree, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import {unref,version,isRef,toRef,computed,ref,toRaw,reactive,shallowRef,onScopeDispose,triggerRef,watch,effectScope}from'vue';function F(e){return e.map(t=>t instanceof Function?t():unref(t))}function Ce(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function Ie(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(o=>o.trim()).filter(o=>o.includes("=")).length+e.length}function se(e,...t){let{message:r,validator:n,active:a,...o}=e,m=n.constructor.name==="AsyncFunction";return {...{validator(y,...i){return e.validator(y,...F(i.length?i:t))},message(y,i){return typeof e.message=="function"?e.message(y,{...i,$params:F(i.$params?.length?i.$params:t)}):e.message},active(y,i){return typeof e.active=="function"?e.active(y,{...i,$params:F(i.$params?.length?i.$params:t)}):e.active??!0},exec(y){let i=e.validator(y,...F(t)),l;return i instanceof Promise?i.then(T=>(l=T,typeof l=="object"&&"$valid"in l?l.$valid:typeof l=="boolean"?l:!1)):(l=i,typeof l=="object"&&"$valid"in l?l.$valid:typeof l=="boolean"?l:!1)}},...o,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:m,_params:Ce(t)}}function ie(e){if(typeof e.validator=="function"){let r=se(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Ie(e.validator)>1){let a=function(...o){return se(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pe(e){return k(e.value)}function G(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>G(n)))),r=="Map"&&(t=new Map([...e].map(n=>[G(n[0]),G(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,et(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=G(e[n]);}return t}function et(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function ue(e,t,r){return e instanceof Function?e(t,r??0):e}function te(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function Q(e,t,r){let n,a=(...o)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(m);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(m);},0);}),a}function rt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),m=Number(n[a]);if(o>m)return 1;if(m>o)return -1;if(!isNaN(o)&&isNaN(m))return 1;if(isNaN(o)&&!isNaN(m))return -1}return 0}var H=rt(version,"3.5.0")!==-1;function nt(){return Math.floor(Math.random()*Date.now()).toString()}function ce(){return typeof window>"u"?nt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function fe(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),o=shallowRef(new Map);function m(p){let R=t.value.get(p);if(R)return R;{let d=ref({});return t.value.set(p,d),d}}function I(p){let R=r.value.get(p);if(R)return R;{let d=ref([]);return r.value.set(p,d),d}}function P(p,R,d){o.value.set(`${p}-${R}`,d);}function y(p,R){return o.value.get(`${p}-${R}`)}function i(p,R){p&&R!=null&&o.value.delete(`${p}-${R}`);}function l(p,R){n.value.set(p,R);}function T(p){return n.value.get(p)??!1}function h(p,R){e.value.set(p,R);}function E(p,R){let d=e.value.get(p);return d?u(R,d)?{valid:!0}:{valid:!1}:void 0}function u(p,R){let d=Object.keys(R),w=Object.keys(p);return w.length!==d.length||!w.every(g=>d.includes(g))?!1:w.every(g=>{let c=p[g],s=R[g];return !s||!c||typeof c=="function"||typeof s=="function"||typeof c=="number"||typeof c=="boolean"?!1:c._params?c._params?.every((f,C)=>{if(typeof s=="number"||typeof s=="boolean")return !0;{let v=F(s._params),S=F(c._params);return v?.[C]===S?.[C]}}):!0})}function M(p){let R=a.value.get(p);if(R)return R;{let d=ref(!1),w=ref(!0),x=ref({}),g=ref(!1);return a.value.set(p,{$pending:d,$valid:w,$metadata:x,$validating:g}),{$pending:d,$valid:w,$metadata:x,$validating:g}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:h,setDirtyEntry:l,checkRuleDeclEntry:E,getDirtyState:T,trySetRuleStatusRef:M,getFieldsEntry:m,getCollectionsEntry:I,getArrayStatus:y,addArrayStatus:P,deleteArrayStatus:i,arrayStatusStorage:o}}function we(e,t){return k(e.value)&&k(t.value)&&!Object.entries(t.value).some(r=>Re(r))}function Oe(e){return !!e.value&&"$each"in e.value}function Ae(e){return !!e.value&&k(e.value)}function Re(e){return k(e)&&"_validator"in e}function X(e){return typeof e.value!="function"}function pe(e){return k(e)&&"$fields"in e}function de(e){return !!e&&"$each"in e}function me(e){return !!e&&"$rules"in e}function ge(e){return "$each"in e||"$errors"in e}function N({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function Me(e,t=!1){return pe(e)?ye(e.$fields):de(e)?{$errors:e.$field.$rules?N({field:e.$field,silent:t}):[],$each:e.$each.map(r=>Me(r,t))}:me(e)?e.$error?N({field:e,silent:t}):e.$externalErrors??[]:[]}function ot(e,t=!1){return e.map(r=>Me(r,t))}function ye(e,t=!1){return Object.fromEntries(Object.entries(e).map(([r,n])=>pe(n)?[r,ye(n.$fields,t)]:de(n)?[r,{$errors:N({field:n.$field,silent:t}),$each:ot(n.$each,t)}]:me(n)?n.$error?[r,N({field:n,silent:t})]:[r,n.$externalErrors??[]]:[r,[]]))}function Fe(e){return computed(()=>ye(e.$fields))}var Ve=(r=>(r.Inline="__inline",r.Async="__async",r))(Ve||{});function _e(e,t){return computed(()=>e.value.some(r=>r[t]))}function ke(e,t){return computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function Be({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:m,$debounce:I}){let P=effectScope(),y,i,{$pending:l,$valid:T,$metadata:h,$validating:E}=m.trySetRuleStatusRef(`${o}.${n}`);function u(){y=P.run(()=>{let x=computed(()=>({$invalid:!T.value,$params:C.value,...h.value})),g=computed(()=>X(r)?typeof r.value.active=="function"?r.value.active(a.value,x.value):r.value.active:!0),c=computed(()=>{let S="",D=t?t[n]?.message:void 0;return D&&(typeof D=="function"?S=D(a.value,x.value):S=D),X(r)&&(D&&!r.value._patched||(typeof r.value.message=="function"?S=r.value.message(a.value,x.value):S=r.value.message)),te(S)&&(S="Error",console.warn(`No error message defined for ${o}.${n}`)),S}),s=computed(()=>X(r)&&r.value.type?r.value.type:n),f=computed(()=>X(r)?r.value.validator:r.value),C=computed(()=>typeof r.value=="function"?[]:F(r.value._params??[])),v=computed(()=>`${o}.${s.value}`);return {$active:g,$message:c,$type:s,$validator:f,$params:C,$path:v}}),i=watch(y.$params,R,{deep:!0});}u();async function M(x){let g=!1;try{T.value=!0,e.value&&(l.value=!0);let c=await x;if(typeof c=="boolean")g=c;else {let{$valid:s,...f}=c;g=s,h.value=f;}}catch{g=!1;}finally{l.value=!1;}return g}let p=Q(M,I??100);async function R(){E.value=!0;let x=y.$validator.value,g=!1,c=x(a.value,...y.$params.value);if(c instanceof Promise)g=await p(c);else if(c!=null)if(typeof c=="boolean")g=c;else {let{$valid:s,...f}=c;g=s,h.value=f;}return T.value=g,E.value=!1,g}function d(){T.value=!0,h.value={},l.value=!1,E.value=!1,u();}function w(){i(),P.stop(),P=effectScope();}return reactive({...y,$pending:l,$valid:T,$metadata:h,$validate:R,$unwatch:w,$watch:u,$reset:d})}function re({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:I,onUnwatch:P}){let y=effectScope(),i,l=ref(!1),T=ref(!1),h=ref([]),E,u,M,p,R=()=>{};function d(){h.value=m.value??[];}d();function w(){let $=t.value,b=a.checkRuleDeclEntry(n,$);f.value=Object.fromEntries(Object.entries($).filter(([A])=>A.startsWith("$"))),s.value=Object.fromEntries(Object.entries(t.value).filter(([A])=>!A.startsWith("$")).map(([A,_])=>{if(_){let le=toRef(()=>_);return [A,Be({$dirty:l,customMessages:r,rule:le,ruleKey:A,state:e,path:n,storage:a,$debounce:f.value.$debounce})]}return []}).filter(A=>!!A.length)),g(),R=i.$debounce.value?Q(c,i.$debounce.value??0):c,b?.valid!=null&&(l.value=a.getDirtyState(n),l.value&&R()),a.addRuleDeclEntry(n,$);}function x(){s.value&&Object.entries(s.value).forEach(([$,b])=>{b.$unwatch();}),p(),l.value&&a.setDirtyEntry(n,l.value),E(),u(),M(),y.stop(),y=effectScope(),P?.();}function g(){s.value&&Object.entries(s.value).forEach(([$,b])=>{b.$watch();}),i=y.run(()=>{let $=computed(()=>l.value),b=computed(()=>f.value.$debounce),A=computed(()=>f.value.$lazy!=null?f.value.$lazy:unref(o.lazy)),_=computed(()=>f.value.$rewardEarly!=null?f.value.$rewardEarly:unref(o.rewardEarly)),le=computed(()=>f.value.$autoDirty!=null?f.value.$autoDirty:unref(o.autoDirty)),Je=computed(()=>oe.value&&!he.value&&l.value),Qe=computed(()=>N({field:{$dirty:l.value,$externalErrors:h.value,$rules:s.value}})),Xe=computed(()=>N({field:{$dirty:l.value,$externalErrors:h.value,$rules:s.value},silent:!0})),he=computed(()=>T.value||!_.value?Object.entries(s.value).some(([ee,J])=>J.$pending):!1),oe=computed(()=>h.value?.length?!0:!_.value||_.value&&T.value?Object.entries(s.value).some(([ee,J])=>!J.$valid):!1),De=computed(()=>l.value&&!te(e.value)?h.value?.length?!1:_.value?Object.entries(s.value).every(([ee,J])=>J.$valid):!oe.value:!1);return watch(De,ee=>{ee&&(T.value=!1);}),{$error:Je,$pending:he,$invalid:oe,$valid:De,$debounce:b,$lazy:A,$errors:Qe,$silentErrors:Xe,$rewardEarly:_,$autoDirty:le,$anyDirty:$}}),M=watch(m,d),E=watch(e,()=>{i.$autoDirty.value&&(l.value||(l.value=!0)),t.value instanceof Function&&w(),R(),i.$rewardEarly.value;},{deep:H?1:!0}),p=watch(l,()=>{a.setDirtyEntry(n,l.value);}),u=watch(i.$valid,$=>{i.$rewardEarly.value&&$&&(T.value=!1);});}function c(){Object.entries(s.value).forEach(([$,b])=>{b.$validate();});}let s=ref(),f=ref();w();function C(){l.value=!1,h.value=[],Object.entries(s.value).forEach(([$,b])=>{b.$reset();}),i.$lazy.value||Object.entries(s.value).map(([$,b])=>b.$validate());}function v(){l.value||(l.value=!0,i.$rewardEarly.value,R());}let S=i.$debounce.value?Q(D,i.$debounce.value??0):D;async function D(){try{if(T.value=!0,i.$autoDirty.value&&l.value&&!i.$pending.value)return !i.$error.value;{let $=Object.entries(s.value).map(([A,_])=>_.$validate());return (await Promise.allSettled($)).every(A=>A.status==="fulfilled"?A.value:!1)}}catch{return !1}}function O(){h.value=[];}return i.$lazy.value||D(),reactive({$dirty:l,...i,$externalErrors:h,$value:e,$rules:s,$reset:C,$touch:v,$validate:S,$unwatch:x,$watch:g,$clearExternalErrors:O})}function Ue({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:m,rules:I,externalErrors:P}){let y=I.$key?I.$key:ce(),i=`${t}.${String(y)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?i=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:y,enumerable:!1,configurable:!1,writable:!1}}));let l=toRef(()=>P.value?.[r]),T=ae({state:o,rulesDef:toRef(()=>I),customMessages:m,path:i,storage:a,options:n,externalErrors:l});if(T){let h=o.value?.$id;T.$id=h??String(y),a.addArrayStatus(e,T.$id,T);}return T}function We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m}){let I=effectScope(),P,y=effectScope(),i;if(Array.isArray(e.value)&&!t.value.$each)return null;let l=ref(),T=ref(e.value),h,E=ref({}),u=a.getCollectionsEntry(n);i=y.run(()=>{let s=computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(v=>typeof v!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(v=>Re(v)):!1),f=computed(()=>m.value?ge(m.value)?m.value.$errors??[]:[]:[]),C=computed(()=>m.value?ge(m.value)?m.value.$each??[]:[]:[]);return {isPrimitiveArray:s,$externalErrorsField:f,$externalErrorsEach:C}}),M(),R();function M(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(l.value=ce(),Object.defineProperties(e.value,{$id:{value:l.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(l.value=e.value.$id)),!i.isPrimitiveArray.value&&(T.value=E.value.$value,Array.isArray(e.value)&&t.value.$each?u.value=e.value.map((s,f)=>{let C=ue(t.value.$each,toRef(()=>s),f);if(C){let v=Ue({$id:l.value,path:n,rules:C,stateValue:toRef(()=>s),index:f,options:o,storage:a,externalErrors:i.$externalErrorsEach});return v||null}}).filter(s=>!!s):u.value=[],E.value=re({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:i.$externalErrorsField}));}function p(){if(Array.isArray(e.value)){let s=G(u.value);u.value=e.value.map((f,C)=>{let v=toRef(()=>f);if(f.$id&&u.value.find(S=>S.$id===f.$id)){let S=a.getArrayStatus(l.value,f.$id);return S?(S.$value=v,S):null}else {let S=ue(t.value.$each,v,C);if(S){let D=Ue({$id:l.value,path:n,rules:S,stateValue:v,index:C,options:o,storage:a,externalErrors:i.$externalErrorsEach});return D||null}}}).filter(f=>!!f),s.filter(f=>!e.value.find(C=>f.$id===C.$id)).forEach((f,C)=>{a.deleteArrayStatus(l.value,C.toString());});}else u.value=[];}function R(){h=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?M():p();},{deep:H?1:!0,flush:"pre"}),P=I.run(()=>{let s=computed(()=>E.value.$dirty&&u.value.every(b=>b.$dirty)),f=computed(()=>E.value.$anyDirty||u.value.some(b=>b.$dirty)),C=computed(()=>E.value.$invalid||u.value.some(b=>b.$invalid)),v=computed(()=>E.value.$valid&&u.value.every(b=>b.$valid)),S=computed(()=>E.value.$error||u.value.some(b=>b.$error)),D=computed(()=>E.value.$pending||u.value.some(b=>b.$pending)),O=computed(()=>({$errors:E.value.$errors,$each:u.value.map(b=>b.$errors)})),$=computed(()=>({$errors:E.value.$silentErrors,$each:u.value.map(b=>b.$silentErrors)}));return {$dirty:s,$anyDirty:f,$invalid:C,$valid:v,$error:S,$pending:D,$errors:O,$silentErrors:$}}),i.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`),h());}function d(){h&&h(),E.value&&E.value.$unwatch(),u.value&&u.value.forEach(s=>{"$dirty"in s&&s.$unwatch();}),I.stop(),I=effectScope(),y.stop(),y=effectScope(!0);}function w(){E.value.$touch(),u.value.forEach(s=>{s.$touch();});}function x(){E.value.$reset(),u.value.forEach(s=>{s.$reset();});}async function g(){try{return (await Promise.all([E.value.$validate(),...u.value.map(f=>f.$validate())])).every(f=>!!f)}catch{return !1}}function c(){}return reactive({$field:E,...P,$each:u,$value:e,$validate:g,$unwatch:d,$watch:R,$touch:w,$reset:x,$clearExternalErrors:c})}function Se({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:m,externalErrors:I,validationGroups:P}){let y,i,l;function E(g=!0,c=!1){u.value=null,triggerRef(u);let s=Object.fromEntries(Object.entries(e.value).map(([v,S])=>{if(S){let D=toRef(t.value,v),O=toRef(()=>S),$=toRef(()=>I.value?.[v]);return [v,ae({state:D,rulesDef:O,customMessages:r,path:n?`${n}.${v}`:v,storage:o,options:m,externalErrors:$})]}return []}).filter(v=>!!v.length&&v[1]!=null)),f=Object.fromEntries(Object.entries(unref(I)??{}).filter(([v])=>!(v in e.value)).map(([v,S])=>{if(S){let D=toRef(()=>({})),O=toRef(()=>S);return [v,ae({state:ref(void 0),rulesDef:D,customMessages:r,path:n?`${n}.${v}`:v,storage:o,options:m,externalErrors:O})]}return []})),C=Object.fromEntries(Object.entries(P?.(s)??{}).map(([v,S])=>S.length?[v,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(D=>[D,_e(toRef(()=>S),D)])),...Object.fromEntries(["$errors","$silentErrors"].map(D=>[D,ke(toRef(()=>S),D)]))}]:[]));u.value={...s,...f,...C},g&&d();}let u=o.getFieldsEntry(n);E();function M(){E(!1),Object.entries(u.value).forEach(([g,c])=>{c.$reset();}),d();}function p(){Object.entries(u.value).forEach(([g,c])=>{c.$touch();});}async function R(){try{return (await Promise.allSettled(Object.entries(u.value).map(([c,s])=>s.$validate()))).every(c=>c.status==="fulfilled"?c.value:!1)}catch{return !1}}function d(){a&&(l=watch(a,()=>{w(),E();},{deep:H?1:!0,flush:"post"})),y=effectScope(),i=y.run(()=>{let g=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([O,$])=>$.$dirty)),c=computed(()=>Object.entries(u.value).some(([O,$])=>$.$dirty)),s=computed(()=>Object.entries(u.value).some(([O,$])=>$.$invalid)),f=computed(()=>Object.entries(u.value).every(([O,$])=>$.$valid)),C=computed(()=>Object.entries(u.value).some(([O,$])=>$.$error)),v=computed(()=>Object.entries(u.value).some(([O,$])=>$.$pending)),S=computed(()=>Object.fromEntries(Object.entries(u.value).map(([O,$])=>[O,$.$errors]))),D=computed(()=>Object.fromEntries(Object.entries(u.value).map(([O,$])=>[O,$.$silentErrors])));return {$dirty:g,$anyDirty:c,$invalid:s,$valid:f,$error:C,$pending:v,$errors:S,$silentErrors:D}});}function w(){u.value&&Object.entries(u.value).forEach(([g,c])=>{c.$unwatch();}),l?.(),y.stop(),y=effectScope();}function x(){Object.entries(u.value).forEach(([g,c])=>{c.$clearExternalErrors();});}return reactive({...i,$fields:u,$value:t,$reset:M,$touch:p,$validate:R,$unwatch:w,$watch:d,$clearExternalErrors:x})}function ae({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:I,onUnwatch:P}){return Oe(t)?We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:I,externalErrors:m}):we(e,t)&&Pe(e)?Se({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:I,externalErrors:m}):Ae(t)?re({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:I,externalErrors:m,onUnwatch:P}):null}function Ee(e,t,r,n){let a=fe(),o=computed(()=>unref(r.externalErrors)),m=reactive(Se({rootRules:e,scopeRules:e,state:t,customMessages:n?.(),storage:a,options:r,externalErrors:o,validationGroups:r.validationGroups})),I=Fe(m);return {regle:m,errors:I}}function be(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,o,m){let I=isRef(o)?o:computed(typeof o=="function"?o:()=>o),P={...r,...m},y=isRef(a)?a:ref(a),i=G(toRaw(y.value)),{regle:l,errors:T}=Ee(I,y,P,e);function h(){l.$unwatch(),E(a,i),l.$reset();}function E(p,R){Object.entries(R).forEach(([d,w])=>{let x=isRef(p)?p.value:p,g=isRef(x[d])?x[d].value:x[d],c=isRef(R[d])?R[d]._value:R[d];Array.isArray(c)&&Array.isArray(g)?(x[d]=[],c.forEach((s,f)=>{x[d][f]={},E(x[d][f],c[f]);})):k(c)?E(g,c):isRef(x[d])?x[d].value=c:x[d]=c;});}let u=computed(()=>!(l.$invalid||l.$pending));async function M(){return l.$touch(),await l.$validate()?y.value:!1}return {regle:l,r$:l,errors:T,resetAll:h,validateState:M,ready:u,state:y}}return n}var Le=be();function xe(){function e(t,r){return r}return e}var Te=xe();function ze({rules:e,modifiers:t}){let r=be(e,t),n=xe();return {useRegle:r,inferRules:n}}export{Ve as InternalRuleType,ie as createRule,ze as defineRegleConfig,Te as inferRules,F as unwrapRuleParameters,Le as useRegle};
1
+ import {unref,version,isRef,toRef,computed,ref,toRaw,reactive,shallowRef,onScopeDispose,triggerRef,watch,effectScope}from'vue';var ce=(r=>(r.Inline="__inline",r.Async="__async",r))(ce||{});function Ae(e,t){return computed(()=>e.value.some(r=>r[t]))}function Me(e,t){return computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function j(e){return e.map(t=>t instanceof Function?t():unref(t))}function Fe(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function Ve(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(o=>o.trim()).filter(o=>o.includes("=")).length+e.length}function fe(e,...t){let{message:r,validator:n,active:a,type:o,...m}=e,T=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator($,...s){return e.validator($,...j(s.length?s:t))},message($,s){return typeof e.message=="function"?e.message($,{...s,$params:j(s.$params?.length?s.$params:t)}):e.message},active($,s){return typeof e.active=="function"?e.active($,{...s,$params:j(s.$params?.length?s.$params:t)}):e.active??!0},exec($){let s=e.validator($,...j(t)),i;return s instanceof Promise?s.then(h=>(i=h,typeof i=="object"&&"$valid"in i?i.$valid:typeof i=="boolean"?i:!1)):(i=s,typeof i=="object"&&"$valid"in i?i.$valid:typeof i=="boolean"?i:!1)}},...m,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:T,_params:Fe(t)}}function Re(e){if(typeof e.validator=="function"){let r=fe(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Ve(e.validator)>1){let a=function(...o){return fe(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function B(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function je(e){return B(e.value)}function U(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>U(n)))),r=="Map"&&(t=new Map([...e].map(n=>[U(n[0]),U(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,lt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=U(e[n]);}return t}function lt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function pe(e,t,r){return e instanceof Function?e(t,r??0):e}function ae(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function K(e,t,r){let n,a=(...o)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(m);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(m);},0);}),a}function st(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),m=Number(n[a]);if(o>m)return 1;if(m>o)return -1;if(!isNaN(o)&&isNaN(m))return 1;if(isNaN(o)&&!isNaN(m))return -1}return 0}var J=st(version,"3.5.0")!==-1;function it(){return Math.floor(Math.random()*Date.now()).toString()}function de(){return typeof window>"u"?it():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function me(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),o=shallowRef(new Map);function m(p){let c=t.value.get(p);if(c)return c;{let x=ref({});return t.value.set(p,x),x}}function T(p){let c=r.value.get(p);if(c)return c;{let x=ref([]);return r.value.set(p,x),x}}function P(p,c,x){o.value.set(`${p}-${c}`,x);}function S(p,c){return o.value.get(`${p}-${c}`)}function $(p,c){p&&c!=null&&o.value.delete(`${p}-${c}`);}function s(p,c){n.value.set(p,c);}function i(p){return n.value.get(p)??!1}function h(p,c){e.value.set(p,c);}function y(p,c){let x=e.value.get(p);return x?u(c,x)?{valid:!0}:{valid:!1}:void 0}function u(p,c){let x=Object.keys(c),E=Object.keys(p);return E.length!==x.length||!E.every(v=>x.includes(v))?!1:E.every(v=>{let d=p[v],f=c[v];return !f||!d||typeof d=="function"||typeof f=="function"||typeof d=="number"||typeof d=="boolean"?!1:d._params?d._params?.every((R,b)=>{if(typeof f=="number"||typeof f=="boolean")return !0;{let l=j(f._params),g=j(d._params);return l?.[b]===g?.[b]}}):!0})}function O(p){let c=a.value.get(p);if(c)return c;{let x=ref(!1),E=ref(!0),A=ref({}),v=ref(!1);return a.value.set(p,{$pending:x,$valid:E,$metadata:A,$validating:v}),{$pending:x,$valid:E,$metadata:A,$validating:v}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:h,setDirtyEntry:s,checkRuleDeclEntry:y,getDirtyState:i,trySetRuleStatusRef:O,getFieldsEntry:m,getCollectionsEntry:T,getArrayStatus:S,addArrayStatus:P,deleteArrayStatus:$,arrayStatusStorage:o}}function _e(e,t){return B(e.value)&&B(t.value)&&!Object.entries(t.value).some(r=>ee(r))}function Ge(e){return !!e.value&&"$each"in e.value}function ke(e){return !!e.value&&B(e.value)}function ee(e){return B(e)&&"_validator"in e}function te(e){return typeof e.value!="function"}function ye(e){return B(e)&&"$fields"in e}function ge(e){return !!e&&"$each"in e}function ve(e){return !!e&&"$rules"in e}function $e(e){return "$each"in e||"$errors"in e}function H({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function Be(e,t=!1){return ye(e)?Se(e.$fields):ge(e)?{$errors:e.$field.$rules?H({field:e.$field,silent:t}):[],$each:e.$each.map(r=>Be(r,t))}:ve(e)?e.$error?H({field:e,silent:t}):e.$externalErrors??[]:[]}function ft(e,t=!1){return e.map(r=>Be(r,t))}function Se(e,t=!1){return Object.fromEntries(Object.entries(e).map(([r,n])=>ye(n)?[r,Se(n.$fields,t)]:ge(n)?[r,{$errors:H({field:n.$field,silent:t}),$each:ft(n.$each,t)}]:ve(n)?n.$error?[r,H({field:n,silent:t})]:[r,n.$externalErrors??[]]:[r,[]]))}function Ne(e){return computed(()=>Se(e.$fields))}function We({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:m,$debounce:T}){let P=effectScope(),S,$,s=ref(!1),{$pending:i,$valid:h,$metadata:y,$validating:u}=m.trySetRuleStatusRef(`${o}.${n}`);function O(){S=P.run(()=>{let d=computed(()=>({$invalid:!h.value,$params:g.value,...y.value})),f=computed(()=>te(r)?typeof r.value.active=="function"?r.value.active(a.value,d.value):r.value.active:!0),R=computed(()=>{let C="",D=t?t[n]?.message:void 0;return D&&(typeof D=="function"?C=D(a.value,d.value):C=D),te(r)&&(D&&!r.value._patched||(typeof r.value.message=="function"?C=r.value.message(a.value,d.value):C=r.value.message)),ae(C)&&(C="Error",console.warn(`No error message defined for ${o}.${n}`)),C}),b=computed(()=>te(r)&&r.value.type?r.value.type:n),l=computed(()=>te(r)?r.value.validator:r.value),g=computed(()=>typeof r.value=="function"?[]:j(r.value._params??[])),I=computed(()=>`${o}.${b.value}`);return {$active:f,$message:R,$type:b,$validator:l,$params:g,$path:I}}),$=watch(S.$params,E,{deep:!0});}O();function p(){h.value=!0,e.value&&(i.value=!0);}async function c(){let d=S.$validator.value,f=d(a.value,...S.$params.value),R=!1,b=a.value;try{p();let l;if(f instanceof Promise?l=await f:l=f,a.value!==b)return !0;if(typeof l=="boolean")R=l;else {let{$valid:g,...I}=l;R=g,y.value=I;}}catch{R=!1;}finally{i.value=!1;}return R}let x=K(c,T??200);async function E(){u.value=!0;let d=!1;if(ee(r.value)&&r.value._async)d=await x();else {let f=S.$validator.value,R=f(a.value,...S.$params.value);if(R 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(R!=null)if(typeof R=="boolean")d=R;else {let{$valid:b,...l}=R;d=b,y.value=l;}}return h.value=d,u.value=!1,d}function A(){h.value=!0,y.value={},i.value=!1,u.value=!1,O();}function v(){$(),P.stop(),P=effectScope();}return reactive({...S,$pending:i,$valid:h,$metadata:y,_haveAsync:s,$validating:u,$validate:E,$unwatch:v,$watch:O,$reset:A})}function le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:T,onUnwatch:P,$isArray:S}){let $=effectScope(),s,i=ref(!1),h=ref(!1),y=ref([]),u,O,p,c,x,E=()=>{};function A(){y.value=m.value??[];}A();function v(){let M=t.value,F=a.checkRuleDeclEntry(n,M);g.value=Object.fromEntries(Object.entries(M).filter(([V])=>V.startsWith("$"))),l.value=Object.fromEntries(Object.entries(t.value).filter(([V])=>!V.startsWith("$")).map(([V,k])=>{if(k){let ie=toRef(()=>k);return [V,We({$dirty:i,customMessages:r,rule:ie,ruleKey:V,state:e,path:n,storage:a,$debounce:g.value.$debounce})]}return []}).filter(V=>!!V.length)),R(),d(),F?.valid!=null&&(i.value=a.getDirtyState(n),i.value&&E()),a.addRuleDeclEntry(n,M);}function d(){E=s.$debounce.value?K(b,s.$debounce.value??s.haveAnyAsyncRule?100:0):b;}function f(){l.value&&Object.entries(l.value).forEach(([M,F])=>{F.$unwatch();}),c(),i.value&&a.setDirtyEntry(n,i.value),u(),O(),p(),$.stop(),$=effectScope(),P?.(),x?.();}function R(){l.value&&Object.entries(l.value).forEach(([M,F])=>{F.$watch();}),s=$.run(()=>{let M=computed(()=>i.value),F=computed(()=>g.value.$debounce),V=computed(()=>g.value.$lazy!=null?g.value.$lazy:unref(o.lazy)),k=computed(()=>g.value.$rewardEarly!=null?g.value.$rewardEarly:unref(o.rewardEarly)),ie=computed(()=>g.value.$autoDirty!=null?g.value.$autoDirty:unref(o.autoDirty)),Ze=computed(()=>Object.entries(l.value).some(([z,N])=>N.$validating)),Ie=computed(()=>ue.value&&!Pe.value&&i.value),Ke=computed(()=>Ie.value?H({field:{$dirty:i.value,$externalErrors:y.value,$rules:l.value}}):[]),et=computed(()=>H({field:{$dirty:i.value,$externalErrors:y.value,$rules:l.value},silent:!0})),Pe=computed(()=>h.value||!k.value?Object.entries(l.value).some(([z,N])=>N.$pending):!1),ue=computed(()=>y.value?.length?!0:!k.value||k.value&&h.value?Object.entries(l.value).some(([z,N])=>!N.$valid):!1),we=computed(()=>i.value&&!ae(e.value)&&!Ze.value?y.value?.length?!1:k.value?Object.entries(l.value).every(([z,N])=>N.$valid):!ue.value:!1),tt=computed(()=>Object.entries(l.value).some(([z,N])=>N._haveAsync));return watch(we,z=>{z&&(h.value=!1);}),{$error:Ie,$pending:Pe,$invalid:ue,$valid:we,$debounce:F,$lazy:V,$errors:Ke,$silentErrors:et,$rewardEarly:k,$autoDirty:ie,$anyDirty:M,haveAnyAsyncRule:tt}}),p=watch(m,A),u=watch(e,()=>{s.$autoDirty.value&&(i.value||(i.value=!0)),t.value instanceof Function&&v(),E(),s.$rewardEarly.value;},{deep:S?!0:J?1:!0}),c=watch(i,()=>{a.setDirtyEntry(n,i.value);}),O=watch(s.$valid,M=>{s.$rewardEarly.value&&M&&(h.value=!1);}),x=watch(s.haveAnyAsyncRule,d);}function b(){Object.entries(l.value).forEach(([M,F])=>{F.$validate();});}let l=ref(),g=ref();v();function I(){i.value=!1,y.value=[],Object.entries(l.value).forEach(([M,F])=>{F.$reset();}),s.$lazy.value||Object.entries(l.value).map(([M,F])=>F.$validate());}function C(){i.value||(i.value=!0,s.$rewardEarly.value,E());}let D=s.$debounce.value?K(w,s.$debounce.value??0):w;async function w(){try{if(h.value=!0,s.$autoDirty.value&&i.value&&!s.$pending.value)return !s.$error.value;{let M=Object.entries(l.value).map(([V,k])=>k.$validate());return (await Promise.allSettled(M)).every(V=>V.status==="fulfilled"?V.value:!1)}}catch{return !1}}function Xe(){y.value=[];}return s.$lazy.value||w(),reactive({$dirty:i,...s,$externalErrors:y,$value:e,$rules:l,$reset:I,$touch:C,$validate:D,$unwatch:f,$watch:R,$clearExternalErrors:Xe})}function qe({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:m,rules:T,externalErrors:P}){let S=T.$key?T.$key:de(),$=`${t}.${String(S)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?$=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:S,enumerable:!1,configurable:!1,writable:!1}}));let s=toRef(()=>P.value?.[r]),i=se({state:o,rulesDef:toRef(()=>T),customMessages:m,path:$,storage:a,options:n,externalErrors:s});if(i){let h=o.value?.$id;i.$id=h??String(S),a.addArrayStatus(e,i.$id,i);}return i}function Le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m}){let T=effectScope(),P,S=effectScope(),$;if(Array.isArray(e.value)&&!t.value.$each)return null;let s=ref(),i=ref(e.value),h,y=ref({}),u=a.getCollectionsEntry(n);$=S.run(()=>{let f=computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(l=>typeof l!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(l=>ee(l)):!1),R=computed(()=>m.value?$e(m.value)?m.value.$errors??[]:[]:[]),b=computed(()=>m.value?$e(m.value)?m.value.$each??[]:[]:[]);return {isPrimitiveArray:f,$externalErrorsField:R,$externalErrorsEach:b}}),O(),c();function O(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(s.value=de(),Object.defineProperties(e.value,{$id:{value:s.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(s.value=e.value.$id)),!$.isPrimitiveArray.value&&(i.value=y.value.$value,Array.isArray(e.value)&&t.value.$each?u.value=e.value.map((f,R)=>{let b=pe(t.value.$each,toRef(()=>f),R);if(b){let l=qe({$id:s.value,path:n,rules:b,stateValue:toRef(()=>f),index:R,options:o,storage:a,externalErrors:$.$externalErrorsEach});return l||null}}).filter(f=>!!f):u.value=[],y.value=le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:$.$externalErrorsField,$isArray:!0}));}function p(){if(Array.isArray(e.value)){let f=U(u.value);u.value=e.value.map((R,b)=>{let l=toRef(()=>R);if(R.$id&&u.value.find(g=>g.$id===R.$id)){let g=a.getArrayStatus(s.value,R.$id);return g?(g.$value=l,g):null}else {let g=pe(t.value.$each,l,b);if(g){let I=qe({$id:s.value,path:n,rules:g,stateValue:l,index:b,options:o,storage:a,externalErrors:$.$externalErrorsEach});return I||null}}}).filter(R=>!!R),f.filter(R=>!e.value.find(b=>R.$id===b.$id)).forEach((R,b)=>{a.deleteArrayStatus(s.value,b.toString());});}else u.value=[];}function c(){h=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?O():p();},{deep:J?1:!0,flush:"pre"}),P=T.run(()=>{let f=computed(()=>y.value.$dirty&&u.value.every(w=>w.$dirty)),R=computed(()=>y.value.$anyDirty||u.value.some(w=>w.$dirty)),b=computed(()=>y.value.$invalid||u.value.some(w=>w.$invalid)),l=computed(()=>y.value.$valid&&u.value.every(w=>w.$valid)),g=computed(()=>y.value.$error||u.value.some(w=>w.$error)),I=computed(()=>y.value.$pending||u.value.some(w=>w.$pending)),C=computed(()=>({$errors:y.value.$errors,$each:u.value.map(w=>w.$errors)})),D=computed(()=>({$errors:y.value.$silentErrors,$each:u.value.map(w=>w.$silentErrors)}));return {$dirty:f,$anyDirty:R,$invalid:b,$valid:l,$error:g,$pending:I,$errors:C,$silentErrors:D}}),$.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`),h());}function x(){h&&h(),y.value&&y.value.$unwatch(),u.value&&u.value.forEach(f=>{"$dirty"in f&&f.$unwatch();}),T.stop(),T=effectScope(),S.stop(),S=effectScope(!0);}function E(){y.value.$touch(),u.value.forEach(f=>{f.$touch();});}function A(){y.value.$reset(),u.value.forEach(f=>{f.$reset();});}async function v(){try{return (await Promise.all([y.value.$validate(),...u.value.map(R=>R.$validate())])).every(R=>!!R)}catch{return !1}}function d(){}return reactive({$field:y,...P,$each:u,$value:e,$validate:v,$unwatch:x,$watch:c,$touch:E,$reset:A,$clearExternalErrors:d})}function he({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:m,externalErrors:T,validationGroups:P}){let S,$,s=null;function y(v=!0,d=!1){u.value=null,triggerRef(u);let f=Object.fromEntries(Object.entries(e.value).map(([l,g])=>{if(g){let I=toRef(t.value,l),C=toRef(()=>g),D=toRef(()=>T.value?.[l]);return [l,se({state:I,rulesDef:C,customMessages:r,path:n?`${n}.${l}`:l,storage:o,options:m,externalErrors:D})]}return []}).filter(l=>!!l.length&&l[1]!=null)),R=Object.fromEntries(Object.entries(unref(T)??{}).filter(([l])=>!(l in e.value)).map(([l,g])=>{if(g){let I=toRef(()=>({})),C=toRef(()=>g);return [l,se({state:ref(void 0),rulesDef:I,customMessages:r,path:n?`${n}.${l}`:l,storage:o,options:m,externalErrors:C})]}return []})),b=Object.fromEntries(Object.entries(P?.(f)??{}).map(([l,g])=>g.length?[l,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(I=>[I,Ae(toRef(()=>g),I)])),...Object.fromEntries(["$errors","$silentErrors"].map(I=>[I,Me(toRef(()=>g),I)]))}]:[]));u.value={...f,...R,...b},v&&x();}let u=o.getFieldsEntry(n);y();function O(){y(!1),Object.entries(u.value).forEach(([v,d])=>{d.$reset();}),x();}function p(){Object.entries(u.value).forEach(([v,d])=>{d.$touch();});}async function c(){try{return (await Promise.allSettled(Object.entries(u.value).map(([d,f])=>f.$validate()))).every(d=>d.status==="fulfilled"?d.value:!1)}catch{return !1}}function x(){a&&(s=watch(a,()=>{E(),y();},{deep:J?1:!0,flush:"post"})),S=effectScope(),$=S.run(()=>{let v=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([C,D])=>D.$dirty)),d=computed(()=>Object.entries(u.value).some(([C,D])=>D.$dirty)),f=computed(()=>Object.entries(u.value).some(([C,D])=>D.$invalid)),R=computed(()=>Object.entries(u.value).every(([C,D])=>D.$valid)),b=computed(()=>v.value&&!l.value&&f.value),l=computed(()=>Object.entries(u.value).some(([C,D])=>D.$pending)),g=computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,D])=>[C,D.$errors]))),I=computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,D])=>[C,D.$silentErrors])));return {$dirty:v,$anyDirty:d,$invalid:f,$valid:R,$error:b,$pending:l,$errors:g,$silentErrors:I}});}function E(){u.value&&Object.entries(u.value).forEach(([v,d])=>{d.$unwatch();}),s?.(),S.stop(),S=effectScope();}function A(){Object.entries(u.value).forEach(([v,d])=>{d.$clearExternalErrors();});}return reactive({...$,$fields:u,$value:t,$reset:O,$touch:p,$validate:c,$unwatch:E,$watch:x,$clearExternalErrors:A})}function se({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:T,onUnwatch:P}){return Ge(t)?Le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:T,externalErrors:m}):_e(e,t)&&je(e)?he({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:T,externalErrors:m}):ke(t)?le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:T,externalErrors:m,onUnwatch:P}):null}function xe(e,t,r,n){let a=me(),o=computed(()=>unref(r.externalErrors)),m=reactive(he({rootRules:e,scopeRules:e,state:t,customMessages:n?.(),storage:a,options:r,externalErrors:o,validationGroups:r.validationGroups})),T=Ne(m);return {regle:m,errors:T}}function Te(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,o,m){let T=isRef(o)?o:computed(typeof o=="function"?o:()=>o),P={...r,...m},S=isRef(a)?a:ref(a),$=U(toRaw(S.value)),{regle:s}=xe(T,S,P,e);function i(){s.$unwatch(),h(a,$),s.$reset();}function h(O,p){Object.entries(p).forEach(([c,x])=>{let E=isRef(O)?O.value:O,A=isRef(E[c])?E[c].value:E[c],v=isRef(p[c])?p[c]._value:p[c];Array.isArray(v)&&Array.isArray(A)?(E[c]=[],v.forEach((d,f)=>{E[c][f]={},h(E[c][f],v[f]);})):B(v)?h(A,v):isRef(E[c])?E[c].value=v:E[c]=v;});}let y=computed(()=>!(s.$invalid||s.$pending));async function u(){return s.$touch(),await s.$validate()?S.value:!1}return {r$:s,resetAll:i,validateState:u,ready:y,state:S}}return n}var Ye=Te();function De(){function e(t,r){return r}return e}var Ce=De();function Qe({rules:e,modifiers:t}){let r=Te(e,t),n=De();return {useRegle:r,inferRules:n}}export{ce as InternalRuleType,Re as createRule,Qe as defineRegleConfig,Ce as inferRules,j as unwrapRuleParameters,Ye as useRegle};
package/package.json CHANGED
@@ -1,28 +1,28 @@
1
1
  {
2
2
  "name": "@regle/core",
3
- "version": "0.1.9",
3
+ "version": "0.2.2",
4
4
  "description": "Typescript-first model-based form validation library for Vue 3",
5
5
  "peerDependencies": {
6
6
  "vue": "^3.1.0"
7
7
  },
8
8
  "devDependencies": {
9
9
  "@total-typescript/ts-reset": "0.6.1",
10
- "@types/node": "22.9.0",
11
- "@typescript-eslint/eslint-plugin": "8.14.0",
12
- "@typescript-eslint/parser": "8.14.0",
10
+ "@types/node": "22.9.3",
11
+ "@typescript-eslint/eslint-plugin": "8.15.0",
12
+ "@typescript-eslint/parser": "8.15.0",
13
13
  "@vue/test-utils": "2.4.6",
14
14
  "bumpp": "9.8.1",
15
15
  "changelogithub": "0.13.11",
16
16
  "cross-env": "7.0.3",
17
- "eslint": "9.14.0",
17
+ "eslint": "9.15.0",
18
18
  "eslint-config-prettier": "9.1.0",
19
- "eslint-plugin-vue": "9.30.0",
19
+ "eslint-plugin-vue": "9.31.0",
20
20
  "prettier": "3.3.3",
21
21
  "tsup": "8.3.5",
22
- "type-fest": "4.26.1",
22
+ "type-fest": "4.28.0",
23
23
  "typescript": "5.6.3",
24
- "vitest": "2.1.4",
25
- "vue": "3.5.12",
24
+ "vitest": "2.1.5",
25
+ "vue": "3.5.13",
26
26
  "vue-eslint-parser": "9.4.3",
27
27
  "vue-tsc": "2.1.10"
28
28
  },