@regle/core 1.2.0-beta.7 → 1.2.0

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.
@@ -1083,6 +1083,78 @@ IsNever$1<T> extends false
1083
1083
  ? [...UnionToTuple$1<Exclude<T, L>>, L]
1084
1084
  : [];
1085
1085
 
1086
+ /**
1087
+ Returns a boolean for whether the given type is `null`.
1088
+
1089
+ @example
1090
+ ```
1091
+ import type {IsNull} from 'type-fest';
1092
+
1093
+ type NonNullFallback<T, Fallback> = IsNull<T> extends true ? Fallback : T;
1094
+
1095
+ type Example1 = NonNullFallback<null, string>;
1096
+ //=> string
1097
+
1098
+ type Example2 = NonNullFallback<number, string>;
1099
+ //=? number
1100
+ ```
1101
+
1102
+ @category Type Guard
1103
+ @category Utilities
1104
+ */
1105
+ type IsNull<T> = [T] extends [null] ? true : false;
1106
+
1107
+ /**
1108
+ Returns a boolean for whether the given type is `unknown`.
1109
+
1110
+ @link https://github.com/dsherret/conditional-type-checks/pull/16
1111
+
1112
+ Useful in type utilities, such as when dealing with unknown data from API calls.
1113
+
1114
+ @example
1115
+ ```
1116
+ import type {IsUnknown} from 'type-fest';
1117
+
1118
+ // https://github.com/pajecawav/tiny-global-store/blob/master/src/index.ts
1119
+ type Action<TState, TPayload = void> =
1120
+ IsUnknown<TPayload> extends true
1121
+ ? (state: TState) => TState,
1122
+ : (state: TState, payload: TPayload) => TState;
1123
+
1124
+ class Store<TState> {
1125
+ constructor(private state: TState) {}
1126
+
1127
+ execute<TPayload = void>(action: Action<TState, TPayload>, payload?: TPayload): TState {
1128
+ this.state = action(this.state, payload);
1129
+ return this.state;
1130
+ }
1131
+
1132
+ // ... other methods
1133
+ }
1134
+
1135
+ const store = new Store({value: 1});
1136
+ declare const someExternalData: unknown;
1137
+
1138
+ store.execute(state => ({value: state.value + 1}));
1139
+ //=> `TPayload` is `void`
1140
+
1141
+ store.execute((state, payload) => ({value: state.value + payload}), 5);
1142
+ //=> `TPayload` is `5`
1143
+
1144
+ store.execute((state, payload) => ({value: state.value + payload}), someExternalData);
1145
+ //=> Errors: `action` is `(state: TState) => TState`
1146
+ ```
1147
+
1148
+ @category Utilities
1149
+ */
1150
+ type IsUnknown$1<T> = (
1151
+ unknown extends T // `T` can be `unknown` or `any`
1152
+ ? IsNull<T> extends false // `any` can be `null`, but `unknown` can't be
1153
+ ? true
1154
+ : false
1155
+ : false
1156
+ );
1157
+
1086
1158
  interface RegleBehaviourOptions {
1087
1159
  /**
1088
1160
  * Only display error when calling `r$.$validate()`
@@ -1136,6 +1208,16 @@ type FieldRegleBehaviourOptions = AddDollarToOptions<RegleBehaviourOptions> & {
1136
1208
  */
1137
1209
  $debounce?: number;
1138
1210
  };
1211
+ type CollectionRegleBehaviourOptions = FieldRegleBehaviourOptions & {
1212
+ /**
1213
+ * Allow deep compare of array children to compute the `$edited` property
1214
+ *
1215
+ * Disabled by default for performance
1216
+ *
1217
+ * @default false
1218
+ * */
1219
+ $deepCompare?: boolean;
1220
+ };
1139
1221
  type ResolvedRegleBehaviourOptions = DeepMaybeRef<RequiredDeep<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Record<string, any>, Record<string, any>, Record<string, any[]>>;
1140
1222
  type ShortcutCommonFn<T extends Record<string, any>> = {
1141
1223
  [x: string]: (element: OmitByType<T, Function>) => unknown;
@@ -1209,10 +1291,10 @@ type PartialFormState<TState extends Record<string, any>> = [unknown] extends [T
1209
1291
  }>;
1210
1292
  type RegleResult<Data extends Record<string, any> | any[] | unknown, TRules extends ReglePartialRuleTree<any>> = {
1211
1293
  valid: false;
1212
- data: NonNullable<Data> extends Date | File ? MaybeOutput<Data> : NonNullable<Data> extends Array<infer U extends Record<string, any>> ? PartialFormState<U>[] : NonNullable<Data> extends Record<string, any> ? PartialFormState<NonNullable<Data>> : MaybeOutput<Data>;
1294
+ data: IsUnknown$1<Data> extends true ? unknown : NonNullable<Data> extends Date | File ? MaybeOutput<Data> : NonNullable<Data> extends Array<infer U extends Record<string, any>> ? PartialFormState<U>[] : NonNullable<Data> extends Record<string, any> ? PartialFormState<NonNullable<Data>> : MaybeOutput<Data>;
1213
1295
  } | {
1214
1296
  valid: true;
1215
- data: Data extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, TRules>[] : Data extends Date | File ? SafeFieldProperty<Data, TRules> : Data extends Record<string, any> ? DeepSafeFormState<Data, TRules> : SafeFieldProperty<Data, TRules>;
1297
+ data: IsUnknown$1<Data> extends true ? unknown : Data extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, TRules>[] : Data extends Date | File ? SafeFieldProperty<Data, TRules> : Data extends Record<string, any> ? DeepSafeFormState<Data, TRules> : SafeFieldProperty<Data, TRules>;
1216
1298
  };
1217
1299
  /**
1218
1300
  * Infer safe output from any `r$` instance
@@ -1808,7 +1890,7 @@ declare function flatErrors(errors: $InternalRegleErrors, options?: {
1808
1890
  includePath?: false;
1809
1891
  }): string[];
1810
1892
 
1811
- type InferRegleRoot<T extends (...args: any[]) => Regle<any, any, any, any>> = T extends (...args: any[]) => infer U ? U extends Regle<any, any, any, any> ? Prettify<U['r$']> : never : never;
1893
+ type InferRegleRoot<T extends (...args: any[]) => SuperCompatibleRegle> = T extends (...args: any[]) => infer U ? U extends SuperCompatibleRegle ? U['r$'] : never : never;
1812
1894
  type InferRegleRules<T extends useRegleFn<any, any>> = T extends useRegleFn<infer U, any> ? UnwrapRuleTree<Partial<U> & Partial<DefaultValidators>> : {};
1813
1895
  type InferRegleShortcuts<T extends useRegleFn<any, any>> = T extends useRegleFn<any, infer U> ? U : {};
1814
1896
  type RegleEnforceRequiredRules<TRules extends keyof DefaultValidators> = Omit<Partial<DefaultValidatorsTree>, TRules> & {
@@ -2000,11 +2082,11 @@ type RegleRuleRawInput<TValue extends any = any, TParams extends [...any[]] = [.
2000
2082
  type InferRegleRule<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetaData extends RegleRuleMetadataDefinition = boolean> = [TParams] extends [[]] ? RegleRuleDefinition<TValue, TParams, TAsync, TMetaData> : RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetaData>;
2001
2083
  type RegleRuleDefinitionProcessor<TValue extends any = any, TParams extends any[] = [], TReturn = any> = (value: Maybe<TValue>, ...params: TParams) => TReturn;
2002
2084
  type RegleRuleDefinitionWithMetadataProcessor<TValue extends any, TMetadata extends RegleRuleMetadataConsumer<TValue, any[]>, TReturn = any> = ((metadata: TMetadata) => TReturn) | TReturn;
2003
- type RegleCollectionRuleDefinition<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = (RegleRuleDecl<NonNullable<TValue>, TCustomRules> & {
2085
+ type RegleCollectionRuleDefinition<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = (RegleRuleDecl<NonNullable<TValue>, TCustomRules, CollectionRegleBehaviourOptions> & {
2004
2086
  $each: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>>;
2005
2087
  }) | ({
2006
2088
  $each: MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>>;
2007
- } & FieldRegleBehaviourOptions);
2089
+ } & CollectionRegleBehaviourOptions);
2008
2090
 
2009
2091
  type RegleInitPropertyGetter<TValue, TReturn, TParams extends [...any[]], TMetadata extends RegleRuleMetadataDefinition> = TReturn | ((metadata: RegleRuleMetadataConsumer<TValue, TParams, TMetadata>) => TReturn);
2010
2092
  /**
@@ -2169,14 +2251,14 @@ type $InternalFormPropertyTypes = $InternalRegleRuleDecl | $InternalRegleCollect
2169
2251
  * @public
2170
2252
  * Rule tree for a form property
2171
2253
  */
2172
- type RegleRuleDecl<TValue extends any = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = FieldRegleBehaviourOptions & {
2173
- [TKey in keyof TCustomRules]?: NonNullable<TCustomRules[TKey]> extends RegleRuleWithParamsDefinition<any, infer TParams> ? RegleRuleDefinition<TValue, [...TParams, ...args: [...any[]]], boolean> : NonNullable<TCustomRules[TKey]> extends RegleRuleDefinition<any, any[], any, any> ? FormRuleDeclaration<TValue, any[]> : FormRuleDeclaration<TValue, any[]> | FieldRegleBehaviourOptions[keyof FieldRegleBehaviourOptions];
2254
+ type RegleRuleDecl<TValue extends any = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>, TOptions extends Record<string, unknown> = FieldRegleBehaviourOptions> = TOptions & {
2255
+ [TKey in keyof TCustomRules]?: NonNullable<TCustomRules[TKey]> extends RegleRuleWithParamsDefinition<any, infer TParams> ? RegleRuleDefinition<TValue, [...TParams, ...args: [...any[]]], boolean> : NonNullable<TCustomRules[TKey]> extends RegleRuleDefinition<any, any[], any, any> ? FormRuleDeclaration<TValue, any[]> : FormRuleDeclaration<TValue, any[]> | TOptions[keyof TOptions];
2174
2256
  };
2175
2257
  /**
2176
2258
  * @internal
2177
2259
  * @reference {@link RegleRuleDecl}
2178
2260
  */
2179
- type $InternalRegleRuleDecl = FieldRegleBehaviourOptions & Record<string, FormRuleDeclaration<any, any>>;
2261
+ type $InternalRegleRuleDecl = FieldRegleBehaviourOptions & CollectionRegleBehaviourOptions & Record<string, FormRuleDeclaration<any, any>>;
2180
2262
  /**
2181
2263
  * @public
2182
2264
  */
@@ -2188,9 +2270,9 @@ type RegleCollectionRuleDeclKeyProperty = {
2188
2270
  */
2189
2271
  type RegleCollectionRuleDecl<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = ({
2190
2272
  $each?: RegleCollectionEachRules<TValue, TCustomRules>;
2191
- } & RegleRuleDecl<NonNullable<TValue>, TCustomRules>) | ({
2273
+ } & RegleRuleDecl<NonNullable<TValue>, TCustomRules, CollectionRegleBehaviourOptions>) | ({
2192
2274
  $each?: RegleCollectionEachRules<TValue, TCustomRules>;
2193
- } & FieldRegleBehaviourOptions);
2275
+ } & CollectionRegleBehaviourOptions);
2194
2276
  /** @public */
2195
2277
  type RegleCollectionEachRules<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>, RegleCollectionRuleDeclKeyProperty>;
2196
2278
  /**
@@ -2298,7 +2380,7 @@ type $InternalRegleStatusType = $InternalRegleCollectionStatus | $InternalRegleS
2298
2380
  /**
2299
2381
  * @public
2300
2382
  */
2301
- type RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = never> = Omit<RegleCommonStatus<TState>, '$value'> & {
2383
+ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = never> = Omit<RegleCommonStatus<TState>, '$value' | '$silentValue'> & {
2302
2384
  /** A reference to the original validated model. It can be used to bind your form with v-model.*/
2303
2385
  $value: MaybeOutput<UnwrapNestedRefs<TState>>;
2304
2386
  /** $value variant that will not "touch" the field and update the value silently, running only the rules, so you can easily swap values without impacting user interaction. */
@@ -2348,6 +2430,7 @@ interface $InternalRegleFieldStatus extends $InternalRegleCommonStatus {
2348
2430
  * @public
2349
2431
  */
2350
2432
  interface RegleCommonStatus<TValue = any> {
2433
+ /** Indicates whether the field is invalid. It becomes true if any associated rules return false. */
2351
2434
  readonly $invalid: boolean;
2352
2435
  /**
2353
2436
  * This is not the opposite of `$invalid`. Correct is meant to display UI validation report.
@@ -2358,9 +2441,16 @@ interface RegleCommonStatus<TValue = any> {
2358
2441
  * - Passes validation
2359
2442
  */
2360
2443
  readonly $correct: boolean;
2444
+ /** Indicates whether a field has been validated or interacted with by the user at least once. It's typically used to determine if a message should be displayed to the user. You can change this flag manually using the $touch and $reset methods. The $dirty flag is considered true if the current model has been touched or if all its children are dirty.*/
2361
2445
  readonly $dirty: boolean;
2446
+ /** Similar to $dirty, with one exception. The $anyDirty flag is considered true if given model was touched or any of its children are $anyDirty which means at least one descendant is $dirty. */
2362
2447
  readonly $anyDirty: boolean;
2448
+ /** Indicates whether a field has been touched and if the value is different than the initial one.
2449
+ * On nested elements and collections, it's true only if all its children are also `$edited`.
2450
+ * Use `$anyEdited` to check for any edited children
2451
+ */
2363
2452
  readonly $edited: boolean;
2453
+ /** Similar to $edited, with one exception. The $anyEdited flag is considered true if given model was edited or any of its children are $anyEdited which means at least one descendant is $edited. */
2364
2454
  readonly $anyEdited: boolean;
2365
2455
  /** Indicates if any async rule for the field is currently running. Always false for synchronous rules. */
2366
2456
  readonly $pending: boolean;
@@ -2419,7 +2509,7 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
2419
2509
  /** Reset the $valid, $metadata and $pending states */
2420
2510
  $reset(): void;
2421
2511
  /** Returns the original rule validator function. */
2422
- $validator: ((value: MaybeInput<TValue>, ...args: any[]) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>) & ((value: TValue, ...args: [TParams] extends [never[]] ? [] : [unknown[]] extends [TParams] ? any[] : TParams) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>);
2512
+ $validator: ((value: IsUnknown$1<TValue> extends true ? any : MaybeInput<TValue>, ...args: any[]) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>) & ((value: IsUnknown$1<TValue> extends true ? any : TValue, ...args: [TParams] extends [never[]] ? [] : [unknown[]] extends [TParams] ? any[] : TParams) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>);
2423
2513
  } & ([TParams] extends [never[]] ? {} : [unknown[]] extends [TParams] ? {
2424
2514
  readonly $params?: any[];
2425
2515
  } : {
@@ -2493,6 +2583,9 @@ interface $InternalRegleCollectionStatus extends Omit<$InternalRegleStatus, '$fi
2493
2583
  $validate: () => Promise<$InternalRegleResult>;
2494
2584
  }
2495
2585
 
2586
+ interface SuperCompatibleRegle {
2587
+ r$: SuperCompatibleRegleRoot;
2588
+ }
2496
2589
  /** Supports both core Regle and schemas Regle for Zod/Valibot */
2497
2590
  type SuperCompatibleRegleRoot = SuperCompatibleRegleStatus & {
2498
2591
  $groups?: {
@@ -2797,4 +2890,4 @@ declare function defineRules<TRules extends RegleUnknownRulesTree>(rules: TRules
2797
2890
  */
2798
2891
  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>;
2799
2892
 
2800
- export { type $InternalRegleStatus, type AllRulesDeclarations, type CommonAlphaOptions, type CommonComparisonOptions, type CreateScopedUseRegleOptions, type DeepMaybeRef, type DeepReactiveState, type DefaultValidatorsTree, type FormRuleDeclaration, type HaveAnyRequiredProps, 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, type UseScopedRegleOptions, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, type inferRulesFn, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, type useCollectScopeFn, useRegle, type useRegleFn, useRootStorage, useScopedRegle, variantToRef };
2893
+ export { type $InternalRegleStatus, type AllRulesDeclarations, type CommonAlphaOptions, type CommonComparisonOptions, type CreateScopedUseRegleOptions, type DeepMaybeRef, type DeepReactiveState, type DefaultValidatorsTree, type FormRuleDeclaration, type HaveAnyRequiredProps, 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 SuperCompatibleRegle, type SuperCompatibleRegleCollectionErrors, type SuperCompatibleRegleCollectionStatus, type SuperCompatibleRegleFieldStatus, type SuperCompatibleRegleResult, type SuperCompatibleRegleRoot, type SuperCompatibleRegleRuleStatus, type SuperCompatibleRegleStatus, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, type UseScopedRegleOptions, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, type inferRulesFn, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, type useCollectScopeFn, 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 k(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>k(n)))),r=="Map"&&(t=new Map([...e].map(n=>[k(n[0]),k(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]=k(e[n]);}return t}function j(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 p in $)o[p]=$[p];}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 Ne(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)),p;return $ instanceof Promise?$.then(m=>(p=m,typeof p=="object"&&"$valid"in p?p.$valid:typeof p=="boolean"?p:false)):(p=$,typeof p=="object"&&"$valid"in p?p.$valid:typeof p=="boolean"?p: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 p(v,x){return o.value.get(`${v}-${x}`)}function m(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 V(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((U,W)=>{if(typeof T=="number"||typeof T=="boolean")return true;{let q=re(T._params),z=re(g._params);return q?.[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:V,setDirtyEntry:G,checkRuleDeclEntry:O,getDirtyState:E,trySetRuleStatusRef:l,getFieldsEntry:s,getCollectionsEntry:i,getArrayStatus:p,addArrayStatus:$,deleteArrayStatus:m,arrayStatusStorage:o}}function ke(e){return j(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 yr(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=yr(version,"3.5.0")!==-1;function mr(){return Math.floor(Math.random()*Date.now()).toString()}function be(){return typeof window>"u"?mr():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 ke(e)||j(t.value)&&!te(t.value)&&!Object.entries(t.value).some(([r,n])=>me(n)||typeof n=="function")}function At(e,t,r=false){return !!e.value&&j(e.value)&&"$each"in e.value||r&&Array.isArray(t.value)&&t.value.some(j)||Array.isArray(t.value)&&t.value.some(j)}function Be(e){return !!e.value&&j(e.value)}function me(e){return j(e)&&"_validator"in e}function Ae(e){return typeof e.value=="function"?"_validator"in e.value:true}function Vt(e){return j(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 Ft({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 jt(e){return j(e)&&"$each"in e}function ot(e,t){let{includePath:r=false}=t??{};if(Array.isArray(e)&&e.every(n=>!j(n)))return e;if(jt(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=>!j(a)))return t?e.map(a=>({error:a,path:n?.join(".")??""})):e;if(jt(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(),p={},m,G=ref(false),E=ref(false),{$pending:V,$valid:O,$metadata:P,$validating:l}=o.trySetRuleStatusRef(`${a}.${r}`);function v(){$=effectScope(),p=$.run(()=>{let T=ref(false),U=ref(false),W=ref(true),q=ref(false),z=ref(false),le=computed(()=>({$value:n.value,$error:U.value,$dirty:T.value,$pending:q.value,$correct:z.value,$invalid:W.value,$rule:{$valid:O.value,$invalid:!O.value,$pending:V.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="",y=e?e[r]?.[w]:void 0;if(y&&(typeof y=="function"?K=y(le.value):K=y),Ae(t)){let M=`_${w}_patched`;y&&!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),d=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:d,$params:f,$path:I,$tooltip:Re,$fieldCorrect:z,$fieldError:U,$fieldDirty:T,$fieldPending:q,$fieldInvalid:W}}),m=watch(p?.$params,()=>{(!i.$silent.value||i.$rewardEarly.value&&p.$fieldError.value)&&b();});}v();function x(){O.value=true,p.$fieldDirty.value&&(V.value=true);}async function C(){let T=false;try{let U=p.$validator.value;if(typeof U!="function")return console.error(`${a}: Incorrect rule format, it needs to be either a function or created with "createRule".`),!1;let W=U(n.value,...p.$params.value),q=n.value;x();let z;if(W instanceof Promise?z=await W:z=W,n.value!==q)return !0;if(typeof z=="boolean")T=z;else {let{$valid:le,...D}=z;T=le,P.value=D;}}catch{T=false;}finally{V.value=false;}return T}let R=Ne(C,s??200);async function b(){try{l.value=!0;let T=!1;if(E.value=!0,me(t.value)&&t.value._async)T=await R();else {let U=p.$validator.value,W=U(n.value,...p.$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:q,...z}=W;T=q,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={},V.value=false,l.value=false,v();}function g(){m(),$.stop(),$=effectScope();}return reactive({...p,$pending:V,$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:p,onUnwatch:m,$isArray:G,initialState:E,shortcuts:V,onValidate:O}){let P=effectScope(),l,v=[],x,C,R,b,c,g=()=>{};function T(){let h=t.value,F=o.checkRuleDeclEntry(n,h);H.value=Object.fromEntries(Object.entries(h).filter(([S])=>S.startsWith("$"))),q(),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(),U(),F?.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 U(){g=l.$debounce.value?Ne(le,l.$debounce.value??l.$haveAnyAsyncRule?100:0):le;}function W(){D.value&&Object.entries(D.value).forEach(([h,F])=>{F.$unwatch();}),R(),c?.(),l.$dirty.value&&o.setDirtyEntry(n,l.$dirty.value),x?.(),C?.(),P.stop(),P=effectScope(),v.forEach(h=>h.stop()),v=[],m?.(),b?.();}function q(){D.value&&Object.entries(D.value).forEach(([h,F])=>{F.$watch();}),l=P.run(()=>{let h=ref(false),F=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),je=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),N=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),mt=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(()=>Ft({field:{$rules:D.value}})),St=computed(()=>(B.value||S.value)&&!(Se.value||$e.value)),$e=computed(()=>F.value||!ie.value?Object.entries(D.value).some(([ue,Q])=>Q.$pending):false),Se=computed(()=>i?.value?.length||$?.value?.length?true:Ue.value?false:!ie.value||ie.value&&F.value?Object.entries(D.value).some(([ue,Q])=>!(Q.$valid&&!Q.$maybePending)):false),Tt=computed(()=>a),Ue=computed(()=>!!(te(D.value)&&!p)),ht=computed(()=>i?.value?.length||Ue.value?false:h.value&&!te(e.value)&&!N.value&&!$e.value?p?!$?.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(){V?.fields&&Object.entries(V.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:mt,$ready:St,$silentErrors:gt,$anyDirty:S,$tooltips:$t,$name:Tt,$inactive:Ue,$edited:Qe,$anyEdited:vt}));}),Et}),v.push(xt);});}let bt={};return watch(Se,ue=>{ue||(F.value=false);}),{$error:_e,$pending:$e,$invalid:Se,$correct:ht,$debounce:X,$lazy:se,$errors:mt,$ready:St,$silentErrors:gt,$rewardEarly:ie,$autoDirty:A,$silent:B,$clearExternalErrorsOnChange:je,$anyDirty:S,$edited:Qe,$anyEdited:vt,$name:Tt,$haveAnyAsyncRule:ar,$shortcuts:bt,$validating:N,$tooltips:$t,$dirty:h,triggerPunishment:F,processShortcuts:lr,$silentValue:we,$inactive:Ue}}),z(),R=watch(l.$dirty,h=>{o.setDirtyEntry(n,h),Object.values(D.value).forEach(F=>{F.$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,U);}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,F){if(f(),l.$dirty.value=false,l.triggerPunishment.value=false,o.setDirtyEntry(n,false),!F)if(h?.toInitialState)e.value=k(E);else if(h?.toState){let S;typeof h?.toState=="function"?S=h?.toState():S=h?.toState,E.value=k(S),e.value=k(S);}else E.value=j(e.value)?k(e.value):Array.isArray(e.value)?[...e.value]:e.value;h?.clearExternalErrors&&f(),F||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,F=false){l.$dirty.value||(l.$dirty.value=true),F&&h?(!l.$silent.value||l.$rewardEarly.value&&l.$error.value)&&g():h&&g();}async function u(){try{if(p)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 p?{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 d(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:y,$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:q,$extractDirtyFields:d,$clearExternalErrors:f})}function ut({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:s,rules:i,externalErrors:$,schemaErrors:p,initialState:m,shortcuts:G,fieldName:E,schemaMode:V}){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(()=>p?.value?.[r]),x=Ce({state:o,rulesDef:toRef(()=>i),customMessages:s,path:P,storage:a,options:n,externalErrors:l,schemaErrors:v,initialState:m,shortcuts:G,fieldName:E,schemaMode:V});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:p,shortcuts:m,fieldName:G}){let E=effectScope(),V,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(d=>typeof d!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(d=>me(d)||typeof d=="function"):false)})),c(),U();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,d)=>{let{scope:f,unwrapped:I}=nt(t.value.$each,toRef(()=>u),d);f&&l.push(f);let w=toRef(p.value??[],d),K=toRef(s?.value??{},"$each"),y=computed(()=>i?.value?.$each),M=ut({$id:v.value,path:n,customMessages:r,rules:I??{},stateValue:toRef(()=>u),index:d,options:o,storage:a,externalErrors:K,schemaErrors:y,initialState:w,shortcuts:m,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:p,shortcuts:m,fieldName:G,schemaMode:$});}function g(){if(Array.isArray(e.value)&&!P.isPrimitiveArray.value){let u=k(b.value);b.value=e.value.filter(d=>typeof d=="object").map((d,f)=>{let I=toRef(()=>d);if(d.$id&&b.value.find(w=>w.$id===d.$id)){let w=a.getArrayStatus(v.value,d.$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 y=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:y,schemaErrors:M,initialState:toRef(p.value??[],f),shortcuts:m,fieldName:G,schemaMode:$});return Y||null}}).filter(d=>!!d),u.filter(d=>!e.value?.find(f=>d.$id===f.$id)).forEach((d,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 U(){T(),E=effectScope(),V=E.run(()=>{let u=computed({get:()=>e.value,set(S){C(),e.value=S,T();}}),d=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)),y=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(){m?.collections&&Object.entries(m?.collections).forEach(([S,X])=>{let se=effectScope();F[S]=se.run(()=>{let ie=ref();return watchEffect(()=>{ie.value=X(reactive({$dirty:d,$error:K,$silentValue:u,$pending:M,$invalid:I,$correct:w,$errors:ee,$ready:y,$silentErrors:oe,$anyDirty:f,$name:fe,$each:b,$self:R,$value:e,$edited:Y,$anyEdited:Z}));}),ie}),l.push(se);});}let F={};return h(),{$dirty:d,$anyDirty:f,$invalid:I,$correct:w,$error:K,$pending:M,$errors:ee,$silentErrors:oe,$ready:y,$name:fe,$shortcuts:F,$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 q(u=true,d=false){R.value.$touch(u,d),b.value.forEach(f=>{f.$touch(u,d);});}function z(u,d){if(W(),!d)if(u?.toInitialState)e.value=k(p.value);else if(u?.toState){let f;typeof u?.toState=="function"?f=u?.toState():f=u?.toState,p.value=k(f),e.value=k(f);}else p.value=k(e.value);u?.clearExternalErrors&&D(),R.value.$reset(),b.value.forEach(f=>{f.$reset(u,true);}),d||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 d=b.value.map(f=>{if(Vt(f))return f.$extractDirtyFields(u)});return u&&d.every(f=>te(f))&&(d=[]),d}let{$shortcuts:ve,...Re}=V;return reactive({$self:R,...Re,...ve,$each:b,$value:e,$validate:le,$unwatch:W,$watch:U,$touch:q,$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:p,...m}){let G=effectScope(),E,V=[],O=null,P=null,l=null,v=null;async function C(u=true){let d=Object.entries(e.value),f=Object.fromEntries(d.filter(([y,M])=>!!M).map(([y,M])=>{if(M){let Y=toRef(t.value??{},y),Z=toRef(()=>M),ee=toRef(a?.value??{},y),oe=computed(()=>o?.value?.[y]),fe=toRef($?.value??{},y);return [y,Ce({state:Y,rulesDef:Z,path:r?`${r}.${y}`:y,externalErrors:ee,schemaErrors:oe,initialState:fe,fieldName:y,...m})]}return []})),I=Object.fromEntries(Object.entries(unref(a)??{}).filter(([y,M])=>!(y in e.value)&&!!M).map(([y])=>{let M=toRef(t.value??{},y),Y=toRef(a?.value??{},y),Z=computed(()=>o?.value?.[y]),ee=toRef($?.value??{},y);return [y,Ce({state:M,rulesDef:computed(()=>({})),path:r?`${r}.${y}`:y,externalErrors:Y,schemaErrors:Z,initialState:ee,fieldName:y,...m})]})),w=Object.fromEntries(Object.entries(unref(o)??{}).map(([y])=>{let M=toRef(t.value??{},y),Y=toRef(a?.value??{},y),Z=computed(()=>o?.value?.[y]),ee=toRef($?.value??{},y);return [y,Ce({state:M,rulesDef:computed(()=>({})),path:r?`${r}.${y}`:y,externalErrors:Y,schemaErrors:Z,initialState:ee,fieldName:y,...m})]})),K=Object.fromEntries(Object.entries(t.value??{}).filter(([y])=>!(y in e.value)&&!(y in(I??{}))&&!(y in(w??{}))).map(([y])=>{let M=toRef(t.value??{},y),Y=toRef(a?.value??{},y),Z=computed(()=>o?.value?.[y]),ee=toRef($?.value??{},y);return [y,Ce({state:M,rulesDef:computed(()=>({})),path:r?`${r}.${y}`:y,externalErrors:Y,schemaErrors:Z,initialState:ee,fieldName:y,...m})]}));R.value={...f,...I,...w,...K},u&&g();}let R=m.storage.getFieldsEntry(r);C();function b(){a&&(l=watch(a,()=>{T(),C();},{deep:true}));}function c(){v=watch(t,()=>{T(),C(),E.$autoDirty.value&&!E.$silent.value&&q(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();}}),d=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,N])=>at(N)?!N.$inactive:true);return B.length?B.every(([A,N])=>m.schemaMode?N.$correct:at(N)?"required"in N.$rules&&N.$rules.required.$active?N?.$correct:!N.$invalid&&!N.$pending:N?.$correct):false}),K=computed(()=>!!Object.entries(R.value).length&&Object.entries(R.value).some(([B,A])=>A?.$error)),y=computed(()=>unref(m.options.rewardEarly)!=null?unref(m.options.rewardEarly):false),M=computed(()=>unref(m.options.silent)!=null?unref(m.options.silent):!!y.value),Y=computed(()=>unref(m.options.autoDirty)!=null?unref(m.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]))),F=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(()=>p);function se(){m.shortcuts?.nested&&Object.entries(m.shortcuts.nested).forEach(([B,A])=>{let N=effectScope();je[B]=N.run(()=>{let we=ref();return watchEffect(()=>{we.value=A(reactive({$dirty:d,$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:F,$anyEdited:S}));}),we}),V.push(N);});}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(N=>[N,Dt(A,N)])),...Object.fromEntries(["$errors","$silentErrors"].map(N=>[N,It(A,N)]))}]:[])):{},set(){}}),je={};return se(),{$dirty:d,$anyDirty:f,$invalid:I,$correct:w,$error:K,$pending:oe,$errors:fe,$silentErrors:h,$ready:Z,$name:X,$shortcuts:je,$groups:ie,$silentValue:u,$edited:F,$anyEdited:S,$localPending:ee,$autoDirty:Y,$silent:M}});}function T(){O?.(),l?.(),v?.(),P?.(),V=[],E={},R.value&&Object.entries(R.value).forEach(([u,d])=>{d.$unwatch();});}function U(){Object.entries(R.value).forEach(([u,d])=>{d.$clearExternalErrors();});}function W(u,d){if(l?.(),T(),!d)if(u?.toInitialState)t.value=k({...$.value??{}});else if(u?.toState){let f;typeof u?.toState=="function"?f=u?.toState():f=u?.toState,$.value=k(f),t.value=k(f);}else $.value=k(t.value);Object.values(R.value).forEach(f=>{f.$reset(u,true);}),u?.clearExternalErrors&&U(),b(),d||C();}function q(u=true,d=false){Object.values(R.value).forEach(f=>{f.$touch(u,d);});}function z(u){return u.filter(([d,f])=>j(f)?!(f&&typeof f=="object"&&"_null"in f)&&!te(f):Array.isArray(f)?f.length:true)}function le(u=true){let d=Object.entries(R.value).map(([f,I])=>[f,I.$extractDirtyFields(u)]);return u&&(d=z(d)),Object.fromEntries(d)}async function D(){try{if(m.schemaMode)return m.onValidate?(q(!1),E.$localPending.value=!0,m.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:q,$validate:D,$unwatch:T,$watch:g,$clearExternalErrors:U,$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(ke(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 p=rt(),m=ref();return We(n,r)?m.value=ze({rootRules:r,rulesDef:r,state:n,customMessages:a?.(),storage:p,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root",path:"",schemaErrors:s,rootSchemaErrors:s,schemaMode:i,onValidate:$}):Be(r)&&(m.value=Ee({rulesDef:r,state:n,customMessages:a?.(),storage:p,options:t,externalErrors:t.externalErrors,initialState:e,shortcuts:o,fieldName:"root",path:"",schemaMode:i,schemaErrors:s,onValidate:$})),getCurrentScope()&&onScopeDispose(()=>{m.value?.$unwatch();}),reactive({regle:m})}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),p={...n,...i},m=isRef(o)?o:ref(o),G=shallowRef($??{});typeof s=="function"&&watchEffect(()=>{G.value=s(m),triggerRef(G);});let E=ref(j(m.value)?{...k(m.value)}:k(m.value));return {r$:Oe({scopeRules:G,state:m,options:p,initialState:E,customRules:e,shortcuts:r}).regle}}return a}var qe=Ke();function Je(){function e(t,r){return r}return e}var Rt=Je();function Ht({rules:e,modifiers:t,shortcuts:r}){let n=Ke(e,t,r);n.__config={rules:e,modifiers:t,shortcuts:r};let a=Je();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 p=Je();return {useRegle:$,inferRules:p}}function Fe(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)}),p=computed(()=>Object.entries(e).some(([c,g])=>g?.$error)),m=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]))),V=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(U=>U.$validate()))).every(U=>U.status==="fulfilled"?U.value.valid===!0:!1),data:c}}catch{return {valid:false,data:n.value}}}return reactive({...!r&&{$silentValue:a},$errors:E,$silentErrors:V,$instances:l,$value:n,$dirty:o,$anyDirty:s,$invalid:i,$correct:$,$error:p,$pending:G,$ready:m,$edited:O,$anyEdited:P,$reset:v,$touch:x,$validate:b,$extractDirtyFields:C,$clearExternalErrors:R})}function qt(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,p=>{o.value=$(p);},{deep:true});function $(p){if(a.value){let m=p[a.value]??{};return Fe(m,!t.asRecord)}else return Fe(p["~~global"]??{},!t.asRecord)}return {r$:s.r$}}return {useCollectScope:r}}function Qt(e,t){let r=t??qe;return {useScopedRegle:(a,o,s)=>{let{namespace:i,scopeKey:$,...p}=s??{};r.__config??={};let m=computed(()=>toValue(i)),G=ref(`${Object.keys(e.value).length+1}-${be()}`),E=computed(()=>s?.scopeKey??`instance-${G.value}`),{r$:V}=r(a,o,p);P(),Pt(O),watch(m,(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??m.value;v?e.value[v]&&delete e.value[v][E.value]:e.value["~~global"][E.value]&&delete e.value["~~global"][E.value];}function P(){m.value?(e.value[m.value]||(e.value[m.value]={}),e.value[m.value][E.value]=V):(e.value["~~global"]||(e.value["~~global"]={}),e.value["~~global"][E.value]=V);}return {r$:V,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}=qt(r,{asRecord:e?.asRecord});return {useScopedRegle:n,useCollectScope:a}}var {useCollectScope:pt,useScopedRegle:dt}=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(me(i))return unref(i._params?.[0])===n.value}});if(o)return o;{let s=r.find(i=>j(i[t])&&!Object.keys(i[t]).some($=>$==="literal"));return s||{}}})}function yt(e,t,r){return j(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(),yt(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,Fe as mergeRegles,yt as narrowVariant,nr as refineRules,re as unwrapRuleParameters,pt as useCollectScope,qe as useRegle,Oe 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,markRaw}from'vue';function Ot(e){return e?.constructor.name=="File"||e?.constructor.name=="FileList"}function re(e,t=true){return e==null?true:e instanceof Date?isNaN(e.getTime()):Ot(e)?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 wt=Symbol("regle-rule");function fr(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 W(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>W(n)))),r=="Map"&&(t=new Map([...e].map(n=>[W(n[0]),W(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,fr(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=W(e[n]);}return t}function A(e){return e&&(e instanceof Date||e.constructor.name=="File"||e.constructor.name=="FileList")?false:typeof e=="object"&&e!==null&&!Array.isArray(e)}function je(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 l=r[0],u=r.slice(1),c=u.length,a=0;a<c;a++){var g=u[a];for(var p in g)l[p]=g[p];}return l}function tt(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 We(e,t,r){let n,a=(...l)=>new Promise(u=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...l])).then(u);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a}function Be(e,t,r=false,n=true){if(e===t)return true;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return false;var a,l,u;if(Array.isArray(e)&&Array.isArray(t)){if(a=e.length,a!=t.length)return false;if(n||!n&&r){for(l=a;l--!==0;)if(!Be(e[l],t[l],r,false))return false}return true}if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if(u=Object.keys(e),a=u.length,a!==Object.keys(t).length)return false;for(l=a;l--!==0;)if(!Object.prototype.hasOwnProperty.call(t,u[l]))return false;for(l=a;l--!==0;){var c=u[l];return !(A(e)&&A(t)&&(n||!n&&r)&&!Be(e[c],t[c],r,false))}return true}return e!==e&&t!==t}var rt={Inline:"__inline",Async:"__async"};function Pt(e,t){return e.some(r=>r[t])}function At(e,t){return e.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[])}function ne(e){try{return e.map(t=>toValue(t))}catch{return []}}function Mt(e){return e.map(t=>t instanceof Function?computed(t):isRef(t)?t:toRef(()=>t))}function jt(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(u=>u.trim()).filter(u=>u.length>0).length:0}function nt(e,...t){let{validator:r,type:n}=e,a=n===rt.Async||r.constructor.name==="AsyncFunction";return markRaw({...{validator(c,...g){return e.validator(c,...ne(g.length?g:t))},message(c){return typeof e.message=="function"?e.message({...c,$params:ne(c?.$params?.length?c.$params:t)}):e.message},active(c){return typeof e.active=="function"?e.active({...c,$params:ne(c?.$params?.length?c.$params:t)}):e.active??true},tooltip(c){return typeof e.tooltip=="function"?e.tooltip({...c,$params:ne(c?.$params?.length?c.$params:t)}):e.tooltip??[]},exec(c){let g=e.validator(c,...ne(t)),p;return g instanceof Promise?g.then(d=>(p=d,typeof p=="object"&&"$valid"in p?p.$valid:typeof p=="boolean"?p:false)):(p=g,typeof p=="object"&&"$valid"in p?p.$valid:typeof p=="boolean"?p: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:Mt(t),_brand:wt})}function at(e){if(typeof e.validator=="function"){let r=nt(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(jt(e.validator)>1){let a=function(...l){return nt(e,...l)};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 lt(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),l=shallowRef(new Map);function u(y){let b=t.value.get(y);if(b)return b;{let x=ref({});return t.value.set(y,x),x}}function c(y){let b=r.value.get(y);if(b)return b;{let x=ref([]);return r.value.set(y,x),x}}function g(y,b,x){l.value.set(`${y}-${b}`,x);}function p(y,b){return l.value.get(`${y}-${b}`)}function d(y,b){y&&b!=null&&l.value.delete(`${y}-${b}`);}function L(y,b){n.value.set(y,b);}function h(y){return n.value.get(y)??false}function P(y,b){e.value.set(y,b);}function C(y,b){let x=e.value.get(y);return x?w(b,x)?{valid:true}:{valid:false}:void 0}function w(y,b){let x=Object.keys(b),T=Object.keys(y);return T.length!==x.length||!T.every(i=>x.includes(i))?false:T.every(i=>{let s=y[i],v=b[i];return !v||!s||typeof s=="function"||typeof v=="function"||typeof s=="number"||typeof s=="boolean"?false:s._params?s._params?.every((H,z)=>{if(typeof v=="number"||typeof v=="boolean")return true;{let J=ne(v._params),K=ne(s._params);return J?.[z]===K?.[z]}}):true})}function o(y){let b=a.value.get(y);if(b)return b;{let x=ref(false),T=ref(true),Q=ref({}),i=ref(false);return a.value.set(y,{$pending:x,$valid:T,$metadata:Q,$validating:i}),{$pending:x,$valid:T,$metadata:Q,$validating:i}}}return getCurrentScope()&&onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),l.value.clear();}),{addRuleDeclEntry:P,setDirtyEntry:L,checkRuleDeclEntry:C,getDirtyState:h,trySetRuleStatusRef:o,getFieldsEntry:u,getCollectionsEntry:c,getArrayStatus:p,addArrayStatus:g,deleteArrayStatus:d,arrayStatusStorage:l}}function Le(e){return A(e.value)}function ot(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 Fe={LessThan:-1,EqualTo:0,GreaterThan:1};function Tr(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let l=Number(r[a]),u=Number(n[a]);if(l>u)return Fe.GreaterThan;if(u>l)return Fe.LessThan;if(!isNaN(l)&&isNaN(u))return Fe.GreaterThan;if(isNaN(l)&&!isNaN(u))return Fe.LessThan}return Fe.EqualTo}var He=Tr(version,"3.5.0")!==-1;function hr(){return Math.floor(Math.random()*Date.now()).toString()}function xe(){return typeof window>"u"?hr():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Ft(e){return getCurrentScope()?(onScopeDispose(e),true):false}function Vt(e){let t=false,r,n=effectScope(true);return (...a)=>(t||(r=n.run(()=>e(...a)),t=true),r)}function ze(e,t){return Le(e)||A(t.value)&&!re(t.value)&&!Object.entries(t.value).some(([r,n])=>ve(n)||typeof n=="function")}function _t(e,t,r=false){return !!e.value&&A(e.value)&&"$each"in e.value||r&&Array.isArray(t.value)&&t.value.some(A)||Array.isArray(t.value)&&t.value.some(A)}function Ke(e){return !!e.value&&A(e.value)}function ve(e){return A(e)&&"_validator"in e}function Ve(e){return typeof e.value=="function"?"_validator"in e.value:true}function Ut(e){return A(e)&&"$fields"in e}function st(e){return !!e&&"$rules"in e}function it({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 Nt({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 kt(e){return A(e)&&"$each"in e}function ut(e,t){let{includePath:r=false}=t??{};if(Array.isArray(e)&&e.every(n=>!A(n)))return e;if(kt(e)){let n=r?e.$self?.map(l=>({error:l,path:""}))??[]:e.$self??[],a=e.$each?.map(l=>qe(l,r))??[];return n?.concat(a.flat())}else return Object.entries(e).map(([n,a])=>qe(a,r,[n])).flat()}function qe(e,t=false,r){let n=t&&!r?[]:r;if(Array.isArray(e)&&e.every(a=>!A(a)))return t?e.map(a=>({error:a,path:n?.join(".")??""})):e;if(kt(e)){let a=n?.length?e.$self?.map(u=>({error:u,path:n.join(".")}))??[]:e.$self??[],l=e.$each?.map((u,c)=>qe(u,t,n?.concat(c.toString())))??[];return a?.concat(l.flat())}else return Object.entries(e).map(([a,l])=>qe(l,t,n?.concat(a))).flat()}function Gt({customMessages:e,rule:t,ruleKey:r,state:n,path:a,storage:l,$debounce:u,modifiers:c}){let g=effectScope(),p={},d,L=ref(false),h=ref(false),{$pending:P,$valid:C,$metadata:w,$validating:o}=l.trySetRuleStatusRef(`${a}.${r}`);function y(){g=effectScope(),p=g.run(()=>{let v=ref(false),H=ref(false),z=ref(true),J=ref(false),K=ref(false),oe=computed(()=>({$value:n.value,$error:H.value,$dirty:v.value,$pending:J.value,$correct:K.value,$invalid:z.value,$rule:{$valid:C.value,$invalid:!C.value,$pending:P.value},$params:f.value,...w.value})),E=computed(()=>Ve(t)?typeof t.value.active=="function"?t.value.active(oe.value):!!t.value.active:true);function G(S){let M="",R=e?e[r]?.[S]:void 0;if(R&&(typeof R=="function"?M=R(oe.value):M=R),Ve(t)){let k=`_${S}_patched`;R&&!t.value[k]||(typeof t.value[S]=="function"?M=t.value[S](oe.value):M=t.value[S]??"");}return M}let ge=computed(()=>{let S=G("message");return re(S)&&(S="This field is not valid"),S}),Re=computed(()=>G("tooltip")),D=computed(()=>Ve(t)&&t.value.type?t.value.type:r),_=computed(()=>Ve(t)?t.value.validator:t.value),f=computed(()=>typeof t.value=="function"?[]:ne(t.value._params??[])),m=computed(()=>`${a}.${D.value}`);return {$active:E,$message:ge,$type:D,$validator:_,$params:f,$path:m,$tooltip:Re,$fieldCorrect:K,$fieldError:H,$fieldDirty:v,$fieldPending:J,$fieldInvalid:z}}),d=watch(p?.$params,()=>{(!c.$silent.value||c.$rewardEarly.value&&p.$fieldError.value)&&Q();});}y();function b(){C.value=true,p.$fieldDirty.value&&(P.value=true);}async function x(){let v=false;try{let H=p.$validator.value;if(typeof H!="function")return console.error(`${a}: Incorrect rule format, it needs to be either a function or created with "createRule".`),!1;let z=H(n.value,...p.$params.value),J=n.value;b();let K;if(z instanceof Promise?K=await z:K=z,n.value!==J)return !0;if(typeof K=="boolean")v=K;else {let{$valid:oe,...E}=K;v=oe,w.value=E;}}catch{v=false;}finally{P.value=false;}return v}let T=We(x,u??200);async function Q(){try{o.value=!0;let v=!1;if(h.value=!0,ve(t.value)&&t.value._async)v=await T();else {let H=p.$validator.value,z=H(n.value,...p.$params.value);if(z 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(z!=null)if(typeof z=="boolean")v=z;else {let{$valid:J,...K}=z;v=J,w.value=K;}}return C.value=v,v}catch{return false}finally{o.value=false,h.value=false;}}function i(){C.value=true,w.value={},P.value=false,o.value=false,y();}function s(){d(),g.stop(),g=effectScope();}return reactive({...p,$pending:P,$valid:C,$metadata:w,$haveAsync:L,$maybePending:h,$validating:o,$parse:Q,$unwatch:s,$watch:y,$reset:i})}function Ce({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:l,options:u,externalErrors:c,schemaErrors:g,schemaMode:p,onUnwatch:d,$isArray:L,initialState:h,shortcuts:P,onValidate:C}){let w=effectScope(),o,y=[],b,x,T,Q,i,s=()=>{};function v(){let $=t.value,U=l.checkRuleDeclEntry(n,$);G.value=Object.fromEntries(Object.entries($).filter(([j])=>j.startsWith("$"))),J(),E.value=Object.fromEntries(Object.entries(t.value).filter(([j])=>!j.startsWith("$")).map(([j,te])=>{if(te){let ie=toRef(()=>te);return [j,Gt({modifiers:{$silent:o.$silent,$rewardEarly:o.$rewardEarly},customMessages:r,rule:ie,ruleKey:j,state:e,path:n,storage:l,$debounce:G.value.$debounce})]}return []}).filter(j=>!!j.length)),o.processShortcuts(),H(),U?.valid!=null&&(o.$dirty.value=l.getDirtyState(n),(o.$dirty.value&&!o.$silent.value||o.$rewardEarly.value&&o.$error.value)&&s()),l.addRuleDeclEntry(n,$);}function H(){s=o.$debounce.value?We(oe,o.$debounce.value??o.$haveAnyAsyncRule?100:0):oe;}function z(){E.value&&Object.entries(E.value).forEach(([$,U])=>{U.$unwatch();}),T(),i?.(),o.$dirty.value&&l.setDirtyEntry(n,o.$dirty.value),b?.(),x?.(),w.stop(),w=effectScope(),y.forEach($=>$.stop()),y=[],d?.(),Q?.();}function J(){E.value&&Object.entries(E.value).forEach(([$,U])=>{U.$watch();}),o=w.run(()=>{let $=ref(false),U=ref(false),j=computed(()=>$.value),te=computed(()=>G.value.$debounce),ie=computed(()=>G.value.$deepCompare!=null?G.value.$deepCompare:false),Ae=computed(()=>G.value.$lazy!=null?G.value.$lazy:unref(u.lazy)!=null?unref(u.lazy):false),ue=computed(()=>G.value.$rewardEarly!=null?G.value.$rewardEarly:unref(u.rewardEarly)!=null?unref(u.rewardEarly):false),I=computed(()=>G.value.$clearExternalErrorsOnChange!=null?G.value.$clearExternalErrorsOnChange:unref(u.clearExternalErrorsOnChange)!=null?unref(u.clearExternalErrorsOnChange):true),F=computed(()=>ue.value?true:G.value.$silent!=null?G.value.$silent:unref(u.silent)!=null?unref(u.silent):false),O=computed(()=>G.value.$autoDirty!=null?G.value.$autoDirty:unref(u.autoDirty)!=null?unref(u.autoDirty):true),V=computed(()=>Object.entries(E.value).some(([ce,ee])=>ee.$validating)),Me=computed({get:()=>e.value,set(ce){b(),e.value=ce,K();}}),ke=computed(()=>Te.value&&!Se.value&&$.value),$t=computed(()=>it({field:{$rules:E.value,$error:ke.value,$externalErrors:c?.value,$schemaErrors:g?.value}})),St=computed(()=>it({field:{$rules:E.value,$error:ke.value,$externalErrors:c?.value,$schemaErrors:g?.value},silent:true})),et=computed(()=>$.value?h.value instanceof Date&&e.value instanceof Date?tt(h.value).getDate()!==tt(e.value).getDate():h.value==null?!!e.value:Array.isArray(e.value)&&Array.isArray(h.value)?!Be(e.value,h.value,G.value.$deepCompare):h.value!==e.value:false),Tt=computed(()=>et.value),ht=computed(()=>Nt({field:{$rules:E.value}})),bt=computed(()=>(F.value||j.value)&&!(Te.value||Se.value)),Se=computed(()=>U.value||!ue.value?Object.entries(E.value).some(([ce,ee])=>ee.$pending):false),Te=computed(()=>c?.value?.length||g?.value?.length?true:Ge.value?false:!ue.value||ue.value&&U.value?Object.entries(E.value).some(([ce,ee])=>!(ee.$valid&&!ee.$maybePending)):false),xt=computed(()=>a),Ge=computed(()=>!!(re(E.value)&&!p)),Et=computed(()=>c?.value?.length||Ge.value?false:$.value&&!re(e.value)&&!V.value&&!Se.value?p?!g?.value?.length:Object.values(E.value).some(ee=>ee.$active)?Object.values(E.value).filter(ee=>ee.$active).every(ee=>ee.$valid):false:false),ur=computed(()=>Object.entries(E.value).some(([ce,ee])=>ee.$haveAsync));function cr(){P?.fields&&Object.entries(P.fields).forEach(([ce,ee])=>{let Dt=effectScope();Ct[ce]=Dt.run(()=>{let It=ref();return watchEffect(()=>{It.value=ee(reactive({$dirty:$,$externalErrors:c?.value??[],$value:e,$silentValue:Me,$rules:E,$error:ke,$pending:Se,$invalid:Te,$correct:Et,$errors:$t,$ready:bt,$silentErrors:St,$anyDirty:j,$tooltips:ht,$name:xt,$inactive:Ge,$edited:et,$anyEdited:Tt}));}),It}),y.push(Dt);});}let Ct={};return watch(Te,ce=>{ce||(U.value=false);}),{$error:ke,$pending:Se,$invalid:Te,$correct:Et,$debounce:te,$deepCompare:ie,$lazy:Ae,$errors:$t,$ready:bt,$silentErrors:St,$rewardEarly:ue,$autoDirty:O,$silent:F,$clearExternalErrorsOnChange:I,$anyDirty:j,$edited:et,$anyEdited:Tt,$name:xt,$haveAnyAsyncRule:ur,$shortcuts:Ct,$validating:V,$tooltips:ht,$dirty:$,triggerPunishment:U,processShortcuts:cr,$silentValue:Me,$inactive:Ge}}),K(),T=watch(o.$dirty,$=>{l.setDirtyEntry(n,$),Object.values(E.value).forEach(U=>{U.$fieldDirty=$;});}),i=watch([o.$error,o.$correct,o.$invalid,o.$pending],()=>{Object.values(E.value).forEach($=>{$.$fieldError=o.$error.value,$.$fieldInvalid=o.$invalid.value,$.$fieldPending=o.$pending.value,$.$fieldCorrect=o.$correct.value;});}),x=watch(o.$invalid,$=>{o.$rewardEarly.value&&!$&&(o.triggerPunishment.value=false);}),Q=watch(o.$haveAnyAsyncRule,H);}function K(){b=watch(e,()=>{o.$autoDirty.value&&!o.$silent.value&&(o.$dirty.value||(o.$dirty.value=true)),t.value instanceof Function&&v(),(!o.$silent.value||o.$rewardEarly.value&&o.$error.value)&&s(),o.$rewardEarly.value!==true&&o.$clearExternalErrorsOnChange.value&&f();},{deep:L?true:He?1:true});}function oe(){Object.values(E.value).forEach($=>{$.$parse();});}let E=ref({}),G=ref({});v();function ge($,U){if(f(),o.$dirty.value=false,o.triggerPunishment.value=false,l.setDirtyEntry(n,false),!U)if($?.toInitialState)e.value=W(h.value);else if($?.toState){let j;typeof $?.toState=="function"?j=$?.toState():j=$?.toState,h.value=W(j),e.value=W(j);}else h.value=A(e.value)?W(e.value):Array.isArray(e.value)?[...e.value]:e.value;$?.clearExternalErrors&&f(),U||Object.entries(E.value).forEach(([j,te])=>{te.$reset();}),!o.$lazy.value&&!o.$silent.value&&!U&&Object.values(E.value).forEach(j=>j.$parse());}function Re($=true,U=false){o.$dirty.value||(o.$dirty.value=true),U&&$?(!o.$silent.value||o.$rewardEarly.value&&o.$error.value)&&s():$&&s();}async function D(){try{if(p)return C?(Re(!1),C()):{valid:!1,data:e.value};let $=e.value;if(o.triggerPunishment.value=!0,!o.$dirty.value)o.$dirty.value=!0;else if(!o.$silent.value&&o.$dirty.value&&!o.$pending.value)return {valid:!o.$error.value,data:$};return p?{valid:!g?.value?.length,data:$}:re(E.value)?{valid:!0,data:$}:{valid:(await Promise.allSettled(Object.entries(E.value).map(([te,ie])=>ie.$parse()))).every(te=>te.status==="fulfilled"?te.value===!0:!1),data:$}}catch{return {valid:false,data:e.value}}}function _($=true){return o.$dirty.value?e.value:$?{_null:true}:null}function f(){c?.value?.length&&(c.value=[]);}!o.$lazy.value&&!o.$dirty.value&&!o.$silent.value&&s();let{$shortcuts:m,$validating:S,$autoDirty:M,$rewardEarly:R,$clearExternalErrorsOnChange:k,$haveAnyAsyncRule:X,$debounce:Y,$lazy:Z,triggerPunishment:pe,...se}=o;return reactive({...se,$externalErrors:c,$value:e,$rules:E,...m,$reset:ge,$touch:Re,$validate:D,$unwatch:z,$watch:J,$extractDirtyFields:_,$clearExternalErrors:f})}function Rt({$id:e,path:t,index:r,options:n,storage:a,stateValue:l,customMessages:u,rules:c,externalErrors:g,schemaErrors:p,initialState:d,shortcuts:L,fieldName:h,schemaMode:P}){let C=c.$key?c.$key:xe(),w=`${t}.${String(C)}`;typeof l.value=="object"&&l.value!=null&&(l.value.$id?w=`${t}.${l.value.$id}`:Object.defineProperties(l.value,{$id:{value:C,enumerable:false,configurable:false,writable:false}}));let o=toRef(g?.value??[],r),y=computed(()=>p?.value?.[r]),b=De({state:l,rulesDef:toRef(()=>c),customMessages:u,path:w,storage:a,options:n,externalErrors:o,schemaErrors:y,initialState:d,shortcuts:L,fieldName:h,schemaMode:P});if(b){let x=l.value?.$id;b.$id=x??String(C),a.addArrayStatus(e,b.$id,b);}return b}function zt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:u,schemaErrors:c,schemaMode:g,initialState:p,shortcuts:d,fieldName:L}){let h=effectScope(),P,C=effectScope(),w,o=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let y=ref(),b=ref(e.value),x=ref({}),T,Q,i=ref({}),s=a.getCollectionsEntry(n);w=C.run(()=>({isPrimitiveArray:computed(()=>e.value?.length?Array.isArray(e.value)&&e.value.length?e.value.every(m=>typeof m!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(m=>ve(m)||typeof m=="function"):false:false)})),v(),J();function v(){x.value=Object.fromEntries(Object.entries(t.value).filter(([f])=>f.startsWith("$"))),typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(y.value=xe(),Object.defineProperties(e.value,{$id:{value:y.value,enumerable:false,configurable:false,writable:false}})):e.value?.$id&&(y.value=e.value.$id)),b.value=i.value.$value,Array.isArray(e.value)&&!w.isPrimitiveArray.value?s.value=e.value.filter(f=>typeof f=="object").map((f,m)=>{let{scope:S,unwrapped:M}=ot(t.value.$each,toRef(()=>f),m);S&&o.push(S);let R=toRef(p.value??[],m),k=toRef(u?.value??{},"$each"),X=computed(()=>c?.value?.$each),Y=Rt({$id:y.value,path:n,customMessages:r,rules:M??{},stateValue:toRef(()=>f),index:m,options:l,storage:a,externalErrors:k,schemaErrors:X,initialState:R,shortcuts:d,fieldName:L,schemaMode:g});return Y||null}).filter(f=>!!f):s.value=[],i.value=Ce({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:l,externalErrors:toRef(u?.value??{},"$self"),schemaErrors:computed(()=>c?.value?.$self),$isArray:true,initialState:p,shortcuts:d,fieldName:L,schemaMode:g});}function H(){if(Array.isArray(e.value)&&!w.isPrimitiveArray.value){let f=W(s.value);s.value=e.value.filter(m=>typeof m=="object").map((m,S)=>{let M=toRef(()=>m);if(m.$id&&s.value.find(R=>R.$id===m.$id)){let R=a.getArrayStatus(y.value,m.$id);return R?(R.$value=M,R):null}else {let{scope:R,unwrapped:k}=ot(t.value.$each,M,S);R&&o.push(R);let X=toRef(u?.value??{},"$each"),Y=computed(()=>c?.value?.$each??[]),Z=Rt({$id:y.value,path:n,customMessages:r,rules:k??{},stateValue:M,index:S,options:l,storage:a,externalErrors:X,schemaErrors:Y,initialState:toRef(p.value??[],S),shortcuts:d,fieldName:L,schemaMode:g});return Z||null}}).filter(m=>!!m),f.filter(m=>!e.value?.find(S=>m.$id===S.$id)).forEach((m,S)=>{a.deleteArrayStatus(y.value,S.toString());});}else s.value=[];}function z(){T=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?v():H();},{deep:He?1:true,flush:"pre"}),Q=watch(e,()=>{P.$autoDirty.value&&!P.$silent.value&&oe(false,true);},{flush:"pre"});}function J(){z(),h=effectScope(),P=h.run(()=>{let f=computed({get:()=>e.value,set(I){T?.(),Q?.(),e.value=I,z();}}),m=computed(()=>i.value.$dirty&&(!s.value.length||s.value.every(I=>I.$dirty))),S=computed(()=>i.value.$anyDirty||s.value.some(I=>I.$anyDirty)),M=computed(()=>i.value.$invalid||s.value.some(I=>I.$invalid)),R=computed(()=>(re(i.value.$rules)?true:i.value.$correct)&&(!s.value.length||s.value.every(I=>I.$correct||I.$anyDirty&&!I.$invalid))),k=computed(()=>i.value.$error||s.value.some(I=>I.$error)),X=computed(()=>!(M.value||Y.value)),Y=computed(()=>i.value.$pending||s.value.some(I=>I.$pending)),Z=computed(()=>!!s.value.length&&s.value.every(I=>I.$edited)),pe=computed(()=>i.value.$anyEdited||s.value.some(I=>I.$anyEdited)),se=computed(()=>({$self:i.value.$errors,$each:s.value.map(I=>I.$errors)})),$=computed(()=>({$self:i.value.$silentErrors,$each:s.value.map(I=>I.$silentErrors)})),U=computed(()=>x.value.$rewardEarly!=null?x.value.$rewardEarly:unref(l.rewardEarly)!=null?unref(l.rewardEarly):false),j=computed(()=>U.value?true:x.value.$silent!=null?x.value.$silent:unref(l.silent)!=null?unref(l.silent):false),te=computed(()=>x.value.$autoDirty!=null?x.value.$autoDirty:unref(l.autoDirty)!=null?unref(l.autoDirty):true),ie=computed(()=>L);function Ae(){d?.collections&&Object.entries(d?.collections).forEach(([I,F])=>{let O=effectScope();ue[I]=O.run(()=>{let V=ref();return watchEffect(()=>{V.value=F(reactive({$dirty:m,$error:k,$silentValue:f,$pending:Y,$invalid:M,$correct:R,$errors:se,$ready:X,$silentErrors:$,$anyDirty:S,$name:ie,$each:s,$self:i,$value:e,$edited:Z,$anyEdited:pe}));}),V}),o.push(O);});}let ue={};return Ae(),{$dirty:m,$anyDirty:S,$invalid:M,$correct:R,$error:k,$pending:Y,$errors:se,$silentErrors:$,$ready:X,$name:ie,$shortcuts:ue,$silentValue:f,$edited:Z,$anyEdited:pe,$rewardEarly:U,$silent:j,$autoDirty:te}}),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 K(){T?.(),i.value&&i.value.$unwatch(),s.value&&s.value.forEach(f=>{"$dirty"in f&&f.$unwatch();}),h.stop(),h=effectScope(),C.stop(),C=effectScope(true),o.forEach(f=>f.stop()),o=[];}function oe(f=true,m=false){i.value.$touch(f,m),s.value.forEach(S=>{S.$touch(f,m);});}function E(f,m){if(K(),!m)if(f?.toInitialState)e.value=W(p.value);else if(f?.toState){let S;typeof f?.toState=="function"?S=f?.toState():S=f?.toState,p.value=W(S),e.value=W(S);}else p.value=W(e.value);f?.clearExternalErrors&&ge(),i.value.$reset(f,m),s.value.forEach(S=>{S.$reset(f,true);}),m||v();}async function G(){let f=e.value;try{return {valid:(await Promise.allSettled([i.value.$validate(),...s.value.map(M=>M.$validate())])).every(M=>M.status==="fulfilled"?M.value.valid===!0:!1),data:f}}catch{return {valid:false,data:f}}}function ge(){i.value.$clearExternalErrors(),s.value.forEach(f=>{f.$clearExternalErrors();});}function Re(f=true){let m=s.value.map(S=>{if(Ut(S))return S.$extractDirtyFields(f)});return f&&m.every(S=>re(S))&&(m=[]),m}let{$shortcuts:D,..._}=P;return reactive({$self:i,..._,...D,$each:s,$value:e,$validate:G,$unwatch:K,$watch:J,$touch:oe,$reset:E,$extractDirtyFields:Re,$clearExternalErrors:ge})}function Je({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:a,schemaErrors:l,rootSchemaErrors:u,validationGroups:c,initialState:g,fieldName:p,...d}){let L=effectScope(),h,P=[],C=null,w=null,o=null,y=null;async function x(D=true){let _=Object.entries(e.value),f=Object.fromEntries(_.filter(([R,k])=>!!k).map(([R,k])=>{if(k){let X=toRef(t.value??{},R),Y=toRef(()=>k),Z=toRef(a?.value??{},R),pe=computed(()=>l?.value?.[R]),se=toRef(g?.value??{},R);return [R,De({state:X,rulesDef:Y,path:r?`${r}.${R}`:R,externalErrors:Z,schemaErrors:pe,initialState:se,fieldName:R,...d})]}return []})),m=Object.fromEntries(Object.entries(unref(a)??{}).filter(([R,k])=>!(R in e.value)&&!!k).map(([R])=>{let k=toRef(t.value??{},R),X=toRef(a?.value??{},R),Y=computed(()=>l?.value?.[R]),Z=toRef(g?.value??{},R);return [R,De({state:k,rulesDef:computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:X,schemaErrors:Y,initialState:Z,fieldName:R,...d})]})),S=Object.fromEntries(Object.entries(unref(l)??{}).map(([R])=>{let k=toRef(t.value??{},R),X=toRef(a?.value??{},R),Y=computed(()=>l?.value?.[R]),Z=toRef(g?.value??{},R);return [R,De({state:k,rulesDef:computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:X,schemaErrors:Y,initialState:Z,fieldName:R,...d})]})),M=Object.fromEntries(Object.entries(t.value??{}).filter(([R])=>!(R in e.value)&&!(R in(m??{}))&&!(R in(S??{}))).map(([R])=>{let k=toRef(t.value??{},R),X=toRef(a?.value??{},R),Y=computed(()=>l?.value?.[R]),Z=toRef(g?.value??{},R);return [R,De({state:k,rulesDef:computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:X,schemaErrors:Y,initialState:Z,fieldName:R,...d})]}));T.value={...f,...m,...S,...M},D&&s();}let T=d.storage.getFieldsEntry(r);x();function Q(){a&&(o=watch(a,()=>{v(),x();},{deep:true}));}function i(){y=watch(t,()=>{v(),x(),h.$autoDirty.value&&!h.$silent.value&&J(false,true);});}function s(){n&&(C?.(),C=watch(n,()=>{v(),x();},{deep:true,flush:"pre"}),Q()),u&&(w?.(),w=watch(u,()=>{v(),x();},{deep:true,flush:"post"})),i(),h=L.run(()=>{let D=computed({get:()=>t.value,set(F){v(),t.value=F,x(),h.$autoDirty.value&&!h.$silent.value&&J(false,true);}}),_=computed({get:()=>t.value,set(F){v(),t.value=F,x();}}),f=computed(()=>!!Object.entries(T.value).length&&Object.entries(T.value).every(([F,O])=>O?.$dirty)),m=computed(()=>Object.entries(T.value).some(([F,O])=>O?.$anyDirty)),S=computed(()=>!!Object.entries(T.value).length&&Object.entries(T.value).some(([F,O])=>O?.$invalid)),M=computed(()=>{let F=Object.entries(T.value).filter(([O,V])=>st(V)?!V.$inactive:true);return F.length?F.every(([O,V])=>d.schemaMode?V.$correct:st(V)?"required"in V.$rules&&V.$rules.required.$active?V?.$correct:!V.$invalid&&!V.$pending:V?.$correct):false}),R=computed(()=>!!Object.entries(T.value).length&&Object.entries(T.value).some(([F,O])=>O?.$error)),k=computed(()=>unref(d.options.rewardEarly)!=null?unref(d.options.rewardEarly):false),X=computed(()=>unref(d.options.silent)!=null?unref(d.options.silent):!!k.value),Y=computed(()=>unref(d.options.autoDirty)!=null?unref(d.options.autoDirty):true),Z=computed(()=>(X.value||m.value)&&!(S.value||se.value)),pe=ref(false),se=computed(()=>pe.value||Object.entries(T.value).some(([F,O])=>O?.$pending)),$=computed(()=>Object.fromEntries(Object.entries(T.value).map(([F,O])=>[F,O?.$errors]))),U=computed(()=>Object.fromEntries(Object.entries(T.value).map(([F,O])=>[F,O?.$silentErrors]))),j=computed(()=>!!Object.entries(T.value).length&&Object.entries(T.value).every(([F,O])=>O?.$edited)),te=computed(()=>Object.entries(T.value).some(([F,O])=>O?.$anyEdited)),ie=computed(()=>p);function Ae(){d.shortcuts?.nested&&Object.entries(d.shortcuts.nested).forEach(([F,O])=>{let V=effectScope();I[F]=V.run(()=>{let Me=ref();return watchEffect(()=>{Me.value=O(reactive({$dirty:f,$value:t,$silentValue:_,$error:R,$pending:se,$invalid:S,$correct:M,$ready:Z,$anyDirty:m,$name:ie,$silentErrors:U,$errors:$,$fields:T,$edited:j,$anyEdited:te}));}),Me}),P.push(V);});}let ue=computed({get:()=>c?Object.fromEntries(Object.entries(c?.(T.value)??{}).map(([F,O])=>O.length?[F,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$correct"].map(V=>[V,Pt(O,V)])),...Object.fromEntries(["$errors","$silentErrors"].map(V=>[V,At(O,V)]))}]:[])):{},set(){}}),I={};return Ae(),{$dirty:f,$anyDirty:m,$invalid:S,$correct:M,$error:R,$pending:se,$errors:$,$silentErrors:U,$ready:Z,$name:ie,$shortcuts:I,$groups:ue,$silentValue:_,$edited:j,$anyEdited:te,$localPending:pe,$autoDirty:Y,$silent:X,$value:D}});}function v(){C?.(),o?.(),y?.(),w?.(),P=[],h={},T.value&&Object.entries(T.value).forEach(([D,_])=>{_.$unwatch();});}function H(){Object.entries(T.value).forEach(([D,_])=>{_.$clearExternalErrors();});}function z(D,_){if(o?.(),v(),!_)if(D?.toInitialState)t.value=W({...g.value??{}});else if(D?.toState){let f;typeof D?.toState=="function"?f=D?.toState():f=D?.toState,g.value=W(f),t.value=W(f);}else g.value=W(t.value);Object.values(T.value).forEach(f=>{f.$reset(D,true);}),D?.clearExternalErrors&&H(),Q(),_||x();}function J(D=true,_=false){Object.values(T.value).forEach(f=>{f.$touch(D,_);});}function K(D){return D.filter(([_,f])=>A(f)?!(f&&typeof f=="object"&&"_null"in f)&&!re(f):Array.isArray(f)?f.length:true)}function oe(D=true){let _=Object.entries(T.value).map(([f,m])=>[f,m.$extractDirtyFields(D)]);return D&&(_=K(_)),Object.fromEntries(_)}async function E(){try{if(d.schemaMode)return d.onValidate?(J(!1),h.$localPending.value=!0,d.onValidate()):{valid:!1,data:t.value};{let D=t.value;return {valid:(await Promise.allSettled(Object.values(T.value).map(m=>m.$validate()))).every(m=>m.status==="fulfilled"?m.value.valid===!0:!1),data:D}}}catch{return {valid:false,data:t.value}}finally{h.$localPending.value=false;}}let{$shortcuts:G,$localPending:ge,...Re}=h;return reactive({...Re,...G,$fields:T,$reset:z,$touch:J,$validate:E,$unwatch:v,$watch:s,$clearExternalErrors:H,$extractDirtyFields:oe})}function De({rulesDef:e,...t}){if(_t(e,t.state,t.schemaMode))return zt({rulesDef:e,...t});if(ze(t.state,e)){if(Le(t.state))return Je({rulesDef:e,...t});{let n=effectScope().run(()=>{let u=toRef(t.state.value?t.state:ref({}));return watch(()=>t.state.value,c=>{u.value=c;},{deep:true}),watch(u,c=>{t.state.value=c;},{deep:true}),{fakeState:u}}),{state:a,...l}=t;return Je({rulesDef:e,...l,state:n.fakeState})}}else if(Ke(e))return Ce({rulesDef:e,...t})}function Pe({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:l,schemaErrors:u,schemaMode:c=false,onValidate:g}){let p=lt(),d=ref();return ze(n,r)?d.value=Je({rootRules:r,rulesDef:r,state:n,customMessages:a?.(),storage:p,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:l,fieldName:"root",path:"",schemaErrors:u,rootSchemaErrors:u,schemaMode:c,onValidate:g}):Ke(r)&&(d.value=Ce({rulesDef:r,state:n,customMessages:a?.(),storage:p,options:t,externalErrors:t.externalErrors,initialState:e,shortcuts:l,fieldName:"root",path:"",schemaMode:c,schemaErrors:u,onValidate:g})),getCurrentScope()&&onScopeDispose(()=>{d.value?.$unwatch();}),reactive({regle:d})}function Ye(e,t,r){let n={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,silent:t?.silent,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function a(l,u,c){let g=isRef(u)?u:typeof u=="function"?void 0:computed(()=>u),p={...n,...c},d=isRef(l)?l:ref(l),L=shallowRef(g??{});typeof u=="function"&&watchEffect(()=>{L.value=u(d),triggerRef(L);});let h=ref(A(d.value)?{...W(d.value)}:W(d.value));return {r$:Pe({scopeRules:L,state:d,options:p,initialState:h,customRules:e,shortcuts:r}).regle}}return a}var Qe=Ye();function Xe(){function e(t,r){return r}return e}var yt=Xe();function Yt({rules:e,modifiers:t,shortcuts:r}){let n=Ye(e,t,r);n.__config={rules:e,modifiers:t,shortcuts:r};let a=Xe();return {useRegle:n,inferRules:a}}function Qt(e,{rules:t,modifiers:r,shortcuts:n}){let a=e.__config??{},l=()=>({...a.rules?.(),...t?.()}),u=a.modifiers&&r?je(a.modifiers,r):r,c=a.shortcuts&&n?je(a.shortcuts,n):n,g=Ye(l,u,c);g.__config={rules:l,modifiers:u,shortcuts:c};let p=Xe();return {useRegle:g,inferRules:p}}function Ne(e,t){let r=t??false,n=computed({get:()=>r?Object.values(e).map(i=>i.$value):Object.fromEntries(Object.entries(e).map(([i,s])=>[i,s.$value])),set:i=>{r||typeof i=="object"&&Object.entries(i).forEach(([s,v])=>e[s].$value=v);}}),a=computed({get:()=>Object.fromEntries(Object.entries(e).map(([i,s])=>[i,s.$silentValue])),set:i=>{typeof i=="object"&&Object.entries(i).forEach(([s,v])=>e[s].$silentValue=v);}}),l=computed(()=>{let i=Object.entries(e);return !!i.length&&i.every(([s,v])=>v?.$dirty)}),u=computed(()=>Object.entries(e).some(([i,s])=>s?.$anyDirty)),c=computed(()=>Object.entries(e).some(([i,s])=>s?.$invalid)),g=computed(()=>{let i=Object.entries(e);return !!i.length&&i.every(([s,v])=>v?.$correct||v.$anyDirty&&!v.$invalid)}),p=computed(()=>Object.entries(e).some(([i,s])=>s?.$error)),d=computed(()=>{let i=Object.entries(e);return !!i.length&&i.every(([s,v])=>v?.$ready)}),L=computed(()=>Object.entries(e).some(([i,s])=>s?.$pending)),h=computed(()=>r?Object.entries(e).map(([i,s])=>s.$errors):Object.fromEntries(Object.entries(e).map(([i,s])=>[i,s.$errors]))),P=computed(()=>r?Object.entries(e).map(([i,s])=>s.$silentErrors):Object.fromEntries(Object.entries(e).map(([i,s])=>[i,s.$silentErrors]))),C=computed(()=>{let i=Object.entries(e);return !!i.length&&i.every(([s,v])=>v?.$edited)}),w=computed(()=>Object.entries(e).some(([i,s])=>s?.$anyEdited)),o=computed(()=>r?Object.values(e):e);function y(i){Object.values(e).forEach(s=>{s.$reset(i);});}function b(){Object.values(e).forEach(i=>{i.$touch();});}function x(i=true){return Object.values(e).map(s=>s.$extractDirtyFields(i))}function T(){Object.values(e).forEach(i=>{i.$clearExternalErrors();});}async function Q(){try{let i=n.value;return {valid:(await Promise.allSettled(Object.values(e).map(H=>H.$validate()))).every(H=>H.status==="fulfilled"?H.value.valid===!0:!1),data:i}}catch{return {valid:false,data:n.value}}}return reactive({...!r&&{$silentValue:a},$errors:h,$silentErrors:P,$instances:o,$value:n,$dirty:l,$anyDirty:u,$invalid:c,$correct:g,$error:p,$pending:L,$ready:d,$edited:C,$anyEdited:w,$reset:y,$touch:b,$validate:Q,$extractDirtyFields:x,$clearExternalErrors:T})}function Zt(e,t){function r(n){let a=computed(()=>toValue(n));c();let l=ref(g(e.value)),u=reactive({r$:l});function c(){a.value&&!e.value[a.value]&&(e.value[a.value]={});}watch(a,c),watch(e,p=>{l.value=g(p);},{deep:true});function g(p){if(a.value){let d=p[a.value]??{};return Ne(d,!t.asRecord)}else return Ne(p["~~global"]??{},!t.asRecord)}return {r$:u.r$}}return {useCollectScope:r}}function rr(e,t){let r=t??Qe;return {useScopedRegle:(a,l,u)=>{let{namespace:c,scopeKey:g,...p}=u??{};r.__config??={};let d=computed(()=>toValue(c)),L=ref(`${Object.keys(e.value).length+1}-${xe()}`),h=computed(()=>u?.scopeKey??`instance-${L.value}`),{r$:P}=r(a,l,p);w(),Ft(C),watch(d,(o,y)=>{C(y),w();}),getCurrentInstance()&&onMounted(()=>{let o=getCurrentInstance();typeof window<"u"&&o?.proxy?.$el?.parentElement&&document.documentElement&&!document.documentElement.contains(o?.proxy?.$el?.parentElement)&&C();});function C(o){let y=o??d.value;y?e.value[y]&&delete e.value[y][h.value]:e.value["~~global"][h.value]&&delete e.value["~~global"][h.value];}function w(){d.value?(e.value[d.value]||(e.value[d.value]={}),e.value[d.value][h.value]=P):(e.value["~~global"]||(e.value["~~global"]={}),e.value["~~global"][h.value]=P);}return {r$:P,dispose:C,register:w}}}}function Ze(e){let r=(e?.customStore?()=>(e.customStore&&(e.customStore?.value["~~global"]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value["~~global"]={}),e.customStore):Vt(()=>ref({"~~global":{}})))(),{useScopedRegle:n}=rr(r,e?.customUseRegle),{useCollectScope:a}=Zt(r,{asRecord:e?.asRecord});return {useScopedRegle:n,useCollectScope:a}}var {useCollectScope:mt,useScopedRegle:gt}=Ze();function lr(e,t,r){let n=computed(()=>toValue(e)[t]);return computed(()=>{let l=r.find(u=>{if(u[t]&&"literal"in u[t]){let c=u[t].literal;if(ve(c))return unref(c._params?.[0])===n.value}});if(l)return l;{let u=r.find(c=>A(c[t])&&!Object.keys(c[t]).some(g=>g==="literal"));return u||{}}})}function vt(e,t,r){return A(e[t])&&"$value"in e[t]&&e[t]?.$value===r}function or(e,t,r){let n=isRef(e)?toRef(e.value,"$fields"):toRef(e,"$fields"),a=ref();return watch(n,async()=>{await nextTick(),vt(n.value,t,r)?a.value=n.value:a.value=void 0;},{immediate:true,flush:"pre"}),a}function sr(e){return e}function ir(e,t){return r=>je({...e},t(r))}
2
+ export{rt as InternalRuleType,at as createRule,Ze as createScopedUseRegle,lr as createVariant,Yt as defineRegleConfig,sr as defineRules,Qt as extendRegleConfig,ut as flatErrors,yt as inferRules,Ne as mergeRegles,vt as narrowVariant,ir as refineRules,ne as unwrapRuleParameters,mt as useCollectScope,Qe as useRegle,Pe as useRootStorage,gt as useScopedRegle,or as variantToRef};
@@ -1,4 +1,11 @@
1
- import { effectScope, ref, computed, toValue, reactive, watch, getCurrentInstance, onMounted, getCurrentScope, onScopeDispose, isRef, shallowRef, watchEffect, triggerRef, toRef, unref, version, nextTick } from 'vue';
1
+ import { effectScope, ref, computed, toValue, reactive, watch, getCurrentInstance, onMounted, getCurrentScope, onScopeDispose, isRef, shallowRef, watchEffect, triggerRef, toRef, unref, version, nextTick, markRaw } from 'vue';
2
+
3
+ // src/core/createRule/defineRuleProcessors.ts
4
+
5
+ // ../shared/utils/isFile.ts
6
+ function isFile(value) {
7
+ return value?.constructor.name == "File" || value?.constructor.name == "FileList";
8
+ }
2
9
 
3
10
  // ../shared/utils/isEmpty.ts
4
11
  function isEmpty(value, considerEmptyArrayInvalid = true) {
@@ -7,7 +14,7 @@ function isEmpty(value, considerEmptyArrayInvalid = true) {
7
14
  }
8
15
  if (value instanceof Date) {
9
16
  return isNaN(value.getTime());
10
- } else if (value.constructor.name == "File" || value.constructor.name == "FileList") {
17
+ } else if (isFile(value)) {
11
18
  return value.size <= 0;
12
19
  } else if (Array.isArray(value)) {
13
20
  if (considerEmptyArrayInvalid) {
@@ -124,6 +131,46 @@ function debounce(func, wait, immediate) {
124
131
  return debouncedFn;
125
132
  }
126
133
 
134
+ // ../shared/utils/isEqual.ts
135
+ function isEqual(a, b, deep = false, firstDeep = true) {
136
+ if (a === b) return true;
137
+ if (a && b && typeof a == "object" && typeof b == "object") {
138
+ if (a.constructor !== b.constructor) return false;
139
+ var length, i, keys;
140
+ if (Array.isArray(a) && Array.isArray(b)) {
141
+ length = a.length;
142
+ if (length != b.length) return false;
143
+ if (firstDeep || !firstDeep && deep) {
144
+ for (i = length; i-- !== 0; ) {
145
+ if (!isEqual(a[i], b[i], deep, false)) {
146
+ return false;
147
+ }
148
+ }
149
+ }
150
+ return true;
151
+ }
152
+ if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
153
+ if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
154
+ keys = Object.keys(a);
155
+ length = keys.length;
156
+ if (length !== Object.keys(b).length) return false;
157
+ for (i = length; i-- !== 0; ) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
158
+ for (i = length; i-- !== 0; ) {
159
+ var key = keys[i];
160
+ if (isObject(a) && isObject(b)) {
161
+ if (firstDeep || !firstDeep && deep) {
162
+ if (!isEqual(a[key], b[key], deep, false)) {
163
+ return false;
164
+ }
165
+ }
166
+ }
167
+ return true;
168
+ }
169
+ return true;
170
+ }
171
+ return a !== a && b !== b;
172
+ }
173
+
127
174
  // src/types/rules/rule.internal.types.ts
128
175
  var InternalRuleType = {
129
176
  Inline: "__inline",
@@ -231,7 +278,7 @@ function defineRuleProcessors(definition, ...params) {
231
278
  return false;
232
279
  }
233
280
  };
234
- const processors = {
281
+ const processors = markRaw({
235
282
  ...defaultProcessors,
236
283
  _validator: definition.validator,
237
284
  _message: definition.message,
@@ -243,7 +290,7 @@ function defineRuleProcessors(definition, ...params) {
243
290
  _async: isAsync,
244
291
  _params: createReactiveParams(params),
245
292
  _brand: RegleRuleSymbol
246
- };
293
+ });
247
294
  return processors;
248
295
  }
249
296
 
@@ -887,6 +934,12 @@ function createReactiveFieldStatus({
887
934
  const $debounce2 = computed(() => {
888
935
  return $localOptions.value.$debounce;
889
936
  });
937
+ const $deepCompare = computed(() => {
938
+ if ($localOptions.value.$deepCompare != null) {
939
+ return $localOptions.value.$deepCompare;
940
+ }
941
+ return false;
942
+ });
890
943
  const $lazy2 = computed(() => {
891
944
  if ($localOptions.value.$lazy != null) {
892
945
  return $localOptions.value.$lazy;
@@ -969,12 +1022,10 @@ function createReactiveFieldStatus({
969
1022
  if ($dirty.value) {
970
1023
  if (initialState.value instanceof Date && state.value instanceof Date) {
971
1024
  return toDate(initialState.value).getDate() !== toDate(state.value).getDate();
972
- }
973
- if (initialState.value == null) {
1025
+ } else if (initialState.value == null) {
974
1026
  return !!state.value;
975
- }
976
- if (Array.isArray(state.value) && Array.isArray(initialState.value)) {
977
- return state.value.length !== initialState.value.length;
1027
+ } else if (Array.isArray(state.value) && Array.isArray(initialState.value)) {
1028
+ return !isEqual(state.value, initialState.value, $localOptions.value.$deepCompare);
978
1029
  }
979
1030
  return initialState.value !== state.value;
980
1031
  }
@@ -1093,6 +1144,7 @@ function createReactiveFieldStatus({
1093
1144
  $invalid,
1094
1145
  $correct,
1095
1146
  $debounce: $debounce2,
1147
+ $deepCompare,
1096
1148
  $lazy: $lazy2,
1097
1149
  $errors,
1098
1150
  $ready,
@@ -1178,7 +1230,7 @@ function createReactiveFieldStatus({
1178
1230
  storage.setDirtyEntry(path, false);
1179
1231
  if (!fromParent) {
1180
1232
  if (options2?.toInitialState) {
1181
- state.value = cloneDeep(initialState);
1233
+ state.value = cloneDeep(initialState.value);
1182
1234
  } else if (options2?.toState) {
1183
1235
  let newInitialState;
1184
1236
  if (typeof options2?.toState === "function") {
@@ -1200,7 +1252,7 @@ function createReactiveFieldStatus({
1200
1252
  rule.$reset();
1201
1253
  });
1202
1254
  }
1203
- if (!scopeState.$lazy.value && !scopeState.$silent.value) {
1255
+ if (!scopeState.$lazy.value && !scopeState.$silent.value && !fromParent) {
1204
1256
  Object.values($rules.value).forEach((rule) => {
1205
1257
  return rule.$parse();
1206
1258
  });
@@ -1382,11 +1434,16 @@ function createReactiveCollectionStatus({
1382
1434
  }
1383
1435
  const $id = ref();
1384
1436
  const $value = ref(state.value);
1437
+ const $localOptions = ref({});
1385
1438
  let $unwatchState;
1439
+ let $unwatchDirty;
1386
1440
  const $selfStatus = ref({});
1387
1441
  const $eachStatus = storage.getCollectionsEntry(path);
1388
1442
  immediateScopeState = immediateScope.run(() => {
1389
1443
  const isPrimitiveArray = computed(() => {
1444
+ if (!state.value?.length) {
1445
+ return false;
1446
+ }
1390
1447
  if (Array.isArray(state.value) && state.value.length) {
1391
1448
  return state.value.every((s) => typeof s !== "object");
1392
1449
  } else if (rulesDef.value.$each && !(rulesDef.value.$each instanceof Function)) {
@@ -1401,6 +1458,9 @@ function createReactiveCollectionStatus({
1401
1458
  createStatus();
1402
1459
  $watch();
1403
1460
  function createStatus() {
1461
+ $localOptions.value = Object.fromEntries(
1462
+ Object.entries(rulesDef.value).filter(([ruleKey]) => ruleKey.startsWith("$"))
1463
+ );
1404
1464
  if (typeof state.value === "object") {
1405
1465
  if (state.value != null && !state.value?.$id && state.value !== null) {
1406
1466
  $id.value = randomId();
@@ -1530,6 +1590,15 @@ function createReactiveCollectionStatus({
1530
1590
  },
1531
1591
  { deep: isVueSuperiorOrEqualTo3dotFive ? 1 : true, flush: "pre" }
1532
1592
  );
1593
+ $unwatchDirty = watch(
1594
+ state,
1595
+ () => {
1596
+ if (scopeState.$autoDirty.value && !scopeState.$silent.value) {
1597
+ $touch(false, true);
1598
+ }
1599
+ },
1600
+ { flush: "pre" }
1601
+ );
1533
1602
  }
1534
1603
  function $watch() {
1535
1604
  define$watchState();
@@ -1538,7 +1607,8 @@ function createReactiveCollectionStatus({
1538
1607
  const $silentValue = computed({
1539
1608
  get: () => state.value,
1540
1609
  set(value) {
1541
- $unwatchState();
1610
+ $unwatchState?.();
1611
+ $unwatchDirty?.();
1542
1612
  state.value = value;
1543
1613
  define$watchState();
1544
1614
  }
@@ -1598,6 +1668,31 @@ function createReactiveCollectionStatus({
1598
1668
  $each: $eachStatus.value.map(($each) => $each.$silentErrors)
1599
1669
  };
1600
1670
  });
1671
+ const $rewardEarly = computed(() => {
1672
+ if ($localOptions.value.$rewardEarly != null) {
1673
+ return $localOptions.value.$rewardEarly;
1674
+ } else if (unref(options.rewardEarly) != null) {
1675
+ return unref(options.rewardEarly);
1676
+ }
1677
+ return false;
1678
+ });
1679
+ const $silent = computed(() => {
1680
+ if ($rewardEarly.value) {
1681
+ return true;
1682
+ } else if ($localOptions.value.$silent != null) {
1683
+ return $localOptions.value.$silent;
1684
+ } else if (unref(options.silent) != null) {
1685
+ return unref(options.silent);
1686
+ } else return false;
1687
+ });
1688
+ const $autoDirty = computed(() => {
1689
+ if ($localOptions.value.$autoDirty != null) {
1690
+ return $localOptions.value.$autoDirty;
1691
+ } else if (unref(options.autoDirty) != null) {
1692
+ return unref(options.autoDirty);
1693
+ }
1694
+ return true;
1695
+ });
1601
1696
  const $name = computed(() => fieldName);
1602
1697
  function processShortcuts() {
1603
1698
  if (shortcuts?.collections) {
@@ -1649,7 +1744,10 @@ function createReactiveCollectionStatus({
1649
1744
  $shortcuts: $shortcuts2,
1650
1745
  $silentValue,
1651
1746
  $edited,
1652
- $anyEdited
1747
+ $anyEdited,
1748
+ $rewardEarly,
1749
+ $silent,
1750
+ $autoDirty
1653
1751
  };
1654
1752
  });
1655
1753
  if (immediateScopeState.isPrimitiveArray.value && rulesDef.value.$each) {
@@ -1659,9 +1757,7 @@ function createReactiveCollectionStatus({
1659
1757
  }
1660
1758
  }
1661
1759
  function $unwatch() {
1662
- if ($unwatchState) {
1663
- $unwatchState();
1664
- }
1760
+ $unwatchState?.();
1665
1761
  if ($selfStatus.value) {
1666
1762
  $selfStatus.value.$unwatch();
1667
1763
  }
@@ -1706,7 +1802,7 @@ function createReactiveCollectionStatus({
1706
1802
  if (options2?.clearExternalErrors) {
1707
1803
  $clearExternalErrors();
1708
1804
  }
1709
- $selfStatus.value.$reset();
1805
+ $selfStatus.value.$reset(options2, fromParent);
1710
1806
  $eachStatus.value.forEach(($each) => {
1711
1807
  $each.$reset(options2, true);
1712
1808
  });
@@ -1911,17 +2007,13 @@ function createReactiveNestedStatus({
1911
2007
  }
1912
2008
  }
1913
2009
  function define$watchState() {
1914
- $unwatchState = watch(
1915
- state,
1916
- () => {
1917
- $unwatch();
1918
- createReactiveFieldsStatus();
1919
- if (scopeState.$autoDirty.value && !scopeState.$silent.value) {
1920
- $touch(true, true);
1921
- }
1922
- },
1923
- { flush: "sync" }
1924
- );
2010
+ $unwatchState = watch(state, () => {
2011
+ $unwatch();
2012
+ createReactiveFieldsStatus();
2013
+ if (scopeState.$autoDirty.value && !scopeState.$silent.value) {
2014
+ $touch(false, true);
2015
+ }
2016
+ });
1925
2017
  }
1926
2018
  function $watch() {
1927
2019
  if (rootRules) {
@@ -1949,6 +2041,17 @@ function createReactiveNestedStatus({
1949
2041
  }
1950
2042
  define$watchState();
1951
2043
  scopeState = scope.run(() => {
2044
+ const $value = computed({
2045
+ get: () => state.value,
2046
+ set(value) {
2047
+ $unwatch();
2048
+ state.value = value;
2049
+ createReactiveFieldsStatus();
2050
+ if (scopeState.$autoDirty.value && !scopeState.$silent.value) {
2051
+ $touch(false, true);
2052
+ }
2053
+ }
2054
+ });
1952
2055
  const $silentValue = computed({
1953
2056
  get: () => state.value,
1954
2057
  set(value) {
@@ -2142,7 +2245,8 @@ function createReactiveNestedStatus({
2142
2245
  $anyEdited,
2143
2246
  $localPending: $localPending2,
2144
2247
  $autoDirty,
2145
- $silent
2248
+ $silent,
2249
+ $value
2146
2250
  };
2147
2251
  });
2148
2252
  }
@@ -2256,7 +2360,6 @@ function createReactiveNestedStatus({
2256
2360
  ...restScopeState,
2257
2361
  ...$shortcuts,
2258
2362
  $fields,
2259
- $value: state,
2260
2363
  $reset,
2261
2364
  $touch,
2262
2365
  $validate,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regle/core",
3
- "version": "1.2.0-beta.7",
3
+ "version": "1.2.0",
4
4
  "description": "Headless form validation library for Vue 3",
5
5
  "peerDependencies": {
6
6
  "pinia": ">=2.2.5",