@regle/core 0.1.10 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +187 -40
- package/dist/index.d.ts +187 -40
- package/dist/index.js +1 -1
- package/package.json +9 -9
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var vue=require('vue');function V(e){return e.map(t=>t instanceof Function?t():vue.unref(t))}function Ie(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function Pe(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(l=>l.trim()).filter(l=>l.includes("=")).length+e.length}function ie(e,...t){let{message:r,validator:n,active:a,...l}=e,d=n.constructor.name==="AsyncFunction";return {...{validator(S,...v){return e.validator(S,...V(v.length?v:t))},message(S,v){return typeof e.message=="function"?e.message(S,{...v,$params:V(v.$params?.length?v.$params:t)}):e.message},active(S,v){return typeof e.active=="function"?e.active(S,{...v,$params:V(v.$params?.length?v.$params:t)}):e.active??!0},exec(S){let v=e.validator(S,...V(t)),o;return v instanceof Promise?v.then(R=>(o=R,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)):(o=v,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)}},...l,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:d,_params:Ie(t)}}function ue(e){if(typeof e.validator=="function"){let r=ie(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Pe(e.validator)>1){let a=function(...l){return ie(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 G(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function we(e){return G(e.value)}function B(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>B(n)))),r=="Map"&&(t=new Map([...e].map(n=>[B(n[0]),B(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,tt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=B(e[n]);}return t}function tt(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 ce(e,t,r){return e instanceof Function?e(t,r??0):e}function re(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function X(e,t,r){let n,a=(...l)=>new Promise(d=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(d);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...l)=>new Promise(d=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(d);},0);}),a}function nt(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]),d=Number(n[a]);if(l>d)return 1;if(d>l)return -1;if(!isNaN(l)&&isNaN(d))return 1;if(isNaN(l)&&!isNaN(d))return -1}return 0}var q=nt(vue.version,"3.5.0")!==-1;function at(){return Math.floor(Math.random()*Date.now()).toString()}function fe(){return typeof window>"u"?at():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Re(){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 d(p){let g=t.value.get(p);if(g)return g;{let f=vue.ref({});return t.value.set(p,f),f}}function h(p){let g=r.value.get(p);if(g)return g;{let f=vue.ref([]);return r.value.set(p,f),f}}function P(p,g,f){l.value.set(`${p}-${g}`,f);}function S(p,g){return l.value.get(`${p}-${g}`)}function v(p,g){p&&g!=null&&l.value.delete(`${p}-${g}`);}function o(p,g){n.value.set(p,g);}function R(p){return n.value.get(p)??!1}function D(p,g){e.value.set(p,g);}function m(p,g){let f=e.value.get(p);return f?u(g,f)?{valid:!0}:{valid:!1}:void 0}function u(p,g){let f=Object.keys(g),O=Object.keys(p);return O.length!==f.length||!O.every(E=>f.includes(E))?!1:O.every(E=>{let c=p[E],i=g[E];return !i||!c||typeof c=="function"||typeof i=="function"||typeof c=="number"||typeof c=="boolean"?!1:c._params?c._params?.every((s,$)=>{if(typeof i=="number"||typeof i=="boolean")return !0;{let y=V(i._params),x=V(c._params);return y?.[$]===x?.[$]}}):!0})}function F(p){let g=a.value.get(p);if(g)return g;{let f=vue.ref(!1),O=vue.ref(!0),I=vue.ref({}),E=vue.ref(!1);return a.value.set(p,{$pending:f,$valid:O,$metadata:I,$validating:E}),{$pending:f,$valid:O,$metadata:I,$validating:E}}}return vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),l.value.clear();}),{addRuleDeclEntry:D,setDirtyEntry:o,checkRuleDeclEntry:m,getDirtyState:R,trySetRuleStatusRef:F,getFieldsEntry:d,getCollectionsEntry:h,getArrayStatus:S,addArrayStatus:P,deleteArrayStatus:v,arrayStatusStorage:l}}function Oe(e,t){return G(e.value)&&G(t.value)&&!Object.entries(t.value).some(r=>pe(r))}function Ae(e){return !!e.value&&"$each"in e.value}function Me(e){return !!e.value&&G(e.value)}function pe(e){return G(e)&&"_validator"in e}function Y(e){return typeof e.value!="function"}function de(e){return G(e)&&"$fields"in e}function me(e){return !!e&&"$each"in e}function ge(e){return !!e&&"$rules"in e}function ye(e){return "$each"in e||"$errors"in e}function U({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function Fe(e,t=!1){return de(e)?ve(e.$fields):me(e)?{$errors:e.$field.$rules?U({field:e.$field,silent:t}):[],$each:e.$each.map(r=>Fe(r,t))}:ge(e)?e.$error?U({field:e,silent:t}):e.$externalErrors??[]:[]}function st(e,t=!1){return e.map(r=>Fe(r,t))}function ve(e,t=!1){return Object.fromEntries(Object.entries(e).map(([r,n])=>de(n)?[r,ve(n.$fields,t)]:me(n)?[r,{$errors:U({field:n.$field,silent:t}),$each:st(n.$each,t)}]:ge(n)?n.$error?[r,U({field:n,silent:t})]:[r,n.$externalErrors??[]]:[r,[]]))}function Ve(e){return vue.computed(()=>ve(e.$fields))}var je=(r=>(r.Inline="__inline",r.Async="__async",r))(je||{});function ke(e,t){return vue.computed(()=>e.value.some(r=>r[t]))}function Ge(e,t){return vue.computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function Ne({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:l,storage:d,$debounce:h}){let P=vue.effectScope(),S,v,{$pending:o,$valid:R,$metadata:D,$validating:m}=d.trySetRuleStatusRef(`${l}.${n}`);function u(){S=P.run(()=>{let E=vue.computed(()=>({$invalid:!R.value,$params:y.value,...D.value})),c=vue.computed(()=>Y(r)?typeof r.value.active=="function"?r.value.active(a.value,E.value):r.value.active:!0),i=vue.computed(()=>{let T="",C=t?t[n]?.message:void 0;return C&&(typeof C=="function"?T=C(a.value,E.value):T=C),Y(r)&&(C&&!r.value._patched||(typeof r.value.message=="function"?T=r.value.message(a.value,E.value):T=r.value.message)),re(T)&&(T="Error",console.warn(`No error message defined for ${l}.${n}`)),T}),s=vue.computed(()=>Y(r)&&r.value.type?r.value.type:n),$=vue.computed(()=>Y(r)?r.value.validator:r.value),y=vue.computed(()=>typeof r.value=="function"?[]:V(r.value._params??[])),x=vue.computed(()=>`${l}.${s.value}`);return {$active:c,$message:i,$type:s,$validator:$,$params:y,$path:x}}),v=vue.watch(S.$params,f,{deep:!0});}u();function F(){R.value=!0,e.value&&(o.value=!0);}async function p(E){let c=!1;try{F();let i=await E;if(typeof i=="boolean")c=i;else {let{$valid:s,...$}=i;c=s,D.value=$;}}catch{c=!1;}finally{o.value=!1;}return c}let g=X(p,h??100);async function f(){m.value=!0;let E=S.$validator.value,c=!1,i=E(a.value,...S.$params.value);if(i instanceof Promise)c=await g(i);else if(i!=null)if(typeof i=="boolean")c=i;else {let{$valid:s,...$}=i;c=s,D.value=$;}return R.value=c,m.value=!1,c}function O(){R.value=!0,D.value={},o.value=!1,m.value=!1,u();}function I(){v(),P.stop(),P=vue.effectScope();}return vue.reactive({...S,$pending:o,$valid:R,$metadata:D,$validate:f,$unwatch:I,$watch:u,$reset:O})}function ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:d,index:h,onUnwatch:P,$isArray:S}){let v=vue.effectScope(),o,R=vue.ref(!1),D=vue.ref(!1),m=vue.ref([]),u,F,p,g,f=()=>{};function O(){m.value=d.value??[];}O();function I(){let b=t.value,A=a.checkRuleDeclEntry(n,b);$.value=Object.fromEntries(Object.entries(b).filter(([M])=>M.startsWith("$"))),s.value=Object.fromEntries(Object.entries(t.value).filter(([M])=>!M.startsWith("$")).map(([M,k])=>{if(k){let oe=vue.toRef(()=>k);return [M,Ne({$dirty:R,customMessages:r,rule:oe,ruleKey:M,state:e,path:n,storage:a,$debounce:$.value.$debounce})]}return []}).filter(M=>!!M.length)),c(),f=o.$debounce.value?X(i,o.$debounce.value??0):i,A?.valid!=null&&(R.value=a.getDirtyState(n),R.value&&f()),a.addRuleDeclEntry(n,b);}function E(){s.value&&Object.entries(s.value).forEach(([b,A])=>{A.$unwatch();}),g(),R.value&&a.setDirtyEntry(n,R.value),u(),F(),p(),v.stop(),v=vue.effectScope(),P?.();}function c(){s.value&&Object.entries(s.value).forEach(([b,A])=>{A.$watch();}),o=v.run(()=>{let b=vue.computed(()=>R.value),A=vue.computed(()=>$.value.$debounce),M=vue.computed(()=>$.value.$lazy!=null?$.value.$lazy:vue.unref(l.lazy)),k=vue.computed(()=>$.value.$rewardEarly!=null?$.value.$rewardEarly:vue.unref(l.rewardEarly)),oe=vue.computed(()=>$.value.$autoDirty!=null?$.value.$autoDirty:vue.unref(l.autoDirty)),Qe=vue.computed(()=>se.value&&!De.value&&R.value),Xe=vue.computed(()=>U({field:{$dirty:R.value,$externalErrors:m.value,$rules:s.value}})),Ye=vue.computed(()=>U({field:{$dirty:R.value,$externalErrors:m.value,$rules:s.value},silent:!0})),De=vue.computed(()=>D.value||!k.value?Object.entries(s.value).some(([te,Q])=>Q.$pending):!1),se=vue.computed(()=>m.value?.length?!0:!k.value||k.value&&D.value?Object.entries(s.value).some(([te,Q])=>!Q.$valid):!1),Ce=vue.computed(()=>R.value&&!re(e.value)?m.value?.length?!1:k.value?Object.entries(s.value).every(([te,Q])=>Q.$valid):!se.value:!1);return vue.watch(Ce,te=>{te&&(D.value=!1);}),{$error:Qe,$pending:De,$invalid:se,$valid:Ce,$debounce:A,$lazy:M,$errors:Xe,$silentErrors:Ye,$rewardEarly:k,$autoDirty:oe,$anyDirty:b}}),p=vue.watch(d,O),u=vue.watch(e,()=>{o.$autoDirty.value&&(R.value||(R.value=!0)),t.value instanceof Function&&I(),f(),o.$rewardEarly.value;},{deep:S?!0:q?1:!0}),g=vue.watch(R,()=>{a.setDirtyEntry(n,R.value);}),F=vue.watch(o.$valid,b=>{o.$rewardEarly.value&&b&&(D.value=!1);});}function i(){Object.entries(s.value).forEach(([b,A])=>{A.$validate();});}let s=vue.ref(),$=vue.ref();I();function y(){R.value=!1,m.value=[],Object.entries(s.value).forEach(([b,A])=>{A.$reset();}),o.$lazy.value||Object.entries(s.value).map(([b,A])=>A.$validate());}function x(){R.value||(R.value=!0,o.$rewardEarly.value,f());}let T=o.$debounce.value?X(C,o.$debounce.value??0):C;async function C(){try{if(D.value=!0,o.$autoDirty.value&&R.value&&!o.$pending.value)return !o.$error.value;{let b=Object.entries(s.value).map(([M,k])=>k.$validate());return (await Promise.allSettled(b)).every(M=>M.status==="fulfilled"?M.value:!1)}}catch{return !1}}function w(){m.value=[];}return o.$lazy.value||C(),vue.reactive({$dirty:R,...o,$externalErrors:m,$value:e,$rules:s,$reset:y,$touch:x,$validate:T,$unwatch:E,$watch:c,$clearExternalErrors:w})}function We({$id:e,path:t,index:r,options:n,storage:a,stateValue:l,customMessages:d,rules:h,externalErrors:P}){let S=h.$key?h.$key:fe(),v=`${t}.${String(S)}`;typeof l.value=="object"&&l.value!=null&&(l.value.$id?v=`${t}.${l.value.$id}`:Object.defineProperties(l.value,{$id:{value:S,enumerable:!1,configurable:!1,writable:!1}}));let o=vue.toRef(()=>P.value?.[r]),R=le({state:l,rulesDef:vue.toRef(()=>h),customMessages:d,path:v,storage:a,options:n,externalErrors:o});if(R){let D=l.value?.$id;R.$id=D??String(S),a.addArrayStatus(e,R.$id,R);}return R}function He({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:d}){let h=vue.effectScope(),P,S=vue.effectScope(),v;if(Array.isArray(e.value)&&!t.value.$each)return null;let o=vue.ref(),R=vue.ref(e.value),D,m=vue.ref({}),u=a.getCollectionsEntry(n);v=S.run(()=>{let i=vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(y=>typeof y!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(y=>pe(y)):!1),s=vue.computed(()=>d.value?ye(d.value)?d.value.$errors??[]:[]:[]),$=vue.computed(()=>d.value?ye(d.value)?d.value.$each??[]:[]:[]);return {isPrimitiveArray:i,$externalErrorsField:s,$externalErrorsEach:$}}),F(),g();function F(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(o.value=fe(),Object.defineProperties(e.value,{$id:{value:o.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(o.value=e.value.$id)),!v.isPrimitiveArray.value&&(R.value=m.value.$value,Array.isArray(e.value)&&t.value.$each?u.value=e.value.map((i,s)=>{let $=ce(t.value.$each,vue.toRef(()=>i),s);if($){let y=We({$id:o.value,path:n,rules:$,stateValue:vue.toRef(()=>i),index:s,options:l,storage:a,externalErrors:v.$externalErrorsEach});return y||null}}).filter(i=>!!i):u.value=[],m.value=ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:v.$externalErrorsField,$isArray:!0}));}function p(){if(Array.isArray(e.value)){let i=B(u.value);u.value=e.value.map((s,$)=>{let y=vue.toRef(()=>s);if(s.$id&&u.value.find(x=>x.$id===s.$id)){let x=a.getArrayStatus(o.value,s.$id);return x?(x.$value=y,x):null}else {let x=ce(t.value.$each,y,$);if(x){let T=We({$id:o.value,path:n,rules:x,stateValue:y,index:$,options:l,storage:a,externalErrors:v.$externalErrorsEach});return T||null}}}).filter(s=>!!s),i.filter(s=>!e.value.find($=>s.$id===$.$id)).forEach((s,$)=>{a.deleteArrayStatus(o.value,$.toString());});}else u.value=[];}function g(){D=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?F():p();},{deep:q?1:!0,flush:"pre"}),P=h.run(()=>{let i=vue.computed(()=>m.value.$dirty&&u.value.every(b=>b.$dirty)),s=vue.computed(()=>m.value.$anyDirty||u.value.some(b=>b.$dirty)),$=vue.computed(()=>m.value.$invalid||u.value.some(b=>b.$invalid)),y=vue.computed(()=>m.value.$valid&&u.value.every(b=>b.$valid)),x=vue.computed(()=>m.value.$error||u.value.some(b=>b.$error)),T=vue.computed(()=>m.value.$pending||u.value.some(b=>b.$pending)),C=vue.computed(()=>({$errors:m.value.$errors,$each:u.value.map(b=>b.$errors)})),w=vue.computed(()=>({$errors:m.value.$silentErrors,$each:u.value.map(b=>b.$silentErrors)}));return {$dirty:i,$anyDirty:s,$invalid:$,$valid:y,$error:x,$pending:T,$errors:C,$silentErrors:w}}),v.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),D());}function f(){D&&D(),m.value&&m.value.$unwatch(),u.value&&u.value.forEach(i=>{"$dirty"in i&&i.$unwatch();}),h.stop(),h=vue.effectScope(),S.stop(),S=vue.effectScope(!0);}function O(){m.value.$touch(),u.value.forEach(i=>{i.$touch();});}function I(){m.value.$reset(),u.value.forEach(i=>{i.$reset();});}async function E(){try{return (await Promise.all([m.value.$validate(),...u.value.map(s=>s.$validate())])).every(s=>!!s)}catch{return !1}}function c(){}return vue.reactive({$field:m,...P,$each:u,$value:e,$validate:E,$unwatch:f,$watch:g,$touch:O,$reset:I,$clearExternalErrors:c})}function Ee({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:l,options:d,externalErrors:h,validationGroups:P}){let S,v,o;function m(E=!0,c=!1){u.value=null,vue.triggerRef(u);let i=Object.fromEntries(Object.entries(e.value).map(([y,x])=>{if(x){let T=vue.toRef(t.value,y),C=vue.toRef(()=>x),w=vue.toRef(()=>h.value?.[y]);return [y,le({state:T,rulesDef:C,customMessages:r,path:n?`${n}.${y}`:y,storage:l,options:d,externalErrors:w})]}return []}).filter(y=>!!y.length&&y[1]!=null)),s=Object.fromEntries(Object.entries(vue.unref(h)??{}).filter(([y])=>!(y in e.value)).map(([y,x])=>{if(x){let T=vue.toRef(()=>({})),C=vue.toRef(()=>x);return [y,le({state:vue.ref(void 0),rulesDef:T,customMessages:r,path:n?`${n}.${y}`:y,storage:l,options:d,externalErrors:C})]}return []})),$=Object.fromEntries(Object.entries(P?.(i)??{}).map(([y,x])=>x.length?[y,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(T=>[T,ke(vue.toRef(()=>x),T)])),...Object.fromEntries(["$errors","$silentErrors"].map(T=>[T,Ge(vue.toRef(()=>x),T)]))}]:[]));u.value={...i,...s,...$},E&&f();}let u=l.getFieldsEntry(n);m();function F(){m(!1),Object.entries(u.value).forEach(([E,c])=>{c.$reset();}),f();}function p(){Object.entries(u.value).forEach(([E,c])=>{c.$touch();});}async function g(){try{return (await Promise.allSettled(Object.entries(u.value).map(([c,i])=>i.$validate()))).every(c=>c.status==="fulfilled"?c.value:!1)}catch{return !1}}function f(){a&&(o=vue.watch(a,()=>{O(),m();},{deep:q?1:!0,flush:"post"})),S=vue.effectScope(),v=S.run(()=>{let E=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([C,w])=>w.$dirty)),c=vue.computed(()=>Object.entries(u.value).some(([C,w])=>w.$dirty)),i=vue.computed(()=>Object.entries(u.value).some(([C,w])=>w.$invalid)),s=vue.computed(()=>Object.entries(u.value).every(([C,w])=>w.$valid)),$=vue.computed(()=>E.value&&!y.value&&i.value),y=vue.computed(()=>Object.entries(u.value).some(([C,w])=>w.$pending)),x=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,w])=>[C,w.$errors]))),T=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,w])=>[C,w.$silentErrors])));return {$dirty:E,$anyDirty:c,$invalid:i,$valid:s,$error:$,$pending:y,$errors:x,$silentErrors:T}});}function O(){u.value&&Object.entries(u.value).forEach(([E,c])=>{c.$unwatch();}),o?.(),S.stop(),S=vue.effectScope();}function I(){Object.entries(u.value).forEach(([E,c])=>{c.$clearExternalErrors();});}return vue.reactive({...v,$fields:u,$value:t,$reset:F,$touch:p,$validate:g,$unwatch:O,$watch:f,$clearExternalErrors:I})}function le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:d,index:h,onUnwatch:P}){return Ae(t)?He({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:h,externalErrors:d}):Oe(e,t)&&we(e)?Ee({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:l,index:h,externalErrors:d}):Me(t)?ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:h,externalErrors:d,onUnwatch:P}):null}function be(e,t,r,n){let a=Re(),l=vue.computed(()=>vue.unref(r.externalErrors)),d=vue.reactive(Ee({rootRules:e,scopeRules:e,state:t,customMessages:n?.(),storage:a,options:r,externalErrors:l,validationGroups:r.validationGroups})),h=Ve(d);return {regle:d,errors:h}}function xe(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,l,d){let h=vue.isRef(l)?l:vue.computed(typeof l=="function"?l:()=>l),P={...r,...d},S=vue.isRef(a)?a:vue.ref(a),v=B(vue.toRaw(S.value)),{regle:o,errors:R}=be(h,S,P,e);function D(){o.$unwatch(),m(a,v),o.$reset();}function m(p,g){Object.entries(g).forEach(([f,O])=>{let I=vue.isRef(p)?p.value:p,E=vue.isRef(I[f])?I[f].value:I[f],c=vue.isRef(g[f])?g[f]._value:g[f];Array.isArray(c)&&Array.isArray(E)?(I[f]=[],c.forEach((i,s)=>{I[f][s]={},m(I[f][s],c[s]);})):G(c)?m(E,c):vue.isRef(I[f])?I[f].value=c:I[f]=c;});}let u=vue.computed(()=>!(o.$invalid||o.$pending));async function F(){return o.$touch(),await o.$validate()?S.value:!1}return {regle:o,r$:o,errors:R,resetAll:D,validateState:F,ready:u,state:S}}return n}var ze=xe();function Te(){function e(t,r){return r}return e}var he=Te();function Je({rules:e,modifiers:t}){let r=xe(e,t),n=Te();return {useRegle:r,inferRules:n}}exports.InternalRuleType=je;exports.createRule=ue;exports.defineRegleConfig=Je;exports.inferRules=he;exports.unwrapRuleParameters=V;exports.useRegle=ze;
|
|
1
|
+
'use strict';var vue=require('vue');var Re=(r=>(r.Inline="__inline",r.Async="__async",r))(Re||{});function Oe(e,t){return vue.computed(()=>e.value.some(r=>r[t]))}function Ae(e,t){return vue.computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function B(e){return e.map(t=>t instanceof Function?t():vue.unref(t))}function Fe(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function Me(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(l=>l.trim()).filter(l=>l.includes("=")).length+e.length}function pe(e,...t){let{message:r,validator:n,active:a,type:l,...m}=e,x=l==="__async"||n.constructor.name==="AsyncFunction";return {...{validator($,...i){return e.validator($,...B(i.length?i:t))},message($,i){return typeof e.message=="function"?e.message($,{...i,$params:B(i.$params?.length?i.$params:t)}):e.message},active($,i){return typeof e.active=="function"?e.active($,{...i,$params:B(i.$params?.length?i.$params:t)}):e.active??!0},exec($){let i=e.validator($,...B(t)),c;return i instanceof Promise?i.then(h=>(c=h,typeof c=="object"&&"$valid"in c?c.$valid:typeof c=="boolean"?c:!1)):(c=i,typeof c=="object"&&"$valid"in c?c.$valid:typeof c=="boolean"?c:!1)}},...m,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:x,_params:Fe(t)}}function de(e){if(typeof e.validator=="function"){let r=pe(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Me(e.validator)>1){let a=function(...l){return pe(e,...l)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function N(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ve(e){return N(e.value)}function q(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>q(n)))),r=="Map"&&(t=new Map([...e].map(n=>[q(n[0]),q(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,rt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=q(e[n]);}return t}function rt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function me(e,t,r){return e instanceof Function?e(t,r??0):e}function L(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function ee(e,t,r){let n,a=(...l)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(m);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...l)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(m);},0);}),a}function at(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let l=Number(r[a]),m=Number(n[a]);if(l>m)return 1;if(m>l)return -1;if(!isNaN(l)&&isNaN(m))return 1;if(isNaN(l)&&!isNaN(m))return -1}return 0}var Q=at(vue.version,"3.5.0")!==-1;function lt(){return Math.floor(Math.random()*Date.now()).toString()}function ye(){return typeof window>"u"?lt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function ge(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),a=vue.shallowRef(new Map),l=vue.shallowRef(new Map);function m(u){let g=t.value.get(u);if(g)return g;{let E=vue.ref({});return t.value.set(u,E),E}}function x(u){let g=r.value.get(u);if(g)return g;{let E=vue.ref([]);return r.value.set(u,E),E}}function F(u,g,E){l.value.set(`${u}-${g}`,E);}function S(u,g){return l.value.get(`${u}-${g}`)}function $(u,g){u&&g!=null&&l.value.delete(`${u}-${g}`);}function i(u,g){n.value.set(u,g);}function c(u){return n.value.get(u)??!1}function h(u,g){e.value.set(u,g);}function y(u,g){let E=e.value.get(u);return E?v(g,E)?{valid:!0}:{valid:!1}:void 0}function v(u,g){let E=Object.keys(g),A=Object.keys(u);return A.length!==E.length||!A.every(V=>E.includes(V))?!1:A.every(V=>{let b=u[V],j=g[V];return !j||!b||typeof b=="function"||typeof j=="function"||typeof b=="number"||typeof b=="boolean"?!1:b._params?b._params?.every((O,d)=>{if(typeof j=="number"||typeof j=="boolean")return !0;{let o=B(j._params),s=B(b._params);return o?.[d]===s?.[d]}}):!0})}function _(u){let g=a.value.get(u);if(g)return g;{let E=vue.ref(!1),A=vue.ref(!0),k=vue.ref({}),V=vue.ref(!1);return a.value.set(u,{$pending:E,$valid:A,$metadata:k,$validating:V}),{$pending:E,$valid:A,$metadata:k,$validating:V}}}return vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),l.value.clear();}),{addRuleDeclEntry:h,setDirtyEntry:i,checkRuleDeclEntry:y,getDirtyState:c,trySetRuleStatusRef:_,getFieldsEntry:m,getCollectionsEntry:x,getArrayStatus:S,addArrayStatus:F,deleteArrayStatus:$,arrayStatusStorage:l}}function je(e,t){return N(e.value)&&N(t.value)&&!Object.entries(t.value).some(r=>te(r))}function _e(e){return !!e.value&&"$each"in e.value}function ke(e){return !!e.value&&N(e.value)}function te(e){return N(e)&&"_validator"in e}function re(e){return typeof e.value!="function"}function ve(e){return N(e)&&"$fields"in e}function $e(e){return "$each"in e||"$errors"in e}function Se({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function Be({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:l,storage:m,$debounce:x}){let F=vue.effectScope(),S,$,i=vue.ref(!1),{$pending:c,$valid:h,$metadata:y,$validating:v}=m.trySetRuleStatusRef(`${l}.${n}`);function _(){S=F.run(()=>{let b=vue.computed(()=>({$invalid:!h.value,$params:s.value,...y.value})),j=vue.computed(()=>re(r)?typeof r.value.active=="function"?r.value.active(a.value,b.value):r.value.active:!0),O=vue.computed(()=>{let f="",T=t?t[n]?.message:void 0;return T&&(typeof T=="function"?f=T(a.value,b.value):f=T),re(r)&&(T&&!r.value._patched||(typeof r.value.message=="function"?f=r.value.message(a.value,b.value):f=r.value.message)),L(f)&&(f="Error",console.warn(`No error message defined for ${l}.${n}`)),f}),d=vue.computed(()=>re(r)&&r.value.type?r.value.type:n),o=vue.computed(()=>re(r)?r.value.validator:r.value),s=vue.computed(()=>typeof r.value=="function"?[]:B(r.value._params??[])),p=vue.computed(()=>`${l}.${d.value}`);return {$active:j,$message:O,$type:d,$validator:o,$params:s,$path:p}}),$=vue.watch(S.$params,A,{deep:!0});}_();function u(){h.value=!0,e.value&&(c.value=!0);}async function g(){let b=S.$validator.value,j=b(a.value,...S.$params.value),O=!1,d=a.value;try{u();let o;if(j instanceof Promise?o=await j:o=j,a.value!==d)return !0;if(typeof o=="boolean")O=o;else {let{$valid:s,...p}=o;O=s,y.value=p;}}catch{O=!1;}finally{c.value=!1;}return O}let E=ee(g,x??200);async function A(){v.value=!0;let b=!1;if(te(r.value)&&r.value._async)b=await E();else {let j=S.$validator.value,O=j(a.value,...S.$params.value);if(O instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(O!=null)if(typeof O=="boolean")b=O;else {let{$valid:d,...o}=O;b=d,y.value=o;}}return h.value=b,v.value=!1,b}function k(){h.value=!0,y.value={},c.value=!1,v.value=!1,_();}function V(){$(),F.stop(),F=vue.effectScope();}return vue.reactive({...S,$pending:c,$valid:h,$metadata:y,_haveAsync:i,$validating:v,$validate:A,$unwatch:V,$watch:_,$reset:k})}function oe({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:m,index:x,onUnwatch:F,$isArray:S}){let $=vue.effectScope(),i,c=vue.ref(!1),h=vue.ref(!1),y=vue.ref([]),v,_,u,g,E,A=()=>{};function k(){y.value=m.value??[];}k();function V(){let R=t.value,P=a.checkRuleDeclEntry(n,R);s.value=Object.fromEntries(Object.entries(R).filter(([I])=>I.startsWith("$"))),o.value=Object.fromEntries(Object.entries(t.value).filter(([I])=>!I.startsWith("$")).map(([I,w])=>{if(w){let ce=vue.toRef(()=>w);return [I,Be({$dirty:c,customMessages:r,rule:ce,ruleKey:I,state:e,path:n,storage:a,$debounce:s.value.$debounce})]}return []}).filter(I=>!!I.length)),O(),b(),P?.valid!=null&&(c.value=a.getDirtyState(n),c.value&&A()),a.addRuleDeclEntry(n,R);}function b(){A=i.$debounce.value?ee(d,i.$debounce.value??i.haveAnyAsyncRule?100:0):d;}function j(){o.value&&Object.entries(o.value).forEach(([R,P])=>{P.$unwatch();}),g(),c.value&&a.setDirtyEntry(n,c.value),v(),_(),u(),$.stop(),$=vue.effectScope(),F?.(),E?.();}function O(){o.value&&Object.entries(o.value).forEach(([R,P])=>{P.$watch();}),i=$.run(()=>{let R=vue.computed(()=>c.value),P=vue.computed(()=>s.value.$debounce),I=vue.computed(()=>s.value.$lazy!=null?s.value.$lazy:vue.unref(l.lazy)),w=vue.computed(()=>s.value.$rewardEarly!=null?s.value.$rewardEarly:vue.unref(l.rewardEarly)),ce=vue.computed(()=>s.value.$autoDirty!=null?s.value.$autoDirty:vue.unref(l.autoDirty)),Je=vue.computed(()=>Object.entries(o.value).some(([Y,W])=>W.$validating)),Ie=vue.computed(()=>le.value&&!fe.value&&c.value),Ye=vue.computed(()=>Ie.value?Se({field:{$dirty:c.value,$externalErrors:y.value,$rules:o.value}}):[]),Qe=vue.computed(()=>Se({field:{$dirty:c.value,$externalErrors:y.value,$rules:o.value},silent:!0})),Xe=vue.computed(()=>!le.value&&!fe.value),fe=vue.computed(()=>h.value||!w.value?Object.entries(o.value).some(([Y,W])=>W.$pending):!1),le=vue.computed(()=>y.value?.length?!0:!w.value||w.value&&h.value?Object.entries(o.value).some(([Y,W])=>!W.$valid):!1),Pe=vue.computed(()=>c.value&&!L(e.value)&&!Je.value?y.value?.length?!1:w.value?Object.entries(o.value).every(([Y,W])=>W.$valid):!le.value:!1),Ze=vue.computed(()=>Object.entries(o.value).some(([Y,W])=>W._haveAsync));return vue.watch(Pe,Y=>{Y&&(h.value=!1);}),{$error:Ie,$pending:fe,$invalid:le,$valid:Pe,$debounce:P,$lazy:I,$errors:Ye,$ready:Xe,$silentErrors:Qe,$rewardEarly:w,$autoDirty:ce,$anyDirty:R,haveAnyAsyncRule:Ze}}),u=vue.watch(m,k),v=vue.watch(e,()=>{i.$autoDirty.value&&(c.value||(c.value=!0)),t.value instanceof Function&&V(),A(),i.$rewardEarly.value;},{deep:S?!0:Q?1:!0}),g=vue.watch(c,()=>{a.setDirtyEntry(n,c.value);}),_=vue.watch(i.$valid,R=>{i.$rewardEarly.value&&R&&(h.value=!1);}),E=vue.watch(i.haveAnyAsyncRule,b);}function d(){Object.entries(o.value).forEach(([R,P])=>{P.$validate();});}let o=vue.ref(),s=vue.ref();V();function p(){c.value=!1,y.value=[],Object.entries(o.value).forEach(([R,P])=>{P.$reset();}),i.$lazy.value||Object.entries(o.value).map(([R,P])=>P.$validate());}function f(){c.value||(c.value=!0,i.$rewardEarly.value,A());}let T=i.$debounce.value?ee(M,i.$debounce.value??0):M;async function M(){try{if(h.value=!0,i.$autoDirty.value&&c.value&&!i.$pending.value)return !i.$error.value;{let R=Object.entries(o.value).map(([I,w])=>w.$validate());return (await Promise.allSettled(R)).every(I=>I.status==="fulfilled"?I.value:!1)}}catch{return !1}}function D(R=!0){return c.value?e.value:null}function C(){y.value=[];}return i.$lazy.value||M(),vue.reactive({$dirty:c,...i,$externalErrors:y,$value:e,$rules:o,$reset:p,$touch:f,$validate:T,$unwatch:j,$watch:O,$extractDirtyFields:D,$clearExternalErrors:C})}function Ue({$id:e,path:t,index:r,options:n,storage:a,stateValue:l,customMessages:m,rules:x,externalErrors:F}){let S=x.$key?x.$key:ye(),$=`${t}.${String(S)}`;typeof l.value=="object"&&l.value!=null&&(l.value.$id?$=`${t}.${l.value.$id}`:Object.defineProperties(l.value,{$id:{value:S,enumerable:!1,configurable:!1,writable:!1}}));let i=vue.toRef(()=>F.value?.[r]),c=ie({state:l,rulesDef:vue.toRef(()=>x),customMessages:m,path:$,storage:a,options:n,externalErrors:i});if(c){let h=l.value?.$id;c.$id=h??String(S),a.addArrayStatus(e,c.$id,c);}return c}function We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:m}){let x=vue.effectScope(),F,S=vue.effectScope(),$;if(Array.isArray(e.value)&&!t.value.$each)return null;let i=vue.ref(),c=vue.ref(e.value),h,y=vue.ref({}),v=a.getCollectionsEntry(n);$=S.run(()=>{let d=vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(p=>typeof p!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(p=>te(p)):!1),o=vue.computed(()=>m.value?$e(m.value)?m.value.$errors??[]:[]:[]),s=vue.computed(()=>m.value?$e(m.value)?m.value.$each??[]:[]:[]);return {isPrimitiveArray:d,$externalErrorsField:o,$externalErrorsEach:s}}),_(),g();function _(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(i.value=ye(),Object.defineProperties(e.value,{$id:{value:i.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(i.value=e.value.$id)),!$.isPrimitiveArray.value&&(c.value=y.value.$value,Array.isArray(e.value)&&t.value.$each?v.value=e.value.map((d,o)=>{let s=me(t.value.$each,vue.toRef(()=>d),o);if(s){let p=Ue({$id:i.value,path:n,rules:s,stateValue:vue.toRef(()=>d),index:o,options:l,storage:a,externalErrors:$.$externalErrorsEach});return p||null}}).filter(d=>!!d):v.value=[],y.value=oe({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:$.$externalErrorsField,$isArray:!0}));}function u(){if(Array.isArray(e.value)){let d=q(v.value);v.value=e.value.map((o,s)=>{let p=vue.toRef(()=>o);if(o.$id&&v.value.find(f=>f.$id===o.$id)){let f=a.getArrayStatus(i.value,o.$id);return f?(f.$value=p,f):null}else {let f=me(t.value.$each,p,s);if(f){let T=Ue({$id:i.value,path:n,rules:f,stateValue:p,index:s,options:l,storage:a,externalErrors:$.$externalErrorsEach});return T||null}}}).filter(o=>!!o),d.filter(o=>!e.value.find(s=>o.$id===s.$id)).forEach((o,s)=>{a.deleteArrayStatus(i.value,s.toString());});}else v.value=[];}function g(){h=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?_():u();},{deep:Q?1:!0,flush:"pre"}),F=x.run(()=>{let d=vue.computed(()=>y.value.$dirty&&v.value.every(R=>R.$dirty)),o=vue.computed(()=>y.value.$anyDirty||v.value.some(R=>R.$dirty)),s=vue.computed(()=>y.value.$invalid||v.value.some(R=>R.$invalid)),p=vue.computed(()=>y.value.$valid&&v.value.every(R=>R.$valid)),f=vue.computed(()=>y.value.$error||v.value.some(R=>R.$error)),T=vue.computed(()=>!s.value&&!M.value),M=vue.computed(()=>y.value.$pending||v.value.some(R=>R.$pending)),D=vue.computed(()=>({$errors:y.value.$errors,$each:v.value.map(R=>R.$errors)})),C=vue.computed(()=>({$errors:y.value.$silentErrors,$each:v.value.map(R=>R.$silentErrors)}));return {$dirty:d,$anyDirty:o,$invalid:s,$valid:p,$error:f,$pending:M,$errors:D,$silentErrors:C,$ready:T}}),$.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),h());}function E(){h&&h(),y.value&&y.value.$unwatch(),v.value&&v.value.forEach(d=>{"$dirty"in d&&d.$unwatch();}),x.stop(),x=vue.effectScope(),S.stop(),S=vue.effectScope(!0);}function A(){y.value.$touch(),v.value.forEach(d=>{d.$touch();});}function k(){y.value.$reset(),v.value.forEach(d=>{d.$reset();});}async function V(){try{return (await Promise.all([y.value.$validate(),...v.value.map(o=>o.$validate())])).every(o=>!!o)}catch{return !1}}function b(){y.value.$clearExternalErrors(),v.value.forEach(d=>{d.$clearExternalErrors();});}function j(d=!0){let o=v.value.map(s=>{if(ve(s))return s.$extractDirtyFields(d)});return d&&(o=o.filter(s=>N(s)?!L(s):!!s)),o}async function O(){return A(),await V()?e.value:!1}return vue.reactive({$field:y,...F,$each:v,$value:e,$validate:V,$unwatch:E,$watch:g,$touch:A,$reset:k,$extractDirtyFields:j,$parse:O,$clearExternalErrors:b})}function xe({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:l,options:m,externalErrors:x,validationGroups:F,initialState:S,processedState:$}){let i,c,h=null;function _(s=!0,p=!1){u.value=null,vue.triggerRef(u);let f=Object.fromEntries(Object.entries(e.value).map(([D,C])=>{if(C){let R=vue.toRef(t.value,D),P=vue.toRef(()=>C),I=vue.toRef(()=>x.value?.[D]);return [D,ie({state:R,rulesDef:P,customMessages:r,path:n?`${n}.${D}`:D,storage:l,options:m,externalErrors:I})]}return []}).filter(D=>!!D.length&&D[1]!=null)),T=Object.fromEntries(Object.entries(vue.unref(x)??{}).filter(([D])=>!(D in e.value)).map(([D,C])=>{if(C){let R=vue.toRef(()=>({})),P=vue.toRef(()=>C);return [D,ie({state:vue.ref(void 0),rulesDef:R,customMessages:r,path:n?`${n}.${D}`:D,storage:l,options:m,externalErrors:P})]}return []})),M=Object.fromEntries(Object.entries(F?.(f)??{}).map(([D,C])=>C.length?[D,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(R=>[R,Oe(vue.toRef(()=>C),R)])),...Object.fromEntries(["$errors","$silentErrors"].map(R=>[R,Ae(vue.toRef(()=>C),R)]))}]:[]));u.value={...f,...T,...M},s&&k();}let u=l.getFieldsEntry(n);_();function g(){_(!1),Object.entries(u.value).forEach(([s,p])=>{p.$reset();}),k();}function E(){Object.entries(u.value).forEach(([s,p])=>{p.$touch();});}async function A(){try{return (await Promise.allSettled(Object.entries(u.value).map(([p,f])=>f.$validate()))).every(p=>p.status==="fulfilled"?p.value:!1)}catch{return !1}}function k(){a&&(h=vue.watch(a,()=>{V(),_();},{deep:Q?1:!0,flush:"post"})),i=vue.effectScope(),c=i.run(()=>{let s=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([I,w])=>w.$dirty)),p=vue.computed(()=>Object.entries(u.value).some(([I,w])=>w.$dirty)),f=vue.computed(()=>Object.entries(u.value).some(([I,w])=>w.$invalid)),T=vue.computed(()=>Object.entries(u.value).every(([I,w])=>w.$valid)),M=vue.computed(()=>s.value&&!C.value&&f.value),D=vue.computed(()=>!f.value&&!C.value),C=vue.computed(()=>Object.entries(u.value).some(([I,w])=>w.$pending)),R=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([I,w])=>[I,w.$errors]))),P=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([I,w])=>[I,w.$silentErrors])));return {$dirty:s,$anyDirty:p,$invalid:f,$valid:T,$error:M,$pending:C,$errors:R,$silentErrors:P,$ready:D}});}function V(){u.value&&Object.entries(u.value).forEach(([s,p])=>{p.$unwatch();}),h?.(),i.stop(),i=vue.effectScope();}function b(){Object.entries(u.value).forEach(([s,p])=>{p.$clearExternalErrors();});}function j(){S&&(V(),O(t,S),g());}function O(s,p){Object.entries(p).forEach(([f,T])=>{let M=vue.isRef(s)?s.value:s,D=vue.isRef(M[f])?M[f].value:M[f],C=vue.isRef(p[f])?p[f]._value:p[f];Array.isArray(C)&&Array.isArray(D)?(M[f]=[],C.forEach((R,P)=>{M[f][P]={},O(M[f][P],C[P]);})):N(C)?O(D,C):vue.isRef(M[f])?M[f].value=C:M[f]=C;});}function d(s=!0){let p=Object.entries(u.value).map(([f,T])=>[f,T.$extractDirtyFields(s)]);return s&&(p=p.filter(([f,T])=>N(T)?!L(T):Array.isArray(T)?T.length:!!T)),Object.fromEntries(p)}async function o(){return E(),await A()?t.value:!1}return vue.reactive({...c,$fields:u,$value:t,...S&&{$resetAll:j},$reset:g,$touch:E,$validate:A,$unwatch:V,$watch:k,$clearExternalErrors:b,$extractDirtyFields:d,$parse:o})}function ie({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:m,index:x,onUnwatch:F}){return _e(t)?We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:x,externalErrors:m}):je(e,t)&&Ve(e)?xe({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:l,index:x,externalErrors:m}):ke(t)?oe({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:x,externalErrors:m,onUnwatch:F}):null}function he(e,t,r,n,a,l){let m=ge(),x=vue.computed(()=>vue.unref(r.externalErrors));return vue.reactive(xe({rootRules:e,scopeRules:e,state:t,customMessages:l?.(),storage:m,options:r,externalErrors:x,validationGroups:r.validationGroups,processedState:n,initialState:a}))}function Te(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,l,m){let x=vue.isRef(l)?l:vue.computed(typeof l=="function"?l:()=>l),F={...r,...m},S=vue.isRef(a)?a:vue.ref(a),$=q(vue.toRaw(S.value));return {r$:he(x,S,F,S,$,e)}}return n}var Le=Te();function De(){function e(t,r){return r}return e}var Ce=De();function ze({rules:e,modifiers:t}){let r=Te(e,t),n=De();return {useRegle:r,inferRules:n}}exports.InternalRuleType=Re;exports.createRule=de;exports.defineRegleConfig=ze;exports.inferRules=Ce;exports.unwrapRuleParameters=B;exports.useRegle=Le;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs,
|
|
1
|
+
import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, MaybeRefOrGetter } from 'vue';
|
|
2
2
|
|
|
3
3
|
type Prettify<T> = T extends infer R ? {
|
|
4
4
|
[K in keyof R]: R[K];
|
|
@@ -6,7 +6,7 @@ type Prettify<T> = T extends infer R ? {
|
|
|
6
6
|
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
|
-
type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends
|
|
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
10
|
type DeepMaybeRef<T extends Record<string, any>> = {
|
|
11
11
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
12
12
|
};
|
|
@@ -18,6 +18,20 @@ type NoInferLegacy<A extends any> = [A][A extends any ? 0 : never];
|
|
|
18
18
|
|
|
19
19
|
type ArrayElement<T> = T extends Array<infer U> ? U : never;
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
Matches any [primitive value](https://developer.mozilla.org/en-US/docs/Glossary/Primitive).
|
|
23
|
+
|
|
24
|
+
@category Type
|
|
25
|
+
*/
|
|
26
|
+
type Primitive =
|
|
27
|
+
| null
|
|
28
|
+
| undefined
|
|
29
|
+
| string
|
|
30
|
+
| number
|
|
31
|
+
| boolean
|
|
32
|
+
| symbol
|
|
33
|
+
| bigint;
|
|
34
|
+
|
|
21
35
|
declare global {
|
|
22
36
|
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions -- It has to be an `interface` so that it can be merged.
|
|
23
37
|
interface SymbolConstructor {
|
|
@@ -55,6 +69,119 @@ Unfortunately, `Record<string, never>`, `Record<keyof any, never>` and `Record<n
|
|
|
55
69
|
*/
|
|
56
70
|
type EmptyObject = {[emptyObjectSymbol]?: never};
|
|
57
71
|
|
|
72
|
+
/**
|
|
73
|
+
Matches any primitive, `void`, `Date`, or `RegExp` value.
|
|
74
|
+
*/
|
|
75
|
+
type BuiltIns = Primitive | void | Date | RegExp;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
@see PartialDeep
|
|
79
|
+
*/
|
|
80
|
+
type PartialDeepOptions = {
|
|
81
|
+
/**
|
|
82
|
+
Whether to affect the individual elements of arrays and tuples.
|
|
83
|
+
|
|
84
|
+
@default false
|
|
85
|
+
*/
|
|
86
|
+
readonly recurseIntoArrays?: boolean;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
Create a type from another type with all keys and nested keys set to optional.
|
|
91
|
+
|
|
92
|
+
Use-cases:
|
|
93
|
+
- Merging a default settings/config object with another object, the second object would be a deep partial of the default object.
|
|
94
|
+
- Mocking and testing complex entities, where populating an entire object with its keys would be redundant in terms of the mock or test.
|
|
95
|
+
|
|
96
|
+
@example
|
|
97
|
+
```
|
|
98
|
+
import type {PartialDeep} from 'type-fest';
|
|
99
|
+
|
|
100
|
+
const settings: Settings = {
|
|
101
|
+
textEditor: {
|
|
102
|
+
fontSize: 14;
|
|
103
|
+
fontColor: '#000000';
|
|
104
|
+
fontWeight: 400;
|
|
105
|
+
}
|
|
106
|
+
autocomplete: false;
|
|
107
|
+
autosave: true;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const applySavedSettings = (savedSettings: PartialDeep<Settings>) => {
|
|
111
|
+
return {...settings, ...savedSettings};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
settings = applySavedSettings({textEditor: {fontWeight: 500}});
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
By default, this does not affect elements in array and tuple types. You can change this by passing `{recurseIntoArrays: true}` as the second type argument:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
import type {PartialDeep} from 'type-fest';
|
|
121
|
+
|
|
122
|
+
interface Settings {
|
|
123
|
+
languages: string[];
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const partialSettings: PartialDeep<Settings, {recurseIntoArrays: true}> = {
|
|
127
|
+
languages: [undefined]
|
|
128
|
+
};
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
@category Object
|
|
132
|
+
@category Array
|
|
133
|
+
@category Set
|
|
134
|
+
@category Map
|
|
135
|
+
*/
|
|
136
|
+
type PartialDeep<T, Options extends PartialDeepOptions = {}> = T extends BuiltIns | (((...arguments_: any[]) => unknown)) | (new (...arguments_: any[]) => unknown)
|
|
137
|
+
? T
|
|
138
|
+
: T extends Map<infer KeyType, infer ValueType>
|
|
139
|
+
? PartialMapDeep<KeyType, ValueType, Options>
|
|
140
|
+
: T extends Set<infer ItemType>
|
|
141
|
+
? PartialSetDeep<ItemType, Options>
|
|
142
|
+
: T extends ReadonlyMap<infer KeyType, infer ValueType>
|
|
143
|
+
? PartialReadonlyMapDeep<KeyType, ValueType, Options>
|
|
144
|
+
: T extends ReadonlySet<infer ItemType>
|
|
145
|
+
? PartialReadonlySetDeep<ItemType, Options>
|
|
146
|
+
: T extends object
|
|
147
|
+
? T extends ReadonlyArray<infer ItemType> // Test for arrays/tuples, per https://github.com/microsoft/TypeScript/issues/35156
|
|
148
|
+
? Options['recurseIntoArrays'] extends true
|
|
149
|
+
? ItemType[] extends T // Test for arrays (non-tuples) specifically
|
|
150
|
+
? readonly ItemType[] extends T // Differentiate readonly and mutable arrays
|
|
151
|
+
? ReadonlyArray<PartialDeep<ItemType | undefined, Options>>
|
|
152
|
+
: Array<PartialDeep<ItemType | undefined, Options>>
|
|
153
|
+
: PartialObjectDeep<T, Options> // Tuples behave properly
|
|
154
|
+
: T // If they don't opt into array testing, just use the original type
|
|
155
|
+
: PartialObjectDeep<T, Options>
|
|
156
|
+
: unknown;
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
Same as `PartialDeep`, but accepts only `Map`s and as inputs. Internal helper for `PartialDeep`.
|
|
160
|
+
*/
|
|
161
|
+
type PartialMapDeep<KeyType, ValueType, Options extends PartialDeepOptions> = {} & Map<PartialDeep<KeyType, Options>, PartialDeep<ValueType, Options>>;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
Same as `PartialDeep`, but accepts only `Set`s as inputs. Internal helper for `PartialDeep`.
|
|
165
|
+
*/
|
|
166
|
+
type PartialSetDeep<T, Options extends PartialDeepOptions> = {} & Set<PartialDeep<T, Options>>;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
Same as `PartialDeep`, but accepts only `ReadonlyMap`s as inputs. Internal helper for `PartialDeep`.
|
|
170
|
+
*/
|
|
171
|
+
type PartialReadonlyMapDeep<KeyType, ValueType, Options extends PartialDeepOptions> = {} & ReadonlyMap<PartialDeep<KeyType, Options>, PartialDeep<ValueType, Options>>;
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
Same as `PartialDeep`, but accepts only `ReadonlySet`s as inputs. Internal helper for `PartialDeep`.
|
|
175
|
+
*/
|
|
176
|
+
type PartialReadonlySetDeep<T, Options extends PartialDeepOptions> = {} & ReadonlySet<PartialDeep<T, Options>>;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
Same as `PartialDeep`, but accepts only `object`s as inputs. Internal helper for `PartialDeep`.
|
|
180
|
+
*/
|
|
181
|
+
type PartialObjectDeep<ObjectType extends object, Options extends PartialDeepOptions> = {
|
|
182
|
+
[KeyType in keyof ObjectType]?: PartialDeep<ObjectType[KeyType], Options>
|
|
183
|
+
};
|
|
184
|
+
|
|
58
185
|
/**
|
|
59
186
|
Convert a union type to an intersection type using [distributive conditional types](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#distributive-conditional-types).
|
|
60
187
|
|
|
@@ -117,9 +244,18 @@ type UnionToIntersection<Union> = (
|
|
|
117
244
|
? Intersection & Union
|
|
118
245
|
: never;
|
|
119
246
|
|
|
247
|
+
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups>;
|
|
248
|
+
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>>;
|
|
249
|
+
|
|
250
|
+
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
251
|
+
<TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
252
|
+
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
253
|
+
}
|
|
254
|
+
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
255
|
+
|
|
120
256
|
interface RegleBehaviourOptions {
|
|
121
257
|
/**
|
|
122
|
-
* Only display error when calling `
|
|
258
|
+
* Only display error when calling `r$.$parse()`
|
|
123
259
|
* @default false
|
|
124
260
|
*/
|
|
125
261
|
lazy?: boolean;
|
|
@@ -129,7 +265,7 @@ interface RegleBehaviourOptions {
|
|
|
129
265
|
*/
|
|
130
266
|
autoDirty?: boolean;
|
|
131
267
|
/**
|
|
132
|
-
* The fields will turn valid when they are, but not invalid unless calling `
|
|
268
|
+
* The fields will turn valid when they are, but not invalid unless calling `r$.$parse()`
|
|
133
269
|
* @default false
|
|
134
270
|
*
|
|
135
271
|
* @experimental report any bug
|
|
@@ -158,16 +294,7 @@ type AddDollarToOptions<T extends Record<string, any>> = {
|
|
|
158
294
|
};
|
|
159
295
|
|
|
160
296
|
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree> = EmptyObject, TExternal extends RegleExternalErrorTree<TState> = never, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never> {
|
|
161
|
-
|
|
162
|
-
r$: RegleStatus<TState, TRules, TValidationGroups>;
|
|
163
|
-
/** Show active errors based on your behaviour options (lazy, autoDirty)
|
|
164
|
-
* It allow you to skip scouting the `regle` object
|
|
165
|
-
*/
|
|
166
|
-
errors: RegleErrorTree<TRules, TExternal>;
|
|
167
|
-
ready: ComputedRef<boolean>;
|
|
168
|
-
resetAll: () => void;
|
|
169
|
-
validateState: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
|
|
170
|
-
state: Ref<TState>;
|
|
297
|
+
r$: RegleRoot<TState, TRules, TValidationGroups, TExternal>;
|
|
171
298
|
}
|
|
172
299
|
type isDeepExact<T, U> = {
|
|
173
300
|
[K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
|
|
@@ -184,6 +311,10 @@ type DeepSafeFormState<TState extends Record<string, any>, TRules extends RegleP
|
|
|
184
311
|
[K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? never : K]-?: SafeProperty<TState[K], TRules[K]>;
|
|
185
312
|
};
|
|
186
313
|
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends ReglePartialValidationTree<any, any> ? TState extends Record<string, any> ? DeepSafeFormState<TState, TRule> : TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? never : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? TState : never : never : never : never;
|
|
314
|
+
type InferRegleRules<T extends useRegleFn<any>> = T extends useRegleFn<infer U> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
|
|
315
|
+
type RegleRequiredRules<T extends Partial<AllRulesDeclarations> | useRegleFn<any>, TRules extends T extends useRegleFn<any> ? keyof InferRegleRules<T> : keyof T> = Omit<T extends useRegleFn<any> ? InferRegleRules<T> : T extends Partial<AllRulesDeclarations> ? UnwrapRuleTree<T> : {}, TRules> & {
|
|
316
|
+
[K in TRules]-?: T extends useRegleFn<any> ? K extends keyof InferRegleRules<T> ? NonNullable<InferRegleRules<T>[K]> : never : K extends keyof T ? NonNullable<T[K]> : never;
|
|
317
|
+
};
|
|
187
318
|
|
|
188
319
|
type ParamDecl<T = any> = MaybeRef<Maybe<T>> | (() => Maybe<T>);
|
|
189
320
|
type CreateFn<T extends any[]> = (...args: T) => any;
|
|
@@ -239,6 +370,12 @@ type RegleRuleMetadataExtended = {
|
|
|
239
370
|
$valid: boolean;
|
|
240
371
|
[x: string]: any;
|
|
241
372
|
};
|
|
373
|
+
type UnwrapRuleTree<T extends {
|
|
374
|
+
[x: string]: RegleRuleRaw<any> | undefined;
|
|
375
|
+
}> = {
|
|
376
|
+
[K in keyof T]: UnwrapRuleWithParams<T[K]>;
|
|
377
|
+
};
|
|
378
|
+
type UnwrapRuleWithParams<T extends RegleRuleRaw<any> | undefined> = T extends RegleRuleWithParamsDefinition<infer TValue, infer TParams, infer TAsync, infer TMetadata> ? RegleRuleDefinition<TValue, TParams, TAsync, TMetadata> : T;
|
|
242
379
|
/**
|
|
243
380
|
* Define a rule Metadata definition
|
|
244
381
|
*/
|
|
@@ -259,7 +396,7 @@ type PossibleRegleRuleMetadataConsumer = DefaultMetadataProperties & {
|
|
|
259
396
|
/**
|
|
260
397
|
* Generic types for a created RegleRule
|
|
261
398
|
*/
|
|
262
|
-
type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean =
|
|
399
|
+
type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = boolean, TMetaData extends RegleRuleMetadataDefinition = boolean> = RegleRuleDefinition<TValue, TParams, TAsync, TMetaData> | RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetaData>;
|
|
263
400
|
/**
|
|
264
401
|
* Process the type of a created rule with `createRule`.
|
|
265
402
|
* For a rule with params it will return a function
|
|
@@ -345,7 +482,10 @@ type DefaultValidators = {
|
|
|
345
482
|
numeric: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
346
483
|
regex: RegleRuleWithParamsDefinition<string, [regexp: RegExp], false, boolean>;
|
|
347
484
|
required: RegleRuleDefinition<unknown, []>;
|
|
348
|
-
sameAs: RegleRuleWithParamsDefinition<unknown, [
|
|
485
|
+
sameAs: RegleRuleWithParamsDefinition<unknown, [
|
|
486
|
+
target: unknown,
|
|
487
|
+
otherName?: string
|
|
488
|
+
], false, boolean>;
|
|
349
489
|
startsWith: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
|
|
350
490
|
url: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
351
491
|
};
|
|
@@ -353,7 +493,9 @@ type DefaultValidators = {
|
|
|
353
493
|
type CustomRulesDeclarationTree = {
|
|
354
494
|
[x: string]: RegleRuleRaw<any, any, boolean, any> | undefined;
|
|
355
495
|
};
|
|
356
|
-
type AllRulesDeclarations = CustomRulesDeclarationTree &
|
|
496
|
+
type AllRulesDeclarations = CustomRulesDeclarationTree & {
|
|
497
|
+
[K in keyof DefaultValidators]: RegleRuleRaw<any, any, boolean, any> | undefined;
|
|
498
|
+
};
|
|
357
499
|
|
|
358
500
|
/**
|
|
359
501
|
* @public
|
|
@@ -433,17 +575,25 @@ type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalVal
|
|
|
433
575
|
/**
|
|
434
576
|
* @public
|
|
435
577
|
*/
|
|
436
|
-
type
|
|
437
|
-
|
|
438
|
-
readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey>;
|
|
439
|
-
};
|
|
440
|
-
readonly $errors: RegleErrorTree<TRules>;
|
|
441
|
-
readonly $silentErrors: RegleErrorTree<TRules>;
|
|
578
|
+
type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TExternal extends RegleExternalErrorTree<TState> = never> = RegleStatus<TState, TRules, TExternal> & {
|
|
579
|
+
$resetAll: () => void;
|
|
442
580
|
} & ([TValidationGroups] extends [never] ? {} : {
|
|
443
581
|
$groups: {
|
|
444
582
|
readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
|
|
445
583
|
};
|
|
446
584
|
});
|
|
585
|
+
/**
|
|
586
|
+
* @public
|
|
587
|
+
*/
|
|
588
|
+
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TExternal extends RegleExternalErrorTree<TState> = never> = RegleCommonStatus<TState> & {
|
|
589
|
+
readonly $fields: {
|
|
590
|
+
readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey>;
|
|
591
|
+
};
|
|
592
|
+
readonly $errors: RegleErrorTree<TRules, TExternal>;
|
|
593
|
+
readonly $silentErrors: RegleErrorTree<TRules, TExternal>;
|
|
594
|
+
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
595
|
+
$parse: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
|
|
596
|
+
};
|
|
447
597
|
/**
|
|
448
598
|
* @public
|
|
449
599
|
*/
|
|
@@ -451,13 +601,14 @@ type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl
|
|
|
451
601
|
/**
|
|
452
602
|
* @public
|
|
453
603
|
*/
|
|
454
|
-
interface RegleFieldStatus<TState extends any =
|
|
455
|
-
$value: UnwrapNestedRefs<TState
|
|
604
|
+
interface RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>> extends Omit<RegleCommonStatus<TState>, '$value'> {
|
|
605
|
+
$value: Maybe<UnwrapNestedRefs<TState>>;
|
|
456
606
|
readonly $errors: string[];
|
|
457
607
|
readonly $silentErrors: string[];
|
|
458
608
|
readonly $externalErrors?: string[];
|
|
609
|
+
$extractDirtyFields: (filterNullishValues?: boolean) => TState | null;
|
|
459
610
|
readonly $rules: {
|
|
460
|
-
readonly [TRuleKey in keyof Omit<TRules, '$each' | keyof FieldRegleBehaviourOptions>]: RegleRuleStatus<TState, TRules[TRuleKey] extends RegleRuleDefinition<any, infer TParams, any> ? TParams : [], TRules[TRuleKey] extends RegleRuleDefinition<any, any, any, infer TMetadata> ? TMetadata : TRules[TRuleKey] extends InlineRuleDeclaration<any, any[], infer TMetadata> ? TMetadata extends Promise<infer P> ? P : TMetadata :
|
|
611
|
+
readonly [TRuleKey in keyof Omit<TRules, '$each' | keyof FieldRegleBehaviourOptions>]: RegleRuleStatus<TState, TRules[TRuleKey] extends RegleRuleDefinition<any, infer TParams, any> ? TParams : [], TRules[TRuleKey] extends RegleRuleDefinition<any, any, any, infer TMetadata> ? TMetadata : TRules[TRuleKey] extends InlineRuleDeclaration<any, any[], infer TMetadata> ? TMetadata extends Promise<infer P> ? P : TMetadata : any>;
|
|
461
612
|
};
|
|
462
613
|
}
|
|
463
614
|
/**
|
|
@@ -470,6 +621,7 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
470
621
|
readonly $anyDirty: boolean;
|
|
471
622
|
readonly $pending: boolean;
|
|
472
623
|
readonly $error: boolean;
|
|
624
|
+
readonly $ready: boolean;
|
|
473
625
|
$id?: string;
|
|
474
626
|
$value: UnwrapNestedRefs<TValue>;
|
|
475
627
|
$touch(): void;
|
|
@@ -482,7 +634,7 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
482
634
|
/**
|
|
483
635
|
* @public
|
|
484
636
|
*/
|
|
485
|
-
type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata extends RegleRuleMetadataDefinition =
|
|
637
|
+
type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata extends RegleRuleMetadataDefinition = any> = {
|
|
486
638
|
readonly $type: string;
|
|
487
639
|
readonly $message: string | string[];
|
|
488
640
|
readonly $active: boolean;
|
|
@@ -490,20 +642,24 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
490
642
|
readonly $pending: boolean;
|
|
491
643
|
readonly $path: string;
|
|
492
644
|
readonly $metadata: TMetadata;
|
|
493
|
-
$validator: (value: TValue, ...args: TParams) =>
|
|
645
|
+
$validator: ((value: Maybe<TValue>, ...args: [TParams] extends [never[]] ? [] : [unknown[]] extends [TParams] ? any[] : TParams) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>) & ((value: TValue, ...args: [TParams] extends [never[]] ? [] : [unknown[]] extends [TParams] ? any[] : TParams) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>);
|
|
494
646
|
$validate(): Promise<boolean>;
|
|
495
647
|
$reset(): void;
|
|
496
|
-
} & ([TParams] extends [[]] ? {} : {
|
|
648
|
+
} & ([TParams] extends [never[]] ? {} : [unknown[]] extends [TParams] ? {
|
|
649
|
+
readonly $params?: any[];
|
|
650
|
+
} : {
|
|
497
651
|
readonly $params: TParams;
|
|
498
652
|
});
|
|
499
653
|
/**
|
|
500
654
|
* @public
|
|
501
655
|
*/
|
|
502
|
-
interface RegleCollectionStatus<TState extends any[] = any[], TRules extends RegleRuleDecl | ReglePartialValidationTree<any> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never> extends Omit<RegleFieldStatus<TState, TRules>, '$errors' | '$silentErrors'> {
|
|
656
|
+
interface RegleCollectionStatus<TState extends any[] = any[], TRules extends RegleRuleDecl | ReglePartialValidationTree<any> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never> extends Omit<RegleFieldStatus<TState, TRules>, '$errors' | '$silentErrors' | '$extractDirtyFields'> {
|
|
503
657
|
readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number>>;
|
|
504
658
|
readonly $field: RegleFieldStatus<TState, TFieldRule>;
|
|
505
659
|
readonly $errors: RegleErrorTree<TRules>;
|
|
506
660
|
readonly $silentErrors: RegleErrorTree<TRules>;
|
|
661
|
+
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
662
|
+
$parse: () => Promise<false | SafeProperty<TState, TRules>>;
|
|
507
663
|
}
|
|
508
664
|
|
|
509
665
|
/**
|
|
@@ -545,15 +701,6 @@ declare function createRule<TValue extends any, TParams extends any[], TReturn e
|
|
|
545
701
|
*/
|
|
546
702
|
declare function unwrapRuleParameters<TParams extends any[]>(params: ParamDecl[]): TParams;
|
|
547
703
|
|
|
548
|
-
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules | (() => TRules) | ComputedRef<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups>;
|
|
549
|
-
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>>;
|
|
550
|
-
|
|
551
|
-
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
552
|
-
<TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
553
|
-
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
554
|
-
}
|
|
555
|
-
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
556
|
-
|
|
557
704
|
declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>>({ rules, modifiers, }: {
|
|
558
705
|
rules?: () => TCustomRules;
|
|
559
706
|
modifiers?: RegleBehaviourOptions;
|
|
@@ -562,4 +709,4 @@ declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarat
|
|
|
562
709
|
inferRules: inferRulesFn<TCustomRules>;
|
|
563
710
|
};
|
|
564
711
|
|
|
565
|
-
export { type DeepMaybeRef, type FormRuleDeclaration, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleExternalValidationErrorsReport, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleValidationTree, type Unwrap, type UnwrapRegleUniversalParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle };
|
|
712
|
+
export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRule, type InferRegleRules, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleExternalValidationErrorsReport, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, type RegleRequiredRules, type RegleRoot, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleValidationTree, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs,
|
|
1
|
+
import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, MaybeRefOrGetter } from 'vue';
|
|
2
2
|
|
|
3
3
|
type Prettify<T> = T extends infer R ? {
|
|
4
4
|
[K in keyof R]: R[K];
|
|
@@ -6,7 +6,7 @@ type Prettify<T> = T extends infer R ? {
|
|
|
6
6
|
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
|
-
type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends
|
|
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
10
|
type DeepMaybeRef<T extends Record<string, any>> = {
|
|
11
11
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
12
12
|
};
|
|
@@ -18,6 +18,20 @@ type NoInferLegacy<A extends any> = [A][A extends any ? 0 : never];
|
|
|
18
18
|
|
|
19
19
|
type ArrayElement<T> = T extends Array<infer U> ? U : never;
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
Matches any [primitive value](https://developer.mozilla.org/en-US/docs/Glossary/Primitive).
|
|
23
|
+
|
|
24
|
+
@category Type
|
|
25
|
+
*/
|
|
26
|
+
type Primitive =
|
|
27
|
+
| null
|
|
28
|
+
| undefined
|
|
29
|
+
| string
|
|
30
|
+
| number
|
|
31
|
+
| boolean
|
|
32
|
+
| symbol
|
|
33
|
+
| bigint;
|
|
34
|
+
|
|
21
35
|
declare global {
|
|
22
36
|
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions -- It has to be an `interface` so that it can be merged.
|
|
23
37
|
interface SymbolConstructor {
|
|
@@ -55,6 +69,119 @@ Unfortunately, `Record<string, never>`, `Record<keyof any, never>` and `Record<n
|
|
|
55
69
|
*/
|
|
56
70
|
type EmptyObject = {[emptyObjectSymbol]?: never};
|
|
57
71
|
|
|
72
|
+
/**
|
|
73
|
+
Matches any primitive, `void`, `Date`, or `RegExp` value.
|
|
74
|
+
*/
|
|
75
|
+
type BuiltIns = Primitive | void | Date | RegExp;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
@see PartialDeep
|
|
79
|
+
*/
|
|
80
|
+
type PartialDeepOptions = {
|
|
81
|
+
/**
|
|
82
|
+
Whether to affect the individual elements of arrays and tuples.
|
|
83
|
+
|
|
84
|
+
@default false
|
|
85
|
+
*/
|
|
86
|
+
readonly recurseIntoArrays?: boolean;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
Create a type from another type with all keys and nested keys set to optional.
|
|
91
|
+
|
|
92
|
+
Use-cases:
|
|
93
|
+
- Merging a default settings/config object with another object, the second object would be a deep partial of the default object.
|
|
94
|
+
- Mocking and testing complex entities, where populating an entire object with its keys would be redundant in terms of the mock or test.
|
|
95
|
+
|
|
96
|
+
@example
|
|
97
|
+
```
|
|
98
|
+
import type {PartialDeep} from 'type-fest';
|
|
99
|
+
|
|
100
|
+
const settings: Settings = {
|
|
101
|
+
textEditor: {
|
|
102
|
+
fontSize: 14;
|
|
103
|
+
fontColor: '#000000';
|
|
104
|
+
fontWeight: 400;
|
|
105
|
+
}
|
|
106
|
+
autocomplete: false;
|
|
107
|
+
autosave: true;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const applySavedSettings = (savedSettings: PartialDeep<Settings>) => {
|
|
111
|
+
return {...settings, ...savedSettings};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
settings = applySavedSettings({textEditor: {fontWeight: 500}});
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
By default, this does not affect elements in array and tuple types. You can change this by passing `{recurseIntoArrays: true}` as the second type argument:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
import type {PartialDeep} from 'type-fest';
|
|
121
|
+
|
|
122
|
+
interface Settings {
|
|
123
|
+
languages: string[];
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const partialSettings: PartialDeep<Settings, {recurseIntoArrays: true}> = {
|
|
127
|
+
languages: [undefined]
|
|
128
|
+
};
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
@category Object
|
|
132
|
+
@category Array
|
|
133
|
+
@category Set
|
|
134
|
+
@category Map
|
|
135
|
+
*/
|
|
136
|
+
type PartialDeep<T, Options extends PartialDeepOptions = {}> = T extends BuiltIns | (((...arguments_: any[]) => unknown)) | (new (...arguments_: any[]) => unknown)
|
|
137
|
+
? T
|
|
138
|
+
: T extends Map<infer KeyType, infer ValueType>
|
|
139
|
+
? PartialMapDeep<KeyType, ValueType, Options>
|
|
140
|
+
: T extends Set<infer ItemType>
|
|
141
|
+
? PartialSetDeep<ItemType, Options>
|
|
142
|
+
: T extends ReadonlyMap<infer KeyType, infer ValueType>
|
|
143
|
+
? PartialReadonlyMapDeep<KeyType, ValueType, Options>
|
|
144
|
+
: T extends ReadonlySet<infer ItemType>
|
|
145
|
+
? PartialReadonlySetDeep<ItemType, Options>
|
|
146
|
+
: T extends object
|
|
147
|
+
? T extends ReadonlyArray<infer ItemType> // Test for arrays/tuples, per https://github.com/microsoft/TypeScript/issues/35156
|
|
148
|
+
? Options['recurseIntoArrays'] extends true
|
|
149
|
+
? ItemType[] extends T // Test for arrays (non-tuples) specifically
|
|
150
|
+
? readonly ItemType[] extends T // Differentiate readonly and mutable arrays
|
|
151
|
+
? ReadonlyArray<PartialDeep<ItemType | undefined, Options>>
|
|
152
|
+
: Array<PartialDeep<ItemType | undefined, Options>>
|
|
153
|
+
: PartialObjectDeep<T, Options> // Tuples behave properly
|
|
154
|
+
: T // If they don't opt into array testing, just use the original type
|
|
155
|
+
: PartialObjectDeep<T, Options>
|
|
156
|
+
: unknown;
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
Same as `PartialDeep`, but accepts only `Map`s and as inputs. Internal helper for `PartialDeep`.
|
|
160
|
+
*/
|
|
161
|
+
type PartialMapDeep<KeyType, ValueType, Options extends PartialDeepOptions> = {} & Map<PartialDeep<KeyType, Options>, PartialDeep<ValueType, Options>>;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
Same as `PartialDeep`, but accepts only `Set`s as inputs. Internal helper for `PartialDeep`.
|
|
165
|
+
*/
|
|
166
|
+
type PartialSetDeep<T, Options extends PartialDeepOptions> = {} & Set<PartialDeep<T, Options>>;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
Same as `PartialDeep`, but accepts only `ReadonlyMap`s as inputs. Internal helper for `PartialDeep`.
|
|
170
|
+
*/
|
|
171
|
+
type PartialReadonlyMapDeep<KeyType, ValueType, Options extends PartialDeepOptions> = {} & ReadonlyMap<PartialDeep<KeyType, Options>, PartialDeep<ValueType, Options>>;
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
Same as `PartialDeep`, but accepts only `ReadonlySet`s as inputs. Internal helper for `PartialDeep`.
|
|
175
|
+
*/
|
|
176
|
+
type PartialReadonlySetDeep<T, Options extends PartialDeepOptions> = {} & ReadonlySet<PartialDeep<T, Options>>;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
Same as `PartialDeep`, but accepts only `object`s as inputs. Internal helper for `PartialDeep`.
|
|
180
|
+
*/
|
|
181
|
+
type PartialObjectDeep<ObjectType extends object, Options extends PartialDeepOptions> = {
|
|
182
|
+
[KeyType in keyof ObjectType]?: PartialDeep<ObjectType[KeyType], Options>
|
|
183
|
+
};
|
|
184
|
+
|
|
58
185
|
/**
|
|
59
186
|
Convert a union type to an intersection type using [distributive conditional types](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#distributive-conditional-types).
|
|
60
187
|
|
|
@@ -117,9 +244,18 @@ type UnionToIntersection<Union> = (
|
|
|
117
244
|
? Intersection & Union
|
|
118
245
|
: never;
|
|
119
246
|
|
|
247
|
+
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups>;
|
|
248
|
+
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>>;
|
|
249
|
+
|
|
250
|
+
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
251
|
+
<TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
252
|
+
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
253
|
+
}
|
|
254
|
+
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
255
|
+
|
|
120
256
|
interface RegleBehaviourOptions {
|
|
121
257
|
/**
|
|
122
|
-
* Only display error when calling `
|
|
258
|
+
* Only display error when calling `r$.$parse()`
|
|
123
259
|
* @default false
|
|
124
260
|
*/
|
|
125
261
|
lazy?: boolean;
|
|
@@ -129,7 +265,7 @@ interface RegleBehaviourOptions {
|
|
|
129
265
|
*/
|
|
130
266
|
autoDirty?: boolean;
|
|
131
267
|
/**
|
|
132
|
-
* The fields will turn valid when they are, but not invalid unless calling `
|
|
268
|
+
* The fields will turn valid when they are, but not invalid unless calling `r$.$parse()`
|
|
133
269
|
* @default false
|
|
134
270
|
*
|
|
135
271
|
* @experimental report any bug
|
|
@@ -158,16 +294,7 @@ type AddDollarToOptions<T extends Record<string, any>> = {
|
|
|
158
294
|
};
|
|
159
295
|
|
|
160
296
|
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree> = EmptyObject, TExternal extends RegleExternalErrorTree<TState> = never, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never> {
|
|
161
|
-
|
|
162
|
-
r$: RegleStatus<TState, TRules, TValidationGroups>;
|
|
163
|
-
/** Show active errors based on your behaviour options (lazy, autoDirty)
|
|
164
|
-
* It allow you to skip scouting the `regle` object
|
|
165
|
-
*/
|
|
166
|
-
errors: RegleErrorTree<TRules, TExternal>;
|
|
167
|
-
ready: ComputedRef<boolean>;
|
|
168
|
-
resetAll: () => void;
|
|
169
|
-
validateState: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
|
|
170
|
-
state: Ref<TState>;
|
|
297
|
+
r$: RegleRoot<TState, TRules, TValidationGroups, TExternal>;
|
|
171
298
|
}
|
|
172
299
|
type isDeepExact<T, U> = {
|
|
173
300
|
[K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
|
|
@@ -184,6 +311,10 @@ type DeepSafeFormState<TState extends Record<string, any>, TRules extends RegleP
|
|
|
184
311
|
[K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? never : K]-?: SafeProperty<TState[K], TRules[K]>;
|
|
185
312
|
};
|
|
186
313
|
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends ReglePartialValidationTree<any, any> ? TState extends Record<string, any> ? DeepSafeFormState<TState, TRule> : TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? never : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? TState : never : never : never : never;
|
|
314
|
+
type InferRegleRules<T extends useRegleFn<any>> = T extends useRegleFn<infer U> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
|
|
315
|
+
type RegleRequiredRules<T extends Partial<AllRulesDeclarations> | useRegleFn<any>, TRules extends T extends useRegleFn<any> ? keyof InferRegleRules<T> : keyof T> = Omit<T extends useRegleFn<any> ? InferRegleRules<T> : T extends Partial<AllRulesDeclarations> ? UnwrapRuleTree<T> : {}, TRules> & {
|
|
316
|
+
[K in TRules]-?: T extends useRegleFn<any> ? K extends keyof InferRegleRules<T> ? NonNullable<InferRegleRules<T>[K]> : never : K extends keyof T ? NonNullable<T[K]> : never;
|
|
317
|
+
};
|
|
187
318
|
|
|
188
319
|
type ParamDecl<T = any> = MaybeRef<Maybe<T>> | (() => Maybe<T>);
|
|
189
320
|
type CreateFn<T extends any[]> = (...args: T) => any;
|
|
@@ -239,6 +370,12 @@ type RegleRuleMetadataExtended = {
|
|
|
239
370
|
$valid: boolean;
|
|
240
371
|
[x: string]: any;
|
|
241
372
|
};
|
|
373
|
+
type UnwrapRuleTree<T extends {
|
|
374
|
+
[x: string]: RegleRuleRaw<any> | undefined;
|
|
375
|
+
}> = {
|
|
376
|
+
[K in keyof T]: UnwrapRuleWithParams<T[K]>;
|
|
377
|
+
};
|
|
378
|
+
type UnwrapRuleWithParams<T extends RegleRuleRaw<any> | undefined> = T extends RegleRuleWithParamsDefinition<infer TValue, infer TParams, infer TAsync, infer TMetadata> ? RegleRuleDefinition<TValue, TParams, TAsync, TMetadata> : T;
|
|
242
379
|
/**
|
|
243
380
|
* Define a rule Metadata definition
|
|
244
381
|
*/
|
|
@@ -259,7 +396,7 @@ type PossibleRegleRuleMetadataConsumer = DefaultMetadataProperties & {
|
|
|
259
396
|
/**
|
|
260
397
|
* Generic types for a created RegleRule
|
|
261
398
|
*/
|
|
262
|
-
type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean =
|
|
399
|
+
type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = boolean, TMetaData extends RegleRuleMetadataDefinition = boolean> = RegleRuleDefinition<TValue, TParams, TAsync, TMetaData> | RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetaData>;
|
|
263
400
|
/**
|
|
264
401
|
* Process the type of a created rule with `createRule`.
|
|
265
402
|
* For a rule with params it will return a function
|
|
@@ -345,7 +482,10 @@ type DefaultValidators = {
|
|
|
345
482
|
numeric: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
346
483
|
regex: RegleRuleWithParamsDefinition<string, [regexp: RegExp], false, boolean>;
|
|
347
484
|
required: RegleRuleDefinition<unknown, []>;
|
|
348
|
-
sameAs: RegleRuleWithParamsDefinition<unknown, [
|
|
485
|
+
sameAs: RegleRuleWithParamsDefinition<unknown, [
|
|
486
|
+
target: unknown,
|
|
487
|
+
otherName?: string
|
|
488
|
+
], false, boolean>;
|
|
349
489
|
startsWith: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
|
|
350
490
|
url: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
351
491
|
};
|
|
@@ -353,7 +493,9 @@ type DefaultValidators = {
|
|
|
353
493
|
type CustomRulesDeclarationTree = {
|
|
354
494
|
[x: string]: RegleRuleRaw<any, any, boolean, any> | undefined;
|
|
355
495
|
};
|
|
356
|
-
type AllRulesDeclarations = CustomRulesDeclarationTree &
|
|
496
|
+
type AllRulesDeclarations = CustomRulesDeclarationTree & {
|
|
497
|
+
[K in keyof DefaultValidators]: RegleRuleRaw<any, any, boolean, any> | undefined;
|
|
498
|
+
};
|
|
357
499
|
|
|
358
500
|
/**
|
|
359
501
|
* @public
|
|
@@ -433,17 +575,25 @@ type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalVal
|
|
|
433
575
|
/**
|
|
434
576
|
* @public
|
|
435
577
|
*/
|
|
436
|
-
type
|
|
437
|
-
|
|
438
|
-
readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey>;
|
|
439
|
-
};
|
|
440
|
-
readonly $errors: RegleErrorTree<TRules>;
|
|
441
|
-
readonly $silentErrors: RegleErrorTree<TRules>;
|
|
578
|
+
type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TExternal extends RegleExternalErrorTree<TState> = never> = RegleStatus<TState, TRules, TExternal> & {
|
|
579
|
+
$resetAll: () => void;
|
|
442
580
|
} & ([TValidationGroups] extends [never] ? {} : {
|
|
443
581
|
$groups: {
|
|
444
582
|
readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
|
|
445
583
|
};
|
|
446
584
|
});
|
|
585
|
+
/**
|
|
586
|
+
* @public
|
|
587
|
+
*/
|
|
588
|
+
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TExternal extends RegleExternalErrorTree<TState> = never> = RegleCommonStatus<TState> & {
|
|
589
|
+
readonly $fields: {
|
|
590
|
+
readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey>;
|
|
591
|
+
};
|
|
592
|
+
readonly $errors: RegleErrorTree<TRules, TExternal>;
|
|
593
|
+
readonly $silentErrors: RegleErrorTree<TRules, TExternal>;
|
|
594
|
+
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
595
|
+
$parse: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
|
|
596
|
+
};
|
|
447
597
|
/**
|
|
448
598
|
* @public
|
|
449
599
|
*/
|
|
@@ -451,13 +601,14 @@ type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl
|
|
|
451
601
|
/**
|
|
452
602
|
* @public
|
|
453
603
|
*/
|
|
454
|
-
interface RegleFieldStatus<TState extends any =
|
|
455
|
-
$value: UnwrapNestedRefs<TState
|
|
604
|
+
interface RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>> extends Omit<RegleCommonStatus<TState>, '$value'> {
|
|
605
|
+
$value: Maybe<UnwrapNestedRefs<TState>>;
|
|
456
606
|
readonly $errors: string[];
|
|
457
607
|
readonly $silentErrors: string[];
|
|
458
608
|
readonly $externalErrors?: string[];
|
|
609
|
+
$extractDirtyFields: (filterNullishValues?: boolean) => TState | null;
|
|
459
610
|
readonly $rules: {
|
|
460
|
-
readonly [TRuleKey in keyof Omit<TRules, '$each' | keyof FieldRegleBehaviourOptions>]: RegleRuleStatus<TState, TRules[TRuleKey] extends RegleRuleDefinition<any, infer TParams, any> ? TParams : [], TRules[TRuleKey] extends RegleRuleDefinition<any, any, any, infer TMetadata> ? TMetadata : TRules[TRuleKey] extends InlineRuleDeclaration<any, any[], infer TMetadata> ? TMetadata extends Promise<infer P> ? P : TMetadata :
|
|
611
|
+
readonly [TRuleKey in keyof Omit<TRules, '$each' | keyof FieldRegleBehaviourOptions>]: RegleRuleStatus<TState, TRules[TRuleKey] extends RegleRuleDefinition<any, infer TParams, any> ? TParams : [], TRules[TRuleKey] extends RegleRuleDefinition<any, any, any, infer TMetadata> ? TMetadata : TRules[TRuleKey] extends InlineRuleDeclaration<any, any[], infer TMetadata> ? TMetadata extends Promise<infer P> ? P : TMetadata : any>;
|
|
461
612
|
};
|
|
462
613
|
}
|
|
463
614
|
/**
|
|
@@ -470,6 +621,7 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
470
621
|
readonly $anyDirty: boolean;
|
|
471
622
|
readonly $pending: boolean;
|
|
472
623
|
readonly $error: boolean;
|
|
624
|
+
readonly $ready: boolean;
|
|
473
625
|
$id?: string;
|
|
474
626
|
$value: UnwrapNestedRefs<TValue>;
|
|
475
627
|
$touch(): void;
|
|
@@ -482,7 +634,7 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
482
634
|
/**
|
|
483
635
|
* @public
|
|
484
636
|
*/
|
|
485
|
-
type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata extends RegleRuleMetadataDefinition =
|
|
637
|
+
type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata extends RegleRuleMetadataDefinition = any> = {
|
|
486
638
|
readonly $type: string;
|
|
487
639
|
readonly $message: string | string[];
|
|
488
640
|
readonly $active: boolean;
|
|
@@ -490,20 +642,24 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
490
642
|
readonly $pending: boolean;
|
|
491
643
|
readonly $path: string;
|
|
492
644
|
readonly $metadata: TMetadata;
|
|
493
|
-
$validator: (value: TValue, ...args: TParams) =>
|
|
645
|
+
$validator: ((value: Maybe<TValue>, ...args: [TParams] extends [never[]] ? [] : [unknown[]] extends [TParams] ? any[] : TParams) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>) & ((value: TValue, ...args: [TParams] extends [never[]] ? [] : [unknown[]] extends [TParams] ? any[] : TParams) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>);
|
|
494
646
|
$validate(): Promise<boolean>;
|
|
495
647
|
$reset(): void;
|
|
496
|
-
} & ([TParams] extends [[]] ? {} : {
|
|
648
|
+
} & ([TParams] extends [never[]] ? {} : [unknown[]] extends [TParams] ? {
|
|
649
|
+
readonly $params?: any[];
|
|
650
|
+
} : {
|
|
497
651
|
readonly $params: TParams;
|
|
498
652
|
});
|
|
499
653
|
/**
|
|
500
654
|
* @public
|
|
501
655
|
*/
|
|
502
|
-
interface RegleCollectionStatus<TState extends any[] = any[], TRules extends RegleRuleDecl | ReglePartialValidationTree<any> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never> extends Omit<RegleFieldStatus<TState, TRules>, '$errors' | '$silentErrors'> {
|
|
656
|
+
interface RegleCollectionStatus<TState extends any[] = any[], TRules extends RegleRuleDecl | ReglePartialValidationTree<any> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never> extends Omit<RegleFieldStatus<TState, TRules>, '$errors' | '$silentErrors' | '$extractDirtyFields'> {
|
|
503
657
|
readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number>>;
|
|
504
658
|
readonly $field: RegleFieldStatus<TState, TFieldRule>;
|
|
505
659
|
readonly $errors: RegleErrorTree<TRules>;
|
|
506
660
|
readonly $silentErrors: RegleErrorTree<TRules>;
|
|
661
|
+
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
662
|
+
$parse: () => Promise<false | SafeProperty<TState, TRules>>;
|
|
507
663
|
}
|
|
508
664
|
|
|
509
665
|
/**
|
|
@@ -545,15 +701,6 @@ declare function createRule<TValue extends any, TParams extends any[], TReturn e
|
|
|
545
701
|
*/
|
|
546
702
|
declare function unwrapRuleParameters<TParams extends any[]>(params: ParamDecl[]): TParams;
|
|
547
703
|
|
|
548
|
-
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules | (() => TRules) | ComputedRef<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups>;
|
|
549
|
-
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>>;
|
|
550
|
-
|
|
551
|
-
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
552
|
-
<TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
553
|
-
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
554
|
-
}
|
|
555
|
-
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
556
|
-
|
|
557
704
|
declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>>({ rules, modifiers, }: {
|
|
558
705
|
rules?: () => TCustomRules;
|
|
559
706
|
modifiers?: RegleBehaviourOptions;
|
|
@@ -562,4 +709,4 @@ declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarat
|
|
|
562
709
|
inferRules: inferRulesFn<TCustomRules>;
|
|
563
710
|
};
|
|
564
711
|
|
|
565
|
-
export { type DeepMaybeRef, type FormRuleDeclaration, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleExternalValidationErrorsReport, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleValidationTree, type Unwrap, type UnwrapRegleUniversalParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle };
|
|
712
|
+
export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRule, type InferRegleRules, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleExternalValidationErrorsReport, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, type RegleRequiredRules, type RegleRoot, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleValidationTree, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {unref,version,isRef,toRef,computed,ref,toRaw,reactive,shallowRef,onScopeDispose,triggerRef,watch,effectScope}from'vue';function V(e){return e.map(t=>t instanceof Function?t():unref(t))}function Ie(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function Pe(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(l=>l.trim()).filter(l=>l.includes("=")).length+e.length}function ie(e,...t){let{message:r,validator:n,active:a,...l}=e,d=n.constructor.name==="AsyncFunction";return {...{validator(S,...v){return e.validator(S,...V(v.length?v:t))},message(S,v){return typeof e.message=="function"?e.message(S,{...v,$params:V(v.$params?.length?v.$params:t)}):e.message},active(S,v){return typeof e.active=="function"?e.active(S,{...v,$params:V(v.$params?.length?v.$params:t)}):e.active??!0},exec(S){let v=e.validator(S,...V(t)),o;return v instanceof Promise?v.then(R=>(o=R,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)):(o=v,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)}},...l,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:d,_params:Ie(t)}}function ue(e){if(typeof e.validator=="function"){let r=ie(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Pe(e.validator)>1){let a=function(...l){return ie(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 G(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function we(e){return G(e.value)}function B(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>B(n)))),r=="Map"&&(t=new Map([...e].map(n=>[B(n[0]),B(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,tt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=B(e[n]);}return t}function tt(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 ce(e,t,r){return e instanceof Function?e(t,r??0):e}function re(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function X(e,t,r){let n,a=(...l)=>new Promise(d=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(d);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...l)=>new Promise(d=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(d);},0);}),a}function nt(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]),d=Number(n[a]);if(l>d)return 1;if(d>l)return -1;if(!isNaN(l)&&isNaN(d))return 1;if(isNaN(l)&&!isNaN(d))return -1}return 0}var q=nt(version,"3.5.0")!==-1;function at(){return Math.floor(Math.random()*Date.now()).toString()}function fe(){return typeof window>"u"?at():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Re(){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 d(p){let g=t.value.get(p);if(g)return g;{let f=ref({});return t.value.set(p,f),f}}function h(p){let g=r.value.get(p);if(g)return g;{let f=ref([]);return r.value.set(p,f),f}}function P(p,g,f){l.value.set(`${p}-${g}`,f);}function S(p,g){return l.value.get(`${p}-${g}`)}function v(p,g){p&&g!=null&&l.value.delete(`${p}-${g}`);}function o(p,g){n.value.set(p,g);}function R(p){return n.value.get(p)??!1}function D(p,g){e.value.set(p,g);}function m(p,g){let f=e.value.get(p);return f?u(g,f)?{valid:!0}:{valid:!1}:void 0}function u(p,g){let f=Object.keys(g),O=Object.keys(p);return O.length!==f.length||!O.every(E=>f.includes(E))?!1:O.every(E=>{let c=p[E],i=g[E];return !i||!c||typeof c=="function"||typeof i=="function"||typeof c=="number"||typeof c=="boolean"?!1:c._params?c._params?.every((s,$)=>{if(typeof i=="number"||typeof i=="boolean")return !0;{let y=V(i._params),x=V(c._params);return y?.[$]===x?.[$]}}):!0})}function F(p){let g=a.value.get(p);if(g)return g;{let f=ref(!1),O=ref(!0),I=ref({}),E=ref(!1);return a.value.set(p,{$pending:f,$valid:O,$metadata:I,$validating:E}),{$pending:f,$valid:O,$metadata:I,$validating:E}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),l.value.clear();}),{addRuleDeclEntry:D,setDirtyEntry:o,checkRuleDeclEntry:m,getDirtyState:R,trySetRuleStatusRef:F,getFieldsEntry:d,getCollectionsEntry:h,getArrayStatus:S,addArrayStatus:P,deleteArrayStatus:v,arrayStatusStorage:l}}function Oe(e,t){return G(e.value)&&G(t.value)&&!Object.entries(t.value).some(r=>pe(r))}function Ae(e){return !!e.value&&"$each"in e.value}function Me(e){return !!e.value&&G(e.value)}function pe(e){return G(e)&&"_validator"in e}function Y(e){return typeof e.value!="function"}function de(e){return G(e)&&"$fields"in e}function me(e){return !!e&&"$each"in e}function ge(e){return !!e&&"$rules"in e}function ye(e){return "$each"in e||"$errors"in e}function U({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function Fe(e,t=!1){return de(e)?ve(e.$fields):me(e)?{$errors:e.$field.$rules?U({field:e.$field,silent:t}):[],$each:e.$each.map(r=>Fe(r,t))}:ge(e)?e.$error?U({field:e,silent:t}):e.$externalErrors??[]:[]}function st(e,t=!1){return e.map(r=>Fe(r,t))}function ve(e,t=!1){return Object.fromEntries(Object.entries(e).map(([r,n])=>de(n)?[r,ve(n.$fields,t)]:me(n)?[r,{$errors:U({field:n.$field,silent:t}),$each:st(n.$each,t)}]:ge(n)?n.$error?[r,U({field:n,silent:t})]:[r,n.$externalErrors??[]]:[r,[]]))}function Ve(e){return computed(()=>ve(e.$fields))}var je=(r=>(r.Inline="__inline",r.Async="__async",r))(je||{});function ke(e,t){return computed(()=>e.value.some(r=>r[t]))}function Ge(e,t){return computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function Ne({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:l,storage:d,$debounce:h}){let P=effectScope(),S,v,{$pending:o,$valid:R,$metadata:D,$validating:m}=d.trySetRuleStatusRef(`${l}.${n}`);function u(){S=P.run(()=>{let E=computed(()=>({$invalid:!R.value,$params:y.value,...D.value})),c=computed(()=>Y(r)?typeof r.value.active=="function"?r.value.active(a.value,E.value):r.value.active:!0),i=computed(()=>{let T="",C=t?t[n]?.message:void 0;return C&&(typeof C=="function"?T=C(a.value,E.value):T=C),Y(r)&&(C&&!r.value._patched||(typeof r.value.message=="function"?T=r.value.message(a.value,E.value):T=r.value.message)),re(T)&&(T="Error",console.warn(`No error message defined for ${l}.${n}`)),T}),s=computed(()=>Y(r)&&r.value.type?r.value.type:n),$=computed(()=>Y(r)?r.value.validator:r.value),y=computed(()=>typeof r.value=="function"?[]:V(r.value._params??[])),x=computed(()=>`${l}.${s.value}`);return {$active:c,$message:i,$type:s,$validator:$,$params:y,$path:x}}),v=watch(S.$params,f,{deep:!0});}u();function F(){R.value=!0,e.value&&(o.value=!0);}async function p(E){let c=!1;try{F();let i=await E;if(typeof i=="boolean")c=i;else {let{$valid:s,...$}=i;c=s,D.value=$;}}catch{c=!1;}finally{o.value=!1;}return c}let g=X(p,h??100);async function f(){m.value=!0;let E=S.$validator.value,c=!1,i=E(a.value,...S.$params.value);if(i instanceof Promise)c=await g(i);else if(i!=null)if(typeof i=="boolean")c=i;else {let{$valid:s,...$}=i;c=s,D.value=$;}return R.value=c,m.value=!1,c}function O(){R.value=!0,D.value={},o.value=!1,m.value=!1,u();}function I(){v(),P.stop(),P=effectScope();}return reactive({...S,$pending:o,$valid:R,$metadata:D,$validate:f,$unwatch:I,$watch:u,$reset:O})}function ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:d,index:h,onUnwatch:P,$isArray:S}){let v=effectScope(),o,R=ref(!1),D=ref(!1),m=ref([]),u,F,p,g,f=()=>{};function O(){m.value=d.value??[];}O();function I(){let b=t.value,A=a.checkRuleDeclEntry(n,b);$.value=Object.fromEntries(Object.entries(b).filter(([M])=>M.startsWith("$"))),s.value=Object.fromEntries(Object.entries(t.value).filter(([M])=>!M.startsWith("$")).map(([M,k])=>{if(k){let oe=toRef(()=>k);return [M,Ne({$dirty:R,customMessages:r,rule:oe,ruleKey:M,state:e,path:n,storage:a,$debounce:$.value.$debounce})]}return []}).filter(M=>!!M.length)),c(),f=o.$debounce.value?X(i,o.$debounce.value??0):i,A?.valid!=null&&(R.value=a.getDirtyState(n),R.value&&f()),a.addRuleDeclEntry(n,b);}function E(){s.value&&Object.entries(s.value).forEach(([b,A])=>{A.$unwatch();}),g(),R.value&&a.setDirtyEntry(n,R.value),u(),F(),p(),v.stop(),v=effectScope(),P?.();}function c(){s.value&&Object.entries(s.value).forEach(([b,A])=>{A.$watch();}),o=v.run(()=>{let b=computed(()=>R.value),A=computed(()=>$.value.$debounce),M=computed(()=>$.value.$lazy!=null?$.value.$lazy:unref(l.lazy)),k=computed(()=>$.value.$rewardEarly!=null?$.value.$rewardEarly:unref(l.rewardEarly)),oe=computed(()=>$.value.$autoDirty!=null?$.value.$autoDirty:unref(l.autoDirty)),Qe=computed(()=>se.value&&!De.value&&R.value),Xe=computed(()=>U({field:{$dirty:R.value,$externalErrors:m.value,$rules:s.value}})),Ye=computed(()=>U({field:{$dirty:R.value,$externalErrors:m.value,$rules:s.value},silent:!0})),De=computed(()=>D.value||!k.value?Object.entries(s.value).some(([te,Q])=>Q.$pending):!1),se=computed(()=>m.value?.length?!0:!k.value||k.value&&D.value?Object.entries(s.value).some(([te,Q])=>!Q.$valid):!1),Ce=computed(()=>R.value&&!re(e.value)?m.value?.length?!1:k.value?Object.entries(s.value).every(([te,Q])=>Q.$valid):!se.value:!1);return watch(Ce,te=>{te&&(D.value=!1);}),{$error:Qe,$pending:De,$invalid:se,$valid:Ce,$debounce:A,$lazy:M,$errors:Xe,$silentErrors:Ye,$rewardEarly:k,$autoDirty:oe,$anyDirty:b}}),p=watch(d,O),u=watch(e,()=>{o.$autoDirty.value&&(R.value||(R.value=!0)),t.value instanceof Function&&I(),f(),o.$rewardEarly.value;},{deep:S?!0:q?1:!0}),g=watch(R,()=>{a.setDirtyEntry(n,R.value);}),F=watch(o.$valid,b=>{o.$rewardEarly.value&&b&&(D.value=!1);});}function i(){Object.entries(s.value).forEach(([b,A])=>{A.$validate();});}let s=ref(),$=ref();I();function y(){R.value=!1,m.value=[],Object.entries(s.value).forEach(([b,A])=>{A.$reset();}),o.$lazy.value||Object.entries(s.value).map(([b,A])=>A.$validate());}function x(){R.value||(R.value=!0,o.$rewardEarly.value,f());}let T=o.$debounce.value?X(C,o.$debounce.value??0):C;async function C(){try{if(D.value=!0,o.$autoDirty.value&&R.value&&!o.$pending.value)return !o.$error.value;{let b=Object.entries(s.value).map(([M,k])=>k.$validate());return (await Promise.allSettled(b)).every(M=>M.status==="fulfilled"?M.value:!1)}}catch{return !1}}function w(){m.value=[];}return o.$lazy.value||C(),reactive({$dirty:R,...o,$externalErrors:m,$value:e,$rules:s,$reset:y,$touch:x,$validate:T,$unwatch:E,$watch:c,$clearExternalErrors:w})}function We({$id:e,path:t,index:r,options:n,storage:a,stateValue:l,customMessages:d,rules:h,externalErrors:P}){let S=h.$key?h.$key:fe(),v=`${t}.${String(S)}`;typeof l.value=="object"&&l.value!=null&&(l.value.$id?v=`${t}.${l.value.$id}`:Object.defineProperties(l.value,{$id:{value:S,enumerable:!1,configurable:!1,writable:!1}}));let o=toRef(()=>P.value?.[r]),R=le({state:l,rulesDef:toRef(()=>h),customMessages:d,path:v,storage:a,options:n,externalErrors:o});if(R){let D=l.value?.$id;R.$id=D??String(S),a.addArrayStatus(e,R.$id,R);}return R}function He({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:d}){let h=effectScope(),P,S=effectScope(),v;if(Array.isArray(e.value)&&!t.value.$each)return null;let o=ref(),R=ref(e.value),D,m=ref({}),u=a.getCollectionsEntry(n);v=S.run(()=>{let i=computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(y=>typeof y!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(y=>pe(y)):!1),s=computed(()=>d.value?ye(d.value)?d.value.$errors??[]:[]:[]),$=computed(()=>d.value?ye(d.value)?d.value.$each??[]:[]:[]);return {isPrimitiveArray:i,$externalErrorsField:s,$externalErrorsEach:$}}),F(),g();function F(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(o.value=fe(),Object.defineProperties(e.value,{$id:{value:o.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(o.value=e.value.$id)),!v.isPrimitiveArray.value&&(R.value=m.value.$value,Array.isArray(e.value)&&t.value.$each?u.value=e.value.map((i,s)=>{let $=ce(t.value.$each,toRef(()=>i),s);if($){let y=We({$id:o.value,path:n,rules:$,stateValue:toRef(()=>i),index:s,options:l,storage:a,externalErrors:v.$externalErrorsEach});return y||null}}).filter(i=>!!i):u.value=[],m.value=ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:v.$externalErrorsField,$isArray:!0}));}function p(){if(Array.isArray(e.value)){let i=B(u.value);u.value=e.value.map((s,$)=>{let y=toRef(()=>s);if(s.$id&&u.value.find(x=>x.$id===s.$id)){let x=a.getArrayStatus(o.value,s.$id);return x?(x.$value=y,x):null}else {let x=ce(t.value.$each,y,$);if(x){let T=We({$id:o.value,path:n,rules:x,stateValue:y,index:$,options:l,storage:a,externalErrors:v.$externalErrorsEach});return T||null}}}).filter(s=>!!s),i.filter(s=>!e.value.find($=>s.$id===$.$id)).forEach((s,$)=>{a.deleteArrayStatus(o.value,$.toString());});}else u.value=[];}function g(){D=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?F():p();},{deep:q?1:!0,flush:"pre"}),P=h.run(()=>{let i=computed(()=>m.value.$dirty&&u.value.every(b=>b.$dirty)),s=computed(()=>m.value.$anyDirty||u.value.some(b=>b.$dirty)),$=computed(()=>m.value.$invalid||u.value.some(b=>b.$invalid)),y=computed(()=>m.value.$valid&&u.value.every(b=>b.$valid)),x=computed(()=>m.value.$error||u.value.some(b=>b.$error)),T=computed(()=>m.value.$pending||u.value.some(b=>b.$pending)),C=computed(()=>({$errors:m.value.$errors,$each:u.value.map(b=>b.$errors)})),w=computed(()=>({$errors:m.value.$silentErrors,$each:u.value.map(b=>b.$silentErrors)}));return {$dirty:i,$anyDirty:s,$invalid:$,$valid:y,$error:x,$pending:T,$errors:C,$silentErrors:w}}),v.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),D());}function f(){D&&D(),m.value&&m.value.$unwatch(),u.value&&u.value.forEach(i=>{"$dirty"in i&&i.$unwatch();}),h.stop(),h=effectScope(),S.stop(),S=effectScope(!0);}function O(){m.value.$touch(),u.value.forEach(i=>{i.$touch();});}function I(){m.value.$reset(),u.value.forEach(i=>{i.$reset();});}async function E(){try{return (await Promise.all([m.value.$validate(),...u.value.map(s=>s.$validate())])).every(s=>!!s)}catch{return !1}}function c(){}return reactive({$field:m,...P,$each:u,$value:e,$validate:E,$unwatch:f,$watch:g,$touch:O,$reset:I,$clearExternalErrors:c})}function Ee({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:l,options:d,externalErrors:h,validationGroups:P}){let S,v,o;function m(E=!0,c=!1){u.value=null,triggerRef(u);let i=Object.fromEntries(Object.entries(e.value).map(([y,x])=>{if(x){let T=toRef(t.value,y),C=toRef(()=>x),w=toRef(()=>h.value?.[y]);return [y,le({state:T,rulesDef:C,customMessages:r,path:n?`${n}.${y}`:y,storage:l,options:d,externalErrors:w})]}return []}).filter(y=>!!y.length&&y[1]!=null)),s=Object.fromEntries(Object.entries(unref(h)??{}).filter(([y])=>!(y in e.value)).map(([y,x])=>{if(x){let T=toRef(()=>({})),C=toRef(()=>x);return [y,le({state:ref(void 0),rulesDef:T,customMessages:r,path:n?`${n}.${y}`:y,storage:l,options:d,externalErrors:C})]}return []})),$=Object.fromEntries(Object.entries(P?.(i)??{}).map(([y,x])=>x.length?[y,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(T=>[T,ke(toRef(()=>x),T)])),...Object.fromEntries(["$errors","$silentErrors"].map(T=>[T,Ge(toRef(()=>x),T)]))}]:[]));u.value={...i,...s,...$},E&&f();}let u=l.getFieldsEntry(n);m();function F(){m(!1),Object.entries(u.value).forEach(([E,c])=>{c.$reset();}),f();}function p(){Object.entries(u.value).forEach(([E,c])=>{c.$touch();});}async function g(){try{return (await Promise.allSettled(Object.entries(u.value).map(([c,i])=>i.$validate()))).every(c=>c.status==="fulfilled"?c.value:!1)}catch{return !1}}function f(){a&&(o=watch(a,()=>{O(),m();},{deep:q?1:!0,flush:"post"})),S=effectScope(),v=S.run(()=>{let E=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([C,w])=>w.$dirty)),c=computed(()=>Object.entries(u.value).some(([C,w])=>w.$dirty)),i=computed(()=>Object.entries(u.value).some(([C,w])=>w.$invalid)),s=computed(()=>Object.entries(u.value).every(([C,w])=>w.$valid)),$=computed(()=>E.value&&!y.value&&i.value),y=computed(()=>Object.entries(u.value).some(([C,w])=>w.$pending)),x=computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,w])=>[C,w.$errors]))),T=computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,w])=>[C,w.$silentErrors])));return {$dirty:E,$anyDirty:c,$invalid:i,$valid:s,$error:$,$pending:y,$errors:x,$silentErrors:T}});}function O(){u.value&&Object.entries(u.value).forEach(([E,c])=>{c.$unwatch();}),o?.(),S.stop(),S=effectScope();}function I(){Object.entries(u.value).forEach(([E,c])=>{c.$clearExternalErrors();});}return reactive({...v,$fields:u,$value:t,$reset:F,$touch:p,$validate:g,$unwatch:O,$watch:f,$clearExternalErrors:I})}function le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:d,index:h,onUnwatch:P}){return Ae(t)?He({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:h,externalErrors:d}):Oe(e,t)&&we(e)?Ee({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:l,index:h,externalErrors:d}):Me(t)?ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:h,externalErrors:d,onUnwatch:P}):null}function be(e,t,r,n){let a=Re(),l=computed(()=>unref(r.externalErrors)),d=reactive(Ee({rootRules:e,scopeRules:e,state:t,customMessages:n?.(),storage:a,options:r,externalErrors:l,validationGroups:r.validationGroups})),h=Ve(d);return {regle:d,errors:h}}function xe(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,l,d){let h=isRef(l)?l:computed(typeof l=="function"?l:()=>l),P={...r,...d},S=isRef(a)?a:ref(a),v=B(toRaw(S.value)),{regle:o,errors:R}=be(h,S,P,e);function D(){o.$unwatch(),m(a,v),o.$reset();}function m(p,g){Object.entries(g).forEach(([f,O])=>{let I=isRef(p)?p.value:p,E=isRef(I[f])?I[f].value:I[f],c=isRef(g[f])?g[f]._value:g[f];Array.isArray(c)&&Array.isArray(E)?(I[f]=[],c.forEach((i,s)=>{I[f][s]={},m(I[f][s],c[s]);})):G(c)?m(E,c):isRef(I[f])?I[f].value=c:I[f]=c;});}let u=computed(()=>!(o.$invalid||o.$pending));async function F(){return o.$touch(),await o.$validate()?S.value:!1}return {regle:o,r$:o,errors:R,resetAll:D,validateState:F,ready:u,state:S}}return n}var ze=xe();function Te(){function e(t,r){return r}return e}var he=Te();function Je({rules:e,modifiers:t}){let r=xe(e,t),n=Te();return {useRegle:r,inferRules:n}}export{je as InternalRuleType,ue as createRule,Je as defineRegleConfig,he as inferRules,V as unwrapRuleParameters,ze as useRegle};
|
|
1
|
+
import {unref,version,isRef,toRef,computed,ref,toRaw,reactive,shallowRef,onScopeDispose,triggerRef,watch,effectScope}from'vue';var Re=(r=>(r.Inline="__inline",r.Async="__async",r))(Re||{});function Oe(e,t){return computed(()=>e.value.some(r=>r[t]))}function Ae(e,t){return computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function B(e){return e.map(t=>t instanceof Function?t():unref(t))}function Fe(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function Me(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(l=>l.trim()).filter(l=>l.includes("=")).length+e.length}function pe(e,...t){let{message:r,validator:n,active:a,type:l,...m}=e,x=l==="__async"||n.constructor.name==="AsyncFunction";return {...{validator($,...i){return e.validator($,...B(i.length?i:t))},message($,i){return typeof e.message=="function"?e.message($,{...i,$params:B(i.$params?.length?i.$params:t)}):e.message},active($,i){return typeof e.active=="function"?e.active($,{...i,$params:B(i.$params?.length?i.$params:t)}):e.active??!0},exec($){let i=e.validator($,...B(t)),c;return i instanceof Promise?i.then(h=>(c=h,typeof c=="object"&&"$valid"in c?c.$valid:typeof c=="boolean"?c:!1)):(c=i,typeof c=="object"&&"$valid"in c?c.$valid:typeof c=="boolean"?c:!1)}},...m,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:x,_params:Fe(t)}}function de(e){if(typeof e.validator=="function"){let r=pe(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Me(e.validator)>1){let a=function(...l){return pe(e,...l)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function N(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ve(e){return N(e.value)}function q(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>q(n)))),r=="Map"&&(t=new Map([...e].map(n=>[q(n[0]),q(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,rt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=q(e[n]);}return t}function rt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function me(e,t,r){return e instanceof Function?e(t,r??0):e}function L(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function ee(e,t,r){let n,a=(...l)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(m);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...l)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(m);},0);}),a}function at(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let l=Number(r[a]),m=Number(n[a]);if(l>m)return 1;if(m>l)return -1;if(!isNaN(l)&&isNaN(m))return 1;if(isNaN(l)&&!isNaN(m))return -1}return 0}var Q=at(version,"3.5.0")!==-1;function lt(){return Math.floor(Math.random()*Date.now()).toString()}function ye(){return typeof window>"u"?lt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function ge(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),l=shallowRef(new Map);function m(u){let g=t.value.get(u);if(g)return g;{let E=ref({});return t.value.set(u,E),E}}function x(u){let g=r.value.get(u);if(g)return g;{let E=ref([]);return r.value.set(u,E),E}}function F(u,g,E){l.value.set(`${u}-${g}`,E);}function S(u,g){return l.value.get(`${u}-${g}`)}function $(u,g){u&&g!=null&&l.value.delete(`${u}-${g}`);}function i(u,g){n.value.set(u,g);}function c(u){return n.value.get(u)??!1}function h(u,g){e.value.set(u,g);}function y(u,g){let E=e.value.get(u);return E?v(g,E)?{valid:!0}:{valid:!1}:void 0}function v(u,g){let E=Object.keys(g),A=Object.keys(u);return A.length!==E.length||!A.every(V=>E.includes(V))?!1:A.every(V=>{let b=u[V],j=g[V];return !j||!b||typeof b=="function"||typeof j=="function"||typeof b=="number"||typeof b=="boolean"?!1:b._params?b._params?.every((O,d)=>{if(typeof j=="number"||typeof j=="boolean")return !0;{let o=B(j._params),s=B(b._params);return o?.[d]===s?.[d]}}):!0})}function _(u){let g=a.value.get(u);if(g)return g;{let E=ref(!1),A=ref(!0),k=ref({}),V=ref(!1);return a.value.set(u,{$pending:E,$valid:A,$metadata:k,$validating:V}),{$pending:E,$valid:A,$metadata:k,$validating:V}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),l.value.clear();}),{addRuleDeclEntry:h,setDirtyEntry:i,checkRuleDeclEntry:y,getDirtyState:c,trySetRuleStatusRef:_,getFieldsEntry:m,getCollectionsEntry:x,getArrayStatus:S,addArrayStatus:F,deleteArrayStatus:$,arrayStatusStorage:l}}function je(e,t){return N(e.value)&&N(t.value)&&!Object.entries(t.value).some(r=>te(r))}function _e(e){return !!e.value&&"$each"in e.value}function ke(e){return !!e.value&&N(e.value)}function te(e){return N(e)&&"_validator"in e}function re(e){return typeof e.value!="function"}function ve(e){return N(e)&&"$fields"in e}function $e(e){return "$each"in e||"$errors"in e}function Se({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function Be({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:l,storage:m,$debounce:x}){let F=effectScope(),S,$,i=ref(!1),{$pending:c,$valid:h,$metadata:y,$validating:v}=m.trySetRuleStatusRef(`${l}.${n}`);function _(){S=F.run(()=>{let b=computed(()=>({$invalid:!h.value,$params:s.value,...y.value})),j=computed(()=>re(r)?typeof r.value.active=="function"?r.value.active(a.value,b.value):r.value.active:!0),O=computed(()=>{let f="",T=t?t[n]?.message:void 0;return T&&(typeof T=="function"?f=T(a.value,b.value):f=T),re(r)&&(T&&!r.value._patched||(typeof r.value.message=="function"?f=r.value.message(a.value,b.value):f=r.value.message)),L(f)&&(f="Error",console.warn(`No error message defined for ${l}.${n}`)),f}),d=computed(()=>re(r)&&r.value.type?r.value.type:n),o=computed(()=>re(r)?r.value.validator:r.value),s=computed(()=>typeof r.value=="function"?[]:B(r.value._params??[])),p=computed(()=>`${l}.${d.value}`);return {$active:j,$message:O,$type:d,$validator:o,$params:s,$path:p}}),$=watch(S.$params,A,{deep:!0});}_();function u(){h.value=!0,e.value&&(c.value=!0);}async function g(){let b=S.$validator.value,j=b(a.value,...S.$params.value),O=!1,d=a.value;try{u();let o;if(j instanceof Promise?o=await j:o=j,a.value!==d)return !0;if(typeof o=="boolean")O=o;else {let{$valid:s,...p}=o;O=s,y.value=p;}}catch{O=!1;}finally{c.value=!1;}return O}let E=ee(g,x??200);async function A(){v.value=!0;let b=!1;if(te(r.value)&&r.value._async)b=await E();else {let j=S.$validator.value,O=j(a.value,...S.$params.value);if(O instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(O!=null)if(typeof O=="boolean")b=O;else {let{$valid:d,...o}=O;b=d,y.value=o;}}return h.value=b,v.value=!1,b}function k(){h.value=!0,y.value={},c.value=!1,v.value=!1,_();}function V(){$(),F.stop(),F=effectScope();}return reactive({...S,$pending:c,$valid:h,$metadata:y,_haveAsync:i,$validating:v,$validate:A,$unwatch:V,$watch:_,$reset:k})}function oe({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:m,index:x,onUnwatch:F,$isArray:S}){let $=effectScope(),i,c=ref(!1),h=ref(!1),y=ref([]),v,_,u,g,E,A=()=>{};function k(){y.value=m.value??[];}k();function V(){let R=t.value,P=a.checkRuleDeclEntry(n,R);s.value=Object.fromEntries(Object.entries(R).filter(([I])=>I.startsWith("$"))),o.value=Object.fromEntries(Object.entries(t.value).filter(([I])=>!I.startsWith("$")).map(([I,w])=>{if(w){let ce=toRef(()=>w);return [I,Be({$dirty:c,customMessages:r,rule:ce,ruleKey:I,state:e,path:n,storage:a,$debounce:s.value.$debounce})]}return []}).filter(I=>!!I.length)),O(),b(),P?.valid!=null&&(c.value=a.getDirtyState(n),c.value&&A()),a.addRuleDeclEntry(n,R);}function b(){A=i.$debounce.value?ee(d,i.$debounce.value??i.haveAnyAsyncRule?100:0):d;}function j(){o.value&&Object.entries(o.value).forEach(([R,P])=>{P.$unwatch();}),g(),c.value&&a.setDirtyEntry(n,c.value),v(),_(),u(),$.stop(),$=effectScope(),F?.(),E?.();}function O(){o.value&&Object.entries(o.value).forEach(([R,P])=>{P.$watch();}),i=$.run(()=>{let R=computed(()=>c.value),P=computed(()=>s.value.$debounce),I=computed(()=>s.value.$lazy!=null?s.value.$lazy:unref(l.lazy)),w=computed(()=>s.value.$rewardEarly!=null?s.value.$rewardEarly:unref(l.rewardEarly)),ce=computed(()=>s.value.$autoDirty!=null?s.value.$autoDirty:unref(l.autoDirty)),Je=computed(()=>Object.entries(o.value).some(([Y,W])=>W.$validating)),Ie=computed(()=>le.value&&!fe.value&&c.value),Ye=computed(()=>Ie.value?Se({field:{$dirty:c.value,$externalErrors:y.value,$rules:o.value}}):[]),Qe=computed(()=>Se({field:{$dirty:c.value,$externalErrors:y.value,$rules:o.value},silent:!0})),Xe=computed(()=>!le.value&&!fe.value),fe=computed(()=>h.value||!w.value?Object.entries(o.value).some(([Y,W])=>W.$pending):!1),le=computed(()=>y.value?.length?!0:!w.value||w.value&&h.value?Object.entries(o.value).some(([Y,W])=>!W.$valid):!1),Pe=computed(()=>c.value&&!L(e.value)&&!Je.value?y.value?.length?!1:w.value?Object.entries(o.value).every(([Y,W])=>W.$valid):!le.value:!1),Ze=computed(()=>Object.entries(o.value).some(([Y,W])=>W._haveAsync));return watch(Pe,Y=>{Y&&(h.value=!1);}),{$error:Ie,$pending:fe,$invalid:le,$valid:Pe,$debounce:P,$lazy:I,$errors:Ye,$ready:Xe,$silentErrors:Qe,$rewardEarly:w,$autoDirty:ce,$anyDirty:R,haveAnyAsyncRule:Ze}}),u=watch(m,k),v=watch(e,()=>{i.$autoDirty.value&&(c.value||(c.value=!0)),t.value instanceof Function&&V(),A(),i.$rewardEarly.value;},{deep:S?!0:Q?1:!0}),g=watch(c,()=>{a.setDirtyEntry(n,c.value);}),_=watch(i.$valid,R=>{i.$rewardEarly.value&&R&&(h.value=!1);}),E=watch(i.haveAnyAsyncRule,b);}function d(){Object.entries(o.value).forEach(([R,P])=>{P.$validate();});}let o=ref(),s=ref();V();function p(){c.value=!1,y.value=[],Object.entries(o.value).forEach(([R,P])=>{P.$reset();}),i.$lazy.value||Object.entries(o.value).map(([R,P])=>P.$validate());}function f(){c.value||(c.value=!0,i.$rewardEarly.value,A());}let T=i.$debounce.value?ee(M,i.$debounce.value??0):M;async function M(){try{if(h.value=!0,i.$autoDirty.value&&c.value&&!i.$pending.value)return !i.$error.value;{let R=Object.entries(o.value).map(([I,w])=>w.$validate());return (await Promise.allSettled(R)).every(I=>I.status==="fulfilled"?I.value:!1)}}catch{return !1}}function D(R=!0){return c.value?e.value:null}function C(){y.value=[];}return i.$lazy.value||M(),reactive({$dirty:c,...i,$externalErrors:y,$value:e,$rules:o,$reset:p,$touch:f,$validate:T,$unwatch:j,$watch:O,$extractDirtyFields:D,$clearExternalErrors:C})}function Ue({$id:e,path:t,index:r,options:n,storage:a,stateValue:l,customMessages:m,rules:x,externalErrors:F}){let S=x.$key?x.$key:ye(),$=`${t}.${String(S)}`;typeof l.value=="object"&&l.value!=null&&(l.value.$id?$=`${t}.${l.value.$id}`:Object.defineProperties(l.value,{$id:{value:S,enumerable:!1,configurable:!1,writable:!1}}));let i=toRef(()=>F.value?.[r]),c=ie({state:l,rulesDef:toRef(()=>x),customMessages:m,path:$,storage:a,options:n,externalErrors:i});if(c){let h=l.value?.$id;c.$id=h??String(S),a.addArrayStatus(e,c.$id,c);}return c}function We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:m}){let x=effectScope(),F,S=effectScope(),$;if(Array.isArray(e.value)&&!t.value.$each)return null;let i=ref(),c=ref(e.value),h,y=ref({}),v=a.getCollectionsEntry(n);$=S.run(()=>{let d=computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(p=>typeof p!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(p=>te(p)):!1),o=computed(()=>m.value?$e(m.value)?m.value.$errors??[]:[]:[]),s=computed(()=>m.value?$e(m.value)?m.value.$each??[]:[]:[]);return {isPrimitiveArray:d,$externalErrorsField:o,$externalErrorsEach:s}}),_(),g();function _(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(i.value=ye(),Object.defineProperties(e.value,{$id:{value:i.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(i.value=e.value.$id)),!$.isPrimitiveArray.value&&(c.value=y.value.$value,Array.isArray(e.value)&&t.value.$each?v.value=e.value.map((d,o)=>{let s=me(t.value.$each,toRef(()=>d),o);if(s){let p=Ue({$id:i.value,path:n,rules:s,stateValue:toRef(()=>d),index:o,options:l,storage:a,externalErrors:$.$externalErrorsEach});return p||null}}).filter(d=>!!d):v.value=[],y.value=oe({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:$.$externalErrorsField,$isArray:!0}));}function u(){if(Array.isArray(e.value)){let d=q(v.value);v.value=e.value.map((o,s)=>{let p=toRef(()=>o);if(o.$id&&v.value.find(f=>f.$id===o.$id)){let f=a.getArrayStatus(i.value,o.$id);return f?(f.$value=p,f):null}else {let f=me(t.value.$each,p,s);if(f){let T=Ue({$id:i.value,path:n,rules:f,stateValue:p,index:s,options:l,storage:a,externalErrors:$.$externalErrorsEach});return T||null}}}).filter(o=>!!o),d.filter(o=>!e.value.find(s=>o.$id===s.$id)).forEach((o,s)=>{a.deleteArrayStatus(i.value,s.toString());});}else v.value=[];}function g(){h=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?_():u();},{deep:Q?1:!0,flush:"pre"}),F=x.run(()=>{let d=computed(()=>y.value.$dirty&&v.value.every(R=>R.$dirty)),o=computed(()=>y.value.$anyDirty||v.value.some(R=>R.$dirty)),s=computed(()=>y.value.$invalid||v.value.some(R=>R.$invalid)),p=computed(()=>y.value.$valid&&v.value.every(R=>R.$valid)),f=computed(()=>y.value.$error||v.value.some(R=>R.$error)),T=computed(()=>!s.value&&!M.value),M=computed(()=>y.value.$pending||v.value.some(R=>R.$pending)),D=computed(()=>({$errors:y.value.$errors,$each:v.value.map(R=>R.$errors)})),C=computed(()=>({$errors:y.value.$silentErrors,$each:v.value.map(R=>R.$silentErrors)}));return {$dirty:d,$anyDirty:o,$invalid:s,$valid:p,$error:f,$pending:M,$errors:D,$silentErrors:C,$ready:T}}),$.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),h());}function E(){h&&h(),y.value&&y.value.$unwatch(),v.value&&v.value.forEach(d=>{"$dirty"in d&&d.$unwatch();}),x.stop(),x=effectScope(),S.stop(),S=effectScope(!0);}function A(){y.value.$touch(),v.value.forEach(d=>{d.$touch();});}function k(){y.value.$reset(),v.value.forEach(d=>{d.$reset();});}async function V(){try{return (await Promise.all([y.value.$validate(),...v.value.map(o=>o.$validate())])).every(o=>!!o)}catch{return !1}}function b(){y.value.$clearExternalErrors(),v.value.forEach(d=>{d.$clearExternalErrors();});}function j(d=!0){let o=v.value.map(s=>{if(ve(s))return s.$extractDirtyFields(d)});return d&&(o=o.filter(s=>N(s)?!L(s):!!s)),o}async function O(){return A(),await V()?e.value:!1}return reactive({$field:y,...F,$each:v,$value:e,$validate:V,$unwatch:E,$watch:g,$touch:A,$reset:k,$extractDirtyFields:j,$parse:O,$clearExternalErrors:b})}function xe({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:l,options:m,externalErrors:x,validationGroups:F,initialState:S,processedState:$}){let i,c,h=null;function _(s=!0,p=!1){u.value=null,triggerRef(u);let f=Object.fromEntries(Object.entries(e.value).map(([D,C])=>{if(C){let R=toRef(t.value,D),P=toRef(()=>C),I=toRef(()=>x.value?.[D]);return [D,ie({state:R,rulesDef:P,customMessages:r,path:n?`${n}.${D}`:D,storage:l,options:m,externalErrors:I})]}return []}).filter(D=>!!D.length&&D[1]!=null)),T=Object.fromEntries(Object.entries(unref(x)??{}).filter(([D])=>!(D in e.value)).map(([D,C])=>{if(C){let R=toRef(()=>({})),P=toRef(()=>C);return [D,ie({state:ref(void 0),rulesDef:R,customMessages:r,path:n?`${n}.${D}`:D,storage:l,options:m,externalErrors:P})]}return []})),M=Object.fromEntries(Object.entries(F?.(f)??{}).map(([D,C])=>C.length?[D,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(R=>[R,Oe(toRef(()=>C),R)])),...Object.fromEntries(["$errors","$silentErrors"].map(R=>[R,Ae(toRef(()=>C),R)]))}]:[]));u.value={...f,...T,...M},s&&k();}let u=l.getFieldsEntry(n);_();function g(){_(!1),Object.entries(u.value).forEach(([s,p])=>{p.$reset();}),k();}function E(){Object.entries(u.value).forEach(([s,p])=>{p.$touch();});}async function A(){try{return (await Promise.allSettled(Object.entries(u.value).map(([p,f])=>f.$validate()))).every(p=>p.status==="fulfilled"?p.value:!1)}catch{return !1}}function k(){a&&(h=watch(a,()=>{V(),_();},{deep:Q?1:!0,flush:"post"})),i=effectScope(),c=i.run(()=>{let s=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([I,w])=>w.$dirty)),p=computed(()=>Object.entries(u.value).some(([I,w])=>w.$dirty)),f=computed(()=>Object.entries(u.value).some(([I,w])=>w.$invalid)),T=computed(()=>Object.entries(u.value).every(([I,w])=>w.$valid)),M=computed(()=>s.value&&!C.value&&f.value),D=computed(()=>!f.value&&!C.value),C=computed(()=>Object.entries(u.value).some(([I,w])=>w.$pending)),R=computed(()=>Object.fromEntries(Object.entries(u.value).map(([I,w])=>[I,w.$errors]))),P=computed(()=>Object.fromEntries(Object.entries(u.value).map(([I,w])=>[I,w.$silentErrors])));return {$dirty:s,$anyDirty:p,$invalid:f,$valid:T,$error:M,$pending:C,$errors:R,$silentErrors:P,$ready:D}});}function V(){u.value&&Object.entries(u.value).forEach(([s,p])=>{p.$unwatch();}),h?.(),i.stop(),i=effectScope();}function b(){Object.entries(u.value).forEach(([s,p])=>{p.$clearExternalErrors();});}function j(){S&&(V(),O(t,S),g());}function O(s,p){Object.entries(p).forEach(([f,T])=>{let M=isRef(s)?s.value:s,D=isRef(M[f])?M[f].value:M[f],C=isRef(p[f])?p[f]._value:p[f];Array.isArray(C)&&Array.isArray(D)?(M[f]=[],C.forEach((R,P)=>{M[f][P]={},O(M[f][P],C[P]);})):N(C)?O(D,C):isRef(M[f])?M[f].value=C:M[f]=C;});}function d(s=!0){let p=Object.entries(u.value).map(([f,T])=>[f,T.$extractDirtyFields(s)]);return s&&(p=p.filter(([f,T])=>N(T)?!L(T):Array.isArray(T)?T.length:!!T)),Object.fromEntries(p)}async function o(){return E(),await A()?t.value:!1}return reactive({...c,$fields:u,$value:t,...S&&{$resetAll:j},$reset:g,$touch:E,$validate:A,$unwatch:V,$watch:k,$clearExternalErrors:b,$extractDirtyFields:d,$parse:o})}function ie({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:m,index:x,onUnwatch:F}){return _e(t)?We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:x,externalErrors:m}):je(e,t)&&Ve(e)?xe({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:l,index:x,externalErrors:m}):ke(t)?oe({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:x,externalErrors:m,onUnwatch:F}):null}function he(e,t,r,n,a,l){let m=ge(),x=computed(()=>unref(r.externalErrors));return reactive(xe({rootRules:e,scopeRules:e,state:t,customMessages:l?.(),storage:m,options:r,externalErrors:x,validationGroups:r.validationGroups,processedState:n,initialState:a}))}function Te(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,l,m){let x=isRef(l)?l:computed(typeof l=="function"?l:()=>l),F={...r,...m},S=isRef(a)?a:ref(a),$=q(toRaw(S.value));return {r$:he(x,S,F,S,$,e)}}return n}var Le=Te();function De(){function e(t,r){return r}return e}var Ce=De();function ze({rules:e,modifiers:t}){let r=Te(e,t),n=De();return {useRegle:r,inferRules:n}}export{Re as InternalRuleType,de as createRule,ze as defineRegleConfig,Ce as inferRules,B as unwrapRuleParameters,Le as useRegle};
|
package/package.json
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@regle/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "Typescript-first model-based form validation library for Vue 3",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"vue": "^3.1.0"
|
|
7
7
|
},
|
|
8
8
|
"devDependencies": {
|
|
9
9
|
"@total-typescript/ts-reset": "0.6.1",
|
|
10
|
-
"@types/node": "22.9.
|
|
11
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
12
|
-
"@typescript-eslint/parser": "8.
|
|
10
|
+
"@types/node": "22.9.3",
|
|
11
|
+
"@typescript-eslint/eslint-plugin": "8.15.0",
|
|
12
|
+
"@typescript-eslint/parser": "8.15.0",
|
|
13
13
|
"@vue/test-utils": "2.4.6",
|
|
14
14
|
"bumpp": "9.8.1",
|
|
15
15
|
"changelogithub": "0.13.11",
|
|
16
16
|
"cross-env": "7.0.3",
|
|
17
|
-
"eslint": "9.
|
|
17
|
+
"eslint": "9.15.0",
|
|
18
18
|
"eslint-config-prettier": "9.1.0",
|
|
19
|
-
"eslint-plugin-vue": "9.
|
|
19
|
+
"eslint-plugin-vue": "9.31.0",
|
|
20
20
|
"prettier": "3.3.3",
|
|
21
21
|
"tsup": "8.3.5",
|
|
22
|
-
"type-fest": "4.
|
|
22
|
+
"type-fest": "4.28.0",
|
|
23
23
|
"typescript": "5.6.3",
|
|
24
|
-
"vitest": "2.1.
|
|
25
|
-
"vue": "3.5.
|
|
24
|
+
"vitest": "2.1.5",
|
|
25
|
+
"vue": "3.5.13",
|
|
26
26
|
"vue-eslint-parser": "9.4.3",
|
|
27
27
|
"vue-tsc": "2.1.10"
|
|
28
28
|
},
|