@regle/core 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -11,6 +11,7 @@ type ExcludeByType<T, U> = {
11
11
  [K in keyof T as T[K] extends U ? never : K]: T[K] extends U ? never : T[K];
12
12
  };
13
13
  type NonPresentKeys<TSource extends Record<string, any>, Target extends Record<string, any>> = Omit<Target, keyof TSource>;
14
+ type NoInferLegacy<A extends any> = [A][A extends any ? 0 : never];
14
15
 
15
16
  type ArrayElement<T> = T extends Array<infer U> ? U : never;
16
17
 
@@ -207,14 +208,11 @@ type RegleCollectionRuleDefinition<TValue = any[], TCustomRules extends Partial<
207
208
  * @argument
208
209
  * createRule arguments options
209
210
  */
210
- interface RegleRuleInit<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition, TAsync extends boolean = TReturn extends Promise<any> ? true : false> {
211
- type: {
212
- value: TValue;
213
- params: TParams;
214
- };
211
+ interface RegleRuleInit<TValue extends any, TParams extends [...any[]], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition, TAsync extends boolean = TReturn extends Promise<any> ? true : false> {
212
+ type?: string;
215
213
  validator: (value: Maybe<TValue>, ...args: TParams) => TReturn;
216
- message: string | string[] | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string | string[]);
217
- active?: boolean | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => boolean);
214
+ message: string | string[] | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<NoInferLegacy<TParams>, TMetadata>) => string | string[]);
215
+ active?: boolean | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<NoInferLegacy<TParams>, TMetadata>) => boolean);
218
216
  }
219
217
  /**
220
218
  * @argument
@@ -432,8 +430,7 @@ interface RegleCollectionStatus<TRules extends RegleRuleDecl | ReglePartialValid
432
430
  * import {ruleHelpers} from '@regle/rules';
433
431
  *
434
432
  * export const isFoo = createRule({
435
- * type: defineType<string>('foo'),
436
- * validator(value) {
433
+ * validator(value: string) {
437
434
  * if (ruleHelpers.isFilled(value)) {
438
435
  * return value === 'foo';
439
436
  * }
@@ -444,10 +441,6 @@ interface RegleCollectionStatus<TRules extends RegleRuleDecl | ReglePartialValid
444
441
  * ```
445
442
  */
446
443
  declare function createRule<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn, TAsync extends boolean = TReturn extends Promise<any> ? true : false>(definition: RegleRuleInit<TValue, TParams, TReturn, TMetadata, TAsync>): InferRegleRule<TValue, TParams, TAsync, TMetadata>;
447
- declare function defineType<TValue extends any = unknown, TParams extends any[] = []>(ruleName: string): {
448
- value: TValue;
449
- params: TParams;
450
- };
451
444
 
452
445
  /**
453
446
  * Returns a clean list of parameters
@@ -462,4 +455,4 @@ declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarat
462
455
  modifiers?: RegleBehaviourOptions;
463
456
  }): <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<TState, Partial<AllRulesDeclarations> & TCustomRules>, TExternal extends RegleExternalErrorTree<TState>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = keyof TRules extends keyof TState ? true : false>(state: vue.MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: TValid extends true ? TRules | vue.ComputedRef<TRules> | (() => TRules) : never, options?: (Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<TState, TRules, TExternal, TValidationGroups>) | undefined) => Regle<TState, TRules, TExternal, TValidationGroups>;
464
457
 
465
- export { type DeepMaybeRef, type FormRuleDeclaration, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleFieldStatus, type RegleFormPropertyType, 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 RegleValidationTree, type UnwrapRegleUniversalParams, createRule, defineRegleConfig, defineType, unwrapRuleParameters, useRegle };
458
+ export { type DeepMaybeRef, type FormRuleDeclaration, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleExternalValidationErrorsReport, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleValidationTree, type UnwrapRegleUniversalParams, createRule, defineRegleConfig, unwrapRuleParameters, useRegle };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import {unref,isRef,toRef,computed,ref,toRaw,reactive,shallowRef,onScopeDispose,triggerRef,watch,effectScope,toRefs}from'vue';function M(e){return e.map(t=>t instanceof Function?t():unref(t))}function Ce(e){return e.map(t=>t instanceof Function||isRef(t)?t:toRef(()=>t))}function De(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(s=>s.trim()).filter(s=>s.includes("=")).length+e.length}function ie(e,...t){let{message:r,validator:n,active:a,...s}=e,$=n.constructor.name==="AsyncFunction";return {...{validator(v,...l){return e.validator(v,...M(l.length?l:t))},message(v,l){return typeof e.message=="function"?e.message(v,{...l,$params:M(l.$params?.length?l.$params:t)}):e.message},active(v,l){return typeof e.active=="function"?e.active(v,{...l,$params:M(l.$params?.length?l.$params:t)}):e.active??!0},exec(v){let l=e.validator(v,...M(t)),o;return l instanceof Promise?l.then(C=>(o=C,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)):(o=l,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)}},...s,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:$,_params:Ce(t)}}function ue(e){if(typeof e.validator=="function"){let r=ie(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(De(e.validator)>1){let a=function(...s){return ie(e,...s)};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 ce(e){return e}function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pe(e){return k(e.value)}function B(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>B(n)))),r=="Map"&&(t=new Map([...e].map(n=>[B(n[0]),B(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,Ke(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=B(e[n]);}return t}function Ke(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function fe(e,t,r){return e instanceof Function?e(t,r??0):e}function ee(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 Re(e,t,r){let n,a=(...s)=>new Promise($=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...s])).then($);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...s)=>new Promise($=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...s])).then($);},0);}),a}function pe(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),s=shallowRef(new Map);function $(p){let R=t.value.get(p);if(R)return R;{let c=ref({});return t.value.set(p,c),c}}function T(p){let R=r.value.get(p);if(R)return R;{let c=ref([]);return r.value.set(p,c),c}}function D(p,R,c){s.value.set(`${p}-${R}`,c);}function v(p,R){return s.value.get(`${p}-${R}`)}function l(p,R){p&&R!=null&&s.value.delete(`${p}-${R}`);}function o(p,R){n.value.set(p,R);}function C(p){return n.value.get(p)??!1}function E(p,R){e.value.set(p,R);}function g(p,R){let c=e.value.get(p);return c?u(R,c)?{valid:!0}:{valid:!1}:void 0}function u(p,R){let c=Object.keys(R),I=Object.keys(p);return I.length!==c.length||!I.every(y=>c.includes(y))?!1:I.every(y=>{let d=p[y],i=R[y];return !i||!d||typeof d=="function"||typeof i=="function"||typeof d=="number"||typeof d=="boolean"?!1:d._params?d._params?.every((f,h)=>{if(typeof i=="number"||typeof i=="boolean")return !0;{let m=M(i._params),P=M(d._params);return m?.[h]===P?.[h]}}):!0})}function A(p){let R=a.value.get(p);if(R)return R;{let c=ref(!1),I=ref(!0),S=ref({}),y=ref(!1);return a.value.set(p,{$pending:c,$valid:I,$metadata:S,$validating:y}),{$pending:c,$valid:I,$metadata:S,$validating:y}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),s.value.clear();}),{addRuleDeclEntry:E,setDirtyEntry:o,checkRuleDeclEntry:g,getDirtyState:C,trySetRuleStatusRef:A,getFieldsEntry:$,getCollectionsEntry:T,getArrayStatus:v,addArrayStatus:D,deleteArrayStatus:l,arrayStatusStorage:s}}function we(e,t){return k(e.value)&&k(t.value)&&!Object.entries(t.value).some(r=>de(r))}function Oe(e){return !!e.value&&"$each"in e.value}function Ae(e){return !!e.value&&k(e.value)}function de(e){return k(e)&&"_validator"in e}function X(e){return typeof e.value!="function"}function me(e){return k(e)&&"$fields"in e}function ge(e){return !!e&&"$each"in e}function $e(e){return !!e&&"$rules"in e}function ve(e){return "$each"in e||"$errors"in e}function G({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function Me(e,t=!1){return me(e)?q(e.$fields):ge(e)?{$errors:e.$field.$rules?G({field:e.$field,silent:t}):[],$each:e.$each.map(r=>Me(r,t))}:$e(e)?e.$error?G({field:e,silent:t}):e.$externalErrors??[]:[]}function te(e,t=!1){return e.map(r=>Me(r,t))}function q(e,t=!1){return Object.fromEntries(Object.entries(e).map(([r,n])=>me(n)?[r,q(n.$fields,t)]:ge(n)?[r,{$errors:G({field:n.$field,silent:t}),$each:te(n.$each,t)}]:$e(n)?n.$error?[r,G({field:n,silent:t})]:[r,n.$externalErrors??[]]:[r,[]]))}function Fe(e){return computed(()=>q(e.$fields))}var re=(r=>(r.Inline="__inline",r.Async="__async",r))(re||{});function Ve(e,t){return computed(()=>e.value.some(r=>r[t]))}function _e(e,t){return computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function rt(){return Math.floor(Math.random()*Date.now()).toString()}function ye(){return typeof window>"u"?rt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Ge({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:s,storage:$}){let T=effectScope(),D,v,{$pending:l,$valid:o,$metadata:C,$validating:E}=$.trySetRuleStatusRef(`${s}.${n}`);function g(){D=T.run(()=>{let R=computed(()=>({$invalid:!o.value,$params:d.value,...C.value})),c=computed(()=>X(r)?typeof r.value.active=="function"?r.value.active(a.value,R.value):r.value.active:!0),I=computed(()=>{let f="",h=t?t[n]?.message:void 0;return h&&(typeof h=="function"?f=h(a.value,R.value):f=h),X(r)&&(h&&!r.value._patched||(typeof r.value.message=="function"?f=r.value.message(a.value,R.value):f=r.value.message)),ee(f)&&(f="Error",console.warn(`No error message defined for ${s}.${n}`)),f}),S=computed(()=>X(r)&&r.value.type?Object.values(re).includes(r.value.type)?n:r.value.type:n),y=computed(()=>X(r)?r.value.validator:r.value),d=computed(()=>typeof r.value=="function"?[]:M(r.value._params??[])),i=computed(()=>`${s}.${S.value}`);return {$active:c,$message:I,$type:S,$validator:y,$params:d,$path:i}}),v=watch(D.$params,u,{deep:!0});}g();async function u(){E.value=!0;let R=D.$validator.value,c=!1,I=R(a.value,...D.$params.value);if(I instanceof Promise){if(!l.value)try{o.value=!0,e.value&&(l.value=!0);let S=await I;if(typeof S=="boolean")c=S;else {let{$valid:y,...d}=S;c=y,C.value=d;}}catch{c=!1;}finally{l.value=!1;}}else if(I!=null)if(typeof I=="boolean")c=I;else {let{$valid:S,...y}=I;c=S,C.value=y;}return o.value=c,E.value=!1,c}function A(){o.value=!0,C.value={},l.value=!1,E.value=!1,g();}function p(){v(),T.stop(),T=effectScope();}return reactive({...D,$pending:l,$valid:o,$metadata:C,$validate:u,$unwatch:p,$watch:g,$reset:A})}function ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:s,externalErrors:$,index:T,onUnwatch:D}){let v=effectScope(),l,o=ref(!1),C=ref(!1),E=ref([]),g,u,A,p,R=()=>{};function c(){E.value=$.value??[];}c();function I(){let b=t.value,x=a.checkRuleDeclEntry(n,b);f.value=Object.fromEntries(Object.entries(b).filter(([O])=>O.startsWith("$"))),i.value=Object.fromEntries(Object.entries(t.value).filter(([O])=>!O.startsWith("$")).map(([O,_])=>{if(_){let oe=toRef(()=>_);return [O,Ge({$dirty:o,customMessages:r,rule:oe,ruleKey:O,state:e,path:n,storage:a})]}return []}).filter(O=>!!O.length)),y(),R=l.$debounce.value?Re(d,l.$debounce.value??0):d,x?.valid!=null&&(o.value=a.getDirtyState(n),o.value&&R()),a.addRuleDeclEntry(n,b);}function S(){i.value&&Object.entries(i.value).forEach(([b,x])=>{x.$unwatch();}),p(),o.value&&a.setDirtyEntry(n,o.value),g(),u(),A(),v.stop(),v=effectScope(),D?.();}function y(){i.value&&Object.entries(i.value).forEach(([b,x])=>{x.$watch();}),l=v.run(()=>{let b=computed(()=>o.value),x=computed(()=>f.value.$debounce),O=computed(()=>f.value.$lazy!=null?f.value.$lazy:unref(s.lazy)),_=computed(()=>f.value.$rewardEarly!=null?f.value.$rewardEarly:unref(s.rewardEarly)),oe=computed(()=>f.value.$autoDirty!=null?f.value.$autoDirty:unref(s.autoDirty)),Le=computed(()=>se.value&&!xe.value&&o.value),Je=computed(()=>G({field:{$dirty:o.value,$externalErrors:E.value,$rules:i.value}})),Qe=computed(()=>G({field:{$dirty:o.value,$externalErrors:E.value,$rules:i.value},silent:!0})),xe=computed(()=>C.value||!_.value?Object.entries(i.value).some(([K,Q])=>Q.$pending):!1),se=computed(()=>E.value?.length?!0:!_.value||_.value&&C.value?Object.entries(i.value).some(([K,Q])=>!Q.$valid):!1),Ie=computed(()=>o.value&&!ee(e.value)?E.value?.length?!1:_.value?Object.entries(i.value).every(([K,Q])=>Q.$valid):!se.value:!1);return watch(Ie,K=>{K&&(C.value=!1);}),{$error:Le,$pending:xe,$invalid:se,$valid:Ie,$debounce:x,$lazy:O,$errors:Je,$silentErrors:Qe,$rewardEarly:_,$autoDirty:oe,$anyDirty:b}}),A=watch($,c),g=watch(e,()=>{l.$autoDirty.value&&(o.value||(o.value=!0)),t.value instanceof Function&&I(),R(),l.$rewardEarly.value;},{deep:!0}),p=watch(o,()=>{a.setDirtyEntry(n,o.value),P();}),u=watch(l.$valid,b=>{l.$rewardEarly.value&&b&&(C.value=!1);});}function d(){Object.entries(i.value).forEach(([b,x])=>{x.$validate();});}let i=ref(),f=ref();I();function h(){o.value=!1,E.value=[],Object.entries(i.value).forEach(([b,x])=>{x.$reset();}),l.$lazy.value||Object.entries(i.value).map(([b,x])=>x.$validate());}function m(){o.value=!0,l.$rewardEarly.value;}let P=l.$debounce.value?Re(w,l.$debounce.value??0):w;async function w(){try{if(C.value=!0,l.$anyDirty.value&&!l.$pending)return !l.$error.value;{let b=Object.entries(i.value).map(([O,_])=>_.$validate());return (await Promise.allSettled(b)).every(O=>O.status==="fulfilled"?O.value:!1)}}catch{return !1}}function F(){E.value=[];}return l.$lazy.value||w(),reactive({$dirty:o,$anyDirty:l.$anyDirty,$invalid:l.$invalid,$error:l.$error,$pending:l.$pending,$valid:l.$valid,$errors:l.$errors,$silentErrors:l.$silentErrors,$externalErrors:E,$value:e,$rules:i,$reset:h,$touch:m,$validate:P,$unwatch:S,$watch:y,$clearExternalErrors:F})}function We({$id:e,path:t,index:r,options:n,storage:a,value:s,customMessages:$,rules:T,externalErrors:D}){let v=T.$key?T.$key:ye(),l=`${t}.${String(v)}`;typeof s[r]=="object"&&s[r]!=null&&(s[r].$id?l=`${t}.${s[r].$id}`:Object.defineProperties(s[r],{$id:{value:v,enumerable:!1,configurable:!1,writable:!1}}));let o=toRefs(s),C=toRef(()=>D.value?.[r]),E=le({state:o[r],rulesDef:toRef(()=>T),customMessages:$,path:l,storage:a,options:n,externalErrors:C});if(E){let g=s[r]?.$id;E.$id=g??String(v),a.addArrayStatus(e,E.$id,E);}return E}function Ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:s,externalErrors:$}){let T=effectScope(),D,v=effectScope(),l;if(Array.isArray(e.value)&&!t.value.$each)return null;let o=ref(),C=ref(e.value),E=null,g=ref({}),u=a.getCollectionsEntry(n);l=v.run(()=>{let i=computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(m=>typeof m!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(m=>de(m)):!1),f=computed(()=>$.value?ve($.value)?$.value.$errors??[]:[]:[]),h=computed(()=>$.value?ve($.value)?$.value.$each??[]:[]:[]);return {isPrimitiveArray:i,$externalErrorsField:f,$externalErrorsEach:h}}),A(),R();function A(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(o.value=ye(),Object.defineProperties(e.value,{$id:{value:o.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(o.value=e.value.$id)),!l.isPrimitiveArray.value&&(C.value=g.value.$value,Array.isArray(e.value)&&t.value.$each?u.value=e.value.map((i,f)=>{let h=fe(t.value.$each,toRef(()=>e.value[f]),f);if(h){let m=We({$id:o.value,path:n,rules:h,value:e.value,index:f,options:s,storage:a,externalErrors:l.$externalErrorsEach});return m||null}}).filter(i=>!!i):u.value=[],g.value=ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:s,externalErrors:l.$externalErrorsField}));}function p(){if(Array.isArray(e.value)){let i=B(u.value);u.value=e.value.map((f,h)=>{if(f.$id&&u.value.find(m=>m.$id===f.$id)){let m=a.getArrayStatus(o.value,f.$id);return m?(m.$value=toRef(()=>f),m):null}else {let m=fe(t.value.$each,toRef(()=>toRef(()=>f)),h);if(m){let P=We({$id:o.value,path:n,rules:m,value:e.value,index:h,options:s,storage:a,externalErrors:l.$externalErrorsEach});return P||null}}}).filter(f=>!!f),i.filter(f=>!e.value.find(h=>f.$id===h.$id)).forEach((f,h)=>{a.deleteArrayStatus(o.value,h.toString());});}else u.value=[];}function R(){E=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?A():p();},{deep:!0,flush:"pre"}),D=T.run(()=>{let i=computed(()=>g.value.$dirty&&u.value.every(x=>x.$dirty)),f=computed(()=>g.value.$anyDirty||u.value.some(x=>x.$dirty)),h=computed(()=>g.value.$invalid||u.value.some(x=>x.$invalid)),m=computed(()=>g.value.$valid||u.value.some(x=>x.$valid)),P=computed(()=>g.value.$error||u.value.some(x=>x.$error)),w=computed(()=>g.value.$pending||u.value.some(x=>x.$pending)),F=computed(()=>({$errors:G({field:g.value,silent:!1}),$each:te(u.value)})),b=computed(()=>({$errors:G({field:g.value,silent:!0}),$each:te(u.value,!0)}));return {$dirty:i,$anyDirty:f,$invalid:h,$valid:m,$error:P,$pending:w,$errors:F,$silentErrors:b}}),l.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`),E());}function c(){E&&E(),g.value&&g.value.$unwatch(),u.value&&u.value.forEach(i=>{"$dirty"in i&&i.$unwatch();}),T.stop(),T=effectScope(),v.stop(),v=effectScope(!0);}function I(){g.value.$touch(),u.value.forEach(i=>{i.$touch();});}function S(){g.value.$reset(),u.value.forEach(i=>{i.$reset();});}async function y(){try{return (await Promise.all([g.value.$validate(),...u.value.map(f=>f.$validate())])).every(f=>!!f)}catch{return !1}}function d(){}return reactive({$field:g,...D,$each:u,$value:e,$validate:y,$unwatch:c,$watch:R,$touch:I,$reset:S,$clearExternalErrors:d})}function be({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:s,options:$,externalErrors:T,validationGroups:D}){let v,l,o;function g(y=!0,d=!1){u.value=null,triggerRef(u);let i=Object.fromEntries(Object.entries(e.value).map(([m,P])=>{if(P){let w=toRef(t.value,m),F=toRef(()=>P),b=toRef(()=>T.value?.[m]);return [m,le({state:w,rulesDef:F,customMessages:r,path:n?`${n}.${m}`:m,storage:s,options:$,externalErrors:b})]}return []}).filter(m=>!!m.length&&m[1]!=null)),f=Object.fromEntries(Object.entries(unref(T)??{}).filter(([m])=>!(m in e.value)).map(([m,P])=>{if(P){let w=toRef(()=>({})),F=toRef(()=>P);return [m,le({state:ref(void 0),rulesDef:w,customMessages:r,path:n?`${n}.${m}`:m,storage:s,options:$,externalErrors:F})]}return []})),h=Object.fromEntries(Object.entries(D?.(i)??{}).map(([m,P])=>P.length?[m,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(w=>[w,Ve(toRef(()=>P),w)])),...Object.fromEntries(["$errors","$silentErrors"].map(w=>[w,_e(toRef(()=>P),w)]))}]:[]));u.value={...i,...f,...h},y&&c();}let u=s.getFieldsEntry(n);g();function A(){g(!1),Object.entries(u.value).forEach(([y,d])=>{d.$reset();}),c();}function p(){Object.entries(u.value).forEach(([y,d])=>{d.$touch();});}async function R(){try{return (await Promise.allSettled(Object.entries(u.value).map(([d,i])=>i.$validate()))).every(d=>d.status==="fulfilled"?d.value:!1)}catch{return !1}}function c(){a&&(o=watch(a,()=>{I(),g();},{deep:!0,flush:"post"})),v=effectScope(),l=v.run(()=>{let y=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([F,b])=>b.$dirty)),d=computed(()=>Object.entries(u.value).some(([F,b])=>b.$dirty)),i=computed(()=>Object.entries(u.value).some(([F,b])=>b.$invalid)),f=computed(()=>!i.value),h=computed(()=>Object.entries(u.value).some(([F,b])=>b.$error)),m=computed(()=>Object.entries(u.value).some(([F,b])=>b.$pending)),P=computed(()=>q(u.value)),w=computed(()=>q(u.value,!0));return {$dirty:y,$anyDirty:d,$invalid:i,$valid:f,$error:h,$pending:m,$errors:P,$silentErrors:w}});}function I(){u.value&&Object.entries(u.value).forEach(([y,d])=>{d.$unwatch();}),o?.(),v.stop(),v=effectScope();}function S(){Object.entries(u.value).forEach(([y,d])=>{d.$clearExternalErrors();});}return reactive({...l,$fields:u,$value:t,$reset:A,$touch:p,$validate:R,$unwatch:I,$watch:c,$clearExternalErrors:S})}function le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:s,externalErrors:$,index:T,onUnwatch:D}){return Oe(t)?Ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:s,index:T,externalErrors:$}):we(e,t)&&Pe(e)?be({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:s,index:T,externalErrors:$}):Ae(t)?ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:s,index:T,externalErrors:$,onUnwatch:D}):null}function he(e,t,r,n){let a=pe(),s=computed(()=>unref(r.externalErrors)),$=reactive(be({rootRules:e,scopeRules:e,state:t,customMessages:n?.(),storage:a,options:r,externalErrors:s,validationGroups:r.validationGroups})),T=Fe($);return {regle:$,errors:T}}function Te(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,s,$){let T=isRef(s)?s:computed(typeof s=="function"?s:()=>s),D={...r,...$},v=isRef(a)?a:ref(a),l=B(toRaw(v.value)),{regle:o,errors:C}=he(T,v,D,e);function E(){o.$unwatch(),g(a,l),o.$reset();}function g(p,R){Object.entries(R).forEach(([c,I])=>{let S=isRef(p)?p.value:p,y=isRef(S[c])?S[c].value:S[c],d=isRef(R[c])?R[c]._value:R[c];Array.isArray(d)&&Array.isArray(y)?(S[c]=[],d.forEach((i,f)=>{S[c][f]={},g(S[c][f],d[f]);})):k(d)?g(y,d):isRef(S[c])?S[c].value=d:S[c]=d;});}let u=computed(()=>!(o.$invalid||o.$pending));async function A(){return o.$touch(),await o.$validate()?v.value:!1}return {regle:o,errors:C,resetAll:E,validateState:A,ready:u,state:v}}return n}var ze=Te();function qe({rules:e,modifiers:t}){return Te(e,t)}export{re as InternalRuleType,ue as createRule,qe as defineRegleConfig,ce as defineType,M as unwrapRuleParameters,ze as useRegle};
1
+ import {unref,isRef,toRef,computed,ref,toRaw,reactive,shallowRef,onScopeDispose,triggerRef,watch,effectScope,toRefs}from'vue';function F(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 Ce(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(i=>i.trim()).filter(i=>i.includes("=")).length+e.length}function se(e,...t){let{message:r,validator:n,active:a,...i}=e,$=n.constructor.name==="AsyncFunction";return {...{validator(v,...l){return e.validator(v,...F(l.length?l:t))},message(v,l){return typeof e.message=="function"?e.message(v,{...l,$params:F(l.$params?.length?l.$params:t)}):e.message},active(v,l){return typeof e.active=="function"?e.active(v,{...l,$params:F(l.$params?.length?l.$params:t)}):e.active??!0},exec(v){let l=e.validator(v,...F(t)),o;return l instanceof Promise?l.then(C=>(o=C,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)):(o=l,typeof o=="object"&&"$valid"in o?o.$valid:typeof o=="boolean"?o:!1)}},...i,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:$,_params:Ie(t)}}function ue(e){if(typeof e.validator=="function"){let r=se(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Ce(e.validator)>1){let a=function(...i){return se(e,...i)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function De(e){return k(e.value)}function B(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>B(n)))),r=="Map"&&(t=new Map([...e].map(n=>[B(n[0]),B(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,Ze(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=B(e[n]);}return t}function Ze(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 ee(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 fe(e,t,r){let n,a=(...i)=>new Promise($=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...i])).then($);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...i)=>new Promise($=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...i])).then($);},0);}),a}function Re(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),i=shallowRef(new Map);function $(p){let R=t.value.get(p);if(R)return R;{let u=ref({});return t.value.set(p,u),u}}function x(p){let R=r.value.get(p);if(R)return R;{let u=ref([]);return r.value.set(p,u),u}}function D(p,R,u){i.value.set(`${p}-${R}`,u);}function v(p,R){return i.value.get(`${p}-${R}`)}function l(p,R){p&&R!=null&&i.value.delete(`${p}-${R}`);}function o(p,R){n.value.set(p,R);}function C(p){return n.value.get(p)??!1}function b(p,R){e.value.set(p,R);}function g(p,R){let u=e.value.get(p);return u?s(R,u)?{valid:!0}:{valid:!1}:void 0}function s(p,R){let u=Object.keys(R),I=Object.keys(p);return I.length!==u.length||!I.every(y=>u.includes(y))?!1:I.every(y=>{let d=p[y],c=R[y];return !c||!d||typeof d=="function"||typeof c=="function"||typeof d=="number"||typeof d=="boolean"?!1:d._params?d._params?.every((f,h)=>{if(typeof c=="number"||typeof c=="boolean")return !0;{let m=F(c._params),P=F(d._params);return m?.[h]===P?.[h]}}):!0})}function A(p){let R=a.value.get(p);if(R)return R;{let u=ref(!1),I=ref(!0),E=ref({}),y=ref(!1);return a.value.set(p,{$pending:u,$valid:I,$metadata:E,$validating:y}),{$pending:u,$valid:I,$metadata:E,$validating:y}}}return onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),i.value.clear();}),{addRuleDeclEntry:b,setDirtyEntry:o,checkRuleDeclEntry:g,getDirtyState:C,trySetRuleStatusRef:A,getFieldsEntry:$,getCollectionsEntry:x,getArrayStatus:v,addArrayStatus:D,deleteArrayStatus:l,arrayStatusStorage:i}}function Pe(e,t){return k(e.value)&&k(t.value)&&!Object.entries(t.value).some(r=>pe(r))}function we(e){return !!e.value&&"$each"in e.value}function Oe(e){return !!e.value&&k(e.value)}function pe(e){return k(e)&&"_validator"in e}function X(e){return typeof e.value!="function"}function de(e){return k(e)&&"$fields"in e}function me(e){return !!e&&"$each"in e}function ge(e){return !!e&&"$rules"in e}function $e(e){return "$each"in e||"$errors"in e}function G({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function Ae(e,t=!1){return de(e)?q(e.$fields):me(e)?{$errors:e.$field.$rules?G({field:e.$field,silent:t}):[],$each:e.$each.map(r=>Ae(r,t))}:ge(e)?e.$error?G({field:e,silent:t}):e.$externalErrors??[]:[]}function te(e,t=!1){return e.map(r=>Ae(r,t))}function q(e,t=!1){return Object.fromEntries(Object.entries(e).map(([r,n])=>de(n)?[r,q(n.$fields,t)]:me(n)?[r,{$errors:G({field:n.$field,silent:t}),$each:te(n.$each,t)}]:ge(n)?n.$error?[r,G({field:n,silent:t})]:[r,n.$externalErrors??[]]:[r,[]]))}function Me(e){return computed(()=>q(e.$fields))}var re=(r=>(r.Inline="__inline",r.Async="__async",r))(re||{});function je(e,t){return computed(()=>e.value.some(r=>r[t]))}function Ve(e,t){return computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function tt(){return Math.floor(Math.random()*Date.now()).toString()}function ve(){return typeof window>"u"?tt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function ke({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:i,storage:$}){let x=effectScope(),D,v,{$pending:l,$valid:o,$metadata:C,$validating:b}=$.trySetRuleStatusRef(`${i}.${n}`);function g(){D=x.run(()=>{let R=computed(()=>({$invalid:!o.value,$params:d.value,...C.value})),u=computed(()=>X(r)?typeof r.value.active=="function"?r.value.active(a.value,R.value):r.value.active:!0),I=computed(()=>{let f="",h=t?t[n]?.message:void 0;return h&&(typeof h=="function"?f=h(a.value,R.value):f=h),X(r)&&(h&&!r.value._patched||(typeof r.value.message=="function"?f=r.value.message(a.value,R.value):f=r.value.message)),ee(f)&&(f="Error",console.warn(`No error message defined for ${i}.${n}`)),f}),E=computed(()=>X(r)&&r.value.type?Object.values(re).includes(r.value.type)?n:r.value.type:n),y=computed(()=>X(r)?r.value.validator:r.value),d=computed(()=>typeof r.value=="function"?[]:F(r.value._params??[])),c=computed(()=>`${i}.${E.value}`);return {$active:u,$message:I,$type:E,$validator:y,$params:d,$path:c}}),v=watch(D.$params,s,{deep:!0});}g();async function s(){b.value=!0;let R=D.$validator.value,u=!1,I=R(a.value,...D.$params.value);if(I instanceof Promise)try{o.value=!0,e.value&&(l.value=!0);let E=await I;if(typeof E=="boolean")u=E;else {let{$valid:y,...d}=E;u=y,C.value=d;}}catch{u=!1;}finally{l.value=!1;}else if(I!=null)if(typeof I=="boolean")u=I;else {let{$valid:E,...y}=I;u=E,C.value=y;}return o.value=u,b.value=!1,console.log(n,u),u}function A(){o.value=!0,C.value={},l.value=!1,b.value=!1,g();}function p(){v(),x.stop(),x=effectScope();}return reactive({...D,$pending:l,$valid:o,$metadata:C,$validate:s,$unwatch:p,$watch:g,$reset:A})}function ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:i,externalErrors:$,index:x,onUnwatch:D}){let v=effectScope(),l,o=ref(!1),C=ref(!1),b=ref([]),g,s,A,p,R=()=>{};function u(){b.value=$.value??[];}u();function I(){let S=t.value,T=a.checkRuleDeclEntry(n,S);f.value=Object.fromEntries(Object.entries(S).filter(([O])=>O.startsWith("$"))),c.value=Object.fromEntries(Object.entries(t.value).filter(([O])=>!O.startsWith("$")).map(([O,_])=>{if(_){let oe=toRef(()=>_);return [O,ke({$dirty:o,customMessages:r,rule:oe,ruleKey:O,state:e,path:n,storage:a})]}return []}).filter(O=>!!O.length)),y(),R=l.$debounce.value?fe(d,l.$debounce.value??0):d,T?.valid!=null&&(o.value=a.getDirtyState(n),o.value&&R()),a.addRuleDeclEntry(n,S);}function E(){c.value&&Object.entries(c.value).forEach(([S,T])=>{T.$unwatch();}),p(),o.value&&a.setDirtyEntry(n,o.value),g(),s(),A(),v.stop(),v=effectScope(),D?.();}function y(){c.value&&Object.entries(c.value).forEach(([S,T])=>{T.$watch();}),l=v.run(()=>{let S=computed(()=>o.value),T=computed(()=>f.value.$debounce),O=computed(()=>f.value.$lazy!=null?f.value.$lazy:unref(i.lazy)),_=computed(()=>f.value.$rewardEarly!=null?f.value.$rewardEarly:unref(i.rewardEarly)),oe=computed(()=>f.value.$autoDirty!=null?f.value.$autoDirty:unref(i.autoDirty)),qe=computed(()=>ie.value&&!xe.value&&o.value),Le=computed(()=>G({field:{$dirty:o.value,$externalErrors:b.value,$rules:c.value}})),Je=computed(()=>G({field:{$dirty:o.value,$externalErrors:b.value,$rules:c.value},silent:!0})),xe=computed(()=>C.value||!_.value?Object.entries(c.value).some(([K,Q])=>Q.$pending):!1),ie=computed(()=>b.value?.length?!0:!_.value||_.value&&C.value?Object.entries(c.value).some(([K,Q])=>!Q.$valid):!1),Te=computed(()=>o.value&&!ee(e.value)?b.value?.length?!1:_.value?Object.entries(c.value).every(([K,Q])=>Q.$valid):!ie.value:!1);return watch(Te,K=>{K&&(C.value=!1);}),{$error:qe,$pending:xe,$invalid:ie,$valid:Te,$debounce:T,$lazy:O,$errors:Le,$silentErrors:Je,$rewardEarly:_,$autoDirty:oe,$anyDirty:S}}),A=watch($,u),g=watch(e,()=>{l.$autoDirty.value&&(o.value||(o.value=!0)),t.value instanceof Function&&I(),R(),l.$rewardEarly.value;},{deep:!0}),p=watch(o,()=>{a.setDirtyEntry(n,o.value);}),s=watch(l.$valid,S=>{l.$rewardEarly.value&&S&&(C.value=!1);});}function d(){Object.entries(c.value).forEach(([S,T])=>{T.$validate();});}let c=ref(),f=ref();I();function h(){o.value=!1,b.value=[],Object.entries(c.value).forEach(([S,T])=>{T.$reset();}),l.$lazy.value||Object.entries(c.value).map(([S,T])=>T.$validate());}function m(){o.value=!0,l.$rewardEarly.value,R();}let P=l.$debounce.value?fe(w,l.$debounce.value??0):w;async function w(){try{if(C.value=!0,l.$anyDirty.value&&!l.$pending)return !l.$error.value;{let S=Object.entries(c.value).map(([O,_])=>_.$validate());return (await Promise.allSettled(S)).every(O=>O.status==="fulfilled"?O.value:!1)}}catch{return !1}}function M(){b.value=[];}return l.$lazy.value||w(),reactive({$dirty:o,$anyDirty:l.$anyDirty,$invalid:l.$invalid,$error:l.$error,$pending:l.$pending,$valid:l.$valid,$errors:l.$errors,$silentErrors:l.$silentErrors,$externalErrors:b,$value:e,$rules:c,$reset:h,$touch:m,$validate:P,$unwatch:E,$watch:y,$clearExternalErrors:M})}function Be({$id:e,path:t,index:r,options:n,storage:a,value:i,customMessages:$,rules:x,externalErrors:D}){let v=x.$key?x.$key:ve(),l=`${t}.${String(v)}`;typeof i[r]=="object"&&i[r]!=null&&(i[r].$id?l=`${t}.${i[r].$id}`:Object.defineProperties(i[r],{$id:{value:v,enumerable:!1,configurable:!1,writable:!1}}));let o=toRefs(i),C=toRef(()=>D.value?.[r]),b=le({state:o[r],rulesDef:toRef(()=>x),customMessages:$,path:l,storage:a,options:n,externalErrors:C});if(b){let g=i[r]?.$id;b.$id=g??String(v),a.addArrayStatus(e,b.$id,b);}return b}function We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:i,externalErrors:$}){let x=effectScope(),D,v=effectScope(),l;if(Array.isArray(e.value)&&!t.value.$each)return null;let o=ref(),C=ref(e.value),b=null,g=ref({}),s=a.getCollectionsEntry(n);l=v.run(()=>{let c=computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(m=>typeof m!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(m=>pe(m)):!1),f=computed(()=>$.value?$e($.value)?$.value.$errors??[]:[]:[]),h=computed(()=>$.value?$e($.value)?$.value.$each??[]:[]:[]);return {isPrimitiveArray:c,$externalErrorsField:f,$externalErrorsEach:h}}),A(),R();function A(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(o.value=ve(),Object.defineProperties(e.value,{$id:{value:o.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(o.value=e.value.$id)),!l.isPrimitiveArray.value&&(C.value=g.value.$value,Array.isArray(e.value)&&t.value.$each?s.value=e.value.map((c,f)=>{let h=ce(t.value.$each,toRef(()=>e.value[f]),f);if(h){let m=Be({$id:o.value,path:n,rules:h,value:e.value,index:f,options:i,storage:a,externalErrors:l.$externalErrorsEach});return m||null}}).filter(c=>!!c):s.value=[],g.value=ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:i,externalErrors:l.$externalErrorsField}));}function p(){if(Array.isArray(e.value)){let c=B(s.value);s.value=e.value.map((f,h)=>{if(f.$id&&s.value.find(m=>m.$id===f.$id)){let m=a.getArrayStatus(o.value,f.$id);return m?(m.$value=toRef(()=>f),m):null}else {let m=ce(t.value.$each,toRef(()=>toRef(()=>f)),h);if(m){let P=Be({$id:o.value,path:n,rules:m,value:e.value,index:h,options:i,storage:a,externalErrors:l.$externalErrorsEach});return P||null}}}).filter(f=>!!f),c.filter(f=>!e.value.find(h=>f.$id===h.$id)).forEach((f,h)=>{a.deleteArrayStatus(o.value,h.toString());});}else s.value=[];}function R(){b=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?A():p();},{deep:!0,flush:"pre"}),D=x.run(()=>{let c=computed(()=>g.value.$dirty&&s.value.every(T=>T.$dirty)),f=computed(()=>g.value.$anyDirty||s.value.some(T=>T.$dirty)),h=computed(()=>g.value.$invalid||s.value.some(T=>T.$invalid)),m=computed(()=>g.value.$valid&&s.value.every(T=>T.$valid)),P=computed(()=>g.value.$error||s.value.some(T=>T.$error)),w=computed(()=>g.value.$pending||s.value.some(T=>T.$pending)),M=computed(()=>({$errors:G({field:g.value,silent:!1}),$each:te(s.value)})),S=computed(()=>({$errors:G({field:g.value,silent:!0}),$each:te(s.value,!0)}));return {$dirty:c,$anyDirty:f,$invalid:h,$valid:m,$error:P,$pending:w,$errors:M,$silentErrors:S}}),l.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`),b());}function u(){b&&b(),g.value&&g.value.$unwatch(),s.value&&s.value.forEach(c=>{"$dirty"in c&&c.$unwatch();}),x.stop(),x=effectScope(),v.stop(),v=effectScope(!0);}function I(){g.value.$touch(),s.value.forEach(c=>{c.$touch();});}function E(){g.value.$reset(),s.value.forEach(c=>{c.$reset();});}async function y(){try{return (await Promise.all([g.value.$validate(),...s.value.map(f=>f.$validate())])).every(f=>!!f)}catch{return !1}}function d(){}return reactive({$field:g,...D,$each:s,$value:e,$validate:y,$unwatch:u,$watch:R,$touch:I,$reset:E,$clearExternalErrors:d})}function Ee({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:i,options:$,externalErrors:x,validationGroups:D}){let v,l,o;function g(y=!0,d=!1){s.value=null,triggerRef(s);let c=Object.fromEntries(Object.entries(e.value).map(([m,P])=>{if(P){let w=toRef(t.value,m),M=toRef(()=>P),S=toRef(()=>x.value?.[m]);return [m,le({state:w,rulesDef:M,customMessages:r,path:n?`${n}.${m}`:m,storage:i,options:$,externalErrors:S})]}return []}).filter(m=>!!m.length&&m[1]!=null)),f=Object.fromEntries(Object.entries(unref(x)??{}).filter(([m])=>!(m in e.value)).map(([m,P])=>{if(P){let w=toRef(()=>({})),M=toRef(()=>P);return [m,le({state:ref(void 0),rulesDef:w,customMessages:r,path:n?`${n}.${m}`:m,storage:i,options:$,externalErrors:M})]}return []})),h=Object.fromEntries(Object.entries(D?.(c)??{}).map(([m,P])=>P.length?[m,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(w=>[w,je(toRef(()=>P),w)])),...Object.fromEntries(["$errors","$silentErrors"].map(w=>[w,Ve(toRef(()=>P),w)]))}]:[]));s.value={...c,...f,...h},y&&u();}let s=i.getFieldsEntry(n);g();function A(){g(!1),Object.entries(s.value).forEach(([y,d])=>{d.$reset();}),u();}function p(){Object.entries(s.value).forEach(([y,d])=>{d.$touch();});}async function R(){try{return (await Promise.allSettled(Object.entries(s.value).map(([d,c])=>c.$validate()))).every(d=>d.status==="fulfilled"?d.value:!1)}catch{return !1}}function u(){a&&(o=watch(a,()=>{I(),g();},{deep:!0,flush:"post"})),v=effectScope(),l=v.run(()=>{let y=computed(()=>!!Object.entries(s.value).length&&Object.entries(s.value).every(([M,S])=>S.$dirty)),d=computed(()=>Object.entries(s.value).some(([M,S])=>S.$dirty)),c=computed(()=>Object.entries(s.value).some(([M,S])=>S.$invalid)),f=computed(()=>Object.entries(s.value).every(([M,S])=>S.$valid)),h=computed(()=>Object.entries(s.value).some(([M,S])=>S.$error)),m=computed(()=>Object.entries(s.value).some(([M,S])=>S.$pending)),P=computed(()=>q(s.value)),w=computed(()=>q(s.value,!0));return {$dirty:y,$anyDirty:d,$invalid:c,$valid:f,$error:h,$pending:m,$errors:P,$silentErrors:w}});}function I(){s.value&&Object.entries(s.value).forEach(([y,d])=>{d.$unwatch();}),o?.(),v.stop(),v=effectScope();}function E(){Object.entries(s.value).forEach(([y,d])=>{d.$clearExternalErrors();});}return reactive({...l,$fields:s,$value:t,$reset:A,$touch:p,$validate:R,$unwatch:I,$watch:u,$clearExternalErrors:E})}function le({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:i,externalErrors:$,index:x,onUnwatch:D}){return we(t)?We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:i,index:x,externalErrors:$}):Pe(e,t)&&De(e)?Ee({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:i,index:x,externalErrors:$}):Oe(t)?ne({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:i,index:x,externalErrors:$,onUnwatch:D}):null}function be(e,t,r,n){let a=Re(),i=computed(()=>unref(r.externalErrors)),$=reactive(Ee({rootRules:e,scopeRules:e,state:t,customMessages:n?.(),storage:a,options:r,externalErrors:i,validationGroups:r.validationGroups})),x=Me($);return {regle:$,errors:x}}function he(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,i,$){let x=isRef(i)?i:computed(typeof i=="function"?i:()=>i),D={...r,...$},v=isRef(a)?a:ref(a),l=B(toRaw(v.value)),{regle:o,errors:C}=be(x,v,D,e);function b(){o.$unwatch(),g(a,l),o.$reset();}function g(p,R){Object.entries(R).forEach(([u,I])=>{let E=isRef(p)?p.value:p,y=isRef(E[u])?E[u].value:E[u],d=isRef(R[u])?R[u]._value:R[u];Array.isArray(d)&&Array.isArray(y)?(E[u]=[],d.forEach((c,f)=>{E[u][f]={},g(E[u][f],d[f]);})):k(d)?g(y,d):isRef(E[u])?E[u].value=d:E[u]=d;});}let s=computed(()=>!(o.$invalid||o.$pending));async function A(){return o.$touch(),await o.$validate()?v.value:!1}return {regle:o,errors:C,resetAll:b,validateState:A,ready:s,state:v}}return n}var He=he();function ze({rules:e,modifiers:t}){return he(e,t)}export{re as InternalRuleType,ue as createRule,ze as defineRegleConfig,F as unwrapRuleParameters,He as useRegle};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regle/core",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Typescript-first model-based validation library for Vue 3",
5
5
  "peerDependencies": {
6
6
  "vue": "^3.1.0"