@regle/core 0.2.13 → 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 +7 -7
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var vue=require('vue');var De=(r=>(r.Inline="__inline",r.Async="__async",r))(De||{});function ke(e,t){return e.some(r=>r[t])}function He(e,t){return e.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[])}function L(e){return e.map(t=>t instanceof Function?t():vue.unref(t))}function Le(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function qe(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(s=>s.trim()).filter(s=>s.length>0).length:0}function xe(e,...t){let{message:r,validator:n,active:a,type:l,...s}=e,v=l==="__async"||n.constructor.name==="AsyncFunction";return {...{validator(T,...S){return e.validator(T,...L(S.length?S:t))},message(T,S){return typeof e.message=="function"?e.message(T,{...S,$params:L(S.$params?.length?S.$params:t)}):e.message},active(T,S){return typeof e.active=="function"?e.active(T,{...S,$params:L(S.$params?.length?S.$params:t)}):e.active??!0},exec(T){let S=e.validator(T,...L(t)),h;return S instanceof Promise?S.then(y=>(h=y,typeof h=="object"&&"$valid"in h?h.$valid:typeof h=="boolean"?h:!1)):(h=S,typeof h=="object"&&"$valid"in h?h.$valid:typeof h=="boolean"?h:!1)}},...s,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:v,_params:Le(t)}}function Ce(e){if(typeof e.validator=="function"){let r=xe(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(qe(e.validator)>1){let a=function(...l){return xe(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 q(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ze(e){return q(e.value)}function te(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>te(n)))),r=="Map"&&(t=new Map([...e].map(n=>[te(n[0]),te(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,vt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=te(e[n]);}return t}function vt(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 Ie(e,t,r){return e instanceof Function?e(t,r??0):e}function Je(e,t){vue.isRef(e)?e.value=t:e=t;}function Ye(e,t){vue.isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=vue.isRef(e)?e.value[n]:e[n];a={},ce(a,t[n]);});}function ce(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],s=vue.isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(l)&&l.forEach((v,D)=>{a[r][D]={},ce(a[r][D],l[D]);})):q(l)?ce(s,l):vue.isRef(a[r])?a[r].value=l:a[r]=l;});}function J(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 $e(e,t,r){let n,a=(...l)=>new Promise(s=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(s);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...l)=>new Promise(s=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(s);},0);}),a}function mt(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]),s=Number(n[a]);if(l>s)return 1;if(s>l)return -1;if(!isNaN(l)&&isNaN(s))return 1;if(isNaN(l)&&!isNaN(s))return -1}return 0}var Se=mt(vue.version,"3.5.0")!==-1;function gt(){return Math.floor(Math.random()*Date.now()).toString()}function Pe(){return typeof window>"u"?gt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function we(){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 s(d){let o=t.value.get(d);if(o)return o;{let u=vue.ref({});return t.value.set(d,u),u}}function v(d){let o=r.value.get(d);if(o)return o;{let u=vue.ref([]);return r.value.set(d,u),u}}function D(d,o,u){l.value.set(`${d}-${o}`,u);}function E(d,o){return l.value.get(`${d}-${o}`)}function T(d,o){d&&o!=null&&l.value.delete(`${d}-${o}`);}function S(d,o){n.value.set(d,o);}function h(d){return n.value.get(d)??!1}function y(d,o){e.value.set(d,o);}function C(d,o){let u=e.value.get(d);return u?R(o,u)?{valid:!0}:{valid:!1}:void 0}function R(d,o){let u=Object.keys(o),$=Object.keys(d);return $.length!==u.length||!$.every(j=>u.includes(j))?!1:$.every(j=>{let x=d[j],A=o[j];return !A||!x||typeof x=="function"||typeof A=="function"||typeof x=="number"||typeof x=="boolean"?!1:x._params?x._params?.every((P,M)=>{if(typeof A=="number"||typeof A=="boolean")return !0;{let m=L(A._params),O=L(x._params);return m?.[M]===O?.[M]}}):!0})}function G(d){let o=a.value.get(d);if(o)return o;{let u=vue.ref(!1),$=vue.ref(!0),N=vue.ref({}),j=vue.ref(!1);return a.value.set(d,{$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:y,setDirtyEntry:S,checkRuleDeclEntry:C,getDirtyState:h,trySetRuleStatusRef:G,getFieldsEntry:s,getCollectionsEntry:v,getArrayStatus:E,addArrayStatus:D,deleteArrayStatus:T,arrayStatusStorage:l}}function Qe(e,t){return q(e.value)&&q(t.value)&&!Object.entries(t.value).some(r=>fe(r))}function Xe(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function Ze(e){return !!e.value&&q(e.value)}function fe(e){return q(e)&&"_validator"in e}function Re(e){return typeof e.value!="function"}function Ke(e){return q(e)&&"$fields"in e}function Oe({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 tt({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:l,storage:s,$debounce:v}){let D=vue.effectScope(),E,T,S=vue.ref(!1),{$pending:h,$valid:y,$metadata:C,$validating:R}=s.trySetRuleStatusRef(`${l}.${n}`);function G(){E=D.run(()=>{let x=vue.computed(()=>({$invalid:!y.value,$params:O.value,...C.value})),A=vue.computed(()=>Re(r)?typeof r.value.active=="function"?r.value.active(a.value,x.value):!!r.value.active:!0),P=vue.computed(()=>{let H="",Y=t?t[n]?.message:void 0;return Y&&(typeof Y=="function"?H=Y(a.value,x.value):H=Y),Re(r)&&(Y&&!r.value._patched||(typeof r.value.message=="function"?H=r.value.message(a.value,x.value):H=r.value.message)),J(H)&&(H="Error",console.warn(`No error message defined for ${l}.${n}`)),H}),M=vue.computed(()=>Re(r)&&r.value.type?r.value.type:n),m=vue.computed(()=>Re(r)?r.value.validator:r.value),O=vue.computed(()=>typeof r.value=="function"?[]:L(r.value._params??[])),X=vue.computed(()=>`${l}.${M.value}`);return {$active:A,$message:P,$type:M,$validator:m,$params:O,$path:X}}),T=vue.watch(E.$params,$,{deep:!0});}G();function d(){y.value=!0,e.value&&(h.value=!0);}async function o(){let x=E.$validator.value,A=x(a.value,...E.$params.value),P=!1,M=a.value;try{d();let m;if(A instanceof Promise?m=await A:m=A,a.value!==M)return !0;if(typeof m=="boolean")P=m;else {let{$valid:O,...X}=m;P=O,C.value=X;}}catch{P=!1;}finally{h.value=!1;}return P}let u=$e(o,v??200);async function $(){try{R.value=!0;let x=!1;if(fe(r.value)&&r.value._async)x=await u();else {let A=E.$validator.value,P=A(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")x=P;else {let{$valid:M,...m}=P;x=M,C.value=m;}}return y.value=x,x}catch{return !1}finally{R.value=!1;}}function N(){y.value=!0,C.value={},h.value=!1,R.value=!1,G();}function j(){T(),D.stop(),D=vue.effectScope();}return vue.reactive({...E,$pending:h,$valid:y,$metadata:C,_haveAsync:S,$validating:R,$validate:$,$unwatch:j,$watch:G,$reset:N})}function be({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:l,options:s,externalErrors:v,onUnwatch:D,$isArray:E,initialState:T,shortcuts:S}){let h=vue.effectScope(),y,C=[],R=vue.ref(!1),G=vue.ref(!1),d,o,u,$,N=()=>{};function j(){let p=t.value,V=l.checkRuleDeclEntry(n,p);O.value=Object.fromEntries(Object.entries(p).filter(([F])=>F.startsWith("$"))),m.value=Object.fromEntries(Object.entries(t.value).filter(([F])=>!F.startsWith("$")).map(([F,B])=>{if(B){let K=vue.toRef(()=>B);return [F,tt({$dirty:R,customMessages:r,rule:K,ruleKey:F,state:e,path:n,storage:l,$debounce:O.value.$debounce})]}return []}).filter(F=>!!F.length)),P(),x(),V?.valid!=null&&(R.value=l.getDirtyState(n),R.value&&N()),l.addRuleDeclEntry(n,p);}function x(){N=y.$debounce.value?$e(M,y.$debounce.value??y.haveAnyAsyncRule?100:0):M;}function A(){m.value&&Object.entries(m.value).forEach(([p,V])=>{V.$unwatch();}),u(),R.value&&l.setDirtyEntry(n,R.value),d?.(),o?.(),h.stop(),h=vue.effectScope(),C.forEach(p=>p.stop()),C=[],D?.(),$?.();}function P(){m.value&&Object.entries(m.value).forEach(([p,V])=>{V.$watch();}),y=h.run(()=>{let p=vue.computed(()=>R.value),V=vue.computed(()=>O.value.$debounce),F=vue.computed(()=>O.value.$lazy!=null?O.value.$lazy:vue.unref(s.lazy)),B=vue.computed(()=>O.value.$rewardEarly!=null?O.value.$rewardEarly:vue.unref(s.rewardEarly)),K=vue.computed(()=>O.value.$clearExternalErrorsOnChange!=null?O.value.$clearExternalErrorsOnChange:vue.unref(s.clearExternalErrorsOnChange)),oe=vue.computed(()=>O.value.$autoDirty!=null?O.value.$autoDirty:vue.unref(s.autoDirty)),w=vue.computed(()=>Object.entries(m.value).some(([Z,ee])=>ee.$validating)),_=vue.computed(()=>ge.value&&!me.value&&R.value),I=vue.computed(()=>_.value?Oe({field:{$dirty:R.value,$externalErrors:v?.value,$rules:m.value}}):[]),k=vue.computed(()=>Oe({field:{$dirty:R.value,$externalErrors:v?.value,$rules:m.value},silent:!0})),se=vue.computed(()=>!(ge.value||me.value)),me=vue.computed(()=>G.value||!B.value?Object.entries(m.value).some(([Z,ee])=>ee.$pending):!1),ge=vue.computed(()=>v?.value?.length?!0:J(m.value)?!1:!B.value||B.value&&G.value?Object.entries(m.value).some(([Z,ee])=>!ee.$valid):!1),Ne=vue.computed(()=>a),Ee=vue.computed(()=>v?.value?.length||J(m.value)?!1:R.value&&!J(e.value)&&!w.value?Object.values(m.value).every(Z=>Z.$valid&&Z.$active):!1),st=vue.computed(()=>Object.entries(m.value).some(([Z,ee])=>ee._haveAsync));function ct(){S?.fields&&Object.entries(S.fields).forEach(([Z,ee])=>{let We=vue.effectScope();Be[Z]=We.run(()=>{let Ue=vue.ref();return vue.watchEffect(()=>{Ue.value=ee({$dirty:R.value,$externalErrors:v?.value??[],$value:e,$rules:m.value,$error:_.value,$pending:me.value,$invalid:ge.value,$valid:Ee.value,$errors:I.value,$ready:se.value,$silentErrors:k.value,$anyDirty:p.value,$name:Ne.value});}),Ue}),C.push(We);});}let Be={};return ct(),vue.watch(Ee,Z=>{Z&&(G.value=!1);}),{$error:_,$pending:me,$invalid:ge,$valid:Ee,$debounce:V,$lazy:F,$errors:I,$ready:se,$silentErrors:k,$rewardEarly:B,$autoDirty:oe,$clearExternalErrorsOnChange:K,$anyDirty:p,$name:Ne,haveAnyAsyncRule:st,$shortcuts:Be,$validating:w}}),d=vue.watch(e,()=>{y.$autoDirty.value&&(R.value||(R.value=!0)),t.value instanceof Function&&j(),N(),y.$rewardEarly.value!==!0&&y.$clearExternalErrorsOnChange.value&&g();},{deep:E?!0:Se?1:!0}),u=vue.watch(R,()=>{l.setDirtyEntry(n,R.value);}),o=vue.watch(y.$valid,p=>{y.$rewardEarly.value&&p&&(G.value=!1);}),$=vue.watch(y.haveAnyAsyncRule,x);}function M(){Object.values(m.value).forEach(p=>{p.$validate();});}let m=vue.ref(),O=vue.ref();j();function X(){g(),R.value=!1,Object.entries(m.value).forEach(([p,V])=>{V.$reset();}),!y.$lazy.value&&y.$autoDirty.value&&Object.values(m.value).forEach(p=>p.$validate());}function H(p=!0){R.value||(R.value=!0,p&&N());}async function Y(){try{let p=e.value;if(G.value=!0,!R.value)R.value=!0;else if(y.$autoDirty.value&&R.value&&!y.$pending.value)return {result:!y.$error.value,data:p};return J(m.value)?{result:!0,data:p}:{result:(await Promise.allSettled(Object.entries(m.value).map(([B,K])=>K.$validate()))).every(B=>B.status==="fulfilled"?B.value===!0:!1),data:p}}catch{return {result:!1,data:e.value}}}function i(){A(),e.value=Je(e,T),X();}function c(p=!0){return R.value?e.value:null}function g(){v?.value?.length&&(v.value=[]);}!y.$lazy.value&&!R.value&&y.$autoDirty.value&&N();let{$shortcuts:b,$validating:f,...W}=y;return vue.reactive({$dirty:R,...W,$externalErrors:v,$value:e,$rules:m,...b,$reset:X,$touch:H,$validate:Y,$unwatch:A,$watch:P,$resetAll:i,$extractDirtyFields:c,$clearExternalErrors:g})}function rt({$id:e,path:t,index:r,options:n,storage:a,stateValue:l,customMessages:s,rules:v,externalErrors:D,initialState:E,shortcuts:T,fieldName:S}){let h=v.$key?v.$key:Pe(),y=`${t}.${String(h)}`;typeof l.value=="object"&&l.value!=null&&(l.value.$id?y=`${t}.${l.value.$id}`:Object.defineProperties(l.value,{$id:{value:h,enumerable:!1,configurable:!1,writable:!1}}));let C=ye({state:l,rulesDef:vue.toRef(()=>v),customMessages:s,path:y,storage:a,options:n,externalErrors:vue.toRef(D?.value??[],r),initialState:E?.[r],shortcuts:T,fieldName:S});if(C){let R=l.value?.$id;C.$id=R??String(h),a.addArrayStatus(e,C.$id,C);}return C}function nt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:s,initialState:v,shortcuts:D,fieldName:E}){let T=vue.effectScope(),S,h=vue.effectScope(),y,C=[];if(!Array.isArray(e.value)&&!t.value.$each)return null;let R=vue.ref(),G=vue.ref(e.value),d,o=vue.ref({}),u=a.getCollectionsEntry(n);y=h.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=>fe(c)):!1)})),$(),j();function $(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(R.value=Pe(),Object.defineProperties(e.value,{$id:{value:R.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(R.value=e.value.$id)),!y.isPrimitiveArray.value&&(G.value=o.value.$value,Array.isArray(e.value)?u.value=e.value.map((i,c)=>{let g=Ie(t.value.$each,vue.toRef(()=>i),c),b=rt({$id:R.value,path:n,rules:g??{},stateValue:vue.toRef(()=>i),index:c,options:l,storage:a,externalErrors:vue.toRef(s?.value??{},"$each"),initialState:v?.[c],shortcuts:D,fieldName:E});return b||null}).filter(i=>!!i):u.value=[],o.value=be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:vue.toRef(s?.value??{},"$errors"),$isArray:!0,initialState:v,shortcuts:D,fieldName:E}));}function N(){if(Array.isArray(e.value)){let i=te(u.value);u.value=e.value.map((c,g)=>{let b=vue.toRef(()=>c);if(c.$id&&u.value.find(f=>f.$id===c.$id)){let f=a.getArrayStatus(R.value,c.$id);return f?(f.$value=b,f):null}else {let f=Ie(t.value.$each,b,g);if(f){let W=rt({$id:R.value,path:n,rules:f,stateValue:b,index:g,options:l,storage:a,externalErrors:vue.toRef(s?.value??{},"$each"),initialState:v?.[g],shortcuts:D,fieldName:E});return W||null}}}).filter(c=>!!c),i.filter(c=>!e.value.find(g=>c.$id===g.$id)).forEach((c,g)=>{a.deleteArrayStatus(R.value,g.toString());});}else u.value=[];}function j(){d=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?$():N();},{deep:Se?1:!0,flush:"pre"}),S=T.run(()=>{let i=vue.computed(()=>o.value.$dirty&&u.value.every(w=>w.$dirty)),c=vue.computed(()=>o.value.$anyDirty||u.value.some(w=>w.$dirty)),g=vue.computed(()=>o.value.$invalid||u.value.some(w=>w.$invalid)),b=vue.computed(()=>(J(o.value.$rules)?!0:o.value.$valid)&&u.value.every(w=>w.$valid)),f=vue.computed(()=>o.value.$error||u.value.some(w=>w.$error)),W=vue.computed(()=>!(g.value||p.value)),p=vue.computed(()=>o.value.$pending||u.value.some(w=>w.$pending)),V=vue.computed(()=>({$errors:o.value.$errors,$each:u.value.map(w=>w.$errors)})),F=vue.computed(()=>({$errors:o.value.$silentErrors,$each:u.value.map(w=>w.$silentErrors)})),B=vue.computed(()=>E);function K(){D?.collections&&Object.entries(D?.collections).forEach(([w,_])=>{let I=vue.effectScope();oe[w]=I.run(()=>{let k=vue.ref();return vue.watchEffect(()=>{k.value=_({$dirty:i.value,$error:f.value,$pending:p.value,$invalid:g.value,$valid:b.value,$errors:V.value,$ready:W.value,$silentErrors:F.value,$anyDirty:c.value,$name:B.value,$each:u.value,$field:o.value,$value:e});}),k}),C.push(I);});}let oe={};return K(),{$dirty:i,$anyDirty:c,$invalid:g,$valid:b,$error:f,$pending:p,$errors:V,$silentErrors:F,$ready:W,$name:B,$shortcuts:oe}}),y.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`),d());}function x(){d&&d(),o.value&&o.value.$unwatch(),u.value&&u.value.forEach(i=>{"$dirty"in i&&i.$unwatch();}),T.stop(),T=vue.effectScope(),h.stop(),h=vue.effectScope(!0),C.forEach(i=>i.stop()),C=[];}function A(i=!0){o.value.$touch(i),u.value.forEach(c=>{c.$touch(i);});}function P(){o.value.$reset(),u.value.forEach(i=>{i.$reset();});}async function M(){let i=e.value;try{return {result:(await Promise.allSettled([o.value.$validate(),...u.value.map(b=>b.$validate())])).every(b=>b.status==="fulfilled"?b.value.result===!0:!1),data:i}}catch{return {result:!1,data:i}}}function m(){o.value.$clearExternalErrors(),u.value.forEach(i=>{i.$clearExternalErrors();});}function O(i=!0){let c=u.value.map(g=>{if(Ke(g))return g.$extractDirtyFields(i)});return i&&(c=c.filter(g=>q(g)?!J(g):!!g)),c}function X(){x(),Ye(e,v),P();}let{$shortcuts:H,...Y}=S;return vue.reactive({$field:o,...Y,...H,$each:u,$value:e,$validate:M,$unwatch:x,$watch:j,$touch:A,$reset:P,$resetAll:X,$extractDirtyFields:O,$clearExternalErrors:m})}function Fe({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:l,options:s,externalErrors:v,validationGroups:D,initialState:E,shortcuts:T,fieldName:S}){let h=vue.effectScope(),y,C=[],R=null,G=null,d=null;async function u(i=!0){let c=Object.fromEntries(Object.entries(e.value).map(([f,W])=>{if(W){let p=vue.toRef(t.value,f);vue.triggerRef(p);let V=vue.toRef(()=>W),F=vue.toRef(v?.value,f);return [f,ye({state:p,rulesDef:V,customMessages:r,path:n?`${n}.${f}`:f,storage:l,options:s,externalErrors:F,initialState:E?.[f],shortcuts:T,fieldName:f})]}return []}).filter(f=>!!f.length&&f[1]!=null)),g=Object.fromEntries(Object.entries(vue.unref(v)??{}).filter(([f])=>!(f in e.value)).map(([f,W])=>{if(W){let p=vue.toRef(t.value,f);return [f,ye({state:p,rulesDef:vue.computed(()=>({})),customMessages:r,path:n?`${n}.${f}`:f,storage:l,options:s,externalErrors:vue.toRef(v?.value??{},f),initialState:E?.[f],shortcuts:T,fieldName:f})]}return []})),b=Object.fromEntries(Object.entries(t.value).filter(([f])=>!(f in e.value)&&!(f in(g.value??{}))).map(([f,W])=>{let p=vue.toRef(t.value,f);return [f,ye({state:p,rulesDef:vue.computed(()=>({})),customMessages:r,path:n?`${n}.${f}`:f,storage:l,options:s,externalErrors:vue.toRef(v?.value??{},f),initialState:E?.[f],shortcuts:T,fieldName:f})]}));$.value={...c,...g,...b},i&&P();}let $=l.getFieldsEntry(n);u();function N(){G?.(),Object.values($.value).forEach(i=>{i.$reset();}),A();}function j(i=!0){Object.values($.value).forEach(c=>{c.$touch(i);});}async function x(){try{let i=t.value;return {result:(await Promise.allSettled(Object.values($.value).map(b=>b.$validate()))).every(b=>b.status==="fulfilled"?b.value.result===!0:!1),data:i}}catch{return {result:!1,data:t.value}}}function A(){v?.value&&(G=vue.watch(v,()=>{M(),u();},{deep:!0}));}function P(){a&&(R=vue.watch(a,()=>{M(),u();},{deep:!0,flush:"post"}),A()),d=vue.watch(t,()=>{M(),u(),j();},{flush:"sync"}),y=h.run(()=>{let i=vue.computed(()=>!!Object.entries($.value).length&&Object.entries($.value).every(([_,I])=>I?.$dirty)),c=vue.computed(()=>Object.entries($.value).some(([_,I])=>I?.$dirty)),g=vue.computed(()=>Object.entries($.value).some(([_,I])=>I?.$invalid)),b=vue.computed(()=>Object.entries($.value).every(([_,I])=>I?.$valid)),f=vue.computed(()=>i.value&&!p.value&&g.value),W=vue.computed(()=>vue.unref(s.autoDirty)?c.value&&!(g.value||p.value):!(g.value||p.value)),p=vue.computed(()=>Object.entries($.value).some(([_,I])=>I?.$pending)),V=vue.computed(()=>Object.fromEntries(Object.entries($.value).map(([_,I])=>[_,I?.$errors]))),F=vue.computed(()=>Object.fromEntries(Object.entries($.value).map(([_,I])=>[_,I?.$silentErrors]))),B=vue.computed(()=>S);function K(){T?.nested&&Object.entries(T.nested).forEach(([_,I])=>{let k=vue.effectScope();w[_]=k.run(()=>{let se=vue.ref();return vue.watchEffect(()=>{se.value=I({$dirty:i.value,$value:t,$error:f.value,$pending:p.value,$invalid:g.value,$valid:b.value,$ready:W.value,$anyDirty:c.value,$name:B.value,$silentErrors:F.value,$errors:V.value,$fields:$.value});}),se}),C.push(k);});}let oe=vue.computed(()=>D?Object.fromEntries(Object.entries(D?.($.value)??{}).map(([_,I])=>I.length?[_,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(k=>[k,ke(I,k)])),...Object.fromEntries(["$errors","$silentErrors"].map(k=>[k,He(I,k)]))}]:[])):{}),w={};return K(),{$dirty:i,$anyDirty:c,$invalid:g,$valid:b,$error:f,$pending:p,$errors:V,$silentErrors:F,$ready:W,$name:B,$shortcuts:w,$groups:oe}});}function M(){R?.(),G?.(),d?.(),C.forEach(i=>i.stop()),C=[],$.value&&Object.entries($.value).forEach(([i,c])=>{c.$unwatch();});}function m(){Object.entries($.value).forEach(([i,c])=>{c.$clearExternalErrors();});}function O(){M(),ce(t,E??{}),u(!1),N(),P();}function X(i=!0){let c=Object.entries($.value).map(([g,b])=>[g,b.$extractDirtyFields(i)]);return i&&(c=c.filter(([g,b])=>q(b)?!J(b):Array.isArray(b)?b.length:!!b)),Object.fromEntries(c)}let{$shortcuts:H,...Y}=y;return vue.reactive({...Y,...H,$fields:$,$value:t,$resetAll:O,$reset:N,$touch:j,$validate:x,$unwatch:M,$watch:P,$clearExternalErrors:m,$extractDirtyFields:X})}function ye({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:s,index:v,initialState:D,shortcuts:E,onUnwatch:T,fieldName:S}){return Xe(t,e)?nt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:v,externalErrors:s,initialState:D,fieldName:S,shortcuts:E}):Qe(e,t)&&ze(e)?Fe({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:l,index:v,initialState:D,shortcuts:E,fieldName:S,externalErrors:s}):Ze(t)?be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:v,externalErrors:s,onUnwatch:T,shortcuts:E,initialState:D,fieldName:S}):null}function je({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:l}){let s=we();return vue.reactive(Fe({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:s,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:l,fieldName:"root"}))}function Ve(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange??!0};function a(l,s,v){let D=vue.isRef(s)?s:vue.computed(typeof s=="function"?s:()=>s),E={...n,...v},T=vue.isRef(l)?l:vue.ref(l),S=te(vue.toRaw(T.value));return {r$:je({scopeRules:D,state:T,options:E,initialState:S,customRules:e,shortcuts:r})}}return a}var ut=Ve();function _e(){function e(t,r){return r}return e}var Ge=_e();function it({rules:e,modifiers:t,shortcuts:r}){let n=Ve(e,t,r),a=_e();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,effectScope,triggerRef,watch,watchEffect}from'vue';var De=(r=>(r.Inline="__inline",r.Async="__async",r))(De||{});function ke(e,t){return e.some(r=>r[t])}function He(e,t){return e.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[])}function L(e){return e.map(t=>t instanceof Function?t():unref(t))}function Le(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function qe(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(s=>s.trim()).filter(s=>s.length>0).length:0}function xe(e,...t){let{message:r,validator:n,active:a,type:l,...s}=e,v=l==="__async"||n.constructor.name==="AsyncFunction";return {...{validator(T,...S){return e.validator(T,...L(S.length?S:t))},message(T,S){return typeof e.message=="function"?e.message(T,{...S,$params:L(S.$params?.length?S.$params:t)}):e.message},active(T,S){return typeof e.active=="function"?e.active(T,{...S,$params:L(S.$params?.length?S.$params:t)}):e.active??!0},exec(T){let S=e.validator(T,...L(t)),h;return S instanceof Promise?S.then(y=>(h=y,typeof h=="object"&&"$valid"in h?h.$valid:typeof h=="boolean"?h:!1)):(h=S,typeof h=="object"&&"$valid"in h?h.$valid:typeof h=="boolean"?h:!1)}},...s,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:v,_params:Le(t)}}function Ce(e){if(typeof e.validator=="function"){let r=xe(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(qe(e.validator)>1){let a=function(...l){return xe(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 q(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ze(e){return q(e.value)}function te(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>te(n)))),r=="Map"&&(t=new Map([...e].map(n=>[te(n[0]),te(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,vt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=te(e[n]);}return t}function vt(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 Ie(e,t,r){return e instanceof Function?e(t,r??0):e}function Je(e,t){isRef(e)?e.value=t:e=t;}function Ye(e,t){isRef(e)?e.value=[]:e=[],t.forEach((r,n)=>{let a=isRef(e)?e.value[n]:e[n];a={},ce(a,t[n]);});}function ce(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],s=isRef(a[r])?a[r].value:a[r];Array.isArray(a[r])?(a[r]=[],Array.isArray(l)&&l.forEach((v,D)=>{a[r][D]={},ce(a[r][D],l[D]);})):q(l)?ce(s,l):isRef(a[r])?a[r].value=l:a[r]=l;});}function J(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 $e(e,t,r){let n,a=(...l)=>new Promise(s=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(s);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...l)=>new Promise(s=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(s);},0);}),a}function mt(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]),s=Number(n[a]);if(l>s)return 1;if(s>l)return -1;if(!isNaN(l)&&isNaN(s))return 1;if(isNaN(l)&&!isNaN(s))return -1}return 0}var Se=mt(version,"3.5.0")!==-1;function gt(){return Math.floor(Math.random()*Date.now()).toString()}function Pe(){return typeof window>"u"?gt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function we(){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 s(d){let o=t.value.get(d);if(o)return o;{let u=ref({});return t.value.set(d,u),u}}function v(d){let o=r.value.get(d);if(o)return o;{let u=ref([]);return r.value.set(d,u),u}}function D(d,o,u){l.value.set(`${d}-${o}`,u);}function E(d,o){return l.value.get(`${d}-${o}`)}function T(d,o){d&&o!=null&&l.value.delete(`${d}-${o}`);}function S(d,o){n.value.set(d,o);}function h(d){return n.value.get(d)??!1}function y(d,o){e.value.set(d,o);}function C(d,o){let u=e.value.get(d);return u?R(o,u)?{valid:!0}:{valid:!1}:void 0}function R(d,o){let u=Object.keys(o),$=Object.keys(d);return $.length!==u.length||!$.every(j=>u.includes(j))?!1:$.every(j=>{let x=d[j],A=o[j];return !A||!x||typeof x=="function"||typeof A=="function"||typeof x=="number"||typeof x=="boolean"?!1:x._params?x._params?.every((P,M)=>{if(typeof A=="number"||typeof A=="boolean")return !0;{let m=L(A._params),O=L(x._params);return m?.[M]===O?.[M]}}):!0})}function G(d){let o=a.value.get(d);if(o)return o;{let u=ref(!1),$=ref(!0),N=ref({}),j=ref(!1);return a.value.set(d,{$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:y,setDirtyEntry:S,checkRuleDeclEntry:C,getDirtyState:h,trySetRuleStatusRef:G,getFieldsEntry:s,getCollectionsEntry:v,getArrayStatus:E,addArrayStatus:D,deleteArrayStatus:T,arrayStatusStorage:l}}function Qe(e,t){return q(e.value)&&q(t.value)&&!Object.entries(t.value).some(r=>fe(r))}function Xe(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function Ze(e){return !!e.value&&q(e.value)}function fe(e){return q(e)&&"_validator"in e}function Re(e){return typeof e.value!="function"}function Ke(e){return q(e)&&"$fields"in e}function Oe({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 tt({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:l,storage:s,$debounce:v}){let D=effectScope(),E,T,S=ref(!1),{$pending:h,$valid:y,$metadata:C,$validating:R}=s.trySetRuleStatusRef(`${l}.${n}`);function G(){E=D.run(()=>{let x=computed(()=>({$invalid:!y.value,$params:O.value,...C.value})),A=computed(()=>Re(r)?typeof r.value.active=="function"?r.value.active(a.value,x.value):!!r.value.active:!0),P=computed(()=>{let H="",Y=t?t[n]?.message:void 0;return Y&&(typeof Y=="function"?H=Y(a.value,x.value):H=Y),Re(r)&&(Y&&!r.value._patched||(typeof r.value.message=="function"?H=r.value.message(a.value,x.value):H=r.value.message)),J(H)&&(H="Error",console.warn(`No error message defined for ${l}.${n}`)),H}),M=computed(()=>Re(r)&&r.value.type?r.value.type:n),m=computed(()=>Re(r)?r.value.validator:r.value),O=computed(()=>typeof r.value=="function"?[]:L(r.value._params??[])),X=computed(()=>`${l}.${M.value}`);return {$active:A,$message:P,$type:M,$validator:m,$params:O,$path:X}}),T=watch(E.$params,$,{deep:!0});}G();function d(){y.value=!0,e.value&&(h.value=!0);}async function o(){let x=E.$validator.value,A=x(a.value,...E.$params.value),P=!1,M=a.value;try{d();let m;if(A instanceof Promise?m=await A:m=A,a.value!==M)return !0;if(typeof m=="boolean")P=m;else {let{$valid:O,...X}=m;P=O,C.value=X;}}catch{P=!1;}finally{h.value=!1;}return P}let u=$e(o,v??200);async function $(){try{R.value=!0;let x=!1;if(fe(r.value)&&r.value._async)x=await u();else {let A=E.$validator.value,P=A(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")x=P;else {let{$valid:M,...m}=P;x=M,C.value=m;}}return y.value=x,x}catch{return !1}finally{R.value=!1;}}function N(){y.value=!0,C.value={},h.value=!1,R.value=!1,G();}function j(){T(),D.stop(),D=effectScope();}return reactive({...E,$pending:h,$valid:y,$metadata:C,_haveAsync:S,$validating:R,$validate:$,$unwatch:j,$watch:G,$reset:N})}function be({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:l,options:s,externalErrors:v,onUnwatch:D,$isArray:E,initialState:T,shortcuts:S}){let h=effectScope(),y,C=[],R=ref(!1),G=ref(!1),d,o,u,$,N=()=>{};function j(){let p=t.value,V=l.checkRuleDeclEntry(n,p);O.value=Object.fromEntries(Object.entries(p).filter(([F])=>F.startsWith("$"))),m.value=Object.fromEntries(Object.entries(t.value).filter(([F])=>!F.startsWith("$")).map(([F,B])=>{if(B){let K=toRef(()=>B);return [F,tt({$dirty:R,customMessages:r,rule:K,ruleKey:F,state:e,path:n,storage:l,$debounce:O.value.$debounce})]}return []}).filter(F=>!!F.length)),P(),x(),V?.valid!=null&&(R.value=l.getDirtyState(n),R.value&&N()),l.addRuleDeclEntry(n,p);}function x(){N=y.$debounce.value?$e(M,y.$debounce.value??y.haveAnyAsyncRule?100:0):M;}function A(){m.value&&Object.entries(m.value).forEach(([p,V])=>{V.$unwatch();}),u(),R.value&&l.setDirtyEntry(n,R.value),d?.(),o?.(),h.stop(),h=effectScope(),C.forEach(p=>p.stop()),C=[],D?.(),$?.();}function P(){m.value&&Object.entries(m.value).forEach(([p,V])=>{V.$watch();}),y=h.run(()=>{let p=computed(()=>R.value),V=computed(()=>O.value.$debounce),F=computed(()=>O.value.$lazy!=null?O.value.$lazy:unref(s.lazy)),B=computed(()=>O.value.$rewardEarly!=null?O.value.$rewardEarly:unref(s.rewardEarly)),K=computed(()=>O.value.$clearExternalErrorsOnChange!=null?O.value.$clearExternalErrorsOnChange:unref(s.clearExternalErrorsOnChange)),oe=computed(()=>O.value.$autoDirty!=null?O.value.$autoDirty:unref(s.autoDirty)),w=computed(()=>Object.entries(m.value).some(([Z,ee])=>ee.$validating)),_=computed(()=>ge.value&&!me.value&&R.value),I=computed(()=>_.value?Oe({field:{$dirty:R.value,$externalErrors:v?.value,$rules:m.value}}):[]),k=computed(()=>Oe({field:{$dirty:R.value,$externalErrors:v?.value,$rules:m.value},silent:!0})),se=computed(()=>!(ge.value||me.value)),me=computed(()=>G.value||!B.value?Object.entries(m.value).some(([Z,ee])=>ee.$pending):!1),ge=computed(()=>v?.value?.length?!0:J(m.value)?!1:!B.value||B.value&&G.value?Object.entries(m.value).some(([Z,ee])=>!ee.$valid):!1),Ne=computed(()=>a),Ee=computed(()=>v?.value?.length||J(m.value)?!1:R.value&&!J(e.value)&&!w.value?Object.values(m.value).every(Z=>Z.$valid&&Z.$active):!1),st=computed(()=>Object.entries(m.value).some(([Z,ee])=>ee._haveAsync));function ct(){S?.fields&&Object.entries(S.fields).forEach(([Z,ee])=>{let We=effectScope();Be[Z]=We.run(()=>{let Ue=ref();return watchEffect(()=>{Ue.value=ee({$dirty:R.value,$externalErrors:v?.value??[],$value:e,$rules:m.value,$error:_.value,$pending:me.value,$invalid:ge.value,$valid:Ee.value,$errors:I.value,$ready:se.value,$silentErrors:k.value,$anyDirty:p.value,$name:Ne.value});}),Ue}),C.push(We);});}let Be={};return ct(),watch(Ee,Z=>{Z&&(G.value=!1);}),{$error:_,$pending:me,$invalid:ge,$valid:Ee,$debounce:V,$lazy:F,$errors:I,$ready:se,$silentErrors:k,$rewardEarly:B,$autoDirty:oe,$clearExternalErrorsOnChange:K,$anyDirty:p,$name:Ne,haveAnyAsyncRule:st,$shortcuts:Be,$validating:w}}),d=watch(e,()=>{y.$autoDirty.value&&(R.value||(R.value=!0)),t.value instanceof Function&&j(),N(),y.$rewardEarly.value!==!0&&y.$clearExternalErrorsOnChange.value&&g();},{deep:E?!0:Se?1:!0}),u=watch(R,()=>{l.setDirtyEntry(n,R.value);}),o=watch(y.$valid,p=>{y.$rewardEarly.value&&p&&(G.value=!1);}),$=watch(y.haveAnyAsyncRule,x);}function M(){Object.values(m.value).forEach(p=>{p.$validate();});}let m=ref(),O=ref();j();function X(){g(),R.value=!1,Object.entries(m.value).forEach(([p,V])=>{V.$reset();}),!y.$lazy.value&&y.$autoDirty.value&&Object.values(m.value).forEach(p=>p.$validate());}function H(p=!0){R.value||(R.value=!0,p&&N());}async function Y(){try{let p=e.value;if(G.value=!0,!R.value)R.value=!0;else if(y.$autoDirty.value&&R.value&&!y.$pending.value)return {result:!y.$error.value,data:p};return J(m.value)?{result:!0,data:p}:{result:(await Promise.allSettled(Object.entries(m.value).map(([B,K])=>K.$validate()))).every(B=>B.status==="fulfilled"?B.value===!0:!1),data:p}}catch{return {result:!1,data:e.value}}}function i(){A(),e.value=Je(e,T),X();}function c(p=!0){return R.value?e.value:null}function g(){v?.value?.length&&(v.value=[]);}!y.$lazy.value&&!R.value&&y.$autoDirty.value&&N();let{$shortcuts:b,$validating:f,...W}=y;return reactive({$dirty:R,...W,$externalErrors:v,$value:e,$rules:m,...b,$reset:X,$touch:H,$validate:Y,$unwatch:A,$watch:P,$resetAll:i,$extractDirtyFields:c,$clearExternalErrors:g})}function rt({$id:e,path:t,index:r,options:n,storage:a,stateValue:l,customMessages:s,rules:v,externalErrors:D,initialState:E,shortcuts:T,fieldName:S}){let h=v.$key?v.$key:Pe(),y=`${t}.${String(h)}`;typeof l.value=="object"&&l.value!=null&&(l.value.$id?y=`${t}.${l.value.$id}`:Object.defineProperties(l.value,{$id:{value:h,enumerable:!1,configurable:!1,writable:!1}}));let C=ye({state:l,rulesDef:toRef(()=>v),customMessages:s,path:y,storage:a,options:n,externalErrors:toRef(D?.value??[],r),initialState:E?.[r],shortcuts:T,fieldName:S});if(C){let R=l.value?.$id;C.$id=R??String(h),a.addArrayStatus(e,C.$id,C);}return C}function nt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:s,initialState:v,shortcuts:D,fieldName:E}){let T=effectScope(),S,h=effectScope(),y,C=[];if(!Array.isArray(e.value)&&!t.value.$each)return null;let R=ref(),G=ref(e.value),d,o=ref({}),u=a.getCollectionsEntry(n);y=h.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=>fe(c)):!1)})),$(),j();function $(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(R.value=Pe(),Object.defineProperties(e.value,{$id:{value:R.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(R.value=e.value.$id)),!y.isPrimitiveArray.value&&(G.value=o.value.$value,Array.isArray(e.value)?u.value=e.value.map((i,c)=>{let g=Ie(t.value.$each,toRef(()=>i),c),b=rt({$id:R.value,path:n,rules:g??{},stateValue:toRef(()=>i),index:c,options:l,storage:a,externalErrors:toRef(s?.value??{},"$each"),initialState:v?.[c],shortcuts:D,fieldName:E});return b||null}).filter(i=>!!i):u.value=[],o.value=be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:toRef(s?.value??{},"$errors"),$isArray:!0,initialState:v,shortcuts:D,fieldName:E}));}function N(){if(Array.isArray(e.value)){let i=te(u.value);u.value=e.value.map((c,g)=>{let b=toRef(()=>c);if(c.$id&&u.value.find(f=>f.$id===c.$id)){let f=a.getArrayStatus(R.value,c.$id);return f?(f.$value=b,f):null}else {let f=Ie(t.value.$each,b,g);if(f){let W=rt({$id:R.value,path:n,rules:f,stateValue:b,index:g,options:l,storage:a,externalErrors:toRef(s?.value??{},"$each"),initialState:v?.[g],shortcuts:D,fieldName:E});return W||null}}}).filter(c=>!!c),i.filter(c=>!e.value.find(g=>c.$id===g.$id)).forEach((c,g)=>{a.deleteArrayStatus(R.value,g.toString());});}else u.value=[];}function j(){d=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?$():N();},{deep:Se?1:!0,flush:"pre"}),S=T.run(()=>{let i=computed(()=>o.value.$dirty&&u.value.every(w=>w.$dirty)),c=computed(()=>o.value.$anyDirty||u.value.some(w=>w.$dirty)),g=computed(()=>o.value.$invalid||u.value.some(w=>w.$invalid)),b=computed(()=>(J(o.value.$rules)?!0:o.value.$valid)&&u.value.every(w=>w.$valid)),f=computed(()=>o.value.$error||u.value.some(w=>w.$error)),W=computed(()=>!(g.value||p.value)),p=computed(()=>o.value.$pending||u.value.some(w=>w.$pending)),V=computed(()=>({$errors:o.value.$errors,$each:u.value.map(w=>w.$errors)})),F=computed(()=>({$errors:o.value.$silentErrors,$each:u.value.map(w=>w.$silentErrors)})),B=computed(()=>E);function K(){D?.collections&&Object.entries(D?.collections).forEach(([w,_])=>{let I=effectScope();oe[w]=I.run(()=>{let k=ref();return watchEffect(()=>{k.value=_({$dirty:i.value,$error:f.value,$pending:p.value,$invalid:g.value,$valid:b.value,$errors:V.value,$ready:W.value,$silentErrors:F.value,$anyDirty:c.value,$name:B.value,$each:u.value,$field:o.value,$value:e});}),k}),C.push(I);});}let oe={};return K(),{$dirty:i,$anyDirty:c,$invalid:g,$valid:b,$error:f,$pending:p,$errors:V,$silentErrors:F,$ready:W,$name:B,$shortcuts:oe}}),y.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`),d());}function x(){d&&d(),o.value&&o.value.$unwatch(),u.value&&u.value.forEach(i=>{"$dirty"in i&&i.$unwatch();}),T.stop(),T=effectScope(),h.stop(),h=effectScope(!0),C.forEach(i=>i.stop()),C=[];}function A(i=!0){o.value.$touch(i),u.value.forEach(c=>{c.$touch(i);});}function P(){o.value.$reset(),u.value.forEach(i=>{i.$reset();});}async function M(){let i=e.value;try{return {result:(await Promise.allSettled([o.value.$validate(),...u.value.map(b=>b.$validate())])).every(b=>b.status==="fulfilled"?b.value.result===!0:!1),data:i}}catch{return {result:!1,data:i}}}function m(){o.value.$clearExternalErrors(),u.value.forEach(i=>{i.$clearExternalErrors();});}function O(i=!0){let c=u.value.map(g=>{if(Ke(g))return g.$extractDirtyFields(i)});return i&&(c=c.filter(g=>q(g)?!J(g):!!g)),c}function X(){x(),Ye(e,v),P();}let{$shortcuts:H,...Y}=S;return reactive({$field:o,...Y,...H,$each:u,$value:e,$validate:M,$unwatch:x,$watch:j,$touch:A,$reset:P,$resetAll:X,$extractDirtyFields:O,$clearExternalErrors:m})}function Fe({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:l,options:s,externalErrors:v,validationGroups:D,initialState:E,shortcuts:T,fieldName:S}){let h=effectScope(),y,C=[],R=null,G=null,d=null;async function u(i=!0){let c=Object.fromEntries(Object.entries(e.value).map(([f,W])=>{if(W){let p=toRef(t.value,f);triggerRef(p);let V=toRef(()=>W),F=toRef(v?.value,f);return [f,ye({state:p,rulesDef:V,customMessages:r,path:n?`${n}.${f}`:f,storage:l,options:s,externalErrors:F,initialState:E?.[f],shortcuts:T,fieldName:f})]}return []}).filter(f=>!!f.length&&f[1]!=null)),g=Object.fromEntries(Object.entries(unref(v)??{}).filter(([f])=>!(f in e.value)).map(([f,W])=>{if(W){let p=toRef(t.value,f);return [f,ye({state:p,rulesDef:computed(()=>({})),customMessages:r,path:n?`${n}.${f}`:f,storage:l,options:s,externalErrors:toRef(v?.value??{},f),initialState:E?.[f],shortcuts:T,fieldName:f})]}return []})),b=Object.fromEntries(Object.entries(t.value).filter(([f])=>!(f in e.value)&&!(f in(g.value??{}))).map(([f,W])=>{let p=toRef(t.value,f);return [f,ye({state:p,rulesDef:computed(()=>({})),customMessages:r,path:n?`${n}.${f}`:f,storage:l,options:s,externalErrors:toRef(v?.value??{},f),initialState:E?.[f],shortcuts:T,fieldName:f})]}));$.value={...c,...g,...b},i&&P();}let $=l.getFieldsEntry(n);u();function N(){G?.(),Object.values($.value).forEach(i=>{i.$reset();}),A();}function j(i=!0){Object.values($.value).forEach(c=>{c.$touch(i);});}async function x(){try{let i=t.value;return {result:(await Promise.allSettled(Object.values($.value).map(b=>b.$validate()))).every(b=>b.status==="fulfilled"?b.value.result===!0:!1),data:i}}catch{return {result:!1,data:t.value}}}function A(){v?.value&&(G=watch(v,()=>{M(),u();},{deep:!0}));}function P(){a&&(R=watch(a,()=>{M(),u();},{deep:!0,flush:"post"}),A()),d=watch(t,()=>{M(),u(),j();},{flush:"sync"}),y=h.run(()=>{let i=computed(()=>!!Object.entries($.value).length&&Object.entries($.value).every(([_,I])=>I?.$dirty)),c=computed(()=>Object.entries($.value).some(([_,I])=>I?.$dirty)),g=computed(()=>Object.entries($.value).some(([_,I])=>I?.$invalid)),b=computed(()=>Object.entries($.value).every(([_,I])=>I?.$valid)),f=computed(()=>i.value&&!p.value&&g.value),W=computed(()=>unref(s.autoDirty)?c.value&&!(g.value||p.value):!(g.value||p.value)),p=computed(()=>Object.entries($.value).some(([_,I])=>I?.$pending)),V=computed(()=>Object.fromEntries(Object.entries($.value).map(([_,I])=>[_,I?.$errors]))),F=computed(()=>Object.fromEntries(Object.entries($.value).map(([_,I])=>[_,I?.$silentErrors]))),B=computed(()=>S);function K(){T?.nested&&Object.entries(T.nested).forEach(([_,I])=>{let k=effectScope();w[_]=k.run(()=>{let se=ref();return watchEffect(()=>{se.value=I({$dirty:i.value,$value:t,$error:f.value,$pending:p.value,$invalid:g.value,$valid:b.value,$ready:W.value,$anyDirty:c.value,$name:B.value,$silentErrors:F.value,$errors:V.value,$fields:$.value});}),se}),C.push(k);});}let oe=computed(()=>D?Object.fromEntries(Object.entries(D?.($.value)??{}).map(([_,I])=>I.length?[_,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(k=>[k,ke(I,k)])),...Object.fromEntries(["$errors","$silentErrors"].map(k=>[k,He(I,k)]))}]:[])):{}),w={};return K(),{$dirty:i,$anyDirty:c,$invalid:g,$valid:b,$error:f,$pending:p,$errors:V,$silentErrors:F,$ready:W,$name:B,$shortcuts:w,$groups:oe}});}function M(){R?.(),G?.(),d?.(),C.forEach(i=>i.stop()),C=[],$.value&&Object.entries($.value).forEach(([i,c])=>{c.$unwatch();});}function m(){Object.entries($.value).forEach(([i,c])=>{c.$clearExternalErrors();});}function O(){M(),ce(t,E??{}),u(!1),N(),P();}function X(i=!0){let c=Object.entries($.value).map(([g,b])=>[g,b.$extractDirtyFields(i)]);return i&&(c=c.filter(([g,b])=>q(b)?!J(b):Array.isArray(b)?b.length:!!b)),Object.fromEntries(c)}let{$shortcuts:H,...Y}=y;return reactive({...Y,...H,$fields:$,$value:t,$resetAll:O,$reset:N,$touch:j,$validate:x,$unwatch:M,$watch:P,$clearExternalErrors:m,$extractDirtyFields:X})}function ye({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:s,index:v,initialState:D,shortcuts:E,onUnwatch:T,fieldName:S}){return Xe(t,e)?nt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:v,externalErrors:s,initialState:D,fieldName:S,shortcuts:E}):Qe(e,t)&&ze(e)?Fe({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:l,index:v,initialState:D,shortcuts:E,fieldName:S,externalErrors:s}):Ze(t)?be({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:v,externalErrors:s,onUnwatch:T,shortcuts:E,initialState:D,fieldName:S}):null}function je({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:l}){let s=we();return reactive(Fe({rootRules:r,scopeRules:r,state:n,customMessages:a?.(),storage:s,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:l,fieldName:"root"}))}function Ve(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange??!0};function a(l,s,v){let D=isRef(s)?s:computed(typeof s=="function"?s:()=>s),E={...n,...v},T=isRef(l)?l:ref(l),S=te(toRaw(T.value));return {r$:je({scopeRules:D,state:T,options:E,initialState:S,customRules:e,shortcuts:r})}}return a}var ut=Ve();function _e(){function e(t,r){return r}return e}var Ge=_e();function it({rules:e,modifiers:t,shortcuts:r}){let n=Ve(e,t,r),a=_e();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,21 +8,21 @@
|
|
|
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
|
-
"type-fest": "4.28.0",
|
|
18
|
-
"vitest": "2.1.5",
|
|
19
17
|
"eslint": "9.15.0",
|
|
20
18
|
"eslint-config-prettier": "9.1.0",
|
|
21
19
|
"eslint-plugin-vue": "9.31.0",
|
|
22
20
|
"prettier": "3.3.3",
|
|
23
21
|
"tsup": "8.3.5",
|
|
22
|
+
"type-fest": "4.30.0",
|
|
24
23
|
"typescript": "5.6.3",
|
|
25
|
-
"
|
|
24
|
+
"vitest": "2.1.8",
|
|
25
|
+
"vue": "3.5.13",
|
|
26
26
|
"vue-eslint-parser": "9.4.3",
|
|
27
27
|
"vue-tsc": "2.1.10"
|
|
28
28
|
},
|