@regle/core 0.1.8 → 0.1.10
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 +97 -17
- package/dist/index.d.ts +97 -17
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var vue=require('vue');function F(e){return e.map(t=>t instanceof Function?t():vue.unref(t))}function Ce(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function Ie(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(o=>o.trim()).filter(o=>o.includes("=")).length+e.length}function ue(e,...t){let{message:r,validator:n,active:a,...o}=e,m=n.constructor.name==="AsyncFunction";return {...{validator(v,...s){return e.validator(v,...F(s.length?s:t))},message(v,s){return typeof e.message=="function"?e.message(v,{...s,$params:F(s.$params?.length?s.$params:t)}):e.message},active(v,s){return typeof e.active=="function"?e.active(v,{...s,$params:F(s.$params?.length?s.$params:t)}):e.active??!0},exec(v){let s=e.validator(v,...F(t)),l;return s instanceof Promise?s.then(x=>(l=x,typeof l=="object"&&"$valid"in l?l.$valid:typeof l=="boolean"?l:!1)):(l=s,typeof l=="object"&&"$valid"in l?l.$valid:typeof l=="boolean"?l:!1)}},...o,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:m,_params:Ce(t)}}function ce(e){if(typeof e.validator=="function"){let r=ue(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Ie(e.validator)>1){let a=function(...o){return ue(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function De(e){return k(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,Ke(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=B(e[n]);}return t}function Ke(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 fe(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=(...o)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(m);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(m);},0);}),a}function tt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),m=Number(n[a]);if(o>m)return 1;if(m>o)return -1;if(!isNaN(o)&&isNaN(m))return 1;if(isNaN(o)&&!isNaN(m))return -1}return 0}var U=tt(vue.version,"3.5.0")!==-1;function rt(){return Math.floor(Math.random()*Date.now()).toString()}function Re(){return typeof window>"u"?rt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function pe(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),a=vue.shallowRef(new Map),o=vue.shallowRef(new Map);function m(p){let R=t.value.get(p);if(R)return R;{let d=vue.ref({});return t.value.set(p,d),d}}function D(p){let R=r.value.get(p);if(R)return R;{let d=vue.ref([]);return r.value.set(p,d),d}}function P(p,R,d){o.value.set(`${p}-${R}`,d);}function v(p,R){return o.value.get(`${p}-${R}`)}function s(p,R){p&&R!=null&&o.value.delete(`${p}-${R}`);}function l(p,R){n.value.set(p,R);}function x(p){return n.value.get(p)??!1}function h(p,R){e.value.set(p,R);}function S(p,R){let d=e.value.get(p);return d?u(R,d)?{valid:!0}:{valid:!1}:void 0}function u(p,R){let d=Object.keys(R),w=Object.keys(p);return w.length!==d.length||!w.every(g=>d.includes(g))?!1:w.every(g=>{let c=p[g],i=R[g];return !i||!c||typeof c=="function"||typeof i=="function"||typeof c=="number"||typeof c=="boolean"?!1:c._params?c._params?.every((f,I)=>{if(typeof i=="number"||typeof i=="boolean")return !0;{let $=F(i._params),y=F(c._params);return $?.[I]===y?.[I]}}):!0})}function A(p){let R=a.value.get(p);if(R)return R;{let d=vue.ref(!1),w=vue.ref(!0),b=vue.ref({}),g=vue.ref(!1);return a.value.set(p,{$pending:d,$valid:w,$metadata:b,$validating:g}),{$pending:d,$valid:w,$metadata:b,$validating:g}}}return vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:h,setDirtyEntry:l,checkRuleDeclEntry:S,getDirtyState:x,trySetRuleStatusRef:A,getFieldsEntry:m,getCollectionsEntry:D,getArrayStatus:v,addArrayStatus:P,deleteArrayStatus:s,arrayStatusStorage:o}}function Pe(e,t){return k(e.value)&&k(t.value)&&!Object.entries(t.value).some(r=>de(r))}function we(e){return !!e.value&&"$each"in e.value}function Oe(e){return !!e.value&&k(e.value)}function de(e){return k(e)&&"_validator"in e}function Y(e){return typeof e.value!="function"}function me(e){return k(e)&&"$fields"in e}function ge(e){return !!e&&"$each"in e}function ve(e){return !!e&&"$rules"in e}function $e(e){return "$each"in e||"$errors"in e}function G({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 Ae(e,t=!1){return me(e)?L(e.$fields):ge(e)?{$errors:e.$field.$rules?G({field:e.$field,silent:t}):[],$each:e.$each.map(r=>Ae(r,t))}:ve(e)?e.$error?G({field:e,silent:t}):e.$externalErrors??[]:[]}function ne(e,t=!1){return e.map(r=>Ae(r,t))}function L(e,t=!1){return Object.fromEntries(Object.entries(e).map(([r,n])=>me(n)?[r,L(n.$fields,t)]:ge(n)?[r,{$errors:G({field:n.$field,silent:t}),$each:ne(n.$each,t)}]:ve(n)?n.$error?[r,G({field:n,silent:t})]:[r,n.$externalErrors??[]]:[r,[]]))}function Me(e){return vue.computed(()=>L(e.$fields))}var Fe=(r=>(r.Inline="__inline",r.Async="__async",r))(Fe||{});function je(e,t){return vue.computed(()=>e.value.some(r=>r[t]))}function _e(e,t){return vue.computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function Ge({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:m,$debounce:D}){let P=vue.effectScope(),v,s,{$pending:l,$valid:x,$metadata:h,$validating:S}=m.trySetRuleStatusRef(`${o}.${n}`);function u(){v=P.run(()=>{let b=vue.computed(()=>({$invalid:!x.value,$params:I.value,...h.value})),g=vue.computed(()=>Y(r)?typeof r.value.active=="function"?r.value.active(a.value,b.value):r.value.active:!0),c=vue.computed(()=>{let y="",T=t?t[n]?.message:void 0;return T&&(typeof T=="function"?y=T(a.value,b.value):y=T),Y(r)&&(T&&!r.value._patched||(typeof r.value.message=="function"?y=r.value.message(a.value,b.value):y=r.value.message)),re(y)&&(y="Error",console.warn(`No error message defined for ${o}.${n}`)),y}),i=vue.computed(()=>Y(r)&&r.value.type?r.value.type:n),f=vue.computed(()=>Y(r)?r.value.validator:r.value),I=vue.computed(()=>typeof r.value=="function"?[]:F(r.value._params??[])),$=vue.computed(()=>`${o}.${i.value}`);return {$active:g,$message:c,$type:i,$validator:f,$params:I,$path:$}}),s=vue.watch(v.$params,R,{deep:!0});}u();async function A(b){let g=!1;try{x.value=!0,e.value&&(l.value=!0);let c=await b;if(typeof c=="boolean")g=c;else {let{$valid:i,...f}=c;g=i,h.value=f;}}catch{g=!1;}finally{l.value=!1;}return g}let p=X(A,D??100);async function R(){S.value=!0;let b=v.$validator.value,g=!1,c=b(a.value,...v.$params.value);if(c instanceof Promise)g=await p(c);else if(c!=null)if(typeof c=="boolean")g=c;else {let{$valid:i,...f}=c;g=i,h.value=f;}return x.value=g,S.value=!1,g}function d(){x.value=!0,h.value={},l.value=!1,S.value=!1,u();}function w(){s(),P.stop(),P=vue.effectScope();}return vue.reactive({...v,$pending:l,$valid:x,$metadata:h,$validate:R,$unwatch:w,$watch:u,$reset:d})}function ae({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:D,onUnwatch:P}){let v=vue.effectScope(),s,l=vue.ref(!1),x=vue.ref(!1),h=vue.ref([]),S,u,A,p,R=()=>{};function d(){h.value=m.value??[];}d();function w(){let E=t.value,C=a.checkRuleDeclEntry(n,E);f.value=Object.fromEntries(Object.entries(E).filter(([O])=>O.startsWith("$"))),i.value=Object.fromEntries(Object.entries(t.value).filter(([O])=>!O.startsWith("$")).map(([O,_])=>{if(_){let ie=vue.toRef(()=>_);return [O,Ge({$dirty:l,customMessages:r,rule:ie,ruleKey:O,state:e,path:n,storage:a,$debounce:f.value.$debounce})]}return []}).filter(O=>!!O.length)),g(),R=s.$debounce.value?X(c,s.$debounce.value??0):c,C?.valid!=null&&(l.value=a.getDirtyState(n),l.value&&R()),a.addRuleDeclEntry(n,E);}function b(){i.value&&Object.entries(i.value).forEach(([E,C])=>{C.$unwatch();}),p(),l.value&&a.setDirtyEntry(n,l.value),S(),u(),A(),v.stop(),v=vue.effectScope(),P?.();}function g(){i.value&&Object.entries(i.value).forEach(([E,C])=>{C.$watch();}),s=v.run(()=>{let E=vue.computed(()=>l.value),C=vue.computed(()=>f.value.$debounce),O=vue.computed(()=>f.value.$lazy!=null?f.value.$lazy:vue.unref(o.lazy)),_=vue.computed(()=>f.value.$rewardEarly!=null?f.value.$rewardEarly:vue.unref(o.rewardEarly)),ie=vue.computed(()=>f.value.$autoDirty!=null?f.value.$autoDirty:vue.unref(o.autoDirty)),Le=vue.computed(()=>se.value&&!he.value&&l.value),Je=vue.computed(()=>G({field:{$dirty:l.value,$externalErrors:h.value,$rules:i.value}})),Qe=vue.computed(()=>G({field:{$dirty:l.value,$externalErrors:h.value,$rules:i.value},silent:!0})),he=vue.computed(()=>x.value||!_.value?Object.entries(i.value).some(([te,Q])=>Q.$pending):!1),se=vue.computed(()=>h.value?.length?!0:!_.value||_.value&&x.value?Object.entries(i.value).some(([te,Q])=>!Q.$valid):!1),Te=vue.computed(()=>l.value&&!re(e.value)?h.value?.length?!1:_.value?Object.entries(i.value).every(([te,Q])=>Q.$valid):!se.value:!1);return vue.watch(Te,te=>{te&&(x.value=!1);}),{$error:Le,$pending:he,$invalid:se,$valid:Te,$debounce:C,$lazy:O,$errors:Je,$silentErrors:Qe,$rewardEarly:_,$autoDirty:ie,$anyDirty:E}}),A=vue.watch(m,d),S=vue.watch(e,()=>{s.$autoDirty.value&&(l.value||(l.value=!0)),t.value instanceof Function&&w(),R(),s.$rewardEarly.value;},{deep:U?1:!0}),p=vue.watch(l,()=>{a.setDirtyEntry(n,l.value);}),u=vue.watch(s.$valid,E=>{s.$rewardEarly.value&&E&&(x.value=!1);});}function c(){Object.entries(i.value).forEach(([E,C])=>{C.$validate();});}let i=vue.ref(),f=vue.ref();w();function I(){l.value=!1,h.value=[],Object.entries(i.value).forEach(([E,C])=>{C.$reset();}),s.$lazy.value||Object.entries(i.value).map(([E,C])=>C.$validate());}function $(){l.value||(l.value=!0,s.$rewardEarly.value,R());}let y=s.$debounce.value?X(T,s.$debounce.value??0):T;async function T(){try{if(x.value=!0,s.$autoDirty.value&&l.value&&!s.$pending.value)return !s.$error.value;{let E=Object.entries(i.value).map(([O,_])=>_.$validate());return (await Promise.allSettled(E)).every(O=>O.status==="fulfilled"?O.value:!1)}}catch{return !1}}function M(){h.value=[];}return s.$lazy.value||T(),vue.reactive({$dirty:l,...s,$externalErrors:h,$value:e,$rules:i,$reset:I,$touch:$,$validate:y,$unwatch:b,$watch:g,$clearExternalErrors:M})}function Ne({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:m,rules:D,externalErrors:P}){let v=D.$key?D.$key:Re(),s=`${t}.${String(v)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?s=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:v,enumerable:!1,configurable:!1,writable:!1}}));let l=vue.toRef(()=>P.value?.[r]),x=oe({state:o,rulesDef:vue.toRef(()=>D),customMessages:m,path:s,storage:a,options:n,externalErrors:l});if(x){let h=o.value?.$id;x.$id=h??String(v),a.addArrayStatus(e,x.$id,x);}return x}function We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m}){let D=vue.effectScope(),P,v=vue.effectScope(),s;if(Array.isArray(e.value)&&!t.value.$each)return null;let l=vue.ref(),x=vue.ref(e.value),h=null,S=vue.ref({}),u=a.getCollectionsEntry(n);s=v.run(()=>{let i=vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some($=>typeof $!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every($=>de($)):!1),f=vue.computed(()=>m.value?$e(m.value)?m.value.$errors??[]:[]:[]),I=vue.computed(()=>m.value?$e(m.value)?m.value.$each??[]:[]:[]);return {isPrimitiveArray:i,$externalErrorsField:f,$externalErrorsEach:I}}),A(),R();function A(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(l.value=Re(),Object.defineProperties(e.value,{$id:{value:l.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(l.value=e.value.$id)),!s.isPrimitiveArray.value&&(x.value=S.value.$value,Array.isArray(e.value)&&t.value.$each?u.value=e.value.map((i,f)=>{let I=fe(t.value.$each,vue.toRef(()=>i),f);if(I){let $=Ne({$id:l.value,path:n,rules:I,stateValue:vue.toRef(()=>i),index:f,options:o,storage:a,externalErrors:s.$externalErrorsEach});return $||null}}).filter(i=>!!i):u.value=[],S.value=ae({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:s.$externalErrorsField}));}function p(){if(Array.isArray(e.value)){let i=B(u.value);u.value=e.value.map((f,I)=>{let $=vue.toRef(()=>f);if(f.$id&&u.value.find(y=>y.$id===f.$id)){let y=a.getArrayStatus(l.value,f.$id);return y?(y.$value=$,y):null}else {let y=fe(t.value.$each,$,I);if(y){let T=Ne({$id:l.value,path:n,rules:y,stateValue:$,index:I,options:o,storage:a,externalErrors:s.$externalErrorsEach});return T||null}}}).filter(f=>!!f),i.filter(f=>!e.value.find(I=>f.$id===I.$id)).forEach((f,I)=>{a.deleteArrayStatus(l.value,I.toString());});}else u.value=[];}function R(){h=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?A():p();},{deep:U?1:!0,flush:"pre"}),P=D.run(()=>{let i=vue.computed(()=>S.value.$dirty&&u.value.every(C=>C.$dirty)),f=vue.computed(()=>S.value.$anyDirty||u.value.some(C=>C.$dirty)),I=vue.computed(()=>S.value.$invalid||u.value.some(C=>C.$invalid)),$=vue.computed(()=>S.value.$valid&&u.value.every(C=>C.$valid)),y=vue.computed(()=>S.value.$error||u.value.some(C=>C.$error)),T=vue.computed(()=>S.value.$pending||u.value.some(C=>C.$pending)),M=vue.computed(()=>({$errors:G({field:S.value,silent:!1}),$each:ne(u.value)})),E=vue.computed(()=>({$errors:G({field:S.value,silent:!0}),$each:ne(u.value,!0)}));return {$dirty:i,$anyDirty:f,$invalid:I,$valid:$,$error:y,$pending:T,$errors:M,$silentErrors:E}}),s.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 d(){h&&h(),S.value&&S.value.$unwatch(),u.value&&u.value.forEach(i=>{"$dirty"in i&&i.$unwatch();}),D.stop(),D=vue.effectScope(),v.stop(),v=vue.effectScope(!0);}function w(){S.value.$touch(),u.value.forEach(i=>{i.$touch();});}function b(){S.value.$reset(),u.value.forEach(i=>{i.$reset();});}async function g(){try{return (await Promise.all([S.value.$validate(),...u.value.map(f=>f.$validate())])).every(f=>!!f)}catch{return !1}}function c(){}return vue.reactive({$field:S,...P,$each:u,$value:e,$validate:g,$unwatch:d,$watch:R,$touch:w,$reset:b,$clearExternalErrors:c})}function Ee({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:m,externalErrors:D,validationGroups:P}){let v,s,l;function S(g=!0,c=!1){u.value=null,vue.triggerRef(u);let i=Object.fromEntries(Object.entries(e.value).map(([$,y])=>{if(y){let T=vue.toRef(t.value,$),M=vue.toRef(()=>y),E=vue.toRef(()=>D.value?.[$]);return [$,oe({state:T,rulesDef:M,customMessages:r,path:n?`${n}.${$}`:$,storage:o,options:m,externalErrors:E})]}return []}).filter($=>!!$.length&&$[1]!=null)),f=Object.fromEntries(Object.entries(vue.unref(D)??{}).filter(([$])=>!($ in e.value)).map(([$,y])=>{if(y){let T=vue.toRef(()=>({})),M=vue.toRef(()=>y);return [$,oe({state:vue.ref(void 0),rulesDef:T,customMessages:r,path:n?`${n}.${$}`:$,storage:o,options:m,externalErrors:M})]}return []})),I=Object.fromEntries(Object.entries(P?.(i)??{}).map(([$,y])=>y.length?[$,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(T=>[T,je(vue.toRef(()=>y),T)])),...Object.fromEntries(["$errors","$silentErrors"].map(T=>[T,_e(vue.toRef(()=>y),T)]))}]:[]));u.value={...i,...f,...I},g&&d();}let u=o.getFieldsEntry(n);S();function A(){S(!1),Object.entries(u.value).forEach(([g,c])=>{c.$reset();}),d();}function p(){Object.entries(u.value).forEach(([g,c])=>{c.$touch();});}async function R(){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 d(){a&&(l=vue.watch(a,()=>{w(),S();},{deep:U?1:!0,flush:"post"})),v=vue.effectScope(),s=v.run(()=>{let g=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([M,E])=>E.$dirty)),c=vue.computed(()=>Object.entries(u.value).some(([M,E])=>E.$dirty)),i=vue.computed(()=>Object.entries(u.value).some(([M,E])=>E.$invalid)),f=vue.computed(()=>Object.entries(u.value).every(([M,E])=>E.$valid)),I=vue.computed(()=>Object.entries(u.value).some(([M,E])=>E.$error)),$=vue.computed(()=>Object.entries(u.value).some(([M,E])=>E.$pending)),y=vue.computed(()=>L(u.value)),T=vue.computed(()=>L(u.value,!0));return {$dirty:g,$anyDirty:c,$invalid:i,$valid:f,$error:I,$pending:$,$errors:y,$silentErrors:T}});}function w(){u.value&&Object.entries(u.value).forEach(([g,c])=>{c.$unwatch();}),l?.(),v.stop(),v=vue.effectScope();}function b(){Object.entries(u.value).forEach(([g,c])=>{c.$clearExternalErrors();});}return vue.reactive({...s,$fields:u,$value:t,$reset:A,$touch:p,$validate:R,$unwatch:w,$watch:d,$clearExternalErrors:b})}function oe({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:D,onUnwatch:P}){return we(t)?We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:D,externalErrors:m}):Pe(e,t)&&De(e)?Ee({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:D,externalErrors:m}):Oe(t)?ae({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:D,externalErrors:m,onUnwatch:P}):null}function be(e,t,r,n){let a=pe(),o=vue.computed(()=>vue.unref(r.externalErrors)),m=vue.reactive(Ee({rootRules:e,scopeRules:e,state:t,customMessages:n?.(),storage:a,options:r,externalErrors:o,validationGroups:r.validationGroups})),D=Me(m);return {regle:m,errors:D}}function xe(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,o,m){let D=vue.isRef(o)?o:vue.computed(typeof o=="function"?o:()=>o),P={...r,...m},v=vue.isRef(a)?a:vue.ref(a),s=B(vue.toRaw(v.value)),{regle:l,errors:x}=be(D,v,P,e);function h(){l.$unwatch(),S(a,s),l.$reset();}function S(p,R){Object.entries(R).forEach(([d,w])=>{let b=vue.isRef(p)?p.value:p,g=vue.isRef(b[d])?b[d].value:b[d],c=vue.isRef(R[d])?R[d]._value:R[d];Array.isArray(c)&&Array.isArray(g)?(b[d]=[],c.forEach((i,f)=>{b[d][f]={},S(b[d][f],c[f]);})):k(c)?S(g,c):vue.isRef(b[d])?b[d].value=c:b[d]=c;});}let u=vue.computed(()=>!(l.$invalid||l.$pending));async function A(){return l.$touch(),await l.$validate()?v.value:!1}return {regle:l,r$:l,errors:x,resetAll:h,validateState:A,ready:u,state:v}}return n}var He=xe();function ze({rules:e,modifiers:t}){return xe(e,t)}exports.InternalRuleType=Fe;exports.createRule=ce;exports.defineRegleConfig=ze;exports.unwrapRuleParameters=F;exports.useRegle=He;
|
|
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;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { MaybeRef, Ref, ComputedRef, UnwrapNestedRefs } from 'vue';
|
|
1
|
+
import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, ComputedRef } from 'vue';
|
|
3
2
|
|
|
3
|
+
type Prettify<T> = T extends infer R ? {
|
|
4
|
+
[K in keyof R]: R[K];
|
|
5
|
+
} & {} : never;
|
|
4
6
|
type Maybe<T = any> = T | null | undefined;
|
|
5
|
-
type MaybeGetter<T, V = any> = T | ((value: Ref<V>, index: number) => T);
|
|
6
|
-
type
|
|
7
|
+
type MaybeGetter<T, V = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V>, index: number) => T & TAdd);
|
|
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 MaybeGetter<infer U, any, any> ? U : never;
|
|
7
10
|
type DeepMaybeRef<T extends Record<string, any>> = {
|
|
8
11
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
9
12
|
};
|
|
@@ -11,6 +14,7 @@ type ExcludeByType<T, U> = {
|
|
|
11
14
|
[K in keyof T as T[K] extends U ? never : K]: T[K] extends U ? never : T[K];
|
|
12
15
|
};
|
|
13
16
|
type NonPresentKeys<TSource extends Record<string, any>, Target extends Record<string, any>> = Omit<Target, keyof TSource>;
|
|
17
|
+
type NoInferLegacy<A extends any> = [A][A extends any ? 0 : never];
|
|
14
18
|
|
|
15
19
|
type ArrayElement<T> = T extends Array<infer U> ? U : never;
|
|
16
20
|
|
|
@@ -51,6 +55,68 @@ Unfortunately, `Record<string, never>`, `Record<keyof any, never>` and `Record<n
|
|
|
51
55
|
*/
|
|
52
56
|
type EmptyObject = {[emptyObjectSymbol]?: never};
|
|
53
57
|
|
|
58
|
+
/**
|
|
59
|
+
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
|
+
|
|
61
|
+
Inspired by [this Stack Overflow answer](https://stackoverflow.com/a/50375286/2172153).
|
|
62
|
+
|
|
63
|
+
@example
|
|
64
|
+
```
|
|
65
|
+
import type {UnionToIntersection} from 'type-fest';
|
|
66
|
+
|
|
67
|
+
type Union = {the(): void} | {great(arg: string): void} | {escape: boolean};
|
|
68
|
+
|
|
69
|
+
type Intersection = UnionToIntersection<Union>;
|
|
70
|
+
//=> {the(): void; great(arg: string): void; escape: boolean};
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
A more applicable example which could make its way into your library code follows.
|
|
74
|
+
|
|
75
|
+
@example
|
|
76
|
+
```
|
|
77
|
+
import type {UnionToIntersection} from 'type-fest';
|
|
78
|
+
|
|
79
|
+
class CommandOne {
|
|
80
|
+
commands: {
|
|
81
|
+
a1: () => undefined,
|
|
82
|
+
b1: () => undefined,
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
class CommandTwo {
|
|
87
|
+
commands: {
|
|
88
|
+
a2: (argA: string) => undefined,
|
|
89
|
+
b2: (argB: string) => undefined,
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const union = [new CommandOne(), new CommandTwo()].map(instance => instance.commands);
|
|
94
|
+
type Union = typeof union;
|
|
95
|
+
//=> {a1(): void; b1(): void} | {a2(argA: string): void; b2(argB: string): void}
|
|
96
|
+
|
|
97
|
+
type Intersection = UnionToIntersection<Union>;
|
|
98
|
+
//=> {a1(): void; b1(): void; a2(argA: string): void; b2(argB: string): void}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
@category Type
|
|
102
|
+
*/
|
|
103
|
+
type UnionToIntersection<Union> = (
|
|
104
|
+
// `extends unknown` is always going to be the case and is used to convert the
|
|
105
|
+
// `Union` into a [distributive conditional
|
|
106
|
+
// type](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#distributive-conditional-types).
|
|
107
|
+
Union extends unknown
|
|
108
|
+
// The union type is used as the only argument to a function since the union
|
|
109
|
+
// of function arguments is an intersection.
|
|
110
|
+
? (distributedUnion: Union) => void
|
|
111
|
+
// This won't happen.
|
|
112
|
+
: never
|
|
113
|
+
// Infer the `Intersection` type since TypeScript represents the positional
|
|
114
|
+
// arguments of unions of functions as an intersection of the union.
|
|
115
|
+
) extends ((mergedIntersection: infer Intersection) => void)
|
|
116
|
+
// The `& Union` is to allow indexing by the resulting type
|
|
117
|
+
? Intersection & Union
|
|
118
|
+
: never;
|
|
119
|
+
|
|
54
120
|
interface RegleBehaviourOptions {
|
|
55
121
|
/**
|
|
56
122
|
* Only display error when calling `validateState()`
|
|
@@ -100,9 +166,13 @@ interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends
|
|
|
100
166
|
errors: RegleErrorTree<TRules, TExternal>;
|
|
101
167
|
ready: ComputedRef<boolean>;
|
|
102
168
|
resetAll: () => void;
|
|
103
|
-
validateState: () => Promise<false | DeepSafeFormState<TState, TRules
|
|
169
|
+
validateState: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
|
|
104
170
|
state: Ref<TState>;
|
|
105
171
|
}
|
|
172
|
+
type isDeepExact<T, U> = {
|
|
173
|
+
[K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
|
|
174
|
+
}[keyof T] extends true ? true : false;
|
|
175
|
+
type CheckDeepExact<T, U> = [U] extends [never] ? false : T extends RegleCollectionRuleDecl ? U extends RegleCollectionRuleDecl ? isDeepExact<NonNullable<T['$each']>, UnionToIntersection<NonNullable<U['$each']>>> : T extends RegleRuleDecl ? true : T extends ReglePartialValidationTree<any> ? isDeepExact<T, U> : false : T extends RegleRuleDecl ? true : T extends ReglePartialValidationTree<any> ? isDeepExact<T, U> : false;
|
|
106
176
|
type DeepReactiveState<T extends Record<string, any>> = {
|
|
107
177
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
108
178
|
};
|
|
@@ -200,9 +270,9 @@ type RegleRuleDefinitionProcessor<TValue extends any = any, TParams extends any[
|
|
|
200
270
|
type RegleRuleDefinitionWithMetadataProcessor<TValue extends any, TMetadata extends RegleRuleMetadataConsumer<any, any>, TReturn = any> = ((value: Maybe<TValue>, metadata: TMetadata) => TReturn) | TReturn;
|
|
201
271
|
type RegleCollectionRuleDefinition<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = (RegleRuleDecl<NonNullable<TValue>, TCustomRules> & {
|
|
202
272
|
$each: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>>;
|
|
203
|
-
}) | {
|
|
273
|
+
}) | ({
|
|
204
274
|
$each: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>>;
|
|
205
|
-
};
|
|
275
|
+
} & FieldRegleBehaviourOptions);
|
|
206
276
|
|
|
207
277
|
/**
|
|
208
278
|
* @argument
|
|
@@ -300,7 +370,7 @@ type RegleValidationTree<TForm extends Record<string, any>, TCustomRules extends
|
|
|
300
370
|
/**
|
|
301
371
|
* @public
|
|
302
372
|
*/
|
|
303
|
-
type RegleComputedRules<TForm extends MaybeRef<Record<string, any>>, TCustomRules extends Partial<AllRulesDeclarations> | Regle<any, any> = Partial<AllRulesDeclarations>, TState =
|
|
373
|
+
type RegleComputedRules<TForm extends MaybeRef<Record<string, any>> | DeepReactiveState<Record<string, any>>, TCustomRules extends Partial<AllRulesDeclarations> | Regle<any, any> = Partial<AllRulesDeclarations>, TState = Unwrap<TForm>, TCustom = TCustomRules extends Regle<any, infer R> ? R extends ReglePartialValidationTree<any, infer C> ? C : Partial<AllRulesDeclarations> : TCustomRules> = {
|
|
304
374
|
[TKey in keyof TState]?: RegleFormPropertyType<TState[TKey], TCustom extends Partial<AllRulesDeclarations> ? TCustom : {}>;
|
|
305
375
|
};
|
|
306
376
|
/**
|
|
@@ -312,7 +382,7 @@ type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDe
|
|
|
312
382
|
* Rule tree for a form property
|
|
313
383
|
*/
|
|
314
384
|
type RegleRuleDecl<TValue extends any = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = FieldRegleBehaviourOptions & {
|
|
315
|
-
[TKey in keyof TCustomRules]?: NonNullable<TCustomRules[TKey]> extends RegleRuleWithParamsDefinition<any, infer TParams> ? RegleRuleDefinition<TValue, TParams, boolean> : NonNullable<TCustomRules[TKey]> extends RegleRuleDefinition<any, any, any, any> ? FormRuleDeclaration<TValue, any> : FormRuleDeclaration<TValue, any> | FieldRegleBehaviourOptions[keyof FieldRegleBehaviourOptions];
|
|
385
|
+
[TKey in keyof TCustomRules]?: NonNullable<TCustomRules[TKey]> extends RegleRuleWithParamsDefinition<any, infer TParams> ? RegleRuleDefinition<TValue, [...TParams, ...args: [...any[]]], boolean> : NonNullable<TCustomRules[TKey]> extends RegleRuleDefinition<any, any, any, any> ? FormRuleDeclaration<TValue, any> : FormRuleDeclaration<TValue, any> | FieldRegleBehaviourOptions[keyof FieldRegleBehaviourOptions];
|
|
316
386
|
};
|
|
317
387
|
/**
|
|
318
388
|
* @public
|
|
@@ -323,11 +393,11 @@ type RegleCollectionRuleDeclKeyProperty = {
|
|
|
323
393
|
/**
|
|
324
394
|
* @public
|
|
325
395
|
*/
|
|
326
|
-
type RegleCollectionRuleDecl<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = (
|
|
327
|
-
$each?: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules
|
|
328
|
-
}) | {
|
|
329
|
-
$each?: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue
|
|
330
|
-
};
|
|
396
|
+
type RegleCollectionRuleDecl<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = ({
|
|
397
|
+
$each?: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>, RegleCollectionRuleDeclKeyProperty>;
|
|
398
|
+
} & RegleRuleDecl<NonNullable<TValue>, TCustomRules>) | ({
|
|
399
|
+
$each?: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>, RegleCollectionRuleDeclKeyProperty>;
|
|
400
|
+
} & FieldRegleBehaviourOptions);
|
|
331
401
|
/**
|
|
332
402
|
* @public
|
|
333
403
|
*/
|
|
@@ -475,11 +545,21 @@ declare function createRule<TValue extends any, TParams extends any[], TReturn e
|
|
|
475
545
|
*/
|
|
476
546
|
declare function unwrapRuleParameters<TParams extends any[]>(params: ParamDecl[]): TParams;
|
|
477
547
|
|
|
478
|
-
|
|
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>>;
|
|
479
556
|
|
|
480
557
|
declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>>({ rules, modifiers, }: {
|
|
481
558
|
rules?: () => TCustomRules;
|
|
482
559
|
modifiers?: RegleBehaviourOptions;
|
|
483
|
-
}):
|
|
560
|
+
}): {
|
|
561
|
+
useRegle: useRegleFn<TCustomRules>;
|
|
562
|
+
inferRules: inferRulesFn<TCustomRules>;
|
|
563
|
+
};
|
|
484
564
|
|
|
485
|
-
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 UnwrapRegleUniversalParams, createRule, defineRegleConfig, unwrapRuleParameters, useRegle };
|
|
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 };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { MaybeRef, Ref, ComputedRef, UnwrapNestedRefs } from 'vue';
|
|
1
|
+
import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, ComputedRef } from 'vue';
|
|
3
2
|
|
|
3
|
+
type Prettify<T> = T extends infer R ? {
|
|
4
|
+
[K in keyof R]: R[K];
|
|
5
|
+
} & {} : never;
|
|
4
6
|
type Maybe<T = any> = T | null | undefined;
|
|
5
|
-
type MaybeGetter<T, V = any> = T | ((value: Ref<V>, index: number) => T);
|
|
6
|
-
type
|
|
7
|
+
type MaybeGetter<T, V = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V>, index: number) => T & TAdd);
|
|
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 MaybeGetter<infer U, any, any> ? U : never;
|
|
7
10
|
type DeepMaybeRef<T extends Record<string, any>> = {
|
|
8
11
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
9
12
|
};
|
|
@@ -11,6 +14,7 @@ type ExcludeByType<T, U> = {
|
|
|
11
14
|
[K in keyof T as T[K] extends U ? never : K]: T[K] extends U ? never : T[K];
|
|
12
15
|
};
|
|
13
16
|
type NonPresentKeys<TSource extends Record<string, any>, Target extends Record<string, any>> = Omit<Target, keyof TSource>;
|
|
17
|
+
type NoInferLegacy<A extends any> = [A][A extends any ? 0 : never];
|
|
14
18
|
|
|
15
19
|
type ArrayElement<T> = T extends Array<infer U> ? U : never;
|
|
16
20
|
|
|
@@ -51,6 +55,68 @@ Unfortunately, `Record<string, never>`, `Record<keyof any, never>` and `Record<n
|
|
|
51
55
|
*/
|
|
52
56
|
type EmptyObject = {[emptyObjectSymbol]?: never};
|
|
53
57
|
|
|
58
|
+
/**
|
|
59
|
+
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
|
+
|
|
61
|
+
Inspired by [this Stack Overflow answer](https://stackoverflow.com/a/50375286/2172153).
|
|
62
|
+
|
|
63
|
+
@example
|
|
64
|
+
```
|
|
65
|
+
import type {UnionToIntersection} from 'type-fest';
|
|
66
|
+
|
|
67
|
+
type Union = {the(): void} | {great(arg: string): void} | {escape: boolean};
|
|
68
|
+
|
|
69
|
+
type Intersection = UnionToIntersection<Union>;
|
|
70
|
+
//=> {the(): void; great(arg: string): void; escape: boolean};
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
A more applicable example which could make its way into your library code follows.
|
|
74
|
+
|
|
75
|
+
@example
|
|
76
|
+
```
|
|
77
|
+
import type {UnionToIntersection} from 'type-fest';
|
|
78
|
+
|
|
79
|
+
class CommandOne {
|
|
80
|
+
commands: {
|
|
81
|
+
a1: () => undefined,
|
|
82
|
+
b1: () => undefined,
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
class CommandTwo {
|
|
87
|
+
commands: {
|
|
88
|
+
a2: (argA: string) => undefined,
|
|
89
|
+
b2: (argB: string) => undefined,
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const union = [new CommandOne(), new CommandTwo()].map(instance => instance.commands);
|
|
94
|
+
type Union = typeof union;
|
|
95
|
+
//=> {a1(): void; b1(): void} | {a2(argA: string): void; b2(argB: string): void}
|
|
96
|
+
|
|
97
|
+
type Intersection = UnionToIntersection<Union>;
|
|
98
|
+
//=> {a1(): void; b1(): void; a2(argA: string): void; b2(argB: string): void}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
@category Type
|
|
102
|
+
*/
|
|
103
|
+
type UnionToIntersection<Union> = (
|
|
104
|
+
// `extends unknown` is always going to be the case and is used to convert the
|
|
105
|
+
// `Union` into a [distributive conditional
|
|
106
|
+
// type](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#distributive-conditional-types).
|
|
107
|
+
Union extends unknown
|
|
108
|
+
// The union type is used as the only argument to a function since the union
|
|
109
|
+
// of function arguments is an intersection.
|
|
110
|
+
? (distributedUnion: Union) => void
|
|
111
|
+
// This won't happen.
|
|
112
|
+
: never
|
|
113
|
+
// Infer the `Intersection` type since TypeScript represents the positional
|
|
114
|
+
// arguments of unions of functions as an intersection of the union.
|
|
115
|
+
) extends ((mergedIntersection: infer Intersection) => void)
|
|
116
|
+
// The `& Union` is to allow indexing by the resulting type
|
|
117
|
+
? Intersection & Union
|
|
118
|
+
: never;
|
|
119
|
+
|
|
54
120
|
interface RegleBehaviourOptions {
|
|
55
121
|
/**
|
|
56
122
|
* Only display error when calling `validateState()`
|
|
@@ -100,9 +166,13 @@ interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends
|
|
|
100
166
|
errors: RegleErrorTree<TRules, TExternal>;
|
|
101
167
|
ready: ComputedRef<boolean>;
|
|
102
168
|
resetAll: () => void;
|
|
103
|
-
validateState: () => Promise<false | DeepSafeFormState<TState, TRules
|
|
169
|
+
validateState: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
|
|
104
170
|
state: Ref<TState>;
|
|
105
171
|
}
|
|
172
|
+
type isDeepExact<T, U> = {
|
|
173
|
+
[K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
|
|
174
|
+
}[keyof T] extends true ? true : false;
|
|
175
|
+
type CheckDeepExact<T, U> = [U] extends [never] ? false : T extends RegleCollectionRuleDecl ? U extends RegleCollectionRuleDecl ? isDeepExact<NonNullable<T['$each']>, UnionToIntersection<NonNullable<U['$each']>>> : T extends RegleRuleDecl ? true : T extends ReglePartialValidationTree<any> ? isDeepExact<T, U> : false : T extends RegleRuleDecl ? true : T extends ReglePartialValidationTree<any> ? isDeepExact<T, U> : false;
|
|
106
176
|
type DeepReactiveState<T extends Record<string, any>> = {
|
|
107
177
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
108
178
|
};
|
|
@@ -200,9 +270,9 @@ type RegleRuleDefinitionProcessor<TValue extends any = any, TParams extends any[
|
|
|
200
270
|
type RegleRuleDefinitionWithMetadataProcessor<TValue extends any, TMetadata extends RegleRuleMetadataConsumer<any, any>, TReturn = any> = ((value: Maybe<TValue>, metadata: TMetadata) => TReturn) | TReturn;
|
|
201
271
|
type RegleCollectionRuleDefinition<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = (RegleRuleDecl<NonNullable<TValue>, TCustomRules> & {
|
|
202
272
|
$each: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>>;
|
|
203
|
-
}) | {
|
|
273
|
+
}) | ({
|
|
204
274
|
$each: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>>;
|
|
205
|
-
};
|
|
275
|
+
} & FieldRegleBehaviourOptions);
|
|
206
276
|
|
|
207
277
|
/**
|
|
208
278
|
* @argument
|
|
@@ -300,7 +370,7 @@ type RegleValidationTree<TForm extends Record<string, any>, TCustomRules extends
|
|
|
300
370
|
/**
|
|
301
371
|
* @public
|
|
302
372
|
*/
|
|
303
|
-
type RegleComputedRules<TForm extends MaybeRef<Record<string, any>>, TCustomRules extends Partial<AllRulesDeclarations> | Regle<any, any> = Partial<AllRulesDeclarations>, TState =
|
|
373
|
+
type RegleComputedRules<TForm extends MaybeRef<Record<string, any>> | DeepReactiveState<Record<string, any>>, TCustomRules extends Partial<AllRulesDeclarations> | Regle<any, any> = Partial<AllRulesDeclarations>, TState = Unwrap<TForm>, TCustom = TCustomRules extends Regle<any, infer R> ? R extends ReglePartialValidationTree<any, infer C> ? C : Partial<AllRulesDeclarations> : TCustomRules> = {
|
|
304
374
|
[TKey in keyof TState]?: RegleFormPropertyType<TState[TKey], TCustom extends Partial<AllRulesDeclarations> ? TCustom : {}>;
|
|
305
375
|
};
|
|
306
376
|
/**
|
|
@@ -312,7 +382,7 @@ type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDe
|
|
|
312
382
|
* Rule tree for a form property
|
|
313
383
|
*/
|
|
314
384
|
type RegleRuleDecl<TValue extends any = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = FieldRegleBehaviourOptions & {
|
|
315
|
-
[TKey in keyof TCustomRules]?: NonNullable<TCustomRules[TKey]> extends RegleRuleWithParamsDefinition<any, infer TParams> ? RegleRuleDefinition<TValue, TParams, boolean> : NonNullable<TCustomRules[TKey]> extends RegleRuleDefinition<any, any, any, any> ? FormRuleDeclaration<TValue, any> : FormRuleDeclaration<TValue, any> | FieldRegleBehaviourOptions[keyof FieldRegleBehaviourOptions];
|
|
385
|
+
[TKey in keyof TCustomRules]?: NonNullable<TCustomRules[TKey]> extends RegleRuleWithParamsDefinition<any, infer TParams> ? RegleRuleDefinition<TValue, [...TParams, ...args: [...any[]]], boolean> : NonNullable<TCustomRules[TKey]> extends RegleRuleDefinition<any, any, any, any> ? FormRuleDeclaration<TValue, any> : FormRuleDeclaration<TValue, any> | FieldRegleBehaviourOptions[keyof FieldRegleBehaviourOptions];
|
|
316
386
|
};
|
|
317
387
|
/**
|
|
318
388
|
* @public
|
|
@@ -323,11 +393,11 @@ type RegleCollectionRuleDeclKeyProperty = {
|
|
|
323
393
|
/**
|
|
324
394
|
* @public
|
|
325
395
|
*/
|
|
326
|
-
type RegleCollectionRuleDecl<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = (
|
|
327
|
-
$each?: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules
|
|
328
|
-
}) | {
|
|
329
|
-
$each?: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue
|
|
330
|
-
};
|
|
396
|
+
type RegleCollectionRuleDecl<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = ({
|
|
397
|
+
$each?: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>, RegleCollectionRuleDeclKeyProperty>;
|
|
398
|
+
} & RegleRuleDecl<NonNullable<TValue>, TCustomRules>) | ({
|
|
399
|
+
$each?: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>, RegleCollectionRuleDeclKeyProperty>;
|
|
400
|
+
} & FieldRegleBehaviourOptions);
|
|
331
401
|
/**
|
|
332
402
|
* @public
|
|
333
403
|
*/
|
|
@@ -475,11 +545,21 @@ declare function createRule<TValue extends any, TParams extends any[], TReturn e
|
|
|
475
545
|
*/
|
|
476
546
|
declare function unwrapRuleParameters<TParams extends any[]>(params: ParamDecl[]): TParams;
|
|
477
547
|
|
|
478
|
-
|
|
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>>;
|
|
479
556
|
|
|
480
557
|
declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>>({ rules, modifiers, }: {
|
|
481
558
|
rules?: () => TCustomRules;
|
|
482
559
|
modifiers?: RegleBehaviourOptions;
|
|
483
|
-
}):
|
|
560
|
+
}): {
|
|
561
|
+
useRegle: useRegleFn<TCustomRules>;
|
|
562
|
+
inferRules: inferRulesFn<TCustomRules>;
|
|
563
|
+
};
|
|
484
564
|
|
|
485
|
-
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 UnwrapRegleUniversalParams, createRule, defineRegleConfig, unwrapRuleParameters, useRegle };
|
|
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 };
|
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 F(e){return e.map(t=>t instanceof Function?t():unref(t))}function Ce(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function Ie(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(o=>o.trim()).filter(o=>o.includes("=")).length+e.length}function ue(e,...t){let{message:r,validator:n,active:a,...o}=e,m=n.constructor.name==="AsyncFunction";return {...{validator(v,...s){return e.validator(v,...F(s.length?s:t))},message(v,s){return typeof e.message=="function"?e.message(v,{...s,$params:F(s.$params?.length?s.$params:t)}):e.message},active(v,s){return typeof e.active=="function"?e.active(v,{...s,$params:F(s.$params?.length?s.$params:t)}):e.active??!0},exec(v){let s=e.validator(v,...F(t)),l;return s instanceof Promise?s.then(x=>(l=x,typeof l=="object"&&"$valid"in l?l.$valid:typeof l=="boolean"?l:!1)):(l=s,typeof l=="object"&&"$valid"in l?l.$valid:typeof l=="boolean"?l:!1)}},...o,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:m,_params:Ce(t)}}function ce(e){if(typeof e.validator=="function"){let r=ue(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Ie(e.validator)>1){let a=function(...o){return ue(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function De(e){return k(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,Ke(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=B(e[n]);}return t}function Ke(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 fe(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=(...o)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(m);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(m);},0);}),a}function tt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),m=Number(n[a]);if(o>m)return 1;if(m>o)return -1;if(!isNaN(o)&&isNaN(m))return 1;if(isNaN(o)&&!isNaN(m))return -1}return 0}var U=tt(version,"3.5.0")!==-1;function rt(){return Math.floor(Math.random()*Date.now()).toString()}function Re(){return typeof window>"u"?rt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function pe(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),o=shallowRef(new Map);function m(p){let R=t.value.get(p);if(R)return R;{let d=ref({});return t.value.set(p,d),d}}function D(p){let R=r.value.get(p);if(R)return R;{let d=ref([]);return r.value.set(p,d),d}}function P(p,R,d){o.value.set(`${p}-${R}`,d);}function v(p,R){return o.value.get(`${p}-${R}`)}function s(p,R){p&&R!=null&&o.value.delete(`${p}-${R}`);}function l(p,R){n.value.set(p,R);}function x(p){return n.value.get(p)??!1}function h(p,R){e.value.set(p,R);}function S(p,R){let d=e.value.get(p);return d?u(R,d)?{valid:!0}:{valid:!1}:void 0}function u(p,R){let d=Object.keys(R),w=Object.keys(p);return w.length!==d.length||!w.every(g=>d.includes(g))?!1:w.every(g=>{let c=p[g],i=R[g];return !i||!c||typeof c=="function"||typeof i=="function"||typeof c=="number"||typeof c=="boolean"?!1:c._params?c._params?.every((f,I)=>{if(typeof i=="number"||typeof i=="boolean")return !0;{let $=F(i._params),y=F(c._params);return $?.[I]===y?.[I]}}):!0})}function A(p){let R=a.value.get(p);if(R)return R;{let d=ref(!1),w=ref(!0),b=ref({}),g=ref(!1);return a.value.set(p,{$pending:d,$valid:w,$metadata:b,$validating:g}),{$pending:d,$valid:w,$metadata:b,$validating:g}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:h,setDirtyEntry:l,checkRuleDeclEntry:S,getDirtyState:x,trySetRuleStatusRef:A,getFieldsEntry:m,getCollectionsEntry:D,getArrayStatus:v,addArrayStatus:P,deleteArrayStatus:s,arrayStatusStorage:o}}function Pe(e,t){return k(e.value)&&k(t.value)&&!Object.entries(t.value).some(r=>de(r))}function we(e){return !!e.value&&"$each"in e.value}function Oe(e){return !!e.value&&k(e.value)}function de(e){return k(e)&&"_validator"in e}function Y(e){return typeof e.value!="function"}function me(e){return k(e)&&"$fields"in e}function ge(e){return !!e&&"$each"in e}function ve(e){return !!e&&"$rules"in e}function $e(e){return "$each"in e||"$errors"in e}function G({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 Ae(e,t=!1){return me(e)?L(e.$fields):ge(e)?{$errors:e.$field.$rules?G({field:e.$field,silent:t}):[],$each:e.$each.map(r=>Ae(r,t))}:ve(e)?e.$error?G({field:e,silent:t}):e.$externalErrors??[]:[]}function ne(e,t=!1){return e.map(r=>Ae(r,t))}function L(e,t=!1){return Object.fromEntries(Object.entries(e).map(([r,n])=>me(n)?[r,L(n.$fields,t)]:ge(n)?[r,{$errors:G({field:n.$field,silent:t}),$each:ne(n.$each,t)}]:ve(n)?n.$error?[r,G({field:n,silent:t})]:[r,n.$externalErrors??[]]:[r,[]]))}function Me(e){return computed(()=>L(e.$fields))}var Fe=(r=>(r.Inline="__inline",r.Async="__async",r))(Fe||{});function je(e,t){return computed(()=>e.value.some(r=>r[t]))}function _e(e,t){return computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function Ge({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:m,$debounce:D}){let P=effectScope(),v,s,{$pending:l,$valid:x,$metadata:h,$validating:S}=m.trySetRuleStatusRef(`${o}.${n}`);function u(){v=P.run(()=>{let b=computed(()=>({$invalid:!x.value,$params:I.value,...h.value})),g=computed(()=>Y(r)?typeof r.value.active=="function"?r.value.active(a.value,b.value):r.value.active:!0),c=computed(()=>{let y="",T=t?t[n]?.message:void 0;return T&&(typeof T=="function"?y=T(a.value,b.value):y=T),Y(r)&&(T&&!r.value._patched||(typeof r.value.message=="function"?y=r.value.message(a.value,b.value):y=r.value.message)),re(y)&&(y="Error",console.warn(`No error message defined for ${o}.${n}`)),y}),i=computed(()=>Y(r)&&r.value.type?r.value.type:n),f=computed(()=>Y(r)?r.value.validator:r.value),I=computed(()=>typeof r.value=="function"?[]:F(r.value._params??[])),$=computed(()=>`${o}.${i.value}`);return {$active:g,$message:c,$type:i,$validator:f,$params:I,$path:$}}),s=watch(v.$params,R,{deep:!0});}u();async function A(b){let g=!1;try{x.value=!0,e.value&&(l.value=!0);let c=await b;if(typeof c=="boolean")g=c;else {let{$valid:i,...f}=c;g=i,h.value=f;}}catch{g=!1;}finally{l.value=!1;}return g}let p=X(A,D??100);async function R(){S.value=!0;let b=v.$validator.value,g=!1,c=b(a.value,...v.$params.value);if(c instanceof Promise)g=await p(c);else if(c!=null)if(typeof c=="boolean")g=c;else {let{$valid:i,...f}=c;g=i,h.value=f;}return x.value=g,S.value=!1,g}function d(){x.value=!0,h.value={},l.value=!1,S.value=!1,u();}function w(){s(),P.stop(),P=effectScope();}return reactive({...v,$pending:l,$valid:x,$metadata:h,$validate:R,$unwatch:w,$watch:u,$reset:d})}function ae({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:D,onUnwatch:P}){let v=effectScope(),s,l=ref(!1),x=ref(!1),h=ref([]),S,u,A,p,R=()=>{};function d(){h.value=m.value??[];}d();function w(){let E=t.value,C=a.checkRuleDeclEntry(n,E);f.value=Object.fromEntries(Object.entries(E).filter(([O])=>O.startsWith("$"))),i.value=Object.fromEntries(Object.entries(t.value).filter(([O])=>!O.startsWith("$")).map(([O,_])=>{if(_){let ie=toRef(()=>_);return [O,Ge({$dirty:l,customMessages:r,rule:ie,ruleKey:O,state:e,path:n,storage:a,$debounce:f.value.$debounce})]}return []}).filter(O=>!!O.length)),g(),R=s.$debounce.value?X(c,s.$debounce.value??0):c,C?.valid!=null&&(l.value=a.getDirtyState(n),l.value&&R()),a.addRuleDeclEntry(n,E);}function b(){i.value&&Object.entries(i.value).forEach(([E,C])=>{C.$unwatch();}),p(),l.value&&a.setDirtyEntry(n,l.value),S(),u(),A(),v.stop(),v=effectScope(),P?.();}function g(){i.value&&Object.entries(i.value).forEach(([E,C])=>{C.$watch();}),s=v.run(()=>{let E=computed(()=>l.value),C=computed(()=>f.value.$debounce),O=computed(()=>f.value.$lazy!=null?f.value.$lazy:unref(o.lazy)),_=computed(()=>f.value.$rewardEarly!=null?f.value.$rewardEarly:unref(o.rewardEarly)),ie=computed(()=>f.value.$autoDirty!=null?f.value.$autoDirty:unref(o.autoDirty)),Le=computed(()=>se.value&&!he.value&&l.value),Je=computed(()=>G({field:{$dirty:l.value,$externalErrors:h.value,$rules:i.value}})),Qe=computed(()=>G({field:{$dirty:l.value,$externalErrors:h.value,$rules:i.value},silent:!0})),he=computed(()=>x.value||!_.value?Object.entries(i.value).some(([te,Q])=>Q.$pending):!1),se=computed(()=>h.value?.length?!0:!_.value||_.value&&x.value?Object.entries(i.value).some(([te,Q])=>!Q.$valid):!1),Te=computed(()=>l.value&&!re(e.value)?h.value?.length?!1:_.value?Object.entries(i.value).every(([te,Q])=>Q.$valid):!se.value:!1);return watch(Te,te=>{te&&(x.value=!1);}),{$error:Le,$pending:he,$invalid:se,$valid:Te,$debounce:C,$lazy:O,$errors:Je,$silentErrors:Qe,$rewardEarly:_,$autoDirty:ie,$anyDirty:E}}),A=watch(m,d),S=watch(e,()=>{s.$autoDirty.value&&(l.value||(l.value=!0)),t.value instanceof Function&&w(),R(),s.$rewardEarly.value;},{deep:U?1:!0}),p=watch(l,()=>{a.setDirtyEntry(n,l.value);}),u=watch(s.$valid,E=>{s.$rewardEarly.value&&E&&(x.value=!1);});}function c(){Object.entries(i.value).forEach(([E,C])=>{C.$validate();});}let i=ref(),f=ref();w();function I(){l.value=!1,h.value=[],Object.entries(i.value).forEach(([E,C])=>{C.$reset();}),s.$lazy.value||Object.entries(i.value).map(([E,C])=>C.$validate());}function $(){l.value||(l.value=!0,s.$rewardEarly.value,R());}let y=s.$debounce.value?X(T,s.$debounce.value??0):T;async function T(){try{if(x.value=!0,s.$autoDirty.value&&l.value&&!s.$pending.value)return !s.$error.value;{let E=Object.entries(i.value).map(([O,_])=>_.$validate());return (await Promise.allSettled(E)).every(O=>O.status==="fulfilled"?O.value:!1)}}catch{return !1}}function M(){h.value=[];}return s.$lazy.value||T(),reactive({$dirty:l,...s,$externalErrors:h,$value:e,$rules:i,$reset:I,$touch:$,$validate:y,$unwatch:b,$watch:g,$clearExternalErrors:M})}function Ne({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:m,rules:D,externalErrors:P}){let v=D.$key?D.$key:Re(),s=`${t}.${String(v)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?s=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:v,enumerable:!1,configurable:!1,writable:!1}}));let l=toRef(()=>P.value?.[r]),x=oe({state:o,rulesDef:toRef(()=>D),customMessages:m,path:s,storage:a,options:n,externalErrors:l});if(x){let h=o.value?.$id;x.$id=h??String(v),a.addArrayStatus(e,x.$id,x);}return x}function We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m}){let D=effectScope(),P,v=effectScope(),s;if(Array.isArray(e.value)&&!t.value.$each)return null;let l=ref(),x=ref(e.value),h=null,S=ref({}),u=a.getCollectionsEntry(n);s=v.run(()=>{let i=computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some($=>typeof $!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every($=>de($)):!1),f=computed(()=>m.value?$e(m.value)?m.value.$errors??[]:[]:[]),I=computed(()=>m.value?$e(m.value)?m.value.$each??[]:[]:[]);return {isPrimitiveArray:i,$externalErrorsField:f,$externalErrorsEach:I}}),A(),R();function A(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(l.value=Re(),Object.defineProperties(e.value,{$id:{value:l.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(l.value=e.value.$id)),!s.isPrimitiveArray.value&&(x.value=S.value.$value,Array.isArray(e.value)&&t.value.$each?u.value=e.value.map((i,f)=>{let I=fe(t.value.$each,toRef(()=>i),f);if(I){let $=Ne({$id:l.value,path:n,rules:I,stateValue:toRef(()=>i),index:f,options:o,storage:a,externalErrors:s.$externalErrorsEach});return $||null}}).filter(i=>!!i):u.value=[],S.value=ae({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:s.$externalErrorsField}));}function p(){if(Array.isArray(e.value)){let i=B(u.value);u.value=e.value.map((f,I)=>{let $=toRef(()=>f);if(f.$id&&u.value.find(y=>y.$id===f.$id)){let y=a.getArrayStatus(l.value,f.$id);return y?(y.$value=$,y):null}else {let y=fe(t.value.$each,$,I);if(y){let T=Ne({$id:l.value,path:n,rules:y,stateValue:$,index:I,options:o,storage:a,externalErrors:s.$externalErrorsEach});return T||null}}}).filter(f=>!!f),i.filter(f=>!e.value.find(I=>f.$id===I.$id)).forEach((f,I)=>{a.deleteArrayStatus(l.value,I.toString());});}else u.value=[];}function R(){h=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?A():p();},{deep:U?1:!0,flush:"pre"}),P=D.run(()=>{let i=computed(()=>S.value.$dirty&&u.value.every(C=>C.$dirty)),f=computed(()=>S.value.$anyDirty||u.value.some(C=>C.$dirty)),I=computed(()=>S.value.$invalid||u.value.some(C=>C.$invalid)),$=computed(()=>S.value.$valid&&u.value.every(C=>C.$valid)),y=computed(()=>S.value.$error||u.value.some(C=>C.$error)),T=computed(()=>S.value.$pending||u.value.some(C=>C.$pending)),M=computed(()=>({$errors:G({field:S.value,silent:!1}),$each:ne(u.value)})),E=computed(()=>({$errors:G({field:S.value,silent:!0}),$each:ne(u.value,!0)}));return {$dirty:i,$anyDirty:f,$invalid:I,$valid:$,$error:y,$pending:T,$errors:M,$silentErrors:E}}),s.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 d(){h&&h(),S.value&&S.value.$unwatch(),u.value&&u.value.forEach(i=>{"$dirty"in i&&i.$unwatch();}),D.stop(),D=effectScope(),v.stop(),v=effectScope(!0);}function w(){S.value.$touch(),u.value.forEach(i=>{i.$touch();});}function b(){S.value.$reset(),u.value.forEach(i=>{i.$reset();});}async function g(){try{return (await Promise.all([S.value.$validate(),...u.value.map(f=>f.$validate())])).every(f=>!!f)}catch{return !1}}function c(){}return reactive({$field:S,...P,$each:u,$value:e,$validate:g,$unwatch:d,$watch:R,$touch:w,$reset:b,$clearExternalErrors:c})}function Ee({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:m,externalErrors:D,validationGroups:P}){let v,s,l;function S(g=!0,c=!1){u.value=null,triggerRef(u);let i=Object.fromEntries(Object.entries(e.value).map(([$,y])=>{if(y){let T=toRef(t.value,$),M=toRef(()=>y),E=toRef(()=>D.value?.[$]);return [$,oe({state:T,rulesDef:M,customMessages:r,path:n?`${n}.${$}`:$,storage:o,options:m,externalErrors:E})]}return []}).filter($=>!!$.length&&$[1]!=null)),f=Object.fromEntries(Object.entries(unref(D)??{}).filter(([$])=>!($ in e.value)).map(([$,y])=>{if(y){let T=toRef(()=>({})),M=toRef(()=>y);return [$,oe({state:ref(void 0),rulesDef:T,customMessages:r,path:n?`${n}.${$}`:$,storage:o,options:m,externalErrors:M})]}return []})),I=Object.fromEntries(Object.entries(P?.(i)??{}).map(([$,y])=>y.length?[$,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(T=>[T,je(toRef(()=>y),T)])),...Object.fromEntries(["$errors","$silentErrors"].map(T=>[T,_e(toRef(()=>y),T)]))}]:[]));u.value={...i,...f,...I},g&&d();}let u=o.getFieldsEntry(n);S();function A(){S(!1),Object.entries(u.value).forEach(([g,c])=>{c.$reset();}),d();}function p(){Object.entries(u.value).forEach(([g,c])=>{c.$touch();});}async function R(){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 d(){a&&(l=watch(a,()=>{w(),S();},{deep:U?1:!0,flush:"post"})),v=effectScope(),s=v.run(()=>{let g=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([M,E])=>E.$dirty)),c=computed(()=>Object.entries(u.value).some(([M,E])=>E.$dirty)),i=computed(()=>Object.entries(u.value).some(([M,E])=>E.$invalid)),f=computed(()=>Object.entries(u.value).every(([M,E])=>E.$valid)),I=computed(()=>Object.entries(u.value).some(([M,E])=>E.$error)),$=computed(()=>Object.entries(u.value).some(([M,E])=>E.$pending)),y=computed(()=>L(u.value)),T=computed(()=>L(u.value,!0));return {$dirty:g,$anyDirty:c,$invalid:i,$valid:f,$error:I,$pending:$,$errors:y,$silentErrors:T}});}function w(){u.value&&Object.entries(u.value).forEach(([g,c])=>{c.$unwatch();}),l?.(),v.stop(),v=effectScope();}function b(){Object.entries(u.value).forEach(([g,c])=>{c.$clearExternalErrors();});}return reactive({...s,$fields:u,$value:t,$reset:A,$touch:p,$validate:R,$unwatch:w,$watch:d,$clearExternalErrors:b})}function oe({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:D,onUnwatch:P}){return we(t)?We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:D,externalErrors:m}):Pe(e,t)&&De(e)?Ee({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:D,externalErrors:m}):Oe(t)?ae({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:D,externalErrors:m,onUnwatch:P}):null}function be(e,t,r,n){let a=pe(),o=computed(()=>unref(r.externalErrors)),m=reactive(Ee({rootRules:e,scopeRules:e,state:t,customMessages:n?.(),storage:a,options:r,externalErrors:o,validationGroups:r.validationGroups})),D=Me(m);return {regle:m,errors:D}}function xe(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,o,m){let D=isRef(o)?o:computed(typeof o=="function"?o:()=>o),P={...r,...m},v=isRef(a)?a:ref(a),s=B(toRaw(v.value)),{regle:l,errors:x}=be(D,v,P,e);function h(){l.$unwatch(),S(a,s),l.$reset();}function S(p,R){Object.entries(R).forEach(([d,w])=>{let b=isRef(p)?p.value:p,g=isRef(b[d])?b[d].value:b[d],c=isRef(R[d])?R[d]._value:R[d];Array.isArray(c)&&Array.isArray(g)?(b[d]=[],c.forEach((i,f)=>{b[d][f]={},S(b[d][f],c[f]);})):k(c)?S(g,c):isRef(b[d])?b[d].value=c:b[d]=c;});}let u=computed(()=>!(l.$invalid||l.$pending));async function A(){return l.$touch(),await l.$validate()?v.value:!1}return {regle:l,r$:l,errors:x,resetAll:h,validateState:A,ready:u,state:v}}return n}var He=xe();function ze({rules:e,modifiers:t}){return xe(e,t)}export{Fe as InternalRuleType,ce as createRule,ze as defineRegleConfig,F as unwrapRuleParameters,He as useRegle};
|
|
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};
|