@regle/core 0.2.6 → 0.2.8
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 +52 -74
- package/dist/index.d.ts +52 -74
- 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 Pe=(r=>(r.Inline="__inline",r.Async="__async",r))(Pe||{});function Ke(e,t){return vue.computed(()=>e.value.some(r=>r[t]))}function et(e,t){return vue.computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function L(e){return e.map(t=>t instanceof Function?t():vue.unref(t))}function tt(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function rt(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(o=>o.trim()).filter(o=>o.includes("=")).length+e.length}function we(e,...t){let{message:r,validator:n,active:a,type:o,...u}=e,S=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator(g,...m){return e.validator(g,...L(m.length?m:t))},message(g,m){return typeof e.message=="function"?e.message(g,{...m,$params:L(m.$params?.length?m.$params:t)}):e.message},active(g,m){return typeof e.active=="function"?e.active(g,{...m,$params:L(m.$params?.length?m.$params:t)}):e.active??!0},exec(g){let m=e.validator(g,...L(t)),d;return m instanceof Promise?m.then(f=>(d=f,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)):(d=m,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)}},...u,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:S,_params:tt(t)}}function Oe(e){if(typeof e.validator=="function"){let r=we(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(rt(e.validator)>1){let a=function(...o){return we(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function nt(e){return z(e.value)}function re(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>re(n)))),r=="Map"&&(t=new Map([...e].map(n=>[re(n[0]),re(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,xt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=re(e[n]);}return t}function xt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function Ae(e,t,r){return e instanceof Function?e(t,r??0):e}function at(e,t){vue.isRef(e)?e.value=t:e=t;}function lt(e,t){vue.isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=vue.isRef(e)?e.value[n]:e[n];a={},de(a,t[n]);});}function de(e,t){Object.entries({...vue.unref(e),...t}).forEach(([r,n])=>{let a=vue.isRef(e)?e.value:e,o=vue.isRef(t[r])?t[r]._value:t[r],u=vue.isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(o)&&o.forEach((S,E)=>{a[r][E]={},de(a[r][E],o[E]);})):z(o)?de(u,o):vue.isRef(a[r])?a[r].value=o:a[r]=o;});}function ee(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function ye(e,t,r){let n,a=(...o)=>new Promise(u=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(u);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(u=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(u);},0);}),a}function Ct(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),u=Number(n[a]);if(o>u)return 1;if(u>o)return -1;if(!isNaN(o)&&isNaN(u))return 1;if(isNaN(o)&&!isNaN(u))return -1}return 0}var se=Ct(vue.version,"3.5.0")!==-1;function It(){return Math.floor(Math.random()*Date.now()).toString()}function Fe(){return typeof window>"u"?It():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Me(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),a=vue.shallowRef(new Map),o=vue.shallowRef(new Map);function u(i){let l=t.value.get(i);if(l)return l;{let x=vue.ref({});return t.value.set(i,x),x}}function S(i){let l=r.value.get(i);if(l)return l;{let x=vue.ref([]);return r.value.set(i,x),x}}function E(i,l,x){o.value.set(`${i}-${l}`,x);}function h(i,l){return o.value.get(`${i}-${l}`)}function g(i,l){i&&l!=null&&o.value.delete(`${i}-${l}`);}function m(i,l){n.value.set(i,l);}function d(i){return n.value.get(i)??!1}function f(i,l){e.value.set(i,l);}function c(i,l){let x=e.value.get(i);return x?I(l,x)?{valid:!0}:{valid:!1}:void 0}function I(i,l){let x=Object.keys(l),j=Object.keys(i);return j.length!==x.length||!j.every(w=>x.includes(w))?!1:j.every(w=>{let b=i[w],O=l[w];return !O||!b||typeof b=="function"||typeof O=="function"||typeof b=="number"||typeof b=="boolean"?!1:b._params?b._params?.every((A,N)=>{if(typeof O=="number"||typeof O=="boolean")return !0;{let V=L(O._params),q=L(b._params);return V?.[N]===q?.[N]}}):!0})}function C(i){let l=a.value.get(i);if(l)return l;{let x=vue.ref(!1),j=vue.ref(!0),G=vue.ref({}),w=vue.ref(!1);return a.value.set(i,{$pending:x,$valid:j,$metadata:G,$validating:w}),{$pending:x,$valid:j,$metadata:G,$validating:w}}}return vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:f,setDirtyEntry:m,checkRuleDeclEntry:c,getDirtyState:d,trySetRuleStatusRef:C,getFieldsEntry:u,getCollectionsEntry:S,getArrayStatus:h,addArrayStatus:E,deleteArrayStatus:g,arrayStatusStorage:o}}function ot(e,t){return z(e.value)&&z(t.value)&&!Object.entries(t.value).some(r=>me(r))}function it(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function st(e){return !!e.value&&z(e.value)}function me(e){return z(e)&&"_validator"in e}function ve(e){return typeof e.value!="function"}function Ve(e){return z(e)&&"$fields"in e}function je(e){return "$each"in e||"$errors"in e}function _e({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function ct({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:u,$debounce:S}){let E=vue.effectScope(),h,g,m=vue.ref(!1),{$pending:d,$valid:f,$metadata:c,$validating:I}=u.trySetRuleStatusRef(`${o}.${n}`);function C(){h=E.run(()=>{let b=vue.computed(()=>({$invalid:!f.value,$params:q.value,...c.value})),O=vue.computed(()=>ve(r)?typeof r.value.active=="function"?r.value.active(a.value,b.value):r.value.active:!0),A=vue.computed(()=>{let y="",v=t?t[n]?.message:void 0;return v&&(typeof v=="function"?y=v(a.value,b.value):y=v),ve(r)&&(v&&!r.value._patched||(typeof r.value.message=="function"?y=r.value.message(a.value,b.value):y=r.value.message)),ee(y)&&(y="Error",console.warn(`No error message defined for ${o}.${n}`)),y}),N=vue.computed(()=>ve(r)&&r.value.type?r.value.type:n),V=vue.computed(()=>ve(r)?r.value.validator:r.value),q=vue.computed(()=>typeof r.value=="function"?[]:L(r.value._params??[])),D=vue.computed(()=>`${o}.${N.value}`);return {$active:O,$message:A,$type:N,$validator:V,$params:q,$path:D}}),g=vue.watch(h.$params,j,{deep:!0});}C();function i(){f.value=!0,e.value&&(d.value=!0);}async function l(){let b=h.$validator.value,O=b(a.value,...h.$params.value),A=!1,N=a.value;try{i();let V;if(O instanceof Promise?V=await O:V=O,a.value!==N)return !0;if(typeof V=="boolean")A=V;else {let{$valid:q,...D}=V;A=q,c.value=D;}}catch{A=!1;}finally{d.value=!1;}return A}let x=ye(l,S??200);async function j(){I.value=!0;let b=!1;if(me(r.value)&&r.value._async)b=await x();else {let O=h.$validator.value,A=O(a.value,...h.$params.value);if(A instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(A!=null)if(typeof A=="boolean")b=A;else {let{$valid:N,...V}=A;b=N,c.value=V;}}return f.value=b,I.value=!1,b}function G(){f.value=!0,c.value={},d.value=!1,I.value=!1,C();}function w(){g(),E.stop(),E=vue.effectScope();}return vue.reactive({...h,$pending:d,$valid:f,$metadata:c,_haveAsync:m,$validating:I,$validate:j,$unwatch:w,$watch:C,$reset:G})}function be({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:u,externalErrors:S,onUnwatch:E,$isArray:h,initialState:g,shortcuts:m}){let d=vue.effectScope(),f,c=vue.ref(!1),I=vue.ref(!1),C=vue.ref([]),i,l,x,j,G,w=()=>{};function b(){C.value=S.value??[];}b();function O(){let _=t.value,W=o.checkRuleDeclEntry(n,_);y.value=Object.fromEntries(Object.entries(_).filter(([H])=>H.startsWith("$"))),D.value=Object.fromEntries(Object.entries(t.value).filter(([H])=>!H.startsWith("$")).map(([H,X])=>{if(X){let De=vue.toRef(()=>X);return [H,ct({$dirty:c,customMessages:r,rule:De,ruleKey:H,state:e,path:n,storage:o,$debounce:y.value.$debounce})]}return []}).filter(H=>!!H.length)),V(),A(),W?.valid!=null&&(c.value=o.getDirtyState(n),c.value&&w()),o.addRuleDeclEntry(n,_);}function A(){w=f.$debounce.value?ye(q,f.$debounce.value??f.haveAnyAsyncRule?100:0):q;}function N(){D.value&&Object.entries(D.value).forEach(([_,W])=>{W.$unwatch();}),j(),c.value&&o.setDirtyEntry(n,c.value),i(),l(),x(),d.stop(),d=vue.effectScope(),E?.(),G?.();}function V(){D.value&&Object.entries(D.value).forEach(([_,W])=>{W.$watch();}),f=d.run(()=>{let _=vue.computed(()=>c.value),W=vue.computed(()=>y.value.$debounce),H=vue.computed(()=>y.value.$lazy!=null?y.value.$lazy:vue.unref(u.lazy)),X=vue.computed(()=>y.value.$rewardEarly!=null?y.value.$rewardEarly:vue.unref(u.rewardEarly)),De=vue.computed(()=>y.value.$autoDirty!=null?y.value.$autoDirty:vue.unref(u.autoDirty)),vt=vue.computed(()=>Object.entries(D.value).some(([te,Q])=>Q.$validating)),Ce=vue.computed(()=>pe.value&&!Ee.value&&c.value),Le=vue.computed(()=>Ce.value?_e({field:{$dirty:c.value,$externalErrors:C.value,$rules:D.value}}):[]),ze=vue.computed(()=>_e({field:{$dirty:c.value,$externalErrors:C.value,$rules:D.value},silent:!0})),Je=vue.computed(()=>!(pe.value||Ee.value)),Ee=vue.computed(()=>I.value||!X.value?Object.entries(D.value).some(([te,Q])=>Q.$pending):!1),pe=vue.computed(()=>C.value?.length?!0:!X.value||X.value&&I.value?Object.entries(D.value).some(([te,Q])=>!Q.$valid):!1),Ye=vue.computed(()=>a),Ie=vue.computed(()=>ee(D.value)?!0:c.value&&!ee(e.value)&&!vt.value?C.value?.length?!1:X.value?Object.entries(D.value).every(([te,Q])=>Q.$valid):!pe.value:!1),gt=vue.computed(()=>Object.entries(D.value).some(([te,Q])=>Q._haveAsync));function $t(){m?.fields&&Object.entries(m.fields).forEach(([te,Q])=>{let St=vue.effectScope();Qe[te]=St.run(()=>{let Xe=vue.ref();return vue.watchEffect(()=>{Xe.value=Q({$dirty:c.value,$externalErrors:C.value,$value:e,$rules:D.value,$error:Ce.value,$pending:Ee.value,$invalid:pe.value,$valid:Ie.value,$errors:Le.value,$ready:Je.value,$silentErrors:ze.value,$anyDirty:_.value,$name:Ye.value});}),Xe});});}let Qe={};return $t(),vue.watch(Ie,te=>{te&&(I.value=!1);}),{$error:Ce,$pending:Ee,$invalid:pe,$valid:Ie,$debounce:W,$lazy:H,$errors:Le,$ready:Je,$silentErrors:ze,$rewardEarly:X,$autoDirty:De,$anyDirty:_,$name:Ye,haveAnyAsyncRule:gt,$shortcuts:Qe}}),x=vue.watch(S,b),i=vue.watch(e,()=>{f.$autoDirty.value&&(c.value||(c.value=!0)),t.value instanceof Function&&O(),w(),f.$rewardEarly.value;},{deep:h?!0:se?1:!0}),j=vue.watch(c,()=>{o.setDirtyEntry(n,c.value);}),l=vue.watch(f.$valid,_=>{f.$rewardEarly.value&&_&&(I.value=!1);}),G=vue.watch(f.haveAnyAsyncRule,A);}function q(){Object.entries(D.value).forEach(([_,W])=>{W.$validate();});}let D=vue.ref(),y=vue.ref();O();function v(){c.value=!1,C.value=[],Object.entries(D.value).forEach(([_,W])=>{W.$reset();}),f.$lazy.value||Object.entries(D.value).map(([_,W])=>W.$validate());}function R(){c.value||(c.value=!0,f.$rewardEarly.value,w());}let p=f.$debounce.value?ye($,f.$debounce.value??0):$;async function $(){try{if(I.value=!0,f.$autoDirty.value&&c.value&&!f.$pending.value)return !f.$error.value;{let _=Object.entries(D.value).map(([H,X])=>X.$validate());return (await Promise.allSettled(_)).every(H=>H.status==="fulfilled"?H.value:!1)}}catch{return !1}}function s(){N(),e.value=at(e,g),v();}function T(_=!0){return c.value?e.value:null}function P(){C.value=[];}f.$lazy.value||$();let{$anyDirty:k,$error:Y,$errors:oe,$invalid:ne,$name:U,$pending:M,$ready:F,$silentErrors:ie,$valid:xe,$shortcuts:he}=f;return vue.reactive({$dirty:c,$error:Y,$errors:oe,$valid:xe,$invalid:ne,$pending:M,$silentErrors:ie,$anyDirty:k,$ready:F,$name:U,$externalErrors:C,$value:e,$rules:D,...he,$reset:v,$touch:R,$validate:p,$unwatch:N,$watch:V,$resetAll:s,$extractDirtyFields:T,$clearExternalErrors:P})}function ft({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:u,rules:S,externalErrors:E,initialState:h,shortcuts:g,fieldName:m}){let d=S.$key?S.$key:Fe(),f=`${t}.${String(d)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?f=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:d,enumerable:!1,configurable:!1,writable:!1}}));let c=vue.toRef(()=>E.value?.[r]),I=Se({state:o,rulesDef:vue.toRef(()=>S),customMessages:u,path:f,storage:a,options:n,externalErrors:c,initialState:h?.[r],shortcuts:g,fieldName:m});if(I){let C=o.value?.$id;I.$id=C??String(d),a.addArrayStatus(e,I.$id,I);}return I}function Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:u,initialState:S,shortcuts:E,fieldName:h}){let g=vue.effectScope(),m,d=vue.effectScope(),f;if(!Array.isArray(e.value)&&!t.value.$each)return null;let c=vue.ref(),I=vue.ref(e.value),C,i=vue.ref({}),l=a.getCollectionsEntry(n);f=d.run(()=>{let R=vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(s=>typeof s!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(s=>me(s)):!1),p=vue.computed(()=>u.value?je(u.value)?u.value.$errors??[]:[]:[]),$=vue.computed(()=>u.value?je(u.value)?u.value.$each??[]:[]:[]);return {isPrimitiveArray:R,$externalErrorsField:p,$externalErrorsEach:$}}),x(),G();function x(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(c.value=Fe(),Object.defineProperties(e.value,{$id:{value:c.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(c.value=e.value.$id)),!f.isPrimitiveArray.value&&(I.value=i.value.$value,Array.isArray(e.value)?l.value=e.value.map((R,p)=>{let $=Ae(t.value.$each,vue.toRef(()=>R),p),s=ft({$id:c.value,path:n,rules:$??{},stateValue:vue.toRef(()=>R),index:p,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:S[p],shortcuts:E,fieldName:h});return s||null}).filter(R=>!!R):l.value=[],i.value=be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:f.$externalErrorsField,$isArray:!0,initialState:S,shortcuts:E,fieldName:h}));}function j(){if(Array.isArray(e.value)){let R=re(l.value);l.value=e.value.map((p,$)=>{let s=vue.toRef(()=>p);if(p.$id&&l.value.find(T=>T.$id===p.$id)){let T=a.getArrayStatus(c.value,p.$id);return T?(T.$value=s,T):null}else {let T=Ae(t.value.$each,s,$);if(T){let P=ft({$id:c.value,path:n,rules:T,stateValue:s,index:$,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:S[$],shortcuts:E,fieldName:h});return P||null}}}).filter(p=>!!p),R.filter(p=>!e.value.find($=>p.$id===$.$id)).forEach((p,$)=>{a.deleteArrayStatus(c.value,$.toString());});}else l.value=[];}function G(){C=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?x():j();},{deep:se?1:!0,flush:"pre"}),m=g.run(()=>{let R=vue.computed(()=>i.value.$dirty&&l.value.every(F=>F.$dirty)),p=vue.computed(()=>i.value.$anyDirty||l.value.some(F=>F.$dirty)),$=vue.computed(()=>i.value.$invalid||l.value.some(F=>F.$invalid)),s=vue.computed(()=>i.value.$valid&&l.value.every(F=>F.$valid)),T=vue.computed(()=>i.value.$error||l.value.some(F=>F.$error)),P=vue.computed(()=>!($.value||k.value)),k=vue.computed(()=>i.value.$pending||l.value.some(F=>F.$pending)),Y=vue.computed(()=>({$errors:i.value.$errors,$each:l.value.map(F=>F.$errors)})),oe=vue.computed(()=>({$errors:i.value.$silentErrors,$each:l.value.map(F=>F.$silentErrors)})),ne=vue.computed(()=>h);function U(){E?.collections&&Object.entries(E?.collections).forEach(([F,ie])=>{let xe=vue.effectScope();M[F]=xe.run(()=>{let he=vue.ref();return vue.watchEffect(()=>{he.value=ie({$dirty:R.value,$error:T.value,$pending:k.value,$invalid:$.value,$valid:s.value,$errors:Y.value,$ready:P.value,$silentErrors:oe.value,$anyDirty:p.value,$name:ne.value,$each:l.value,$field:i.value,$value:e});}),he});});}let M={};return U(),{$dirty:R,$anyDirty:p,$invalid:$,$valid:s,$error:T,$pending:k,$errors:Y,$silentErrors:oe,$ready:P,$name:ne,$shortcuts:M}}),f.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),C());}function w(){C&&C(),i.value&&i.value.$unwatch(),l.value&&l.value.forEach(R=>{"$dirty"in R&&R.$unwatch();}),g.stop(),g=vue.effectScope(),d.stop(),d=vue.effectScope(!0);}function b(){i.value.$touch(),l.value.forEach(R=>{R.$touch();});}function O(){i.value.$reset(),l.value.forEach(R=>{R.$reset();});}async function A(){try{return (await Promise.all([i.value.$validate(),...l.value.map(p=>p.$validate())])).every(p=>!!p)}catch{return !1}}function N(){i.value.$clearExternalErrors(),l.value.forEach(R=>{R.$clearExternalErrors();});}function V(R=!0){let p=l.value.map($=>{if(Ve($))return $.$extractDirtyFields(R)});return R&&(p=p.filter($=>z($)?!ee($):!!$)),p}function q(){console.log(S),w(),lt(e,S),O();}async function D(){return b(),await A()?e.value:!1}let{$shortcuts:y,...v}=m;return vue.reactive({$field:i,...v,...y,$each:l,$value:e,$validate:A,$unwatch:w,$watch:G,$touch:b,$reset:O,$resetAll:q,$extractDirtyFields:V,$parse:D,$clearExternalErrors:N})}function ke({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:u,externalErrors:S,validationGroups:E,initialState:h,shortcuts:g,fieldName:m}){let d,f,c=null;function i(y=!0){l.value=null,vue.triggerRef(l);let v=Object.fromEntries(Object.entries(e.value).map(([s,T])=>{if(T){let P=vue.toRef(t.value,s),k=vue.toRef(()=>T),Y=vue.toRef(()=>S.value?.[s]);return [s,Se({state:P,rulesDef:k,customMessages:r,path:n?`${n}.${s}`:s,storage:o,options:u,externalErrors:Y,initialState:h?.[s],shortcuts:g,fieldName:s})]}return []}).filter(s=>!!s.length&&s[1]!=null)),R=Object.fromEntries(Object.entries(vue.unref(S)??{}).filter(([s])=>!(s in e.value)).map(([s,T])=>{if(T){let P=vue.toRef(t.value,s),k=vue.toRef(()=>({})),Y=vue.toRef(()=>T);return [s,Se({state:P,rulesDef:k,customMessages:r,path:n?`${n}.${s}`:s,storage:o,options:u,externalErrors:Y,initialState:h?.[s],shortcuts:g,fieldName:s})]}return []})),p=Object.fromEntries(Object.entries(t.value).filter(([s])=>!(s in e.value)&&!(s in(R.value??{}))).map(([s,T])=>{let P=vue.toRef(t.value,s),k=vue.toRef(()=>({}));return [s,Se({state:P,rulesDef:k,customMessages:r,path:n?`${n}.${s}`:s,storage:o,options:u,externalErrors:vue.ref(),initialState:h?.[s],shortcuts:g,fieldName:s})]})),$=Object.fromEntries(Object.entries(E?.(v)??{}).map(([s,T])=>T.length?[s,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(P=>[P,Ke(vue.toRef(()=>T),P)])),...Object.fromEntries(["$errors","$silentErrors"].map(P=>[P,et(vue.toRef(()=>T),P)]))}]:[]));l.value={...v,...R,...p,...$},y&&w();}let l=o.getFieldsEntry(n);i();function x(){i(!1),Object.entries(l.value).forEach(([y,v])=>{v.$reset();}),w();}function j(){Object.entries(l.value).forEach(([y,v])=>{v.$touch();});}async function G(){try{return (await Promise.allSettled(Object.entries(l.value).map(([v,R])=>R.$validate()))).every(v=>v.status==="fulfilled"?v.value:!1)}catch{return !1}}function w(){a&&(c=vue.watch(a,()=>{b(),i();},{deep:se?1:!0,flush:"post"})),d=vue.effectScope(),f=d.run(()=>{let y=vue.computed(()=>!!Object.entries(l.value).length&&Object.entries(l.value).every(([U,M])=>M?.$dirty)),v=vue.computed(()=>Object.entries(l.value).some(([U,M])=>M?.$dirty)),R=vue.computed(()=>Object.entries(l.value).some(([U,M])=>M?.$invalid)),p=vue.computed(()=>Object.entries(l.value).every(([U,M])=>M?.$valid)),$=vue.computed(()=>y.value&&!T.value&&R.value),s=vue.computed(()=>!(R.value||T.value)),T=vue.computed(()=>Object.entries(l.value).some(([U,M])=>M?.$pending)),P=vue.computed(()=>Object.fromEntries(Object.entries(l.value).map(([U,M])=>[U,M?.$errors]))),k=vue.computed(()=>Object.fromEntries(Object.entries(l.value).map(([U,M])=>[U,M?.$silentErrors]))),Y=vue.computed(()=>m);function oe(){g?.nested&&Object.entries(g.nested).forEach(([U,M])=>{let F=vue.effectScope();ne[U]=F.run(()=>{let ie=vue.ref();return vue.watchEffect(()=>{ie.value=M({$dirty:y.value,$value:t,$error:$.value,$pending:T.value,$invalid:R.value,$valid:p.value,$ready:s.value,$anyDirty:v.value,$name:Y.value,$silentErrors:k.value,$errors:P.value,$fields:l.value});}),ie});});}let ne={};return oe(),{$dirty:y,$anyDirty:v,$invalid:R,$valid:p,$error:$,$pending:T,$errors:P,$silentErrors:k,$ready:s,$name:Y,$shortcuts:ne}});}function b(){l.value&&Object.entries(l.value).forEach(([y,v])=>{v.$unwatch();}),c?.(),d.stop(),d=vue.effectScope();}function O(){Object.entries(l.value).forEach(([y,v])=>{v.$clearExternalErrors();});}function A(){b(),de(t,h??{}),x();}function N(y=!0){let v=Object.entries(l.value).map(([R,p])=>[R,p.$extractDirtyFields(y)]);return y&&(v=v.filter(([R,p])=>z(p)?!ee(p):Array.isArray(p)?p.length:!!p)),Object.fromEntries(v)}async function V(){return j(),await G()?t.value:!1}let{$shortcuts:q,...D}=f;return vue.reactive({...D,...q,$fields:l,$value:t,$resetAll:A,$reset:x,$touch:j,$validate:G,$unwatch:b,$watch:w,$clearExternalErrors:O,$extractDirtyFields:N,$parse:V})}function Se({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:u,index:S,initialState:E,shortcuts:h,onUnwatch:g,fieldName:m}){return it(t,e)?Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:S,externalErrors:u,initialState:E,fieldName:m,shortcuts:h}):ot(e,t)&&nt(e)?ke({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:S,initialState:E,shortcuts:h,fieldName:m,externalErrors:u}):st(t)?be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:S,externalErrors:u,onUnwatch:g,shortcuts:h,initialState:E,fieldName:m}):null}function Ue({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o}){let u=Me(),S=vue.computed(()=>vue.unref(t.externalErrors));return vue.reactive(ke({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:u,options:t,externalErrors:S,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root"}))}function We(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function a(o,u,S){let E=vue.isRef(u)?u:vue.computed(typeof u=="function"?u:()=>u),h={...n,...S},g=vue.isRef(o)?o:vue.ref(o),m=re(vue.toRaw(g.value));return {r$:Ue({scopeRules:E,state:g,options:h,initialState:m,customRules:e,shortcuts:r})}}return a}var yt=We();function He(){function e(t,r){return r}return e}var qe=He();function mt({rules:e,modifiers:t,shortcuts:r}){let n=We(e,t,r),a=He();return {useRegle:n,inferRules:a}}exports.InternalRuleType=Pe;exports.createRule=Oe;exports.defineRegleConfig=mt;exports.inferRules=qe;exports.unwrapRuleParameters=L;exports.useRegle=yt;
|
|
1
|
+
'use strict';var vue=require('vue');var Ce=(r=>(r.Inline="__inline",r.Async="__async",r))(Ce||{});function Qe(e,t){return vue.computed(()=>e.value.some(r=>r[t]))}function Xe(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 Ze(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function Ke(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 Ie(e,...t){let{message:r,validator:n,active:a,type:o,...f}=e,p=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator($,...y){return e.validator($,...q(y.length?y:t))},message($,y){return typeof e.message=="function"?e.message($,{...y,$params:q(y.$params?.length?y.$params:t)}):e.message},active($,y){return typeof e.active=="function"?e.active($,{...y,$params:q(y.$params?.length?y.$params:t)}):e.active??!0},exec($){let y=e.validator($,...q(t)),d;return y instanceof Promise?y.then(v=>(d=v,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)):(d=y,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)}},...f,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:p,_params:Ze(t)}}function Pe(e){if(typeof e.validator=="function"){let r=Ie(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Ke(e.validator)>1){let a=function(...o){return Ie(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 et(e){return L(e.value)}function te(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>te(n)))),r=="Map"&&(t=new Map([...e].map(n=>[te(n[0]),te(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,ht(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=te(e[n]);}return t}function ht(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 we(e,t,r){return e instanceof Function?e(t,r??0):e}function tt(e,t){vue.isRef(e)?e.value=t:e=t;}function rt(e,t){vue.isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=vue.isRef(e)?e.value[n]:e[n];a={},fe(a,t[n]);});}function fe(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],f=vue.isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(o)&&o.forEach((p,T)=>{a[r][T]={},fe(a[r][T],o[T]);})):L(o)?fe(f,o):vue.isRef(a[r])?a[r].value=o:a[r]=o;});}function J(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 $e(e,t,r){let n,a=(...o)=>new Promise(f=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(f);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(f=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(f);},0);}),a}function Tt(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]),f=Number(n[a]);if(o>f)return 1;if(f>o)return -1;if(!isNaN(o)&&isNaN(f))return 1;if(isNaN(o)&&!isNaN(f))return -1}return 0}var Se=Tt(vue.version,"3.5.0")!==-1;function Et(){return Math.floor(Math.random()*Date.now()).toString()}function Oe(){return typeof window>"u"?Et():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Ae(){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 f(u){let l=t.value.get(u);if(l)return l;{let x=vue.ref({});return t.value.set(u,x),x}}function p(u){let l=r.value.get(u);if(l)return l;{let x=vue.ref([]);return r.value.set(u,x),x}}function T(u,l,x){o.value.set(`${u}-${l}`,x);}function S(u,l){return o.value.get(`${u}-${l}`)}function $(u,l){u&&l!=null&&o.value.delete(`${u}-${l}`);}function y(u,l){n.value.set(u,l);}function d(u){return n.value.get(u)??!1}function v(u,l){e.value.set(u,l);}function i(u,l){let x=e.value.get(u);return x?V(l,x)?{valid:!0}:{valid:!1}:void 0}function V(u,l){let x=Object.keys(l),A=Object.keys(u);return A.length!==x.length||!A.every(j=>x.includes(j))?!1:A.every(j=>{let b=u[j],P=l[j];return !P||!b||typeof b=="function"||typeof P=="function"||typeof b=="number"||typeof b=="boolean"?!1:b._params?b._params?.every((F,m)=>{if(typeof P=="number"||typeof P=="boolean")return !0;{let E=q(P._params),H=q(b._params);return E?.[m]===H?.[m]}}):!0})}function N(u){let l=a.value.get(u);if(l)return l;{let x=vue.ref(!1),A=vue.ref(!0),B=vue.ref({}),j=vue.ref(!1);return a.value.set(u,{$pending:x,$valid:A,$metadata:B,$validating:j}),{$pending:x,$valid:A,$metadata:B,$validating:j}}}return vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:v,setDirtyEntry:y,checkRuleDeclEntry:i,getDirtyState:d,trySetRuleStatusRef:N,getFieldsEntry:f,getCollectionsEntry:p,getArrayStatus:S,addArrayStatus:T,deleteArrayStatus:$,arrayStatusStorage:o}}function nt(e,t){return L(e.value)&&L(t.value)&&!Object.entries(t.value).some(r=>Re(r))}function at(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function lt(e){return !!e.value&&L(e.value)}function Re(e){return L(e)&&"_validator"in e}function pe(e){return typeof e.value!="function"}function Fe(e){return L(e)&&"$fields"in e}function Me({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.$dirty?e.$externalErrors??[]:[])}function ut({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:f,$debounce:p}){let T=vue.effectScope(),S,$,y=vue.ref(!1),{$pending:d,$valid:v,$metadata:i,$validating:V}=f.trySetRuleStatusRef(`${o}.${n}`);function N(){S=T.run(()=>{let b=vue.computed(()=>({$invalid:!v.value,$params:H.value,...i.value})),P=vue.computed(()=>pe(r)?typeof r.value.active=="function"?r.value.active(a.value,b.value):!!r.value.active:!0),F=vue.computed(()=>{let h="",s=t?t[n]?.message:void 0;return s&&(typeof s=="function"?h=s(a.value,b.value):h=s),pe(r)&&(s&&!r.value._patched||(typeof r.value.message=="function"?h=r.value.message(a.value,b.value):h=r.value.message)),J(h)&&(h="Error",console.warn(`No error message defined for ${o}.${n}`)),h}),m=vue.computed(()=>pe(r)&&r.value.type?r.value.type:n),E=vue.computed(()=>pe(r)?r.value.validator:r.value),H=vue.computed(()=>typeof r.value=="function"?[]:q(r.value._params??[])),C=vue.computed(()=>`${o}.${m.value}`);return {$active:P,$message:F,$type:m,$validator:E,$params:H,$path:C}}),$=vue.watch(S.$params,A,{deep:!0});}N();function u(){v.value=!0,e.value&&(d.value=!0);}async function l(){let b=S.$validator.value,P=b(a.value,...S.$params.value),F=!1,m=a.value;try{u();let E;if(P instanceof Promise?E=await P:E=P,a.value!==m)return !0;if(typeof E=="boolean")F=E;else {let{$valid:H,...C}=E;F=H,i.value=C;}}catch{F=!1;}finally{d.value=!1;}return F}let x=$e(l,p??200);async function A(){try{V.value=!0;let b=!1;if(Re(r.value)&&r.value._async)b=await x();else {let P=S.$validator.value,F=P(a.value,...S.$params.value);if(F 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(F!=null)if(typeof F=="boolean")b=F;else {let{$valid:m,...E}=F;b=m,i.value=E;}}return v.value=b,b}catch{return !1}finally{V.value=!1;}}function B(){v.value=!0,i.value={},d.value=!1,V.value=!1,N();}function j(){$(),T.stop(),T=vue.effectScope();}return vue.reactive({...S,$pending:d,$valid:v,$metadata:i,_haveAsync:y,$validating:V,$validate:A,$unwatch:j,$watch:N,$reset:B})}function be({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:f,externalErrors:p,onUnwatch:T,$isArray:S,initialState:$,shortcuts:y}){let d=vue.effectScope(),v,i=vue.ref(!1),V=vue.ref(!1),N,u,l,x,A=()=>{};function B(){let O=t.value,G=o.checkRuleDeclEntry(n,O);E.value=Object.fromEntries(Object.entries(O).filter(([W])=>W.startsWith("$"))),m.value=Object.fromEntries(Object.entries(t.value).filter(([W])=>!W.startsWith("$")).map(([W,X])=>{if(X){let Ee=vue.toRef(()=>X);return [W,ut({$dirty:i,customMessages:r,rule:Ee,ruleKey:W,state:e,path:n,storage:o,$debounce:E.value.$debounce})]}return []}).filter(W=>!!W.length)),P(),j(),G?.valid!=null&&(i.value=o.getDirtyState(n),i.value&&A()),o.addRuleDeclEntry(n,O);}function j(){A=v.$debounce.value?$e(F,v.$debounce.value??v.haveAnyAsyncRule?100:0):F;}function b(){m.value&&Object.entries(m.value).forEach(([O,G])=>{G.$unwatch();}),l(),i.value&&o.setDirtyEntry(n,i.value),N?.(),u?.(),d.stop(),d=vue.effectScope(),T?.(),x?.();}function P(){m.value&&Object.entries(m.value).forEach(([O,G])=>{G.$watch();}),v=d.run(()=>{let O=vue.computed(()=>i.value),G=vue.computed(()=>E.value.$debounce),W=vue.computed(()=>E.value.$lazy!=null?E.value.$lazy:vue.unref(f.lazy)),X=vue.computed(()=>E.value.$rewardEarly!=null?E.value.$rewardEarly:vue.unref(f.rewardEarly)),Ee=vue.computed(()=>E.value.$clearExternalErrorsOnChange!=null?E.value.$clearExternalErrorsOnChange:vue.unref(f.clearExternalErrorsOnChange)),pt=vue.computed(()=>E.value.$autoDirty!=null?E.value.$autoDirty:vue.unref(f.autoDirty)),Ue=vue.computed(()=>Object.entries(m.value).some(([ee,z])=>z.$validating)),De=vue.computed(()=>ce.value&&!ge.value&&i.value),We=vue.computed(()=>De.value?Me({field:{$dirty:i.value,$externalErrors:p?.value,$rules:m.value}}):[]),He=vue.computed(()=>Me({field:{$dirty:i.value,$externalErrors:p?.value,$rules:m.value},silent:!0})),qe=vue.computed(()=>!(ce.value||ge.value)),ge=vue.computed(()=>V.value||!X.value?Object.entries(m.value).some(([ee,z])=>z.$pending):!1),ce=vue.computed(()=>p?.value?.length?!0:J(m.value)?!1:!X.value||X.value&&V.value?Object.entries(m.value).some(([ee,z])=>!z.$valid):!1),Le=vue.computed(()=>a),xe=vue.computed(()=>J(m.value)?!1:i.value&&!J(e.value)&&!Ue.value?p?.value?.length?!1:X.value?Object.entries(m.value).every(([ee,z])=>z.$valid):!ce.value:!1),dt=vue.computed(()=>Object.entries(m.value).some(([ee,z])=>z._haveAsync));function vt(){y?.fields&&Object.entries(y.fields).forEach(([ee,z])=>{let yt=vue.effectScope();ze[ee]=yt.run(()=>{let Je=vue.ref();return vue.watchEffect(()=>{Je.value=z({$dirty:i.value,$externalErrors:p?.value??[],$value:e,$rules:m.value,$error:De.value,$pending:ge.value,$invalid:ce.value,$valid:xe.value,$errors:We.value,$ready:qe.value,$silentErrors:He.value,$anyDirty:O.value,$name:Le.value});}),Je});});}let ze={};return vt(),vue.watch(xe,ee=>{ee&&(V.value=!1);}),{$error:De,$pending:ge,$invalid:ce,$valid:xe,$debounce:G,$lazy:W,$errors:We,$ready:qe,$silentErrors:He,$rewardEarly:X,$autoDirty:pt,$clearExternalErrorsOnChange:Ee,$anyDirty:O,$name:Le,haveAnyAsyncRule:dt,$shortcuts:ze,$validating:Ue}}),N=vue.watch(e,()=>{v.$autoDirty.value&&(i.value||(i.value=!0)),t.value instanceof Function&&B(),A(),v.$rewardEarly.value!==!0&&v.$clearExternalErrorsOnChange.value&&g();},{deep:S?!0:Se?1:!0}),l=vue.watch(i,()=>{o.setDirtyEntry(n,i.value);}),u=vue.watch(v.$valid,O=>{v.$rewardEarly.value&&O&&(V.value=!1);}),x=vue.watch(v.haveAnyAsyncRule,j);}function F(){Object.values(m.value).forEach(O=>{O.$validate();});}let m=vue.ref(),E=vue.ref();B();function H(){i.value=!1,g(),Object.entries(m.value).forEach(([O,G])=>{G.$reset();}),v.$lazy.value||Object.entries(m.value).map(([O,G])=>G.$validate());}function C(O=!0){i.value||(i.value=!0,O&&A());}async function h(){try{if(V.value=!0,!i.value)i.value=!0;else if(v.$autoDirty.value&&i.value&&!v.$pending.value)return !v.$error.value;return (await Promise.allSettled(Object.entries(m.value).map(([W,X])=>X.$validate()))).every(W=>W.status==="fulfilled"?!!W.value:!1)?e.value:!1}catch{return !1}}function s(){b(),e.value=tt(e,$),H();}function R(O=!0){return i.value?e.value:null}function g(){p?.value?.length&&(p.value=[]);}!v.$lazy.value&&!i.value&&A();let{$anyDirty:c,$error:D,$errors:I,$invalid:k,$name:K,$pending:oe,$ready:ne,$silentErrors:U,$valid:M,$shortcuts:w,$validating:se}=v;return vue.reactive({$dirty:i,$error:D,$errors:I,$valid:M,$invalid:k,$pending:oe,$silentErrors:U,$anyDirty:c,$ready:ne,$name:K,$externalErrors:p,$value:e,$rules:m,...w,$reset:H,$touch:C,$validate:h,$unwatch:b,$watch:P,$resetAll:s,$extractDirtyFields:R,$clearExternalErrors:g})}function it({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:f,rules:p,externalErrors:T,initialState:S,shortcuts:$,fieldName:y}){let d=p.$key?p.$key:Oe(),v=`${t}.${String(d)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?v=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:d,enumerable:!1,configurable:!1,writable:!1}}));let i=me({state:o,rulesDef:vue.toRef(()=>p),customMessages:f,path:v,storage:a,options:n,externalErrors:vue.toRef(T?.value??[],r),initialState:S?.[r],shortcuts:$,fieldName:y});if(i){let V=o.value?.$id;i.$id=V??String(d),a.addArrayStatus(e,i.$id,i);}return i}function st({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:f,initialState:p,shortcuts:T,fieldName:S}){let $=vue.effectScope(),y,d=vue.effectScope(),v;if(!Array.isArray(e.value)&&!t.value.$each)return null;let i=vue.ref(),V=vue.ref(e.value),N,u=vue.ref({}),l=a.getCollectionsEntry(n);v=d.run(()=>({isPrimitiveArray:vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(R=>typeof R!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(R=>Re(R)):!1)})),x(),B();function x(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(i.value=Oe(),Object.defineProperties(e.value,{$id:{value:i.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(i.value=e.value.$id)),!v.isPrimitiveArray.value&&(V.value=u.value.$value,Array.isArray(e.value)?l.value=e.value.map((s,R)=>{let g=we(t.value.$each,vue.toRef(()=>s),R),c=it({$id:i.value,path:n,rules:g??{},stateValue:vue.toRef(()=>s),index:R,options:o,storage:a,externalErrors:vue.toRef(f?.value??{},"$each"),initialState:p[R],shortcuts:T,fieldName:S});return c||null}).filter(s=>!!s):l.value=[],u.value=be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:vue.toRef(f?.value??{},"$errors"),$isArray:!0,initialState:p,shortcuts:T,fieldName:S}));}function A(){if(Array.isArray(e.value)){let s=te(l.value);l.value=e.value.map((R,g)=>{let c=vue.toRef(()=>R);if(R.$id&&l.value.find(D=>D.$id===R.$id)){let D=a.getArrayStatus(i.value,R.$id);return D?(D.$value=c,D):null}else {let D=we(t.value.$each,c,g);if(D){let I=it({$id:i.value,path:n,rules:D,stateValue:c,index:g,options:o,storage:a,externalErrors:vue.toRef(f?.value??{},"$each"),initialState:p[g],shortcuts:T,fieldName:S});return I||null}}}).filter(R=>!!R),s.filter(R=>!e.value.find(g=>R.$id===g.$id)).forEach((R,g)=>{a.deleteArrayStatus(i.value,g.toString());});}else l.value=[];}function B(){N=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?x():A();},{deep:Se?1:!0,flush:"pre"}),y=$.run(()=>{let s=vue.computed(()=>u.value.$dirty&&l.value.every(w=>w.$dirty)),R=vue.computed(()=>u.value.$anyDirty||l.value.some(w=>w.$dirty)),g=vue.computed(()=>u.value.$invalid||l.value.some(w=>w.$invalid)),c=vue.computed(()=>(J(u.value.$rules)?!0:u.value.$valid)&&l.value.every(w=>w.$valid)),D=vue.computed(()=>u.value.$error||l.value.some(w=>w.$error)),I=vue.computed(()=>!(g.value||k.value)),k=vue.computed(()=>u.value.$pending||l.value.some(w=>w.$pending)),K=vue.computed(()=>({$errors:u.value.$errors,$each:l.value.map(w=>w.$errors)})),oe=vue.computed(()=>({$errors:u.value.$silentErrors,$each:l.value.map(w=>w.$silentErrors)})),ne=vue.computed(()=>S);function U(){T?.collections&&Object.entries(T?.collections).forEach(([w,se])=>{let O=vue.effectScope();M[w]=O.run(()=>{let G=vue.ref();return vue.watchEffect(()=>{G.value=se({$dirty:s.value,$error:D.value,$pending:k.value,$invalid:g.value,$valid:c.value,$errors:K.value,$ready:I.value,$silentErrors:oe.value,$anyDirty:R.value,$name:ne.value,$each:l.value,$field:u.value,$value:e});}),G});});}let M={};return U(),{$dirty:s,$anyDirty:R,$invalid:g,$valid:c,$error:D,$pending:k,$errors:K,$silentErrors:oe,$ready:I,$name:ne,$shortcuts:M}}),v.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`),N());}function j(){N&&N(),u.value&&u.value.$unwatch(),l.value&&l.value.forEach(s=>{"$dirty"in s&&s.$unwatch();}),$.stop(),$=vue.effectScope(),d.stop(),d=vue.effectScope(!0);}function b(s=!0){u.value.$touch(s),l.value.forEach(R=>{R.$touch(s);});}function P(){u.value.$reset(),l.value.forEach(s=>{s.$reset();});}async function F(){try{return (await Promise.all([u.value.$validate(),...l.value.map(g=>g.$validate())])).every(g=>g.value!==!1)?e.value:!1}catch{return !1}}function m(){u.value.$clearExternalErrors(),l.value.forEach(s=>{s.$clearExternalErrors();});}function E(s=!0){let R=l.value.map(g=>{if(Fe(g))return g.$extractDirtyFields(s)});return s&&(R=R.filter(g=>L(g)?!J(g):!!g)),R}function H(){j(),rt(e,p),P();}let{$shortcuts:C,...h}=y;return vue.reactive({$field:u,...h,...C,$each:l,$value:e,$validate:F,$unwatch:j,$watch:B,$touch:b,$reset:P,$resetAll:H,$extractDirtyFields:E,$clearExternalErrors:m})}function _e({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:f,externalErrors:p,validationGroups:T,initialState:S,shortcuts:$,fieldName:y}){let d,v,i=null;function u(C=!0){l.value=null,vue.triggerRef(l);let h=Object.fromEntries(Object.entries(e.value).map(([c,D])=>{if(D){let I=vue.toRef(t.value,c),k=vue.toRef(()=>D),K=vue.toRef(p?.value,c);return [c,me({state:I,rulesDef:k,customMessages:r,path:n?`${n}.${c}`:c,storage:o,options:f,externalErrors:K,initialState:S?.[c],shortcuts:$,fieldName:c})]}return []}).filter(c=>!!c.length&&c[1]!=null)),s=Object.fromEntries(Object.entries(vue.unref(p)??{}).filter(([c])=>!(c in e.value)).map(([c,D])=>{if(D){let I=vue.toRef(t.value,c),k=vue.toRef(()=>({}));return [c,me({state:I,rulesDef:k,customMessages:r,path:n?`${n}.${c}`:c,storage:o,options:f,externalErrors:vue.toRef(p?.value??{},c),initialState:S?.[c],shortcuts:$,fieldName:c})]}return []})),R=Object.fromEntries(Object.entries(t.value).filter(([c])=>!(c in e.value)&&!(c in(s.value??{}))).map(([c,D])=>{let I=vue.toRef(t.value,c),k=vue.toRef(()=>({}));return [c,me({state:I,rulesDef:k,customMessages:r,path:n?`${n}.${c}`:c,storage:o,options:f,externalErrors:vue.toRef(p?.value??{},c),initialState:S?.[c],shortcuts:$,fieldName:c})]})),g=Object.fromEntries(Object.entries(T?.(h)??{}).map(([c,D])=>D.length?[c,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(I=>[I,Qe(vue.toRef(()=>D),I)])),...Object.fromEntries(["$errors","$silentErrors"].map(I=>[I,Xe(vue.toRef(()=>D),I)]))}]:[]));l.value={...h,...s,...R,...g},C&&j();}let l=o.getFieldsEntry(n);u();function x(){u(!1),Object.entries(l.value).forEach(([C,h])=>{h.$reset();}),j();}function A(C=!0){Object.values(l.value).forEach(h=>{h.$touch(C);});}async function B(){try{return (await Promise.allSettled(Object.values(l.value).map(s=>s.$validate()))).every(s=>s.status==="fulfilled"?s.value!==!1:!1)?t.value:!1}catch{return !1}}function j(){a&&(i=vue.watch([a,p],()=>{b(),u();},{deep:!0,flush:"post"})),d=vue.effectScope(),v=d.run(()=>{let C=vue.computed(()=>!!Object.entries(l.value).length&&Object.entries(l.value).every(([U,M])=>M?.$dirty)),h=vue.computed(()=>Object.entries(l.value).some(([U,M])=>M?.$dirty)),s=vue.computed(()=>Object.entries(l.value).some(([U,M])=>M?.$invalid)),R=vue.computed(()=>Object.entries(l.value).every(([U,M])=>M?.$valid)),g=vue.computed(()=>C.value&&!D.value&&s.value),c=vue.computed(()=>!(s.value||D.value)),D=vue.computed(()=>Object.entries(l.value).some(([U,M])=>M?.$pending)),I=vue.computed(()=>Object.fromEntries(Object.entries(l.value).map(([U,M])=>[U,M?.$errors]))),k=vue.computed(()=>Object.fromEntries(Object.entries(l.value).map(([U,M])=>[U,M?.$silentErrors]))),K=vue.computed(()=>y);function oe(){$?.nested&&Object.entries($.nested).forEach(([U,M])=>{let w=vue.effectScope();ne[U]=w.run(()=>{let se=vue.ref();return vue.watchEffect(()=>{se.value=M({$dirty:C.value,$value:t,$error:g.value,$pending:D.value,$invalid:s.value,$valid:R.value,$ready:c.value,$anyDirty:h.value,$name:K.value,$silentErrors:k.value,$errors:I.value,$fields:l.value});}),se});});}let ne={};return oe(),{$dirty:C,$anyDirty:h,$invalid:s,$valid:R,$error:g,$pending:D,$errors:I,$silentErrors:k,$ready:c,$name:K,$shortcuts:ne}});}function b(){l.value&&Object.entries(l.value).forEach(([C,h])=>{h.$unwatch();}),i?.(),d.stop(),d=vue.effectScope();}function P(){Object.entries(l.value).forEach(([C,h])=>{h.$clearExternalErrors();});}function F(){b(),fe(t,S??{}),x();}function m(C=!0){let h=Object.entries(l.value).map(([s,R])=>[s,R.$extractDirtyFields(C)]);return C&&(h=h.filter(([s,R])=>L(R)?!J(R):Array.isArray(R)?R.length:!!R)),Object.fromEntries(h)}let{$shortcuts:E,...H}=v;return vue.reactive({...H,...E,$fields:l,$value:t,$resetAll:F,$reset:x,$touch:A,$validate:B,$unwatch:b,$watch:j,$clearExternalErrors:P,$extractDirtyFields:m})}function me({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:f,index:p,initialState:T,shortcuts:S,onUnwatch:$,fieldName:y}){return at(t,e)?st({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:p,externalErrors:f,initialState:T,fieldName:y,shortcuts:S}):nt(e,t)&&et(e)?_e({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:p,initialState:T,shortcuts:S,fieldName:y,externalErrors:f}):lt(t)?be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:p,externalErrors:f,onUnwatch:$,shortcuts:S,initialState:T,fieldName:y}):null}function Ne({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o}){let f=Ae();return vue.reactive(_e({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:f,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root"}))}function Ge(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange??!0};function a(o,f,p){let T=vue.isRef(f)?f:vue.computed(typeof f=="function"?f:()=>f),S={...n,...p},$=vue.isRef(o)?o:vue.ref(o),y=te(vue.toRaw($.value));return {r$:Ne({scopeRules:T,state:$,options:S,initialState:y,customRules:e,shortcuts:r})}}return a}var ft=Ge();function Be(){function e(t,r){return r}return e}var ke=Be();function Rt({rules:e,modifiers:t,shortcuts:r}){let n=Ge(e,t,r),a=Be();return {useRegle:n,inferRules:a}}exports.InternalRuleType=Ce;exports.createRule=Pe;exports.defineRegleConfig=Rt;exports.inferRules=ke;exports.unwrapRuleParameters=q;exports.useRegle=ft;
|
package/dist/index.d.cts
CHANGED
|
@@ -16,7 +16,6 @@ type DeepMaybeRef<T extends Record<string, any>> = {
|
|
|
16
16
|
type ExcludeByType<T, U> = {
|
|
17
17
|
[K in keyof T as T[K] extends U ? never : K]: T[K] extends U ? never : T[K];
|
|
18
18
|
};
|
|
19
|
-
type NonPresentKeys<TSource extends Record<string, any>, Target extends Record<string, any>> = Omit<Target, keyof TSource>;
|
|
20
19
|
type NoInferLegacy<A extends any> = [A][A extends any ? 0 : never];
|
|
21
20
|
|
|
22
21
|
type ArrayElement<T> = T extends Array<infer U> ? U : never;
|
|
@@ -72,23 +71,6 @@ Unfortunately, `Record<string, never>`, `Record<keyof any, never>` and `Record<n
|
|
|
72
71
|
*/
|
|
73
72
|
type EmptyObject = {[emptyObjectSymbol]?: never};
|
|
74
73
|
|
|
75
|
-
/**
|
|
76
|
-
Returns a `boolean` for whether the type is strictly equal to an empty plain object, the `{}` value.
|
|
77
|
-
|
|
78
|
-
@example
|
|
79
|
-
```
|
|
80
|
-
import type {IsEmptyObject} from 'type-fest';
|
|
81
|
-
|
|
82
|
-
type Pass = IsEmptyObject<{}>; //=> true
|
|
83
|
-
type Fail = IsEmptyObject<[]>; //=> false
|
|
84
|
-
type Fail = IsEmptyObject<null>; //=> false
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
@see EmptyObject
|
|
88
|
-
@category Object
|
|
89
|
-
*/
|
|
90
|
-
type IsEmptyObject<T> = T extends EmptyObject ? true : false;
|
|
91
|
-
|
|
92
74
|
/**
|
|
93
75
|
Matches any primitive, `void`, `Date`, or `RegExp` value.
|
|
94
76
|
*/
|
|
@@ -266,7 +248,7 @@ type UnionToIntersection<Union> = (
|
|
|
266
248
|
|
|
267
249
|
interface RegleBehaviourOptions {
|
|
268
250
|
/**
|
|
269
|
-
* Only display error when calling `r$.$
|
|
251
|
+
* Only display error when calling `r$.$validate()`
|
|
270
252
|
* @default false
|
|
271
253
|
*/
|
|
272
254
|
lazy?: boolean;
|
|
@@ -276,15 +258,20 @@ interface RegleBehaviourOptions {
|
|
|
276
258
|
*/
|
|
277
259
|
autoDirty?: boolean;
|
|
278
260
|
/**
|
|
279
|
-
* The fields will turn valid when they are, but not invalid unless calling `r$.$
|
|
261
|
+
* The fields will turn valid when they are, but not invalid unless calling `r$.$validate()`
|
|
280
262
|
* @default false
|
|
281
263
|
*
|
|
282
|
-
* @experimental report any bug
|
|
283
264
|
*/
|
|
284
265
|
rewardEarly?: boolean;
|
|
266
|
+
/**
|
|
267
|
+
* Define wether or not the external errors should be cleared when updating a field
|
|
268
|
+
* @default true
|
|
269
|
+
*
|
|
270
|
+
*/
|
|
271
|
+
clearExternalErrorsOnChange?: boolean;
|
|
285
272
|
}
|
|
286
|
-
interface LocalRegleBehaviourOptions<TState extends Record<string, any>, TRules extends
|
|
287
|
-
externalErrors?:
|
|
273
|
+
interface LocalRegleBehaviourOptions<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}> {
|
|
274
|
+
externalErrors?: Ref<RegleExternalErrorTree<Unwrap<TState>>>;
|
|
288
275
|
validationGroups?: (fields: RegleStatus<TState, TRules>['$fields']) => TValidationGroups;
|
|
289
276
|
}
|
|
290
277
|
type RegleValidationGroupEntry = RegleFieldStatus<any, any>;
|
|
@@ -305,43 +292,44 @@ type ShortcutCommonFn<T extends Record<string, any>> = {
|
|
|
305
292
|
};
|
|
306
293
|
type RegleShortcutDefinition<TCustomRules extends Record<string, any> = Partial<DefaultValidators>> = {
|
|
307
294
|
fields?: ShortcutCommonFn<RegleFieldStatus<any, Partial<TCustomRules> & Partial<DefaultValidators>>>;
|
|
308
|
-
nested?: ShortcutCommonFn<RegleStatus<Record<string, any>,
|
|
295
|
+
nested?: ShortcutCommonFn<RegleStatus<Record<string, any>, ReglePartialRuleTree<any, Partial<TCustomRules> & Partial<DefaultValidators>>>>;
|
|
309
296
|
collections?: ShortcutCommonFn<RegleCollectionStatus>;
|
|
310
297
|
};
|
|
311
298
|
type AddDollarToOptions<T extends Record<string, any>> = {
|
|
312
299
|
[K in keyof T as `$${string & K}`]: T[K];
|
|
313
300
|
};
|
|
314
301
|
|
|
315
|
-
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends
|
|
316
|
-
r$: RegleRoot<TState, TRules, TValidationGroups,
|
|
302
|
+
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> = EmptyObject, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}, TShortcuts extends RegleShortcutDefinition = {}> {
|
|
303
|
+
r$: RegleRoot<TState, TRules, TValidationGroups, TShortcuts>;
|
|
317
304
|
}
|
|
318
305
|
type isDeepExact<T, U> = {
|
|
319
306
|
[K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
|
|
320
307
|
}[keyof T] extends true ? true : false;
|
|
321
|
-
type CheckDeepExact<T, U> = [U] extends [never] ? false : T extends RegleCollectionRuleDecl ? U extends RegleCollectionRuleDecl ? isDeepExact<NonNullable<T['$each']>, UnionToIntersection<NonNullable<U['$each']>>> : T extends RegleRuleDecl ? true : T extends
|
|
308
|
+
type CheckDeepExact<T, U> = [U] extends [never] ? false : T extends RegleCollectionRuleDecl ? U extends RegleCollectionRuleDecl ? isDeepExact<NonNullable<T['$each']>, UnionToIntersection<NonNullable<U['$each']>>> : T extends RegleRuleDecl ? true : T extends ReglePartialRuleTree<any> ? isDeepExact<T, U> : false : T extends RegleRuleDecl ? true : T extends ReglePartialRuleTree<any> ? isDeepExact<T, U> : false;
|
|
322
309
|
type DeepReactiveState<T extends Record<string, any>> = {
|
|
323
310
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
324
311
|
};
|
|
325
|
-
type DeepSafeFormState<TState extends Record<string, any>, TRules extends
|
|
312
|
+
type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>> = [unknown] extends [TState] ? {} : {
|
|
326
313
|
[K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? K : never]?: [
|
|
327
314
|
SafeProperty<TState[K], TRules[K]>
|
|
328
315
|
] extends [never] ? TState[K] : SafeProperty<TState[K], TRules[K]>;
|
|
329
316
|
} & {
|
|
330
317
|
[K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? never : K]-?: SafeProperty<TState[K], TRules[K]>;
|
|
331
318
|
};
|
|
332
|
-
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends
|
|
319
|
+
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = [unknown] extends [TState] ? unknown : TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends ReglePartialRuleTree<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;
|
|
320
|
+
type SafeFieldProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? Maybe<TState> : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? Maybe<TState> : Maybe<TState> : Maybe<TState> : Maybe<TState>;
|
|
333
321
|
|
|
334
|
-
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends
|
|
322
|
+
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TValidationGroups, TShortcuts>;
|
|
335
323
|
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>, RegleShortcutDefinition<any>>;
|
|
336
324
|
|
|
337
325
|
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
338
|
-
<TState extends Record<string, any>, TRules extends
|
|
339
|
-
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules):
|
|
326
|
+
<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): TRules;
|
|
327
|
+
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): TRules;
|
|
340
328
|
}
|
|
341
329
|
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
342
330
|
|
|
343
|
-
type InferRegleRoot<T extends () =>
|
|
344
|
-
type InferRegleRules<T extends useRegleFn<any>> = T extends useRegleFn<infer U> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
|
|
331
|
+
type InferRegleRoot<T extends (...args: any[]) => Regle<any, any, any, any>> = T extends (...args: any[]) => infer U ? U extends Regle<any, any, any, any> ? Prettify<U['r$']> : never : never;
|
|
332
|
+
type InferRegleRules<T extends useRegleFn<any, any>> = T extends useRegleFn<infer U, any> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
|
|
345
333
|
type InferRegleShortcuts<T extends useRegleFn<any, any>> = T extends useRegleFn<any, infer U> ? U : {};
|
|
346
334
|
type RegleEnforceRequiredRules<TRules extends keyof DefaultValidators> = Omit<DefaultValidators, TRules> & {
|
|
347
335
|
[K in TRules as keyof TRules]-?: NonNullable<DefaultValidators[K]>;
|
|
@@ -534,25 +522,25 @@ type AllRulesDeclarations = CustomRulesDeclarationTree & {
|
|
|
534
522
|
/**
|
|
535
523
|
* @public
|
|
536
524
|
*/
|
|
537
|
-
type
|
|
525
|
+
type ReglePartialRuleTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
538
526
|
[TKey in keyof TForm]?: RegleFormPropertyType<TForm[TKey], TCustomRules>;
|
|
539
527
|
};
|
|
540
528
|
/**
|
|
541
529
|
* @public
|
|
542
530
|
*/
|
|
543
|
-
type
|
|
531
|
+
type RegleRuleTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
544
532
|
[TKey in keyof TForm]: RegleFormPropertyType<TForm[TKey], TCustomRules>;
|
|
545
533
|
};
|
|
546
534
|
/**
|
|
547
535
|
* @public
|
|
548
536
|
*/
|
|
549
|
-
type RegleComputedRules<TForm extends MaybeRef<Record<string, any>> | DeepReactiveState<Record<string, any>>, TCustomRules extends Partial<AllRulesDeclarations> | Regle<any, any> = Partial<AllRulesDeclarations>, TState = Unwrap<TForm>, TCustom = TCustomRules extends Regle<any, infer R> ? R extends
|
|
537
|
+
type RegleComputedRules<TForm extends MaybeRef<Record<string, any>> | DeepReactiveState<Record<string, any>>, TCustomRules extends Partial<AllRulesDeclarations> | Regle<any, any> = Partial<AllRulesDeclarations>, TState = Unwrap<TForm>, TCustom = TCustomRules extends Regle<any, infer R> ? R extends ReglePartialRuleTree<any, infer C> ? C : Partial<AllRulesDeclarations> : TCustomRules> = {
|
|
550
538
|
[TKey in keyof TState]?: RegleFormPropertyType<TState[TKey], TCustom extends Partial<AllRulesDeclarations> ? TCustom : {}>;
|
|
551
539
|
};
|
|
552
540
|
/**
|
|
553
541
|
* @public
|
|
554
542
|
*/
|
|
555
|
-
type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue>] extends [never] ? RegleRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Array<any> ? RegleCollectionRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Date ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends File ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends Ref<infer V> ? RegleFormPropertyType<V, TCustomRules> : NonNullable<TValue> extends Record<string, any> ?
|
|
543
|
+
type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue>] extends [never] ? RegleRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Array<any> ? RegleCollectionRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Date ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends File ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends Ref<infer V> ? RegleFormPropertyType<V, TCustomRules> : NonNullable<TValue> extends Record<string, any> ? ReglePartialRuleTree<NonNullable<TValue>, TCustomRules> : RegleRuleDecl<NonNullable<TValue>, TCustomRules>;
|
|
556
544
|
/**
|
|
557
545
|
* @public
|
|
558
546
|
* Rule tree for a form property
|
|
@@ -584,32 +572,22 @@ type InlineRuleDeclaration<TValue extends any = any, TParams extends any[] = any
|
|
|
584
572
|
* */
|
|
585
573
|
type FormRuleDeclaration<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition> = RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn, TAsync extends boolean = boolean> = InlineRuleDeclaration<TValue, TParams, TReturn> | RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
|
|
586
574
|
|
|
587
|
-
type RegleErrorTree<
|
|
588
|
-
readonly [K in keyof
|
|
589
|
-
} & {
|
|
590
|
-
readonly [K in keyof NonPresentKeys<TRules, NonNullable<TExternal>>]?: RegleExternalValidationErrorsReport<NonNullable<TExternal>[K]>;
|
|
575
|
+
type RegleErrorTree<TState = Record<string, any> | any[]> = {
|
|
576
|
+
readonly [K in keyof TState]: RegleValidationErrors<TState[K]>;
|
|
591
577
|
};
|
|
592
|
-
type
|
|
593
|
-
|
|
578
|
+
type RegleExternalErrorTree<TState = Record<string, any> | any[]> = PartialDeep<RegleErrorTree<TState>, {
|
|
579
|
+
recurseIntoArrays: true;
|
|
580
|
+
}>;
|
|
581
|
+
type RegleValidationErrors<TState extends Record<string, any> | any[] | unknown = never> = NonNullable<TState> extends Array<infer U extends Record<string, any>> ? RegleCollectionErrors<U> : NonNullable<TState> extends Date | File ? string[] : NonNullable<TState> extends Record<string, any> ? RegleErrorTree<TState> : string[];
|
|
582
|
+
type RegleCollectionErrors<TState extends Record<string, any>> = {
|
|
594
583
|
readonly $errors: string[];
|
|
595
|
-
readonly $each: RegleValidationErrors<
|
|
584
|
+
readonly $each: RegleValidationErrors<TState>[];
|
|
596
585
|
};
|
|
597
|
-
type RegleExternalErrorTree<TState extends Record<string, any> | undefined = Record<string, any>> = {
|
|
598
|
-
[K in keyof TState]?: RegleExternalValidationErrors<TState[K]>;
|
|
599
|
-
};
|
|
600
|
-
type RegleExternalValidationErrors<TValue extends any> = [NonNullable<TValue>] extends [
|
|
601
|
-
never
|
|
602
|
-
] ? string[] : NonNullable<TValue> extends Array<infer U extends Record<string, any> | undefined> ? RegleExternalCollectionErrors<U> : NonNullable<TValue> extends Date ? string[] : NonNullable<TValue> extends File ? string[] : TValue extends Record<string, any> ? RegleExternalErrorTree<TValue> : string[];
|
|
603
|
-
type RegleExternalCollectionErrors<TValue extends Record<string, any> | undefined = Record<string, any>> = {
|
|
604
|
-
$errors?: string[];
|
|
605
|
-
$each?: RegleExternalErrorTree<TValue>[];
|
|
606
|
-
};
|
|
607
|
-
type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalValidationErrors<any> | undefined = {}> = NonNullable<TExternalError> extends RegleExternalCollectionErrors ? TExternalError : NonNullable<TExternalError> extends string[] ? string[] : NonNullable<TExternalError> extends RegleExternalErrorTree<any> ? RegleExternalErrorTree<TExternalError> : string[];
|
|
608
586
|
|
|
609
587
|
/**
|
|
610
588
|
* @public
|
|
611
589
|
*/
|
|
612
|
-
type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules extends
|
|
590
|
+
type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialRuleTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TShortcuts extends RegleShortcutDefinition = {}> = RegleStatus<TState, TRules, TShortcuts> & ([TValidationGroups] extends [never] ? {} : {
|
|
613
591
|
$groups: {
|
|
614
592
|
readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
|
|
615
593
|
};
|
|
@@ -617,23 +595,23 @@ type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules
|
|
|
617
595
|
/**
|
|
618
596
|
* @public
|
|
619
597
|
*/
|
|
620
|
-
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends
|
|
598
|
+
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialRuleTree<TState> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = {}> = RegleCommonStatus<TState> & {
|
|
621
599
|
readonly $fields: {
|
|
622
|
-
readonly [TKey in keyof
|
|
623
|
-
} &
|
|
624
|
-
readonly [TKey in keyof
|
|
625
|
-
}
|
|
626
|
-
readonly $errors: RegleErrorTree<
|
|
627
|
-
readonly $silentErrors: RegleErrorTree<
|
|
600
|
+
readonly [TKey in keyof TState]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey, TShortcuts>;
|
|
601
|
+
} & {
|
|
602
|
+
readonly [TKey in keyof TState as TRules[TKey] extends NonNullable<TRules[TKey]> ? TKey : never]-?: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey, TShortcuts>;
|
|
603
|
+
};
|
|
604
|
+
readonly $errors: RegleErrorTree<TState>;
|
|
605
|
+
readonly $silentErrors: RegleErrorTree<TState>;
|
|
628
606
|
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
629
|
-
$
|
|
607
|
+
$validate: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
|
|
630
608
|
} & ([TShortcuts['nested']] extends [never] ? {} : {
|
|
631
609
|
[K in keyof TShortcuts['nested']]: ReturnType<NonNullable<TShortcuts['nested']>[K]>;
|
|
632
610
|
});
|
|
633
611
|
/**
|
|
634
612
|
* @public
|
|
635
613
|
*/
|
|
636
|
-
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl |
|
|
614
|
+
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialRuleTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string, TShortcuts extends RegleShortcutDefinition = {}> = NonNullable<TState[TKey]> extends Array<Record<string, any> | any> ? TRule extends RegleCollectionRuleDefinition<any, any> ? ExtractFromGetter<TRule['$each']> extends ReglePartialRuleTree<any> ? RegleCollectionStatus<TState[TKey], ExtractFromGetter<TRule['$each']>, TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : RegleCollectionStatus<TState[TKey], {}, TRule, TShortcuts> : TRule extends ReglePartialRuleTree<any> ? NonNullable<TState[TKey]> extends Array<any> ? RegleCommonStatus<TState[TKey]> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? RegleStatus<TState[TKey], TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? RegleStatus<TState[TKey], ReglePartialRuleTree<TState[TKey]>, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts>;
|
|
637
615
|
/**
|
|
638
616
|
* @public
|
|
639
617
|
*/
|
|
@@ -643,6 +621,7 @@ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormProperty
|
|
|
643
621
|
readonly $silentErrors: string[];
|
|
644
622
|
readonly $externalErrors: string[];
|
|
645
623
|
$extractDirtyFields: (filterNullishValues?: boolean) => Maybe<TState>;
|
|
624
|
+
$validate: () => Promise<false | SafeFieldProperty<TState, TRules>>;
|
|
646
625
|
readonly $rules: {
|
|
647
626
|
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>;
|
|
648
627
|
};
|
|
@@ -663,10 +642,9 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
663
642
|
readonly $name: string;
|
|
664
643
|
$id?: string;
|
|
665
644
|
$value: UnwrapNestedRefs<TValue>;
|
|
666
|
-
$touch(): void;
|
|
645
|
+
$touch(runCommit?: boolean): void;
|
|
667
646
|
$reset(): void;
|
|
668
647
|
$resetAll: () => void;
|
|
669
|
-
$validate(): Promise<boolean>;
|
|
670
648
|
$unwatch(): void;
|
|
671
649
|
$watch(): void;
|
|
672
650
|
$clearExternalErrors(): void;
|
|
@@ -693,14 +671,14 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
693
671
|
/**
|
|
694
672
|
* @public
|
|
695
673
|
*/
|
|
696
|
-
type RegleCollectionStatus<TState extends any[] = any[], TRules extends
|
|
674
|
+
type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePartialRuleTree<ArrayElement<TState>> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never, TShortcuts extends RegleShortcutDefinition = {}> = Omit<RegleFieldStatus<TState, TRules, TShortcuts>, '$errors' | '$silentErrors' | '$extractDirtyFields' | '$externalErrors' | '$rules' | '$value' | '$validate'> & {
|
|
697
675
|
$value: Maybe<TState>;
|
|
698
|
-
readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number,
|
|
676
|
+
readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number, TShortcuts>>;
|
|
699
677
|
readonly $field: RegleFieldStatus<TState, TFieldRule, TShortcuts>;
|
|
700
|
-
readonly $errors:
|
|
701
|
-
readonly $silentErrors:
|
|
678
|
+
readonly $errors: RegleCollectionErrors<TState>;
|
|
679
|
+
readonly $silentErrors: RegleCollectionErrors<TState>;
|
|
702
680
|
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
703
|
-
$
|
|
681
|
+
$validate: () => Promise<false | DeepSafeFormState<ArrayElement<TState>, TRules>>[];
|
|
704
682
|
} & ([TShortcuts['collections']] extends [never] ? {} : {
|
|
705
683
|
[K in keyof TShortcuts['collections']]: ReturnType<NonNullable<TShortcuts['collections']>[K]>;
|
|
706
684
|
});
|
|
@@ -753,4 +731,4 @@ declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarat
|
|
|
753
731
|
inferRules: inferRulesFn<TCustomRules>;
|
|
754
732
|
};
|
|
755
733
|
|
|
756
|
-
export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type
|
|
734
|
+
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 RegleExternalErrorTree, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialRuleTree, 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 RegleRuleTree as RegleValidationTree, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle };
|
package/dist/index.d.ts
CHANGED
|
@@ -16,7 +16,6 @@ type DeepMaybeRef<T extends Record<string, any>> = {
|
|
|
16
16
|
type ExcludeByType<T, U> = {
|
|
17
17
|
[K in keyof T as T[K] extends U ? never : K]: T[K] extends U ? never : T[K];
|
|
18
18
|
};
|
|
19
|
-
type NonPresentKeys<TSource extends Record<string, any>, Target extends Record<string, any>> = Omit<Target, keyof TSource>;
|
|
20
19
|
type NoInferLegacy<A extends any> = [A][A extends any ? 0 : never];
|
|
21
20
|
|
|
22
21
|
type ArrayElement<T> = T extends Array<infer U> ? U : never;
|
|
@@ -72,23 +71,6 @@ Unfortunately, `Record<string, never>`, `Record<keyof any, never>` and `Record<n
|
|
|
72
71
|
*/
|
|
73
72
|
type EmptyObject = {[emptyObjectSymbol]?: never};
|
|
74
73
|
|
|
75
|
-
/**
|
|
76
|
-
Returns a `boolean` for whether the type is strictly equal to an empty plain object, the `{}` value.
|
|
77
|
-
|
|
78
|
-
@example
|
|
79
|
-
```
|
|
80
|
-
import type {IsEmptyObject} from 'type-fest';
|
|
81
|
-
|
|
82
|
-
type Pass = IsEmptyObject<{}>; //=> true
|
|
83
|
-
type Fail = IsEmptyObject<[]>; //=> false
|
|
84
|
-
type Fail = IsEmptyObject<null>; //=> false
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
@see EmptyObject
|
|
88
|
-
@category Object
|
|
89
|
-
*/
|
|
90
|
-
type IsEmptyObject<T> = T extends EmptyObject ? true : false;
|
|
91
|
-
|
|
92
74
|
/**
|
|
93
75
|
Matches any primitive, `void`, `Date`, or `RegExp` value.
|
|
94
76
|
*/
|
|
@@ -266,7 +248,7 @@ type UnionToIntersection<Union> = (
|
|
|
266
248
|
|
|
267
249
|
interface RegleBehaviourOptions {
|
|
268
250
|
/**
|
|
269
|
-
* Only display error when calling `r$.$
|
|
251
|
+
* Only display error when calling `r$.$validate()`
|
|
270
252
|
* @default false
|
|
271
253
|
*/
|
|
272
254
|
lazy?: boolean;
|
|
@@ -276,15 +258,20 @@ interface RegleBehaviourOptions {
|
|
|
276
258
|
*/
|
|
277
259
|
autoDirty?: boolean;
|
|
278
260
|
/**
|
|
279
|
-
* The fields will turn valid when they are, but not invalid unless calling `r$.$
|
|
261
|
+
* The fields will turn valid when they are, but not invalid unless calling `r$.$validate()`
|
|
280
262
|
* @default false
|
|
281
263
|
*
|
|
282
|
-
* @experimental report any bug
|
|
283
264
|
*/
|
|
284
265
|
rewardEarly?: boolean;
|
|
266
|
+
/**
|
|
267
|
+
* Define wether or not the external errors should be cleared when updating a field
|
|
268
|
+
* @default true
|
|
269
|
+
*
|
|
270
|
+
*/
|
|
271
|
+
clearExternalErrorsOnChange?: boolean;
|
|
285
272
|
}
|
|
286
|
-
interface LocalRegleBehaviourOptions<TState extends Record<string, any>, TRules extends
|
|
287
|
-
externalErrors?:
|
|
273
|
+
interface LocalRegleBehaviourOptions<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}> {
|
|
274
|
+
externalErrors?: Ref<RegleExternalErrorTree<Unwrap<TState>>>;
|
|
288
275
|
validationGroups?: (fields: RegleStatus<TState, TRules>['$fields']) => TValidationGroups;
|
|
289
276
|
}
|
|
290
277
|
type RegleValidationGroupEntry = RegleFieldStatus<any, any>;
|
|
@@ -305,43 +292,44 @@ type ShortcutCommonFn<T extends Record<string, any>> = {
|
|
|
305
292
|
};
|
|
306
293
|
type RegleShortcutDefinition<TCustomRules extends Record<string, any> = Partial<DefaultValidators>> = {
|
|
307
294
|
fields?: ShortcutCommonFn<RegleFieldStatus<any, Partial<TCustomRules> & Partial<DefaultValidators>>>;
|
|
308
|
-
nested?: ShortcutCommonFn<RegleStatus<Record<string, any>,
|
|
295
|
+
nested?: ShortcutCommonFn<RegleStatus<Record<string, any>, ReglePartialRuleTree<any, Partial<TCustomRules> & Partial<DefaultValidators>>>>;
|
|
309
296
|
collections?: ShortcutCommonFn<RegleCollectionStatus>;
|
|
310
297
|
};
|
|
311
298
|
type AddDollarToOptions<T extends Record<string, any>> = {
|
|
312
299
|
[K in keyof T as `$${string & K}`]: T[K];
|
|
313
300
|
};
|
|
314
301
|
|
|
315
|
-
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends
|
|
316
|
-
r$: RegleRoot<TState, TRules, TValidationGroups,
|
|
302
|
+
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> = EmptyObject, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}, TShortcuts extends RegleShortcutDefinition = {}> {
|
|
303
|
+
r$: RegleRoot<TState, TRules, TValidationGroups, TShortcuts>;
|
|
317
304
|
}
|
|
318
305
|
type isDeepExact<T, U> = {
|
|
319
306
|
[K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
|
|
320
307
|
}[keyof T] extends true ? true : false;
|
|
321
|
-
type CheckDeepExact<T, U> = [U] extends [never] ? false : T extends RegleCollectionRuleDecl ? U extends RegleCollectionRuleDecl ? isDeepExact<NonNullable<T['$each']>, UnionToIntersection<NonNullable<U['$each']>>> : T extends RegleRuleDecl ? true : T extends
|
|
308
|
+
type CheckDeepExact<T, U> = [U] extends [never] ? false : T extends RegleCollectionRuleDecl ? U extends RegleCollectionRuleDecl ? isDeepExact<NonNullable<T['$each']>, UnionToIntersection<NonNullable<U['$each']>>> : T extends RegleRuleDecl ? true : T extends ReglePartialRuleTree<any> ? isDeepExact<T, U> : false : T extends RegleRuleDecl ? true : T extends ReglePartialRuleTree<any> ? isDeepExact<T, U> : false;
|
|
322
309
|
type DeepReactiveState<T extends Record<string, any>> = {
|
|
323
310
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
324
311
|
};
|
|
325
|
-
type DeepSafeFormState<TState extends Record<string, any>, TRules extends
|
|
312
|
+
type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>> = [unknown] extends [TState] ? {} : {
|
|
326
313
|
[K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? K : never]?: [
|
|
327
314
|
SafeProperty<TState[K], TRules[K]>
|
|
328
315
|
] extends [never] ? TState[K] : SafeProperty<TState[K], TRules[K]>;
|
|
329
316
|
} & {
|
|
330
317
|
[K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? never : K]-?: SafeProperty<TState[K], TRules[K]>;
|
|
331
318
|
};
|
|
332
|
-
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends
|
|
319
|
+
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = [unknown] extends [TState] ? unknown : TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends ReglePartialRuleTree<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;
|
|
320
|
+
type SafeFieldProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? Maybe<TState> : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? Maybe<TState> : Maybe<TState> : Maybe<TState> : Maybe<TState>;
|
|
333
321
|
|
|
334
|
-
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends
|
|
322
|
+
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TValidationGroups, TShortcuts>;
|
|
335
323
|
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>, RegleShortcutDefinition<any>>;
|
|
336
324
|
|
|
337
325
|
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
338
|
-
<TState extends Record<string, any>, TRules extends
|
|
339
|
-
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules):
|
|
326
|
+
<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): TRules;
|
|
327
|
+
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): TRules;
|
|
340
328
|
}
|
|
341
329
|
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
342
330
|
|
|
343
|
-
type InferRegleRoot<T extends () =>
|
|
344
|
-
type InferRegleRules<T extends useRegleFn<any>> = T extends useRegleFn<infer U> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
|
|
331
|
+
type InferRegleRoot<T extends (...args: any[]) => Regle<any, any, any, any>> = T extends (...args: any[]) => infer U ? U extends Regle<any, any, any, any> ? Prettify<U['r$']> : never : never;
|
|
332
|
+
type InferRegleRules<T extends useRegleFn<any, any>> = T extends useRegleFn<infer U, any> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
|
|
345
333
|
type InferRegleShortcuts<T extends useRegleFn<any, any>> = T extends useRegleFn<any, infer U> ? U : {};
|
|
346
334
|
type RegleEnforceRequiredRules<TRules extends keyof DefaultValidators> = Omit<DefaultValidators, TRules> & {
|
|
347
335
|
[K in TRules as keyof TRules]-?: NonNullable<DefaultValidators[K]>;
|
|
@@ -534,25 +522,25 @@ type AllRulesDeclarations = CustomRulesDeclarationTree & {
|
|
|
534
522
|
/**
|
|
535
523
|
* @public
|
|
536
524
|
*/
|
|
537
|
-
type
|
|
525
|
+
type ReglePartialRuleTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
538
526
|
[TKey in keyof TForm]?: RegleFormPropertyType<TForm[TKey], TCustomRules>;
|
|
539
527
|
};
|
|
540
528
|
/**
|
|
541
529
|
* @public
|
|
542
530
|
*/
|
|
543
|
-
type
|
|
531
|
+
type RegleRuleTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
544
532
|
[TKey in keyof TForm]: RegleFormPropertyType<TForm[TKey], TCustomRules>;
|
|
545
533
|
};
|
|
546
534
|
/**
|
|
547
535
|
* @public
|
|
548
536
|
*/
|
|
549
|
-
type RegleComputedRules<TForm extends MaybeRef<Record<string, any>> | DeepReactiveState<Record<string, any>>, TCustomRules extends Partial<AllRulesDeclarations> | Regle<any, any> = Partial<AllRulesDeclarations>, TState = Unwrap<TForm>, TCustom = TCustomRules extends Regle<any, infer R> ? R extends
|
|
537
|
+
type RegleComputedRules<TForm extends MaybeRef<Record<string, any>> | DeepReactiveState<Record<string, any>>, TCustomRules extends Partial<AllRulesDeclarations> | Regle<any, any> = Partial<AllRulesDeclarations>, TState = Unwrap<TForm>, TCustom = TCustomRules extends Regle<any, infer R> ? R extends ReglePartialRuleTree<any, infer C> ? C : Partial<AllRulesDeclarations> : TCustomRules> = {
|
|
550
538
|
[TKey in keyof TState]?: RegleFormPropertyType<TState[TKey], TCustom extends Partial<AllRulesDeclarations> ? TCustom : {}>;
|
|
551
539
|
};
|
|
552
540
|
/**
|
|
553
541
|
* @public
|
|
554
542
|
*/
|
|
555
|
-
type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue>] extends [never] ? RegleRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Array<any> ? RegleCollectionRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Date ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends File ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends Ref<infer V> ? RegleFormPropertyType<V, TCustomRules> : NonNullable<TValue> extends Record<string, any> ?
|
|
543
|
+
type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue>] extends [never] ? RegleRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Array<any> ? RegleCollectionRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Date ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends File ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends Ref<infer V> ? RegleFormPropertyType<V, TCustomRules> : NonNullable<TValue> extends Record<string, any> ? ReglePartialRuleTree<NonNullable<TValue>, TCustomRules> : RegleRuleDecl<NonNullable<TValue>, TCustomRules>;
|
|
556
544
|
/**
|
|
557
545
|
* @public
|
|
558
546
|
* Rule tree for a form property
|
|
@@ -584,32 +572,22 @@ type InlineRuleDeclaration<TValue extends any = any, TParams extends any[] = any
|
|
|
584
572
|
* */
|
|
585
573
|
type FormRuleDeclaration<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition> = RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn, TAsync extends boolean = boolean> = InlineRuleDeclaration<TValue, TParams, TReturn> | RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
|
|
586
574
|
|
|
587
|
-
type RegleErrorTree<
|
|
588
|
-
readonly [K in keyof
|
|
589
|
-
} & {
|
|
590
|
-
readonly [K in keyof NonPresentKeys<TRules, NonNullable<TExternal>>]?: RegleExternalValidationErrorsReport<NonNullable<TExternal>[K]>;
|
|
575
|
+
type RegleErrorTree<TState = Record<string, any> | any[]> = {
|
|
576
|
+
readonly [K in keyof TState]: RegleValidationErrors<TState[K]>;
|
|
591
577
|
};
|
|
592
|
-
type
|
|
593
|
-
|
|
578
|
+
type RegleExternalErrorTree<TState = Record<string, any> | any[]> = PartialDeep<RegleErrorTree<TState>, {
|
|
579
|
+
recurseIntoArrays: true;
|
|
580
|
+
}>;
|
|
581
|
+
type RegleValidationErrors<TState extends Record<string, any> | any[] | unknown = never> = NonNullable<TState> extends Array<infer U extends Record<string, any>> ? RegleCollectionErrors<U> : NonNullable<TState> extends Date | File ? string[] : NonNullable<TState> extends Record<string, any> ? RegleErrorTree<TState> : string[];
|
|
582
|
+
type RegleCollectionErrors<TState extends Record<string, any>> = {
|
|
594
583
|
readonly $errors: string[];
|
|
595
|
-
readonly $each: RegleValidationErrors<
|
|
584
|
+
readonly $each: RegleValidationErrors<TState>[];
|
|
596
585
|
};
|
|
597
|
-
type RegleExternalErrorTree<TState extends Record<string, any> | undefined = Record<string, any>> = {
|
|
598
|
-
[K in keyof TState]?: RegleExternalValidationErrors<TState[K]>;
|
|
599
|
-
};
|
|
600
|
-
type RegleExternalValidationErrors<TValue extends any> = [NonNullable<TValue>] extends [
|
|
601
|
-
never
|
|
602
|
-
] ? string[] : NonNullable<TValue> extends Array<infer U extends Record<string, any> | undefined> ? RegleExternalCollectionErrors<U> : NonNullable<TValue> extends Date ? string[] : NonNullable<TValue> extends File ? string[] : TValue extends Record<string, any> ? RegleExternalErrorTree<TValue> : string[];
|
|
603
|
-
type RegleExternalCollectionErrors<TValue extends Record<string, any> | undefined = Record<string, any>> = {
|
|
604
|
-
$errors?: string[];
|
|
605
|
-
$each?: RegleExternalErrorTree<TValue>[];
|
|
606
|
-
};
|
|
607
|
-
type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalValidationErrors<any> | undefined = {}> = NonNullable<TExternalError> extends RegleExternalCollectionErrors ? TExternalError : NonNullable<TExternalError> extends string[] ? string[] : NonNullable<TExternalError> extends RegleExternalErrorTree<any> ? RegleExternalErrorTree<TExternalError> : string[];
|
|
608
586
|
|
|
609
587
|
/**
|
|
610
588
|
* @public
|
|
611
589
|
*/
|
|
612
|
-
type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules extends
|
|
590
|
+
type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialRuleTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TShortcuts extends RegleShortcutDefinition = {}> = RegleStatus<TState, TRules, TShortcuts> & ([TValidationGroups] extends [never] ? {} : {
|
|
613
591
|
$groups: {
|
|
614
592
|
readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
|
|
615
593
|
};
|
|
@@ -617,23 +595,23 @@ type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules
|
|
|
617
595
|
/**
|
|
618
596
|
* @public
|
|
619
597
|
*/
|
|
620
|
-
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends
|
|
598
|
+
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialRuleTree<TState> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = {}> = RegleCommonStatus<TState> & {
|
|
621
599
|
readonly $fields: {
|
|
622
|
-
readonly [TKey in keyof
|
|
623
|
-
} &
|
|
624
|
-
readonly [TKey in keyof
|
|
625
|
-
}
|
|
626
|
-
readonly $errors: RegleErrorTree<
|
|
627
|
-
readonly $silentErrors: RegleErrorTree<
|
|
600
|
+
readonly [TKey in keyof TState]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey, TShortcuts>;
|
|
601
|
+
} & {
|
|
602
|
+
readonly [TKey in keyof TState as TRules[TKey] extends NonNullable<TRules[TKey]> ? TKey : never]-?: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey, TShortcuts>;
|
|
603
|
+
};
|
|
604
|
+
readonly $errors: RegleErrorTree<TState>;
|
|
605
|
+
readonly $silentErrors: RegleErrorTree<TState>;
|
|
628
606
|
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
629
|
-
$
|
|
607
|
+
$validate: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
|
|
630
608
|
} & ([TShortcuts['nested']] extends [never] ? {} : {
|
|
631
609
|
[K in keyof TShortcuts['nested']]: ReturnType<NonNullable<TShortcuts['nested']>[K]>;
|
|
632
610
|
});
|
|
633
611
|
/**
|
|
634
612
|
* @public
|
|
635
613
|
*/
|
|
636
|
-
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl |
|
|
614
|
+
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialRuleTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string, TShortcuts extends RegleShortcutDefinition = {}> = NonNullable<TState[TKey]> extends Array<Record<string, any> | any> ? TRule extends RegleCollectionRuleDefinition<any, any> ? ExtractFromGetter<TRule['$each']> extends ReglePartialRuleTree<any> ? RegleCollectionStatus<TState[TKey], ExtractFromGetter<TRule['$each']>, TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : RegleCollectionStatus<TState[TKey], {}, TRule, TShortcuts> : TRule extends ReglePartialRuleTree<any> ? NonNullable<TState[TKey]> extends Array<any> ? RegleCommonStatus<TState[TKey]> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? RegleStatus<TState[TKey], TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? RegleStatus<TState[TKey], ReglePartialRuleTree<TState[TKey]>, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts>;
|
|
637
615
|
/**
|
|
638
616
|
* @public
|
|
639
617
|
*/
|
|
@@ -643,6 +621,7 @@ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormProperty
|
|
|
643
621
|
readonly $silentErrors: string[];
|
|
644
622
|
readonly $externalErrors: string[];
|
|
645
623
|
$extractDirtyFields: (filterNullishValues?: boolean) => Maybe<TState>;
|
|
624
|
+
$validate: () => Promise<false | SafeFieldProperty<TState, TRules>>;
|
|
646
625
|
readonly $rules: {
|
|
647
626
|
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>;
|
|
648
627
|
};
|
|
@@ -663,10 +642,9 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
663
642
|
readonly $name: string;
|
|
664
643
|
$id?: string;
|
|
665
644
|
$value: UnwrapNestedRefs<TValue>;
|
|
666
|
-
$touch(): void;
|
|
645
|
+
$touch(runCommit?: boolean): void;
|
|
667
646
|
$reset(): void;
|
|
668
647
|
$resetAll: () => void;
|
|
669
|
-
$validate(): Promise<boolean>;
|
|
670
648
|
$unwatch(): void;
|
|
671
649
|
$watch(): void;
|
|
672
650
|
$clearExternalErrors(): void;
|
|
@@ -693,14 +671,14 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
693
671
|
/**
|
|
694
672
|
* @public
|
|
695
673
|
*/
|
|
696
|
-
type RegleCollectionStatus<TState extends any[] = any[], TRules extends
|
|
674
|
+
type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePartialRuleTree<ArrayElement<TState>> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never, TShortcuts extends RegleShortcutDefinition = {}> = Omit<RegleFieldStatus<TState, TRules, TShortcuts>, '$errors' | '$silentErrors' | '$extractDirtyFields' | '$externalErrors' | '$rules' | '$value' | '$validate'> & {
|
|
697
675
|
$value: Maybe<TState>;
|
|
698
|
-
readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number,
|
|
676
|
+
readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number, TShortcuts>>;
|
|
699
677
|
readonly $field: RegleFieldStatus<TState, TFieldRule, TShortcuts>;
|
|
700
|
-
readonly $errors:
|
|
701
|
-
readonly $silentErrors:
|
|
678
|
+
readonly $errors: RegleCollectionErrors<TState>;
|
|
679
|
+
readonly $silentErrors: RegleCollectionErrors<TState>;
|
|
702
680
|
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
703
|
-
$
|
|
681
|
+
$validate: () => Promise<false | DeepSafeFormState<ArrayElement<TState>, TRules>>[];
|
|
704
682
|
} & ([TShortcuts['collections']] extends [never] ? {} : {
|
|
705
683
|
[K in keyof TShortcuts['collections']]: ReturnType<NonNullable<TShortcuts['collections']>[K]>;
|
|
706
684
|
});
|
|
@@ -753,4 +731,4 @@ declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarat
|
|
|
753
731
|
inferRules: inferRulesFn<TCustomRules>;
|
|
754
732
|
};
|
|
755
733
|
|
|
756
|
-
export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type
|
|
734
|
+
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 RegleExternalErrorTree, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialRuleTree, 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 RegleRuleTree as 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,watchEffect}from'vue';var Pe=(r=>(r.Inline="__inline",r.Async="__async",r))(Pe||{});function Ke(e,t){return computed(()=>e.value.some(r=>r[t]))}function et(e,t){return computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function L(e){return e.map(t=>t instanceof Function?t():unref(t))}function tt(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function rt(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(o=>o.trim()).filter(o=>o.includes("=")).length+e.length}function we(e,...t){let{message:r,validator:n,active:a,type:o,...u}=e,S=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator(g,...m){return e.validator(g,...L(m.length?m:t))},message(g,m){return typeof e.message=="function"?e.message(g,{...m,$params:L(m.$params?.length?m.$params:t)}):e.message},active(g,m){return typeof e.active=="function"?e.active(g,{...m,$params:L(m.$params?.length?m.$params:t)}):e.active??!0},exec(g){let m=e.validator(g,...L(t)),d;return m instanceof Promise?m.then(f=>(d=f,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)):(d=m,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)}},...u,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:S,_params:tt(t)}}function Oe(e){if(typeof e.validator=="function"){let r=we(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(rt(e.validator)>1){let a=function(...o){return we(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function nt(e){return z(e.value)}function re(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>re(n)))),r=="Map"&&(t=new Map([...e].map(n=>[re(n[0]),re(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,xt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=re(e[n]);}return t}function xt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function Ae(e,t,r){return e instanceof Function?e(t,r??0):e}function at(e,t){isRef(e)?e.value=t:e=t;}function lt(e,t){isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=isRef(e)?e.value[n]:e[n];a={},de(a,t[n]);});}function de(e,t){Object.entries({...unref(e),...t}).forEach(([r,n])=>{let a=isRef(e)?e.value:e,o=isRef(t[r])?t[r]._value:t[r],u=isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(o)&&o.forEach((S,E)=>{a[r][E]={},de(a[r][E],o[E]);})):z(o)?de(u,o):isRef(a[r])?a[r].value=o:a[r]=o;});}function ee(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function ye(e,t,r){let n,a=(...o)=>new Promise(u=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(u);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(u=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(u);},0);}),a}function Ct(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),u=Number(n[a]);if(o>u)return 1;if(u>o)return -1;if(!isNaN(o)&&isNaN(u))return 1;if(isNaN(o)&&!isNaN(u))return -1}return 0}var se=Ct(version,"3.5.0")!==-1;function It(){return Math.floor(Math.random()*Date.now()).toString()}function Fe(){return typeof window>"u"?It():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Me(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),o=shallowRef(new Map);function u(i){let l=t.value.get(i);if(l)return l;{let x=ref({});return t.value.set(i,x),x}}function S(i){let l=r.value.get(i);if(l)return l;{let x=ref([]);return r.value.set(i,x),x}}function E(i,l,x){o.value.set(`${i}-${l}`,x);}function h(i,l){return o.value.get(`${i}-${l}`)}function g(i,l){i&&l!=null&&o.value.delete(`${i}-${l}`);}function m(i,l){n.value.set(i,l);}function d(i){return n.value.get(i)??!1}function f(i,l){e.value.set(i,l);}function c(i,l){let x=e.value.get(i);return x?I(l,x)?{valid:!0}:{valid:!1}:void 0}function I(i,l){let x=Object.keys(l),j=Object.keys(i);return j.length!==x.length||!j.every(w=>x.includes(w))?!1:j.every(w=>{let b=i[w],O=l[w];return !O||!b||typeof b=="function"||typeof O=="function"||typeof b=="number"||typeof b=="boolean"?!1:b._params?b._params?.every((A,N)=>{if(typeof O=="number"||typeof O=="boolean")return !0;{let V=L(O._params),q=L(b._params);return V?.[N]===q?.[N]}}):!0})}function C(i){let l=a.value.get(i);if(l)return l;{let x=ref(!1),j=ref(!0),G=ref({}),w=ref(!1);return a.value.set(i,{$pending:x,$valid:j,$metadata:G,$validating:w}),{$pending:x,$valid:j,$metadata:G,$validating:w}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:f,setDirtyEntry:m,checkRuleDeclEntry:c,getDirtyState:d,trySetRuleStatusRef:C,getFieldsEntry:u,getCollectionsEntry:S,getArrayStatus:h,addArrayStatus:E,deleteArrayStatus:g,arrayStatusStorage:o}}function ot(e,t){return z(e.value)&&z(t.value)&&!Object.entries(t.value).some(r=>me(r))}function it(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function st(e){return !!e.value&&z(e.value)}function me(e){return z(e)&&"_validator"in e}function ve(e){return typeof e.value!="function"}function Ve(e){return z(e)&&"$fields"in e}function je(e){return "$each"in e||"$errors"in e}function _e({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function ct({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:u,$debounce:S}){let E=effectScope(),h,g,m=ref(!1),{$pending:d,$valid:f,$metadata:c,$validating:I}=u.trySetRuleStatusRef(`${o}.${n}`);function C(){h=E.run(()=>{let b=computed(()=>({$invalid:!f.value,$params:q.value,...c.value})),O=computed(()=>ve(r)?typeof r.value.active=="function"?r.value.active(a.value,b.value):r.value.active:!0),A=computed(()=>{let y="",v=t?t[n]?.message:void 0;return v&&(typeof v=="function"?y=v(a.value,b.value):y=v),ve(r)&&(v&&!r.value._patched||(typeof r.value.message=="function"?y=r.value.message(a.value,b.value):y=r.value.message)),ee(y)&&(y="Error",console.warn(`No error message defined for ${o}.${n}`)),y}),N=computed(()=>ve(r)&&r.value.type?r.value.type:n),V=computed(()=>ve(r)?r.value.validator:r.value),q=computed(()=>typeof r.value=="function"?[]:L(r.value._params??[])),D=computed(()=>`${o}.${N.value}`);return {$active:O,$message:A,$type:N,$validator:V,$params:q,$path:D}}),g=watch(h.$params,j,{deep:!0});}C();function i(){f.value=!0,e.value&&(d.value=!0);}async function l(){let b=h.$validator.value,O=b(a.value,...h.$params.value),A=!1,N=a.value;try{i();let V;if(O instanceof Promise?V=await O:V=O,a.value!==N)return !0;if(typeof V=="boolean")A=V;else {let{$valid:q,...D}=V;A=q,c.value=D;}}catch{A=!1;}finally{d.value=!1;}return A}let x=ye(l,S??200);async function j(){I.value=!0;let b=!1;if(me(r.value)&&r.value._async)b=await x();else {let O=h.$validator.value,A=O(a.value,...h.$params.value);if(A instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(A!=null)if(typeof A=="boolean")b=A;else {let{$valid:N,...V}=A;b=N,c.value=V;}}return f.value=b,I.value=!1,b}function G(){f.value=!0,c.value={},d.value=!1,I.value=!1,C();}function w(){g(),E.stop(),E=effectScope();}return reactive({...h,$pending:d,$valid:f,$metadata:c,_haveAsync:m,$validating:I,$validate:j,$unwatch:w,$watch:C,$reset:G})}function be({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:u,externalErrors:S,onUnwatch:E,$isArray:h,initialState:g,shortcuts:m}){let d=effectScope(),f,c=ref(!1),I=ref(!1),C=ref([]),i,l,x,j,G,w=()=>{};function b(){C.value=S.value??[];}b();function O(){let _=t.value,W=o.checkRuleDeclEntry(n,_);y.value=Object.fromEntries(Object.entries(_).filter(([H])=>H.startsWith("$"))),D.value=Object.fromEntries(Object.entries(t.value).filter(([H])=>!H.startsWith("$")).map(([H,X])=>{if(X){let De=toRef(()=>X);return [H,ct({$dirty:c,customMessages:r,rule:De,ruleKey:H,state:e,path:n,storage:o,$debounce:y.value.$debounce})]}return []}).filter(H=>!!H.length)),V(),A(),W?.valid!=null&&(c.value=o.getDirtyState(n),c.value&&w()),o.addRuleDeclEntry(n,_);}function A(){w=f.$debounce.value?ye(q,f.$debounce.value??f.haveAnyAsyncRule?100:0):q;}function N(){D.value&&Object.entries(D.value).forEach(([_,W])=>{W.$unwatch();}),j(),c.value&&o.setDirtyEntry(n,c.value),i(),l(),x(),d.stop(),d=effectScope(),E?.(),G?.();}function V(){D.value&&Object.entries(D.value).forEach(([_,W])=>{W.$watch();}),f=d.run(()=>{let _=computed(()=>c.value),W=computed(()=>y.value.$debounce),H=computed(()=>y.value.$lazy!=null?y.value.$lazy:unref(u.lazy)),X=computed(()=>y.value.$rewardEarly!=null?y.value.$rewardEarly:unref(u.rewardEarly)),De=computed(()=>y.value.$autoDirty!=null?y.value.$autoDirty:unref(u.autoDirty)),vt=computed(()=>Object.entries(D.value).some(([te,Q])=>Q.$validating)),Ce=computed(()=>pe.value&&!Ee.value&&c.value),Le=computed(()=>Ce.value?_e({field:{$dirty:c.value,$externalErrors:C.value,$rules:D.value}}):[]),ze=computed(()=>_e({field:{$dirty:c.value,$externalErrors:C.value,$rules:D.value},silent:!0})),Je=computed(()=>!(pe.value||Ee.value)),Ee=computed(()=>I.value||!X.value?Object.entries(D.value).some(([te,Q])=>Q.$pending):!1),pe=computed(()=>C.value?.length?!0:!X.value||X.value&&I.value?Object.entries(D.value).some(([te,Q])=>!Q.$valid):!1),Ye=computed(()=>a),Ie=computed(()=>ee(D.value)?!0:c.value&&!ee(e.value)&&!vt.value?C.value?.length?!1:X.value?Object.entries(D.value).every(([te,Q])=>Q.$valid):!pe.value:!1),gt=computed(()=>Object.entries(D.value).some(([te,Q])=>Q._haveAsync));function $t(){m?.fields&&Object.entries(m.fields).forEach(([te,Q])=>{let St=effectScope();Qe[te]=St.run(()=>{let Xe=ref();return watchEffect(()=>{Xe.value=Q({$dirty:c.value,$externalErrors:C.value,$value:e,$rules:D.value,$error:Ce.value,$pending:Ee.value,$invalid:pe.value,$valid:Ie.value,$errors:Le.value,$ready:Je.value,$silentErrors:ze.value,$anyDirty:_.value,$name:Ye.value});}),Xe});});}let Qe={};return $t(),watch(Ie,te=>{te&&(I.value=!1);}),{$error:Ce,$pending:Ee,$invalid:pe,$valid:Ie,$debounce:W,$lazy:H,$errors:Le,$ready:Je,$silentErrors:ze,$rewardEarly:X,$autoDirty:De,$anyDirty:_,$name:Ye,haveAnyAsyncRule:gt,$shortcuts:Qe}}),x=watch(S,b),i=watch(e,()=>{f.$autoDirty.value&&(c.value||(c.value=!0)),t.value instanceof Function&&O(),w(),f.$rewardEarly.value;},{deep:h?!0:se?1:!0}),j=watch(c,()=>{o.setDirtyEntry(n,c.value);}),l=watch(f.$valid,_=>{f.$rewardEarly.value&&_&&(I.value=!1);}),G=watch(f.haveAnyAsyncRule,A);}function q(){Object.entries(D.value).forEach(([_,W])=>{W.$validate();});}let D=ref(),y=ref();O();function v(){c.value=!1,C.value=[],Object.entries(D.value).forEach(([_,W])=>{W.$reset();}),f.$lazy.value||Object.entries(D.value).map(([_,W])=>W.$validate());}function R(){c.value||(c.value=!0,f.$rewardEarly.value,w());}let p=f.$debounce.value?ye($,f.$debounce.value??0):$;async function $(){try{if(I.value=!0,f.$autoDirty.value&&c.value&&!f.$pending.value)return !f.$error.value;{let _=Object.entries(D.value).map(([H,X])=>X.$validate());return (await Promise.allSettled(_)).every(H=>H.status==="fulfilled"?H.value:!1)}}catch{return !1}}function s(){N(),e.value=at(e,g),v();}function T(_=!0){return c.value?e.value:null}function P(){C.value=[];}f.$lazy.value||$();let{$anyDirty:k,$error:Y,$errors:oe,$invalid:ne,$name:U,$pending:M,$ready:F,$silentErrors:ie,$valid:xe,$shortcuts:he}=f;return reactive({$dirty:c,$error:Y,$errors:oe,$valid:xe,$invalid:ne,$pending:M,$silentErrors:ie,$anyDirty:k,$ready:F,$name:U,$externalErrors:C,$value:e,$rules:D,...he,$reset:v,$touch:R,$validate:p,$unwatch:N,$watch:V,$resetAll:s,$extractDirtyFields:T,$clearExternalErrors:P})}function ft({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:u,rules:S,externalErrors:E,initialState:h,shortcuts:g,fieldName:m}){let d=S.$key?S.$key:Fe(),f=`${t}.${String(d)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?f=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:d,enumerable:!1,configurable:!1,writable:!1}}));let c=toRef(()=>E.value?.[r]),I=Se({state:o,rulesDef:toRef(()=>S),customMessages:u,path:f,storage:a,options:n,externalErrors:c,initialState:h?.[r],shortcuts:g,fieldName:m});if(I){let C=o.value?.$id;I.$id=C??String(d),a.addArrayStatus(e,I.$id,I);}return I}function Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:u,initialState:S,shortcuts:E,fieldName:h}){let g=effectScope(),m,d=effectScope(),f;if(!Array.isArray(e.value)&&!t.value.$each)return null;let c=ref(),I=ref(e.value),C,i=ref({}),l=a.getCollectionsEntry(n);f=d.run(()=>{let R=computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(s=>typeof s!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(s=>me(s)):!1),p=computed(()=>u.value?je(u.value)?u.value.$errors??[]:[]:[]),$=computed(()=>u.value?je(u.value)?u.value.$each??[]:[]:[]);return {isPrimitiveArray:R,$externalErrorsField:p,$externalErrorsEach:$}}),x(),G();function x(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(c.value=Fe(),Object.defineProperties(e.value,{$id:{value:c.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(c.value=e.value.$id)),!f.isPrimitiveArray.value&&(I.value=i.value.$value,Array.isArray(e.value)?l.value=e.value.map((R,p)=>{let $=Ae(t.value.$each,toRef(()=>R),p),s=ft({$id:c.value,path:n,rules:$??{},stateValue:toRef(()=>R),index:p,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:S[p],shortcuts:E,fieldName:h});return s||null}).filter(R=>!!R):l.value=[],i.value=be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:f.$externalErrorsField,$isArray:!0,initialState:S,shortcuts:E,fieldName:h}));}function j(){if(Array.isArray(e.value)){let R=re(l.value);l.value=e.value.map((p,$)=>{let s=toRef(()=>p);if(p.$id&&l.value.find(T=>T.$id===p.$id)){let T=a.getArrayStatus(c.value,p.$id);return T?(T.$value=s,T):null}else {let T=Ae(t.value.$each,s,$);if(T){let P=ft({$id:c.value,path:n,rules:T,stateValue:s,index:$,options:o,storage:a,externalErrors:f.$externalErrorsEach,initialState:S[$],shortcuts:E,fieldName:h});return P||null}}}).filter(p=>!!p),R.filter(p=>!e.value.find($=>p.$id===$.$id)).forEach((p,$)=>{a.deleteArrayStatus(c.value,$.toString());});}else l.value=[];}function G(){C=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?x():j();},{deep:se?1:!0,flush:"pre"}),m=g.run(()=>{let R=computed(()=>i.value.$dirty&&l.value.every(F=>F.$dirty)),p=computed(()=>i.value.$anyDirty||l.value.some(F=>F.$dirty)),$=computed(()=>i.value.$invalid||l.value.some(F=>F.$invalid)),s=computed(()=>i.value.$valid&&l.value.every(F=>F.$valid)),T=computed(()=>i.value.$error||l.value.some(F=>F.$error)),P=computed(()=>!($.value||k.value)),k=computed(()=>i.value.$pending||l.value.some(F=>F.$pending)),Y=computed(()=>({$errors:i.value.$errors,$each:l.value.map(F=>F.$errors)})),oe=computed(()=>({$errors:i.value.$silentErrors,$each:l.value.map(F=>F.$silentErrors)})),ne=computed(()=>h);function U(){E?.collections&&Object.entries(E?.collections).forEach(([F,ie])=>{let xe=effectScope();M[F]=xe.run(()=>{let he=ref();return watchEffect(()=>{he.value=ie({$dirty:R.value,$error:T.value,$pending:k.value,$invalid:$.value,$valid:s.value,$errors:Y.value,$ready:P.value,$silentErrors:oe.value,$anyDirty:p.value,$name:ne.value,$each:l.value,$field:i.value,$value:e});}),he});});}let M={};return U(),{$dirty:R,$anyDirty:p,$invalid:$,$valid:s,$error:T,$pending:k,$errors:Y,$silentErrors:oe,$ready:P,$name:ne,$shortcuts:M}}),f.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),C());}function w(){C&&C(),i.value&&i.value.$unwatch(),l.value&&l.value.forEach(R=>{"$dirty"in R&&R.$unwatch();}),g.stop(),g=effectScope(),d.stop(),d=effectScope(!0);}function b(){i.value.$touch(),l.value.forEach(R=>{R.$touch();});}function O(){i.value.$reset(),l.value.forEach(R=>{R.$reset();});}async function A(){try{return (await Promise.all([i.value.$validate(),...l.value.map(p=>p.$validate())])).every(p=>!!p)}catch{return !1}}function N(){i.value.$clearExternalErrors(),l.value.forEach(R=>{R.$clearExternalErrors();});}function V(R=!0){let p=l.value.map($=>{if(Ve($))return $.$extractDirtyFields(R)});return R&&(p=p.filter($=>z($)?!ee($):!!$)),p}function q(){console.log(S),w(),lt(e,S),O();}async function D(){return b(),await A()?e.value:!1}let{$shortcuts:y,...v}=m;return reactive({$field:i,...v,...y,$each:l,$value:e,$validate:A,$unwatch:w,$watch:G,$touch:b,$reset:O,$resetAll:q,$extractDirtyFields:V,$parse:D,$clearExternalErrors:N})}function ke({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:u,externalErrors:S,validationGroups:E,initialState:h,shortcuts:g,fieldName:m}){let d,f,c=null;function i(y=!0){l.value=null,triggerRef(l);let v=Object.fromEntries(Object.entries(e.value).map(([s,T])=>{if(T){let P=toRef(t.value,s),k=toRef(()=>T),Y=toRef(()=>S.value?.[s]);return [s,Se({state:P,rulesDef:k,customMessages:r,path:n?`${n}.${s}`:s,storage:o,options:u,externalErrors:Y,initialState:h?.[s],shortcuts:g,fieldName:s})]}return []}).filter(s=>!!s.length&&s[1]!=null)),R=Object.fromEntries(Object.entries(unref(S)??{}).filter(([s])=>!(s in e.value)).map(([s,T])=>{if(T){let P=toRef(t.value,s),k=toRef(()=>({})),Y=toRef(()=>T);return [s,Se({state:P,rulesDef:k,customMessages:r,path:n?`${n}.${s}`:s,storage:o,options:u,externalErrors:Y,initialState:h?.[s],shortcuts:g,fieldName:s})]}return []})),p=Object.fromEntries(Object.entries(t.value).filter(([s])=>!(s in e.value)&&!(s in(R.value??{}))).map(([s,T])=>{let P=toRef(t.value,s),k=toRef(()=>({}));return [s,Se({state:P,rulesDef:k,customMessages:r,path:n?`${n}.${s}`:s,storage:o,options:u,externalErrors:ref(),initialState:h?.[s],shortcuts:g,fieldName:s})]})),$=Object.fromEntries(Object.entries(E?.(v)??{}).map(([s,T])=>T.length?[s,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(P=>[P,Ke(toRef(()=>T),P)])),...Object.fromEntries(["$errors","$silentErrors"].map(P=>[P,et(toRef(()=>T),P)]))}]:[]));l.value={...v,...R,...p,...$},y&&w();}let l=o.getFieldsEntry(n);i();function x(){i(!1),Object.entries(l.value).forEach(([y,v])=>{v.$reset();}),w();}function j(){Object.entries(l.value).forEach(([y,v])=>{v.$touch();});}async function G(){try{return (await Promise.allSettled(Object.entries(l.value).map(([v,R])=>R.$validate()))).every(v=>v.status==="fulfilled"?v.value:!1)}catch{return !1}}function w(){a&&(c=watch(a,()=>{b(),i();},{deep:se?1:!0,flush:"post"})),d=effectScope(),f=d.run(()=>{let y=computed(()=>!!Object.entries(l.value).length&&Object.entries(l.value).every(([U,M])=>M?.$dirty)),v=computed(()=>Object.entries(l.value).some(([U,M])=>M?.$dirty)),R=computed(()=>Object.entries(l.value).some(([U,M])=>M?.$invalid)),p=computed(()=>Object.entries(l.value).every(([U,M])=>M?.$valid)),$=computed(()=>y.value&&!T.value&&R.value),s=computed(()=>!(R.value||T.value)),T=computed(()=>Object.entries(l.value).some(([U,M])=>M?.$pending)),P=computed(()=>Object.fromEntries(Object.entries(l.value).map(([U,M])=>[U,M?.$errors]))),k=computed(()=>Object.fromEntries(Object.entries(l.value).map(([U,M])=>[U,M?.$silentErrors]))),Y=computed(()=>m);function oe(){g?.nested&&Object.entries(g.nested).forEach(([U,M])=>{let F=effectScope();ne[U]=F.run(()=>{let ie=ref();return watchEffect(()=>{ie.value=M({$dirty:y.value,$value:t,$error:$.value,$pending:T.value,$invalid:R.value,$valid:p.value,$ready:s.value,$anyDirty:v.value,$name:Y.value,$silentErrors:k.value,$errors:P.value,$fields:l.value});}),ie});});}let ne={};return oe(),{$dirty:y,$anyDirty:v,$invalid:R,$valid:p,$error:$,$pending:T,$errors:P,$silentErrors:k,$ready:s,$name:Y,$shortcuts:ne}});}function b(){l.value&&Object.entries(l.value).forEach(([y,v])=>{v.$unwatch();}),c?.(),d.stop(),d=effectScope();}function O(){Object.entries(l.value).forEach(([y,v])=>{v.$clearExternalErrors();});}function A(){b(),de(t,h??{}),x();}function N(y=!0){let v=Object.entries(l.value).map(([R,p])=>[R,p.$extractDirtyFields(y)]);return y&&(v=v.filter(([R,p])=>z(p)?!ee(p):Array.isArray(p)?p.length:!!p)),Object.fromEntries(v)}async function V(){return j(),await G()?t.value:!1}let{$shortcuts:q,...D}=f;return reactive({...D,...q,$fields:l,$value:t,$resetAll:A,$reset:x,$touch:j,$validate:G,$unwatch:b,$watch:w,$clearExternalErrors:O,$extractDirtyFields:N,$parse:V})}function Se({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:u,index:S,initialState:E,shortcuts:h,onUnwatch:g,fieldName:m}){return it(t,e)?Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:S,externalErrors:u,initialState:E,fieldName:m,shortcuts:h}):ot(e,t)&&nt(e)?ke({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:S,initialState:E,shortcuts:h,fieldName:m,externalErrors:u}):st(t)?be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:S,externalErrors:u,onUnwatch:g,shortcuts:h,initialState:E,fieldName:m}):null}function Ue({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o}){let u=Me(),S=computed(()=>unref(t.externalErrors));return reactive(ke({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:u,options:t,externalErrors:S,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root"}))}function We(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function a(o,u,S){let E=isRef(u)?u:computed(typeof u=="function"?u:()=>u),h={...n,...S},g=isRef(o)?o:ref(o),m=re(toRaw(g.value));return {r$:Ue({scopeRules:E,state:g,options:h,initialState:m,customRules:e,shortcuts:r})}}return a}var yt=We();function He(){function e(t,r){return r}return e}var qe=He();function mt({rules:e,modifiers:t,shortcuts:r}){let n=We(e,t,r),a=He();return {useRegle:n,inferRules:a}}export{Pe as InternalRuleType,Oe as createRule,mt as defineRegleConfig,qe as inferRules,L as unwrapRuleParameters,yt as useRegle};
|
|
1
|
+
import {unref,version,isRef,toRef,computed,ref,toRaw,reactive,shallowRef,onScopeDispose,triggerRef,watch,effectScope,watchEffect}from'vue';var Ce=(r=>(r.Inline="__inline",r.Async="__async",r))(Ce||{});function Qe(e,t){return computed(()=>e.value.some(r=>r[t]))}function Xe(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 Ze(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function Ke(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 Ie(e,...t){let{message:r,validator:n,active:a,type:o,...f}=e,p=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator($,...y){return e.validator($,...q(y.length?y:t))},message($,y){return typeof e.message=="function"?e.message($,{...y,$params:q(y.$params?.length?y.$params:t)}):e.message},active($,y){return typeof e.active=="function"?e.active($,{...y,$params:q(y.$params?.length?y.$params:t)}):e.active??!0},exec($){let y=e.validator($,...q(t)),d;return y instanceof Promise?y.then(v=>(d=v,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)):(d=y,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:!1)}},...f,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:p,_params:Ze(t)}}function Pe(e){if(typeof e.validator=="function"){let r=Ie(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Ke(e.validator)>1){let a=function(...o){return Ie(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 et(e){return L(e.value)}function te(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>te(n)))),r=="Map"&&(t=new Map([...e].map(n=>[te(n[0]),te(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,ht(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=te(e[n]);}return t}function ht(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 we(e,t,r){return e instanceof Function?e(t,r??0):e}function tt(e,t){isRef(e)?e.value=t:e=t;}function rt(e,t){isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=isRef(e)?e.value[n]:e[n];a={},fe(a,t[n]);});}function fe(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],f=isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(o)&&o.forEach((p,T)=>{a[r][T]={},fe(a[r][T],o[T]);})):L(o)?fe(f,o):isRef(a[r])?a[r].value=o:a[r]=o;});}function J(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 $e(e,t,r){let n,a=(...o)=>new Promise(f=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(f);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(f=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(f);},0);}),a}function Tt(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]),f=Number(n[a]);if(o>f)return 1;if(f>o)return -1;if(!isNaN(o)&&isNaN(f))return 1;if(isNaN(o)&&!isNaN(f))return -1}return 0}var Se=Tt(version,"3.5.0")!==-1;function Et(){return Math.floor(Math.random()*Date.now()).toString()}function Oe(){return typeof window>"u"?Et():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Ae(){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 f(u){let l=t.value.get(u);if(l)return l;{let x=ref({});return t.value.set(u,x),x}}function p(u){let l=r.value.get(u);if(l)return l;{let x=ref([]);return r.value.set(u,x),x}}function T(u,l,x){o.value.set(`${u}-${l}`,x);}function S(u,l){return o.value.get(`${u}-${l}`)}function $(u,l){u&&l!=null&&o.value.delete(`${u}-${l}`);}function y(u,l){n.value.set(u,l);}function d(u){return n.value.get(u)??!1}function v(u,l){e.value.set(u,l);}function i(u,l){let x=e.value.get(u);return x?V(l,x)?{valid:!0}:{valid:!1}:void 0}function V(u,l){let x=Object.keys(l),A=Object.keys(u);return A.length!==x.length||!A.every(j=>x.includes(j))?!1:A.every(j=>{let b=u[j],P=l[j];return !P||!b||typeof b=="function"||typeof P=="function"||typeof b=="number"||typeof b=="boolean"?!1:b._params?b._params?.every((F,m)=>{if(typeof P=="number"||typeof P=="boolean")return !0;{let E=q(P._params),H=q(b._params);return E?.[m]===H?.[m]}}):!0})}function N(u){let l=a.value.get(u);if(l)return l;{let x=ref(!1),A=ref(!0),B=ref({}),j=ref(!1);return a.value.set(u,{$pending:x,$valid:A,$metadata:B,$validating:j}),{$pending:x,$valid:A,$metadata:B,$validating:j}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:v,setDirtyEntry:y,checkRuleDeclEntry:i,getDirtyState:d,trySetRuleStatusRef:N,getFieldsEntry:f,getCollectionsEntry:p,getArrayStatus:S,addArrayStatus:T,deleteArrayStatus:$,arrayStatusStorage:o}}function nt(e,t){return L(e.value)&&L(t.value)&&!Object.entries(t.value).some(r=>Re(r))}function at(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function lt(e){return !!e.value&&L(e.value)}function Re(e){return L(e)&&"_validator"in e}function pe(e){return typeof e.value!="function"}function Fe(e){return L(e)&&"$fields"in e}function Me({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.$dirty?e.$externalErrors??[]:[])}function ut({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:f,$debounce:p}){let T=effectScope(),S,$,y=ref(!1),{$pending:d,$valid:v,$metadata:i,$validating:V}=f.trySetRuleStatusRef(`${o}.${n}`);function N(){S=T.run(()=>{let b=computed(()=>({$invalid:!v.value,$params:H.value,...i.value})),P=computed(()=>pe(r)?typeof r.value.active=="function"?r.value.active(a.value,b.value):!!r.value.active:!0),F=computed(()=>{let h="",s=t?t[n]?.message:void 0;return s&&(typeof s=="function"?h=s(a.value,b.value):h=s),pe(r)&&(s&&!r.value._patched||(typeof r.value.message=="function"?h=r.value.message(a.value,b.value):h=r.value.message)),J(h)&&(h="Error",console.warn(`No error message defined for ${o}.${n}`)),h}),m=computed(()=>pe(r)&&r.value.type?r.value.type:n),E=computed(()=>pe(r)?r.value.validator:r.value),H=computed(()=>typeof r.value=="function"?[]:q(r.value._params??[])),C=computed(()=>`${o}.${m.value}`);return {$active:P,$message:F,$type:m,$validator:E,$params:H,$path:C}}),$=watch(S.$params,A,{deep:!0});}N();function u(){v.value=!0,e.value&&(d.value=!0);}async function l(){let b=S.$validator.value,P=b(a.value,...S.$params.value),F=!1,m=a.value;try{u();let E;if(P instanceof Promise?E=await P:E=P,a.value!==m)return !0;if(typeof E=="boolean")F=E;else {let{$valid:H,...C}=E;F=H,i.value=C;}}catch{F=!1;}finally{d.value=!1;}return F}let x=$e(l,p??200);async function A(){try{V.value=!0;let b=!1;if(Re(r.value)&&r.value._async)b=await x();else {let P=S.$validator.value,F=P(a.value,...S.$params.value);if(F 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(F!=null)if(typeof F=="boolean")b=F;else {let{$valid:m,...E}=F;b=m,i.value=E;}}return v.value=b,b}catch{return !1}finally{V.value=!1;}}function B(){v.value=!0,i.value={},d.value=!1,V.value=!1,N();}function j(){$(),T.stop(),T=effectScope();}return reactive({...S,$pending:d,$valid:v,$metadata:i,_haveAsync:y,$validating:V,$validate:A,$unwatch:j,$watch:N,$reset:B})}function be({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:f,externalErrors:p,onUnwatch:T,$isArray:S,initialState:$,shortcuts:y}){let d=effectScope(),v,i=ref(!1),V=ref(!1),N,u,l,x,A=()=>{};function B(){let O=t.value,G=o.checkRuleDeclEntry(n,O);E.value=Object.fromEntries(Object.entries(O).filter(([W])=>W.startsWith("$"))),m.value=Object.fromEntries(Object.entries(t.value).filter(([W])=>!W.startsWith("$")).map(([W,X])=>{if(X){let Ee=toRef(()=>X);return [W,ut({$dirty:i,customMessages:r,rule:Ee,ruleKey:W,state:e,path:n,storage:o,$debounce:E.value.$debounce})]}return []}).filter(W=>!!W.length)),P(),j(),G?.valid!=null&&(i.value=o.getDirtyState(n),i.value&&A()),o.addRuleDeclEntry(n,O);}function j(){A=v.$debounce.value?$e(F,v.$debounce.value??v.haveAnyAsyncRule?100:0):F;}function b(){m.value&&Object.entries(m.value).forEach(([O,G])=>{G.$unwatch();}),l(),i.value&&o.setDirtyEntry(n,i.value),N?.(),u?.(),d.stop(),d=effectScope(),T?.(),x?.();}function P(){m.value&&Object.entries(m.value).forEach(([O,G])=>{G.$watch();}),v=d.run(()=>{let O=computed(()=>i.value),G=computed(()=>E.value.$debounce),W=computed(()=>E.value.$lazy!=null?E.value.$lazy:unref(f.lazy)),X=computed(()=>E.value.$rewardEarly!=null?E.value.$rewardEarly:unref(f.rewardEarly)),Ee=computed(()=>E.value.$clearExternalErrorsOnChange!=null?E.value.$clearExternalErrorsOnChange:unref(f.clearExternalErrorsOnChange)),pt=computed(()=>E.value.$autoDirty!=null?E.value.$autoDirty:unref(f.autoDirty)),Ue=computed(()=>Object.entries(m.value).some(([ee,z])=>z.$validating)),De=computed(()=>ce.value&&!ge.value&&i.value),We=computed(()=>De.value?Me({field:{$dirty:i.value,$externalErrors:p?.value,$rules:m.value}}):[]),He=computed(()=>Me({field:{$dirty:i.value,$externalErrors:p?.value,$rules:m.value},silent:!0})),qe=computed(()=>!(ce.value||ge.value)),ge=computed(()=>V.value||!X.value?Object.entries(m.value).some(([ee,z])=>z.$pending):!1),ce=computed(()=>p?.value?.length?!0:J(m.value)?!1:!X.value||X.value&&V.value?Object.entries(m.value).some(([ee,z])=>!z.$valid):!1),Le=computed(()=>a),xe=computed(()=>J(m.value)?!1:i.value&&!J(e.value)&&!Ue.value?p?.value?.length?!1:X.value?Object.entries(m.value).every(([ee,z])=>z.$valid):!ce.value:!1),dt=computed(()=>Object.entries(m.value).some(([ee,z])=>z._haveAsync));function vt(){y?.fields&&Object.entries(y.fields).forEach(([ee,z])=>{let yt=effectScope();ze[ee]=yt.run(()=>{let Je=ref();return watchEffect(()=>{Je.value=z({$dirty:i.value,$externalErrors:p?.value??[],$value:e,$rules:m.value,$error:De.value,$pending:ge.value,$invalid:ce.value,$valid:xe.value,$errors:We.value,$ready:qe.value,$silentErrors:He.value,$anyDirty:O.value,$name:Le.value});}),Je});});}let ze={};return vt(),watch(xe,ee=>{ee&&(V.value=!1);}),{$error:De,$pending:ge,$invalid:ce,$valid:xe,$debounce:G,$lazy:W,$errors:We,$ready:qe,$silentErrors:He,$rewardEarly:X,$autoDirty:pt,$clearExternalErrorsOnChange:Ee,$anyDirty:O,$name:Le,haveAnyAsyncRule:dt,$shortcuts:ze,$validating:Ue}}),N=watch(e,()=>{v.$autoDirty.value&&(i.value||(i.value=!0)),t.value instanceof Function&&B(),A(),v.$rewardEarly.value!==!0&&v.$clearExternalErrorsOnChange.value&&g();},{deep:S?!0:Se?1:!0}),l=watch(i,()=>{o.setDirtyEntry(n,i.value);}),u=watch(v.$valid,O=>{v.$rewardEarly.value&&O&&(V.value=!1);}),x=watch(v.haveAnyAsyncRule,j);}function F(){Object.values(m.value).forEach(O=>{O.$validate();});}let m=ref(),E=ref();B();function H(){i.value=!1,g(),Object.entries(m.value).forEach(([O,G])=>{G.$reset();}),v.$lazy.value||Object.entries(m.value).map(([O,G])=>G.$validate());}function C(O=!0){i.value||(i.value=!0,O&&A());}async function h(){try{if(V.value=!0,!i.value)i.value=!0;else if(v.$autoDirty.value&&i.value&&!v.$pending.value)return !v.$error.value;return (await Promise.allSettled(Object.entries(m.value).map(([W,X])=>X.$validate()))).every(W=>W.status==="fulfilled"?!!W.value:!1)?e.value:!1}catch{return !1}}function s(){b(),e.value=tt(e,$),H();}function R(O=!0){return i.value?e.value:null}function g(){p?.value?.length&&(p.value=[]);}!v.$lazy.value&&!i.value&&A();let{$anyDirty:c,$error:D,$errors:I,$invalid:k,$name:K,$pending:oe,$ready:ne,$silentErrors:U,$valid:M,$shortcuts:w,$validating:se}=v;return reactive({$dirty:i,$error:D,$errors:I,$valid:M,$invalid:k,$pending:oe,$silentErrors:U,$anyDirty:c,$ready:ne,$name:K,$externalErrors:p,$value:e,$rules:m,...w,$reset:H,$touch:C,$validate:h,$unwatch:b,$watch:P,$resetAll:s,$extractDirtyFields:R,$clearExternalErrors:g})}function it({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:f,rules:p,externalErrors:T,initialState:S,shortcuts:$,fieldName:y}){let d=p.$key?p.$key:Oe(),v=`${t}.${String(d)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?v=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:d,enumerable:!1,configurable:!1,writable:!1}}));let i=me({state:o,rulesDef:toRef(()=>p),customMessages:f,path:v,storage:a,options:n,externalErrors:toRef(T?.value??[],r),initialState:S?.[r],shortcuts:$,fieldName:y});if(i){let V=o.value?.$id;i.$id=V??String(d),a.addArrayStatus(e,i.$id,i);}return i}function st({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:f,initialState:p,shortcuts:T,fieldName:S}){let $=effectScope(),y,d=effectScope(),v;if(!Array.isArray(e.value)&&!t.value.$each)return null;let i=ref(),V=ref(e.value),N,u=ref({}),l=a.getCollectionsEntry(n);v=d.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(R=>typeof R!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(R=>Re(R)):!1)})),x(),B();function x(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(i.value=Oe(),Object.defineProperties(e.value,{$id:{value:i.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(i.value=e.value.$id)),!v.isPrimitiveArray.value&&(V.value=u.value.$value,Array.isArray(e.value)?l.value=e.value.map((s,R)=>{let g=we(t.value.$each,toRef(()=>s),R),c=it({$id:i.value,path:n,rules:g??{},stateValue:toRef(()=>s),index:R,options:o,storage:a,externalErrors:toRef(f?.value??{},"$each"),initialState:p[R],shortcuts:T,fieldName:S});return c||null}).filter(s=>!!s):l.value=[],u.value=be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:toRef(f?.value??{},"$errors"),$isArray:!0,initialState:p,shortcuts:T,fieldName:S}));}function A(){if(Array.isArray(e.value)){let s=te(l.value);l.value=e.value.map((R,g)=>{let c=toRef(()=>R);if(R.$id&&l.value.find(D=>D.$id===R.$id)){let D=a.getArrayStatus(i.value,R.$id);return D?(D.$value=c,D):null}else {let D=we(t.value.$each,c,g);if(D){let I=it({$id:i.value,path:n,rules:D,stateValue:c,index:g,options:o,storage:a,externalErrors:toRef(f?.value??{},"$each"),initialState:p[g],shortcuts:T,fieldName:S});return I||null}}}).filter(R=>!!R),s.filter(R=>!e.value.find(g=>R.$id===g.$id)).forEach((R,g)=>{a.deleteArrayStatus(i.value,g.toString());});}else l.value=[];}function B(){N=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?x():A();},{deep:Se?1:!0,flush:"pre"}),y=$.run(()=>{let s=computed(()=>u.value.$dirty&&l.value.every(w=>w.$dirty)),R=computed(()=>u.value.$anyDirty||l.value.some(w=>w.$dirty)),g=computed(()=>u.value.$invalid||l.value.some(w=>w.$invalid)),c=computed(()=>(J(u.value.$rules)?!0:u.value.$valid)&&l.value.every(w=>w.$valid)),D=computed(()=>u.value.$error||l.value.some(w=>w.$error)),I=computed(()=>!(g.value||k.value)),k=computed(()=>u.value.$pending||l.value.some(w=>w.$pending)),K=computed(()=>({$errors:u.value.$errors,$each:l.value.map(w=>w.$errors)})),oe=computed(()=>({$errors:u.value.$silentErrors,$each:l.value.map(w=>w.$silentErrors)})),ne=computed(()=>S);function U(){T?.collections&&Object.entries(T?.collections).forEach(([w,se])=>{let O=effectScope();M[w]=O.run(()=>{let G=ref();return watchEffect(()=>{G.value=se({$dirty:s.value,$error:D.value,$pending:k.value,$invalid:g.value,$valid:c.value,$errors:K.value,$ready:I.value,$silentErrors:oe.value,$anyDirty:R.value,$name:ne.value,$each:l.value,$field:u.value,$value:e});}),G});});}let M={};return U(),{$dirty:s,$anyDirty:R,$invalid:g,$valid:c,$error:D,$pending:k,$errors:K,$silentErrors:oe,$ready:I,$name:ne,$shortcuts:M}}),v.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`),N());}function j(){N&&N(),u.value&&u.value.$unwatch(),l.value&&l.value.forEach(s=>{"$dirty"in s&&s.$unwatch();}),$.stop(),$=effectScope(),d.stop(),d=effectScope(!0);}function b(s=!0){u.value.$touch(s),l.value.forEach(R=>{R.$touch(s);});}function P(){u.value.$reset(),l.value.forEach(s=>{s.$reset();});}async function F(){try{return (await Promise.all([u.value.$validate(),...l.value.map(g=>g.$validate())])).every(g=>g.value!==!1)?e.value:!1}catch{return !1}}function m(){u.value.$clearExternalErrors(),l.value.forEach(s=>{s.$clearExternalErrors();});}function E(s=!0){let R=l.value.map(g=>{if(Fe(g))return g.$extractDirtyFields(s)});return s&&(R=R.filter(g=>L(g)?!J(g):!!g)),R}function H(){j(),rt(e,p),P();}let{$shortcuts:C,...h}=y;return reactive({$field:u,...h,...C,$each:l,$value:e,$validate:F,$unwatch:j,$watch:B,$touch:b,$reset:P,$resetAll:H,$extractDirtyFields:E,$clearExternalErrors:m})}function _e({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:f,externalErrors:p,validationGroups:T,initialState:S,shortcuts:$,fieldName:y}){let d,v,i=null;function u(C=!0){l.value=null,triggerRef(l);let h=Object.fromEntries(Object.entries(e.value).map(([c,D])=>{if(D){let I=toRef(t.value,c),k=toRef(()=>D),K=toRef(p?.value,c);return [c,me({state:I,rulesDef:k,customMessages:r,path:n?`${n}.${c}`:c,storage:o,options:f,externalErrors:K,initialState:S?.[c],shortcuts:$,fieldName:c})]}return []}).filter(c=>!!c.length&&c[1]!=null)),s=Object.fromEntries(Object.entries(unref(p)??{}).filter(([c])=>!(c in e.value)).map(([c,D])=>{if(D){let I=toRef(t.value,c),k=toRef(()=>({}));return [c,me({state:I,rulesDef:k,customMessages:r,path:n?`${n}.${c}`:c,storage:o,options:f,externalErrors:toRef(p?.value??{},c),initialState:S?.[c],shortcuts:$,fieldName:c})]}return []})),R=Object.fromEntries(Object.entries(t.value).filter(([c])=>!(c in e.value)&&!(c in(s.value??{}))).map(([c,D])=>{let I=toRef(t.value,c),k=toRef(()=>({}));return [c,me({state:I,rulesDef:k,customMessages:r,path:n?`${n}.${c}`:c,storage:o,options:f,externalErrors:toRef(p?.value??{},c),initialState:S?.[c],shortcuts:$,fieldName:c})]})),g=Object.fromEntries(Object.entries(T?.(h)??{}).map(([c,D])=>D.length?[c,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(I=>[I,Qe(toRef(()=>D),I)])),...Object.fromEntries(["$errors","$silentErrors"].map(I=>[I,Xe(toRef(()=>D),I)]))}]:[]));l.value={...h,...s,...R,...g},C&&j();}let l=o.getFieldsEntry(n);u();function x(){u(!1),Object.entries(l.value).forEach(([C,h])=>{h.$reset();}),j();}function A(C=!0){Object.values(l.value).forEach(h=>{h.$touch(C);});}async function B(){try{return (await Promise.allSettled(Object.values(l.value).map(s=>s.$validate()))).every(s=>s.status==="fulfilled"?s.value!==!1:!1)?t.value:!1}catch{return !1}}function j(){a&&(i=watch([a,p],()=>{b(),u();},{deep:!0,flush:"post"})),d=effectScope(),v=d.run(()=>{let C=computed(()=>!!Object.entries(l.value).length&&Object.entries(l.value).every(([U,M])=>M?.$dirty)),h=computed(()=>Object.entries(l.value).some(([U,M])=>M?.$dirty)),s=computed(()=>Object.entries(l.value).some(([U,M])=>M?.$invalid)),R=computed(()=>Object.entries(l.value).every(([U,M])=>M?.$valid)),g=computed(()=>C.value&&!D.value&&s.value),c=computed(()=>!(s.value||D.value)),D=computed(()=>Object.entries(l.value).some(([U,M])=>M?.$pending)),I=computed(()=>Object.fromEntries(Object.entries(l.value).map(([U,M])=>[U,M?.$errors]))),k=computed(()=>Object.fromEntries(Object.entries(l.value).map(([U,M])=>[U,M?.$silentErrors]))),K=computed(()=>y);function oe(){$?.nested&&Object.entries($.nested).forEach(([U,M])=>{let w=effectScope();ne[U]=w.run(()=>{let se=ref();return watchEffect(()=>{se.value=M({$dirty:C.value,$value:t,$error:g.value,$pending:D.value,$invalid:s.value,$valid:R.value,$ready:c.value,$anyDirty:h.value,$name:K.value,$silentErrors:k.value,$errors:I.value,$fields:l.value});}),se});});}let ne={};return oe(),{$dirty:C,$anyDirty:h,$invalid:s,$valid:R,$error:g,$pending:D,$errors:I,$silentErrors:k,$ready:c,$name:K,$shortcuts:ne}});}function b(){l.value&&Object.entries(l.value).forEach(([C,h])=>{h.$unwatch();}),i?.(),d.stop(),d=effectScope();}function P(){Object.entries(l.value).forEach(([C,h])=>{h.$clearExternalErrors();});}function F(){b(),fe(t,S??{}),x();}function m(C=!0){let h=Object.entries(l.value).map(([s,R])=>[s,R.$extractDirtyFields(C)]);return C&&(h=h.filter(([s,R])=>L(R)?!J(R):Array.isArray(R)?R.length:!!R)),Object.fromEntries(h)}let{$shortcuts:E,...H}=v;return reactive({...H,...E,$fields:l,$value:t,$resetAll:F,$reset:x,$touch:A,$validate:B,$unwatch:b,$watch:j,$clearExternalErrors:P,$extractDirtyFields:m})}function me({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:f,index:p,initialState:T,shortcuts:S,onUnwatch:$,fieldName:y}){return at(t,e)?st({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:p,externalErrors:f,initialState:T,fieldName:y,shortcuts:S}):nt(e,t)&&et(e)?_e({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:p,initialState:T,shortcuts:S,fieldName:y,externalErrors:f}):lt(t)?be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:p,externalErrors:f,onUnwatch:$,shortcuts:S,initialState:T,fieldName:y}):null}function Ne({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o}){let f=Ae();return reactive(_e({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:f,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root"}))}function Ge(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange??!0};function a(o,f,p){let T=isRef(f)?f:computed(typeof f=="function"?f:()=>f),S={...n,...p},$=isRef(o)?o:ref(o),y=te(toRaw($.value));return {r$:Ne({scopeRules:T,state:$,options:S,initialState:y,customRules:e,shortcuts:r})}}return a}var ft=Ge();function Be(){function e(t,r){return r}return e}var ke=Be();function Rt({rules:e,modifiers:t,shortcuts:r}){let n=Ge(e,t,r),a=Be();return {useRegle:n,inferRules:a}}export{Ce as InternalRuleType,Pe as createRule,Rt as defineRegleConfig,ke as inferRules,q as unwrapRuleParameters,ft as useRegle};
|