@regle/core 1.2.0-beta.2 β†’ 1.2.0-beta.4

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/README.md CHANGED
@@ -27,7 +27,7 @@ It's heavily inspired by Vuelidate.
27
27
  - 🧰 Modular
28
28
  - πŸ”„ Async validation
29
29
  - 🌐 Plug any i18n library
30
- - πŸ“— Vuelidate compatible API
30
+ - πŸ“— Vuelidate like API
31
31
  - Standard Schemas spec support
32
32
  - πŸ¦Έβ€β™‚οΈ [Zod](https://zod.dev/)
33
33
  - πŸ€– [Valibot](https://valibot.dev/)
@@ -1,3 +1,4 @@
1
+ import * as vue from 'vue';
1
2
  import { Ref, MaybeRef, UnwrapRef, UnwrapNestedRefs, Raw, MaybeRefOrGetter } from 'vue';
2
3
 
3
4
  type Prettify<T> = T extends infer R ? {
@@ -157,6 +158,46 @@ type Fail = IsEmptyObject<null>; //=> false
157
158
  */
158
159
  type IsEmptyObject<T> = T extends EmptyObject ? true : false;
159
160
 
161
+ /**
162
+ Extract all optional keys from the given type.
163
+
164
+ This is useful when you want to create a new type that contains different type values for the optional keys only.
165
+
166
+ @example
167
+ ```
168
+ import type {OptionalKeysOf, Except} from 'type-fest';
169
+
170
+ interface User {
171
+ name: string;
172
+ surname: string;
173
+
174
+ luckyNumber?: number;
175
+ }
176
+
177
+ const REMOVE_FIELD = Symbol('remove field symbol');
178
+ type UpdateOperation<Entity extends object> = Except<Partial<Entity>, OptionalKeysOf<Entity>> & {
179
+ [Key in OptionalKeysOf<Entity>]?: Entity[Key] | typeof REMOVE_FIELD;
180
+ };
181
+
182
+ const update1: UpdateOperation<User> = {
183
+ name: 'Alice'
184
+ };
185
+
186
+ const update2: UpdateOperation<User> = {
187
+ name: 'Bob',
188
+ luckyNumber: REMOVE_FIELD
189
+ };
190
+ ```
191
+
192
+ @category Utilities
193
+ */
194
+ type OptionalKeysOf<BaseType extends object> =
195
+ BaseType extends unknown // For distributing `BaseType`
196
+ ? (keyof {
197
+ [Key in keyof BaseType as BaseType extends Record<Key, BaseType[Key]> ? never : Key]: never
198
+ }) & (keyof BaseType) // Intersect with `keyof BaseType` to ensure result of `OptionalKeysOf<BaseType>` is always assignable to `keyof BaseType`
199
+ : never; // Should never happen
200
+
160
201
  /**
161
202
  Extract all required keys from the given type.
162
203
 
@@ -181,11 +222,10 @@ const validator2 = createValidation<User>('surname', value => value.length < 25)
181
222
 
182
223
  @category Utilities
183
224
  */
184
- type RequiredKeysOf<BaseType extends object> = Exclude<{
185
- [Key in keyof BaseType]: BaseType extends Record<Key, BaseType[Key]>
186
- ? Key
187
- : never
188
- }[keyof BaseType], undefined>;
225
+ type RequiredKeysOf<BaseType extends object> =
226
+ BaseType extends unknown // For distributing `BaseType`
227
+ ? Exclude<keyof BaseType, OptionalKeysOf<BaseType>>
228
+ : never; // Should never happen
189
229
 
190
230
  /**
191
231
  Returns a boolean for whether the given type is `never`.
@@ -566,45 +606,6 @@ type IfAny<T, TypeIfAny = true, TypeIfNotAny = false> = (
566
606
  IsAny$1<T> extends true ? TypeIfAny : TypeIfNotAny
567
607
  );
568
608
 
569
- /**
570
- Extract all optional keys from the given type.
571
-
572
- This is useful when you want to create a new type that contains different type values for the optional keys only.
573
-
574
- @example
575
- ```
576
- import type {OptionalKeysOf, Except} from 'type-fest';
577
-
578
- interface User {
579
- name: string;
580
- surname: string;
581
-
582
- luckyNumber?: number;
583
- }
584
-
585
- const REMOVE_FIELD = Symbol('remove field symbol');
586
- type UpdateOperation<Entity extends object> = Except<Partial<Entity>, OptionalKeysOf<Entity>> & {
587
- [Key in OptionalKeysOf<Entity>]?: Entity[Key] | typeof REMOVE_FIELD;
588
- };
589
-
590
- const update1: UpdateOperation<User> = {
591
- name: 'Alice'
592
- };
593
-
594
- const update2: UpdateOperation<User> = {
595
- name: 'Bob',
596
- luckyNumber: REMOVE_FIELD
597
- };
598
- ```
599
-
600
- @category Utilities
601
- */
602
- type OptionalKeysOf<BaseType extends object> = Exclude<{
603
- [Key in keyof BaseType]: BaseType extends Record<Key, BaseType[Key]>
604
- ? never
605
- : Key
606
- }[keyof BaseType], undefined>;
607
-
608
609
  /**
609
610
  Matches any primitive, `void`, `Date`, or `RegExp` value.
610
611
  */
@@ -723,7 +724,11 @@ type ApplyDefaultOptions<
723
724
  IfNever<SpecifiedOptions, Defaults,
724
725
  Simplify<Merge<Defaults, {
725
726
  [Key in keyof SpecifiedOptions
726
- as Key extends OptionalKeysOf<Options> ? undefined extends SpecifiedOptions[Key] ? never : Key : Key
727
+ as Key extends OptionalKeysOf<Options>
728
+ ? Extract<SpecifiedOptions[Key], undefined> extends never
729
+ ? Key
730
+ : never
731
+ : Key
727
732
  ]: SpecifiedOptions[Key]
728
733
  }> & Required<Options>> // `& Required<Options>` ensures that `ApplyDefaultOptions<SomeOption, ...>` is always assignable to `Required<SomeOption>`
729
734
  >>;
@@ -893,27 +898,29 @@ const partialSettings: PartialDeep<Settings, {recurseIntoArrays: true}> = {
893
898
  type PartialDeep<T, Options extends PartialDeepOptions = {}> =
894
899
  _PartialDeep<T, ApplyDefaultOptions<PartialDeepOptions, DefaultPartialDeepOptions, Options>>;
895
900
 
896
- type _PartialDeep<T, Options extends Required<PartialDeepOptions>> = T extends BuiltIns | (((...arguments_: any[]) => unknown)) | (new (...arguments_: any[]) => unknown)
901
+ type _PartialDeep<T, Options extends Required<PartialDeepOptions>> = T extends BuiltIns | ((new (...arguments_: any[]) => unknown))
897
902
  ? T
898
- : T extends Map<infer KeyType, infer ValueType>
899
- ? PartialMapDeep<KeyType, ValueType, Options>
900
- : T extends Set<infer ItemType>
901
- ? PartialSetDeep<ItemType, Options>
902
- : T extends ReadonlyMap<infer KeyType, infer ValueType>
903
- ? PartialReadonlyMapDeep<KeyType, ValueType, Options>
904
- : T extends ReadonlySet<infer ItemType>
905
- ? PartialReadonlySetDeep<ItemType, Options>
906
- : T extends object
907
- ? T extends ReadonlyArray<infer ItemType> // Test for arrays/tuples, per https://github.com/microsoft/TypeScript/issues/35156
908
- ? Options['recurseIntoArrays'] extends true
909
- ? ItemType[] extends T // Test for arrays (non-tuples) specifically
910
- ? readonly ItemType[] extends T // Differentiate readonly and mutable arrays
911
- ? ReadonlyArray<_PartialDeep<Options['allowUndefinedInNonTupleArrays'] extends false ? ItemType : ItemType | undefined, Options>>
912
- : Array<_PartialDeep<Options['allowUndefinedInNonTupleArrays'] extends false ? ItemType : ItemType | undefined, Options>>
913
- : PartialObjectDeep<T, Options> // Tuples behave properly
914
- : T // If they don't opt into array testing, just use the original type
915
- : PartialObjectDeep<T, Options>
916
- : unknown;
903
+ : IsNever$1<keyof T> extends true // For functions with no properties
904
+ ? T
905
+ : T extends Map<infer KeyType, infer ValueType>
906
+ ? PartialMapDeep<KeyType, ValueType, Options>
907
+ : T extends Set<infer ItemType>
908
+ ? PartialSetDeep<ItemType, Options>
909
+ : T extends ReadonlyMap<infer KeyType, infer ValueType>
910
+ ? PartialReadonlyMapDeep<KeyType, ValueType, Options>
911
+ : T extends ReadonlySet<infer ItemType>
912
+ ? PartialReadonlySetDeep<ItemType, Options>
913
+ : T extends object
914
+ ? T extends ReadonlyArray<infer ItemType> // Test for arrays/tuples, per https://github.com/microsoft/TypeScript/issues/35156
915
+ ? Options['recurseIntoArrays'] extends true
916
+ ? ItemType[] extends T // Test for arrays (non-tuples) specifically
917
+ ? readonly ItemType[] extends T // Differentiate readonly and mutable arrays
918
+ ? ReadonlyArray<_PartialDeep<Options['allowUndefinedInNonTupleArrays'] extends false ? ItemType : ItemType | undefined, Options>>
919
+ : Array<_PartialDeep<Options['allowUndefinedInNonTupleArrays'] extends false ? ItemType : ItemType | undefined, Options>>
920
+ : PartialObjectDeep<T, Options> // Tuples behave properly
921
+ : T // If they don't opt into array testing, just use the original type
922
+ : PartialObjectDeep<T, Options>
923
+ : unknown;
917
924
 
918
925
  /**
919
926
  Same as `PartialDeep`, but accepts only `Map`s and as inputs. Internal helper for `PartialDeep`.
@@ -938,9 +945,12 @@ type PartialReadonlySetDeep<T, Options extends Required<PartialDeepOptions>> = {
938
945
  /**
939
946
  Same as `PartialDeep`, but accepts only `object`s as inputs. Internal helper for `PartialDeep`.
940
947
  */
941
- type PartialObjectDeep<ObjectType extends object, Options extends Required<PartialDeepOptions>> = {
942
- [KeyType in keyof ObjectType]?: _PartialDeep<ObjectType[KeyType], Options>
943
- };
948
+ type PartialObjectDeep<ObjectType extends object, Options extends Required<PartialDeepOptions>> =
949
+ (ObjectType extends (...arguments_: any) => unknown
950
+ ? (...arguments_: Parameters<ObjectType>) => ReturnType<ObjectType>
951
+ : {}) & ({
952
+ [KeyType in keyof ObjectType]?: _PartialDeep<ObjectType[KeyType], Options>
953
+ });
944
954
 
945
955
  type ExcludeUndefined<T> = Exclude<T, undefined>;
946
956
 
@@ -2648,28 +2658,49 @@ type MergedReglesResult<TRegles extends Record<string, SuperCompatibleRegleRoot>
2648
2658
  };
2649
2659
  declare function mergeRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TScoped extends boolean = false>(regles: TRegles, _scoped?: TScoped): TScoped extends false ? MergedRegles<TRegles> : MergedScopedRegles;
2650
2660
 
2651
- declare function createScopedUseRegle<TCustomRegle extends useRegleFn<any, any> = useRegleFn<Partial<AllRulesDeclarations>>, TReturnedRegle extends useRegleFn<any, any> = TCustomRegle extends useRegleFn<infer A, infer B> ? useRegleFn<A, B, {
2652
- dispose: () => void;
2653
- register: () => void;
2654
- }, {
2661
+ type useCollectScopeFn<TNamedScoped extends boolean = false> = TNamedScoped extends true ? <const TValue extends Record<string, Record<string, any>>>(namespace?: MaybeRefOrGetter<string>) => {
2662
+ r$: MergedRegles<{
2663
+ [K in keyof TValue]: RegleRoot<TValue[K]>;
2664
+ }>;
2665
+ } : <TValue extends Record<string, unknown>[] = Record<string, unknown>[]>(namespace?: MaybeRefOrGetter<string>) => {
2666
+ r$: MergedScopedRegles<TValue>;
2667
+ };
2668
+
2669
+ type UseScopedRegleOptions<TAsRecord extends boolean> = {
2655
2670
  namespace?: MaybeRefOrGetter<string>;
2656
- }> : useRegleFn<Partial<AllRulesDeclarations>>>(options?: {
2671
+ } & (TAsRecord extends true ? {
2672
+ scopeKey: string;
2673
+ } : {});
2674
+
2675
+ type CreateScopedUseRegleOption<TCustomRegle extends useRegleFn<any, any>, TAsRecord extends boolean> = {
2676
+ /**
2677
+ * Inject a global configuration to the exported composables to keep your translations and typings
2678
+ */
2657
2679
  customUseRegle?: TCustomRegle;
2680
+ /**
2681
+ * Store the collected instances externally
2682
+ */
2658
2683
  customStore?: Ref<ScopedInstancesRecordLike>;
2659
- }): {
2684
+ /**
2685
+ * Set the
2686
+ */
2687
+ asRecord?: TAsRecord;
2688
+ };
2689
+ declare function createScopedUseRegle<TCustomRegle extends useRegleFn<any, any> = useRegleFn<Partial<AllRulesDeclarations>>, TAsRecord extends boolean = false, TReturnedRegle extends useRegleFn<any, any, any, any> = TCustomRegle extends useRegleFn<infer A, infer B> ? useRegleFn<A, B, {
2690
+ dispose: () => void;
2691
+ register: () => void;
2692
+ }, UseScopedRegleOptions<TAsRecord>> : useRegleFn<Partial<AllRulesDeclarations>>>(options?: CreateScopedUseRegleOption<TCustomRegle, TAsRecord>): {
2660
2693
  useScopedRegle: TReturnedRegle;
2661
- useCollectScope<TValue extends Record<string, unknown>[] = Record<string, unknown>[]>(namespace?: MaybeRefOrGetter<string>): {
2662
- r$: MergedScopedRegles<TValue>;
2663
- };
2694
+ useCollectScope: useCollectScopeFn<TAsRecord>;
2664
2695
  };
2665
- declare const useCollectScope: <TValue extends Record<string, unknown>[] = Record<string, unknown>[]>(namespace?: MaybeRefOrGetter<string>) => {
2696
+ declare const useCollectScope: <TValue extends Record<string, unknown>[] = Record<string, unknown>[]>(namespace?: vue.MaybeRefOrGetter<string>) => {
2666
2697
  r$: MergedScopedRegles<TValue>;
2667
2698
  };
2668
2699
  declare const useScopedRegle: useRegleFn<Partial<AllRulesDeclarations>, never, {
2669
2700
  dispose: () => void;
2670
2701
  register: () => void;
2671
2702
  }, {
2672
- namespace?: MaybeRefOrGetter<string>;
2703
+ namespace?: vue.MaybeRefOrGetter<string>;
2673
2704
  }>;
2674
2705
 
2675
2706
  /**
@@ -2751,4 +2782,4 @@ declare function defineRules<TRules extends RegleUnknownRulesTree>(rules: TRules
2751
2782
  */
2752
2783
  declare function refineRules<TRules extends RegleUnknownRulesTree, TRefinement extends ReglePartialRuleTree<InferInput<TRules>> & RegleUnknownRulesTree>(rules: TRules, refinement: (state: Ref<InferInput<TRules>>) => TRefinement): (state: Ref<InferInput<TRules>>) => Merge<TRules, TRefinement>;
2753
2784
 
2754
- export { type $InternalRegleStatus, type AllRulesDeclarations, type CommonAlphaOptions, type CommonComparisonOptions, type DeepMaybeRef, type DeepReactiveState, type DefaultValidatorsTree, type FormRuleDeclaration, type InferInput, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InferSafeOutput, type InlineRuleDeclaration, InternalRuleType, type JoinDiscriminatedUnions, type LocalRegleBehaviourOptions, type Maybe, type MaybeInput, type MaybeOutput, type MaybeVariantStatus, type MergedRegles, type NarrowVariant, type NoInferLegacy, type PrimitiveTypes, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialRuleTree, type RegleResult, type RegleRoot, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleMetadataExtended, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleTypeReturn, type RegleRuleWithParamsDefinition, type RegleShortcutDefinition, type RegleSingleField, type RegleStatus, type RegleUniversalParams, type RegleUnknownRulesTree, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleRuleTree as RegleValidationTree, type ResolvedRegleBehaviourOptions, type ScopedInstancesRecord, type ScopedInstancesRecordLike, type SuperCompatibleRegleCollectionErrors, type SuperCompatibleRegleCollectionStatus, type SuperCompatibleRegleFieldStatus, type SuperCompatibleRegleResult, type SuperCompatibleRegleRoot, type SuperCompatibleRegleRuleStatus, type SuperCompatibleRegleStatus, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, useRegle, useRootStorage, useScopedRegle, variantToRef };
2785
+ export { type $InternalRegleStatus, type AllRulesDeclarations, type CommonAlphaOptions, type CommonComparisonOptions, type DeepMaybeRef, type DeepReactiveState, type DefaultValidatorsTree, type FormRuleDeclaration, type InferInput, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InferSafeOutput, type InlineRuleDeclaration, InternalRuleType, type JoinDiscriminatedUnions, type LocalRegleBehaviourOptions, type Maybe, type MaybeInput, type MaybeOutput, type MaybeVariantStatus, type MergedRegles, type MergedScopedRegles, type NarrowVariant, type NoInferLegacy, type PrimitiveTypes, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialRuleTree, type RegleResult, type RegleRoot, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleMetadataExtended, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleTypeReturn, type RegleRuleWithParamsDefinition, type RegleShortcutDefinition, type RegleSingleField, type RegleStatus, type RegleUniversalParams, type RegleUnknownRulesTree, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleRuleTree as RegleValidationTree, type ResolvedRegleBehaviourOptions, type ScopedInstancesRecord, type ScopedInstancesRecordLike, type SuperCompatibleRegleCollectionErrors, type SuperCompatibleRegleCollectionStatus, type SuperCompatibleRegleFieldStatus, type SuperCompatibleRegleResult, type SuperCompatibleRegleRoot, type SuperCompatibleRegleRuleStatus, type SuperCompatibleRegleStatus, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, type inferRulesFn, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, useRegle, type useRegleFn, useRootStorage, useScopedRegle, variantToRef };
@@ -1,2 +1,2 @@
1
- import {effectScope,computed,toValue,ref,watch,getCurrentInstance,onMounted,reactive,getCurrentScope,onScopeDispose,isRef,shallowRef,watchEffect,triggerRef,toRef,unref,version,nextTick}from'vue';function te(e,t=true){return e==null?true:e instanceof Date?isNaN(e.getTime()):e.constructor.name=="File"||e.constructor.name=="FileList"?e.size<=0:Array.isArray(e)?t?e.length===0:false:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var Ct=Symbol("regle-rule");function or(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 N(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>N(n)))),r=="Map"&&(t=new Map([...e].map(n=>[N(n[0]),N(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,or(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=N(e[n]);}return t}function _(e){return e&&(e instanceof Date||e.constructor.name=="File"||e.constructor.name=="FileList")?false:typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pe(e,...t){for(var r=[].slice.call(arguments),n,a=r.length;n=r[a-1],a--;)if(!n||typeof n!="object"&&typeof n!="function")throw new Error("expected object, got "+n);for(var o=r[0],s=r.slice(1),i=s.length,a=0;a<i;a++){var g=s[a];for(var R in g)o[R]=g[R];}return o}function Qe(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}function ke(e,t,r){let n,a=(...o)=>new Promise(s=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(s);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a}var Xe={Inline:"__inline",Async:"__async"};function Dt(e,t){return e.some(r=>r[t])}function It(e,t){return e.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[])}function re(e){try{return e.map(t=>toValue(t))}catch{return []}}function wt(e){return e.map(t=>t instanceof Function?computed(t):isRef(t)?t:toRef(()=>t))}function Ot(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(s=>s.trim()).filter(s=>s.length>0).length:0}function Ze(e,...t){let{validator:r,type:n}=e,a=n===Xe.Async||r.constructor.name==="AsyncFunction";return {...{validator(i,...g){return e.validator(i,...re(g.length?g:t))},message(i){return typeof e.message=="function"?e.message({...i,$params:re(i?.$params?.length?i.$params:t)}):e.message},active(i){return typeof e.active=="function"?e.active({...i,$params:re(i?.$params?.length?i.$params:t)}):e.active??true},tooltip(i){return typeof e.tooltip=="function"?e.tooltip({...i,$params:re(i?.$params?.length?i.$params:t)}):e.tooltip??[]},exec(i){let g=e.validator(i,...re(t)),R;return g instanceof Promise?g.then(h=>(R=h,typeof R=="object"&&"$valid"in R?R.$valid:typeof R=="boolean"?R:false)):(R=g,typeof R=="object"&&"$valid"in R?R.$valid:typeof R=="boolean"?R:false)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:false,_tooltip_patched:false,_async:a,_params:wt(t),_brand:Ct}}function et(e){if(typeof e.validator=="function"){let r=Ze(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(Ot(e.validator)>1){let a=function(...o){return Ze(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.tooltip=r.tooltip,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._tooltip=r.tooltip,a._type=e.type,a._message_pacthed=false,a._tooltip_pacthed=false,a._async=n,a}else return r}throw new Error("[createRule] validator must be a function")}function tt(){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 s($){let E=t.value.get($);if(E)return E;{let x=ref({});return t.value.set($,x),x}}function i($){let E=r.value.get($);if(E)return E;{let x=ref([]);return r.value.set($,x),x}}function g($,E,x){o.value.set(`${$}-${E}`,x);}function R($,E){return o.value.get(`${$}-${E}`)}function h($,E){$&&E!=null&&o.value.delete(`${$}-${E}`);}function j($,E){n.value.set($,E);}function C($){return n.value.get($)??false}function A($,E){e.value.set($,E);}function P($,E){let x=e.value.get($);return x?w(E,x)?{valid:true}:{valid:false}:void 0}function w($,E){let x=Object.keys(E),d=Object.keys($);return d.length!==x.length||!d.every(c=>x.includes(c))?false:d.every(c=>{let y=$[c],S=E[c];return !S||!y||typeof y=="function"||typeof S=="function"||typeof y=="number"||typeof y=="boolean"?false:y._params?y._params?.every((k,G)=>{if(typeof S=="number"||typeof S=="boolean")return true;{let K=re(S._params),z=re(y._params);return K?.[G]===z?.[G]}}):true})}function l($){let E=a.value.get($);if(E)return E;{let x=ref(false),d=ref(true),b=ref({}),c=ref(false);return a.value.set($,{$pending:x,$valid:d,$metadata:b,$validating:c}),{$pending:x,$valid:d,$metadata:b,$validating:c}}}return getCurrentScope()&&onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:A,setDirtyEntry:j,checkRuleDeclEntry:P,getDirtyState:C,trySetRuleStatusRef:l,getFieldsEntry:s,getCollectionsEntry:i,getArrayStatus:R,addArrayStatus:g,deleteArrayStatus:h,arrayStatusStorage:o}}function Ne(e){return _(e.value)}function rt(e,t,r){let n=effectScope(),a;return e instanceof Function?a=n.run(()=>e(t,r??0)):a=e,{scope:n,unwrapped:a}}var Me={LessThan:-1,EqualTo:0,GreaterThan:1};function mr(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]),s=Number(n[a]);if(o>s)return Me.GreaterThan;if(s>o)return Me.LessThan;if(!isNaN(o)&&isNaN(s))return Me.GreaterThan;if(isNaN(o)&&!isNaN(s))return Me.LessThan}return Me.EqualTo}var Ue=mr(version,"3.5.0")!==-1;function yr(){return Math.floor(Math.random()*Date.now()).toString()}function he(){return typeof window>"u"?yr():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Pt(e){return getCurrentScope()?(onScopeDispose(e),true):false}function Mt(e){let t=false,r,n=effectScope(true);return (...a)=>(t||(r=n.run(()=>e(...a)),t=true),r)}function Ge(e,t){return Ne(e)||_(t.value)&&!te(t.value)&&!Object.entries(t.value).some(([r,n])=>me(n)||typeof n=="function")}function jt(e,t,r=false){return !!e.value&&_(e.value)&&"$each"in e.value||r&&Array.isArray(t.value)&&t.value.some(_)||Array.isArray(t.value)&&t.value.some(_)}function We(e){return !!e.value&&_(e.value)}function me(e){return _(e)&&"_validator"in e}function je(e){return typeof e.value=="function"?"_validator"in e.value:true}function At(e){return _(e)&&"$fields"in e}function nt(e){return !!e&&"$rules"in e}function at({field:e,silent:t=false}){return Object.entries(e.$rules??{}).map(([r,n])=>t&&!n.$valid||!n.$valid&&e.$error&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$error?e.$externalErrors??[]:[]).concat(e.$error?e.$schemaErrors??[]:[])}function Vt({field:e}){return Object.entries(e.$rules??{}).map(([t,r])=>r.$tooltip).filter(t=>!!t).reduce((t,r)=>typeof r=="string"?t?.concat([r]):t?.concat(r),[])}function Ft(e){return _(e)&&"$each"in e}function lt(e,t){let{includePath:r=false}=t??{};if(Array.isArray(e)&&e.every(n=>!_(n)))return e;if(Ft(e)){let n=r?e.$self?.map(o=>({error:o,path:""}))??[]:e.$self??[],a=e.$each?.map(o=>Be(o,r))??[];return n?.concat(a.flat())}else return Object.entries(e).map(([n,a])=>Be(a,r,[n])).flat()}function Be(e,t=false,r){let n=t&&!r?[]:r;if(Array.isArray(e)&&e.every(a=>!_(a)))return t?e.map(a=>({error:a,path:n?.join(".")??""})):e;if(Ft(e)){let a=n?.length?e.$self?.map(s=>({error:s,path:n.join(".")}))??[]:e.$self??[],o=e.$each?.map((s,i)=>Be(s,t,n?.concat(i.toString())))??[];return a?.concat(o.flat())}else return Object.entries(e).map(([a,o])=>Be(o,t,n?.concat(a))).flat()}function _t({customMessages:e,rule:t,ruleKey:r,state:n,path:a,storage:o,$debounce:s,modifiers:i}){let g=effectScope(),R={},h,j=ref(false),C=ref(false),{$pending:A,$valid:P,$metadata:w,$validating:l}=o.trySetRuleStatusRef(`${a}.${r}`);function $(){g=effectScope(),R=g.run(()=>{let S=ref(false),k=ref(false),G=ref(true),K=ref(false),z=ref(false),le=computed(()=>({$value:n.value,$error:k.value,$dirty:S.value,$pending:K.value,$correct:z.value,$invalid:G.value,$rule:{$valid:P.value,$invalid:!P.value,$pending:A.value},$params:f.value,...w.value})),D=computed(()=>je(t)?typeof t.value.active=="function"?t.value.active(le.value):!!t.value.active:true);function H(O){let J="",m=e?e[r]?.[O]:void 0;if(m&&(typeof m=="function"?J=m(le.value):J=m),je(t)){let V=`_${O}_patched`;m&&!t.value[V]||(typeof t.value[O]=="function"?J=t.value[O](le.value):J=t.value[O]??"");}return J}let ge=computed(()=>{let O=H("message");return te(O)&&(O="This field is not valid"),O}),fe=computed(()=>H("tooltip")),u=computed(()=>je(t)&&t.value.type?t.value.type:r),p=computed(()=>je(t)?t.value.validator:t.value),f=computed(()=>typeof t.value=="function"?[]:re(t.value._params??[])),I=computed(()=>`${a}.${u.value}`);return {$active:D,$message:ge,$type:u,$validator:p,$params:f,$path:I,$tooltip:fe,$fieldCorrect:z,$fieldError:k,$fieldDirty:S,$fieldPending:K,$fieldInvalid:G}}),h=watch(R?.$params,()=>{(!i.$silent.value||i.$rewardEarly.value&&R.$fieldError.value)&&b();});}$();function E(){P.value=true,R.$fieldDirty.value&&(A.value=true);}async function x(){let S=false;try{let k=R.$validator.value;if(typeof k!="function")return console.error(`${a}: Incorrect rule format, it needs to be either a function or created with "createRule".`),!1;let G=k(n.value,...R.$params.value),K=n.value;E();let z;if(G instanceof Promise?z=await G:z=G,n.value!==K)return !0;if(typeof z=="boolean")S=z;else {let{$valid:le,...D}=z;S=le,w.value=D;}}catch{S=false;}finally{A.value=false;}return S}let d=ke(x,s??200);async function b(){try{l.value=!0;let S=!1;if(C.value=!0,me(t.value)&&t.value._async)S=await d();else {let k=R.$validator.value,G=k(n.value,...R.$params.value);if(G 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(G!=null)if(typeof G=="boolean")S=G;else {let{$valid:K,...z}=G;S=K,w.value=z;}}return P.value=S,S}catch{return false}finally{l.value=false,C.value=false;}}function c(){P.value=true,w.value={},A.value=false,l.value=false,$();}function y(){h(),g.stop(),g=effectScope();}return reactive({...R,$pending:A,$valid:P,$metadata:w,$haveAsync:j,$maybePending:C,$validating:l,$parse:b,$unwatch:y,$watch:$,$reset:c})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:s,externalErrors:i,schemaErrors:g,schemaMode:R,onUnwatch:h,$isArray:j,initialState:C,shortcuts:A,onValidate:P}){let w=effectScope(),l,$=[],E,x,d,b,c,y=()=>{};function S(){let T=t.value,F=o.checkRuleDeclEntry(n,T);H.value=Object.fromEntries(Object.entries(T).filter(([v])=>v.startsWith("$"))),K(),D.value=Object.fromEntries(Object.entries(t.value).filter(([v])=>!v.startsWith("$")).map(([v,ee])=>{if(ee){let se=toRef(()=>ee);return [v,_t({modifiers:{$silent:l.$silent,$rewardEarly:l.$rewardEarly},customMessages:r,rule:se,ruleKey:v,state:e,path:n,storage:o,$debounce:H.value.$debounce})]}return []}).filter(v=>!!v.length)),l.processShortcuts(),k(),F?.valid!=null&&(l.$dirty.value=o.getDirtyState(n),(l.$dirty.value&&!l.$silent.value||l.$rewardEarly.value&&l.$error.value)&&y()),o.addRuleDeclEntry(n,T);}function k(){y=l.$debounce.value?ke(le,l.$debounce.value??l.$haveAnyAsyncRule?100:0):le;}function G(){D.value&&Object.entries(D.value).forEach(([T,F])=>{F.$unwatch();}),d(),c?.(),l.$dirty.value&&o.setDirtyEntry(n,l.$dirty.value),E?.(),x?.(),w.stop(),w=effectScope(),$.forEach(T=>T.stop()),$=[],h?.(),b?.();}function K(){D.value&&Object.entries(D.value).forEach(([T,F])=>{F.$watch();}),l=w.run(()=>{let T=ref(false),F=ref(false),v=computed(()=>T.value),ee=computed(()=>H.value.$debounce),se=computed(()=>H.value.$lazy!=null?H.value.$lazy:unref(s.lazy)!=null?unref(s.lazy):false),oe=computed(()=>H.value.$rewardEarly!=null?H.value.$rewardEarly:unref(s.rewardEarly)!=null?unref(s.rewardEarly):false),L=computed(()=>H.value.$clearExternalErrorsOnChange!=null?H.value.$clearExternalErrorsOnChange:unref(s.clearExternalErrorsOnChange)!=null?unref(s.clearExternalErrorsOnChange):true),M=computed(()=>oe.value?true:H.value.$silent!=null?H.value.$silent:unref(s.silent)!=null?unref(s.silent):false),W=computed(()=>H.value.$autoDirty!=null?H.value.$autoDirty:unref(s.autoDirty)!=null?unref(s.autoDirty):true),Oe=computed(()=>Object.entries(D.value).some(([ie,X])=>X.$validating)),mt=computed({get:()=>e.value,set(ie){E(),e.value=ie,z();}}),Fe=computed(()=>$e.value&&!ve.value&&T.value),yt=computed(()=>at({field:{$rules:D.value,$error:Fe.value,$externalErrors:i?.value,$schemaErrors:g?.value}})),gt=computed(()=>at({field:{$rules:D.value,$error:Fe.value,$externalErrors:i?.value,$schemaErrors:g?.value},silent:true})),Ye=computed(()=>T.value?C.value instanceof Date&&e.value instanceof Date?Qe(C.value).getDate()!==Qe(e.value).getDate():C.value==null?!!e.value:Array.isArray(e.value)&&Array.isArray(C.value)?e.value.length!==C.value.length:C.value!==e.value:false),vt=computed(()=>Ye.value),$t=computed(()=>Vt({field:{$rules:D.value}})),St=computed(()=>(M.value||v.value)&&!($e.value||ve.value)),ve=computed(()=>F.value||!oe.value?Object.entries(D.value).some(([ie,X])=>X.$pending):false),$e=computed(()=>i?.value?.length||g?.value?.length?true:_e.value?false:!oe.value||oe.value&&F.value?Object.entries(D.value).some(([ie,X])=>!(X.$valid&&!X.$maybePending)):false),Tt=computed(()=>a),_e=computed(()=>!!(te(D.value)&&!R)),ht=computed(()=>i?.value?.length||_e.value?false:T.value&&!te(e.value)&&!Oe.value&&!ve.value?R?!g?.value?.length:Object.values(D.value).some(X=>X.$active)?Object.values(D.value).filter(X=>X.$active).every(X=>X.$valid):false:false),ar=computed(()=>Object.entries(D.value).some(([ie,X])=>X.$haveAsync));function lr(){A?.fields&&Object.entries(A.fields).forEach(([ie,X])=>{let Et=effectScope();bt[ie]=Et.run(()=>{let xt=ref();return watchEffect(()=>{xt.value=X(reactive({$dirty:T,$externalErrors:i?.value??[],$value:e,$silentValue:mt,$rules:D,$error:Fe,$pending:ve,$invalid:$e,$correct:ht,$errors:yt,$ready:St,$silentErrors:gt,$anyDirty:v,$tooltips:$t,$name:Tt,$inactive:_e,$edited:Ye,$anyEdited:vt}));}),xt}),$.push(Et);});}let bt={};return watch($e,ie=>{ie||(F.value=false);}),{$error:Fe,$pending:ve,$invalid:$e,$correct:ht,$debounce:ee,$lazy:se,$errors:yt,$ready:St,$silentErrors:gt,$rewardEarly:oe,$autoDirty:W,$silent:M,$clearExternalErrorsOnChange:L,$anyDirty:v,$edited:Ye,$anyEdited:vt,$name:Tt,$haveAnyAsyncRule:ar,$shortcuts:bt,$validating:Oe,$tooltips:$t,$dirty:T,triggerPunishment:F,processShortcuts:lr,$silentValue:mt,$inactive:_e}}),z(),d=watch(l.$dirty,T=>{o.setDirtyEntry(n,T),Object.values(D.value).forEach(F=>{F.$fieldDirty=T;});}),c=watch([l.$error,l.$correct,l.$invalid,l.$pending],()=>{Object.values(D.value).forEach(T=>{T.$fieldError=l.$error.value,T.$fieldInvalid=l.$invalid.value,T.$fieldPending=l.$pending.value,T.$fieldCorrect=l.$correct.value;});}),x=watch(l.$invalid,T=>{l.$rewardEarly.value&&!T&&(l.triggerPunishment.value=false);}),b=watch(l.$haveAnyAsyncRule,k);}function z(){E=watch(e,()=>{l.$autoDirty.value&&!l.$silent.value&&(l.$dirty.value||(l.$dirty.value=true)),t.value instanceof Function&&S(),(!l.$silent.value||l.$rewardEarly.value&&l.$error.value)&&y(),l.$rewardEarly.value!==true&&l.$clearExternalErrorsOnChange.value&&f();},{deep:j?true:Ue?1:true});}function le(){Object.values(D.value).forEach(T=>{T.$parse();});}let D=ref({}),H=ref({});S();function ge(T,F){if(f(),l.$dirty.value=false,l.triggerPunishment.value=false,o.setDirtyEntry(n,false),!F)if(T?.toInitialState)e.value=N(C);else if(T?.toState){let v;typeof T?.toState=="function"?v=T?.toState():v=T?.toState,C.value=N(v),e.value=N(v);}else C.value=_(e.value)?N(e.value):Array.isArray(e.value)?[...e.value]:e.value;T?.clearExternalErrors&&f(),F||Object.entries(D.value).forEach(([v,ee])=>{ee.$reset();}),!l.$lazy.value&&!l.$silent.value&&Object.values(D.value).forEach(v=>v.$parse());}function fe(T=true,F=false){l.$dirty.value||(l.$dirty.value=true),F&&T?(!l.$silent.value||l.$rewardEarly.value&&l.$error.value)&&y():T&&y();}async function u(){try{if(R)return P?(fe(!1),P()):{valid:!1,data:e.value};let T=e.value;if(l.triggerPunishment.value=!0,!l.$dirty.value)l.$dirty.value=!0;else if(!l.$silent.value&&l.$dirty.value&&!l.$pending.value)return {valid:!l.$error.value,data:T};return R?{valid:!g?.value?.length,data:T}:te(D.value)?{valid:!0,data:T}:{valid:(await Promise.allSettled(Object.entries(D.value).map(([ee,se])=>se.$parse()))).every(ee=>ee.status==="fulfilled"?ee.value===!0:!1),data:T}}catch{return {valid:false,data:e.value}}}function p(T=true){return l.$dirty.value?e.value:T?{_null:true}:null}function f(){i?.value?.length&&(i.value=[]);}!l.$lazy.value&&!l.$dirty.value&&!l.$silent.value&&y();let{$shortcuts:I,$validating:O,$autoDirty:J,$rewardEarly:m,$clearExternalErrorsOnChange:V,$haveAnyAsyncRule:q,$debounce:Z,$lazy:Q,triggerPunishment:Re,...ce}=l;return reactive({...ce,$externalErrors:i,$value:e,$rules:D,...I,$reset:ge,$touch:fe,$validate:u,$unwatch:G,$watch:K,$extractDirtyFields:p,$clearExternalErrors:f})}function it({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:s,rules:i,externalErrors:g,schemaErrors:R,initialState:h,shortcuts:j,fieldName:C,schemaMode:A}){let P=i.$key?i.$key:he(),w=`${t}.${String(P)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?w=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:P,enumerable:false,configurable:false,writable:false}}));let l=toRef(g?.value??[],r),$=computed(()=>R?.value?.[r]),E=xe({state:o,rulesDef:toRef(()=>i),customMessages:s,path:w,storage:a,options:n,externalErrors:l,schemaErrors:$,initialState:h,shortcuts:j,fieldName:C,schemaMode:A});if(E){let x=o.value?.$id;E.$id=x??String(P),a.addArrayStatus(e,E.$id,E);}return E}function Gt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:s,schemaErrors:i,schemaMode:g,initialState:R,shortcuts:h,fieldName:j}){let C=effectScope(),A,P=effectScope(),w,l=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let $=ref(),E=ref(e.value),x,d=ref({}),b=a.getCollectionsEntry(n);w=P.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.every(p=>typeof p!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(p=>me(p)||typeof p=="function"):false)})),c(),k();function c(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?($.value=he(),Object.defineProperties(e.value,{$id:{value:$.value,enumerable:false,configurable:false,writable:false}})):e.value?.$id&&($.value=e.value.$id)),E.value=d.value.$value,Array.isArray(e.value)&&!w.isPrimitiveArray.value?b.value=e.value.filter(u=>typeof u=="object").map((u,p)=>{let{scope:f,unwrapped:I}=rt(t.value.$each,toRef(()=>u),p);f&&l.push(f);let O=toRef(R.value??[],p),J=toRef(s?.value??{},"$each"),m=computed(()=>i?.value?.$each),V=it({$id:$.value,path:n,customMessages:r,rules:I??{},stateValue:toRef(()=>u),index:p,options:o,storage:a,externalErrors:J,schemaErrors:m,initialState:O,shortcuts:h,fieldName:j,schemaMode:g});return V||null}).filter(u=>!!u):b.value=[],d.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:toRef(s?.value??{},"$self"),schemaErrors:computed(()=>i?.value?.$self),$isArray:true,initialState:R,shortcuts:h,fieldName:j,schemaMode:g});}function y(){if(Array.isArray(e.value)&&!w.isPrimitiveArray.value){let u=N(b.value);b.value=e.value.filter(p=>typeof p=="object").map((p,f)=>{let I=toRef(()=>p);if(p.$id&&b.value.find(O=>O.$id===p.$id)){let O=a.getArrayStatus($.value,p.$id);return O?(O.$value=I,O):null}else {let{scope:O,unwrapped:J}=rt(t.value.$each,I,f);O&&l.push(O);let m=toRef(s?.value??{},"$each"),V=computed(()=>i?.value?.$each??[]),q=it({$id:$.value,path:n,customMessages:r,rules:J??{},stateValue:I,index:f,options:o,storage:a,externalErrors:m,schemaErrors:V,initialState:toRef(R.value??[],f),shortcuts:h,fieldName:j,schemaMode:g});return q||null}}).filter(p=>!!p),u.filter(p=>!e.value?.find(f=>p.$id===f.$id)).forEach((p,f)=>{a.deleteArrayStatus($.value,f.toString());});}else b.value=[];}function S(){x=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?c():y();},{deep:Ue?1:true,flush:"pre"});}function k(){S(),C=effectScope(),A=C.run(()=>{let u=computed({get:()=>e.value,set(v){x(),e.value=v,S();}}),p=computed(()=>d.value.$dirty&&(!b.value.length||b.value.every(v=>v.$dirty))),f=computed(()=>d.value.$anyDirty||b.value.some(v=>v.$anyDirty)),I=computed(()=>d.value.$invalid||b.value.some(v=>v.$invalid)),O=computed(()=>(te(d.value.$rules)?true:d.value.$correct)&&(!b.value.length||b.value.every(v=>v.$correct||v.$anyDirty&&!v.$invalid))),J=computed(()=>d.value.$error||b.value.some(v=>v.$error)),m=computed(()=>!(I.value||V.value)),V=computed(()=>d.value.$pending||b.value.some(v=>v.$pending)),q=computed(()=>!!b.value.length&&b.value.every(v=>v.$edited)),Z=computed(()=>d.value.$anyEdited||b.value.some(v=>v.$anyEdited)),Q=computed(()=>({$self:d.value.$errors,$each:b.value.map(v=>v.$errors)})),Re=computed(()=>({$self:d.value.$silentErrors,$each:b.value.map(v=>v.$silentErrors)})),ce=computed(()=>j);function T(){h?.collections&&Object.entries(h?.collections).forEach(([v,ee])=>{let se=effectScope();F[v]=se.run(()=>{let oe=ref();return watchEffect(()=>{oe.value=ee(reactive({$dirty:p,$error:J,$silentValue:u,$pending:V,$invalid:I,$correct:O,$errors:Q,$ready:m,$silentErrors:Re,$anyDirty:f,$name:ce,$each:b,$self:d,$value:e,$edited:q,$anyEdited:Z}));}),oe}),l.push(se);});}let F={};return T(),{$dirty:p,$anyDirty:f,$invalid:I,$correct:O,$error:J,$pending:V,$errors:Q,$silentErrors:Re,$ready:m,$name:ce,$shortcuts:F,$silentValue:u,$edited:q,$anyEdited:Z}}),w.isPrimitiveArray.value&&t.value.$each&&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`);}function G(){x&&x(),d.value&&d.value.$unwatch(),b.value&&b.value.forEach(u=>{"$dirty"in u&&u.$unwatch();}),C.stop(),C=effectScope(),P.stop(),P=effectScope(true),l.forEach(u=>u.stop()),l=[];}function K(u=true,p=false){d.value.$touch(u,p),b.value.forEach(f=>{f.$touch(u,p);});}function z(u,p){if(G(),!p)if(u?.toInitialState)e.value=N(R.value);else if(u?.toState){let f;typeof u?.toState=="function"?f=u?.toState():f=u?.toState,R.value=N(f),e.value=N(f);}else R.value=N(e.value);u?.clearExternalErrors&&D(),d.value.$reset(),b.value.forEach(f=>{f.$reset(u,true);}),p||c();}async function le(){let u=e.value;try{return {valid:(await Promise.allSettled([d.value.$validate(),...b.value.map(I=>I.$validate())])).every(I=>I.status==="fulfilled"?I.value.valid===!0:!1),data:u}}catch{return {valid:false,data:u}}}function D(){d.value.$clearExternalErrors(),b.value.forEach(u=>{u.$clearExternalErrors();});}function H(u=true){let p=b.value.map(f=>{if(At(f))return f.$extractDirtyFields(u)});return u&&p.every(f=>te(f))&&(p=[]),p}let{$shortcuts:ge,...fe}=A;return reactive({$self:d,...fe,...ge,$each:b,$value:e,$validate:le,$unwatch:G,$watch:k,$touch:K,$reset:z,$extractDirtyFields:H,$clearExternalErrors:D})}function He({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:a,schemaErrors:o,rootSchemaErrors:s,validationGroups:i,initialState:g,fieldName:R,...h}){let j=effectScope(),C,A=[],P=null,w=null,l=null,$=null;async function x(u=true){let p=Object.entries(e.value),f=Object.fromEntries(p.filter(([m,V])=>!!V).map(([m,V])=>{if(V){let q=toRef(t.value??{},m),Z=toRef(()=>V),Q=toRef(a?.value??{},m),Re=computed(()=>o?.value?.[m]),ce=toRef(g?.value??{},m);return [m,xe({state:q,rulesDef:Z,path:r?`${r}.${m}`:m,externalErrors:Q,schemaErrors:Re,initialState:ce,fieldName:m,...h})]}return []})),I=Object.fromEntries(Object.entries(unref(a)??{}).filter(([m,V])=>!(m in e.value)&&!!V).map(([m])=>{let V=toRef(t.value??{},m),q=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),Q=toRef(g?.value??{},m);return [m,xe({state:V,rulesDef:computed(()=>({})),path:r?`${r}.${m}`:m,externalErrors:q,schemaErrors:Z,initialState:Q,fieldName:m,...h})]})),O=Object.fromEntries(Object.entries(unref(o)??{}).map(([m])=>{let V=toRef(t.value??{},m),q=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),Q=toRef(g?.value??{},m);return [m,xe({state:V,rulesDef:computed(()=>({})),path:r?`${r}.${m}`:m,externalErrors:q,schemaErrors:Z,initialState:Q,fieldName:m,...h})]})),J=Object.fromEntries(Object.entries(t.value??{}).filter(([m])=>!(m in e.value)&&!(m in(I??{}))&&!(m in(O??{}))).map(([m])=>{let V=toRef(t.value??{},m),q=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),Q=toRef(g?.value??{},m);return [m,xe({state:V,rulesDef:computed(()=>({})),path:r?`${r}.${m}`:m,externalErrors:q,schemaErrors:Z,initialState:Q,fieldName:m,...h})]}));d.value={...f,...I,...O,...J},u&&y();}let d=h.storage.getFieldsEntry(r);x();function b(){a&&(l=watch(a,()=>{S(),x();},{deep:true}));}function c(){$=watch(t,()=>{S(),x(),K(true,true);},{flush:"sync"});}function y(){n&&(P?.(),P=watch(n,()=>{S(),x();},{deep:true,flush:"pre"}),b()),s&&(w?.(),w=watch(s,()=>{S(),x();},{deep:true,flush:"post"})),c(),C=j.run(()=>{let u=computed({get:()=>t.value,set(L){S(),t.value=L,x();}}),p=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).every(([L,M])=>M?.$dirty)),f=computed(()=>Object.entries(d.value).some(([L,M])=>M?.$anyDirty)),I=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).some(([L,M])=>M?.$invalid)),O=computed(()=>{let L=Object.entries(d.value).filter(([M,W])=>nt(W)?!W.$inactive:true);return L.length?L.every(([M,W])=>h.schemaMode?W.$correct:nt(W)?"required"in W.$rules&&W.$rules.required.$active?W?.$correct:!W.$invalid&&!W.$pending:W?.$correct):false}),J=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).some(([L,M])=>M?.$error)),m=computed(()=>unref(h.options.rewardEarly)!=null?unref(h.options.rewardEarly):false),V=computed(()=>unref(h.options.silent)!=null?unref(h.options.silent):!!m.value),q=computed(()=>(V.value||f.value)&&!(I.value||Q.value)),Z=ref(false),Q=computed(()=>Z.value||Object.entries(d.value).some(([L,M])=>M?.$pending)),Re=computed(()=>Object.fromEntries(Object.entries(d.value).map(([L,M])=>[L,M?.$errors]))),ce=computed(()=>Object.fromEntries(Object.entries(d.value).map(([L,M])=>[L,M?.$silentErrors]))),T=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).every(([L,M])=>M?.$edited)),F=computed(()=>Object.entries(d.value).some(([L,M])=>M?.$anyEdited)),v=computed(()=>R);function ee(){h.shortcuts?.nested&&Object.entries(h.shortcuts.nested).forEach(([L,M])=>{let W=effectScope();oe[L]=W.run(()=>{let Oe=ref();return watchEffect(()=>{Oe.value=M(reactive({$dirty:p,$value:t,$silentValue:u,$error:J,$pending:Q,$invalid:I,$correct:O,$ready:q,$anyDirty:f,$name:v,$silentErrors:ce,$errors:Re,$fields:d,$edited:T,$anyEdited:F}));}),Oe}),A.push(W);});}let se=computed({get:()=>i?Object.fromEntries(Object.entries(i?.(d.value)??{}).map(([L,M])=>M.length?[L,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$correct"].map(W=>[W,Dt(M,W)])),...Object.fromEntries(["$errors","$silentErrors"].map(W=>[W,It(M,W)]))}]:[])):{},set(){}}),oe={};return ee(),{$dirty:p,$anyDirty:f,$invalid:I,$correct:O,$error:J,$pending:Q,$errors:Re,$silentErrors:ce,$ready:q,$name:v,$shortcuts:oe,$groups:se,$silentValue:u,$edited:T,$anyEdited:F,$localPending:Z}});}function S(){P?.(),l?.(),$?.(),w?.(),A=[],C={},d.value&&Object.entries(d.value).forEach(([u,p])=>{p.$unwatch();});}function k(){Object.entries(d.value).forEach(([u,p])=>{p.$clearExternalErrors();});}function G(u,p){if(l?.(),S(),!p)if(u?.toInitialState)t.value=N({...g.value??{}});else if(u?.toState){let f;typeof u?.toState=="function"?f=u?.toState():f=u?.toState,g.value=N(f),t.value=N(f);}else g.value=N(t.value);Object.values(d.value).forEach(f=>{f.$reset(u,true);}),u?.clearExternalErrors&&k(),b(),p||x();}function K(u=true,p=false){Object.values(d.value).forEach(f=>{f.$touch(u,p);});}function z(u){return u.filter(([p,f])=>_(f)?!(f&&typeof f=="object"&&"_null"in f)&&!te(f):Array.isArray(f)?f.length:true)}function le(u=true){let p=Object.entries(d.value).map(([f,I])=>[f,I.$extractDirtyFields(u)]);return u&&(p=z(p)),Object.fromEntries(p)}async function D(){try{if(h.schemaMode)return h.onValidate?(K(!1),C.$localPending.value=!0,h.onValidate()):{valid:!1,data:t.value};{let u=t.value;return {valid:(await Promise.allSettled(Object.values(d.value).map(I=>I.$validate()))).every(I=>I.status==="fulfilled"?I.value.valid===!0:!1),data:u}}}catch{return {valid:false,data:t.value}}finally{C.$localPending.value=false;}}let{$shortcuts:H,$localPending:ge,...fe}=C;return reactive({...fe,...H,$fields:d,$value:t,$reset:G,$touch:K,$validate:D,$unwatch:S,$watch:y,$clearExternalErrors:k,$extractDirtyFields:le})}function xe({rulesDef:e,...t}){if(jt(e,t.state,t.schemaMode))return Gt({rulesDef:e,...t});if(Ge(t.state,e)){if(Ne(t.state))return He({rulesDef:e,...t});{let n=effectScope().run(()=>{let s=toRef(t.state.value?t.state:ref({}));return watch(()=>t.state.value,i=>{s.value=i;},{deep:true}),watch(s,i=>{t.state.value=i;},{deep:true}),{fakeState:s}}),{state:a,...o}=t;return He({rulesDef:e,...o,state:n.fakeState})}}else if(We(e))return Ee({rulesDef:e,...t})}function we({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o,schemaErrors:s,schemaMode:i=false,onValidate:g}){let R=tt(),h=ref();return Ge(n,r)?h.value=He({rootRules:r,rulesDef:r,state:n,customMessages:a?.(),storage:R,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root",path:"",schemaErrors:s,rootSchemaErrors:s,schemaMode:i,onValidate:g}):We(r)&&(h.value=Ee({rulesDef:r,state:n,customMessages:a?.(),storage:R,options:t,externalErrors:t.externalErrors,initialState:e,shortcuts:o,fieldName:"root",path:"",schemaMode:i,schemaErrors:s,onValidate:g})),getCurrentScope()&&onScopeDispose(()=>{h.value?.$unwatch();}),reactive({regle:h})}function ze(e,t,r){let n={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,silent:t?.silent,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function a(o,s,i){let g=isRef(s)?s:typeof s=="function"?void 0:computed(()=>s),R={...n,...i},h=isRef(o)?o:ref(o),j=shallowRef(g??{});typeof s=="function"&&watchEffect(()=>{j.value=s(h),triggerRef(j);});let C=ref(_(h.value)?{...N(h.value)}:N(h.value));return {r$:we({scopeRules:j,state:h,options:R,initialState:C,customRules:e,shortcuts:r}).regle}}return a}var Je=ze();function Ke(){function e(t,r){return r}return e}var ft=Ke();function Ht({rules:e,modifiers:t,shortcuts:r}){let n=ze(e,t,r);n.__config={rules:e,modifiers:t,shortcuts:r};let a=Ke();return {useRegle:n,inferRules:a}}function zt(e,{rules:t,modifiers:r,shortcuts:n}){let a=e.__config??{},o=()=>({...a.rules?.(),...t?.()}),s=a.modifiers&&r?Pe(a.modifiers,r):r,i=a.shortcuts&&n?Pe(a.shortcuts,n):n,g=ze(o,s,i);g.__config={rules:o,modifiers:s,shortcuts:i};let R=Ke();return {useRegle:g,inferRules:R}}function Ve(e,t){let r=t??false,n=computed({get:()=>r?Object.values(e).map(c=>c.$value):Object.fromEntries(Object.entries(e).map(([c,y])=>[c,y.$value])),set:c=>{r||typeof c=="object"&&Object.entries(c).forEach(([y,S])=>e[y].$value=S);}}),a=computed({get:()=>Object.fromEntries(Object.entries(e).map(([c,y])=>[c,y.$silentValue])),set:c=>{typeof c=="object"&&Object.entries(c).forEach(([y,S])=>e[y].$silentValue=S);}}),o=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([y,S])=>S?.$dirty)}),s=computed(()=>Object.entries(e).some(([c,y])=>y?.$anyDirty)),i=computed(()=>Object.entries(e).some(([c,y])=>y?.$invalid)),g=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([y,S])=>S?.$correct||S.$anyDirty&&!S.$invalid)}),R=computed(()=>Object.entries(e).some(([c,y])=>y?.$error)),h=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([y,S])=>S?.$ready)}),j=computed(()=>Object.entries(e).some(([c,y])=>y?.$pending)),C=computed(()=>r?Object.entries(e).map(([c,y])=>y.$errors):Object.fromEntries(Object.entries(e).map(([c,y])=>[c,y.$errors]))),A=computed(()=>r?Object.entries(e).map(([c,y])=>y.$silentErrors):Object.fromEntries(Object.entries(e).map(([c,y])=>[c,y.$silentErrors]))),P=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([y,S])=>S?.$edited)}),w=computed(()=>Object.entries(e).some(([c,y])=>y?.$anyEdited)),l=computed(()=>r?Object.values(e):e);function $(c){Object.values(e).forEach(y=>{y.$reset(c);});}function E(){Object.values(e).forEach(c=>{c.$touch();});}function x(c=true){return Object.values(e).map(y=>y.$extractDirtyFields(c))}function d(){Object.values(e).forEach(c=>{c.$clearExternalErrors();});}async function b(){try{let c=n.value;return {valid:(await Promise.allSettled(Object.values(e).map(k=>k.$validate()))).every(k=>k.status==="fulfilled"?k.value.valid===!0:!1),data:c}}catch{return {valid:false,data:n.value}}}return reactive({...!r&&{$silentValue:a},$errors:C,$silentErrors:A,$instances:l,$value:n,$dirty:o,$anyDirty:s,$invalid:i,$correct:g,$error:R,$pending:j,$ready:h,$edited:P,$anyEdited:w,$reset:$,$touch:E,$validate:b,$extractDirtyFields:x,$clearExternalErrors:d})}function Kt(e){function t(r){let n=computed(()=>toValue(r));s();let a=ref(i(e.value)),o=reactive({r$:a});function s(){n.value&&!e.value[n.value]&&(e.value[n.value]={});}watch(n,s),watch(e,g=>{a.value=i(g);},{deep:true});function i(g){if(n.value){let R=g[n.value]??{};return Ve(R,true)}else return Ve(g["~~global"]??{},true)}return {r$:o.r$}}return {useCollectScope:t}}function Qt(e,t){let r=t??Je;return {useScopedRegle:(a,o,s)=>{let{namespace:i,...g}=s??{},R=computed(()=>toValue(i)),h=ref(`${Object.keys(e.value).length+1}-${he()}`),j=computed(()=>`instance-${h.value}`),{r$:C}=r(a,o,g);P(),Pt(A),watch(R,(w,l)=>{A(l),P();}),getCurrentInstance()&&onMounted(()=>{let w=getCurrentInstance();typeof window<"u"&&w?.proxy?.$el?.parentElement&&document.documentElement&&!document.documentElement.contains(w?.proxy?.$el?.parentElement)&&A();});function A(w){let l=w??R.value;l?e.value[l]&&delete e.value[l][j.value]:e.value["~~global"][j.value]&&delete e.value["~~global"][j.value];}function P(){R.value?(e.value[R.value]||(e.value[R.value]={}),e.value[R.value][j.value]=C):(e.value["~~global"]||(e.value["~~global"]={}),e.value["~~global"][j.value]=C);}return {r$:C,dispose:A,register:P}}}}function qe(e){let r=(e?.customStore?()=>(e.customStore&&(e.customStore?.value["~~global"]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value["~~global"]={}),e.customStore):Mt(()=>ref({"~~global":{}})))(),{useScopedRegle:n}=Qt(r,e?.customUseRegle),{useCollectScope:a}=Kt(r);return {useScopedRegle:n,useCollectScope:a}}var {useCollectScope:Rt,useScopedRegle:dt}=qe();function er(e,t,r){let n=computed(()=>toValue(e)[t]);return computed(()=>{let o=r.find(s=>{if(s[t]&&"literal"in s[t]){let i=s[t].literal;if(me(i))return unref(i._params?.[0])===n.value}});if(o)return o;{let s=r.find(i=>_(i[t])&&!Object.keys(i[t]).some(g=>g==="literal"));return s||{}}})}function pt(e,t,r){return _(e[t])&&"$value"in e[t]&&e[t]?.$value===r}function tr(e,t,r){let n=isRef(e)?toRef(e.value,"$fields"):toRef(e,"$fields"),a=ref();return watch(n,async()=>{await nextTick(),pt(n.value,t,r)?a.value=n.value:a.value=void 0;},{immediate:true,flush:"pre"}),a}function rr(e){return e}function nr(e,t){return r=>Pe({...e},t(r))}
2
- export{Xe as InternalRuleType,et as createRule,qe as createScopedUseRegle,er as createVariant,Ht as defineRegleConfig,rr as defineRules,zt as extendRegleConfig,lt as flatErrors,ft as inferRules,Ve as mergeRegles,pt as narrowVariant,nr as refineRules,re as unwrapRuleParameters,Rt as useCollectScope,Je as useRegle,we as useRootStorage,dt as useScopedRegle,tr as variantToRef};
1
+ import {effectScope,computed,toValue,ref,watch,getCurrentInstance,onMounted,reactive,getCurrentScope,onScopeDispose,isRef,shallowRef,watchEffect,triggerRef,toRef,unref,version,nextTick}from'vue';function te(e,t=true){return e==null?true:e instanceof Date?isNaN(e.getTime()):e.constructor.name=="File"||e.constructor.name=="FileList"?e.size<=0:Array.isArray(e)?t?e.length===0:false:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var Ct=Symbol("regle-rule");function or(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 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,or(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=U(e[n]);}return t}function F(e){return e&&(e instanceof Date||e.constructor.name=="File"||e.constructor.name=="FileList")?false:typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pe(e,...t){for(var r=[].slice.call(arguments),n,a=r.length;n=r[a-1],a--;)if(!n||typeof n!="object"&&typeof n!="function")throw new Error("expected object, got "+n);for(var o=r[0],s=r.slice(1),i=s.length,a=0;a<i;a++){var $=s[a];for(var d in $)o[d]=$[d];}return o}function Xe(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}function ke(e,t,r){let n,a=(...o)=>new Promise(s=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(s);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a}var Ze={Inline:"__inline",Async:"__async"};function Dt(e,t){return e.some(r=>r[t])}function It(e,t){return e.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[])}function re(e){try{return e.map(t=>toValue(t))}catch{return []}}function Ot(e){return e.map(t=>t instanceof Function?computed(t):isRef(t)?t:toRef(()=>t))}function wt(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(s=>s.trim()).filter(s=>s.length>0).length:0}function et(e,...t){let{validator:r,type:n}=e,a=n===Ze.Async||r.constructor.name==="AsyncFunction";return {...{validator(i,...$){return e.validator(i,...re($.length?$:t))},message(i){return typeof e.message=="function"?e.message({...i,$params:re(i?.$params?.length?i.$params:t)}):e.message},active(i){return typeof e.active=="function"?e.active({...i,$params:re(i?.$params?.length?i.$params:t)}):e.active??true},tooltip(i){return typeof e.tooltip=="function"?e.tooltip({...i,$params:re(i?.$params?.length?i.$params:t)}):e.tooltip??[]},exec(i){let $=e.validator(i,...re(t)),d;return $ instanceof Promise?$.then(y=>(d=y,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:false)):(d=$,typeof d=="object"&&"$valid"in d?d.$valid:typeof d=="boolean"?d:false)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:false,_tooltip_patched:false,_async:a,_params:Ot(t),_brand:Ct}}function tt(e){if(typeof e.validator=="function"){let r=et(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(wt(e.validator)>1){let a=function(...o){return et(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.tooltip=r.tooltip,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._tooltip=r.tooltip,a._type=e.type,a._message_pacthed=false,a._tooltip_pacthed=false,a._async=n,a}else return r}throw new Error("[createRule] validator must be a function")}function rt(){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 s(v){let x=t.value.get(v);if(x)return x;{let C=ref({});return t.value.set(v,C),C}}function i(v){let x=r.value.get(v);if(x)return x;{let C=ref([]);return r.value.set(v,C),C}}function $(v,x,C){o.value.set(`${v}-${x}`,C);}function d(v,x){return o.value.get(`${v}-${x}`)}function y(v,x){v&&x!=null&&o.value.delete(`${v}-${x}`);}function G(v,x){n.value.set(v,x);}function E(v){return n.value.get(v)??false}function j(v,x){e.value.set(v,x);}function O(v,x){let C=e.value.get(v);return C?P(x,C)?{valid:true}:{valid:false}:void 0}function P(v,x){let C=Object.keys(x),R=Object.keys(v);return R.length!==C.length||!R.every(c=>C.includes(c))?false:R.every(c=>{let g=v[c],T=x[c];return !T||!g||typeof g=="function"||typeof T=="function"||typeof g=="number"||typeof g=="boolean"?false:g._params?g._params?.every((N,W)=>{if(typeof T=="number"||typeof T=="boolean")return true;{let J=re(T._params),z=re(g._params);return J?.[W]===z?.[W]}}):true})}function l(v){let x=a.value.get(v);if(x)return x;{let C=ref(false),R=ref(true),b=ref({}),c=ref(false);return a.value.set(v,{$pending:C,$valid:R,$metadata:b,$validating:c}),{$pending:C,$valid:R,$metadata:b,$validating:c}}}return getCurrentScope()&&onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:j,setDirtyEntry:G,checkRuleDeclEntry:O,getDirtyState:E,trySetRuleStatusRef:l,getFieldsEntry:s,getCollectionsEntry:i,getArrayStatus:d,addArrayStatus:$,deleteArrayStatus:y,arrayStatusStorage:o}}function Ue(e){return F(e.value)}function nt(e,t,r){let n=effectScope(),a;return e instanceof Function?a=n.run(()=>e(t,r??0)):a=e,{scope:n,unwrapped:a}}var Me={LessThan:-1,EqualTo:0,GreaterThan:1};function mr(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]),s=Number(n[a]);if(o>s)return Me.GreaterThan;if(s>o)return Me.LessThan;if(!isNaN(o)&&isNaN(s))return Me.GreaterThan;if(isNaN(o)&&!isNaN(s))return Me.LessThan}return Me.EqualTo}var Ge=mr(version,"3.5.0")!==-1;function yr(){return Math.floor(Math.random()*Date.now()).toString()}function be(){return typeof window>"u"?yr():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Pt(e){return getCurrentScope()?(onScopeDispose(e),true):false}function Mt(e){let t=false,r,n=effectScope(true);return (...a)=>(t||(r=n.run(()=>e(...a)),t=true),r)}function We(e,t){return Ue(e)||F(t.value)&&!te(t.value)&&!Object.entries(t.value).some(([r,n])=>ye(n)||typeof n=="function")}function At(e,t,r=false){return !!e.value&&F(e.value)&&"$each"in e.value||r&&Array.isArray(t.value)&&t.value.some(F)||Array.isArray(t.value)&&t.value.some(F)}function Be(e){return !!e.value&&F(e.value)}function ye(e){return F(e)&&"_validator"in e}function Ae(e){return typeof e.value=="function"?"_validator"in e.value:true}function jt(e){return F(e)&&"$fields"in e}function at(e){return !!e&&"$rules"in e}function lt({field:e,silent:t=false}){return Object.entries(e.$rules??{}).map(([r,n])=>t&&!n.$valid||!n.$valid&&e.$error&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$error?e.$externalErrors??[]:[]).concat(e.$error?e.$schemaErrors??[]:[])}function Vt({field:e}){return Object.entries(e.$rules??{}).map(([t,r])=>r.$tooltip).filter(t=>!!t).reduce((t,r)=>typeof r=="string"?t?.concat([r]):t?.concat(r),[])}function Ft(e){return F(e)&&"$each"in e}function ot(e,t){let{includePath:r=false}=t??{};if(Array.isArray(e)&&e.every(n=>!F(n)))return e;if(Ft(e)){let n=r?e.$self?.map(o=>({error:o,path:""}))??[]:e.$self??[],a=e.$each?.map(o=>Le(o,r))??[];return n?.concat(a.flat())}else return Object.entries(e).map(([n,a])=>Le(a,r,[n])).flat()}function Le(e,t=false,r){let n=t&&!r?[]:r;if(Array.isArray(e)&&e.every(a=>!F(a)))return t?e.map(a=>({error:a,path:n?.join(".")??""})):e;if(Ft(e)){let a=n?.length?e.$self?.map(s=>({error:s,path:n.join(".")}))??[]:e.$self??[],o=e.$each?.map((s,i)=>Le(s,t,n?.concat(i.toString())))??[];return a?.concat(o.flat())}else return Object.entries(e).map(([a,o])=>Le(o,t,n?.concat(a))).flat()}function _t({customMessages:e,rule:t,ruleKey:r,state:n,path:a,storage:o,$debounce:s,modifiers:i}){let $=effectScope(),d={},y,G=ref(false),E=ref(false),{$pending:j,$valid:O,$metadata:P,$validating:l}=o.trySetRuleStatusRef(`${a}.${r}`);function v(){$=effectScope(),d=$.run(()=>{let T=ref(false),N=ref(false),W=ref(true),J=ref(false),z=ref(false),le=computed(()=>({$value:n.value,$error:N.value,$dirty:T.value,$pending:J.value,$correct:z.value,$invalid:W.value,$rule:{$valid:O.value,$invalid:!O.value,$pending:j.value},$params:f.value,...P.value})),D=computed(()=>Ae(t)?typeof t.value.active=="function"?t.value.active(le.value):!!t.value.active:true);function H(w){let K="",m=e?e[r]?.[w]:void 0;if(m&&(typeof m=="function"?K=m(le.value):K=m),Ae(t)){let M=`_${w}_patched`;m&&!t.value[M]||(typeof t.value[w]=="function"?K=t.value[w](le.value):K=t.value[w]??"");}return K}let ve=computed(()=>{let w=H("message");return te(w)&&(w="This field is not valid"),w}),Re=computed(()=>H("tooltip")),u=computed(()=>Ae(t)&&t.value.type?t.value.type:r),p=computed(()=>Ae(t)?t.value.validator:t.value),f=computed(()=>typeof t.value=="function"?[]:re(t.value._params??[])),I=computed(()=>`${a}.${u.value}`);return {$active:D,$message:ve,$type:u,$validator:p,$params:f,$path:I,$tooltip:Re,$fieldCorrect:z,$fieldError:N,$fieldDirty:T,$fieldPending:J,$fieldInvalid:W}}),y=watch(d?.$params,()=>{(!i.$silent.value||i.$rewardEarly.value&&d.$fieldError.value)&&b();});}v();function x(){O.value=true,d.$fieldDirty.value&&(j.value=true);}async function C(){let T=false;try{let N=d.$validator.value;if(typeof N!="function")return console.error(`${a}: Incorrect rule format, it needs to be either a function or created with "createRule".`),!1;let W=N(n.value,...d.$params.value),J=n.value;x();let z;if(W instanceof Promise?z=await W:z=W,n.value!==J)return !0;if(typeof z=="boolean")T=z;else {let{$valid:le,...D}=z;T=le,P.value=D;}}catch{T=false;}finally{j.value=false;}return T}let R=ke(C,s??200);async function b(){try{l.value=!0;let T=!1;if(E.value=!0,ye(t.value)&&t.value._async)T=await R();else {let N=d.$validator.value,W=N(n.value,...d.$params.value);if(W 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(W!=null)if(typeof W=="boolean")T=W;else {let{$valid:J,...z}=W;T=J,P.value=z;}}return O.value=T,T}catch{return false}finally{l.value=false,E.value=false;}}function c(){O.value=true,P.value={},j.value=false,l.value=false,v();}function g(){y(),$.stop(),$=effectScope();}return reactive({...d,$pending:j,$valid:O,$metadata:P,$haveAsync:G,$maybePending:E,$validating:l,$parse:b,$unwatch:g,$watch:v,$reset:c})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:s,externalErrors:i,schemaErrors:$,schemaMode:d,onUnwatch:y,$isArray:G,initialState:E,shortcuts:j,onValidate:O}){let P=effectScope(),l,v=[],x,C,R,b,c,g=()=>{};function T(){let h=t.value,V=o.checkRuleDeclEntry(n,h);H.value=Object.fromEntries(Object.entries(h).filter(([S])=>S.startsWith("$"))),J(),D.value=Object.fromEntries(Object.entries(t.value).filter(([S])=>!S.startsWith("$")).map(([S,X])=>{if(X){let se=toRef(()=>X);return [S,_t({modifiers:{$silent:l.$silent,$rewardEarly:l.$rewardEarly},customMessages:r,rule:se,ruleKey:S,state:e,path:n,storage:o,$debounce:H.value.$debounce})]}return []}).filter(S=>!!S.length)),l.processShortcuts(),N(),V?.valid!=null&&(l.$dirty.value=o.getDirtyState(n),(l.$dirty.value&&!l.$silent.value||l.$rewardEarly.value&&l.$error.value)&&g()),o.addRuleDeclEntry(n,h);}function N(){g=l.$debounce.value?ke(le,l.$debounce.value??l.$haveAnyAsyncRule?100:0):le;}function W(){D.value&&Object.entries(D.value).forEach(([h,V])=>{V.$unwatch();}),R(),c?.(),l.$dirty.value&&o.setDirtyEntry(n,l.$dirty.value),x?.(),C?.(),P.stop(),P=effectScope(),v.forEach(h=>h.stop()),v=[],y?.(),b?.();}function J(){D.value&&Object.entries(D.value).forEach(([h,V])=>{V.$watch();}),l=P.run(()=>{let h=ref(false),V=ref(false),S=computed(()=>h.value),X=computed(()=>H.value.$debounce),se=computed(()=>H.value.$lazy!=null?H.value.$lazy:unref(s.lazy)!=null?unref(s.lazy):false),ie=computed(()=>H.value.$rewardEarly!=null?H.value.$rewardEarly:unref(s.rewardEarly)!=null?unref(s.rewardEarly):false),Fe=computed(()=>H.value.$clearExternalErrorsOnChange!=null?H.value.$clearExternalErrorsOnChange:unref(s.clearExternalErrorsOnChange)!=null?unref(s.clearExternalErrorsOnChange):true),B=computed(()=>ie.value?true:H.value.$silent!=null?H.value.$silent:unref(s.silent)!=null?unref(s.silent):false),A=computed(()=>H.value.$autoDirty!=null?H.value.$autoDirty:unref(s.autoDirty)!=null?unref(s.autoDirty):true),k=computed(()=>Object.entries(D.value).some(([ue,Q])=>Q.$validating)),we=computed({get:()=>e.value,set(ue){x(),e.value=ue,z();}}),_e=computed(()=>Se.value&&!$e.value&&h.value),yt=computed(()=>lt({field:{$rules:D.value,$error:_e.value,$externalErrors:i?.value,$schemaErrors:$?.value}})),gt=computed(()=>lt({field:{$rules:D.value,$error:_e.value,$externalErrors:i?.value,$schemaErrors:$?.value},silent:true})),Qe=computed(()=>h.value?E.value instanceof Date&&e.value instanceof Date?Xe(E.value).getDate()!==Xe(e.value).getDate():E.value==null?!!e.value:Array.isArray(e.value)&&Array.isArray(E.value)?e.value.length!==E.value.length:E.value!==e.value:false),vt=computed(()=>Qe.value),$t=computed(()=>Vt({field:{$rules:D.value}})),St=computed(()=>(B.value||S.value)&&!(Se.value||$e.value)),$e=computed(()=>V.value||!ie.value?Object.entries(D.value).some(([ue,Q])=>Q.$pending):false),Se=computed(()=>i?.value?.length||$?.value?.length?true:Ne.value?false:!ie.value||ie.value&&V.value?Object.entries(D.value).some(([ue,Q])=>!(Q.$valid&&!Q.$maybePending)):false),Tt=computed(()=>a),Ne=computed(()=>!!(te(D.value)&&!d)),ht=computed(()=>i?.value?.length||Ne.value?false:h.value&&!te(e.value)&&!k.value&&!$e.value?d?!$?.value?.length:Object.values(D.value).some(Q=>Q.$active)?Object.values(D.value).filter(Q=>Q.$active).every(Q=>Q.$valid):false:false),ar=computed(()=>Object.entries(D.value).some(([ue,Q])=>Q.$haveAsync));function lr(){j?.fields&&Object.entries(j.fields).forEach(([ue,Q])=>{let xt=effectScope();bt[ue]=xt.run(()=>{let Et=ref();return watchEffect(()=>{Et.value=Q(reactive({$dirty:h,$externalErrors:i?.value??[],$value:e,$silentValue:we,$rules:D,$error:_e,$pending:$e,$invalid:Se,$correct:ht,$errors:yt,$ready:St,$silentErrors:gt,$anyDirty:S,$tooltips:$t,$name:Tt,$inactive:Ne,$edited:Qe,$anyEdited:vt}));}),Et}),v.push(xt);});}let bt={};return watch(Se,ue=>{ue||(V.value=false);}),{$error:_e,$pending:$e,$invalid:Se,$correct:ht,$debounce:X,$lazy:se,$errors:yt,$ready:St,$silentErrors:gt,$rewardEarly:ie,$autoDirty:A,$silent:B,$clearExternalErrorsOnChange:Fe,$anyDirty:S,$edited:Qe,$anyEdited:vt,$name:Tt,$haveAnyAsyncRule:ar,$shortcuts:bt,$validating:k,$tooltips:$t,$dirty:h,triggerPunishment:V,processShortcuts:lr,$silentValue:we,$inactive:Ne}}),z(),R=watch(l.$dirty,h=>{o.setDirtyEntry(n,h),Object.values(D.value).forEach(V=>{V.$fieldDirty=h;});}),c=watch([l.$error,l.$correct,l.$invalid,l.$pending],()=>{Object.values(D.value).forEach(h=>{h.$fieldError=l.$error.value,h.$fieldInvalid=l.$invalid.value,h.$fieldPending=l.$pending.value,h.$fieldCorrect=l.$correct.value;});}),C=watch(l.$invalid,h=>{l.$rewardEarly.value&&!h&&(l.triggerPunishment.value=false);}),b=watch(l.$haveAnyAsyncRule,N);}function z(){x=watch(e,()=>{l.$autoDirty.value&&!l.$silent.value&&(l.$dirty.value||(l.$dirty.value=true)),t.value instanceof Function&&T(),(!l.$silent.value||l.$rewardEarly.value&&l.$error.value)&&g(),l.$rewardEarly.value!==true&&l.$clearExternalErrorsOnChange.value&&f();},{deep:G?true:Ge?1:true});}function le(){Object.values(D.value).forEach(h=>{h.$parse();});}let D=ref({}),H=ref({});T();function ve(h,V){if(f(),l.$dirty.value=false,l.triggerPunishment.value=false,o.setDirtyEntry(n,false),!V)if(h?.toInitialState)e.value=U(E);else if(h?.toState){let S;typeof h?.toState=="function"?S=h?.toState():S=h?.toState,E.value=U(S),e.value=U(S);}else E.value=F(e.value)?U(e.value):Array.isArray(e.value)?[...e.value]:e.value;h?.clearExternalErrors&&f(),V||Object.entries(D.value).forEach(([S,X])=>{X.$reset();}),!l.$lazy.value&&!l.$silent.value&&Object.values(D.value).forEach(S=>S.$parse());}function Re(h=true,V=false){l.$dirty.value||(l.$dirty.value=true),V&&h?(!l.$silent.value||l.$rewardEarly.value&&l.$error.value)&&g():h&&g();}async function u(){try{if(d)return O?(Re(!1),O()):{valid:!1,data:e.value};let h=e.value;if(l.triggerPunishment.value=!0,!l.$dirty.value)l.$dirty.value=!0;else if(!l.$silent.value&&l.$dirty.value&&!l.$pending.value)return {valid:!l.$error.value,data:h};return d?{valid:!$?.value?.length,data:h}:te(D.value)?{valid:!0,data:h}:{valid:(await Promise.allSettled(Object.entries(D.value).map(([X,se])=>se.$parse()))).every(X=>X.status==="fulfilled"?X.value===!0:!1),data:h}}catch{return {valid:false,data:e.value}}}function p(h=true){return l.$dirty.value?e.value:h?{_null:true}:null}function f(){i?.value?.length&&(i.value=[]);}!l.$lazy.value&&!l.$dirty.value&&!l.$silent.value&&g();let{$shortcuts:I,$validating:w,$autoDirty:K,$rewardEarly:m,$clearExternalErrorsOnChange:M,$haveAnyAsyncRule:Y,$debounce:Z,$lazy:ee,triggerPunishment:oe,...fe}=l;return reactive({...fe,$externalErrors:i,$value:e,$rules:D,...I,$reset:ve,$touch:Re,$validate:u,$unwatch:W,$watch:J,$extractDirtyFields:p,$clearExternalErrors:f})}function ut({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:s,rules:i,externalErrors:$,schemaErrors:d,initialState:y,shortcuts:G,fieldName:E,schemaMode:j}){let O=i.$key?i.$key:be(),P=`${t}.${String(O)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?P=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:O,enumerable:false,configurable:false,writable:false}}));let l=toRef($?.value??[],r),v=computed(()=>d?.value?.[r]),x=Ce({state:o,rulesDef:toRef(()=>i),customMessages:s,path:P,storage:a,options:n,externalErrors:l,schemaErrors:v,initialState:y,shortcuts:G,fieldName:E,schemaMode:j});if(x){let C=o.value?.$id;x.$id=C??String(O),a.addArrayStatus(e,x.$id,x);}return x}function Gt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:s,schemaErrors:i,schemaMode:$,initialState:d,shortcuts:y,fieldName:G}){let E=effectScope(),j,O=effectScope(),P,l=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let v=ref(),x=ref(e.value),C,R=ref({}),b=a.getCollectionsEntry(n);P=O.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.every(p=>typeof p!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(p=>ye(p)||typeof p=="function"):false)})),c(),N();function c(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(v.value=be(),Object.defineProperties(e.value,{$id:{value:v.value,enumerable:false,configurable:false,writable:false}})):e.value?.$id&&(v.value=e.value.$id)),x.value=R.value.$value,Array.isArray(e.value)&&!P.isPrimitiveArray.value?b.value=e.value.filter(u=>typeof u=="object").map((u,p)=>{let{scope:f,unwrapped:I}=nt(t.value.$each,toRef(()=>u),p);f&&l.push(f);let w=toRef(d.value??[],p),K=toRef(s?.value??{},"$each"),m=computed(()=>i?.value?.$each),M=ut({$id:v.value,path:n,customMessages:r,rules:I??{},stateValue:toRef(()=>u),index:p,options:o,storage:a,externalErrors:K,schemaErrors:m,initialState:w,shortcuts:y,fieldName:G,schemaMode:$});return M||null}).filter(u=>!!u):b.value=[],R.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:toRef(s?.value??{},"$self"),schemaErrors:computed(()=>i?.value?.$self),$isArray:true,initialState:d,shortcuts:y,fieldName:G,schemaMode:$});}function g(){if(Array.isArray(e.value)&&!P.isPrimitiveArray.value){let u=U(b.value);b.value=e.value.filter(p=>typeof p=="object").map((p,f)=>{let I=toRef(()=>p);if(p.$id&&b.value.find(w=>w.$id===p.$id)){let w=a.getArrayStatus(v.value,p.$id);return w?(w.$value=I,w):null}else {let{scope:w,unwrapped:K}=nt(t.value.$each,I,f);w&&l.push(w);let m=toRef(s?.value??{},"$each"),M=computed(()=>i?.value?.$each??[]),Y=ut({$id:v.value,path:n,customMessages:r,rules:K??{},stateValue:I,index:f,options:o,storage:a,externalErrors:m,schemaErrors:M,initialState:toRef(d.value??[],f),shortcuts:y,fieldName:G,schemaMode:$});return Y||null}}).filter(p=>!!p),u.filter(p=>!e.value?.find(f=>p.$id===f.$id)).forEach((p,f)=>{a.deleteArrayStatus(v.value,f.toString());});}else b.value=[];}function T(){C=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?c():g();},{deep:Ge?1:true,flush:"pre"});}function N(){T(),E=effectScope(),j=E.run(()=>{let u=computed({get:()=>e.value,set(S){C(),e.value=S,T();}}),p=computed(()=>R.value.$dirty&&(!b.value.length||b.value.every(S=>S.$dirty))),f=computed(()=>R.value.$anyDirty||b.value.some(S=>S.$anyDirty)),I=computed(()=>R.value.$invalid||b.value.some(S=>S.$invalid)),w=computed(()=>(te(R.value.$rules)?true:R.value.$correct)&&(!b.value.length||b.value.every(S=>S.$correct||S.$anyDirty&&!S.$invalid))),K=computed(()=>R.value.$error||b.value.some(S=>S.$error)),m=computed(()=>!(I.value||M.value)),M=computed(()=>R.value.$pending||b.value.some(S=>S.$pending)),Y=computed(()=>!!b.value.length&&b.value.every(S=>S.$edited)),Z=computed(()=>R.value.$anyEdited||b.value.some(S=>S.$anyEdited)),ee=computed(()=>({$self:R.value.$errors,$each:b.value.map(S=>S.$errors)})),oe=computed(()=>({$self:R.value.$silentErrors,$each:b.value.map(S=>S.$silentErrors)})),fe=computed(()=>G);function h(){y?.collections&&Object.entries(y?.collections).forEach(([S,X])=>{let se=effectScope();V[S]=se.run(()=>{let ie=ref();return watchEffect(()=>{ie.value=X(reactive({$dirty:p,$error:K,$silentValue:u,$pending:M,$invalid:I,$correct:w,$errors:ee,$ready:m,$silentErrors:oe,$anyDirty:f,$name:fe,$each:b,$self:R,$value:e,$edited:Y,$anyEdited:Z}));}),ie}),l.push(se);});}let V={};return h(),{$dirty:p,$anyDirty:f,$invalid:I,$correct:w,$error:K,$pending:M,$errors:ee,$silentErrors:oe,$ready:m,$name:fe,$shortcuts:V,$silentValue:u,$edited:Y,$anyEdited:Z}}),P.isPrimitiveArray.value&&t.value.$each&&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`);}function W(){C&&C(),R.value&&R.value.$unwatch(),b.value&&b.value.forEach(u=>{"$dirty"in u&&u.$unwatch();}),E.stop(),E=effectScope(),O.stop(),O=effectScope(true),l.forEach(u=>u.stop()),l=[];}function J(u=true,p=false){R.value.$touch(u,p),b.value.forEach(f=>{f.$touch(u,p);});}function z(u,p){if(W(),!p)if(u?.toInitialState)e.value=U(d.value);else if(u?.toState){let f;typeof u?.toState=="function"?f=u?.toState():f=u?.toState,d.value=U(f),e.value=U(f);}else d.value=U(e.value);u?.clearExternalErrors&&D(),R.value.$reset(),b.value.forEach(f=>{f.$reset(u,true);}),p||c();}async function le(){let u=e.value;try{return {valid:(await Promise.allSettled([R.value.$validate(),...b.value.map(I=>I.$validate())])).every(I=>I.status==="fulfilled"?I.value.valid===!0:!1),data:u}}catch{return {valid:false,data:u}}}function D(){R.value.$clearExternalErrors(),b.value.forEach(u=>{u.$clearExternalErrors();});}function H(u=true){let p=b.value.map(f=>{if(jt(f))return f.$extractDirtyFields(u)});return u&&p.every(f=>te(f))&&(p=[]),p}let{$shortcuts:ve,...Re}=j;return reactive({$self:R,...Re,...ve,$each:b,$value:e,$validate:le,$unwatch:W,$watch:N,$touch:J,$reset:z,$extractDirtyFields:H,$clearExternalErrors:D})}function ze({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:a,schemaErrors:o,rootSchemaErrors:s,validationGroups:i,initialState:$,fieldName:d,...y}){let G=effectScope(),E,j=[],O=null,P=null,l=null,v=null;async function C(u=true){let p=Object.entries(e.value),f=Object.fromEntries(p.filter(([m,M])=>!!M).map(([m,M])=>{if(M){let Y=toRef(t.value??{},m),Z=toRef(()=>M),ee=toRef(a?.value??{},m),oe=computed(()=>o?.value?.[m]),fe=toRef($?.value??{},m);return [m,Ce({state:Y,rulesDef:Z,path:r?`${r}.${m}`:m,externalErrors:ee,schemaErrors:oe,initialState:fe,fieldName:m,...y})]}return []})),I=Object.fromEntries(Object.entries(unref(a)??{}).filter(([m,M])=>!(m in e.value)&&!!M).map(([m])=>{let M=toRef(t.value??{},m),Y=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),ee=toRef($?.value??{},m);return [m,Ce({state:M,rulesDef:computed(()=>({})),path:r?`${r}.${m}`:m,externalErrors:Y,schemaErrors:Z,initialState:ee,fieldName:m,...y})]})),w=Object.fromEntries(Object.entries(unref(o)??{}).map(([m])=>{let M=toRef(t.value??{},m),Y=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),ee=toRef($?.value??{},m);return [m,Ce({state:M,rulesDef:computed(()=>({})),path:r?`${r}.${m}`:m,externalErrors:Y,schemaErrors:Z,initialState:ee,fieldName:m,...y})]})),K=Object.fromEntries(Object.entries(t.value??{}).filter(([m])=>!(m in e.value)&&!(m in(I??{}))&&!(m in(w??{}))).map(([m])=>{let M=toRef(t.value??{},m),Y=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),ee=toRef($?.value??{},m);return [m,Ce({state:M,rulesDef:computed(()=>({})),path:r?`${r}.${m}`:m,externalErrors:Y,schemaErrors:Z,initialState:ee,fieldName:m,...y})]}));R.value={...f,...I,...w,...K},u&&g();}let R=y.storage.getFieldsEntry(r);C();function b(){a&&(l=watch(a,()=>{T(),C();},{deep:true}));}function c(){v=watch(t,()=>{E.$autoDirty.value&&!E.$silent.value&&(T(),C(),J(true,true));},{flush:"sync"});}function g(){n&&(O?.(),O=watch(n,()=>{T(),C();},{deep:true,flush:"pre"}),b()),s&&(P?.(),P=watch(s,()=>{T(),C();},{deep:true,flush:"post"})),c(),E=G.run(()=>{let u=computed({get:()=>t.value,set(B){T(),t.value=B,C();}}),p=computed(()=>!!Object.entries(R.value).length&&Object.entries(R.value).every(([B,A])=>A?.$dirty)),f=computed(()=>Object.entries(R.value).some(([B,A])=>A?.$anyDirty)),I=computed(()=>!!Object.entries(R.value).length&&Object.entries(R.value).some(([B,A])=>A?.$invalid)),w=computed(()=>{let B=Object.entries(R.value).filter(([A,k])=>at(k)?!k.$inactive:true);return B.length?B.every(([A,k])=>y.schemaMode?k.$correct:at(k)?"required"in k.$rules&&k.$rules.required.$active?k?.$correct:!k.$invalid&&!k.$pending:k?.$correct):false}),K=computed(()=>!!Object.entries(R.value).length&&Object.entries(R.value).some(([B,A])=>A?.$error)),m=computed(()=>unref(y.options.rewardEarly)!=null?unref(y.options.rewardEarly):false),M=computed(()=>unref(y.options.silent)!=null?unref(y.options.silent):!!m.value),Y=computed(()=>unref(y.options.autoDirty)!=null?unref(y.options.autoDirty):true),Z=computed(()=>(M.value||f.value)&&!(I.value||oe.value)),ee=ref(false),oe=computed(()=>ee.value||Object.entries(R.value).some(([B,A])=>A?.$pending)),fe=computed(()=>Object.fromEntries(Object.entries(R.value).map(([B,A])=>[B,A?.$errors]))),h=computed(()=>Object.fromEntries(Object.entries(R.value).map(([B,A])=>[B,A?.$silentErrors]))),V=computed(()=>!!Object.entries(R.value).length&&Object.entries(R.value).every(([B,A])=>A?.$edited)),S=computed(()=>Object.entries(R.value).some(([B,A])=>A?.$anyEdited)),X=computed(()=>d);function se(){y.shortcuts?.nested&&Object.entries(y.shortcuts.nested).forEach(([B,A])=>{let k=effectScope();Fe[B]=k.run(()=>{let we=ref();return watchEffect(()=>{we.value=A(reactive({$dirty:p,$value:t,$silentValue:u,$error:K,$pending:oe,$invalid:I,$correct:w,$ready:Z,$anyDirty:f,$name:X,$silentErrors:h,$errors:fe,$fields:R,$edited:V,$anyEdited:S}));}),we}),j.push(k);});}let ie=computed({get:()=>i?Object.fromEntries(Object.entries(i?.(R.value)??{}).map(([B,A])=>A.length?[B,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$correct"].map(k=>[k,Dt(A,k)])),...Object.fromEntries(["$errors","$silentErrors"].map(k=>[k,It(A,k)]))}]:[])):{},set(){}}),Fe={};return se(),{$dirty:p,$anyDirty:f,$invalid:I,$correct:w,$error:K,$pending:oe,$errors:fe,$silentErrors:h,$ready:Z,$name:X,$shortcuts:Fe,$groups:ie,$silentValue:u,$edited:V,$anyEdited:S,$localPending:ee,$autoDirty:Y,$silent:M}});}function T(){O?.(),l?.(),v?.(),P?.(),j=[],E={},R.value&&Object.entries(R.value).forEach(([u,p])=>{p.$unwatch();});}function N(){Object.entries(R.value).forEach(([u,p])=>{p.$clearExternalErrors();});}function W(u,p){if(l?.(),T(),!p)if(u?.toInitialState)t.value=U({...$.value??{}});else if(u?.toState){let f;typeof u?.toState=="function"?f=u?.toState():f=u?.toState,$.value=U(f),t.value=U(f);}else $.value=U(t.value);Object.values(R.value).forEach(f=>{f.$reset(u,true);}),u?.clearExternalErrors&&N(),b(),p||C();}function J(u=true,p=false){Object.values(R.value).forEach(f=>{f.$touch(u,p);});}function z(u){return u.filter(([p,f])=>F(f)?!(f&&typeof f=="object"&&"_null"in f)&&!te(f):Array.isArray(f)?f.length:true)}function le(u=true){let p=Object.entries(R.value).map(([f,I])=>[f,I.$extractDirtyFields(u)]);return u&&(p=z(p)),Object.fromEntries(p)}async function D(){try{if(y.schemaMode)return y.onValidate?(J(!1),E.$localPending.value=!0,y.onValidate()):{valid:!1,data:t.value};{let u=t.value;return {valid:(await Promise.allSettled(Object.values(R.value).map(I=>I.$validate()))).every(I=>I.status==="fulfilled"?I.value.valid===!0:!1),data:u}}}catch{return {valid:false,data:t.value}}finally{E.$localPending.value=false;}}let{$shortcuts:H,$localPending:ve,...Re}=E;return reactive({...Re,...H,$fields:R,$value:t,$reset:W,$touch:J,$validate:D,$unwatch:T,$watch:g,$clearExternalErrors:N,$extractDirtyFields:le})}function Ce({rulesDef:e,...t}){if(At(e,t.state,t.schemaMode))return Gt({rulesDef:e,...t});if(We(t.state,e)){if(Ue(t.state))return ze({rulesDef:e,...t});{let n=effectScope().run(()=>{let s=toRef(t.state.value?t.state:ref({}));return watch(()=>t.state.value,i=>{s.value=i;},{deep:true}),watch(s,i=>{t.state.value=i;},{deep:true}),{fakeState:s}}),{state:a,...o}=t;return ze({rulesDef:e,...o,state:n.fakeState})}}else if(Be(e))return Ee({rulesDef:e,...t})}function Oe({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o,schemaErrors:s,schemaMode:i=false,onValidate:$}){let d=rt(),y=ref();return We(n,r)?y.value=ze({rootRules:r,rulesDef:r,state:n,customMessages:a?.(),storage:d,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root",path:"",schemaErrors:s,rootSchemaErrors:s,schemaMode:i,onValidate:$}):Be(r)&&(y.value=Ee({rulesDef:r,state:n,customMessages:a?.(),storage:d,options:t,externalErrors:t.externalErrors,initialState:e,shortcuts:o,fieldName:"root",path:"",schemaMode:i,schemaErrors:s,onValidate:$})),getCurrentScope()&&onScopeDispose(()=>{y.value?.$unwatch();}),reactive({regle:y})}function Ke(e,t,r){let n={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,silent:t?.silent,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function a(o,s,i){let $=isRef(s)?s:typeof s=="function"?void 0:computed(()=>s),d={...n,...i},y=isRef(o)?o:ref(o),G=shallowRef($??{});typeof s=="function"&&watchEffect(()=>{G.value=s(y),triggerRef(G);});let E=ref(F(y.value)?{...U(y.value)}:U(y.value));return {r$:Oe({scopeRules:G,state:y,options:d,initialState:E,customRules:e,shortcuts:r}).regle}}return a}var Je=Ke();function qe(){function e(t,r){return r}return e}var Rt=qe();function Ht({rules:e,modifiers:t,shortcuts:r}){let n=Ke(e,t,r);n.__config={rules:e,modifiers:t,shortcuts:r};let a=qe();return {useRegle:n,inferRules:a}}function zt(e,{rules:t,modifiers:r,shortcuts:n}){let a=e.__config??{},o=()=>({...a.rules?.(),...t?.()}),s=a.modifiers&&r?Pe(a.modifiers,r):r,i=a.shortcuts&&n?Pe(a.shortcuts,n):n,$=Ke(o,s,i);$.__config={rules:o,modifiers:s,shortcuts:i};let d=qe();return {useRegle:$,inferRules:d}}function Ve(e,t){let r=t??false,n=computed({get:()=>r?Object.values(e).map(c=>c.$value):Object.fromEntries(Object.entries(e).map(([c,g])=>[c,g.$value])),set:c=>{r||typeof c=="object"&&Object.entries(c).forEach(([g,T])=>e[g].$value=T);}}),a=computed({get:()=>Object.fromEntries(Object.entries(e).map(([c,g])=>[c,g.$silentValue])),set:c=>{typeof c=="object"&&Object.entries(c).forEach(([g,T])=>e[g].$silentValue=T);}}),o=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([g,T])=>T?.$dirty)}),s=computed(()=>Object.entries(e).some(([c,g])=>g?.$anyDirty)),i=computed(()=>Object.entries(e).some(([c,g])=>g?.$invalid)),$=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([g,T])=>T?.$correct||T.$anyDirty&&!T.$invalid)}),d=computed(()=>Object.entries(e).some(([c,g])=>g?.$error)),y=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([g,T])=>T?.$ready)}),G=computed(()=>Object.entries(e).some(([c,g])=>g?.$pending)),E=computed(()=>r?Object.entries(e).map(([c,g])=>g.$errors):Object.fromEntries(Object.entries(e).map(([c,g])=>[c,g.$errors]))),j=computed(()=>r?Object.entries(e).map(([c,g])=>g.$silentErrors):Object.fromEntries(Object.entries(e).map(([c,g])=>[c,g.$silentErrors]))),O=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([g,T])=>T?.$edited)}),P=computed(()=>Object.entries(e).some(([c,g])=>g?.$anyEdited)),l=computed(()=>r?Object.values(e):e);function v(c){Object.values(e).forEach(g=>{g.$reset(c);});}function x(){Object.values(e).forEach(c=>{c.$touch();});}function C(c=true){return Object.values(e).map(g=>g.$extractDirtyFields(c))}function R(){Object.values(e).forEach(c=>{c.$clearExternalErrors();});}async function b(){try{let c=n.value;return {valid:(await Promise.allSettled(Object.values(e).map(N=>N.$validate()))).every(N=>N.status==="fulfilled"?N.value.valid===!0:!1),data:c}}catch{return {valid:false,data:n.value}}}return reactive({...!r&&{$silentValue:a},$errors:E,$silentErrors:j,$instances:l,$value:n,$dirty:o,$anyDirty:s,$invalid:i,$correct:$,$error:d,$pending:G,$ready:y,$edited:O,$anyEdited:P,$reset:v,$touch:x,$validate:b,$extractDirtyFields:C,$clearExternalErrors:R})}function Jt(e,t){function r(n){let a=computed(()=>toValue(n));i();let o=ref($(e.value)),s=reactive({r$:o});function i(){a.value&&!e.value[a.value]&&(e.value[a.value]={});}watch(a,i),watch(e,d=>{o.value=$(d);},{deep:true});function $(d){if(a.value){let y=d[a.value]??{};return Ve(y,!t.asRecord)}else return Ve(d["~~global"]??{},!t.asRecord)}return {r$:s.r$}}return {useCollectScope:r}}function Qt(e,t){let r=t??Je;return {useScopedRegle:(a,o,s)=>{let{namespace:i,scopeKey:$,...d}=s??{};r.__config??={};let y=computed(()=>toValue(i)),G=ref(`${Object.keys(e.value).length+1}-${be()}`),E=computed(()=>s?.scopeKey??`instance-${G.value}`),{r$:j}=r(a,o,d);P(),Pt(O),watch(y,(l,v)=>{O(v),P();}),getCurrentInstance()&&onMounted(()=>{let l=getCurrentInstance();typeof window<"u"&&l?.proxy?.$el?.parentElement&&document.documentElement&&!document.documentElement.contains(l?.proxy?.$el?.parentElement)&&O();});function O(l){let v=l??y.value;v?e.value[v]&&delete e.value[v][E.value]:e.value["~~global"][E.value]&&delete e.value["~~global"][E.value];}function P(){y.value?(e.value[y.value]||(e.value[y.value]={}),e.value[y.value][E.value]=j):(e.value["~~global"]||(e.value["~~global"]={}),e.value["~~global"][E.value]=j);}return {r$:j,dispose:O,register:P}}}}function Ye(e){let r=(e?.customStore?()=>(e.customStore&&(e.customStore?.value["~~global"]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value["~~global"]={}),e.customStore):Mt(()=>ref({"~~global":{}})))(),{useScopedRegle:n}=Qt(r,e?.customUseRegle),{useCollectScope:a}=Jt(r,{asRecord:e?.asRecord});return {useScopedRegle:n,useCollectScope:a}}var {useCollectScope:dt,useScopedRegle:pt}=Ye();function er(e,t,r){let n=computed(()=>toValue(e)[t]);return computed(()=>{let o=r.find(s=>{if(s[t]&&"literal"in s[t]){let i=s[t].literal;if(ye(i))return unref(i._params?.[0])===n.value}});if(o)return o;{let s=r.find(i=>F(i[t])&&!Object.keys(i[t]).some($=>$==="literal"));return s||{}}})}function mt(e,t,r){return F(e[t])&&"$value"in e[t]&&e[t]?.$value===r}function tr(e,t,r){let n=isRef(e)?toRef(e.value,"$fields"):toRef(e,"$fields"),a=ref();return watch(n,async()=>{await nextTick(),mt(n.value,t,r)?a.value=n.value:a.value=void 0;},{immediate:true,flush:"pre"}),a}function rr(e){return e}function nr(e,t){return r=>Pe({...e},t(r))}
2
+ export{Ze as InternalRuleType,tt as createRule,Ye as createScopedUseRegle,er as createVariant,Ht as defineRegleConfig,rr as defineRules,zt as extendRegleConfig,ot as flatErrors,Rt as inferRules,Ve as mergeRegles,mt as narrowVariant,nr as refineRules,re as unwrapRuleParameters,dt as useCollectScope,Je as useRegle,Oe as useRootStorage,pt as useScopedRegle,tr as variantToRef};
@@ -1914,9 +1914,11 @@ function createReactiveNestedStatus({
1914
1914
  $unwatchState = watch(
1915
1915
  state,
1916
1916
  () => {
1917
- $unwatch();
1918
- createReactiveFieldsStatus();
1919
- $touch(true, true);
1917
+ if (scopeState.$autoDirty.value && !scopeState.$silent.value) {
1918
+ $unwatch();
1919
+ createReactiveFieldsStatus();
1920
+ $touch(true, true);
1921
+ }
1920
1922
  },
1921
1923
  { flush: "sync" }
1922
1924
  );
@@ -2011,6 +2013,12 @@ function createReactiveNestedStatus({
2011
2013
  }
2012
2014
  return false;
2013
2015
  });
2016
+ const $autoDirty = computed(() => {
2017
+ if (unref(commonArgs.options.autoDirty) != null) {
2018
+ return unref(commonArgs.options.autoDirty);
2019
+ }
2020
+ return true;
2021
+ });
2014
2022
  const $ready = computed(() => {
2015
2023
  if ($silent.value) {
2016
2024
  return !($invalid.value || $pending.value);
@@ -2132,7 +2140,9 @@ function createReactiveNestedStatus({
2132
2140
  $silentValue,
2133
2141
  $edited,
2134
2142
  $anyEdited,
2135
- $localPending: $localPending2
2143
+ $localPending: $localPending2,
2144
+ $autoDirty,
2145
+ $silent
2136
2146
  };
2137
2147
  });
2138
2148
  }
@@ -2609,7 +2619,7 @@ function mergeRegles(regles, _scoped) {
2609
2619
  $clearExternalErrors
2610
2620
  });
2611
2621
  }
2612
- function createUseCollectScope(instances) {
2622
+ function createUseCollectScope(instances, options) {
2613
2623
  function useCollectScope2(namespace) {
2614
2624
  const computedNamespace = computed(() => toValue(namespace));
2615
2625
  setEmptyNamespace();
@@ -2631,9 +2641,9 @@ function createUseCollectScope(instances) {
2631
2641
  function collectRegles(r$Instances) {
2632
2642
  if (computedNamespace.value) {
2633
2643
  const namespaceInstances = r$Instances[computedNamespace.value] ?? {};
2634
- return mergeRegles(namespaceInstances, true);
2644
+ return mergeRegles(namespaceInstances, !options.asRecord);
2635
2645
  } else {
2636
- return mergeRegles(r$Instances["~~global"] ?? {}, true);
2646
+ return mergeRegles(r$Instances["~~global"] ?? {}, !options.asRecord);
2637
2647
  }
2638
2648
  }
2639
2649
  return { r$: regle.r$ };
@@ -2643,11 +2653,12 @@ function createUseCollectScope(instances) {
2643
2653
  function createUseScopedRegleComposable(instances, customUseRegle) {
2644
2654
  const scopedUseRegle = customUseRegle ?? useRegle;
2645
2655
  const useScopedRegle2 = (state, rulesFactory, options) => {
2646
- const { namespace, ...restOptions } = options ?? {};
2656
+ const { namespace, scopeKey, ...restOptions } = options ?? {};
2657
+ scopedUseRegle.__config ??= {};
2647
2658
  const computedNamespace = computed(() => toValue(namespace));
2648
2659
  const $id = ref(`${Object.keys(instances.value).length + 1}-${randomId()}`);
2649
2660
  const instanceName = computed(() => {
2650
- return `instance-${$id.value}`;
2661
+ return options?.scopeKey ?? `instance-${$id.value}`;
2651
2662
  });
2652
2663
  const { r$ } = scopedUseRegle(state, rulesFactory, restOptions);
2653
2664
  register();
@@ -2711,7 +2722,7 @@ function createScopedUseRegle(options) {
2711
2722
  });
2712
2723
  const instances = useInstances();
2713
2724
  const { useScopedRegle: useScopedRegle2 } = createUseScopedRegleComposable(instances, options?.customUseRegle);
2714
- const { useCollectScope: useCollectScope2 } = createUseCollectScope(instances);
2725
+ const { useCollectScope: useCollectScope2 } = createUseCollectScope(instances, { asRecord: options?.asRecord });
2715
2726
  return {
2716
2727
  useScopedRegle: useScopedRegle2,
2717
2728
  useCollectScope: useCollectScope2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regle/core",
3
- "version": "1.2.0-beta.2",
3
+ "version": "1.2.0-beta.4",
4
4
  "description": "Headless form validation library for Vue 3",
5
5
  "peerDependencies": {
6
6
  "pinia": ">=2.2.5",
@@ -13,22 +13,22 @@
13
13
  },
14
14
  "devDependencies": {
15
15
  "@total-typescript/ts-reset": "0.6.1",
16
- "@types/node": "22.13.17",
16
+ "@types/node": "22.15.3",
17
17
  "@typescript-eslint/eslint-plugin": "8.28.0",
18
18
  "@typescript-eslint/parser": "8.28.0",
19
19
  "@vue/test-utils": "2.4.6",
20
- "eslint": "9.15.0",
20
+ "eslint": "9.25.1",
21
21
  "eslint-config-prettier": "9.1.0",
22
- "eslint-plugin-vue": "9.31.0",
22
+ "eslint-plugin-vue": "9.33.0",
23
23
  "expect-type": "1.2.1",
24
24
  "prettier": "3.5.3",
25
25
  "tsup": "8.4.0",
26
- "type-fest": "4.38.0",
27
- "typescript": "5.8.2",
28
- "vitest": "3.1.1",
26
+ "type-fest": "4.40.1",
27
+ "typescript": "5.8.3",
28
+ "vitest": "3.1.2",
29
29
  "vue": "3.5.13",
30
30
  "vue-eslint-parser": "10.1.3",
31
- "vue-tsc": "2.2.8"
31
+ "vue-tsc": "2.2.10"
32
32
  },
33
33
  "type": "module",
34
34
  "exports": {