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