@regle/core 0.1.10 → 0.2.2
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 +40 -28
- package/dist/index.d.ts +40 -28
- package/dist/index.js +1 -1
- package/package.json +9 -9
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var vue=require('vue');function V(e){return e.map(t=>t instanceof Function?t():vue.unref(t))}function Ie(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function Pe(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(l=>l.trim()).filter(l=>l.includes("=")).length+e.length}function ie(e,...t){let{message:r,validator:n,active:a,...l}=e,d=n.constructor.name==="AsyncFunction";return {...{validator(S,...v){return e.validator(S,...V(v.length?v:t))},message(S,v){return typeof e.message=="function"?e.message(S,{...v,$params:V(v.$params?.length?v.$params:t)}):e.message},active(S,v){return typeof e.active=="function"?e.active(S,{...v,$params:V(v.$params?.length?v.$params:t)}):e.active??!0},exec(S){let v=e.validator(S,...V(t)),o;return v instanceof Promise?v.then(R=>(o=R,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)):(o=v,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)}},...l,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:d,_params:Ie(t)}}function ue(e){if(typeof e.validator=="function"){let r=ie(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Pe(e.validator)>1){let a=function(...l){return ie(e,...l)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function G(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function we(e){return G(e.value)}function B(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>B(n)))),r=="Map"&&(t=new Map([...e].map(n=>[B(n[0]),B(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,tt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=B(e[n]);}return t}function tt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function ce(e,t,r){return e instanceof Function?e(t,r??0):e}function re(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function X(e,t,r){let n,a=(...l)=>new Promise(d=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(d);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...l)=>new Promise(d=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(d);},0);}),a}function nt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let l=Number(r[a]),d=Number(n[a]);if(l>d)return 1;if(d>l)return -1;if(!isNaN(l)&&isNaN(d))return 1;if(isNaN(l)&&!isNaN(d))return -1}return 0}var q=nt(vue.version,"3.5.0")!==-1;function at(){return Math.floor(Math.random()*Date.now()).toString()}function fe(){return typeof window>"u"?at():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Re(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),a=vue.shallowRef(new Map),l=vue.shallowRef(new Map);function d(p){let g=t.value.get(p);if(g)return g;{let f=vue.ref({});return t.value.set(p,f),f}}function h(p){let g=r.value.get(p);if(g)return g;{let f=vue.ref([]);return r.value.set(p,f),f}}function P(p,g,f){l.value.set(`${p}-${g}`,f);}function S(p,g){return l.value.get(`${p}-${g}`)}function v(p,g){p&&g!=null&&l.value.delete(`${p}-${g}`);}function o(p,g){n.value.set(p,g);}function R(p){return n.value.get(p)??!1}function D(p,g){e.value.set(p,g);}function m(p,g){let f=e.value.get(p);return f?u(g,f)?{valid:!0}:{valid:!1}:void 0}function u(p,g){let f=Object.keys(g),O=Object.keys(p);return O.length!==f.length||!O.every(E=>f.includes(E))?!1:O.every(E=>{let c=p[E],i=g[E];return !i||!c||typeof c=="function"||typeof i=="function"||typeof c=="number"||typeof c=="boolean"?!1:c._params?c._params?.every((s,$)=>{if(typeof i=="number"||typeof i=="boolean")return !0;{let y=V(i._params),x=V(c._params);return y?.[$]===x?.[$]}}):!0})}function F(p){let g=a.value.get(p);if(g)return g;{let f=vue.ref(!1),O=vue.ref(!0),I=vue.ref({}),E=vue.ref(!1);return a.value.set(p,{$pending:f,$valid:O,$metadata:I,$validating:E}),{$pending:f,$valid:O,$metadata:I,$validating:E}}}return vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),l.value.clear();}),{addRuleDeclEntry:D,setDirtyEntry:o,checkRuleDeclEntry:m,getDirtyState:R,trySetRuleStatusRef:F,getFieldsEntry:d,getCollectionsEntry:h,getArrayStatus:S,addArrayStatus:P,deleteArrayStatus:v,arrayStatusStorage:l}}function Oe(e,t){return G(e.value)&&G(t.value)&&!Object.entries(t.value).some(r=>pe(r))}function Ae(e){return !!e.value&&"$each"in e.value}function Me(e){return !!e.value&&G(e.value)}function pe(e){return G(e)&&"_validator"in e}function Y(e){return typeof e.value!="function"}function de(e){return G(e)&&"$fields"in e}function me(e){return !!e&&"$each"in e}function ge(e){return !!e&&"$rules"in e}function ye(e){return "$each"in e||"$errors"in e}function U({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function Fe(e,t=!1){return de(e)?ve(e.$fields):me(e)?{$errors:e.$field.$rules?U({field:e.$field,silent:t}):[],$each:e.$each.map(r=>Fe(r,t))}:ge(e)?e.$error?U({field:e,silent:t}):e.$externalErrors??[]:[]}function st(e,t=!1){return e.map(r=>Fe(r,t))}function ve(e,t=!1){return Object.fromEntries(Object.entries(e).map(([r,n])=>de(n)?[r,ve(n.$fields,t)]:me(n)?[r,{$errors:U({field:n.$field,silent:t}),$each:st(n.$each,t)}]:ge(n)?n.$error?[r,U({field:n,silent:t})]:[r,n.$externalErrors??[]]:[r,[]]))}function Ve(e){return vue.computed(()=>ve(e.$fields))}var je=(r=>(r.Inline="__inline",r.Async="__async",r))(je||{});function ke(e,t){return vue.computed(()=>e.value.some(r=>r[t]))}function Ge(e,t){return vue.computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function Ne({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:l,storage:d,$debounce:h}){let P=vue.effectScope(),S,v,{$pending:o,$valid:R,$metadata:D,$validating:m}=d.trySetRuleStatusRef(`${l}.${n}`);function u(){S=P.run(()=>{let E=vue.computed(()=>({$invalid:!R.value,$params:y.value,...D.value})),c=vue.computed(()=>Y(r)?typeof r.value.active=="function"?r.value.active(a.value,E.value):r.value.active:!0),i=vue.computed(()=>{let T="",C=t?t[n]?.message:void 0;return C&&(typeof C=="function"?T=C(a.value,E.value):T=C),Y(r)&&(C&&!r.value._patched||(typeof r.value.message=="function"?T=r.value.message(a.value,E.value):T=r.value.message)),re(T)&&(T="Error",console.warn(`No error message defined for ${l}.${n}`)),T}),s=vue.computed(()=>Y(r)&&r.value.type?r.value.type:n),$=vue.computed(()=>Y(r)?r.value.validator:r.value),y=vue.computed(()=>typeof r.value=="function"?[]:V(r.value._params??[])),x=vue.computed(()=>`${l}.${s.value}`);return {$active:c,$message:i,$type:s,$validator:$,$params:y,$path:x}}),v=vue.watch(S.$params,f,{deep:!0});}u();function F(){R.value=!0,e.value&&(o.value=!0);}async function p(E){let c=!1;try{F();let i=await E;if(typeof i=="boolean")c=i;else {let{$valid:s,...$}=i;c=s,D.value=$;}}catch{c=!1;}finally{o.value=!1;}return c}let g=X(p,h??100);async function f(){m.value=!0;let E=S.$validator.value,c=!1,i=E(a.value,...S.$params.value);if(i instanceof Promise)c=await g(i);else if(i!=null)if(typeof i=="boolean")c=i;else {let{$valid:s,...$}=i;c=s,D.value=$;}return R.value=c,m.value=!1,c}function O(){R.value=!0,D.value={},o.value=!1,m.value=!1,u();}function I(){v(),P.stop(),P=vue.effectScope();}return vue.reactive({...S,$pending:o,$valid:R,$metadata:D,$validate:f,$unwatch:I,$watch:u,$reset:O})}function ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:d,index:h,onUnwatch:P,$isArray:S}){let v=vue.effectScope(),o,R=vue.ref(!1),D=vue.ref(!1),m=vue.ref([]),u,F,p,g,f=()=>{};function O(){m.value=d.value??[];}O();function I(){let b=t.value,A=a.checkRuleDeclEntry(n,b);$.value=Object.fromEntries(Object.entries(b).filter(([M])=>M.startsWith("$"))),s.value=Object.fromEntries(Object.entries(t.value).filter(([M])=>!M.startsWith("$")).map(([M,k])=>{if(k){let oe=vue.toRef(()=>k);return [M,Ne({$dirty:R,customMessages:r,rule:oe,ruleKey:M,state:e,path:n,storage:a,$debounce:$.value.$debounce})]}return []}).filter(M=>!!M.length)),c(),f=o.$debounce.value?X(i,o.$debounce.value??0):i,A?.valid!=null&&(R.value=a.getDirtyState(n),R.value&&f()),a.addRuleDeclEntry(n,b);}function E(){s.value&&Object.entries(s.value).forEach(([b,A])=>{A.$unwatch();}),g(),R.value&&a.setDirtyEntry(n,R.value),u(),F(),p(),v.stop(),v=vue.effectScope(),P?.();}function c(){s.value&&Object.entries(s.value).forEach(([b,A])=>{A.$watch();}),o=v.run(()=>{let b=vue.computed(()=>R.value),A=vue.computed(()=>$.value.$debounce),M=vue.computed(()=>$.value.$lazy!=null?$.value.$lazy:vue.unref(l.lazy)),k=vue.computed(()=>$.value.$rewardEarly!=null?$.value.$rewardEarly:vue.unref(l.rewardEarly)),oe=vue.computed(()=>$.value.$autoDirty!=null?$.value.$autoDirty:vue.unref(l.autoDirty)),Qe=vue.computed(()=>se.value&&!De.value&&R.value),Xe=vue.computed(()=>U({field:{$dirty:R.value,$externalErrors:m.value,$rules:s.value}})),Ye=vue.computed(()=>U({field:{$dirty:R.value,$externalErrors:m.value,$rules:s.value},silent:!0})),De=vue.computed(()=>D.value||!k.value?Object.entries(s.value).some(([te,Q])=>Q.$pending):!1),se=vue.computed(()=>m.value?.length?!0:!k.value||k.value&&D.value?Object.entries(s.value).some(([te,Q])=>!Q.$valid):!1),Ce=vue.computed(()=>R.value&&!re(e.value)?m.value?.length?!1:k.value?Object.entries(s.value).every(([te,Q])=>Q.$valid):!se.value:!1);return vue.watch(Ce,te=>{te&&(D.value=!1);}),{$error:Qe,$pending:De,$invalid:se,$valid:Ce,$debounce:A,$lazy:M,$errors:Xe,$silentErrors:Ye,$rewardEarly:k,$autoDirty:oe,$anyDirty:b}}),p=vue.watch(d,O),u=vue.watch(e,()=>{o.$autoDirty.value&&(R.value||(R.value=!0)),t.value instanceof Function&&I(),f(),o.$rewardEarly.value;},{deep:S?!0:q?1:!0}),g=vue.watch(R,()=>{a.setDirtyEntry(n,R.value);}),F=vue.watch(o.$valid,b=>{o.$rewardEarly.value&&b&&(D.value=!1);});}function i(){Object.entries(s.value).forEach(([b,A])=>{A.$validate();});}let s=vue.ref(),$=vue.ref();I();function y(){R.value=!1,m.value=[],Object.entries(s.value).forEach(([b,A])=>{A.$reset();}),o.$lazy.value||Object.entries(s.value).map(([b,A])=>A.$validate());}function x(){R.value||(R.value=!0,o.$rewardEarly.value,f());}let T=o.$debounce.value?X(C,o.$debounce.value??0):C;async function C(){try{if(D.value=!0,o.$autoDirty.value&&R.value&&!o.$pending.value)return !o.$error.value;{let b=Object.entries(s.value).map(([M,k])=>k.$validate());return (await Promise.allSettled(b)).every(M=>M.status==="fulfilled"?M.value:!1)}}catch{return !1}}function w(){m.value=[];}return o.$lazy.value||C(),vue.reactive({$dirty:R,...o,$externalErrors:m,$value:e,$rules:s,$reset:y,$touch:x,$validate:T,$unwatch:E,$watch:c,$clearExternalErrors:w})}function We({$id:e,path:t,index:r,options:n,storage:a,stateValue:l,customMessages:d,rules:h,externalErrors:P}){let S=h.$key?h.$key:fe(),v=`${t}.${String(S)}`;typeof l.value=="object"&&l.value!=null&&(l.value.$id?v=`${t}.${l.value.$id}`:Object.defineProperties(l.value,{$id:{value:S,enumerable:!1,configurable:!1,writable:!1}}));let o=vue.toRef(()=>P.value?.[r]),R=le({state:l,rulesDef:vue.toRef(()=>h),customMessages:d,path:v,storage:a,options:n,externalErrors:o});if(R){let D=l.value?.$id;R.$id=D??String(S),a.addArrayStatus(e,R.$id,R);}return R}function He({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:d}){let h=vue.effectScope(),P,S=vue.effectScope(),v;if(Array.isArray(e.value)&&!t.value.$each)return null;let o=vue.ref(),R=vue.ref(e.value),D,m=vue.ref({}),u=a.getCollectionsEntry(n);v=S.run(()=>{let i=vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(y=>typeof y!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(y=>pe(y)):!1),s=vue.computed(()=>d.value?ye(d.value)?d.value.$errors??[]:[]:[]),$=vue.computed(()=>d.value?ye(d.value)?d.value.$each??[]:[]:[]);return {isPrimitiveArray:i,$externalErrorsField:s,$externalErrorsEach:$}}),F(),g();function F(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(o.value=fe(),Object.defineProperties(e.value,{$id:{value:o.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(o.value=e.value.$id)),!v.isPrimitiveArray.value&&(R.value=m.value.$value,Array.isArray(e.value)&&t.value.$each?u.value=e.value.map((i,s)=>{let $=ce(t.value.$each,vue.toRef(()=>i),s);if($){let y=We({$id:o.value,path:n,rules:$,stateValue:vue.toRef(()=>i),index:s,options:l,storage:a,externalErrors:v.$externalErrorsEach});return y||null}}).filter(i=>!!i):u.value=[],m.value=ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:v.$externalErrorsField,$isArray:!0}));}function p(){if(Array.isArray(e.value)){let i=B(u.value);u.value=e.value.map((s,$)=>{let y=vue.toRef(()=>s);if(s.$id&&u.value.find(x=>x.$id===s.$id)){let x=a.getArrayStatus(o.value,s.$id);return x?(x.$value=y,x):null}else {let x=ce(t.value.$each,y,$);if(x){let T=We({$id:o.value,path:n,rules:x,stateValue:y,index:$,options:l,storage:a,externalErrors:v.$externalErrorsEach});return T||null}}}).filter(s=>!!s),i.filter(s=>!e.value.find($=>s.$id===$.$id)).forEach((s,$)=>{a.deleteArrayStatus(o.value,$.toString());});}else u.value=[];}function g(){D=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?F():p();},{deep:q?1:!0,flush:"pre"}),P=h.run(()=>{let i=vue.computed(()=>m.value.$dirty&&u.value.every(b=>b.$dirty)),s=vue.computed(()=>m.value.$anyDirty||u.value.some(b=>b.$dirty)),$=vue.computed(()=>m.value.$invalid||u.value.some(b=>b.$invalid)),y=vue.computed(()=>m.value.$valid&&u.value.every(b=>b.$valid)),x=vue.computed(()=>m.value.$error||u.value.some(b=>b.$error)),T=vue.computed(()=>m.value.$pending||u.value.some(b=>b.$pending)),C=vue.computed(()=>({$errors:m.value.$errors,$each:u.value.map(b=>b.$errors)})),w=vue.computed(()=>({$errors:m.value.$silentErrors,$each:u.value.map(b=>b.$silentErrors)}));return {$dirty:i,$anyDirty:s,$invalid:$,$valid:y,$error:x,$pending:T,$errors:C,$silentErrors:w}}),v.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),D());}function f(){D&&D(),m.value&&m.value.$unwatch(),u.value&&u.value.forEach(i=>{"$dirty"in i&&i.$unwatch();}),h.stop(),h=vue.effectScope(),S.stop(),S=vue.effectScope(!0);}function O(){m.value.$touch(),u.value.forEach(i=>{i.$touch();});}function I(){m.value.$reset(),u.value.forEach(i=>{i.$reset();});}async function E(){try{return (await Promise.all([m.value.$validate(),...u.value.map(s=>s.$validate())])).every(s=>!!s)}catch{return !1}}function c(){}return vue.reactive({$field:m,...P,$each:u,$value:e,$validate:E,$unwatch:f,$watch:g,$touch:O,$reset:I,$clearExternalErrors:c})}function Ee({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:l,options:d,externalErrors:h,validationGroups:P}){let S,v,o;function m(E=!0,c=!1){u.value=null,vue.triggerRef(u);let i=Object.fromEntries(Object.entries(e.value).map(([y,x])=>{if(x){let T=vue.toRef(t.value,y),C=vue.toRef(()=>x),w=vue.toRef(()=>h.value?.[y]);return [y,le({state:T,rulesDef:C,customMessages:r,path:n?`${n}.${y}`:y,storage:l,options:d,externalErrors:w})]}return []}).filter(y=>!!y.length&&y[1]!=null)),s=Object.fromEntries(Object.entries(vue.unref(h)??{}).filter(([y])=>!(y in e.value)).map(([y,x])=>{if(x){let T=vue.toRef(()=>({})),C=vue.toRef(()=>x);return [y,le({state:vue.ref(void 0),rulesDef:T,customMessages:r,path:n?`${n}.${y}`:y,storage:l,options:d,externalErrors:C})]}return []})),$=Object.fromEntries(Object.entries(P?.(i)??{}).map(([y,x])=>x.length?[y,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(T=>[T,ke(vue.toRef(()=>x),T)])),...Object.fromEntries(["$errors","$silentErrors"].map(T=>[T,Ge(vue.toRef(()=>x),T)]))}]:[]));u.value={...i,...s,...$},E&&f();}let u=l.getFieldsEntry(n);m();function F(){m(!1),Object.entries(u.value).forEach(([E,c])=>{c.$reset();}),f();}function p(){Object.entries(u.value).forEach(([E,c])=>{c.$touch();});}async function g(){try{return (await Promise.allSettled(Object.entries(u.value).map(([c,i])=>i.$validate()))).every(c=>c.status==="fulfilled"?c.value:!1)}catch{return !1}}function f(){a&&(o=vue.watch(a,()=>{O(),m();},{deep:q?1:!0,flush:"post"})),S=vue.effectScope(),v=S.run(()=>{let E=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([C,w])=>w.$dirty)),c=vue.computed(()=>Object.entries(u.value).some(([C,w])=>w.$dirty)),i=vue.computed(()=>Object.entries(u.value).some(([C,w])=>w.$invalid)),s=vue.computed(()=>Object.entries(u.value).every(([C,w])=>w.$valid)),$=vue.computed(()=>E.value&&!y.value&&i.value),y=vue.computed(()=>Object.entries(u.value).some(([C,w])=>w.$pending)),x=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,w])=>[C,w.$errors]))),T=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,w])=>[C,w.$silentErrors])));return {$dirty:E,$anyDirty:c,$invalid:i,$valid:s,$error:$,$pending:y,$errors:x,$silentErrors:T}});}function O(){u.value&&Object.entries(u.value).forEach(([E,c])=>{c.$unwatch();}),o?.(),S.stop(),S=vue.effectScope();}function I(){Object.entries(u.value).forEach(([E,c])=>{c.$clearExternalErrors();});}return vue.reactive({...v,$fields:u,$value:t,$reset:F,$touch:p,$validate:g,$unwatch:O,$watch:f,$clearExternalErrors:I})}function le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:d,index:h,onUnwatch:P}){return Ae(t)?He({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:h,externalErrors:d}):Oe(e,t)&&we(e)?Ee({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:l,index:h,externalErrors:d}):Me(t)?ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:h,externalErrors:d,onUnwatch:P}):null}function be(e,t,r,n){let a=Re(),l=vue.computed(()=>vue.unref(r.externalErrors)),d=vue.reactive(Ee({rootRules:e,scopeRules:e,state:t,customMessages:n?.(),storage:a,options:r,externalErrors:l,validationGroups:r.validationGroups})),h=Ve(d);return {regle:d,errors:h}}function xe(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,l,d){let h=vue.isRef(l)?l:vue.computed(typeof l=="function"?l:()=>l),P={...r,...d},S=vue.isRef(a)?a:vue.ref(a),v=B(vue.toRaw(S.value)),{regle:o,errors:R}=be(h,S,P,e);function D(){o.$unwatch(),m(a,v),o.$reset();}function m(p,g){Object.entries(g).forEach(([f,O])=>{let I=vue.isRef(p)?p.value:p,E=vue.isRef(I[f])?I[f].value:I[f],c=vue.isRef(g[f])?g[f]._value:g[f];Array.isArray(c)&&Array.isArray(E)?(I[f]=[],c.forEach((i,s)=>{I[f][s]={},m(I[f][s],c[s]);})):G(c)?m(E,c):vue.isRef(I[f])?I[f].value=c:I[f]=c;});}let u=vue.computed(()=>!(o.$invalid||o.$pending));async function F(){return o.$touch(),await o.$validate()?S.value:!1}return {regle:o,r$:o,errors:R,resetAll:D,validateState:F,ready:u,state:S}}return n}var ze=xe();function Te(){function e(t,r){return r}return e}var he=Te();function Je({rules:e,modifiers:t}){let r=xe(e,t),n=Te();return {useRegle:r,inferRules:n}}exports.InternalRuleType=je;exports.createRule=ue;exports.defineRegleConfig=Je;exports.inferRules=he;exports.unwrapRuleParameters=V;exports.useRegle=ze;
|
|
1
|
+
'use strict';var vue=require('vue');var ce=(r=>(r.Inline="__inline",r.Async="__async",r))(ce||{});function Ae(e,t){return vue.computed(()=>e.value.some(r=>r[t]))}function Me(e,t){return vue.computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function j(e){return e.map(t=>t instanceof Function?t():vue.unref(t))}function Fe(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function Ve(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 fe(e,...t){let{message:r,validator:n,active:a,type:o,...m}=e,T=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator($,...s){return e.validator($,...j(s.length?s:t))},message($,s){return typeof e.message=="function"?e.message($,{...s,$params:j(s.$params?.length?s.$params:t)}):e.message},active($,s){return typeof e.active=="function"?e.active($,{...s,$params:j(s.$params?.length?s.$params:t)}):e.active??!0},exec($){let s=e.validator($,...j(t)),i;return s instanceof Promise?s.then(h=>(i=h,typeof i=="object"&&"$valid"in i?i.$valid:typeof i=="boolean"?i:!1)):(i=s,typeof i=="object"&&"$valid"in i?i.$valid:typeof i=="boolean"?i:!1)}},...m,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:T,_params:Fe(t)}}function Re(e){if(typeof e.validator=="function"){let r=fe(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Ve(e.validator)>1){let a=function(...o){return fe(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 B(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function je(e){return B(e.value)}function U(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>U(n)))),r=="Map"&&(t=new Map([...e].map(n=>[U(n[0]),U(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,lt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=U(e[n]);}return t}function lt(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 pe(e,t,r){return e instanceof Function?e(t,r??0):e}function ae(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 K(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 st(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 J=st(vue.version,"3.5.0")!==-1;function it(){return Math.floor(Math.random()*Date.now()).toString()}function de(){return typeof window>"u"?it():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function me(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),a=vue.shallowRef(new Map),o=vue.shallowRef(new Map);function m(p){let c=t.value.get(p);if(c)return c;{let x=vue.ref({});return t.value.set(p,x),x}}function T(p){let c=r.value.get(p);if(c)return c;{let x=vue.ref([]);return r.value.set(p,x),x}}function P(p,c,x){o.value.set(`${p}-${c}`,x);}function S(p,c){return o.value.get(`${p}-${c}`)}function $(p,c){p&&c!=null&&o.value.delete(`${p}-${c}`);}function s(p,c){n.value.set(p,c);}function i(p){return n.value.get(p)??!1}function h(p,c){e.value.set(p,c);}function y(p,c){let x=e.value.get(p);return x?u(c,x)?{valid:!0}:{valid:!1}:void 0}function u(p,c){let x=Object.keys(c),E=Object.keys(p);return E.length!==x.length||!E.every(v=>x.includes(v))?!1:E.every(v=>{let d=p[v],f=c[v];return !f||!d||typeof d=="function"||typeof f=="function"||typeof d=="number"||typeof d=="boolean"?!1:d._params?d._params?.every((R,b)=>{if(typeof f=="number"||typeof f=="boolean")return !0;{let l=j(f._params),g=j(d._params);return l?.[b]===g?.[b]}}):!0})}function O(p){let c=a.value.get(p);if(c)return c;{let x=vue.ref(!1),E=vue.ref(!0),A=vue.ref({}),v=vue.ref(!1);return a.value.set(p,{$pending:x,$valid:E,$metadata:A,$validating:v}),{$pending:x,$valid:E,$metadata:A,$validating:v}}}return vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:h,setDirtyEntry:s,checkRuleDeclEntry:y,getDirtyState:i,trySetRuleStatusRef:O,getFieldsEntry:m,getCollectionsEntry:T,getArrayStatus:S,addArrayStatus:P,deleteArrayStatus:$,arrayStatusStorage:o}}function _e(e,t){return B(e.value)&&B(t.value)&&!Object.entries(t.value).some(r=>ee(r))}function Ge(e){return !!e.value&&"$each"in e.value}function ke(e){return !!e.value&&B(e.value)}function ee(e){return B(e)&&"_validator"in e}function te(e){return typeof e.value!="function"}function ye(e){return B(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 H({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function Be(e,t=!1){return ye(e)?Se(e.$fields):ge(e)?{$errors:e.$field.$rules?H({field:e.$field,silent:t}):[],$each:e.$each.map(r=>Be(r,t))}:ve(e)?e.$error?H({field:e,silent:t}):e.$externalErrors??[]:[]}function ft(e,t=!1){return e.map(r=>Be(r,t))}function Se(e,t=!1){return Object.fromEntries(Object.entries(e).map(([r,n])=>ye(n)?[r,Se(n.$fields,t)]:ge(n)?[r,{$errors:H({field:n.$field,silent:t}),$each:ft(n.$each,t)}]:ve(n)?n.$error?[r,H({field:n,silent:t})]:[r,n.$externalErrors??[]]:[r,[]]))}function Ne(e){return vue.computed(()=>Se(e.$fields))}function We({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:m,$debounce:T}){let P=vue.effectScope(),S,$,s=vue.ref(!1),{$pending:i,$valid:h,$metadata:y,$validating:u}=m.trySetRuleStatusRef(`${o}.${n}`);function O(){S=P.run(()=>{let d=vue.computed(()=>({$invalid:!h.value,$params:g.value,...y.value})),f=vue.computed(()=>te(r)?typeof r.value.active=="function"?r.value.active(a.value,d.value):r.value.active:!0),R=vue.computed(()=>{let C="",D=t?t[n]?.message:void 0;return D&&(typeof D=="function"?C=D(a.value,d.value):C=D),te(r)&&(D&&!r.value._patched||(typeof r.value.message=="function"?C=r.value.message(a.value,d.value):C=r.value.message)),ae(C)&&(C="Error",console.warn(`No error message defined for ${o}.${n}`)),C}),b=vue.computed(()=>te(r)&&r.value.type?r.value.type:n),l=vue.computed(()=>te(r)?r.value.validator:r.value),g=vue.computed(()=>typeof r.value=="function"?[]:j(r.value._params??[])),I=vue.computed(()=>`${o}.${b.value}`);return {$active:f,$message:R,$type:b,$validator:l,$params:g,$path:I}}),$=vue.watch(S.$params,E,{deep:!0});}O();function p(){h.value=!0,e.value&&(i.value=!0);}async function c(){let d=S.$validator.value,f=d(a.value,...S.$params.value),R=!1,b=a.value;try{p();let l;if(f instanceof Promise?l=await f:l=f,a.value!==b)return !0;if(typeof l=="boolean")R=l;else {let{$valid:g,...I}=l;R=g,y.value=I;}}catch{R=!1;}finally{i.value=!1;}return R}let x=K(c,T??200);async function E(){u.value=!0;let d=!1;if(ee(r.value)&&r.value._async)d=await x();else {let f=S.$validator.value,R=f(a.value,...S.$params.value);if(R instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(R!=null)if(typeof R=="boolean")d=R;else {let{$valid:b,...l}=R;d=b,y.value=l;}}return h.value=d,u.value=!1,d}function A(){h.value=!0,y.value={},i.value=!1,u.value=!1,O();}function v(){$(),P.stop(),P=vue.effectScope();}return vue.reactive({...S,$pending:i,$valid:h,$metadata:y,_haveAsync:s,$validating:u,$validate:E,$unwatch:v,$watch:O,$reset:A})}function le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:T,onUnwatch:P,$isArray:S}){let $=vue.effectScope(),s,i=vue.ref(!1),h=vue.ref(!1),y=vue.ref([]),u,O,p,c,x,E=()=>{};function A(){y.value=m.value??[];}A();function v(){let M=t.value,F=a.checkRuleDeclEntry(n,M);g.value=Object.fromEntries(Object.entries(M).filter(([V])=>V.startsWith("$"))),l.value=Object.fromEntries(Object.entries(t.value).filter(([V])=>!V.startsWith("$")).map(([V,k])=>{if(k){let ie=vue.toRef(()=>k);return [V,We({$dirty:i,customMessages:r,rule:ie,ruleKey:V,state:e,path:n,storage:a,$debounce:g.value.$debounce})]}return []}).filter(V=>!!V.length)),R(),d(),F?.valid!=null&&(i.value=a.getDirtyState(n),i.value&&E()),a.addRuleDeclEntry(n,M);}function d(){E=s.$debounce.value?K(b,s.$debounce.value??s.haveAnyAsyncRule?100:0):b;}function f(){l.value&&Object.entries(l.value).forEach(([M,F])=>{F.$unwatch();}),c(),i.value&&a.setDirtyEntry(n,i.value),u(),O(),p(),$.stop(),$=vue.effectScope(),P?.(),x?.();}function R(){l.value&&Object.entries(l.value).forEach(([M,F])=>{F.$watch();}),s=$.run(()=>{let M=vue.computed(()=>i.value),F=vue.computed(()=>g.value.$debounce),V=vue.computed(()=>g.value.$lazy!=null?g.value.$lazy:vue.unref(o.lazy)),k=vue.computed(()=>g.value.$rewardEarly!=null?g.value.$rewardEarly:vue.unref(o.rewardEarly)),ie=vue.computed(()=>g.value.$autoDirty!=null?g.value.$autoDirty:vue.unref(o.autoDirty)),Ze=vue.computed(()=>Object.entries(l.value).some(([z,N])=>N.$validating)),Ie=vue.computed(()=>ue.value&&!Pe.value&&i.value),Ke=vue.computed(()=>Ie.value?H({field:{$dirty:i.value,$externalErrors:y.value,$rules:l.value}}):[]),et=vue.computed(()=>H({field:{$dirty:i.value,$externalErrors:y.value,$rules:l.value},silent:!0})),Pe=vue.computed(()=>h.value||!k.value?Object.entries(l.value).some(([z,N])=>N.$pending):!1),ue=vue.computed(()=>y.value?.length?!0:!k.value||k.value&&h.value?Object.entries(l.value).some(([z,N])=>!N.$valid):!1),we=vue.computed(()=>i.value&&!ae(e.value)&&!Ze.value?y.value?.length?!1:k.value?Object.entries(l.value).every(([z,N])=>N.$valid):!ue.value:!1),tt=vue.computed(()=>Object.entries(l.value).some(([z,N])=>N._haveAsync));return vue.watch(we,z=>{z&&(h.value=!1);}),{$error:Ie,$pending:Pe,$invalid:ue,$valid:we,$debounce:F,$lazy:V,$errors:Ke,$silentErrors:et,$rewardEarly:k,$autoDirty:ie,$anyDirty:M,haveAnyAsyncRule:tt}}),p=vue.watch(m,A),u=vue.watch(e,()=>{s.$autoDirty.value&&(i.value||(i.value=!0)),t.value instanceof Function&&v(),E(),s.$rewardEarly.value;},{deep:S?!0:J?1:!0}),c=vue.watch(i,()=>{a.setDirtyEntry(n,i.value);}),O=vue.watch(s.$valid,M=>{s.$rewardEarly.value&&M&&(h.value=!1);}),x=vue.watch(s.haveAnyAsyncRule,d);}function b(){Object.entries(l.value).forEach(([M,F])=>{F.$validate();});}let l=vue.ref(),g=vue.ref();v();function I(){i.value=!1,y.value=[],Object.entries(l.value).forEach(([M,F])=>{F.$reset();}),s.$lazy.value||Object.entries(l.value).map(([M,F])=>F.$validate());}function C(){i.value||(i.value=!0,s.$rewardEarly.value,E());}let D=s.$debounce.value?K(w,s.$debounce.value??0):w;async function w(){try{if(h.value=!0,s.$autoDirty.value&&i.value&&!s.$pending.value)return !s.$error.value;{let M=Object.entries(l.value).map(([V,k])=>k.$validate());return (await Promise.allSettled(M)).every(V=>V.status==="fulfilled"?V.value:!1)}}catch{return !1}}function Xe(){y.value=[];}return s.$lazy.value||w(),vue.reactive({$dirty:i,...s,$externalErrors:y,$value:e,$rules:l,$reset:I,$touch:C,$validate:D,$unwatch:f,$watch:R,$clearExternalErrors:Xe})}function qe({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:m,rules:T,externalErrors:P}){let S=T.$key?T.$key:de(),$=`${t}.${String(S)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?$=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:S,enumerable:!1,configurable:!1,writable:!1}}));let s=vue.toRef(()=>P.value?.[r]),i=se({state:o,rulesDef:vue.toRef(()=>T),customMessages:m,path:$,storage:a,options:n,externalErrors:s});if(i){let h=o.value?.$id;i.$id=h??String(S),a.addArrayStatus(e,i.$id,i);}return i}function Le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m}){let T=vue.effectScope(),P,S=vue.effectScope(),$;if(Array.isArray(e.value)&&!t.value.$each)return null;let s=vue.ref(),i=vue.ref(e.value),h,y=vue.ref({}),u=a.getCollectionsEntry(n);$=S.run(()=>{let f=vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(l=>typeof l!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(l=>ee(l)):!1),R=vue.computed(()=>m.value?$e(m.value)?m.value.$errors??[]:[]:[]),b=vue.computed(()=>m.value?$e(m.value)?m.value.$each??[]:[]:[]);return {isPrimitiveArray:f,$externalErrorsField:R,$externalErrorsEach:b}}),O(),c();function O(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(s.value=de(),Object.defineProperties(e.value,{$id:{value:s.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(s.value=e.value.$id)),!$.isPrimitiveArray.value&&(i.value=y.value.$value,Array.isArray(e.value)&&t.value.$each?u.value=e.value.map((f,R)=>{let b=pe(t.value.$each,vue.toRef(()=>f),R);if(b){let l=qe({$id:s.value,path:n,rules:b,stateValue:vue.toRef(()=>f),index:R,options:o,storage:a,externalErrors:$.$externalErrorsEach});return l||null}}).filter(f=>!!f):u.value=[],y.value=le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:$.$externalErrorsField,$isArray:!0}));}function p(){if(Array.isArray(e.value)){let f=U(u.value);u.value=e.value.map((R,b)=>{let l=vue.toRef(()=>R);if(R.$id&&u.value.find(g=>g.$id===R.$id)){let g=a.getArrayStatus(s.value,R.$id);return g?(g.$value=l,g):null}else {let g=pe(t.value.$each,l,b);if(g){let I=qe({$id:s.value,path:n,rules:g,stateValue:l,index:b,options:o,storage:a,externalErrors:$.$externalErrorsEach});return I||null}}}).filter(R=>!!R),f.filter(R=>!e.value.find(b=>R.$id===b.$id)).forEach((R,b)=>{a.deleteArrayStatus(s.value,b.toString());});}else u.value=[];}function c(){h=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?O():p();},{deep:J?1:!0,flush:"pre"}),P=T.run(()=>{let f=vue.computed(()=>y.value.$dirty&&u.value.every(w=>w.$dirty)),R=vue.computed(()=>y.value.$anyDirty||u.value.some(w=>w.$dirty)),b=vue.computed(()=>y.value.$invalid||u.value.some(w=>w.$invalid)),l=vue.computed(()=>y.value.$valid&&u.value.every(w=>w.$valid)),g=vue.computed(()=>y.value.$error||u.value.some(w=>w.$error)),I=vue.computed(()=>y.value.$pending||u.value.some(w=>w.$pending)),C=vue.computed(()=>({$errors:y.value.$errors,$each:u.value.map(w=>w.$errors)})),D=vue.computed(()=>({$errors:y.value.$silentErrors,$each:u.value.map(w=>w.$silentErrors)}));return {$dirty:f,$anyDirty:R,$invalid:b,$valid:l,$error:g,$pending:I,$errors:C,$silentErrors:D}}),$.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 x(){h&&h(),y.value&&y.value.$unwatch(),u.value&&u.value.forEach(f=>{"$dirty"in f&&f.$unwatch();}),T.stop(),T=vue.effectScope(),S.stop(),S=vue.effectScope(!0);}function E(){y.value.$touch(),u.value.forEach(f=>{f.$touch();});}function A(){y.value.$reset(),u.value.forEach(f=>{f.$reset();});}async function v(){try{return (await Promise.all([y.value.$validate(),...u.value.map(R=>R.$validate())])).every(R=>!!R)}catch{return !1}}function d(){}return vue.reactive({$field:y,...P,$each:u,$value:e,$validate:v,$unwatch:x,$watch:c,$touch:E,$reset:A,$clearExternalErrors:d})}function he({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:m,externalErrors:T,validationGroups:P}){let S,$,s=null;function y(v=!0,d=!1){u.value=null,vue.triggerRef(u);let f=Object.fromEntries(Object.entries(e.value).map(([l,g])=>{if(g){let I=vue.toRef(t.value,l),C=vue.toRef(()=>g),D=vue.toRef(()=>T.value?.[l]);return [l,se({state:I,rulesDef:C,customMessages:r,path:n?`${n}.${l}`:l,storage:o,options:m,externalErrors:D})]}return []}).filter(l=>!!l.length&&l[1]!=null)),R=Object.fromEntries(Object.entries(vue.unref(T)??{}).filter(([l])=>!(l in e.value)).map(([l,g])=>{if(g){let I=vue.toRef(()=>({})),C=vue.toRef(()=>g);return [l,se({state:vue.ref(void 0),rulesDef:I,customMessages:r,path:n?`${n}.${l}`:l,storage:o,options:m,externalErrors:C})]}return []})),b=Object.fromEntries(Object.entries(P?.(f)??{}).map(([l,g])=>g.length?[l,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(I=>[I,Ae(vue.toRef(()=>g),I)])),...Object.fromEntries(["$errors","$silentErrors"].map(I=>[I,Me(vue.toRef(()=>g),I)]))}]:[]));u.value={...f,...R,...b},v&&x();}let u=o.getFieldsEntry(n);y();function O(){y(!1),Object.entries(u.value).forEach(([v,d])=>{d.$reset();}),x();}function p(){Object.entries(u.value).forEach(([v,d])=>{d.$touch();});}async function c(){try{return (await Promise.allSettled(Object.entries(u.value).map(([d,f])=>f.$validate()))).every(d=>d.status==="fulfilled"?d.value:!1)}catch{return !1}}function x(){a&&(s=vue.watch(a,()=>{E(),y();},{deep:J?1:!0,flush:"post"})),S=vue.effectScope(),$=S.run(()=>{let v=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([C,D])=>D.$dirty)),d=vue.computed(()=>Object.entries(u.value).some(([C,D])=>D.$dirty)),f=vue.computed(()=>Object.entries(u.value).some(([C,D])=>D.$invalid)),R=vue.computed(()=>Object.entries(u.value).every(([C,D])=>D.$valid)),b=vue.computed(()=>v.value&&!l.value&&f.value),l=vue.computed(()=>Object.entries(u.value).some(([C,D])=>D.$pending)),g=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,D])=>[C,D.$errors]))),I=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,D])=>[C,D.$silentErrors])));return {$dirty:v,$anyDirty:d,$invalid:f,$valid:R,$error:b,$pending:l,$errors:g,$silentErrors:I}});}function E(){u.value&&Object.entries(u.value).forEach(([v,d])=>{d.$unwatch();}),s?.(),S.stop(),S=vue.effectScope();}function A(){Object.entries(u.value).forEach(([v,d])=>{d.$clearExternalErrors();});}return vue.reactive({...$,$fields:u,$value:t,$reset:O,$touch:p,$validate:c,$unwatch:E,$watch:x,$clearExternalErrors:A})}function se({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:T,onUnwatch:P}){return Ge(t)?Le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:T,externalErrors:m}):_e(e,t)&&je(e)?he({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:T,externalErrors:m}):ke(t)?le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:T,externalErrors:m,onUnwatch:P}):null}function xe(e,t,r,n){let a=me(),o=vue.computed(()=>vue.unref(r.externalErrors)),m=vue.reactive(he({rootRules:e,scopeRules:e,state:t,customMessages:n?.(),storage:a,options:r,externalErrors:o,validationGroups:r.validationGroups})),T=Ne(m);return {regle:m,errors:T}}function Te(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,o,m){let T=vue.isRef(o)?o:vue.computed(typeof o=="function"?o:()=>o),P={...r,...m},S=vue.isRef(a)?a:vue.ref(a),$=U(vue.toRaw(S.value)),{regle:s}=xe(T,S,P,e);function i(){s.$unwatch(),h(a,$),s.$reset();}function h(O,p){Object.entries(p).forEach(([c,x])=>{let E=vue.isRef(O)?O.value:O,A=vue.isRef(E[c])?E[c].value:E[c],v=vue.isRef(p[c])?p[c]._value:p[c];Array.isArray(v)&&Array.isArray(A)?(E[c]=[],v.forEach((d,f)=>{E[c][f]={},h(E[c][f],v[f]);})):B(v)?h(A,v):vue.isRef(E[c])?E[c].value=v:E[c]=v;});}let y=vue.computed(()=>!(s.$invalid||s.$pending));async function u(){return s.$touch(),await s.$validate()?S.value:!1}return {r$:s,resetAll:i,validateState:u,ready:y,state:S}}return n}var Ye=Te();function De(){function e(t,r){return r}return e}var Ce=De();function Qe({rules:e,modifiers:t}){let r=Te(e,t),n=De();return {useRegle:r,inferRules:n}}exports.InternalRuleType=ce;exports.createRule=Re;exports.defineRegleConfig=Qe;exports.inferRules=Ce;exports.unwrapRuleParameters=j;exports.useRegle=Ye;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, ComputedRef } from 'vue';
|
|
1
|
+
import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, MaybeRefOrGetter, ComputedRef } from 'vue';
|
|
2
2
|
|
|
3
3
|
type Prettify<T> = T extends infer R ? {
|
|
4
4
|
[K in keyof R]: R[K];
|
|
@@ -6,7 +6,7 @@ type Prettify<T> = T extends infer R ? {
|
|
|
6
6
|
type Maybe<T = any> = T | null | undefined;
|
|
7
7
|
type MaybeGetter<T, V = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V>, index: number) => T & TAdd);
|
|
8
8
|
type Unwrap<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : UnwrapNestedRefs<T>;
|
|
9
|
-
type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends
|
|
9
|
+
type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends ((value: Ref<any>, index: number) => infer U extends Record<string, any>) ? U : T;
|
|
10
10
|
type DeepMaybeRef<T extends Record<string, any>> = {
|
|
11
11
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
12
12
|
};
|
|
@@ -157,13 +157,17 @@ type AddDollarToOptions<T extends Record<string, any>> = {
|
|
|
157
157
|
[K in keyof T as `$${string & K}`]: T[K];
|
|
158
158
|
};
|
|
159
159
|
|
|
160
|
+
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups>;
|
|
161
|
+
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>>;
|
|
162
|
+
|
|
163
|
+
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
164
|
+
<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;
|
|
165
|
+
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
166
|
+
}
|
|
167
|
+
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
168
|
+
|
|
160
169
|
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree> = EmptyObject, TExternal extends RegleExternalErrorTree<TState> = never, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never> {
|
|
161
|
-
|
|
162
|
-
r$: RegleStatus<TState, TRules, TValidationGroups>;
|
|
163
|
-
/** Show active errors based on your behaviour options (lazy, autoDirty)
|
|
164
|
-
* It allow you to skip scouting the `regle` object
|
|
165
|
-
*/
|
|
166
|
-
errors: RegleErrorTree<TRules, TExternal>;
|
|
170
|
+
r$: RegleStatus<TState, TRules, TValidationGroups, TExternal>;
|
|
167
171
|
ready: ComputedRef<boolean>;
|
|
168
172
|
resetAll: () => void;
|
|
169
173
|
validateState: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
|
|
@@ -184,6 +188,10 @@ type DeepSafeFormState<TState extends Record<string, any>, TRules extends RegleP
|
|
|
184
188
|
[K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? never : K]-?: SafeProperty<TState[K], TRules[K]>;
|
|
185
189
|
};
|
|
186
190
|
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends ReglePartialValidationTree<any, any> ? TState extends Record<string, any> ? DeepSafeFormState<TState, TRule> : TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? never : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? TState : never : never : never : never;
|
|
191
|
+
type InferRegleRules<T extends useRegleFn<any>> = T extends useRegleFn<infer U> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
|
|
192
|
+
type RegleRequiredRules<T extends Partial<AllRulesDeclarations> | useRegleFn<any>, TRules extends T extends useRegleFn<any> ? keyof InferRegleRules<T> : keyof T> = Omit<T extends useRegleFn<any> ? InferRegleRules<T> : T extends Partial<AllRulesDeclarations> ? UnwrapRuleTree<T> : {}, TRules> & {
|
|
193
|
+
[K in TRules]-?: T extends useRegleFn<any> ? K extends keyof InferRegleRules<T> ? NonNullable<InferRegleRules<T>[K]> : never : K extends keyof T ? NonNullable<T[K]> : never;
|
|
194
|
+
};
|
|
187
195
|
|
|
188
196
|
type ParamDecl<T = any> = MaybeRef<Maybe<T>> | (() => Maybe<T>);
|
|
189
197
|
type CreateFn<T extends any[]> = (...args: T) => any;
|
|
@@ -239,6 +247,12 @@ type RegleRuleMetadataExtended = {
|
|
|
239
247
|
$valid: boolean;
|
|
240
248
|
[x: string]: any;
|
|
241
249
|
};
|
|
250
|
+
type UnwrapRuleTree<T extends {
|
|
251
|
+
[x: string]: RegleRuleRaw<any> | undefined;
|
|
252
|
+
}> = {
|
|
253
|
+
[K in keyof T]: UnwrapRuleWithParams<T[K]>;
|
|
254
|
+
};
|
|
255
|
+
type UnwrapRuleWithParams<T extends RegleRuleRaw<any> | undefined> = T extends RegleRuleWithParamsDefinition<infer TValue, infer TParams, infer TAsync, infer TMetadata> ? RegleRuleDefinition<TValue, TParams, TAsync, TMetadata> : T;
|
|
242
256
|
/**
|
|
243
257
|
* Define a rule Metadata definition
|
|
244
258
|
*/
|
|
@@ -259,7 +273,7 @@ type PossibleRegleRuleMetadataConsumer = DefaultMetadataProperties & {
|
|
|
259
273
|
/**
|
|
260
274
|
* Generic types for a created RegleRule
|
|
261
275
|
*/
|
|
262
|
-
type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean =
|
|
276
|
+
type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = boolean, TMetaData extends RegleRuleMetadataDefinition = boolean> = RegleRuleDefinition<TValue, TParams, TAsync, TMetaData> | RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetaData>;
|
|
263
277
|
/**
|
|
264
278
|
* Process the type of a created rule with `createRule`.
|
|
265
279
|
* For a rule with params it will return a function
|
|
@@ -345,7 +359,10 @@ type DefaultValidators = {
|
|
|
345
359
|
numeric: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
346
360
|
regex: RegleRuleWithParamsDefinition<string, [regexp: RegExp], false, boolean>;
|
|
347
361
|
required: RegleRuleDefinition<unknown, []>;
|
|
348
|
-
sameAs: RegleRuleWithParamsDefinition<unknown, [
|
|
362
|
+
sameAs: RegleRuleWithParamsDefinition<unknown, [
|
|
363
|
+
target: unknown,
|
|
364
|
+
otherName?: string
|
|
365
|
+
], false, boolean>;
|
|
349
366
|
startsWith: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
|
|
350
367
|
url: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
351
368
|
};
|
|
@@ -353,7 +370,9 @@ type DefaultValidators = {
|
|
|
353
370
|
type CustomRulesDeclarationTree = {
|
|
354
371
|
[x: string]: RegleRuleRaw<any, any, boolean, any> | undefined;
|
|
355
372
|
};
|
|
356
|
-
type AllRulesDeclarations = CustomRulesDeclarationTree &
|
|
373
|
+
type AllRulesDeclarations = CustomRulesDeclarationTree & {
|
|
374
|
+
[K in keyof DefaultValidators]: RegleRuleRaw<any, any, boolean, any> | undefined;
|
|
375
|
+
};
|
|
357
376
|
|
|
358
377
|
/**
|
|
359
378
|
* @public
|
|
@@ -433,12 +452,12 @@ type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalVal
|
|
|
433
452
|
/**
|
|
434
453
|
* @public
|
|
435
454
|
*/
|
|
436
|
-
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never> = RegleCommonStatus<TState> & {
|
|
455
|
+
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TExternal extends RegleExternalErrorTree<TState> = never> = RegleCommonStatus<TState> & {
|
|
437
456
|
readonly $fields: {
|
|
438
457
|
readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey>;
|
|
439
458
|
};
|
|
440
|
-
readonly $errors: RegleErrorTree<TRules>;
|
|
441
|
-
readonly $silentErrors: RegleErrorTree<TRules>;
|
|
459
|
+
readonly $errors: RegleErrorTree<TRules, TExternal>;
|
|
460
|
+
readonly $silentErrors: RegleErrorTree<TRules, TExternal>;
|
|
442
461
|
} & ([TValidationGroups] extends [never] ? {} : {
|
|
443
462
|
$groups: {
|
|
444
463
|
readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
|
|
@@ -451,7 +470,7 @@ type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl
|
|
|
451
470
|
/**
|
|
452
471
|
* @public
|
|
453
472
|
*/
|
|
454
|
-
interface RegleFieldStatus<TState extends any =
|
|
473
|
+
interface RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>> extends RegleCommonStatus<TState> {
|
|
455
474
|
$value: UnwrapNestedRefs<TState>;
|
|
456
475
|
readonly $errors: string[];
|
|
457
476
|
readonly $silentErrors: string[];
|
|
@@ -482,7 +501,7 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
482
501
|
/**
|
|
483
502
|
* @public
|
|
484
503
|
*/
|
|
485
|
-
type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata extends RegleRuleMetadataDefinition =
|
|
504
|
+
type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata extends RegleRuleMetadataDefinition = any> = {
|
|
486
505
|
readonly $type: string;
|
|
487
506
|
readonly $message: string | string[];
|
|
488
507
|
readonly $active: boolean;
|
|
@@ -490,10 +509,12 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
490
509
|
readonly $pending: boolean;
|
|
491
510
|
readonly $path: string;
|
|
492
511
|
readonly $metadata: TMetadata;
|
|
493
|
-
$validator: (value: TValue
|
|
512
|
+
$validator: (value: Maybe<TValue>, ...args: TParams) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>;
|
|
494
513
|
$validate(): Promise<boolean>;
|
|
495
514
|
$reset(): void;
|
|
496
|
-
} & ([TParams] extends [[]] ? {} : {
|
|
515
|
+
} & ([TParams] extends [never[]] ? {} : [unknown[]] extends [TParams] ? {
|
|
516
|
+
readonly $params?: any[];
|
|
517
|
+
} : {
|
|
497
518
|
readonly $params: TParams;
|
|
498
519
|
});
|
|
499
520
|
/**
|
|
@@ -545,15 +566,6 @@ declare function createRule<TValue extends any, TParams extends any[], TReturn e
|
|
|
545
566
|
*/
|
|
546
567
|
declare function unwrapRuleParameters<TParams extends any[]>(params: ParamDecl[]): TParams;
|
|
547
568
|
|
|
548
|
-
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules | (() => TRules) | ComputedRef<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups>;
|
|
549
|
-
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>>;
|
|
550
|
-
|
|
551
|
-
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
552
|
-
<TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
553
|
-
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
554
|
-
}
|
|
555
|
-
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
556
|
-
|
|
557
569
|
declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>>({ rules, modifiers, }: {
|
|
558
570
|
rules?: () => TCustomRules;
|
|
559
571
|
modifiers?: RegleBehaviourOptions;
|
|
@@ -562,4 +574,4 @@ declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarat
|
|
|
562
574
|
inferRules: inferRulesFn<TCustomRules>;
|
|
563
575
|
};
|
|
564
576
|
|
|
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 };
|
|
577
|
+
export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRule, type InferRegleRules, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleExternalValidationErrorsReport, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, type RegleRequiredRules, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleValidationTree, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, ComputedRef } from 'vue';
|
|
1
|
+
import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, MaybeRefOrGetter, ComputedRef } from 'vue';
|
|
2
2
|
|
|
3
3
|
type Prettify<T> = T extends infer R ? {
|
|
4
4
|
[K in keyof R]: R[K];
|
|
@@ -6,7 +6,7 @@ type Prettify<T> = T extends infer R ? {
|
|
|
6
6
|
type Maybe<T = any> = T | null | undefined;
|
|
7
7
|
type MaybeGetter<T, V = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V>, index: number) => T & TAdd);
|
|
8
8
|
type Unwrap<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : UnwrapNestedRefs<T>;
|
|
9
|
-
type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends
|
|
9
|
+
type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends ((value: Ref<any>, index: number) => infer U extends Record<string, any>) ? U : T;
|
|
10
10
|
type DeepMaybeRef<T extends Record<string, any>> = {
|
|
11
11
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
12
12
|
};
|
|
@@ -157,13 +157,17 @@ type AddDollarToOptions<T extends Record<string, any>> = {
|
|
|
157
157
|
[K in keyof T as `$${string & K}`]: T[K];
|
|
158
158
|
};
|
|
159
159
|
|
|
160
|
+
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups>;
|
|
161
|
+
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>>;
|
|
162
|
+
|
|
163
|
+
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
164
|
+
<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;
|
|
165
|
+
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
166
|
+
}
|
|
167
|
+
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
168
|
+
|
|
160
169
|
interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree> = EmptyObject, TExternal extends RegleExternalErrorTree<TState> = never, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never> {
|
|
161
|
-
|
|
162
|
-
r$: RegleStatus<TState, TRules, TValidationGroups>;
|
|
163
|
-
/** Show active errors based on your behaviour options (lazy, autoDirty)
|
|
164
|
-
* It allow you to skip scouting the `regle` object
|
|
165
|
-
*/
|
|
166
|
-
errors: RegleErrorTree<TRules, TExternal>;
|
|
170
|
+
r$: RegleStatus<TState, TRules, TValidationGroups, TExternal>;
|
|
167
171
|
ready: ComputedRef<boolean>;
|
|
168
172
|
resetAll: () => void;
|
|
169
173
|
validateState: () => Promise<false | Prettify<DeepSafeFormState<TState, TRules>>>;
|
|
@@ -184,6 +188,10 @@ type DeepSafeFormState<TState extends Record<string, any>, TRules extends RegleP
|
|
|
184
188
|
[K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? never : K]-?: SafeProperty<TState[K], TRules[K]>;
|
|
185
189
|
};
|
|
186
190
|
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleCollectionRuleDefinition<any, any> ? TState extends Array<any> ? SafeProperty<TState[number], ExtractFromGetter<TRule['$each']>>[] : never : TRule extends ReglePartialValidationTree<any, any> ? TState extends Record<string, any> ? DeepSafeFormState<TState, TRule> : TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? never : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? TState : never : never : never : never;
|
|
191
|
+
type InferRegleRules<T extends useRegleFn<any>> = T extends useRegleFn<infer U> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
|
|
192
|
+
type RegleRequiredRules<T extends Partial<AllRulesDeclarations> | useRegleFn<any>, TRules extends T extends useRegleFn<any> ? keyof InferRegleRules<T> : keyof T> = Omit<T extends useRegleFn<any> ? InferRegleRules<T> : T extends Partial<AllRulesDeclarations> ? UnwrapRuleTree<T> : {}, TRules> & {
|
|
193
|
+
[K in TRules]-?: T extends useRegleFn<any> ? K extends keyof InferRegleRules<T> ? NonNullable<InferRegleRules<T>[K]> : never : K extends keyof T ? NonNullable<T[K]> : never;
|
|
194
|
+
};
|
|
187
195
|
|
|
188
196
|
type ParamDecl<T = any> = MaybeRef<Maybe<T>> | (() => Maybe<T>);
|
|
189
197
|
type CreateFn<T extends any[]> = (...args: T) => any;
|
|
@@ -239,6 +247,12 @@ type RegleRuleMetadataExtended = {
|
|
|
239
247
|
$valid: boolean;
|
|
240
248
|
[x: string]: any;
|
|
241
249
|
};
|
|
250
|
+
type UnwrapRuleTree<T extends {
|
|
251
|
+
[x: string]: RegleRuleRaw<any> | undefined;
|
|
252
|
+
}> = {
|
|
253
|
+
[K in keyof T]: UnwrapRuleWithParams<T[K]>;
|
|
254
|
+
};
|
|
255
|
+
type UnwrapRuleWithParams<T extends RegleRuleRaw<any> | undefined> = T extends RegleRuleWithParamsDefinition<infer TValue, infer TParams, infer TAsync, infer TMetadata> ? RegleRuleDefinition<TValue, TParams, TAsync, TMetadata> : T;
|
|
242
256
|
/**
|
|
243
257
|
* Define a rule Metadata definition
|
|
244
258
|
*/
|
|
@@ -259,7 +273,7 @@ type PossibleRegleRuleMetadataConsumer = DefaultMetadataProperties & {
|
|
|
259
273
|
/**
|
|
260
274
|
* Generic types for a created RegleRule
|
|
261
275
|
*/
|
|
262
|
-
type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean =
|
|
276
|
+
type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = boolean, TMetaData extends RegleRuleMetadataDefinition = boolean> = RegleRuleDefinition<TValue, TParams, TAsync, TMetaData> | RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetaData>;
|
|
263
277
|
/**
|
|
264
278
|
* Process the type of a created rule with `createRule`.
|
|
265
279
|
* For a rule with params it will return a function
|
|
@@ -345,7 +359,10 @@ type DefaultValidators = {
|
|
|
345
359
|
numeric: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
346
360
|
regex: RegleRuleWithParamsDefinition<string, [regexp: RegExp], false, boolean>;
|
|
347
361
|
required: RegleRuleDefinition<unknown, []>;
|
|
348
|
-
sameAs: RegleRuleWithParamsDefinition<unknown, [
|
|
362
|
+
sameAs: RegleRuleWithParamsDefinition<unknown, [
|
|
363
|
+
target: unknown,
|
|
364
|
+
otherName?: string
|
|
365
|
+
], false, boolean>;
|
|
349
366
|
startsWith: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
|
|
350
367
|
url: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
351
368
|
};
|
|
@@ -353,7 +370,9 @@ type DefaultValidators = {
|
|
|
353
370
|
type CustomRulesDeclarationTree = {
|
|
354
371
|
[x: string]: RegleRuleRaw<any, any, boolean, any> | undefined;
|
|
355
372
|
};
|
|
356
|
-
type AllRulesDeclarations = CustomRulesDeclarationTree &
|
|
373
|
+
type AllRulesDeclarations = CustomRulesDeclarationTree & {
|
|
374
|
+
[K in keyof DefaultValidators]: RegleRuleRaw<any, any, boolean, any> | undefined;
|
|
375
|
+
};
|
|
357
376
|
|
|
358
377
|
/**
|
|
359
378
|
* @public
|
|
@@ -433,12 +452,12 @@ type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalVal
|
|
|
433
452
|
/**
|
|
434
453
|
* @public
|
|
435
454
|
*/
|
|
436
|
-
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never> = RegleCommonStatus<TState> & {
|
|
455
|
+
type RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = never, TExternal extends RegleExternalErrorTree<TState> = never> = RegleCommonStatus<TState> & {
|
|
437
456
|
readonly $fields: {
|
|
438
457
|
readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey>;
|
|
439
458
|
};
|
|
440
|
-
readonly $errors: RegleErrorTree<TRules>;
|
|
441
|
-
readonly $silentErrors: RegleErrorTree<TRules>;
|
|
459
|
+
readonly $errors: RegleErrorTree<TRules, TExternal>;
|
|
460
|
+
readonly $silentErrors: RegleErrorTree<TRules, TExternal>;
|
|
442
461
|
} & ([TValidationGroups] extends [never] ? {} : {
|
|
443
462
|
$groups: {
|
|
444
463
|
readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
|
|
@@ -451,7 +470,7 @@ type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl
|
|
|
451
470
|
/**
|
|
452
471
|
* @public
|
|
453
472
|
*/
|
|
454
|
-
interface RegleFieldStatus<TState extends any =
|
|
473
|
+
interface RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>> extends RegleCommonStatus<TState> {
|
|
455
474
|
$value: UnwrapNestedRefs<TState>;
|
|
456
475
|
readonly $errors: string[];
|
|
457
476
|
readonly $silentErrors: string[];
|
|
@@ -482,7 +501,7 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
482
501
|
/**
|
|
483
502
|
* @public
|
|
484
503
|
*/
|
|
485
|
-
type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata extends RegleRuleMetadataDefinition =
|
|
504
|
+
type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata extends RegleRuleMetadataDefinition = any> = {
|
|
486
505
|
readonly $type: string;
|
|
487
506
|
readonly $message: string | string[];
|
|
488
507
|
readonly $active: boolean;
|
|
@@ -490,10 +509,12 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
490
509
|
readonly $pending: boolean;
|
|
491
510
|
readonly $path: string;
|
|
492
511
|
readonly $metadata: TMetadata;
|
|
493
|
-
$validator: (value: TValue
|
|
512
|
+
$validator: (value: Maybe<TValue>, ...args: TParams) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>;
|
|
494
513
|
$validate(): Promise<boolean>;
|
|
495
514
|
$reset(): void;
|
|
496
|
-
} & ([TParams] extends [[]] ? {} : {
|
|
515
|
+
} & ([TParams] extends [never[]] ? {} : [unknown[]] extends [TParams] ? {
|
|
516
|
+
readonly $params?: any[];
|
|
517
|
+
} : {
|
|
497
518
|
readonly $params: TParams;
|
|
498
519
|
});
|
|
499
520
|
/**
|
|
@@ -545,15 +566,6 @@ declare function createRule<TValue extends any, TParams extends any[], TReturn e
|
|
|
545
566
|
*/
|
|
546
567
|
declare function unwrapRuleParameters<TParams extends any[]>(params: ParamDecl[]): TParams;
|
|
547
568
|
|
|
548
|
-
type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>> = <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TExternal extends RegleExternalErrorTree<Unwrap<TState>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules | (() => TRules) | ComputedRef<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TExternal, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TExternal, TValidationGroups>;
|
|
549
|
-
declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>>;
|
|
550
|
-
|
|
551
|
-
interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
|
|
552
|
-
<TState extends Record<string, any>, TRules extends ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialValidationTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : never>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
553
|
-
<TState extends unknown, TRules extends RegleRuleDecl>(state: MaybeRef<TState>, rulesFactory: TRules): typeof rulesFactory;
|
|
554
|
-
}
|
|
555
|
-
declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
|
|
556
|
-
|
|
557
569
|
declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>>({ rules, modifiers, }: {
|
|
558
570
|
rules?: () => TCustomRules;
|
|
559
571
|
modifiers?: RegleBehaviourOptions;
|
|
@@ -562,4 +574,4 @@ declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarat
|
|
|
562
574
|
inferRules: inferRulesFn<TCustomRules>;
|
|
563
575
|
};
|
|
564
576
|
|
|
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 };
|
|
577
|
+
export { type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRule, type InferRegleRules, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleExternalValidationErrorsReport, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, type RegleRequiredRules, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleValidationTree, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {unref,version,isRef,toRef,computed,ref,toRaw,reactive,shallowRef,onScopeDispose,triggerRef,watch,effectScope}from'vue';function V(e){return e.map(t=>t instanceof Function?t():unref(t))}function Ie(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function Pe(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(l=>l.trim()).filter(l=>l.includes("=")).length+e.length}function ie(e,...t){let{message:r,validator:n,active:a,...l}=e,d=n.constructor.name==="AsyncFunction";return {...{validator(S,...v){return e.validator(S,...V(v.length?v:t))},message(S,v){return typeof e.message=="function"?e.message(S,{...v,$params:V(v.$params?.length?v.$params:t)}):e.message},active(S,v){return typeof e.active=="function"?e.active(S,{...v,$params:V(v.$params?.length?v.$params:t)}):e.active??!0},exec(S){let v=e.validator(S,...V(t)),o;return v instanceof Promise?v.then(R=>(o=R,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)):(o=v,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)}},...l,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:d,_params:Ie(t)}}function ue(e){if(typeof e.validator=="function"){let r=ie(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Pe(e.validator)>1){let a=function(...l){return ie(e,...l)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function G(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function we(e){return G(e.value)}function B(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>B(n)))),r=="Map"&&(t=new Map([...e].map(n=>[B(n[0]),B(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,tt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=B(e[n]);}return t}function tt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function ce(e,t,r){return e instanceof Function?e(t,r??0):e}function re(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function X(e,t,r){let n,a=(...l)=>new Promise(d=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(d);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...l)=>new Promise(d=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(d);},0);}),a}function nt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let l=Number(r[a]),d=Number(n[a]);if(l>d)return 1;if(d>l)return -1;if(!isNaN(l)&&isNaN(d))return 1;if(isNaN(l)&&!isNaN(d))return -1}return 0}var q=nt(version,"3.5.0")!==-1;function at(){return Math.floor(Math.random()*Date.now()).toString()}function fe(){return typeof window>"u"?at():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Re(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),l=shallowRef(new Map);function d(p){let g=t.value.get(p);if(g)return g;{let f=ref({});return t.value.set(p,f),f}}function h(p){let g=r.value.get(p);if(g)return g;{let f=ref([]);return r.value.set(p,f),f}}function P(p,g,f){l.value.set(`${p}-${g}`,f);}function S(p,g){return l.value.get(`${p}-${g}`)}function v(p,g){p&&g!=null&&l.value.delete(`${p}-${g}`);}function o(p,g){n.value.set(p,g);}function R(p){return n.value.get(p)??!1}function D(p,g){e.value.set(p,g);}function m(p,g){let f=e.value.get(p);return f?u(g,f)?{valid:!0}:{valid:!1}:void 0}function u(p,g){let f=Object.keys(g),O=Object.keys(p);return O.length!==f.length||!O.every(E=>f.includes(E))?!1:O.every(E=>{let c=p[E],i=g[E];return !i||!c||typeof c=="function"||typeof i=="function"||typeof c=="number"||typeof c=="boolean"?!1:c._params?c._params?.every((s,$)=>{if(typeof i=="number"||typeof i=="boolean")return !0;{let y=V(i._params),x=V(c._params);return y?.[$]===x?.[$]}}):!0})}function F(p){let g=a.value.get(p);if(g)return g;{let f=ref(!1),O=ref(!0),I=ref({}),E=ref(!1);return a.value.set(p,{$pending:f,$valid:O,$metadata:I,$validating:E}),{$pending:f,$valid:O,$metadata:I,$validating:E}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),l.value.clear();}),{addRuleDeclEntry:D,setDirtyEntry:o,checkRuleDeclEntry:m,getDirtyState:R,trySetRuleStatusRef:F,getFieldsEntry:d,getCollectionsEntry:h,getArrayStatus:S,addArrayStatus:P,deleteArrayStatus:v,arrayStatusStorage:l}}function Oe(e,t){return G(e.value)&&G(t.value)&&!Object.entries(t.value).some(r=>pe(r))}function Ae(e){return !!e.value&&"$each"in e.value}function Me(e){return !!e.value&&G(e.value)}function pe(e){return G(e)&&"_validator"in e}function Y(e){return typeof e.value!="function"}function de(e){return G(e)&&"$fields"in e}function me(e){return !!e&&"$each"in e}function ge(e){return !!e&&"$rules"in e}function ye(e){return "$each"in e||"$errors"in e}function U({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function Fe(e,t=!1){return de(e)?ve(e.$fields):me(e)?{$errors:e.$field.$rules?U({field:e.$field,silent:t}):[],$each:e.$each.map(r=>Fe(r,t))}:ge(e)?e.$error?U({field:e,silent:t}):e.$externalErrors??[]:[]}function st(e,t=!1){return e.map(r=>Fe(r,t))}function ve(e,t=!1){return Object.fromEntries(Object.entries(e).map(([r,n])=>de(n)?[r,ve(n.$fields,t)]:me(n)?[r,{$errors:U({field:n.$field,silent:t}),$each:st(n.$each,t)}]:ge(n)?n.$error?[r,U({field:n,silent:t})]:[r,n.$externalErrors??[]]:[r,[]]))}function Ve(e){return computed(()=>ve(e.$fields))}var je=(r=>(r.Inline="__inline",r.Async="__async",r))(je||{});function ke(e,t){return computed(()=>e.value.some(r=>r[t]))}function Ge(e,t){return computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function Ne({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:l,storage:d,$debounce:h}){let P=effectScope(),S,v,{$pending:o,$valid:R,$metadata:D,$validating:m}=d.trySetRuleStatusRef(`${l}.${n}`);function u(){S=P.run(()=>{let E=computed(()=>({$invalid:!R.value,$params:y.value,...D.value})),c=computed(()=>Y(r)?typeof r.value.active=="function"?r.value.active(a.value,E.value):r.value.active:!0),i=computed(()=>{let T="",C=t?t[n]?.message:void 0;return C&&(typeof C=="function"?T=C(a.value,E.value):T=C),Y(r)&&(C&&!r.value._patched||(typeof r.value.message=="function"?T=r.value.message(a.value,E.value):T=r.value.message)),re(T)&&(T="Error",console.warn(`No error message defined for ${l}.${n}`)),T}),s=computed(()=>Y(r)&&r.value.type?r.value.type:n),$=computed(()=>Y(r)?r.value.validator:r.value),y=computed(()=>typeof r.value=="function"?[]:V(r.value._params??[])),x=computed(()=>`${l}.${s.value}`);return {$active:c,$message:i,$type:s,$validator:$,$params:y,$path:x}}),v=watch(S.$params,f,{deep:!0});}u();function F(){R.value=!0,e.value&&(o.value=!0);}async function p(E){let c=!1;try{F();let i=await E;if(typeof i=="boolean")c=i;else {let{$valid:s,...$}=i;c=s,D.value=$;}}catch{c=!1;}finally{o.value=!1;}return c}let g=X(p,h??100);async function f(){m.value=!0;let E=S.$validator.value,c=!1,i=E(a.value,...S.$params.value);if(i instanceof Promise)c=await g(i);else if(i!=null)if(typeof i=="boolean")c=i;else {let{$valid:s,...$}=i;c=s,D.value=$;}return R.value=c,m.value=!1,c}function O(){R.value=!0,D.value={},o.value=!1,m.value=!1,u();}function I(){v(),P.stop(),P=effectScope();}return reactive({...S,$pending:o,$valid:R,$metadata:D,$validate:f,$unwatch:I,$watch:u,$reset:O})}function ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:d,index:h,onUnwatch:P,$isArray:S}){let v=effectScope(),o,R=ref(!1),D=ref(!1),m=ref([]),u,F,p,g,f=()=>{};function O(){m.value=d.value??[];}O();function I(){let b=t.value,A=a.checkRuleDeclEntry(n,b);$.value=Object.fromEntries(Object.entries(b).filter(([M])=>M.startsWith("$"))),s.value=Object.fromEntries(Object.entries(t.value).filter(([M])=>!M.startsWith("$")).map(([M,k])=>{if(k){let oe=toRef(()=>k);return [M,Ne({$dirty:R,customMessages:r,rule:oe,ruleKey:M,state:e,path:n,storage:a,$debounce:$.value.$debounce})]}return []}).filter(M=>!!M.length)),c(),f=o.$debounce.value?X(i,o.$debounce.value??0):i,A?.valid!=null&&(R.value=a.getDirtyState(n),R.value&&f()),a.addRuleDeclEntry(n,b);}function E(){s.value&&Object.entries(s.value).forEach(([b,A])=>{A.$unwatch();}),g(),R.value&&a.setDirtyEntry(n,R.value),u(),F(),p(),v.stop(),v=effectScope(),P?.();}function c(){s.value&&Object.entries(s.value).forEach(([b,A])=>{A.$watch();}),o=v.run(()=>{let b=computed(()=>R.value),A=computed(()=>$.value.$debounce),M=computed(()=>$.value.$lazy!=null?$.value.$lazy:unref(l.lazy)),k=computed(()=>$.value.$rewardEarly!=null?$.value.$rewardEarly:unref(l.rewardEarly)),oe=computed(()=>$.value.$autoDirty!=null?$.value.$autoDirty:unref(l.autoDirty)),Qe=computed(()=>se.value&&!De.value&&R.value),Xe=computed(()=>U({field:{$dirty:R.value,$externalErrors:m.value,$rules:s.value}})),Ye=computed(()=>U({field:{$dirty:R.value,$externalErrors:m.value,$rules:s.value},silent:!0})),De=computed(()=>D.value||!k.value?Object.entries(s.value).some(([te,Q])=>Q.$pending):!1),se=computed(()=>m.value?.length?!0:!k.value||k.value&&D.value?Object.entries(s.value).some(([te,Q])=>!Q.$valid):!1),Ce=computed(()=>R.value&&!re(e.value)?m.value?.length?!1:k.value?Object.entries(s.value).every(([te,Q])=>Q.$valid):!se.value:!1);return watch(Ce,te=>{te&&(D.value=!1);}),{$error:Qe,$pending:De,$invalid:se,$valid:Ce,$debounce:A,$lazy:M,$errors:Xe,$silentErrors:Ye,$rewardEarly:k,$autoDirty:oe,$anyDirty:b}}),p=watch(d,O),u=watch(e,()=>{o.$autoDirty.value&&(R.value||(R.value=!0)),t.value instanceof Function&&I(),f(),o.$rewardEarly.value;},{deep:S?!0:q?1:!0}),g=watch(R,()=>{a.setDirtyEntry(n,R.value);}),F=watch(o.$valid,b=>{o.$rewardEarly.value&&b&&(D.value=!1);});}function i(){Object.entries(s.value).forEach(([b,A])=>{A.$validate();});}let s=ref(),$=ref();I();function y(){R.value=!1,m.value=[],Object.entries(s.value).forEach(([b,A])=>{A.$reset();}),o.$lazy.value||Object.entries(s.value).map(([b,A])=>A.$validate());}function x(){R.value||(R.value=!0,o.$rewardEarly.value,f());}let T=o.$debounce.value?X(C,o.$debounce.value??0):C;async function C(){try{if(D.value=!0,o.$autoDirty.value&&R.value&&!o.$pending.value)return !o.$error.value;{let b=Object.entries(s.value).map(([M,k])=>k.$validate());return (await Promise.allSettled(b)).every(M=>M.status==="fulfilled"?M.value:!1)}}catch{return !1}}function w(){m.value=[];}return o.$lazy.value||C(),reactive({$dirty:R,...o,$externalErrors:m,$value:e,$rules:s,$reset:y,$touch:x,$validate:T,$unwatch:E,$watch:c,$clearExternalErrors:w})}function We({$id:e,path:t,index:r,options:n,storage:a,stateValue:l,customMessages:d,rules:h,externalErrors:P}){let S=h.$key?h.$key:fe(),v=`${t}.${String(S)}`;typeof l.value=="object"&&l.value!=null&&(l.value.$id?v=`${t}.${l.value.$id}`:Object.defineProperties(l.value,{$id:{value:S,enumerable:!1,configurable:!1,writable:!1}}));let o=toRef(()=>P.value?.[r]),R=le({state:l,rulesDef:toRef(()=>h),customMessages:d,path:v,storage:a,options:n,externalErrors:o});if(R){let D=l.value?.$id;R.$id=D??String(S),a.addArrayStatus(e,R.$id,R);}return R}function He({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:d}){let h=effectScope(),P,S=effectScope(),v;if(Array.isArray(e.value)&&!t.value.$each)return null;let o=ref(),R=ref(e.value),D,m=ref({}),u=a.getCollectionsEntry(n);v=S.run(()=>{let i=computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(y=>typeof y!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(y=>pe(y)):!1),s=computed(()=>d.value?ye(d.value)?d.value.$errors??[]:[]:[]),$=computed(()=>d.value?ye(d.value)?d.value.$each??[]:[]:[]);return {isPrimitiveArray:i,$externalErrorsField:s,$externalErrorsEach:$}}),F(),g();function F(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(o.value=fe(),Object.defineProperties(e.value,{$id:{value:o.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(o.value=e.value.$id)),!v.isPrimitiveArray.value&&(R.value=m.value.$value,Array.isArray(e.value)&&t.value.$each?u.value=e.value.map((i,s)=>{let $=ce(t.value.$each,toRef(()=>i),s);if($){let y=We({$id:o.value,path:n,rules:$,stateValue:toRef(()=>i),index:s,options:l,storage:a,externalErrors:v.$externalErrorsEach});return y||null}}).filter(i=>!!i):u.value=[],m.value=ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:v.$externalErrorsField,$isArray:!0}));}function p(){if(Array.isArray(e.value)){let i=B(u.value);u.value=e.value.map((s,$)=>{let y=toRef(()=>s);if(s.$id&&u.value.find(x=>x.$id===s.$id)){let x=a.getArrayStatus(o.value,s.$id);return x?(x.$value=y,x):null}else {let x=ce(t.value.$each,y,$);if(x){let T=We({$id:o.value,path:n,rules:x,stateValue:y,index:$,options:l,storage:a,externalErrors:v.$externalErrorsEach});return T||null}}}).filter(s=>!!s),i.filter(s=>!e.value.find($=>s.$id===$.$id)).forEach((s,$)=>{a.deleteArrayStatus(o.value,$.toString());});}else u.value=[];}function g(){D=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?F():p();},{deep:q?1:!0,flush:"pre"}),P=h.run(()=>{let i=computed(()=>m.value.$dirty&&u.value.every(b=>b.$dirty)),s=computed(()=>m.value.$anyDirty||u.value.some(b=>b.$dirty)),$=computed(()=>m.value.$invalid||u.value.some(b=>b.$invalid)),y=computed(()=>m.value.$valid&&u.value.every(b=>b.$valid)),x=computed(()=>m.value.$error||u.value.some(b=>b.$error)),T=computed(()=>m.value.$pending||u.value.some(b=>b.$pending)),C=computed(()=>({$errors:m.value.$errors,$each:u.value.map(b=>b.$errors)})),w=computed(()=>({$errors:m.value.$silentErrors,$each:u.value.map(b=>b.$silentErrors)}));return {$dirty:i,$anyDirty:s,$invalid:$,$valid:y,$error:x,$pending:T,$errors:C,$silentErrors:w}}),v.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),D());}function f(){D&&D(),m.value&&m.value.$unwatch(),u.value&&u.value.forEach(i=>{"$dirty"in i&&i.$unwatch();}),h.stop(),h=effectScope(),S.stop(),S=effectScope(!0);}function O(){m.value.$touch(),u.value.forEach(i=>{i.$touch();});}function I(){m.value.$reset(),u.value.forEach(i=>{i.$reset();});}async function E(){try{return (await Promise.all([m.value.$validate(),...u.value.map(s=>s.$validate())])).every(s=>!!s)}catch{return !1}}function c(){}return reactive({$field:m,...P,$each:u,$value:e,$validate:E,$unwatch:f,$watch:g,$touch:O,$reset:I,$clearExternalErrors:c})}function Ee({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:l,options:d,externalErrors:h,validationGroups:P}){let S,v,o;function m(E=!0,c=!1){u.value=null,triggerRef(u);let i=Object.fromEntries(Object.entries(e.value).map(([y,x])=>{if(x){let T=toRef(t.value,y),C=toRef(()=>x),w=toRef(()=>h.value?.[y]);return [y,le({state:T,rulesDef:C,customMessages:r,path:n?`${n}.${y}`:y,storage:l,options:d,externalErrors:w})]}return []}).filter(y=>!!y.length&&y[1]!=null)),s=Object.fromEntries(Object.entries(unref(h)??{}).filter(([y])=>!(y in e.value)).map(([y,x])=>{if(x){let T=toRef(()=>({})),C=toRef(()=>x);return [y,le({state:ref(void 0),rulesDef:T,customMessages:r,path:n?`${n}.${y}`:y,storage:l,options:d,externalErrors:C})]}return []})),$=Object.fromEntries(Object.entries(P?.(i)??{}).map(([y,x])=>x.length?[y,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(T=>[T,ke(toRef(()=>x),T)])),...Object.fromEntries(["$errors","$silentErrors"].map(T=>[T,Ge(toRef(()=>x),T)]))}]:[]));u.value={...i,...s,...$},E&&f();}let u=l.getFieldsEntry(n);m();function F(){m(!1),Object.entries(u.value).forEach(([E,c])=>{c.$reset();}),f();}function p(){Object.entries(u.value).forEach(([E,c])=>{c.$touch();});}async function g(){try{return (await Promise.allSettled(Object.entries(u.value).map(([c,i])=>i.$validate()))).every(c=>c.status==="fulfilled"?c.value:!1)}catch{return !1}}function f(){a&&(o=watch(a,()=>{O(),m();},{deep:q?1:!0,flush:"post"})),S=effectScope(),v=S.run(()=>{let E=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([C,w])=>w.$dirty)),c=computed(()=>Object.entries(u.value).some(([C,w])=>w.$dirty)),i=computed(()=>Object.entries(u.value).some(([C,w])=>w.$invalid)),s=computed(()=>Object.entries(u.value).every(([C,w])=>w.$valid)),$=computed(()=>E.value&&!y.value&&i.value),y=computed(()=>Object.entries(u.value).some(([C,w])=>w.$pending)),x=computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,w])=>[C,w.$errors]))),T=computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,w])=>[C,w.$silentErrors])));return {$dirty:E,$anyDirty:c,$invalid:i,$valid:s,$error:$,$pending:y,$errors:x,$silentErrors:T}});}function O(){u.value&&Object.entries(u.value).forEach(([E,c])=>{c.$unwatch();}),o?.(),S.stop(),S=effectScope();}function I(){Object.entries(u.value).forEach(([E,c])=>{c.$clearExternalErrors();});}return reactive({...v,$fields:u,$value:t,$reset:F,$touch:p,$validate:g,$unwatch:O,$watch:f,$clearExternalErrors:I})}function le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:d,index:h,onUnwatch:P}){return Ae(t)?He({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:h,externalErrors:d}):Oe(e,t)&&we(e)?Ee({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:l,index:h,externalErrors:d}):Me(t)?ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,index:h,externalErrors:d,onUnwatch:P}):null}function be(e,t,r,n){let a=Re(),l=computed(()=>unref(r.externalErrors)),d=reactive(Ee({rootRules:e,scopeRules:e,state:t,customMessages:n?.(),storage:a,options:r,externalErrors:l,validationGroups:r.validationGroups})),h=Ve(d);return {regle:d,errors:h}}function xe(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,l,d){let h=isRef(l)?l:computed(typeof l=="function"?l:()=>l),P={...r,...d},S=isRef(a)?a:ref(a),v=B(toRaw(S.value)),{regle:o,errors:R}=be(h,S,P,e);function D(){o.$unwatch(),m(a,v),o.$reset();}function m(p,g){Object.entries(g).forEach(([f,O])=>{let I=isRef(p)?p.value:p,E=isRef(I[f])?I[f].value:I[f],c=isRef(g[f])?g[f]._value:g[f];Array.isArray(c)&&Array.isArray(E)?(I[f]=[],c.forEach((i,s)=>{I[f][s]={},m(I[f][s],c[s]);})):G(c)?m(E,c):isRef(I[f])?I[f].value=c:I[f]=c;});}let u=computed(()=>!(o.$invalid||o.$pending));async function F(){return o.$touch(),await o.$validate()?S.value:!1}return {regle:o,r$:o,errors:R,resetAll:D,validateState:F,ready:u,state:S}}return n}var ze=xe();function Te(){function e(t,r){return r}return e}var he=Te();function Je({rules:e,modifiers:t}){let r=xe(e,t),n=Te();return {useRegle:r,inferRules:n}}export{je as InternalRuleType,ue as createRule,Je as defineRegleConfig,he as inferRules,V as unwrapRuleParameters,ze as useRegle};
|
|
1
|
+
import {unref,version,isRef,toRef,computed,ref,toRaw,reactive,shallowRef,onScopeDispose,triggerRef,watch,effectScope}from'vue';var ce=(r=>(r.Inline="__inline",r.Async="__async",r))(ce||{});function Ae(e,t){return computed(()=>e.value.some(r=>r[t]))}function Me(e,t){return computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function j(e){return e.map(t=>t instanceof Function?t():unref(t))}function Fe(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function Ve(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 fe(e,...t){let{message:r,validator:n,active:a,type:o,...m}=e,T=o==="__async"||n.constructor.name==="AsyncFunction";return {...{validator($,...s){return e.validator($,...j(s.length?s:t))},message($,s){return typeof e.message=="function"?e.message($,{...s,$params:j(s.$params?.length?s.$params:t)}):e.message},active($,s){return typeof e.active=="function"?e.active($,{...s,$params:j(s.$params?.length?s.$params:t)}):e.active??!0},exec($){let s=e.validator($,...j(t)),i;return s instanceof Promise?s.then(h=>(i=h,typeof i=="object"&&"$valid"in i?i.$valid:typeof i=="boolean"?i:!1)):(i=s,typeof i=="object"&&"$valid"in i?i.$valid:typeof i=="boolean"?i:!1)}},...m,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:T,_params:Fe(t)}}function Re(e){if(typeof e.validator=="function"){let r=fe(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Ve(e.validator)>1){let a=function(...o){return fe(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 B(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function je(e){return B(e.value)}function U(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>U(n)))),r=="Map"&&(t=new Map([...e].map(n=>[U(n[0]),U(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,lt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=U(e[n]);}return t}function lt(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 pe(e,t,r){return e instanceof Function?e(t,r??0):e}function ae(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 K(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 st(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 J=st(version,"3.5.0")!==-1;function it(){return Math.floor(Math.random()*Date.now()).toString()}function de(){return typeof window>"u"?it():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function me(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),o=shallowRef(new Map);function m(p){let c=t.value.get(p);if(c)return c;{let x=ref({});return t.value.set(p,x),x}}function T(p){let c=r.value.get(p);if(c)return c;{let x=ref([]);return r.value.set(p,x),x}}function P(p,c,x){o.value.set(`${p}-${c}`,x);}function S(p,c){return o.value.get(`${p}-${c}`)}function $(p,c){p&&c!=null&&o.value.delete(`${p}-${c}`);}function s(p,c){n.value.set(p,c);}function i(p){return n.value.get(p)??!1}function h(p,c){e.value.set(p,c);}function y(p,c){let x=e.value.get(p);return x?u(c,x)?{valid:!0}:{valid:!1}:void 0}function u(p,c){let x=Object.keys(c),E=Object.keys(p);return E.length!==x.length||!E.every(v=>x.includes(v))?!1:E.every(v=>{let d=p[v],f=c[v];return !f||!d||typeof d=="function"||typeof f=="function"||typeof d=="number"||typeof d=="boolean"?!1:d._params?d._params?.every((R,b)=>{if(typeof f=="number"||typeof f=="boolean")return !0;{let l=j(f._params),g=j(d._params);return l?.[b]===g?.[b]}}):!0})}function O(p){let c=a.value.get(p);if(c)return c;{let x=ref(!1),E=ref(!0),A=ref({}),v=ref(!1);return a.value.set(p,{$pending:x,$valid:E,$metadata:A,$validating:v}),{$pending:x,$valid:E,$metadata:A,$validating:v}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:h,setDirtyEntry:s,checkRuleDeclEntry:y,getDirtyState:i,trySetRuleStatusRef:O,getFieldsEntry:m,getCollectionsEntry:T,getArrayStatus:S,addArrayStatus:P,deleteArrayStatus:$,arrayStatusStorage:o}}function _e(e,t){return B(e.value)&&B(t.value)&&!Object.entries(t.value).some(r=>ee(r))}function Ge(e){return !!e.value&&"$each"in e.value}function ke(e){return !!e.value&&B(e.value)}function ee(e){return B(e)&&"_validator"in e}function te(e){return typeof e.value!="function"}function ye(e){return B(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 H({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function Be(e,t=!1){return ye(e)?Se(e.$fields):ge(e)?{$errors:e.$field.$rules?H({field:e.$field,silent:t}):[],$each:e.$each.map(r=>Be(r,t))}:ve(e)?e.$error?H({field:e,silent:t}):e.$externalErrors??[]:[]}function ft(e,t=!1){return e.map(r=>Be(r,t))}function Se(e,t=!1){return Object.fromEntries(Object.entries(e).map(([r,n])=>ye(n)?[r,Se(n.$fields,t)]:ge(n)?[r,{$errors:H({field:n.$field,silent:t}),$each:ft(n.$each,t)}]:ve(n)?n.$error?[r,H({field:n,silent:t})]:[r,n.$externalErrors??[]]:[r,[]]))}function Ne(e){return computed(()=>Se(e.$fields))}function We({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:m,$debounce:T}){let P=effectScope(),S,$,s=ref(!1),{$pending:i,$valid:h,$metadata:y,$validating:u}=m.trySetRuleStatusRef(`${o}.${n}`);function O(){S=P.run(()=>{let d=computed(()=>({$invalid:!h.value,$params:g.value,...y.value})),f=computed(()=>te(r)?typeof r.value.active=="function"?r.value.active(a.value,d.value):r.value.active:!0),R=computed(()=>{let C="",D=t?t[n]?.message:void 0;return D&&(typeof D=="function"?C=D(a.value,d.value):C=D),te(r)&&(D&&!r.value._patched||(typeof r.value.message=="function"?C=r.value.message(a.value,d.value):C=r.value.message)),ae(C)&&(C="Error",console.warn(`No error message defined for ${o}.${n}`)),C}),b=computed(()=>te(r)&&r.value.type?r.value.type:n),l=computed(()=>te(r)?r.value.validator:r.value),g=computed(()=>typeof r.value=="function"?[]:j(r.value._params??[])),I=computed(()=>`${o}.${b.value}`);return {$active:f,$message:R,$type:b,$validator:l,$params:g,$path:I}}),$=watch(S.$params,E,{deep:!0});}O();function p(){h.value=!0,e.value&&(i.value=!0);}async function c(){let d=S.$validator.value,f=d(a.value,...S.$params.value),R=!1,b=a.value;try{p();let l;if(f instanceof Promise?l=await f:l=f,a.value!==b)return !0;if(typeof l=="boolean")R=l;else {let{$valid:g,...I}=l;R=g,y.value=I;}}catch{R=!1;}finally{i.value=!1;}return R}let x=K(c,T??200);async function E(){u.value=!0;let d=!1;if(ee(r.value)&&r.value._async)d=await x();else {let f=S.$validator.value,R=f(a.value,...S.$params.value);if(R instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(R!=null)if(typeof R=="boolean")d=R;else {let{$valid:b,...l}=R;d=b,y.value=l;}}return h.value=d,u.value=!1,d}function A(){h.value=!0,y.value={},i.value=!1,u.value=!1,O();}function v(){$(),P.stop(),P=effectScope();}return reactive({...S,$pending:i,$valid:h,$metadata:y,_haveAsync:s,$validating:u,$validate:E,$unwatch:v,$watch:O,$reset:A})}function le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:T,onUnwatch:P,$isArray:S}){let $=effectScope(),s,i=ref(!1),h=ref(!1),y=ref([]),u,O,p,c,x,E=()=>{};function A(){y.value=m.value??[];}A();function v(){let M=t.value,F=a.checkRuleDeclEntry(n,M);g.value=Object.fromEntries(Object.entries(M).filter(([V])=>V.startsWith("$"))),l.value=Object.fromEntries(Object.entries(t.value).filter(([V])=>!V.startsWith("$")).map(([V,k])=>{if(k){let ie=toRef(()=>k);return [V,We({$dirty:i,customMessages:r,rule:ie,ruleKey:V,state:e,path:n,storage:a,$debounce:g.value.$debounce})]}return []}).filter(V=>!!V.length)),R(),d(),F?.valid!=null&&(i.value=a.getDirtyState(n),i.value&&E()),a.addRuleDeclEntry(n,M);}function d(){E=s.$debounce.value?K(b,s.$debounce.value??s.haveAnyAsyncRule?100:0):b;}function f(){l.value&&Object.entries(l.value).forEach(([M,F])=>{F.$unwatch();}),c(),i.value&&a.setDirtyEntry(n,i.value),u(),O(),p(),$.stop(),$=effectScope(),P?.(),x?.();}function R(){l.value&&Object.entries(l.value).forEach(([M,F])=>{F.$watch();}),s=$.run(()=>{let M=computed(()=>i.value),F=computed(()=>g.value.$debounce),V=computed(()=>g.value.$lazy!=null?g.value.$lazy:unref(o.lazy)),k=computed(()=>g.value.$rewardEarly!=null?g.value.$rewardEarly:unref(o.rewardEarly)),ie=computed(()=>g.value.$autoDirty!=null?g.value.$autoDirty:unref(o.autoDirty)),Ze=computed(()=>Object.entries(l.value).some(([z,N])=>N.$validating)),Ie=computed(()=>ue.value&&!Pe.value&&i.value),Ke=computed(()=>Ie.value?H({field:{$dirty:i.value,$externalErrors:y.value,$rules:l.value}}):[]),et=computed(()=>H({field:{$dirty:i.value,$externalErrors:y.value,$rules:l.value},silent:!0})),Pe=computed(()=>h.value||!k.value?Object.entries(l.value).some(([z,N])=>N.$pending):!1),ue=computed(()=>y.value?.length?!0:!k.value||k.value&&h.value?Object.entries(l.value).some(([z,N])=>!N.$valid):!1),we=computed(()=>i.value&&!ae(e.value)&&!Ze.value?y.value?.length?!1:k.value?Object.entries(l.value).every(([z,N])=>N.$valid):!ue.value:!1),tt=computed(()=>Object.entries(l.value).some(([z,N])=>N._haveAsync));return watch(we,z=>{z&&(h.value=!1);}),{$error:Ie,$pending:Pe,$invalid:ue,$valid:we,$debounce:F,$lazy:V,$errors:Ke,$silentErrors:et,$rewardEarly:k,$autoDirty:ie,$anyDirty:M,haveAnyAsyncRule:tt}}),p=watch(m,A),u=watch(e,()=>{s.$autoDirty.value&&(i.value||(i.value=!0)),t.value instanceof Function&&v(),E(),s.$rewardEarly.value;},{deep:S?!0:J?1:!0}),c=watch(i,()=>{a.setDirtyEntry(n,i.value);}),O=watch(s.$valid,M=>{s.$rewardEarly.value&&M&&(h.value=!1);}),x=watch(s.haveAnyAsyncRule,d);}function b(){Object.entries(l.value).forEach(([M,F])=>{F.$validate();});}let l=ref(),g=ref();v();function I(){i.value=!1,y.value=[],Object.entries(l.value).forEach(([M,F])=>{F.$reset();}),s.$lazy.value||Object.entries(l.value).map(([M,F])=>F.$validate());}function C(){i.value||(i.value=!0,s.$rewardEarly.value,E());}let D=s.$debounce.value?K(w,s.$debounce.value??0):w;async function w(){try{if(h.value=!0,s.$autoDirty.value&&i.value&&!s.$pending.value)return !s.$error.value;{let M=Object.entries(l.value).map(([V,k])=>k.$validate());return (await Promise.allSettled(M)).every(V=>V.status==="fulfilled"?V.value:!1)}}catch{return !1}}function Xe(){y.value=[];}return s.$lazy.value||w(),reactive({$dirty:i,...s,$externalErrors:y,$value:e,$rules:l,$reset:I,$touch:C,$validate:D,$unwatch:f,$watch:R,$clearExternalErrors:Xe})}function qe({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:m,rules:T,externalErrors:P}){let S=T.$key?T.$key:de(),$=`${t}.${String(S)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?$=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:S,enumerable:!1,configurable:!1,writable:!1}}));let s=toRef(()=>P.value?.[r]),i=se({state:o,rulesDef:toRef(()=>T),customMessages:m,path:$,storage:a,options:n,externalErrors:s});if(i){let h=o.value?.$id;i.$id=h??String(S),a.addArrayStatus(e,i.$id,i);}return i}function Le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m}){let T=effectScope(),P,S=effectScope(),$;if(Array.isArray(e.value)&&!t.value.$each)return null;let s=ref(),i=ref(e.value),h,y=ref({}),u=a.getCollectionsEntry(n);$=S.run(()=>{let f=computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(l=>typeof l!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(l=>ee(l)):!1),R=computed(()=>m.value?$e(m.value)?m.value.$errors??[]:[]:[]),b=computed(()=>m.value?$e(m.value)?m.value.$each??[]:[]:[]);return {isPrimitiveArray:f,$externalErrorsField:R,$externalErrorsEach:b}}),O(),c();function O(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(s.value=de(),Object.defineProperties(e.value,{$id:{value:s.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(s.value=e.value.$id)),!$.isPrimitiveArray.value&&(i.value=y.value.$value,Array.isArray(e.value)&&t.value.$each?u.value=e.value.map((f,R)=>{let b=pe(t.value.$each,toRef(()=>f),R);if(b){let l=qe({$id:s.value,path:n,rules:b,stateValue:toRef(()=>f),index:R,options:o,storage:a,externalErrors:$.$externalErrorsEach});return l||null}}).filter(f=>!!f):u.value=[],y.value=le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:$.$externalErrorsField,$isArray:!0}));}function p(){if(Array.isArray(e.value)){let f=U(u.value);u.value=e.value.map((R,b)=>{let l=toRef(()=>R);if(R.$id&&u.value.find(g=>g.$id===R.$id)){let g=a.getArrayStatus(s.value,R.$id);return g?(g.$value=l,g):null}else {let g=pe(t.value.$each,l,b);if(g){let I=qe({$id:s.value,path:n,rules:g,stateValue:l,index:b,options:o,storage:a,externalErrors:$.$externalErrorsEach});return I||null}}}).filter(R=>!!R),f.filter(R=>!e.value.find(b=>R.$id===b.$id)).forEach((R,b)=>{a.deleteArrayStatus(s.value,b.toString());});}else u.value=[];}function c(){h=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?O():p();},{deep:J?1:!0,flush:"pre"}),P=T.run(()=>{let f=computed(()=>y.value.$dirty&&u.value.every(w=>w.$dirty)),R=computed(()=>y.value.$anyDirty||u.value.some(w=>w.$dirty)),b=computed(()=>y.value.$invalid||u.value.some(w=>w.$invalid)),l=computed(()=>y.value.$valid&&u.value.every(w=>w.$valid)),g=computed(()=>y.value.$error||u.value.some(w=>w.$error)),I=computed(()=>y.value.$pending||u.value.some(w=>w.$pending)),C=computed(()=>({$errors:y.value.$errors,$each:u.value.map(w=>w.$errors)})),D=computed(()=>({$errors:y.value.$silentErrors,$each:u.value.map(w=>w.$silentErrors)}));return {$dirty:f,$anyDirty:R,$invalid:b,$valid:l,$error:g,$pending:I,$errors:C,$silentErrors:D}}),$.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 x(){h&&h(),y.value&&y.value.$unwatch(),u.value&&u.value.forEach(f=>{"$dirty"in f&&f.$unwatch();}),T.stop(),T=effectScope(),S.stop(),S=effectScope(!0);}function E(){y.value.$touch(),u.value.forEach(f=>{f.$touch();});}function A(){y.value.$reset(),u.value.forEach(f=>{f.$reset();});}async function v(){try{return (await Promise.all([y.value.$validate(),...u.value.map(R=>R.$validate())])).every(R=>!!R)}catch{return !1}}function d(){}return reactive({$field:y,...P,$each:u,$value:e,$validate:v,$unwatch:x,$watch:c,$touch:E,$reset:A,$clearExternalErrors:d})}function he({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:m,externalErrors:T,validationGroups:P}){let S,$,s=null;function y(v=!0,d=!1){u.value=null,triggerRef(u);let f=Object.fromEntries(Object.entries(e.value).map(([l,g])=>{if(g){let I=toRef(t.value,l),C=toRef(()=>g),D=toRef(()=>T.value?.[l]);return [l,se({state:I,rulesDef:C,customMessages:r,path:n?`${n}.${l}`:l,storage:o,options:m,externalErrors:D})]}return []}).filter(l=>!!l.length&&l[1]!=null)),R=Object.fromEntries(Object.entries(unref(T)??{}).filter(([l])=>!(l in e.value)).map(([l,g])=>{if(g){let I=toRef(()=>({})),C=toRef(()=>g);return [l,se({state:ref(void 0),rulesDef:I,customMessages:r,path:n?`${n}.${l}`:l,storage:o,options:m,externalErrors:C})]}return []})),b=Object.fromEntries(Object.entries(P?.(f)??{}).map(([l,g])=>g.length?[l,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(I=>[I,Ae(toRef(()=>g),I)])),...Object.fromEntries(["$errors","$silentErrors"].map(I=>[I,Me(toRef(()=>g),I)]))}]:[]));u.value={...f,...R,...b},v&&x();}let u=o.getFieldsEntry(n);y();function O(){y(!1),Object.entries(u.value).forEach(([v,d])=>{d.$reset();}),x();}function p(){Object.entries(u.value).forEach(([v,d])=>{d.$touch();});}async function c(){try{return (await Promise.allSettled(Object.entries(u.value).map(([d,f])=>f.$validate()))).every(d=>d.status==="fulfilled"?d.value:!1)}catch{return !1}}function x(){a&&(s=watch(a,()=>{E(),y();},{deep:J?1:!0,flush:"post"})),S=effectScope(),$=S.run(()=>{let v=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([C,D])=>D.$dirty)),d=computed(()=>Object.entries(u.value).some(([C,D])=>D.$dirty)),f=computed(()=>Object.entries(u.value).some(([C,D])=>D.$invalid)),R=computed(()=>Object.entries(u.value).every(([C,D])=>D.$valid)),b=computed(()=>v.value&&!l.value&&f.value),l=computed(()=>Object.entries(u.value).some(([C,D])=>D.$pending)),g=computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,D])=>[C,D.$errors]))),I=computed(()=>Object.fromEntries(Object.entries(u.value).map(([C,D])=>[C,D.$silentErrors])));return {$dirty:v,$anyDirty:d,$invalid:f,$valid:R,$error:b,$pending:l,$errors:g,$silentErrors:I}});}function E(){u.value&&Object.entries(u.value).forEach(([v,d])=>{d.$unwatch();}),s?.(),S.stop(),S=effectScope();}function A(){Object.entries(u.value).forEach(([v,d])=>{d.$clearExternalErrors();});}return reactive({...$,$fields:u,$value:t,$reset:O,$touch:p,$validate:c,$unwatch:E,$watch:x,$clearExternalErrors:A})}function se({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:T,onUnwatch:P}){return Ge(t)?Le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:T,externalErrors:m}):_e(e,t)&&je(e)?he({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:T,externalErrors:m}):ke(t)?le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:T,externalErrors:m,onUnwatch:P}):null}function xe(e,t,r,n){let a=me(),o=computed(()=>unref(r.externalErrors)),m=reactive(he({rootRules:e,scopeRules:e,state:t,customMessages:n?.(),storage:a,options:r,externalErrors:o,validationGroups:r.validationGroups})),T=Ne(m);return {regle:m,errors:T}}function Te(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,o,m){let T=isRef(o)?o:computed(typeof o=="function"?o:()=>o),P={...r,...m},S=isRef(a)?a:ref(a),$=U(toRaw(S.value)),{regle:s}=xe(T,S,P,e);function i(){s.$unwatch(),h(a,$),s.$reset();}function h(O,p){Object.entries(p).forEach(([c,x])=>{let E=isRef(O)?O.value:O,A=isRef(E[c])?E[c].value:E[c],v=isRef(p[c])?p[c]._value:p[c];Array.isArray(v)&&Array.isArray(A)?(E[c]=[],v.forEach((d,f)=>{E[c][f]={},h(E[c][f],v[f]);})):B(v)?h(A,v):isRef(E[c])?E[c].value=v:E[c]=v;});}let y=computed(()=>!(s.$invalid||s.$pending));async function u(){return s.$touch(),await s.$validate()?S.value:!1}return {r$:s,resetAll:i,validateState:u,ready:y,state:S}}return n}var Ye=Te();function De(){function e(t,r){return r}return e}var Ce=De();function Qe({rules:e,modifiers:t}){let r=Te(e,t),n=De();return {useRegle:r,inferRules:n}}export{ce as InternalRuleType,Re as createRule,Qe as defineRegleConfig,Ce as inferRules,j as unwrapRuleParameters,Ye as useRegle};
|
package/package.json
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@regle/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Typescript-first model-based form validation library for Vue 3",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"vue": "^3.1.0"
|
|
7
7
|
},
|
|
8
8
|
"devDependencies": {
|
|
9
9
|
"@total-typescript/ts-reset": "0.6.1",
|
|
10
|
-
"@types/node": "22.9.
|
|
11
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
12
|
-
"@typescript-eslint/parser": "8.
|
|
10
|
+
"@types/node": "22.9.3",
|
|
11
|
+
"@typescript-eslint/eslint-plugin": "8.15.0",
|
|
12
|
+
"@typescript-eslint/parser": "8.15.0",
|
|
13
13
|
"@vue/test-utils": "2.4.6",
|
|
14
14
|
"bumpp": "9.8.1",
|
|
15
15
|
"changelogithub": "0.13.11",
|
|
16
16
|
"cross-env": "7.0.3",
|
|
17
|
-
"eslint": "9.
|
|
17
|
+
"eslint": "9.15.0",
|
|
18
18
|
"eslint-config-prettier": "9.1.0",
|
|
19
|
-
"eslint-plugin-vue": "9.
|
|
19
|
+
"eslint-plugin-vue": "9.31.0",
|
|
20
20
|
"prettier": "3.3.3",
|
|
21
21
|
"tsup": "8.3.5",
|
|
22
|
-
"type-fest": "4.
|
|
22
|
+
"type-fest": "4.28.0",
|
|
23
23
|
"typescript": "5.6.3",
|
|
24
|
-
"vitest": "2.1.
|
|
25
|
-
"vue": "3.5.
|
|
24
|
+
"vitest": "2.1.5",
|
|
25
|
+
"vue": "3.5.13",
|
|
26
26
|
"vue-eslint-parser": "9.4.3",
|
|
27
27
|
"vue-tsc": "2.1.10"
|
|
28
28
|
},
|