@regle/core 0.2.12 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -2
- package/dist/index.d.cts +45 -36
- package/dist/index.d.ts +45 -36
- package/dist/index.js +2 -2
- package/package.json +6 -6
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var vue=require('vue');var Ie=(r=>(r.Inline="__inline",r.Async="__async",r))(Ie||{});function Ze(e,t){return vue.computed(()=>e.value.some(r=>r[t]))}function Ke(e,t){return vue.computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function H(e){return e.map(t=>t instanceof Function?t():vue.unref(t))}function et(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function tt(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(i=>i.trim()).filter(i=>i.length>0).length:0}function Pe(e,...t){let{message:r,validator:n,active:a,type:l,...i}=e,d=l==="__async"||n.constructor.name==="AsyncFunction";return {...{validator(b,...S){return e.validator(b,...H(S.length?S:t))},message(b,S){return typeof e.message=="function"?e.message(b,{...S,$params:H(S.$params?.length?S.$params:t)}):e.message},active(b,S){return typeof e.active=="function"?e.active(b,{...S,$params:H(S.$params?.length?S.$params:t)}):e.active??!0},exec(b){let S=e.validator(b,...H(t)),g;return S instanceof Promise?S.then(v=>(g=v,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)):(g=S,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)}},...i,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:d,_params:et(t)}}function we(e){if(typeof e.validator=="function"){let r=Pe(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(tt(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 L(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function rt(e){return L(e.value)}function ne(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>ne(n)))),r=="Map"&&(t=new Map([...e].map(n=>[ne(n[0]),ne(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,Et(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=ne(e[n]);}return t}function Et(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function Oe(e,t,r){return e instanceof Function?e(t,r??0):e}function nt(e,t){vue.isRef(e)?e.value=t:e=t;}function at(e,t){vue.isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=vue.isRef(e)?e.value[n]:e[n];a={},Re(a,t[n]);});}function Re(e,t){Object.entries({...vue.unref(e),...t}).forEach(([r,n])=>{let a=vue.isRef(e)?e.value:e,l=vue.isRef(t[r])?t[r]._value:t[r],i=vue.isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(l)&&l.forEach((d,x)=>{a[r][x]={},Re(a[r][x],l[x]);})):L(l)?Re(i,l):vue.isRef(a[r])?a[r].value=l:a[r]=l;});}function q(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function he(e,t,r){let n,a=(...l)=>new Promise(i=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(i);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...l)=>new Promise(i=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(i);},0);}),a}function xt(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]),i=Number(n[a]);if(l>i)return 1;if(i>l)return -1;if(!isNaN(l)&&isNaN(i))return 1;if(isNaN(l)&&!isNaN(i))return -1}return 0}var be=xt(vue.version,"3.5.0")!==-1;function Ct(){return Math.floor(Math.random()*Date.now()).toString()}function Ae(){return typeof window>"u"?Ct():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),l=vue.shallowRef(new Map);function i(p){let o=t.value.get(p);if(o)return o;{let u=vue.ref({});return t.value.set(p,u),u}}function d(p){let o=r.value.get(p);if(o)return o;{let u=vue.ref([]);return r.value.set(p,u),u}}function x(p,o,u){l.value.set(`${p}-${o}`,u);}function E(p,o){return l.value.get(`${p}-${o}`)}function b(p,o){p&&o!=null&&l.value.delete(`${p}-${o}`);}function S(p,o){n.value.set(p,o);}function g(p){return n.value.get(p)??!1}function v(p,o){e.value.set(p,o);}function I(p,o){let u=e.value.get(p);return u?f(o,u)?{valid:!0}:{valid:!1}:void 0}function f(p,o){let u=Object.keys(o),$=Object.keys(p);return $.length!==u.length||!$.every(j=>u.includes(j))?!1:$.every(j=>{let C=p[j],O=o[j];return !O||!C||typeof C=="function"||typeof O=="function"||typeof C=="number"||typeof C=="boolean"?!1:C._params?C._params?.every((P,M)=>{if(typeof O=="number"||typeof O=="boolean")return !0;{let y=H(O._params),w=H(C._params);return y?.[M]===w?.[M]}}):!0})}function G(p){let o=a.value.get(p);if(o)return o;{let u=vue.ref(!1),$=vue.ref(!0),N=vue.ref({}),j=vue.ref(!1);return a.value.set(p,{$pending:u,$valid:$,$metadata:N,$validating:j}),{$pending:u,$valid:$,$metadata:N,$validating:j}}}return vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),l.value.clear();}),{addRuleDeclEntry:v,setDirtyEntry:S,checkRuleDeclEntry:I,getDirtyState:g,trySetRuleStatusRef:G,getFieldsEntry:i,getCollectionsEntry:d,getArrayStatus:E,addArrayStatus:x,deleteArrayStatus:b,arrayStatusStorage:l}}function lt(e,t){return L(e.value)&&L(t.value)&&!Object.entries(t.value).some(r=>pe(r))}function ot(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function ut(e){return !!e.value&&L(e.value)}function pe(e){return L(e)&&"_validator"in e}function de(e){return typeof e.value!="function"}function st(e){return L(e)&&"$fields"in e}function Fe({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function ct({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:l,storage:i,$debounce:d}){let x=vue.effectScope(),E,b,S=vue.ref(!1),{$pending:g,$valid:v,$metadata:I,$validating:f}=i.trySetRuleStatusRef(`${l}.${n}`);function G(){E=x.run(()=>{let C=vue.computed(()=>({$invalid:!v.value,$params:w.value,...I.value})),O=vue.computed(()=>de(r)?typeof r.value.active=="function"?r.value.active(a.value,C.value):!!r.value.active:!0),P=vue.computed(()=>{let U="",z=t?t[n]?.message:void 0;return z&&(typeof z=="function"?U=z(a.value,C.value):U=z),de(r)&&(z&&!r.value._patched||(typeof r.value.message=="function"?U=r.value.message(a.value,C.value):U=r.value.message)),q(U)&&(U="Error",console.warn(`No error message defined for ${l}.${n}`)),U}),M=vue.computed(()=>de(r)&&r.value.type?r.value.type:n),y=vue.computed(()=>de(r)?r.value.validator:r.value),w=vue.computed(()=>typeof r.value=="function"?[]:H(r.value._params??[])),Z=vue.computed(()=>`${l}.${M.value}`);return {$active:O,$message:P,$type:M,$validator:y,$params:w,$path:Z}}),b=vue.watch(E.$params,$,{deep:!0});}G();function p(){v.value=!0,e.value&&(g.value=!0);}async function o(){let C=E.$validator.value,O=C(a.value,...E.$params.value),P=!1,M=a.value;try{p();let y;if(O instanceof Promise?y=await O:y=O,a.value!==M)return !0;if(typeof y=="boolean")P=y;else {let{$valid:w,...Z}=y;P=w,I.value=Z;}}catch{P=!1;}finally{g.value=!1;}return P}let u=he(o,d??200);async function $(){try{f.value=!0;let C=!1;if(pe(r.value)&&r.value._async)C=await u();else {let O=E.$validator.value,P=O(a.value,...E.$params.value);if(P 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(P!=null)if(typeof P=="boolean")C=P;else {let{$valid:M,...y}=P;C=M,I.value=y;}}return v.value=C,C}catch{return !1}finally{f.value=!1;}}function N(){v.value=!0,I.value={},g.value=!1,f.value=!1,G();}function j(){b(),x.stop(),x=vue.effectScope();}return vue.reactive({...E,$pending:g,$valid:v,$metadata:I,_haveAsync:S,$validating:f,$validate:$,$unwatch:j,$watch:G,$reset:N})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:l,options:i,externalErrors:d,onUnwatch:x,$isArray:E,initialState:b,shortcuts:S}){let g=vue.effectScope(),v,I=[],f=vue.ref(!1),G=vue.ref(!1),p,o,u,$,N=()=>{};function j(){let T=t.value,B=l.checkRuleDeclEntry(n,T);w.value=Object.fromEntries(Object.entries(T).filter(([J])=>J.startsWith("$"))),y.value=Object.fromEntries(Object.entries(t.value).filter(([J])=>!J.startsWith("$")).map(([J,Y])=>{if(Y){let fe=vue.toRef(()=>Y);return [J,ct({$dirty:f,customMessages:r,rule:fe,ruleKey:J,state:e,path:n,storage:l,$debounce:w.value.$debounce})]}return []}).filter(J=>!!J.length)),P(),C(),B?.valid!=null&&(f.value=l.getDirtyState(n),f.value&&N()),l.addRuleDeclEntry(n,T);}function C(){N=v.$debounce.value?he(M,v.$debounce.value??v.haveAnyAsyncRule?100:0):M;}function O(){y.value&&Object.entries(y.value).forEach(([T,B])=>{B.$unwatch();}),u(),f.value&&l.setDirtyEntry(n,f.value),p?.(),o?.(),g.stop(),g=vue.effectScope(),I.forEach(T=>T.stop()),I=[],x?.(),$?.();}function P(){y.value&&Object.entries(y.value).forEach(([T,B])=>{B.$watch();}),v=g.run(()=>{let T=vue.computed(()=>f.value),B=vue.computed(()=>w.value.$debounce),J=vue.computed(()=>w.value.$lazy!=null?w.value.$lazy:vue.unref(i.lazy)),Y=vue.computed(()=>w.value.$rewardEarly!=null?w.value.$rewardEarly:vue.unref(i.rewardEarly)),fe=vue.computed(()=>w.value.$clearExternalErrorsOnChange!=null?w.value.$clearExternalErrorsOnChange:vue.unref(i.clearExternalErrorsOnChange)),mt=vue.computed(()=>w.value.$autoDirty!=null?w.value.$autoDirty:vue.unref(i.autoDirty)),ke=vue.computed(()=>Object.entries(y.value).some(([K,re])=>re.$validating)),xe=vue.computed(()=>Se.value&&!$e.value&&f.value),He=vue.computed(()=>xe.value?Fe({field:{$dirty:f.value,$externalErrors:d?.value,$rules:y.value}}):[]),Le=vue.computed(()=>Fe({field:{$dirty:f.value,$externalErrors:d?.value,$rules:y.value},silent:!0})),qe=vue.computed(()=>!(Se.value||$e.value)),$e=vue.computed(()=>G.value||!Y.value?Object.entries(y.value).some(([K,re])=>re.$pending):!1),Se=vue.computed(()=>d?.value?.length?!0:q(y.value)?!1:!Y.value||Y.value&&G.value?Object.entries(y.value).some(([K,re])=>!re.$valid):!1),ze=vue.computed(()=>a),Ce=vue.computed(()=>q(y.value)?!1:f.value&&!q(e.value)&&!ke.value?d?.value?.length?!1:Object.values(y.value).every(K=>K.$valid&&K.$active):!1),gt=vue.computed(()=>Object.entries(y.value).some(([K,re])=>re._haveAsync));function $t(){S?.fields&&Object.entries(S.fields).forEach(([K,re])=>{let Ye=vue.effectScope();Je[K]=Ye.run(()=>{let Qe=vue.ref();return vue.watchEffect(()=>{Qe.value=re({$dirty:f.value,$externalErrors:d?.value??[],$value:e,$rules:y.value,$error:xe.value,$pending:$e.value,$invalid:Se.value,$valid:Ce.value,$errors:He.value,$ready:qe.value,$silentErrors:Le.value,$anyDirty:T.value,$name:ze.value});}),Qe}),I.push(Ye);});}let Je={};return $t(),vue.watch(Ce,K=>{K&&(G.value=!1);}),{$error:xe,$pending:$e,$invalid:Se,$valid:Ce,$debounce:B,$lazy:J,$errors:He,$ready:qe,$silentErrors:Le,$rewardEarly:Y,$autoDirty:mt,$clearExternalErrorsOnChange:fe,$anyDirty:T,$name:ze,haveAnyAsyncRule:gt,$shortcuts:Je,$validating:ke}}),p=vue.watch(e,()=>{v.$autoDirty.value&&(f.value||(f.value=!0)),t.value instanceof Function&&j(),N(),v.$rewardEarly.value!==!0&&v.$clearExternalErrorsOnChange.value&&m();},{deep:E?!0:be?1:!0}),u=vue.watch(f,()=>{l.setDirtyEntry(n,f.value);}),o=vue.watch(v.$valid,T=>{v.$rewardEarly.value&&T&&(G.value=!1);}),$=vue.watch(v.haveAnyAsyncRule,C);}function M(){Object.values(y.value).forEach(T=>{T.$validate();});}let y=vue.ref(),w=vue.ref();j();function Z(){m(),f.value=!1,Object.entries(y.value).forEach(([T,B])=>{B.$reset();}),!v.$lazy.value&&v.$autoDirty.value&&Object.values(y.value).forEach(T=>T.$validate());}function U(T=!0){f.value||(f.value=!0,T&&N());}async function z(){try{let T=e.value;if(G.value=!0,!f.value)f.value=!0;else if(v.$autoDirty.value&&f.value&&!v.$pending.value)return {result:!v.$error.value,data:T};return q(y.value)?{result:!0,data:T}:{result:(await Promise.allSettled(Object.entries(y.value).map(([Y,fe])=>fe.$validate()))).every(Y=>Y.status==="fulfilled"?Y.value===!0:!1),data:T}}catch{return {result:!1,data:e.value}}}function s(){O(),e.value=nt(e,b),Z();}function c(T=!0){return f.value?e.value:null}function m(){d?.value?.length&&(d.value=[]);}!v.$lazy.value&&!f.value&&v.$autoDirty.value&&N();let{$anyDirty:h,$error:V,$errors:R,$invalid:A,$name:F,$pending:k,$ready:te,$silentErrors:ce,$valid:le,$shortcuts:D,$validating:_}=v;return vue.reactive({$dirty:f,$error:V,$errors:R,$valid:le,$invalid:A,$pending:k,$silentErrors:ce,$anyDirty:h,$ready:te,$name:F,$externalErrors:d,$value:e,$rules:y,...D,$reset:Z,$touch:U,$validate:z,$unwatch:O,$watch:P,$resetAll:s,$extractDirtyFields:c,$clearExternalErrors:m})}function ft({$id:e,path:t,index:r,options:n,storage:a,stateValue:l,customMessages:i,rules:d,externalErrors:x,initialState:E,shortcuts:b,fieldName:S}){let g=d.$key?d.$key:Ae(),v=`${t}.${String(g)}`;typeof l.value=="object"&&l.value!=null&&(l.value.$id?v=`${t}.${l.value.$id}`:Object.defineProperties(l.value,{$id:{value:g,enumerable:!1,configurable:!1,writable:!1}}));let I=ge({state:l,rulesDef:vue.toRef(()=>d),customMessages:i,path:v,storage:a,options:n,externalErrors:vue.toRef(x?.value??[],r),initialState:E?.[r],shortcuts:b,fieldName:S});if(I){let f=l.value?.$id;I.$id=f??String(g),a.addArrayStatus(e,I.$id,I);}return I}function Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:i,initialState:d,shortcuts:x,fieldName:E}){let b=vue.effectScope(),S,g=vue.effectScope(),v,I=[];if(!Array.isArray(e.value)&&!t.value.$each)return null;let f=vue.ref(),G=vue.ref(e.value),p,o=vue.ref({}),u=a.getCollectionsEntry(n);v=g.run(()=>({isPrimitiveArray:vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(c=>typeof c!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(c=>pe(c)):!1)})),$(),j();function $(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(f.value=Ae(),Object.defineProperties(e.value,{$id:{value:f.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(f.value=e.value.$id)),!v.isPrimitiveArray.value&&(G.value=o.value.$value,Array.isArray(e.value)?u.value=e.value.map((s,c)=>{let m=Oe(t.value.$each,vue.toRef(()=>s),c),h=ft({$id:f.value,path:n,rules:m??{},stateValue:vue.toRef(()=>s),index:c,options:l,storage:a,externalErrors:vue.toRef(i?.value??{},"$each"),initialState:d?.[c],shortcuts:x,fieldName:E});return h||null}).filter(s=>!!s):u.value=[],o.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:vue.toRef(i?.value??{},"$errors"),$isArray:!0,initialState:d,shortcuts:x,fieldName:E}));}function N(){if(Array.isArray(e.value)){let s=ne(u.value);u.value=e.value.map((c,m)=>{let h=vue.toRef(()=>c);if(c.$id&&u.value.find(V=>V.$id===c.$id)){let V=a.getArrayStatus(f.value,c.$id);return V?(V.$value=h,V):null}else {let V=Oe(t.value.$each,h,m);if(V){let R=ft({$id:f.value,path:n,rules:V,stateValue:h,index:m,options:l,storage:a,externalErrors:vue.toRef(i?.value??{},"$each"),initialState:d?.[m],shortcuts:x,fieldName:E});return R||null}}}).filter(c=>!!c),s.filter(c=>!e.value.find(m=>c.$id===m.$id)).forEach((c,m)=>{a.deleteArrayStatus(f.value,m.toString());});}else u.value=[];}function j(){p=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?$():N();},{deep:be?1:!0,flush:"pre"}),S=b.run(()=>{let s=vue.computed(()=>o.value.$dirty&&u.value.every(D=>D.$dirty)),c=vue.computed(()=>o.value.$anyDirty||u.value.some(D=>D.$dirty)),m=vue.computed(()=>o.value.$invalid||u.value.some(D=>D.$invalid)),h=vue.computed(()=>(q(o.value.$rules)?!0:o.value.$valid)&&u.value.every(D=>D.$valid)),V=vue.computed(()=>o.value.$error||u.value.some(D=>D.$error)),R=vue.computed(()=>!(m.value||A.value)),A=vue.computed(()=>o.value.$pending||u.value.some(D=>D.$pending)),F=vue.computed(()=>({$errors:o.value.$errors,$each:u.value.map(D=>D.$errors)})),k=vue.computed(()=>({$errors:o.value.$silentErrors,$each:u.value.map(D=>D.$silentErrors)})),te=vue.computed(()=>E);function ce(){x?.collections&&Object.entries(x?.collections).forEach(([D,_])=>{let T=vue.effectScope();le[D]=T.run(()=>{let B=vue.ref();return vue.watchEffect(()=>{B.value=_({$dirty:s.value,$error:V.value,$pending:A.value,$invalid:m.value,$valid:h.value,$errors:F.value,$ready:R.value,$silentErrors:k.value,$anyDirty:c.value,$name:te.value,$each:u.value,$field:o.value,$value:e});}),B}),I.push(T);});}let le={};return ce(),{$dirty:s,$anyDirty:c,$invalid:m,$valid:h,$error:V,$pending:A,$errors:F,$silentErrors:k,$ready:R,$name:te,$shortcuts:le}}),v.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),p());}function C(){p&&p(),o.value&&o.value.$unwatch(),u.value&&u.value.forEach(s=>{"$dirty"in s&&s.$unwatch();}),b.stop(),b=vue.effectScope(),g.stop(),g=vue.effectScope(!0),I.forEach(s=>s.stop()),I=[];}function O(s=!0){o.value.$touch(s),u.value.forEach(c=>{c.$touch(s);});}function P(){o.value.$reset(),u.value.forEach(s=>{s.$reset();});}async function M(){let s=e.value;try{return {result:(await Promise.allSettled([o.value.$validate(),...u.value.map(h=>h.$validate())])).every(h=>h.status==="fulfilled"?h.value.result===!0:!1),data:s}}catch{return {result:!1,data:s}}}function y(){o.value.$clearExternalErrors(),u.value.forEach(s=>{s.$clearExternalErrors();});}function w(s=!0){let c=u.value.map(m=>{if(st(m))return m.$extractDirtyFields(s)});return s&&(c=c.filter(m=>L(m)?!q(m):!!m)),c}function Z(){C(),at(e,d),P();}let{$shortcuts:U,...z}=S;return vue.reactive({$field:o,...z,...U,$each:u,$value:e,$validate:M,$unwatch:C,$watch:j,$touch:O,$reset:P,$resetAll:Z,$extractDirtyFields:w,$clearExternalErrors:y})}function Ge({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:l,options:i,externalErrors:d,validationGroups:x,initialState:E,shortcuts:b,fieldName:S}){let g,v,I=[],f=null,G=null,p=null;function u(s=!0){$.value=null,vue.triggerRef($);let c=Object.fromEntries(Object.entries(e.value).map(([R,A])=>{if(A){let F=vue.toRef(t.value,R),k=vue.toRef(()=>A),te=vue.toRef(d?.value,R);return [R,ge({state:F,rulesDef:k,customMessages:r,path:n?`${n}.${R}`:R,storage:l,options:i,externalErrors:te,initialState:E?.[R],shortcuts:b,fieldName:R})]}return []}).filter(R=>!!R.length&&R[1]!=null)),m=Object.fromEntries(Object.entries(vue.unref(d)??{}).filter(([R])=>!(R in e.value)).map(([R,A])=>{if(A){let F=vue.toRef(t.value,R),k=vue.toRef(()=>({}));return [R,ge({state:F,rulesDef:k,customMessages:r,path:n?`${n}.${R}`:R,storage:l,options:i,externalErrors:vue.toRef(d?.value??{},R),initialState:E?.[R],shortcuts:b,fieldName:R})]}return []})),h=Object.fromEntries(Object.entries(t.value).filter(([R])=>!(R in e.value)&&!(R in(m.value??{}))).map(([R,A])=>{let F=vue.toRef(t.value,R),k=vue.toRef(()=>({}));return [R,ge({state:F,rulesDef:k,customMessages:r,path:n?`${n}.${R}`:R,storage:l,options:i,externalErrors:vue.toRef(d?.value??{},R),initialState:E?.[R],shortcuts:b,fieldName:R})]})),V=Object.fromEntries(Object.entries(x?.(c)??{}).map(([R,A])=>A.length?[R,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(F=>[F,Ze(vue.toRef(()=>A),F)])),...Object.fromEntries(["$errors","$silentErrors"].map(F=>[F,Ke(vue.toRef(()=>A),F)]))}]:[]));$.value={...c,...m,...h,...V},s&&P();}let $=l.getFieldsEntry(n);u();function N(){G?.(),Object.values($.value).forEach(s=>{s.$reset();}),O();}function j(s=!0){Object.values($.value).forEach(c=>{c.$touch(s);});}async function C(){try{let s=t.value;return {result:(await Promise.allSettled(Object.values($.value).map(h=>h.$validate()))).every(h=>h.status==="fulfilled"?h.value.result===!0:!1),data:s}}catch{return {result:!1,data:t.value}}}function O(){d?.value&&(G=vue.watch(d,()=>{M(),u();},{deep:!0}));}function P(){a&&(f=vue.watch(a,()=>{M(),u();},{deep:!0,flush:"post"}),O()),p=vue.watch(t,()=>{M(),u(),j();}),g=vue.effectScope(),v=g.run(()=>{let s=vue.computed(()=>!!Object.entries($.value).length&&Object.entries($.value).every(([D,_])=>_?.$dirty)),c=vue.computed(()=>Object.entries($.value).some(([D,_])=>_?.$dirty)),m=vue.computed(()=>Object.entries($.value).some(([D,_])=>_?.$invalid)),h=vue.computed(()=>Object.entries($.value).every(([D,_])=>_?.$valid)),V=vue.computed(()=>s.value&&!A.value&&m.value),R=vue.computed(()=>vue.unref(i.autoDirty)?c.value&&!(m.value||A.value):!(m.value||A.value)),A=vue.computed(()=>Object.entries($.value).some(([D,_])=>_?.$pending)),F=vue.computed(()=>Object.fromEntries(Object.entries($.value).map(([D,_])=>[D,_?.$errors]))),k=vue.computed(()=>Object.fromEntries(Object.entries($.value).map(([D,_])=>[D,_?.$silentErrors]))),te=vue.computed(()=>S);function ce(){b?.nested&&Object.entries(b.nested).forEach(([D,_])=>{let T=vue.effectScope();le[D]=T.run(()=>{let B=vue.ref();return vue.watchEffect(()=>{B.value=_({$dirty:s.value,$value:t,$error:V.value,$pending:A.value,$invalid:m.value,$valid:h.value,$ready:R.value,$anyDirty:c.value,$name:te.value,$silentErrors:k.value,$errors:F.value,$fields:$.value});}),B}),I.push(T);});}let le={};return ce(),{$dirty:s,$anyDirty:c,$invalid:m,$valid:h,$error:V,$pending:A,$errors:F,$silentErrors:k,$ready:R,$name:te,$shortcuts:le}});}function M(){$.value&&Object.entries($.value).forEach(([s,c])=>{c.$unwatch();}),f?.(),G?.(),p?.(),g.stop(),g=vue.effectScope(),I.forEach(s=>s.stop()),I=[];}function y(){Object.entries($.value).forEach(([s,c])=>{c.$clearExternalErrors();});}function w(){M(),Re(t,E??{}),u(!1),N(),P();}function Z(s=!0){let c=Object.entries($.value).map(([m,h])=>[m,h.$extractDirtyFields(s)]);return s&&(c=c.filter(([m,h])=>L(h)?!q(h):Array.isArray(h)?h.length:!!h)),Object.fromEntries(c)}let{$shortcuts:U,...z}=v;return vue.reactive({...z,...U,$fields:$,$value:t,$resetAll:w,$reset:N,$touch:j,$validate:C,$unwatch:M,$watch:P,$clearExternalErrors:y,$extractDirtyFields:Z})}function ge({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:i,index:d,initialState:x,shortcuts:E,onUnwatch:b,fieldName:S}){return ot(t,e)?Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:d,externalErrors:i,initialState:x,fieldName:S,shortcuts:E}):lt(e,t)&&rt(e)?Ge({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:l,index:d,initialState:x,shortcuts:E,fieldName:S,externalErrors:i}):ut(t)?Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:d,externalErrors:i,onUnwatch:b,shortcuts:E,initialState:x,fieldName:S}):null}function Ne({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:l}){let i=Me();return vue.reactive(Ge({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:i,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:l,fieldName:"root"}))}function Be(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange??!0};function a(l,i,d){let x=vue.isRef(i)?i:vue.computed(typeof i=="function"?i:()=>i),E={...n,...d},b=vue.isRef(l)?l:vue.ref(l),S=ne(vue.toRaw(b.value));return {r$:Ne({scopeRules:x,state:b,options:E,initialState:S,customRules:e,shortcuts:r})}}return a}var vt=Be();function We(){function e(t,r){return r}return e}var Ue=We();function yt({rules:e,modifiers:t,shortcuts:r}){let n=Be(e,t,r),a=We();return {useRegle:n,inferRules:a}}
|
|
2
|
-
exports.InternalRuleType=
|
|
1
|
+
'use strict';var vue=require('vue');var xe=(t=>(t.Inline="__inline",t.Async="__async",t))(xe||{});function ke(e,r){return e.some(t=>t[r])}function qe(e,r){return e.reduce((t,a)=>{let n=a[r]||[];return t.concat(n)},[])}function k(e){return e.map(r=>r instanceof Function?r():vue.unref(r))}function ze(e){return e.map(r=>r instanceof Function||vue.isRef(r)?r:vue.toRef(()=>r))}function Je(e){let a=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return a?(a[0]||a[1]||a[2]||a[3]||a[4]||"").split(",").map(d=>d.trim()).filter(d=>d.length>0).length:0}function De(e,...r){let{validator:t,type:a}=e,n=a==="__async"||t.constructor.name==="AsyncFunction";return {...{validator(v,...c){return e.validator(v,...k(c.length?c:r))},message(v,c){return typeof e.message=="function"?e.message(v,{...c,$params:k(c.$params?.length?c.$params:r)}):e.message},active(v,c){return typeof e.active=="function"?e.active(v,{...c,$params:k(c.$params?.length?c.$params:r)}):e.active??!0},tooltip(v,c){return typeof e.tooltip=="function"?e.tooltip(v,{...c,$params:k(c.$params?.length?c.$params:r)}):e.tooltip??[]},exec(v){let c=e.validator(v,...k(r)),g;return c instanceof Promise?c.then(w=>(g=w,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)):(g=c,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_patched:!1,_async:n,_params:ze(r)}}function Ce(e){if(typeof e.validator=="function"){let t=De(e,...[]),a=e.validator.constructor.name==="AsyncFunction";if(Je(e.validator)>1){let n=function(...s){return De(e,...s)};return n.validator=t.validator,n.message=t.message,n.active=t.active,n.tooltip=t.tooltip,n.type=t.type,n.exec=t.exec,n._validator=t.validator,n._message=t.message,n._active=t.active,n._tooltip=t.tooltip,n._type=e.type,n._patched=!1,n._async=a,n}else return t}throw new Error("Validator must be a function")}function q(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ye(e){return q(e.value)}function ee(e){let r=e,t={}.toString.call(e).slice(8,-1);if(t=="Set"&&(r=new Set([...e].map(a=>ee(a)))),t=="Map"&&(r=new Map([...e].map(a=>[ee(a[0]),ee(a[1])]))),t=="Date"&&(r=new Date(e.getTime())),t=="RegExp"&&(r=RegExp(e.source,ht(e))),t=="Array"||t=="Object"){r=Array.isArray(e)?[]:{};for(let a in e)r[a]=ee(e[a]);}return r}function ht(e){if(typeof e.source.flags=="string")return e.source.flags;{let r=[];return e.global&&r.push("g"),e.ignoreCase&&r.push("i"),e.multiline&&r.push("m"),e.sticky&&r.push("y"),e.unicode&&r.push("u"),r.join("")}}function Ie(e,r,t){return e instanceof Function?e(r,t??0):e}function Qe(e,r){vue.isRef(e)?e.value=r:e=r;}function Xe(e,r){vue.isRef(e)?e.value=[]:e=[],r.forEach((t,a)=>{let n=vue.isRef(e)?e.value[a]:e[a];n={},ie(n,r[a]);});}function ie(e,r){Object.entries({...vue.unref(e),...r}).forEach(([t,a])=>{let n=vue.isRef(e)?e.value:e,s=vue.isRef(r[t])?r[t]._value:r[t],d=vue.isRef(n[t])?n[t].value:n[t];Array.isArray(n[t])?(n[t]=[],Array.isArray(s)&&s.forEach((v,c)=>{n[t][c]={},ie(n[t][c],s[c]);})):q(s)?ie(d,s):vue.isRef(n[t])?n[t].value=s:n[t]=s;});}function ge(e,r,t){let a,n=(...s)=>new Promise(d=>{clearTimeout(a),a=setTimeout(()=>{a=void 0,Promise.resolve(e.apply(this,[...s])).then(d);},r);});return n.cancel=()=>{clearTimeout(a),a=void 0;},n}function Tt(e,r){let t=String(e).split("."),a=String(r).split(".");for(let n=0;n<Math.min(t.length,a.length);n++){let s=Number(t[n]),d=Number(a[n]);if(s>d)return 1;if(d>s)return -1;if(!isNaN(s)&&isNaN(d))return 1;if(isNaN(s)&&!isNaN(d))return -1}return 0}var $e=Tt(vue.version,"3.5.0")!==-1;function Et(){return Math.floor(Math.random()*Date.now()).toString()}function Se(){return typeof window>"u"?Et():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Pe(){let e=vue.shallowRef(new Map),r=vue.shallowRef(new Map),t=vue.shallowRef(new Map),a=vue.shallowRef(new Map),n=vue.shallowRef(new Map),s=vue.shallowRef(new Map);function d(u){let i=r.value.get(u);if(i)return i;{let f=vue.ref({});return r.value.set(u,f),f}}function v(u){let i=t.value.get(u);if(i)return i;{let f=vue.ref([]);return t.value.set(u,f),f}}function c(u,i,f){s.value.set(`${u}-${i}`,f);}function g(u,i){return s.value.get(`${u}-${i}`)}function w(u,i){u&&i!=null&&s.value.delete(`${u}-${i}`);}function G(u,i){a.value.set(u,i);}function C(u){return a.value.get(u)??!1}function R(u,i){e.value.set(u,i);}function x(u,i){let f=e.value.get(u);return f?p(i,f)?{valid:!0}:{valid:!1}:void 0}function p(u,i){let f=Object.keys(i),j=Object.keys(u);return j.length!==f.length||!j.every(O=>f.includes(O))?!1:j.every(O=>{let b=u[O],A=i[O];return !A||!b||typeof b=="function"||typeof A=="function"||typeof b=="number"||typeof b=="boolean"?!1:b._params?b._params?.every((I,L)=>{if(typeof A=="number"||typeof A=="boolean")return !0;{let y=k(A._params),P=k(b._params);return y?.[L]===P?.[L]}}):!0})}function F(u){let i=n.value.get(u);if(i)return i;{let f=vue.ref(!1),j=vue.ref(!0),V=vue.ref({}),O=vue.ref(!1);return n.value.set(u,{$pending:f,$valid:j,$metadata:V,$validating:O}),{$pending:f,$valid:j,$metadata:V,$validating:O}}}return vue.onScopeDispose(()=>{e.value.clear(),r.value.clear(),t.value.clear(),a.value.clear(),n.value.clear(),s.value.clear();}),{addRuleDeclEntry:R,setDirtyEntry:G,checkRuleDeclEntry:x,getDirtyState:C,trySetRuleStatusRef:F,getFieldsEntry:d,getCollectionsEntry:v,getArrayStatus:g,addArrayStatus:c,deleteArrayStatus:w,arrayStatusStorage:s}}function Y(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}function Ze(e,r){return q(e.value)&&q(r.value)&&!Object.entries(r.value).some(t=>ce(t))}function Ke(e,r){return !!e.value&&"$each"in e.value||Array.isArray(r.value)}function et(e){return !!e.value&&q(e.value)}function ce(e){return q(e)&&"_validator"in e}function fe(e){return typeof e.value!="function"}function tt(e){return q(e)&&"$fields"in e}function Oe({field:e,silent:r=!1}){return Object.entries(e.$rules??{}).map(([t,a])=>r||!a.$valid&&e.$dirty&&!a.$validating?a.$message:null).filter(t=>!!t).reduce((t,a)=>typeof a=="string"?t?.concat([a]):t?.concat(a),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function rt({field:e}){return Object.entries(e.$rules??{}).map(([r,t])=>t.$tooltip).filter(r=>!!r).reduce((r,t)=>typeof t=="string"?r?.concat([t]):r?.concat(t),[])}function at({$dirty:e,customMessages:r,rule:t,ruleKey:a,state:n,path:s,storage:d,$debounce:v}){let c=vue.effectScope(),g,w,G=vue.ref(!1),{$pending:C,$valid:R,$metadata:x,$validating:p}=d.trySetRuleStatusRef(`${s}.${a}`);function F(){g=c.run(()=>{let b=vue.computed(()=>({$invalid:!R.value,$params:D.value,...x.value})),A=vue.computed(()=>fe(t)?typeof t.value.active=="function"?t.value.active(n.value,b.value):!!t.value.active:!0);function I(o){let m="",l=r?r[a]?.[o]:void 0;return l&&(typeof l=="function"?m=l(n.value,b.value):m=l),fe(t)&&(l&&!t.value._patched||(typeof t.value[o]=="function"?m=t.value[o](n.value,b.value):m=t.value[o]??"")),m}let L=vue.computed(()=>{let o=I("message");return Y(o)&&(o="Error",console.warn(`No error message defined for ${s}.${a}`)),o}),y=vue.computed(()=>I("tooltip")),P=vue.computed(()=>fe(t)&&t.value.type?t.value.type:a),T=vue.computed(()=>fe(t)?t.value.validator:t.value),D=vue.computed(()=>typeof t.value=="function"?[]:k(t.value._params??[])),_=vue.computed(()=>`${s}.${P.value}`);return {$active:A,$message:L,$type:P,$validator:T,$params:D,$path:_,$tooltip:y}}),w=vue.watch(g.$params,j,{deep:!0});}F();function u(){R.value=!0,e.value&&(C.value=!0);}async function i(){let b=g.$validator.value,A=b(n.value,...g.$params.value),I=!1,L=n.value;try{u();let y;if(A instanceof Promise?y=await A:y=A,n.value!==L)return !0;if(typeof y=="boolean")I=y;else {let{$valid:P,...T}=y;I=P,x.value=T;}}catch{I=!1;}finally{C.value=!1;}return I}let f=ge(i,v??200);async function j(){try{p.value=!0;let b=!1;if(ce(t.value)&&t.value._async)b=await f();else {let A=g.$validator.value,I=A(n.value,...g.$params.value);if(I instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(I!=null)if(typeof I=="boolean")b=I;else {let{$valid:L,...y}=I;b=L,x.value=y;}}return R.value=b,b}catch{return !1}finally{p.value=!1;}}function V(){R.value=!0,x.value={},C.value=!1,p.value=!1,F();}function O(){w(),c.stop(),c=vue.effectScope();}return vue.reactive({...g,$pending:C,$valid:R,$metadata:x,$haveAsync:G,$validating:p,$validate:j,$unwatch:O,$watch:F,$reset:V})}function be({state:e,rulesDef:r,customMessages:t,path:a,fieldName:n,storage:s,options:d,externalErrors:v,onUnwatch:c,$isArray:g,initialState:w,shortcuts:G}){let C=vue.effectScope(),R,x=[],p=vue.ref(!1),F=vue.ref(!1),u,i,f,j,V=()=>{};function O(){let $=r.value,W=s.checkRuleDeclEntry(a,$);P.value=Object.fromEntries(Object.entries($).filter(([H])=>H.startsWith("$"))),y.value=Object.fromEntries(Object.entries(r.value).filter(([H])=>!H.startsWith("$")).map(([H,U])=>{if(U){let M=vue.toRef(()=>U);return [H,at({$dirty:p,customMessages:t,rule:M,ruleKey:H,state:e,path:a,storage:s,$debounce:P.value.$debounce})]}return []}).filter(H=>!!H.length)),I(),b(),W?.valid!=null&&(p.value=s.getDirtyState(a),p.value&&V()),s.addRuleDeclEntry(a,$);}function b(){V=R.$debounce.value?ge(L,R.$debounce.value??R.$haveAnyAsyncRule?100:0):L;}function A(){y.value&&Object.entries(y.value).forEach(([$,W])=>{W.$unwatch();}),f(),p.value&&s.setDirtyEntry(a,p.value),u?.(),i?.(),C.stop(),C=vue.effectScope(),x.forEach($=>$.stop()),x=[],c?.(),j?.();}function I(){y.value&&Object.entries(y.value).forEach(([$,W])=>{W.$watch();}),R=C.run(()=>{let $=vue.computed(()=>p.value),W=vue.computed(()=>P.value.$debounce),H=vue.computed(()=>P.value.$lazy!=null?P.value.$lazy:vue.unref(d.lazy)),U=vue.computed(()=>E.value===!0?!1:P.value.$rewardEarly!=null?P.value.$rewardEarly:vue.unref(d.rewardEarly)),M=vue.computed(()=>P.value.$clearExternalErrorsOnChange!=null?P.value.$clearExternalErrorsOnChange:vue.unref(d.clearExternalErrorsOnChange)),E=vue.computed(()=>P.value.$autoDirty!=null?P.value.$autoDirty:vue.unref(d.autoDirty)),h=vue.computed(()=>Object.entries(y.value).some(([X,K])=>K.$validating)),Z=vue.computed(()=>ve.value&&!ye.value&&p.value),se=vue.computed(()=>Z.value?Oe({field:{$dirty:p.value,$externalErrors:v?.value,$rules:y.value}}):[]),ue=vue.computed(()=>Z.value?rt({field:{$rules:y.value}}):[]),Ne=vue.computed(()=>Oe({field:{$dirty:p.value,$externalErrors:v?.value,$rules:y.value},silent:!0})),We=vue.computed(()=>!(ve.value||ye.value)),ye=vue.computed(()=>F.value||!U.value?Object.entries(y.value).some(([X,K])=>K.$pending):!1),ve=vue.computed(()=>v?.value?.length?!0:Y(y.value)?!1:!U.value||U.value&&F.value?Object.entries(y.value).some(([X,K])=>!K.$valid):!1),Ue=vue.computed(()=>n),Ee=vue.computed(()=>v?.value?.length||Y(y.value)?!1:p.value&&!Y(e.value)&&!h.value?Object.values(y.value).every(X=>X.$valid&&X.$active):!1),mt=vue.computed(()=>Object.entries(y.value).some(([X,K])=>K.$haveAsync));function yt(){G?.fields&&Object.entries(G.fields).forEach(([X,K])=>{let He=vue.effectScope();Be[X]=He.run(()=>{let Le=vue.ref();return vue.watchEffect(()=>{Le.value=K(vue.reactive({$dirty:p,$externalErrors:v?.value??[],$value:e,$rules:y,$error:Z,$pending:ye,$invalid:ve,$valid:Ee,$errors:se,$ready:We,$silentErrors:Ne,$anyDirty:$,$tooltips:ue,$name:Ue}));}),Le}),x.push(He);});}let Be={};return yt(),vue.watch(Ee,X=>{X&&(F.value=!1);}),{$error:Z,$pending:ye,$invalid:ve,$valid:Ee,$debounce:W,$lazy:H,$errors:se,$ready:We,$silentErrors:Ne,$rewardEarly:U,$autoDirty:E,$clearExternalErrorsOnChange:M,$anyDirty:$,$name:Ue,$haveAnyAsyncRule:mt,$shortcuts:Be,$validating:h,$tooltips:ue}}),u=vue.watch(e,()=>{R.$autoDirty.value&&(p.value||(p.value=!0)),r.value instanceof Function&&O(),(R.$autoDirty.value||R.$rewardEarly.value&&R.$error.value)&&V(),R.$rewardEarly.value!==!0&&R.$clearExternalErrorsOnChange.value&&l();},{deep:g?!0:$e?1:!0}),f=vue.watch(p,()=>{s.setDirtyEntry(a,p.value);}),i=vue.watch(R.$valid,$=>{R.$rewardEarly.value&&$&&(F.value=!1);}),j=vue.watch(R.$haveAnyAsyncRule,b);}function L(){Object.values(y.value).forEach($=>{$.$validate();});}let y=vue.ref(),P=vue.ref();O();function T(){l(),p.value=!1,Object.entries(y.value).forEach(([$,W])=>{W.$reset();}),!R.$lazy.value&&R.$autoDirty.value&&Object.values(y.value).forEach($=>$.$validate());}function D($=!0,W=!1){p.value||(p.value=!0),W&&$?(R.$autoDirty.value||R.$rewardEarly.value&&R.$error.value)&&V():$&&V();}async function _(){try{let $=e.value;if(F.value=!0,!p.value)p.value=!0;else if(R.$autoDirty.value&&p.value&&!R.$pending.value)return {result:!R.$error.value,data:$};return Y(y.value)?{result:!0,data:$}:{result:(await Promise.allSettled(Object.entries(y.value).map(([U,M])=>M.$validate()))).every(U=>U.status==="fulfilled"?U.value===!0:!1),data:$}}catch{return {result:!1,data:e.value}}}function o(){A(),e.value=Qe(e,w),T();}function m($=!0){return p.value?e.value:null}function l(){v?.value?.length&&(v.value=[]);}!R.$lazy.value&&!p.value&&R.$autoDirty.value&&V();let{$shortcuts:S,$validating:N,...J}=R;return vue.reactive({$dirty:p,...J,$externalErrors:v,$value:e,$rules:y,...S,$reset:T,$touch:D,$validate:_,$unwatch:A,$watch:I,$resetAll:o,$extractDirtyFields:m,$clearExternalErrors:l})}function Ae({$id:e,path:r,index:t,options:a,storage:n,stateValue:s,customMessages:d,rules:v,externalErrors:c,initialState:g,shortcuts:w,fieldName:G}){let C=v.$key?v.$key:Se(),R=`${r}.${String(C)}`;typeof s.value=="object"&&s.value!=null&&(s.value.$id?R=`${r}.${s.value.$id}`:Object.defineProperties(s.value,{$id:{value:C,enumerable:!1,configurable:!1,writable:!1}}));let x=de({state:s,rulesDef:vue.toRef(()=>v),customMessages:d,path:R,storage:n,options:a,externalErrors:vue.toRef(c?.value??[],t),initialState:g?.[t],shortcuts:w,fieldName:G});if(x){let p=s.value?.$id;x.$id=p??String(C),n.addArrayStatus(e,x.$id,x);}return x}function ut({state:e,rulesDef:r,customMessages:t,path:a,storage:n,options:s,externalErrors:d,initialState:v,shortcuts:c,fieldName:g}){let w=vue.effectScope(),G,C=vue.effectScope(),R,x=[];if(!Array.isArray(e.value)&&!r.value.$each)return null;let p=vue.ref(),F=vue.ref(e.value),u,i=vue.ref({}),f=n.getCollectionsEntry(a);R=C.run(()=>({isPrimitiveArray:vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(m=>typeof m!="object"):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(m=>ce(m)):!1)})),j(),O();function j(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(p.value=Se(),Object.defineProperties(e.value,{$id:{value:p.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(p.value=e.value.$id)),!R.isPrimitiveArray.value&&(F.value=i.value.$value,Array.isArray(e.value)?f.value=e.value.map((o,m)=>{let l=Ie(r.value.$each,vue.toRef(()=>o),m),S=Ae({$id:p.value,path:a,customMessages:t,rules:l??{},stateValue:vue.toRef(()=>o),index:m,options:s,storage:n,externalErrors:vue.toRef(d?.value??{},"$each"),initialState:v?.[m],shortcuts:c,fieldName:g});return S||null}).filter(o=>!!o):f.value=[],i.value=be({state:e,rulesDef:r,customMessages:t,path:a,storage:n,options:s,externalErrors:vue.toRef(d?.value??{},"$self"),$isArray:!0,initialState:v,shortcuts:c,fieldName:g}));}function V(){if(Array.isArray(e.value)){let o=ee(f.value);f.value=e.value.map((m,l)=>{let S=vue.toRef(()=>m);if(m.$id&&f.value.find(N=>N.$id===m.$id)){let N=n.getArrayStatus(p.value,m.$id);return N?(N.$value=S,N):null}else {let N=Ie(r.value.$each,S,l);if(N){let J=Ae({$id:p.value,path:a,customMessages:t,rules:N,stateValue:S,index:l,options:s,storage:n,externalErrors:vue.toRef(d?.value??{},"$each"),initialState:v?.[l],shortcuts:c,fieldName:g});return J||null}}}).filter(m=>!!m),o.filter(m=>!e.value.find(l=>m.$id===l.$id)).forEach((m,l)=>{n.deleteArrayStatus(p.value,l.toString());});}else f.value=[];}function O(){u=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?j():V();},{deep:$e?1:!0,flush:"pre"}),G=w.run(()=>{let o=vue.computed(()=>i.value.$dirty&&f.value.every(h=>h.$dirty)),m=vue.computed(()=>i.value.$anyDirty||f.value.some(h=>h.$dirty)),l=vue.computed(()=>i.value.$invalid||f.value.some(h=>h.$invalid)),S=vue.computed(()=>(Y(i.value.$rules)?!0:i.value.$valid)&&f.value.every(h=>h.$valid)),N=vue.computed(()=>i.value.$error||f.value.some(h=>h.$error)),J=vue.computed(()=>!(l.value||$.value)),$=vue.computed(()=>i.value.$pending||f.value.some(h=>h.$pending)),W=vue.computed(()=>({$self:i.value.$errors,$each:f.value.map(h=>h.$errors)})),H=vue.computed(()=>({$self:i.value.$silentErrors,$each:f.value.map(h=>h.$silentErrors)})),U=vue.computed(()=>g);function M(){c?.collections&&Object.entries(c?.collections).forEach(([h,Z])=>{let se=vue.effectScope();E[h]=se.run(()=>{let ue=vue.ref();return vue.watchEffect(()=>{ue.value=Z(vue.reactive({$dirty:o,$error:N,$pending:$,$invalid:l,$valid:S,$errors:W,$ready:J,$silentErrors:H,$anyDirty:m,$name:U,$each:f,$field:i,$value:e}));}),ue}),x.push(se);});}let E={};return M(),{$dirty:o,$anyDirty:m,$invalid:l,$valid:S,$error:N,$pending:$,$errors:W,$silentErrors:H,$ready:J,$name:U,$shortcuts:E}}),R.isPrimitiveArray.value&&(console.warn(`${a} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),u());}function b(){u&&u(),i.value&&i.value.$unwatch(),f.value&&f.value.forEach(o=>{"$dirty"in o&&o.$unwatch();}),w.stop(),w=vue.effectScope(),C.stop(),C=vue.effectScope(!0),x.forEach(o=>o.stop()),x=[];}function A(o=!0,m=!1){i.value.$touch(o,m),f.value.forEach(l=>{l.$touch(o,m);});}function I(){i.value.$reset(),f.value.forEach(o=>{o.$reset();});}async function L(){let o=e.value;try{return {result:(await Promise.allSettled([i.value.$validate(),...f.value.map(S=>S.$validate())])).every(S=>S.status==="fulfilled"?S.value.result===!0:!1),data:o}}catch{return {result:!1,data:o}}}function y(){i.value.$clearExternalErrors(),f.value.forEach(o=>{o.$clearExternalErrors();});}function P(o=!0){let m=f.value.map(l=>{if(tt(l))return l.$extractDirtyFields(o)});return o&&(m=m.filter(l=>q(l)?!Y(l):!!l)),m}function T(){b(),Xe(e,v),I();}let{$shortcuts:D,..._}=G;return vue.reactive({$field:i,..._,...D,$each:f,$value:e,$validate:L,$unwatch:b,$watch:O,$touch:A,$reset:I,$resetAll:T,$extractDirtyFields:P,$clearExternalErrors:y})}function Fe({rulesDef:e,state:r,path:t="",rootRules:a,externalErrors:n,validationGroups:s,initialState:d,fieldName:v,...c}){let g=vue.effectScope(),w,G=[],C=null,R=null,x=null;async function F(T=!0){let D=Object.entries(e.value),_=Object.fromEntries(D.filter(([l,S])=>!!S).map(([l,S])=>{if(S){let N=vue.toRef(r.value,l),J=vue.toRef(()=>S),$=vue.toRef(n?.value??{},l);return [l,de({state:N,rulesDef:J,path:t?`${t}.${l}`:l,externalErrors:$,initialState:d?.[l],fieldName:l,...c})]}return []})),o=Object.fromEntries(Object.entries(vue.unref(n)??{}).filter(([l,S])=>!(l in e.value)&&!!S).map(([l])=>{let S=vue.toRef(r.value,l);return [l,de({state:S,rulesDef:vue.computed(()=>({})),path:t?`${t}.${l}`:l,externalErrors:vue.toRef(n?.value??{},l),initialState:d?.[l],fieldName:l,...c})]})),m=Object.fromEntries(Object.entries(r.value).filter(([l])=>!(l in e.value)&&!(l in(o.value??{}))).map(([l])=>{let S=vue.toRef(r.value,l);return [l,de({state:S,rulesDef:vue.computed(()=>({})),path:t?`${t}.${l}`:l,externalErrors:vue.toRef(n?.value??{},l),initialState:d?.[l],fieldName:l,...c})]}));u.value={..._,...o,...m},T&&V();}let u=c.storage.getFieldsEntry(t);F();function i(){R?.(),Object.values(u.value).forEach(T=>{T.$reset();}),j();}function f(T=!0,D=!1){Object.values(u.value).forEach(_=>{_.$touch(T,D);});}function j(){n?.value&&(R=vue.watch(n,()=>{O(),F();},{deep:!0}));}function V(){a&&(C=vue.watch(a,()=>{O(),F();},{deep:!0,flush:"post"}),j()),x=vue.watch(r,()=>{O(),F(),f(!0,!0);},{flush:"sync"}),w=g.run(()=>{let T=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([M,E])=>E?.$dirty)),D=vue.computed(()=>Object.entries(u.value).some(([M,E])=>E?.$dirty)),_=vue.computed(()=>Object.entries(u.value).some(([M,E])=>E?.$invalid)),o=vue.computed(()=>Object.entries(u.value).every(([M,E])=>E?.$valid)),m=vue.computed(()=>D.value&&!S.value&&_.value),l=vue.computed(()=>vue.unref(c.options.autoDirty)?D.value&&!(_.value||S.value):!(_.value||S.value)),S=vue.computed(()=>Object.entries(u.value).some(([M,E])=>E?.$pending)),N=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([M,E])=>[M,E?.$errors]))),J=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([M,E])=>[M,E?.$silentErrors]))),$=vue.computed(()=>v);function W(){c.shortcuts?.nested&&Object.entries(c.shortcuts.nested).forEach(([M,E])=>{let h=vue.effectScope();U[M]=h.run(()=>{let Z=vue.ref();return vue.watchEffect(()=>{Z.value=E(vue.reactive({$dirty:T,$value:r,$error:m,$pending:S,$invalid:_,$valid:o,$ready:l,$anyDirty:D,$name:$,$silentErrors:J,$errors:N,$fields:u}));}),Z}),G.push(h);});}let H=vue.computed(()=>s?Object.fromEntries(Object.entries(s?.(u.value)??{}).map(([M,E])=>E.length?[M,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(h=>[h,ke(E,h)])),...Object.fromEntries(["$errors","$silentErrors"].map(h=>[h,qe(E,h)]))}]:[])):{}),U={};return W(),{$dirty:T,$anyDirty:D,$invalid:_,$valid:o,$error:m,$pending:S,$errors:N,$silentErrors:J,$ready:l,$name:$,$shortcuts:U,$groups:H}});}function O(){C?.(),R?.(),x?.(),G.forEach(T=>T.stop()),G=[],u.value&&Object.entries(u.value).forEach(([T,D])=>{D.$unwatch();});}function b(){Object.entries(u.value).forEach(([T,D])=>{D.$clearExternalErrors();});}function A(){O(),ie(r,d??{}),F(!1),i(),V();}function I(T=!0){let D=Object.entries(u.value).map(([_,o])=>[_,o.$extractDirtyFields(T)]);return T&&(D=D.filter(([_,o])=>q(o)?!Y(o):Array.isArray(o)?o.length:!!o)),Object.fromEntries(D)}async function L(){try{let T=r.value;return {result:(await Promise.allSettled(Object.values(u.value).map(o=>o.$validate()))).every(o=>o.status==="fulfilled"?o.value.result===!0:!1),data:T}}catch{return {result:!1,data:r.value}}}let{$shortcuts:y,...P}=w;return vue.reactive({...P,...y,$fields:u,$value:r,$resetAll:A,$reset:i,$touch:f,$validate:L,$unwatch:O,$watch:V,$clearExternalErrors:b,$extractDirtyFields:I})}function de({rulesDef:e,externalErrors:r,...t}){return Ke(e,t.state)?ut({rulesDef:e,externalErrors:r,...t}):Ze(t.state,e)&&Ye(t.state)?Fe({rulesDef:e,externalErrors:r,...t}):et(e)?be({rulesDef:e,externalErrors:r,...t}):null}function je({initialState:e,options:r,scopeRules:t,state:a,customRules:n,shortcuts:s}){let d=Pe();return vue.reactive(Fe({rootRules:t,rulesDef:t,state:a,customMessages:n?.(),storage:d,options:r,externalErrors:r.externalErrors,validationGroups:r.validationGroups,initialState:e,shortcuts:s,fieldName:"root",path:""}))}function Ve(e,r,t){let a={autoDirty:r?.autoDirty??!0,lazy:r?.lazy??!1,rewardEarly:r?.rewardEarly??!1,clearExternalErrorsOnChange:r?.clearExternalErrorsOnChange??!0};function n(s,d,v){let c=vue.isRef(d)?d:vue.computed(typeof d=="function"?d:()=>d),g={...a,...v},w=vue.isRef(s)?s:vue.ref(s),G=ee(vue.toRaw(w.value));return {r$:je({scopeRules:c,state:w,options:g,initialState:G,customRules:e,shortcuts:t})}}return n}var pt=Ve();function _e(){function e(r,t){return t}return e}var Ge=_e();function dt({rules:e,modifiers:r,shortcuts:t}){let a=Ve(e,r,t),n=_e();return {useRegle:a,inferRules:n}}
|
|
2
|
+
exports.InternalRuleType=xe;exports.createRule=Ce;exports.defineRegleConfig=dt;exports.inferRules=Ge;exports.unwrapRuleParameters=k;exports.useRegle=pt;
|
package/dist/index.d.cts
CHANGED
|
@@ -7,6 +7,7 @@ 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 ExtendOnlyRealRecord<T extends unknown> = NonNullable<T> extends File | Date ? false : NonNullable<T> extends Record<string, any> ? true : false;
|
|
10
11
|
type OmitByType<T extends Record<string, any>, U> = {
|
|
11
12
|
[K in keyof T as T[K] extends U ? never : K]: T[K];
|
|
12
13
|
};
|
|
@@ -310,14 +311,22 @@ type CheckDeepExact<T, U> = [U] extends [never] ? false : T extends RegleCollect
|
|
|
310
311
|
type DeepReactiveState<T extends Record<string, any>> = {
|
|
311
312
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
312
313
|
};
|
|
313
|
-
type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>> = [unknown] extends [TState] ? {} : {
|
|
314
|
-
[K in keyof TState as
|
|
315
|
-
SafeProperty<TState[K], TRules[K]>
|
|
316
|
-
] extends [never] ? TState[K] : SafeProperty<TState[K], TRules[K]>;
|
|
314
|
+
type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>> = [unknown] extends [TState] ? {} : Prettify<{
|
|
315
|
+
[K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? K : never]?: SafeProperty<TState[K], TRules[K]>;
|
|
317
316
|
} & {
|
|
318
|
-
[K in keyof TState as
|
|
319
|
-
}
|
|
320
|
-
type
|
|
317
|
+
[K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? never : K]-?: NonNullable<SafeProperty<TState[K], TRules[K]>>;
|
|
318
|
+
}>;
|
|
319
|
+
type FieldHaveRequiredRule<TRule extends RegleRuleDecl> = unknown extends TRule['required'] ? false : TRule['required'] extends undefined ? false : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? true : false : false;
|
|
320
|
+
type ObjectHaveAtLeastOneRequiredField<TState, TRule extends ReglePartialRuleTree<any, any>> = TState extends Maybe<TState> ? {
|
|
321
|
+
[K in keyof TRule]: TRule[K] extends RegleRuleDecl ? FieldHaveRequiredRule<TRule[K]> : false;
|
|
322
|
+
}[keyof TRule] : true;
|
|
323
|
+
type ArrayHaveAtLeastOneRequiredField<TState, TRule extends RegleCollectionRuleDefinition<any, any>> = TState extends Maybe<TState> ? {
|
|
324
|
+
[K in keyof ExtractFromGetter<TRule['$each']>]: ExtractFromGetter<TRule['$each']>[K] extends RegleRuleDecl ? FieldHaveRequiredRule<ExtractFromGetter<TRule['$each']>[K]> : false;
|
|
325
|
+
}[keyof ExtractFromGetter<TRule['$each']>] : true;
|
|
326
|
+
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = [unknown] extends [TState] ? unknown : TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, ExtractFromGetter<TRule['$each']>>[] : TState : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? DeepSafeFormState<NonNullable<TState> extends Record<string, any> ? NonNullable<TState> : {}, TRule> : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends true ? TState : Maybe<TState> : TState : TState;
|
|
327
|
+
type IsPropertyOutputRequired<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = [
|
|
328
|
+
unknown
|
|
329
|
+
] extends [TState] ? unknown : TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? ArrayHaveAtLeastOneRequiredField<TState, TRule> extends true ? true : false : false : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? ObjectHaveAtLeastOneRequiredField<TState, TRule> extends true ? true : false : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends true ? true : false : false : false;
|
|
321
330
|
type SafeFieldProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? Maybe<TState> : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? Maybe<TState> : Maybe<TState> : Maybe<TState> : Maybe<TState>;
|
|
322
331
|
|
|
323
332
|
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TValidationGroups, TShortcuts>;
|
|
@@ -349,10 +358,7 @@ type CreateFn<T extends any[]> = (...args: T) => any;
|
|
|
349
358
|
type RegleUniversalParams<T extends any[] = [], F = CreateFn<T>> = [T] extends [[]] ? [] : Parameters<F extends (...args: infer Args) => any ? (...args: {
|
|
350
359
|
[K in keyof Args]: ParamDecl<Args[K]>;
|
|
351
360
|
}) => any : never>;
|
|
352
|
-
type UnwrapRegleUniversalParams<T extends ParamDecl[] = [], F = CreateFn<T>> = [T] extends [
|
|
353
|
-
[
|
|
354
|
-
]
|
|
355
|
-
] ? [] : Parameters<F extends (...args: infer Args) => any ? (...args: {
|
|
361
|
+
type UnwrapRegleUniversalParams<T extends ParamDecl[] = [], F = CreateFn<T>> = [T] extends [[]] ? [] : Parameters<F extends (...args: infer Args) => any ? (...args: {
|
|
356
362
|
[K in keyof Args]: Args[K] extends ParamDecl<infer U> ? U : Args[K];
|
|
357
363
|
}) => any : never>;
|
|
358
364
|
|
|
@@ -363,6 +369,7 @@ interface RegleInternalRuleDefs<TValue extends any = any, TParams extends any[]
|
|
|
363
369
|
_validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
|
|
364
370
|
_message: string | string[] | ((value: Maybe<TValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[]);
|
|
365
371
|
_active?: boolean | ((value: Maybe<TValue>, metadata: PossibleRegleRuleMetadataConsumer) => boolean);
|
|
372
|
+
_tooltip?: string | string[] | ((value: Maybe<TValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[]);
|
|
366
373
|
_type?: string;
|
|
367
374
|
_patched: boolean;
|
|
368
375
|
_params?: RegleUniversalParams<TParams>;
|
|
@@ -378,8 +385,9 @@ declare enum InternalRuleType {
|
|
|
378
385
|
* */
|
|
379
386
|
interface RegleRuleDefinition<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = boolean, TMetaData extends RegleRuleMetadataDefinition = RegleRuleMetadataDefinition, TFilteredValue extends any = TValue extends Date & File & infer M ? M : TValue> extends RegleInternalRuleDefs<TFilteredValue, TParams, TAsync, TMetaData> {
|
|
380
387
|
validator: RegleRuleDefinitionProcessor<TFilteredValue, TParams, TAsync extends false ? TMetaData : Promise<TMetaData>>;
|
|
381
|
-
message:
|
|
382
|
-
active:
|
|
388
|
+
message: (value: Maybe<TFilteredValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[];
|
|
389
|
+
active: (value: Maybe<TFilteredValue>, metadata: PossibleRegleRuleMetadataConsumer) => boolean;
|
|
390
|
+
tooltip: (value: Maybe<TFilteredValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[];
|
|
383
391
|
type?: string;
|
|
384
392
|
exec: (value: Maybe<TFilteredValue>) => TAsync extends false ? TMetaData : Promise<TMetaData>;
|
|
385
393
|
}
|
|
@@ -434,15 +442,17 @@ type RegleCollectionRuleDefinition<TValue = any[], TCustomRules extends Partial<
|
|
|
434
442
|
$each: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>>;
|
|
435
443
|
} & FieldRegleBehaviourOptions);
|
|
436
444
|
|
|
445
|
+
type RegleInitPropertyGetter<TValue, TReturn, TParams extends [...any[]], TMetadata extends RegleRuleMetadataDefinition> = TReturn | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => TReturn);
|
|
437
446
|
/**
|
|
438
447
|
* @argument
|
|
439
448
|
* createRule arguments options
|
|
440
449
|
*/
|
|
441
450
|
interface RegleRuleInit<TValue extends any, TParams extends [...any[]] = [], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition> = boolean, TMetadata extends RegleRuleMetadataDefinition = RegleRuleMetadataDefinition, TAsync extends boolean = TReturn extends Promise<any> ? true : false> {
|
|
442
|
-
type?: string;
|
|
443
451
|
validator: (value: Maybe<TValue>, ...args: TParams) => TReturn;
|
|
444
|
-
message: string | string[]
|
|
445
|
-
active?:
|
|
452
|
+
message: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
|
|
453
|
+
active?: RegleInitPropertyGetter<TValue, boolean, TParams, TMetadata>;
|
|
454
|
+
tooltip?: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
|
|
455
|
+
type?: string;
|
|
446
456
|
}
|
|
447
457
|
/**
|
|
448
458
|
* @argument
|
|
@@ -450,8 +460,9 @@ interface RegleRuleInit<TValue extends any, TParams extends [...any[]] = [], TRe
|
|
|
450
460
|
*/
|
|
451
461
|
interface RegleRuleCore<TValue extends any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> {
|
|
452
462
|
validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
|
|
453
|
-
message:
|
|
454
|
-
active?:
|
|
463
|
+
message: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
|
|
464
|
+
active?: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
|
|
465
|
+
tooltip?: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
|
|
455
466
|
type?: string;
|
|
456
467
|
}
|
|
457
468
|
|
|
@@ -491,24 +502,15 @@ type DefaultValidators = {
|
|
|
491
502
|
], false, boolean>;
|
|
492
503
|
integer: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
493
504
|
ipAddress: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
494
|
-
macAddress: RegleRuleWithParamsDefinition<string, [
|
|
495
|
-
|
|
496
|
-
], false, boolean>;
|
|
497
|
-
maxLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [
|
|
498
|
-
count: number
|
|
499
|
-
], false, boolean>;
|
|
505
|
+
macAddress: RegleRuleWithParamsDefinition<string, [separator?: string | undefined], false, boolean>;
|
|
506
|
+
maxLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [count: number], false, boolean>;
|
|
500
507
|
maxValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
|
|
501
|
-
minLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [
|
|
502
|
-
count: number
|
|
503
|
-
], false, boolean>;
|
|
508
|
+
minLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [count: number], false, boolean>;
|
|
504
509
|
minValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
|
|
505
510
|
numeric: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
506
511
|
regex: RegleRuleWithParamsDefinition<string, [regexp: RegExp], false, boolean>;
|
|
507
512
|
required: RegleRuleDefinition<unknown, []>;
|
|
508
|
-
sameAs: RegleRuleWithParamsDefinition<unknown, [
|
|
509
|
-
target: unknown,
|
|
510
|
-
otherName?: string
|
|
511
|
-
], false, boolean>;
|
|
513
|
+
sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown, otherName?: string], false, boolean>;
|
|
512
514
|
startsWith: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
|
|
513
515
|
url: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
514
516
|
};
|
|
@@ -581,15 +583,20 @@ type RegleExternalErrorTree<TState = Record<string, any> | any[]> = PartialDeep<
|
|
|
581
583
|
}>;
|
|
582
584
|
type RegleValidationErrors<TState extends Record<string, any> | any[] | unknown = never> = NonNullable<TState> extends Array<infer U extends Record<string, any>> ? RegleCollectionErrors<U> : NonNullable<TState> extends Date | File ? string[] : NonNullable<TState> extends Record<string, any> ? RegleErrorTree<TState> : string[];
|
|
583
585
|
type RegleCollectionErrors<TState extends Record<string, any>> = {
|
|
584
|
-
readonly $
|
|
586
|
+
readonly $self: string[];
|
|
585
587
|
readonly $each: RegleValidationErrors<TState>[];
|
|
586
588
|
};
|
|
589
|
+
type PartialFormState<TState extends Record<string, any>> = [unknown] extends [TState] ? {} : Prettify<{
|
|
590
|
+
[K in keyof TState as ExtendOnlyRealRecord<TState[K]> extends true ? never : TState[K] extends Array<any> ? never : K]?: Maybe<TState[K]>;
|
|
591
|
+
} & {
|
|
592
|
+
[K in keyof TState as ExtendOnlyRealRecord<TState[K]> extends true ? K : TState[K] extends Array<any> ? K : never]: NonNullable<TState[K]> extends Array<infer U extends Record<string, any>> ? PartialFormState<U>[] : PartialFormState<TState[K]>;
|
|
593
|
+
}>;
|
|
587
594
|
type RegleResult<Data extends Record<string, any> | any[] | unknown, TRules extends ReglePartialRuleTree<any>> = {
|
|
588
595
|
result: false;
|
|
589
|
-
data: Data
|
|
596
|
+
data: NonNullable<Data> extends Date | File ? Maybe<Data> : NonNullable<Data> extends Array<infer U extends Record<string, any>> ? PartialFormState<U>[] : NonNullable<Data> extends Record<string, any> ? PartialFormState<NonNullable<Data>> : Maybe<Data>;
|
|
590
597
|
} | {
|
|
591
598
|
result: true;
|
|
592
|
-
data: Data extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, TRules>[] : Data extends Date | File ? SafeFieldProperty<Data, TRules> : Data extends Record<string, any> ?
|
|
599
|
+
data: Data extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, TRules>[] : Data extends Date | File ? SafeFieldProperty<Data, TRules> : Data extends Record<string, any> ? DeepSafeFormState<Data, TRules> : SafeFieldProperty<Data, TRules>;
|
|
593
600
|
};
|
|
594
601
|
|
|
595
602
|
/**
|
|
@@ -628,6 +635,7 @@ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormProperty
|
|
|
628
635
|
readonly $errors: string[];
|
|
629
636
|
readonly $silentErrors: string[];
|
|
630
637
|
readonly $externalErrors: string[];
|
|
638
|
+
readonly $tooltips: string[];
|
|
631
639
|
$extractDirtyFields: (filterNullishValues?: boolean) => Maybe<TState>;
|
|
632
640
|
$validate: () => Promise<RegleResult<TState, TRules>>;
|
|
633
641
|
readonly $rules: {
|
|
@@ -650,7 +658,7 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
650
658
|
readonly $name: string;
|
|
651
659
|
$id?: string;
|
|
652
660
|
$value: UnwrapNestedRefs<TValue>;
|
|
653
|
-
$touch(runCommit?: boolean): void;
|
|
661
|
+
$touch(runCommit?: boolean, withConditions?: boolean): void;
|
|
654
662
|
$reset(): void;
|
|
655
663
|
$resetAll: () => void;
|
|
656
664
|
$unwatch(): void;
|
|
@@ -663,6 +671,7 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
663
671
|
type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata extends RegleRuleMetadataDefinition = any> = {
|
|
664
672
|
readonly $type: string;
|
|
665
673
|
readonly $message: string | string[];
|
|
674
|
+
readonly $tooltip: string | string[];
|
|
666
675
|
readonly $active: boolean;
|
|
667
676
|
readonly $valid: boolean;
|
|
668
677
|
readonly $pending: boolean;
|
|
@@ -679,7 +688,7 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
679
688
|
/**
|
|
680
689
|
* @public
|
|
681
690
|
*/
|
|
682
|
-
type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePartialRuleTree<ArrayElement<TState>> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never, TShortcuts extends RegleShortcutDefinition = {}> = Omit<
|
|
691
|
+
type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePartialRuleTree<ArrayElement<TState>> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never, TShortcuts extends RegleShortcutDefinition = {}> = Omit<RegleCommonStatus<TState>, '$value'> & {
|
|
683
692
|
$value: Maybe<TState>;
|
|
684
693
|
readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number, TShortcuts>>;
|
|
685
694
|
readonly $field: RegleFieldStatus<TState, TFieldRule, TShortcuts>;
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ 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 ExtendOnlyRealRecord<T extends unknown> = NonNullable<T> extends File | Date ? false : NonNullable<T> extends Record<string, any> ? true : false;
|
|
10
11
|
type OmitByType<T extends Record<string, any>, U> = {
|
|
11
12
|
[K in keyof T as T[K] extends U ? never : K]: T[K];
|
|
12
13
|
};
|
|
@@ -310,14 +311,22 @@ type CheckDeepExact<T, U> = [U] extends [never] ? false : T extends RegleCollect
|
|
|
310
311
|
type DeepReactiveState<T extends Record<string, any>> = {
|
|
311
312
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
312
313
|
};
|
|
313
|
-
type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>> = [unknown] extends [TState] ? {} : {
|
|
314
|
-
[K in keyof TState as
|
|
315
|
-
SafeProperty<TState[K], TRules[K]>
|
|
316
|
-
] extends [never] ? TState[K] : SafeProperty<TState[K], TRules[K]>;
|
|
314
|
+
type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>> = [unknown] extends [TState] ? {} : Prettify<{
|
|
315
|
+
[K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? K : never]?: SafeProperty<TState[K], TRules[K]>;
|
|
317
316
|
} & {
|
|
318
|
-
[K in keyof TState as
|
|
319
|
-
}
|
|
320
|
-
type
|
|
317
|
+
[K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? never : K]-?: NonNullable<SafeProperty<TState[K], TRules[K]>>;
|
|
318
|
+
}>;
|
|
319
|
+
type FieldHaveRequiredRule<TRule extends RegleRuleDecl> = unknown extends TRule['required'] ? false : TRule['required'] extends undefined ? false : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? true : false : false;
|
|
320
|
+
type ObjectHaveAtLeastOneRequiredField<TState, TRule extends ReglePartialRuleTree<any, any>> = TState extends Maybe<TState> ? {
|
|
321
|
+
[K in keyof TRule]: TRule[K] extends RegleRuleDecl ? FieldHaveRequiredRule<TRule[K]> : false;
|
|
322
|
+
}[keyof TRule] : true;
|
|
323
|
+
type ArrayHaveAtLeastOneRequiredField<TState, TRule extends RegleCollectionRuleDefinition<any, any>> = TState extends Maybe<TState> ? {
|
|
324
|
+
[K in keyof ExtractFromGetter<TRule['$each']>]: ExtractFromGetter<TRule['$each']>[K] extends RegleRuleDecl ? FieldHaveRequiredRule<ExtractFromGetter<TRule['$each']>[K]> : false;
|
|
325
|
+
}[keyof ExtractFromGetter<TRule['$each']>] : true;
|
|
326
|
+
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = [unknown] extends [TState] ? unknown : TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, ExtractFromGetter<TRule['$each']>>[] : TState : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? DeepSafeFormState<NonNullable<TState> extends Record<string, any> ? NonNullable<TState> : {}, TRule> : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends true ? TState : Maybe<TState> : TState : TState;
|
|
327
|
+
type IsPropertyOutputRequired<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = [
|
|
328
|
+
unknown
|
|
329
|
+
] extends [TState] ? unknown : TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? ArrayHaveAtLeastOneRequiredField<TState, TRule> extends true ? true : false : false : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? ObjectHaveAtLeastOneRequiredField<TState, TRule> extends true ? true : false : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends true ? true : false : false : false;
|
|
321
330
|
type SafeFieldProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? Maybe<TState> : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? Maybe<TState> : Maybe<TState> : Maybe<TState> : Maybe<TState>;
|
|
322
331
|
|
|
323
332
|
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TValidationGroups, TShortcuts>;
|
|
@@ -349,10 +358,7 @@ type CreateFn<T extends any[]> = (...args: T) => any;
|
|
|
349
358
|
type RegleUniversalParams<T extends any[] = [], F = CreateFn<T>> = [T] extends [[]] ? [] : Parameters<F extends (...args: infer Args) => any ? (...args: {
|
|
350
359
|
[K in keyof Args]: ParamDecl<Args[K]>;
|
|
351
360
|
}) => any : never>;
|
|
352
|
-
type UnwrapRegleUniversalParams<T extends ParamDecl[] = [], F = CreateFn<T>> = [T] extends [
|
|
353
|
-
[
|
|
354
|
-
]
|
|
355
|
-
] ? [] : Parameters<F extends (...args: infer Args) => any ? (...args: {
|
|
361
|
+
type UnwrapRegleUniversalParams<T extends ParamDecl[] = [], F = CreateFn<T>> = [T] extends [[]] ? [] : Parameters<F extends (...args: infer Args) => any ? (...args: {
|
|
356
362
|
[K in keyof Args]: Args[K] extends ParamDecl<infer U> ? U : Args[K];
|
|
357
363
|
}) => any : never>;
|
|
358
364
|
|
|
@@ -363,6 +369,7 @@ interface RegleInternalRuleDefs<TValue extends any = any, TParams extends any[]
|
|
|
363
369
|
_validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
|
|
364
370
|
_message: string | string[] | ((value: Maybe<TValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[]);
|
|
365
371
|
_active?: boolean | ((value: Maybe<TValue>, metadata: PossibleRegleRuleMetadataConsumer) => boolean);
|
|
372
|
+
_tooltip?: string | string[] | ((value: Maybe<TValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[]);
|
|
366
373
|
_type?: string;
|
|
367
374
|
_patched: boolean;
|
|
368
375
|
_params?: RegleUniversalParams<TParams>;
|
|
@@ -378,8 +385,9 @@ declare enum InternalRuleType {
|
|
|
378
385
|
* */
|
|
379
386
|
interface RegleRuleDefinition<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = boolean, TMetaData extends RegleRuleMetadataDefinition = RegleRuleMetadataDefinition, TFilteredValue extends any = TValue extends Date & File & infer M ? M : TValue> extends RegleInternalRuleDefs<TFilteredValue, TParams, TAsync, TMetaData> {
|
|
380
387
|
validator: RegleRuleDefinitionProcessor<TFilteredValue, TParams, TAsync extends false ? TMetaData : Promise<TMetaData>>;
|
|
381
|
-
message:
|
|
382
|
-
active:
|
|
388
|
+
message: (value: Maybe<TFilteredValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[];
|
|
389
|
+
active: (value: Maybe<TFilteredValue>, metadata: PossibleRegleRuleMetadataConsumer) => boolean;
|
|
390
|
+
tooltip: (value: Maybe<TFilteredValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[];
|
|
383
391
|
type?: string;
|
|
384
392
|
exec: (value: Maybe<TFilteredValue>) => TAsync extends false ? TMetaData : Promise<TMetaData>;
|
|
385
393
|
}
|
|
@@ -434,15 +442,17 @@ type RegleCollectionRuleDefinition<TValue = any[], TCustomRules extends Partial<
|
|
|
434
442
|
$each: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>>;
|
|
435
443
|
} & FieldRegleBehaviourOptions);
|
|
436
444
|
|
|
445
|
+
type RegleInitPropertyGetter<TValue, TReturn, TParams extends [...any[]], TMetadata extends RegleRuleMetadataDefinition> = TReturn | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => TReturn);
|
|
437
446
|
/**
|
|
438
447
|
* @argument
|
|
439
448
|
* createRule arguments options
|
|
440
449
|
*/
|
|
441
450
|
interface RegleRuleInit<TValue extends any, TParams extends [...any[]] = [], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition> = boolean, TMetadata extends RegleRuleMetadataDefinition = RegleRuleMetadataDefinition, TAsync extends boolean = TReturn extends Promise<any> ? true : false> {
|
|
442
|
-
type?: string;
|
|
443
451
|
validator: (value: Maybe<TValue>, ...args: TParams) => TReturn;
|
|
444
|
-
message: string | string[]
|
|
445
|
-
active?:
|
|
452
|
+
message: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
|
|
453
|
+
active?: RegleInitPropertyGetter<TValue, boolean, TParams, TMetadata>;
|
|
454
|
+
tooltip?: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
|
|
455
|
+
type?: string;
|
|
446
456
|
}
|
|
447
457
|
/**
|
|
448
458
|
* @argument
|
|
@@ -450,8 +460,9 @@ interface RegleRuleInit<TValue extends any, TParams extends [...any[]] = [], TRe
|
|
|
450
460
|
*/
|
|
451
461
|
interface RegleRuleCore<TValue extends any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> {
|
|
452
462
|
validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
|
|
453
|
-
message:
|
|
454
|
-
active?:
|
|
463
|
+
message: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
|
|
464
|
+
active?: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
|
|
465
|
+
tooltip?: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
|
|
455
466
|
type?: string;
|
|
456
467
|
}
|
|
457
468
|
|
|
@@ -491,24 +502,15 @@ type DefaultValidators = {
|
|
|
491
502
|
], false, boolean>;
|
|
492
503
|
integer: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
493
504
|
ipAddress: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
494
|
-
macAddress: RegleRuleWithParamsDefinition<string, [
|
|
495
|
-
|
|
496
|
-
], false, boolean>;
|
|
497
|
-
maxLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [
|
|
498
|
-
count: number
|
|
499
|
-
], false, boolean>;
|
|
505
|
+
macAddress: RegleRuleWithParamsDefinition<string, [separator?: string | undefined], false, boolean>;
|
|
506
|
+
maxLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [count: number], false, boolean>;
|
|
500
507
|
maxValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
|
|
501
|
-
minLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [
|
|
502
|
-
count: number
|
|
503
|
-
], false, boolean>;
|
|
508
|
+
minLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [count: number], false, boolean>;
|
|
504
509
|
minValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
|
|
505
510
|
numeric: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
506
511
|
regex: RegleRuleWithParamsDefinition<string, [regexp: RegExp], false, boolean>;
|
|
507
512
|
required: RegleRuleDefinition<unknown, []>;
|
|
508
|
-
sameAs: RegleRuleWithParamsDefinition<unknown, [
|
|
509
|
-
target: unknown,
|
|
510
|
-
otherName?: string
|
|
511
|
-
], false, boolean>;
|
|
513
|
+
sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown, otherName?: string], false, boolean>;
|
|
512
514
|
startsWith: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
|
|
513
515
|
url: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
514
516
|
};
|
|
@@ -581,15 +583,20 @@ type RegleExternalErrorTree<TState = Record<string, any> | any[]> = PartialDeep<
|
|
|
581
583
|
}>;
|
|
582
584
|
type RegleValidationErrors<TState extends Record<string, any> | any[] | unknown = never> = NonNullable<TState> extends Array<infer U extends Record<string, any>> ? RegleCollectionErrors<U> : NonNullable<TState> extends Date | File ? string[] : NonNullable<TState> extends Record<string, any> ? RegleErrorTree<TState> : string[];
|
|
583
585
|
type RegleCollectionErrors<TState extends Record<string, any>> = {
|
|
584
|
-
readonly $
|
|
586
|
+
readonly $self: string[];
|
|
585
587
|
readonly $each: RegleValidationErrors<TState>[];
|
|
586
588
|
};
|
|
589
|
+
type PartialFormState<TState extends Record<string, any>> = [unknown] extends [TState] ? {} : Prettify<{
|
|
590
|
+
[K in keyof TState as ExtendOnlyRealRecord<TState[K]> extends true ? never : TState[K] extends Array<any> ? never : K]?: Maybe<TState[K]>;
|
|
591
|
+
} & {
|
|
592
|
+
[K in keyof TState as ExtendOnlyRealRecord<TState[K]> extends true ? K : TState[K] extends Array<any> ? K : never]: NonNullable<TState[K]> extends Array<infer U extends Record<string, any>> ? PartialFormState<U>[] : PartialFormState<TState[K]>;
|
|
593
|
+
}>;
|
|
587
594
|
type RegleResult<Data extends Record<string, any> | any[] | unknown, TRules extends ReglePartialRuleTree<any>> = {
|
|
588
595
|
result: false;
|
|
589
|
-
data: Data
|
|
596
|
+
data: NonNullable<Data> extends Date | File ? Maybe<Data> : NonNullable<Data> extends Array<infer U extends Record<string, any>> ? PartialFormState<U>[] : NonNullable<Data> extends Record<string, any> ? PartialFormState<NonNullable<Data>> : Maybe<Data>;
|
|
590
597
|
} | {
|
|
591
598
|
result: true;
|
|
592
|
-
data: Data extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, TRules>[] : Data extends Date | File ? SafeFieldProperty<Data, TRules> : Data extends Record<string, any> ?
|
|
599
|
+
data: Data extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, TRules>[] : Data extends Date | File ? SafeFieldProperty<Data, TRules> : Data extends Record<string, any> ? DeepSafeFormState<Data, TRules> : SafeFieldProperty<Data, TRules>;
|
|
593
600
|
};
|
|
594
601
|
|
|
595
602
|
/**
|
|
@@ -628,6 +635,7 @@ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormProperty
|
|
|
628
635
|
readonly $errors: string[];
|
|
629
636
|
readonly $silentErrors: string[];
|
|
630
637
|
readonly $externalErrors: string[];
|
|
638
|
+
readonly $tooltips: string[];
|
|
631
639
|
$extractDirtyFields: (filterNullishValues?: boolean) => Maybe<TState>;
|
|
632
640
|
$validate: () => Promise<RegleResult<TState, TRules>>;
|
|
633
641
|
readonly $rules: {
|
|
@@ -650,7 +658,7 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
650
658
|
readonly $name: string;
|
|
651
659
|
$id?: string;
|
|
652
660
|
$value: UnwrapNestedRefs<TValue>;
|
|
653
|
-
$touch(runCommit?: boolean): void;
|
|
661
|
+
$touch(runCommit?: boolean, withConditions?: boolean): void;
|
|
654
662
|
$reset(): void;
|
|
655
663
|
$resetAll: () => void;
|
|
656
664
|
$unwatch(): void;
|
|
@@ -663,6 +671,7 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
663
671
|
type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata extends RegleRuleMetadataDefinition = any> = {
|
|
664
672
|
readonly $type: string;
|
|
665
673
|
readonly $message: string | string[];
|
|
674
|
+
readonly $tooltip: string | string[];
|
|
666
675
|
readonly $active: boolean;
|
|
667
676
|
readonly $valid: boolean;
|
|
668
677
|
readonly $pending: boolean;
|
|
@@ -679,7 +688,7 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
679
688
|
/**
|
|
680
689
|
* @public
|
|
681
690
|
*/
|
|
682
|
-
type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePartialRuleTree<ArrayElement<TState>> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never, TShortcuts extends RegleShortcutDefinition = {}> = Omit<
|
|
691
|
+
type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePartialRuleTree<ArrayElement<TState>> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never, TShortcuts extends RegleShortcutDefinition = {}> = Omit<RegleCommonStatus<TState>, '$value'> & {
|
|
683
692
|
$value: Maybe<TState>;
|
|
684
693
|
readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number, TShortcuts>>;
|
|
685
694
|
readonly $field: RegleFieldStatus<TState, TFieldRule, TShortcuts>;
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {unref,version,isRef,toRef,computed,ref,toRaw,reactive,shallowRef,onScopeDispose,triggerRef,watch,effectScope,watchEffect}from'vue';var Ie=(r=>(r.Inline="__inline",r.Async="__async",r))(Ie||{});function Ze(e,t){return computed(()=>e.value.some(r=>r[t]))}function Ke(e,t){return computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function H(e){return e.map(t=>t instanceof Function?t():unref(t))}function et(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function tt(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(i=>i.trim()).filter(i=>i.length>0).length:0}function Pe(e,...t){let{message:r,validator:n,active:a,type:l,...i}=e,d=l==="__async"||n.constructor.name==="AsyncFunction";return {...{validator(b,...S){return e.validator(b,...H(S.length?S:t))},message(b,S){return typeof e.message=="function"?e.message(b,{...S,$params:H(S.$params?.length?S.$params:t)}):e.message},active(b,S){return typeof e.active=="function"?e.active(b,{...S,$params:H(S.$params?.length?S.$params:t)}):e.active??!0},exec(b){let S=e.validator(b,...H(t)),g;return S instanceof Promise?S.then(v=>(g=v,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)):(g=S,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)}},...i,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:d,_params:et(t)}}function we(e){if(typeof e.validator=="function"){let r=Pe(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(tt(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 L(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function rt(e){return L(e.value)}function ne(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>ne(n)))),r=="Map"&&(t=new Map([...e].map(n=>[ne(n[0]),ne(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,Et(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=ne(e[n]);}return t}function Et(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function Oe(e,t,r){return e instanceof Function?e(t,r??0):e}function nt(e,t){isRef(e)?e.value=t:e=t;}function at(e,t){isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=isRef(e)?e.value[n]:e[n];a={},Re(a,t[n]);});}function Re(e,t){Object.entries({...unref(e),...t}).forEach(([r,n])=>{let a=isRef(e)?e.value:e,l=isRef(t[r])?t[r]._value:t[r],i=isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(l)&&l.forEach((d,x)=>{a[r][x]={},Re(a[r][x],l[x]);})):L(l)?Re(i,l):isRef(a[r])?a[r].value=l:a[r]=l;});}function q(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function he(e,t,r){let n,a=(...l)=>new Promise(i=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(i);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...l)=>new Promise(i=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(i);},0);}),a}function xt(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]),i=Number(n[a]);if(l>i)return 1;if(i>l)return -1;if(!isNaN(l)&&isNaN(i))return 1;if(isNaN(l)&&!isNaN(i))return -1}return 0}var be=xt(version,"3.5.0")!==-1;function Ct(){return Math.floor(Math.random()*Date.now()).toString()}function Ae(){return typeof window>"u"?Ct():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),l=shallowRef(new Map);function i(p){let o=t.value.get(p);if(o)return o;{let u=ref({});return t.value.set(p,u),u}}function d(p){let o=r.value.get(p);if(o)return o;{let u=ref([]);return r.value.set(p,u),u}}function x(p,o,u){l.value.set(`${p}-${o}`,u);}function E(p,o){return l.value.get(`${p}-${o}`)}function b(p,o){p&&o!=null&&l.value.delete(`${p}-${o}`);}function S(p,o){n.value.set(p,o);}function g(p){return n.value.get(p)??!1}function v(p,o){e.value.set(p,o);}function I(p,o){let u=e.value.get(p);return u?f(o,u)?{valid:!0}:{valid:!1}:void 0}function f(p,o){let u=Object.keys(o),$=Object.keys(p);return $.length!==u.length||!$.every(j=>u.includes(j))?!1:$.every(j=>{let C=p[j],O=o[j];return !O||!C||typeof C=="function"||typeof O=="function"||typeof C=="number"||typeof C=="boolean"?!1:C._params?C._params?.every((P,M)=>{if(typeof O=="number"||typeof O=="boolean")return !0;{let y=H(O._params),w=H(C._params);return y?.[M]===w?.[M]}}):!0})}function G(p){let o=a.value.get(p);if(o)return o;{let u=ref(!1),$=ref(!0),N=ref({}),j=ref(!1);return a.value.set(p,{$pending:u,$valid:$,$metadata:N,$validating:j}),{$pending:u,$valid:$,$metadata:N,$validating:j}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),l.value.clear();}),{addRuleDeclEntry:v,setDirtyEntry:S,checkRuleDeclEntry:I,getDirtyState:g,trySetRuleStatusRef:G,getFieldsEntry:i,getCollectionsEntry:d,getArrayStatus:E,addArrayStatus:x,deleteArrayStatus:b,arrayStatusStorage:l}}function lt(e,t){return L(e.value)&&L(t.value)&&!Object.entries(t.value).some(r=>pe(r))}function ot(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function ut(e){return !!e.value&&L(e.value)}function pe(e){return L(e)&&"_validator"in e}function de(e){return typeof e.value!="function"}function st(e){return L(e)&&"$fields"in e}function Fe({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function ct({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:l,storage:i,$debounce:d}){let x=effectScope(),E,b,S=ref(!1),{$pending:g,$valid:v,$metadata:I,$validating:f}=i.trySetRuleStatusRef(`${l}.${n}`);function G(){E=x.run(()=>{let C=computed(()=>({$invalid:!v.value,$params:w.value,...I.value})),O=computed(()=>de(r)?typeof r.value.active=="function"?r.value.active(a.value,C.value):!!r.value.active:!0),P=computed(()=>{let U="",z=t?t[n]?.message:void 0;return z&&(typeof z=="function"?U=z(a.value,C.value):U=z),de(r)&&(z&&!r.value._patched||(typeof r.value.message=="function"?U=r.value.message(a.value,C.value):U=r.value.message)),q(U)&&(U="Error",console.warn(`No error message defined for ${l}.${n}`)),U}),M=computed(()=>de(r)&&r.value.type?r.value.type:n),y=computed(()=>de(r)?r.value.validator:r.value),w=computed(()=>typeof r.value=="function"?[]:H(r.value._params??[])),Z=computed(()=>`${l}.${M.value}`);return {$active:O,$message:P,$type:M,$validator:y,$params:w,$path:Z}}),b=watch(E.$params,$,{deep:!0});}G();function p(){v.value=!0,e.value&&(g.value=!0);}async function o(){let C=E.$validator.value,O=C(a.value,...E.$params.value),P=!1,M=a.value;try{p();let y;if(O instanceof Promise?y=await O:y=O,a.value!==M)return !0;if(typeof y=="boolean")P=y;else {let{$valid:w,...Z}=y;P=w,I.value=Z;}}catch{P=!1;}finally{g.value=!1;}return P}let u=he(o,d??200);async function $(){try{f.value=!0;let C=!1;if(pe(r.value)&&r.value._async)C=await u();else {let O=E.$validator.value,P=O(a.value,...E.$params.value);if(P 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(P!=null)if(typeof P=="boolean")C=P;else {let{$valid:M,...y}=P;C=M,I.value=y;}}return v.value=C,C}catch{return !1}finally{f.value=!1;}}function N(){v.value=!0,I.value={},g.value=!1,f.value=!1,G();}function j(){b(),x.stop(),x=effectScope();}return reactive({...E,$pending:g,$valid:v,$metadata:I,_haveAsync:S,$validating:f,$validate:$,$unwatch:j,$watch:G,$reset:N})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:l,options:i,externalErrors:d,onUnwatch:x,$isArray:E,initialState:b,shortcuts:S}){let g=effectScope(),v,I=[],f=ref(!1),G=ref(!1),p,o,u,$,N=()=>{};function j(){let T=t.value,B=l.checkRuleDeclEntry(n,T);w.value=Object.fromEntries(Object.entries(T).filter(([J])=>J.startsWith("$"))),y.value=Object.fromEntries(Object.entries(t.value).filter(([J])=>!J.startsWith("$")).map(([J,Y])=>{if(Y){let fe=toRef(()=>Y);return [J,ct({$dirty:f,customMessages:r,rule:fe,ruleKey:J,state:e,path:n,storage:l,$debounce:w.value.$debounce})]}return []}).filter(J=>!!J.length)),P(),C(),B?.valid!=null&&(f.value=l.getDirtyState(n),f.value&&N()),l.addRuleDeclEntry(n,T);}function C(){N=v.$debounce.value?he(M,v.$debounce.value??v.haveAnyAsyncRule?100:0):M;}function O(){y.value&&Object.entries(y.value).forEach(([T,B])=>{B.$unwatch();}),u(),f.value&&l.setDirtyEntry(n,f.value),p?.(),o?.(),g.stop(),g=effectScope(),I.forEach(T=>T.stop()),I=[],x?.(),$?.();}function P(){y.value&&Object.entries(y.value).forEach(([T,B])=>{B.$watch();}),v=g.run(()=>{let T=computed(()=>f.value),B=computed(()=>w.value.$debounce),J=computed(()=>w.value.$lazy!=null?w.value.$lazy:unref(i.lazy)),Y=computed(()=>w.value.$rewardEarly!=null?w.value.$rewardEarly:unref(i.rewardEarly)),fe=computed(()=>w.value.$clearExternalErrorsOnChange!=null?w.value.$clearExternalErrorsOnChange:unref(i.clearExternalErrorsOnChange)),mt=computed(()=>w.value.$autoDirty!=null?w.value.$autoDirty:unref(i.autoDirty)),ke=computed(()=>Object.entries(y.value).some(([K,re])=>re.$validating)),xe=computed(()=>Se.value&&!$e.value&&f.value),He=computed(()=>xe.value?Fe({field:{$dirty:f.value,$externalErrors:d?.value,$rules:y.value}}):[]),Le=computed(()=>Fe({field:{$dirty:f.value,$externalErrors:d?.value,$rules:y.value},silent:!0})),qe=computed(()=>!(Se.value||$e.value)),$e=computed(()=>G.value||!Y.value?Object.entries(y.value).some(([K,re])=>re.$pending):!1),Se=computed(()=>d?.value?.length?!0:q(y.value)?!1:!Y.value||Y.value&&G.value?Object.entries(y.value).some(([K,re])=>!re.$valid):!1),ze=computed(()=>a),Ce=computed(()=>q(y.value)?!1:f.value&&!q(e.value)&&!ke.value?d?.value?.length?!1:Object.values(y.value).every(K=>K.$valid&&K.$active):!1),gt=computed(()=>Object.entries(y.value).some(([K,re])=>re._haveAsync));function $t(){S?.fields&&Object.entries(S.fields).forEach(([K,re])=>{let Ye=effectScope();Je[K]=Ye.run(()=>{let Qe=ref();return watchEffect(()=>{Qe.value=re({$dirty:f.value,$externalErrors:d?.value??[],$value:e,$rules:y.value,$error:xe.value,$pending:$e.value,$invalid:Se.value,$valid:Ce.value,$errors:He.value,$ready:qe.value,$silentErrors:Le.value,$anyDirty:T.value,$name:ze.value});}),Qe}),I.push(Ye);});}let Je={};return $t(),watch(Ce,K=>{K&&(G.value=!1);}),{$error:xe,$pending:$e,$invalid:Se,$valid:Ce,$debounce:B,$lazy:J,$errors:He,$ready:qe,$silentErrors:Le,$rewardEarly:Y,$autoDirty:mt,$clearExternalErrorsOnChange:fe,$anyDirty:T,$name:ze,haveAnyAsyncRule:gt,$shortcuts:Je,$validating:ke}}),p=watch(e,()=>{v.$autoDirty.value&&(f.value||(f.value=!0)),t.value instanceof Function&&j(),N(),v.$rewardEarly.value!==!0&&v.$clearExternalErrorsOnChange.value&&m();},{deep:E?!0:be?1:!0}),u=watch(f,()=>{l.setDirtyEntry(n,f.value);}),o=watch(v.$valid,T=>{v.$rewardEarly.value&&T&&(G.value=!1);}),$=watch(v.haveAnyAsyncRule,C);}function M(){Object.values(y.value).forEach(T=>{T.$validate();});}let y=ref(),w=ref();j();function Z(){m(),f.value=!1,Object.entries(y.value).forEach(([T,B])=>{B.$reset();}),!v.$lazy.value&&v.$autoDirty.value&&Object.values(y.value).forEach(T=>T.$validate());}function U(T=!0){f.value||(f.value=!0,T&&N());}async function z(){try{let T=e.value;if(G.value=!0,!f.value)f.value=!0;else if(v.$autoDirty.value&&f.value&&!v.$pending.value)return {result:!v.$error.value,data:T};return q(y.value)?{result:!0,data:T}:{result:(await Promise.allSettled(Object.entries(y.value).map(([Y,fe])=>fe.$validate()))).every(Y=>Y.status==="fulfilled"?Y.value===!0:!1),data:T}}catch{return {result:!1,data:e.value}}}function s(){O(),e.value=nt(e,b),Z();}function c(T=!0){return f.value?e.value:null}function m(){d?.value?.length&&(d.value=[]);}!v.$lazy.value&&!f.value&&v.$autoDirty.value&&N();let{$anyDirty:h,$error:V,$errors:R,$invalid:A,$name:F,$pending:k,$ready:te,$silentErrors:ce,$valid:le,$shortcuts:D,$validating:_}=v;return reactive({$dirty:f,$error:V,$errors:R,$valid:le,$invalid:A,$pending:k,$silentErrors:ce,$anyDirty:h,$ready:te,$name:F,$externalErrors:d,$value:e,$rules:y,...D,$reset:Z,$touch:U,$validate:z,$unwatch:O,$watch:P,$resetAll:s,$extractDirtyFields:c,$clearExternalErrors:m})}function ft({$id:e,path:t,index:r,options:n,storage:a,stateValue:l,customMessages:i,rules:d,externalErrors:x,initialState:E,shortcuts:b,fieldName:S}){let g=d.$key?d.$key:Ae(),v=`${t}.${String(g)}`;typeof l.value=="object"&&l.value!=null&&(l.value.$id?v=`${t}.${l.value.$id}`:Object.defineProperties(l.value,{$id:{value:g,enumerable:!1,configurable:!1,writable:!1}}));let I=ge({state:l,rulesDef:toRef(()=>d),customMessages:i,path:v,storage:a,options:n,externalErrors:toRef(x?.value??[],r),initialState:E?.[r],shortcuts:b,fieldName:S});if(I){let f=l.value?.$id;I.$id=f??String(g),a.addArrayStatus(e,I.$id,I);}return I}function Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:i,initialState:d,shortcuts:x,fieldName:E}){let b=effectScope(),S,g=effectScope(),v,I=[];if(!Array.isArray(e.value)&&!t.value.$each)return null;let f=ref(),G=ref(e.value),p,o=ref({}),u=a.getCollectionsEntry(n);v=g.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(c=>typeof c!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(c=>pe(c)):!1)})),$(),j();function $(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(f.value=Ae(),Object.defineProperties(e.value,{$id:{value:f.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(f.value=e.value.$id)),!v.isPrimitiveArray.value&&(G.value=o.value.$value,Array.isArray(e.value)?u.value=e.value.map((s,c)=>{let m=Oe(t.value.$each,toRef(()=>s),c),h=ft({$id:f.value,path:n,rules:m??{},stateValue:toRef(()=>s),index:c,options:l,storage:a,externalErrors:toRef(i?.value??{},"$each"),initialState:d?.[c],shortcuts:x,fieldName:E});return h||null}).filter(s=>!!s):u.value=[],o.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:toRef(i?.value??{},"$errors"),$isArray:!0,initialState:d,shortcuts:x,fieldName:E}));}function N(){if(Array.isArray(e.value)){let s=ne(u.value);u.value=e.value.map((c,m)=>{let h=toRef(()=>c);if(c.$id&&u.value.find(V=>V.$id===c.$id)){let V=a.getArrayStatus(f.value,c.$id);return V?(V.$value=h,V):null}else {let V=Oe(t.value.$each,h,m);if(V){let R=ft({$id:f.value,path:n,rules:V,stateValue:h,index:m,options:l,storage:a,externalErrors:toRef(i?.value??{},"$each"),initialState:d?.[m],shortcuts:x,fieldName:E});return R||null}}}).filter(c=>!!c),s.filter(c=>!e.value.find(m=>c.$id===m.$id)).forEach((c,m)=>{a.deleteArrayStatus(f.value,m.toString());});}else u.value=[];}function j(){p=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?$():N();},{deep:be?1:!0,flush:"pre"}),S=b.run(()=>{let s=computed(()=>o.value.$dirty&&u.value.every(D=>D.$dirty)),c=computed(()=>o.value.$anyDirty||u.value.some(D=>D.$dirty)),m=computed(()=>o.value.$invalid||u.value.some(D=>D.$invalid)),h=computed(()=>(q(o.value.$rules)?!0:o.value.$valid)&&u.value.every(D=>D.$valid)),V=computed(()=>o.value.$error||u.value.some(D=>D.$error)),R=computed(()=>!(m.value||A.value)),A=computed(()=>o.value.$pending||u.value.some(D=>D.$pending)),F=computed(()=>({$errors:o.value.$errors,$each:u.value.map(D=>D.$errors)})),k=computed(()=>({$errors:o.value.$silentErrors,$each:u.value.map(D=>D.$silentErrors)})),te=computed(()=>E);function ce(){x?.collections&&Object.entries(x?.collections).forEach(([D,_])=>{let T=effectScope();le[D]=T.run(()=>{let B=ref();return watchEffect(()=>{B.value=_({$dirty:s.value,$error:V.value,$pending:A.value,$invalid:m.value,$valid:h.value,$errors:F.value,$ready:R.value,$silentErrors:k.value,$anyDirty:c.value,$name:te.value,$each:u.value,$field:o.value,$value:e});}),B}),I.push(T);});}let le={};return ce(),{$dirty:s,$anyDirty:c,$invalid:m,$valid:h,$error:V,$pending:A,$errors:F,$silentErrors:k,$ready:R,$name:te,$shortcuts:le}}),v.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),p());}function C(){p&&p(),o.value&&o.value.$unwatch(),u.value&&u.value.forEach(s=>{"$dirty"in s&&s.$unwatch();}),b.stop(),b=effectScope(),g.stop(),g=effectScope(!0),I.forEach(s=>s.stop()),I=[];}function O(s=!0){o.value.$touch(s),u.value.forEach(c=>{c.$touch(s);});}function P(){o.value.$reset(),u.value.forEach(s=>{s.$reset();});}async function M(){let s=e.value;try{return {result:(await Promise.allSettled([o.value.$validate(),...u.value.map(h=>h.$validate())])).every(h=>h.status==="fulfilled"?h.value.result===!0:!1),data:s}}catch{return {result:!1,data:s}}}function y(){o.value.$clearExternalErrors(),u.value.forEach(s=>{s.$clearExternalErrors();});}function w(s=!0){let c=u.value.map(m=>{if(st(m))return m.$extractDirtyFields(s)});return s&&(c=c.filter(m=>L(m)?!q(m):!!m)),c}function Z(){C(),at(e,d),P();}let{$shortcuts:U,...z}=S;return reactive({$field:o,...z,...U,$each:u,$value:e,$validate:M,$unwatch:C,$watch:j,$touch:O,$reset:P,$resetAll:Z,$extractDirtyFields:w,$clearExternalErrors:y})}function Ge({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:l,options:i,externalErrors:d,validationGroups:x,initialState:E,shortcuts:b,fieldName:S}){let g,v,I=[],f=null,G=null,p=null;function u(s=!0){$.value=null,triggerRef($);let c=Object.fromEntries(Object.entries(e.value).map(([R,A])=>{if(A){let F=toRef(t.value,R),k=toRef(()=>A),te=toRef(d?.value,R);return [R,ge({state:F,rulesDef:k,customMessages:r,path:n?`${n}.${R}`:R,storage:l,options:i,externalErrors:te,initialState:E?.[R],shortcuts:b,fieldName:R})]}return []}).filter(R=>!!R.length&&R[1]!=null)),m=Object.fromEntries(Object.entries(unref(d)??{}).filter(([R])=>!(R in e.value)).map(([R,A])=>{if(A){let F=toRef(t.value,R),k=toRef(()=>({}));return [R,ge({state:F,rulesDef:k,customMessages:r,path:n?`${n}.${R}`:R,storage:l,options:i,externalErrors:toRef(d?.value??{},R),initialState:E?.[R],shortcuts:b,fieldName:R})]}return []})),h=Object.fromEntries(Object.entries(t.value).filter(([R])=>!(R in e.value)&&!(R in(m.value??{}))).map(([R,A])=>{let F=toRef(t.value,R),k=toRef(()=>({}));return [R,ge({state:F,rulesDef:k,customMessages:r,path:n?`${n}.${R}`:R,storage:l,options:i,externalErrors:toRef(d?.value??{},R),initialState:E?.[R],shortcuts:b,fieldName:R})]})),V=Object.fromEntries(Object.entries(x?.(c)??{}).map(([R,A])=>A.length?[R,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(F=>[F,Ze(toRef(()=>A),F)])),...Object.fromEntries(["$errors","$silentErrors"].map(F=>[F,Ke(toRef(()=>A),F)]))}]:[]));$.value={...c,...m,...h,...V},s&&P();}let $=l.getFieldsEntry(n);u();function N(){G?.(),Object.values($.value).forEach(s=>{s.$reset();}),O();}function j(s=!0){Object.values($.value).forEach(c=>{c.$touch(s);});}async function C(){try{let s=t.value;return {result:(await Promise.allSettled(Object.values($.value).map(h=>h.$validate()))).every(h=>h.status==="fulfilled"?h.value.result===!0:!1),data:s}}catch{return {result:!1,data:t.value}}}function O(){d?.value&&(G=watch(d,()=>{M(),u();},{deep:!0}));}function P(){a&&(f=watch(a,()=>{M(),u();},{deep:!0,flush:"post"}),O()),p=watch(t,()=>{M(),u(),j();}),g=effectScope(),v=g.run(()=>{let s=computed(()=>!!Object.entries($.value).length&&Object.entries($.value).every(([D,_])=>_?.$dirty)),c=computed(()=>Object.entries($.value).some(([D,_])=>_?.$dirty)),m=computed(()=>Object.entries($.value).some(([D,_])=>_?.$invalid)),h=computed(()=>Object.entries($.value).every(([D,_])=>_?.$valid)),V=computed(()=>s.value&&!A.value&&m.value),R=computed(()=>unref(i.autoDirty)?c.value&&!(m.value||A.value):!(m.value||A.value)),A=computed(()=>Object.entries($.value).some(([D,_])=>_?.$pending)),F=computed(()=>Object.fromEntries(Object.entries($.value).map(([D,_])=>[D,_?.$errors]))),k=computed(()=>Object.fromEntries(Object.entries($.value).map(([D,_])=>[D,_?.$silentErrors]))),te=computed(()=>S);function ce(){b?.nested&&Object.entries(b.nested).forEach(([D,_])=>{let T=effectScope();le[D]=T.run(()=>{let B=ref();return watchEffect(()=>{B.value=_({$dirty:s.value,$value:t,$error:V.value,$pending:A.value,$invalid:m.value,$valid:h.value,$ready:R.value,$anyDirty:c.value,$name:te.value,$silentErrors:k.value,$errors:F.value,$fields:$.value});}),B}),I.push(T);});}let le={};return ce(),{$dirty:s,$anyDirty:c,$invalid:m,$valid:h,$error:V,$pending:A,$errors:F,$silentErrors:k,$ready:R,$name:te,$shortcuts:le}});}function M(){$.value&&Object.entries($.value).forEach(([s,c])=>{c.$unwatch();}),f?.(),G?.(),p?.(),g.stop(),g=effectScope(),I.forEach(s=>s.stop()),I=[];}function y(){Object.entries($.value).forEach(([s,c])=>{c.$clearExternalErrors();});}function w(){M(),Re(t,E??{}),u(!1),N(),P();}function Z(s=!0){let c=Object.entries($.value).map(([m,h])=>[m,h.$extractDirtyFields(s)]);return s&&(c=c.filter(([m,h])=>L(h)?!q(h):Array.isArray(h)?h.length:!!h)),Object.fromEntries(c)}let{$shortcuts:U,...z}=v;return reactive({...z,...U,$fields:$,$value:t,$resetAll:w,$reset:N,$touch:j,$validate:C,$unwatch:M,$watch:P,$clearExternalErrors:y,$extractDirtyFields:Z})}function ge({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:i,index:d,initialState:x,shortcuts:E,onUnwatch:b,fieldName:S}){return ot(t,e)?Rt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:d,externalErrors:i,initialState:x,fieldName:S,shortcuts:E}):lt(e,t)&&rt(e)?Ge({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:l,index:d,initialState:x,shortcuts:E,fieldName:S,externalErrors:i}):ut(t)?Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:d,externalErrors:i,onUnwatch:b,shortcuts:E,initialState:x,fieldName:S}):null}function Ne({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:l}){let i=Me();return reactive(Ge({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:i,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:l,fieldName:"root"}))}function Be(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange??!0};function a(l,i,d){let x=isRef(i)?i:computed(typeof i=="function"?i:()=>i),E={...n,...d},b=isRef(l)?l:ref(l),S=ne(toRaw(b.value));return {r$:Ne({scopeRules:x,state:b,options:E,initialState:S,customRules:e,shortcuts:r})}}return a}var vt=Be();function We(){function e(t,r){return r}return e}var Ue=We();function yt({rules:e,modifiers:t,shortcuts:r}){let n=Be(e,t,r),a=We();return {useRegle:n,inferRules:a}}
|
|
2
|
-
export{
|
|
1
|
+
import {unref,version,isRef,toRef,computed,ref,toRaw,reactive,shallowRef,onScopeDispose,effectScope,watch,watchEffect}from'vue';var xe=(t=>(t.Inline="__inline",t.Async="__async",t))(xe||{});function ke(e,r){return e.some(t=>t[r])}function qe(e,r){return e.reduce((t,a)=>{let n=a[r]||[];return t.concat(n)},[])}function k(e){return e.map(r=>r instanceof Function?r():unref(r))}function ze(e){return e.map(r=>r instanceof Function||isRef(r)?r:toRef(()=>r))}function Je(e){let a=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return a?(a[0]||a[1]||a[2]||a[3]||a[4]||"").split(",").map(d=>d.trim()).filter(d=>d.length>0).length:0}function De(e,...r){let{validator:t,type:a}=e,n=a==="__async"||t.constructor.name==="AsyncFunction";return {...{validator(v,...c){return e.validator(v,...k(c.length?c:r))},message(v,c){return typeof e.message=="function"?e.message(v,{...c,$params:k(c.$params?.length?c.$params:r)}):e.message},active(v,c){return typeof e.active=="function"?e.active(v,{...c,$params:k(c.$params?.length?c.$params:r)}):e.active??!0},tooltip(v,c){return typeof e.tooltip=="function"?e.tooltip(v,{...c,$params:k(c.$params?.length?c.$params:r)}):e.tooltip??[]},exec(v){let c=e.validator(v,...k(r)),g;return c instanceof Promise?c.then(w=>(g=w,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)):(g=c,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_patched:!1,_async:n,_params:ze(r)}}function Ce(e){if(typeof e.validator=="function"){let t=De(e,...[]),a=e.validator.constructor.name==="AsyncFunction";if(Je(e.validator)>1){let n=function(...s){return De(e,...s)};return n.validator=t.validator,n.message=t.message,n.active=t.active,n.tooltip=t.tooltip,n.type=t.type,n.exec=t.exec,n._validator=t.validator,n._message=t.message,n._active=t.active,n._tooltip=t.tooltip,n._type=e.type,n._patched=!1,n._async=a,n}else return t}throw new Error("Validator must be a function")}function q(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ye(e){return q(e.value)}function ee(e){let r=e,t={}.toString.call(e).slice(8,-1);if(t=="Set"&&(r=new Set([...e].map(a=>ee(a)))),t=="Map"&&(r=new Map([...e].map(a=>[ee(a[0]),ee(a[1])]))),t=="Date"&&(r=new Date(e.getTime())),t=="RegExp"&&(r=RegExp(e.source,ht(e))),t=="Array"||t=="Object"){r=Array.isArray(e)?[]:{};for(let a in e)r[a]=ee(e[a]);}return r}function ht(e){if(typeof e.source.flags=="string")return e.source.flags;{let r=[];return e.global&&r.push("g"),e.ignoreCase&&r.push("i"),e.multiline&&r.push("m"),e.sticky&&r.push("y"),e.unicode&&r.push("u"),r.join("")}}function Ie(e,r,t){return e instanceof Function?e(r,t??0):e}function Qe(e,r){isRef(e)?e.value=r:e=r;}function Xe(e,r){isRef(e)?e.value=[]:e=[],r.forEach((t,a)=>{let n=isRef(e)?e.value[a]:e[a];n={},ie(n,r[a]);});}function ie(e,r){Object.entries({...unref(e),...r}).forEach(([t,a])=>{let n=isRef(e)?e.value:e,s=isRef(r[t])?r[t]._value:r[t],d=isRef(n[t])?n[t].value:n[t];Array.isArray(n[t])?(n[t]=[],Array.isArray(s)&&s.forEach((v,c)=>{n[t][c]={},ie(n[t][c],s[c]);})):q(s)?ie(d,s):isRef(n[t])?n[t].value=s:n[t]=s;});}function ge(e,r,t){let a,n=(...s)=>new Promise(d=>{clearTimeout(a),a=setTimeout(()=>{a=void 0,Promise.resolve(e.apply(this,[...s])).then(d);},r);});return n.cancel=()=>{clearTimeout(a),a=void 0;},n}function Tt(e,r){let t=String(e).split("."),a=String(r).split(".");for(let n=0;n<Math.min(t.length,a.length);n++){let s=Number(t[n]),d=Number(a[n]);if(s>d)return 1;if(d>s)return -1;if(!isNaN(s)&&isNaN(d))return 1;if(isNaN(s)&&!isNaN(d))return -1}return 0}var $e=Tt(version,"3.5.0")!==-1;function Et(){return Math.floor(Math.random()*Date.now()).toString()}function Se(){return typeof window>"u"?Et():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Pe(){let e=shallowRef(new Map),r=shallowRef(new Map),t=shallowRef(new Map),a=shallowRef(new Map),n=shallowRef(new Map),s=shallowRef(new Map);function d(u){let i=r.value.get(u);if(i)return i;{let f=ref({});return r.value.set(u,f),f}}function v(u){let i=t.value.get(u);if(i)return i;{let f=ref([]);return t.value.set(u,f),f}}function c(u,i,f){s.value.set(`${u}-${i}`,f);}function g(u,i){return s.value.get(`${u}-${i}`)}function w(u,i){u&&i!=null&&s.value.delete(`${u}-${i}`);}function G(u,i){a.value.set(u,i);}function C(u){return a.value.get(u)??!1}function R(u,i){e.value.set(u,i);}function x(u,i){let f=e.value.get(u);return f?p(i,f)?{valid:!0}:{valid:!1}:void 0}function p(u,i){let f=Object.keys(i),j=Object.keys(u);return j.length!==f.length||!j.every(O=>f.includes(O))?!1:j.every(O=>{let b=u[O],A=i[O];return !A||!b||typeof b=="function"||typeof A=="function"||typeof b=="number"||typeof b=="boolean"?!1:b._params?b._params?.every((I,L)=>{if(typeof A=="number"||typeof A=="boolean")return !0;{let y=k(A._params),P=k(b._params);return y?.[L]===P?.[L]}}):!0})}function F(u){let i=n.value.get(u);if(i)return i;{let f=ref(!1),j=ref(!0),V=ref({}),O=ref(!1);return n.value.set(u,{$pending:f,$valid:j,$metadata:V,$validating:O}),{$pending:f,$valid:j,$metadata:V,$validating:O}}}return onScopeDispose(()=>{e.value.clear(),r.value.clear(),t.value.clear(),a.value.clear(),n.value.clear(),s.value.clear();}),{addRuleDeclEntry:R,setDirtyEntry:G,checkRuleDeclEntry:x,getDirtyState:C,trySetRuleStatusRef:F,getFieldsEntry:d,getCollectionsEntry:v,getArrayStatus:g,addArrayStatus:c,deleteArrayStatus:w,arrayStatusStorage:s}}function Y(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}function Ze(e,r){return q(e.value)&&q(r.value)&&!Object.entries(r.value).some(t=>ce(t))}function Ke(e,r){return !!e.value&&"$each"in e.value||Array.isArray(r.value)}function et(e){return !!e.value&&q(e.value)}function ce(e){return q(e)&&"_validator"in e}function fe(e){return typeof e.value!="function"}function tt(e){return q(e)&&"$fields"in e}function Oe({field:e,silent:r=!1}){return Object.entries(e.$rules??{}).map(([t,a])=>r||!a.$valid&&e.$dirty&&!a.$validating?a.$message:null).filter(t=>!!t).reduce((t,a)=>typeof a=="string"?t?.concat([a]):t?.concat(a),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function rt({field:e}){return Object.entries(e.$rules??{}).map(([r,t])=>t.$tooltip).filter(r=>!!r).reduce((r,t)=>typeof t=="string"?r?.concat([t]):r?.concat(t),[])}function at({$dirty:e,customMessages:r,rule:t,ruleKey:a,state:n,path:s,storage:d,$debounce:v}){let c=effectScope(),g,w,G=ref(!1),{$pending:C,$valid:R,$metadata:x,$validating:p}=d.trySetRuleStatusRef(`${s}.${a}`);function F(){g=c.run(()=>{let b=computed(()=>({$invalid:!R.value,$params:D.value,...x.value})),A=computed(()=>fe(t)?typeof t.value.active=="function"?t.value.active(n.value,b.value):!!t.value.active:!0);function I(o){let m="",l=r?r[a]?.[o]:void 0;return l&&(typeof l=="function"?m=l(n.value,b.value):m=l),fe(t)&&(l&&!t.value._patched||(typeof t.value[o]=="function"?m=t.value[o](n.value,b.value):m=t.value[o]??"")),m}let L=computed(()=>{let o=I("message");return Y(o)&&(o="Error",console.warn(`No error message defined for ${s}.${a}`)),o}),y=computed(()=>I("tooltip")),P=computed(()=>fe(t)&&t.value.type?t.value.type:a),T=computed(()=>fe(t)?t.value.validator:t.value),D=computed(()=>typeof t.value=="function"?[]:k(t.value._params??[])),_=computed(()=>`${s}.${P.value}`);return {$active:A,$message:L,$type:P,$validator:T,$params:D,$path:_,$tooltip:y}}),w=watch(g.$params,j,{deep:!0});}F();function u(){R.value=!0,e.value&&(C.value=!0);}async function i(){let b=g.$validator.value,A=b(n.value,...g.$params.value),I=!1,L=n.value;try{u();let y;if(A instanceof Promise?y=await A:y=A,n.value!==L)return !0;if(typeof y=="boolean")I=y;else {let{$valid:P,...T}=y;I=P,x.value=T;}}catch{I=!1;}finally{C.value=!1;}return I}let f=ge(i,v??200);async function j(){try{p.value=!0;let b=!1;if(ce(t.value)&&t.value._async)b=await f();else {let A=g.$validator.value,I=A(n.value,...g.$params.value);if(I instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(I!=null)if(typeof I=="boolean")b=I;else {let{$valid:L,...y}=I;b=L,x.value=y;}}return R.value=b,b}catch{return !1}finally{p.value=!1;}}function V(){R.value=!0,x.value={},C.value=!1,p.value=!1,F();}function O(){w(),c.stop(),c=effectScope();}return reactive({...g,$pending:C,$valid:R,$metadata:x,$haveAsync:G,$validating:p,$validate:j,$unwatch:O,$watch:F,$reset:V})}function be({state:e,rulesDef:r,customMessages:t,path:a,fieldName:n,storage:s,options:d,externalErrors:v,onUnwatch:c,$isArray:g,initialState:w,shortcuts:G}){let C=effectScope(),R,x=[],p=ref(!1),F=ref(!1),u,i,f,j,V=()=>{};function O(){let $=r.value,W=s.checkRuleDeclEntry(a,$);P.value=Object.fromEntries(Object.entries($).filter(([H])=>H.startsWith("$"))),y.value=Object.fromEntries(Object.entries(r.value).filter(([H])=>!H.startsWith("$")).map(([H,U])=>{if(U){let M=toRef(()=>U);return [H,at({$dirty:p,customMessages:t,rule:M,ruleKey:H,state:e,path:a,storage:s,$debounce:P.value.$debounce})]}return []}).filter(H=>!!H.length)),I(),b(),W?.valid!=null&&(p.value=s.getDirtyState(a),p.value&&V()),s.addRuleDeclEntry(a,$);}function b(){V=R.$debounce.value?ge(L,R.$debounce.value??R.$haveAnyAsyncRule?100:0):L;}function A(){y.value&&Object.entries(y.value).forEach(([$,W])=>{W.$unwatch();}),f(),p.value&&s.setDirtyEntry(a,p.value),u?.(),i?.(),C.stop(),C=effectScope(),x.forEach($=>$.stop()),x=[],c?.(),j?.();}function I(){y.value&&Object.entries(y.value).forEach(([$,W])=>{W.$watch();}),R=C.run(()=>{let $=computed(()=>p.value),W=computed(()=>P.value.$debounce),H=computed(()=>P.value.$lazy!=null?P.value.$lazy:unref(d.lazy)),U=computed(()=>E.value===!0?!1:P.value.$rewardEarly!=null?P.value.$rewardEarly:unref(d.rewardEarly)),M=computed(()=>P.value.$clearExternalErrorsOnChange!=null?P.value.$clearExternalErrorsOnChange:unref(d.clearExternalErrorsOnChange)),E=computed(()=>P.value.$autoDirty!=null?P.value.$autoDirty:unref(d.autoDirty)),h=computed(()=>Object.entries(y.value).some(([X,K])=>K.$validating)),Z=computed(()=>ve.value&&!ye.value&&p.value),se=computed(()=>Z.value?Oe({field:{$dirty:p.value,$externalErrors:v?.value,$rules:y.value}}):[]),ue=computed(()=>Z.value?rt({field:{$rules:y.value}}):[]),Ne=computed(()=>Oe({field:{$dirty:p.value,$externalErrors:v?.value,$rules:y.value},silent:!0})),We=computed(()=>!(ve.value||ye.value)),ye=computed(()=>F.value||!U.value?Object.entries(y.value).some(([X,K])=>K.$pending):!1),ve=computed(()=>v?.value?.length?!0:Y(y.value)?!1:!U.value||U.value&&F.value?Object.entries(y.value).some(([X,K])=>!K.$valid):!1),Ue=computed(()=>n),Ee=computed(()=>v?.value?.length||Y(y.value)?!1:p.value&&!Y(e.value)&&!h.value?Object.values(y.value).every(X=>X.$valid&&X.$active):!1),mt=computed(()=>Object.entries(y.value).some(([X,K])=>K.$haveAsync));function yt(){G?.fields&&Object.entries(G.fields).forEach(([X,K])=>{let He=effectScope();Be[X]=He.run(()=>{let Le=ref();return watchEffect(()=>{Le.value=K(reactive({$dirty:p,$externalErrors:v?.value??[],$value:e,$rules:y,$error:Z,$pending:ye,$invalid:ve,$valid:Ee,$errors:se,$ready:We,$silentErrors:Ne,$anyDirty:$,$tooltips:ue,$name:Ue}));}),Le}),x.push(He);});}let Be={};return yt(),watch(Ee,X=>{X&&(F.value=!1);}),{$error:Z,$pending:ye,$invalid:ve,$valid:Ee,$debounce:W,$lazy:H,$errors:se,$ready:We,$silentErrors:Ne,$rewardEarly:U,$autoDirty:E,$clearExternalErrorsOnChange:M,$anyDirty:$,$name:Ue,$haveAnyAsyncRule:mt,$shortcuts:Be,$validating:h,$tooltips:ue}}),u=watch(e,()=>{R.$autoDirty.value&&(p.value||(p.value=!0)),r.value instanceof Function&&O(),(R.$autoDirty.value||R.$rewardEarly.value&&R.$error.value)&&V(),R.$rewardEarly.value!==!0&&R.$clearExternalErrorsOnChange.value&&l();},{deep:g?!0:$e?1:!0}),f=watch(p,()=>{s.setDirtyEntry(a,p.value);}),i=watch(R.$valid,$=>{R.$rewardEarly.value&&$&&(F.value=!1);}),j=watch(R.$haveAnyAsyncRule,b);}function L(){Object.values(y.value).forEach($=>{$.$validate();});}let y=ref(),P=ref();O();function T(){l(),p.value=!1,Object.entries(y.value).forEach(([$,W])=>{W.$reset();}),!R.$lazy.value&&R.$autoDirty.value&&Object.values(y.value).forEach($=>$.$validate());}function D($=!0,W=!1){p.value||(p.value=!0),W&&$?(R.$autoDirty.value||R.$rewardEarly.value&&R.$error.value)&&V():$&&V();}async function _(){try{let $=e.value;if(F.value=!0,!p.value)p.value=!0;else if(R.$autoDirty.value&&p.value&&!R.$pending.value)return {result:!R.$error.value,data:$};return Y(y.value)?{result:!0,data:$}:{result:(await Promise.allSettled(Object.entries(y.value).map(([U,M])=>M.$validate()))).every(U=>U.status==="fulfilled"?U.value===!0:!1),data:$}}catch{return {result:!1,data:e.value}}}function o(){A(),e.value=Qe(e,w),T();}function m($=!0){return p.value?e.value:null}function l(){v?.value?.length&&(v.value=[]);}!R.$lazy.value&&!p.value&&R.$autoDirty.value&&V();let{$shortcuts:S,$validating:N,...J}=R;return reactive({$dirty:p,...J,$externalErrors:v,$value:e,$rules:y,...S,$reset:T,$touch:D,$validate:_,$unwatch:A,$watch:I,$resetAll:o,$extractDirtyFields:m,$clearExternalErrors:l})}function Ae({$id:e,path:r,index:t,options:a,storage:n,stateValue:s,customMessages:d,rules:v,externalErrors:c,initialState:g,shortcuts:w,fieldName:G}){let C=v.$key?v.$key:Se(),R=`${r}.${String(C)}`;typeof s.value=="object"&&s.value!=null&&(s.value.$id?R=`${r}.${s.value.$id}`:Object.defineProperties(s.value,{$id:{value:C,enumerable:!1,configurable:!1,writable:!1}}));let x=de({state:s,rulesDef:toRef(()=>v),customMessages:d,path:R,storage:n,options:a,externalErrors:toRef(c?.value??[],t),initialState:g?.[t],shortcuts:w,fieldName:G});if(x){let p=s.value?.$id;x.$id=p??String(C),n.addArrayStatus(e,x.$id,x);}return x}function ut({state:e,rulesDef:r,customMessages:t,path:a,storage:n,options:s,externalErrors:d,initialState:v,shortcuts:c,fieldName:g}){let w=effectScope(),G,C=effectScope(),R,x=[];if(!Array.isArray(e.value)&&!r.value.$each)return null;let p=ref(),F=ref(e.value),u,i=ref({}),f=n.getCollectionsEntry(a);R=C.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(m=>typeof m!="object"):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(m=>ce(m)):!1)})),j(),O();function j(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(p.value=Se(),Object.defineProperties(e.value,{$id:{value:p.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(p.value=e.value.$id)),!R.isPrimitiveArray.value&&(F.value=i.value.$value,Array.isArray(e.value)?f.value=e.value.map((o,m)=>{let l=Ie(r.value.$each,toRef(()=>o),m),S=Ae({$id:p.value,path:a,customMessages:t,rules:l??{},stateValue:toRef(()=>o),index:m,options:s,storage:n,externalErrors:toRef(d?.value??{},"$each"),initialState:v?.[m],shortcuts:c,fieldName:g});return S||null}).filter(o=>!!o):f.value=[],i.value=be({state:e,rulesDef:r,customMessages:t,path:a,storage:n,options:s,externalErrors:toRef(d?.value??{},"$self"),$isArray:!0,initialState:v,shortcuts:c,fieldName:g}));}function V(){if(Array.isArray(e.value)){let o=ee(f.value);f.value=e.value.map((m,l)=>{let S=toRef(()=>m);if(m.$id&&f.value.find(N=>N.$id===m.$id)){let N=n.getArrayStatus(p.value,m.$id);return N?(N.$value=S,N):null}else {let N=Ie(r.value.$each,S,l);if(N){let J=Ae({$id:p.value,path:a,customMessages:t,rules:N,stateValue:S,index:l,options:s,storage:n,externalErrors:toRef(d?.value??{},"$each"),initialState:v?.[l],shortcuts:c,fieldName:g});return J||null}}}).filter(m=>!!m),o.filter(m=>!e.value.find(l=>m.$id===l.$id)).forEach((m,l)=>{n.deleteArrayStatus(p.value,l.toString());});}else f.value=[];}function O(){u=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?j():V();},{deep:$e?1:!0,flush:"pre"}),G=w.run(()=>{let o=computed(()=>i.value.$dirty&&f.value.every(h=>h.$dirty)),m=computed(()=>i.value.$anyDirty||f.value.some(h=>h.$dirty)),l=computed(()=>i.value.$invalid||f.value.some(h=>h.$invalid)),S=computed(()=>(Y(i.value.$rules)?!0:i.value.$valid)&&f.value.every(h=>h.$valid)),N=computed(()=>i.value.$error||f.value.some(h=>h.$error)),J=computed(()=>!(l.value||$.value)),$=computed(()=>i.value.$pending||f.value.some(h=>h.$pending)),W=computed(()=>({$self:i.value.$errors,$each:f.value.map(h=>h.$errors)})),H=computed(()=>({$self:i.value.$silentErrors,$each:f.value.map(h=>h.$silentErrors)})),U=computed(()=>g);function M(){c?.collections&&Object.entries(c?.collections).forEach(([h,Z])=>{let se=effectScope();E[h]=se.run(()=>{let ue=ref();return watchEffect(()=>{ue.value=Z(reactive({$dirty:o,$error:N,$pending:$,$invalid:l,$valid:S,$errors:W,$ready:J,$silentErrors:H,$anyDirty:m,$name:U,$each:f,$field:i,$value:e}));}),ue}),x.push(se);});}let E={};return M(),{$dirty:o,$anyDirty:m,$invalid:l,$valid:S,$error:N,$pending:$,$errors:W,$silentErrors:H,$ready:J,$name:U,$shortcuts:E}}),R.isPrimitiveArray.value&&(console.warn(`${a} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),u());}function b(){u&&u(),i.value&&i.value.$unwatch(),f.value&&f.value.forEach(o=>{"$dirty"in o&&o.$unwatch();}),w.stop(),w=effectScope(),C.stop(),C=effectScope(!0),x.forEach(o=>o.stop()),x=[];}function A(o=!0,m=!1){i.value.$touch(o,m),f.value.forEach(l=>{l.$touch(o,m);});}function I(){i.value.$reset(),f.value.forEach(o=>{o.$reset();});}async function L(){let o=e.value;try{return {result:(await Promise.allSettled([i.value.$validate(),...f.value.map(S=>S.$validate())])).every(S=>S.status==="fulfilled"?S.value.result===!0:!1),data:o}}catch{return {result:!1,data:o}}}function y(){i.value.$clearExternalErrors(),f.value.forEach(o=>{o.$clearExternalErrors();});}function P(o=!0){let m=f.value.map(l=>{if(tt(l))return l.$extractDirtyFields(o)});return o&&(m=m.filter(l=>q(l)?!Y(l):!!l)),m}function T(){b(),Xe(e,v),I();}let{$shortcuts:D,..._}=G;return reactive({$field:i,..._,...D,$each:f,$value:e,$validate:L,$unwatch:b,$watch:O,$touch:A,$reset:I,$resetAll:T,$extractDirtyFields:P,$clearExternalErrors:y})}function Fe({rulesDef:e,state:r,path:t="",rootRules:a,externalErrors:n,validationGroups:s,initialState:d,fieldName:v,...c}){let g=effectScope(),w,G=[],C=null,R=null,x=null;async function F(T=!0){let D=Object.entries(e.value),_=Object.fromEntries(D.filter(([l,S])=>!!S).map(([l,S])=>{if(S){let N=toRef(r.value,l),J=toRef(()=>S),$=toRef(n?.value??{},l);return [l,de({state:N,rulesDef:J,path:t?`${t}.${l}`:l,externalErrors:$,initialState:d?.[l],fieldName:l,...c})]}return []})),o=Object.fromEntries(Object.entries(unref(n)??{}).filter(([l,S])=>!(l in e.value)&&!!S).map(([l])=>{let S=toRef(r.value,l);return [l,de({state:S,rulesDef:computed(()=>({})),path:t?`${t}.${l}`:l,externalErrors:toRef(n?.value??{},l),initialState:d?.[l],fieldName:l,...c})]})),m=Object.fromEntries(Object.entries(r.value).filter(([l])=>!(l in e.value)&&!(l in(o.value??{}))).map(([l])=>{let S=toRef(r.value,l);return [l,de({state:S,rulesDef:computed(()=>({})),path:t?`${t}.${l}`:l,externalErrors:toRef(n?.value??{},l),initialState:d?.[l],fieldName:l,...c})]}));u.value={..._,...o,...m},T&&V();}let u=c.storage.getFieldsEntry(t);F();function i(){R?.(),Object.values(u.value).forEach(T=>{T.$reset();}),j();}function f(T=!0,D=!1){Object.values(u.value).forEach(_=>{_.$touch(T,D);});}function j(){n?.value&&(R=watch(n,()=>{O(),F();},{deep:!0}));}function V(){a&&(C=watch(a,()=>{O(),F();},{deep:!0,flush:"post"}),j()),x=watch(r,()=>{O(),F(),f(!0,!0);},{flush:"sync"}),w=g.run(()=>{let T=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([M,E])=>E?.$dirty)),D=computed(()=>Object.entries(u.value).some(([M,E])=>E?.$dirty)),_=computed(()=>Object.entries(u.value).some(([M,E])=>E?.$invalid)),o=computed(()=>Object.entries(u.value).every(([M,E])=>E?.$valid)),m=computed(()=>D.value&&!S.value&&_.value),l=computed(()=>unref(c.options.autoDirty)?D.value&&!(_.value||S.value):!(_.value||S.value)),S=computed(()=>Object.entries(u.value).some(([M,E])=>E?.$pending)),N=computed(()=>Object.fromEntries(Object.entries(u.value).map(([M,E])=>[M,E?.$errors]))),J=computed(()=>Object.fromEntries(Object.entries(u.value).map(([M,E])=>[M,E?.$silentErrors]))),$=computed(()=>v);function W(){c.shortcuts?.nested&&Object.entries(c.shortcuts.nested).forEach(([M,E])=>{let h=effectScope();U[M]=h.run(()=>{let Z=ref();return watchEffect(()=>{Z.value=E(reactive({$dirty:T,$value:r,$error:m,$pending:S,$invalid:_,$valid:o,$ready:l,$anyDirty:D,$name:$,$silentErrors:J,$errors:N,$fields:u}));}),Z}),G.push(h);});}let H=computed(()=>s?Object.fromEntries(Object.entries(s?.(u.value)??{}).map(([M,E])=>E.length?[M,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(h=>[h,ke(E,h)])),...Object.fromEntries(["$errors","$silentErrors"].map(h=>[h,qe(E,h)]))}]:[])):{}),U={};return W(),{$dirty:T,$anyDirty:D,$invalid:_,$valid:o,$error:m,$pending:S,$errors:N,$silentErrors:J,$ready:l,$name:$,$shortcuts:U,$groups:H}});}function O(){C?.(),R?.(),x?.(),G.forEach(T=>T.stop()),G=[],u.value&&Object.entries(u.value).forEach(([T,D])=>{D.$unwatch();});}function b(){Object.entries(u.value).forEach(([T,D])=>{D.$clearExternalErrors();});}function A(){O(),ie(r,d??{}),F(!1),i(),V();}function I(T=!0){let D=Object.entries(u.value).map(([_,o])=>[_,o.$extractDirtyFields(T)]);return T&&(D=D.filter(([_,o])=>q(o)?!Y(o):Array.isArray(o)?o.length:!!o)),Object.fromEntries(D)}async function L(){try{let T=r.value;return {result:(await Promise.allSettled(Object.values(u.value).map(o=>o.$validate()))).every(o=>o.status==="fulfilled"?o.value.result===!0:!1),data:T}}catch{return {result:!1,data:r.value}}}let{$shortcuts:y,...P}=w;return reactive({...P,...y,$fields:u,$value:r,$resetAll:A,$reset:i,$touch:f,$validate:L,$unwatch:O,$watch:V,$clearExternalErrors:b,$extractDirtyFields:I})}function de({rulesDef:e,externalErrors:r,...t}){return Ke(e,t.state)?ut({rulesDef:e,externalErrors:r,...t}):Ze(t.state,e)&&Ye(t.state)?Fe({rulesDef:e,externalErrors:r,...t}):et(e)?be({rulesDef:e,externalErrors:r,...t}):null}function je({initialState:e,options:r,scopeRules:t,state:a,customRules:n,shortcuts:s}){let d=Pe();return reactive(Fe({rootRules:t,rulesDef:t,state:a,customMessages:n?.(),storage:d,options:r,externalErrors:r.externalErrors,validationGroups:r.validationGroups,initialState:e,shortcuts:s,fieldName:"root",path:""}))}function Ve(e,r,t){let a={autoDirty:r?.autoDirty??!0,lazy:r?.lazy??!1,rewardEarly:r?.rewardEarly??!1,clearExternalErrorsOnChange:r?.clearExternalErrorsOnChange??!0};function n(s,d,v){let c=isRef(d)?d:computed(typeof d=="function"?d:()=>d),g={...a,...v},w=isRef(s)?s:ref(s),G=ee(toRaw(w.value));return {r$:je({scopeRules:c,state:w,options:g,initialState:G,customRules:e,shortcuts:t})}}return n}var pt=Ve();function _e(){function e(r,t){return t}return e}var Ge=_e();function dt({rules:e,modifiers:r,shortcuts:t}){let a=Ve(e,r,t),n=_e();return {useRegle:a,inferRules:n}}
|
|
2
|
+
export{xe as InternalRuleType,Ce as createRule,dt as defineRegleConfig,Ge as inferRules,k as unwrapRuleParameters,pt as useRegle};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@regle/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Typescript-first model-based form validation library for Vue 3",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"vue": "^3.1.0"
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
"devDependencies": {
|
|
9
9
|
"@total-typescript/ts-reset": "0.6.1",
|
|
10
10
|
"@types/node": "22.9.3",
|
|
11
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
12
|
-
"@typescript-eslint/parser": "8.
|
|
11
|
+
"@typescript-eslint/eslint-plugin": "8.18.0",
|
|
12
|
+
"@typescript-eslint/parser": "8.18.0",
|
|
13
13
|
"@vue/test-utils": "2.4.6",
|
|
14
|
-
"bumpp": "9.
|
|
14
|
+
"bumpp": "9.9.0",
|
|
15
15
|
"changelogithub": "0.13.11",
|
|
16
16
|
"cross-env": "7.0.3",
|
|
17
17
|
"eslint": "9.15.0",
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"eslint-plugin-vue": "9.31.0",
|
|
20
20
|
"prettier": "3.3.3",
|
|
21
21
|
"tsup": "8.3.5",
|
|
22
|
-
"type-fest": "4.
|
|
22
|
+
"type-fest": "4.30.0",
|
|
23
23
|
"typescript": "5.6.3",
|
|
24
|
-
"vitest": "2.1.
|
|
24
|
+
"vitest": "2.1.8",
|
|
25
25
|
"vue": "3.5.13",
|
|
26
26
|
"vue-eslint-parser": "9.4.3",
|
|
27
27
|
"vue-tsc": "2.1.10"
|