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