@regle/core 1.4.0-beta.2 → 1.4.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.
@@ -1,4 +1,4 @@
1
- import * as vue0 from "vue";
1
+ import * as vue1 from "vue";
2
2
  import { MaybeRef, MaybeRefOrGetter, Raw, Ref, UnwrapNestedRefs, UnwrapRef } from "vue";
3
3
 
4
4
  //#region src/types/utils/misc.types.d.ts
@@ -7,6 +7,7 @@ type Maybe<T = any> = T | null | undefined;
7
7
  type MaybeInput<T = any> = T | null | undefined;
8
8
  type MaybeOutput<T = any> = T | undefined;
9
9
  type MaybeReadonly<T> = T | Readonly<T>;
10
+ type NonUndefined<T> = Exclude<T, undefined>;
10
11
  type PromiseReturn<T> = T extends Promise<infer U> ? U : T;
11
12
  type MaybeGetter<T, V = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V>, index: number) => T & TAdd);
12
13
  type Unwrap<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : UnwrapNestedRefs<T>;
@@ -1876,7 +1877,7 @@ type GetMaybeObjectValue<O extends Record<string, any>, K extends string> = K ex
1876
1877
  /**
1877
1878
  * Combine all union values to be able to get even the normally "never" values, act as an intersection type
1878
1879
  */
1879
- type RetrieveUnionUnknownValues<T extends readonly any[], TKeys extends string> = T extends [infer F extends Record<string, any>, ...infer R] ? [{ [K in TKeys as GetMaybeObjectValue<F, K> extends NonNullable<GetMaybeObjectValue<F, K>> ? never : K]?: GetMaybeObjectValue<F, K> } & { [K in TKeys as GetMaybeObjectValue<F, K> extends NonNullable<GetMaybeObjectValue<F, K>> ? K : never]: GetMaybeObjectValue<F, K> }, ...RetrieveUnionUnknownValues<R, TKeys>] : [];
1880
+ type RetrieveUnionUnknownValues<T extends readonly any[], TKeys extends string> = T extends [infer F extends Record<string, any>, ...infer R] ? [{ [K in TKeys as GetMaybeObjectValue<F, K> extends NonUndefined<GetMaybeObjectValue<F, K>> ? never : K]?: GetMaybeObjectValue<F, K> } & { [K in TKeys as GetMaybeObjectValue<F, K> extends NonUndefined<GetMaybeObjectValue<F, K>> ? K : never]: GetMaybeObjectValue<F, K> }, ...RetrieveUnionUnknownValues<R, TKeys>] : [];
1880
1881
  /**
1881
1882
  * Get all possible keys from a union, even the ones present only on one union
1882
1883
  */
@@ -2058,6 +2059,7 @@ interface RegleRuleCore<TValue extends any, TParams extends any[] = [], TAsync e
2058
2059
  active?: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
2059
2060
  tooltip?: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
2060
2061
  type?: string;
2062
+ async?: boolean;
2061
2063
  }
2062
2064
  /**
2063
2065
  * @internal
@@ -2239,10 +2241,17 @@ type RegleRoot<TState extends Record<string, any> = {}, TRules extends ReglePart
2239
2241
  type RegleStatus<TState extends Record<string, any> | undefined = Record<string, any>, TRules extends ReglePartialRuleTree<NonNullable<TState>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = {}> = RegleCommonStatus<TState> & {
2240
2242
  /** Represents all the children of your object. You can access any nested child at any depth to get the relevant data you need for your form. */
2241
2243
  readonly $fields: { readonly [TKey in keyof TState as TRules[TKey] extends NonNullable<TRules[TKey]> ? NonNullable<TRules[TKey]> extends RegleRuleDecl ? IsEmptyObject<TRules[TKey]> extends true ? TKey : never : never : TKey]: IsUnion<NonNullable<TRules[TKey]>> extends true ? ExtendOnlyRealRecord<TState[TKey]> extends true ? MaybeVariantStatus<NonNullable<TState>[TKey], NonNullable<TRules[TKey]>, TShortcuts> : InferRegleStatusType<NonNullable<TRules[TKey]>, NonNullable<TState>, TKey, TShortcuts> : InferRegleStatusType<NonNullable<TRules[TKey]>, NonNullable<TState>, TKey, TShortcuts> } & { readonly [TKey in keyof TState as TRules[TKey] extends NonNullable<TRules[TKey]> ? NonNullable<TRules[TKey]> extends RegleRuleDecl ? IsEmptyObject<TRules[TKey]> extends true ? never : TKey : TKey : never]-?: IsUnion<NonNullable<TRules[TKey]>> extends true ? ExtendOnlyRealRecord<TState[TKey]> extends true ? MaybeVariantStatus<NonNullable<TState>[TKey], NonNullable<TRules[TKey]>, TShortcuts> : InferRegleStatusType<NonNullable<TRules[TKey]>, NonNullable<TState>, TKey, TShortcuts> : InferRegleStatusType<NonNullable<TRules[TKey]>, NonNullable<TState>, TKey, TShortcuts> };
2244
+ /**
2245
+ * Collection of all the issues, collected for all children properties and nested forms.
2246
+ *
2247
+ * Only contains issues from properties where $dirty equals true.
2248
+ */
2249
+ readonly $issues: RegleIssuesTree<TState>;
2242
2250
  /**
2243
2251
  * Collection of all the error messages, collected for all children properties and nested forms.
2244
2252
  *
2245
- * Only contains errors from properties where $dirty equals true. */
2253
+ * Only contains errors from properties where $dirty equals true.
2254
+ * */
2246
2255
  readonly $errors: RegleErrorTree<TState>;
2247
2256
  /** Collection of all the error messages, collected for all children properties. */
2248
2257
  readonly $silentErrors: RegleErrorTree<TState>;
@@ -2259,6 +2268,7 @@ interface $InternalRegleStatus extends $InternalRegleCommonStatus {
2259
2268
  $fields: {
2260
2269
  [x: string]: $InternalRegleStatusType;
2261
2270
  };
2271
+ readonly $issues: Record<string, $InternalRegleIssues>;
2262
2272
  readonly $errors: Record<string, $InternalRegleErrors>;
2263
2273
  readonly $silentErrors: Record<string, $InternalRegleErrors>;
2264
2274
  $extractDirtyFields: (filterNullishValues?: boolean) => Record<string, any>;
@@ -2273,13 +2283,26 @@ type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl
2273
2283
  * @reference {@link InferRegleStatusType}
2274
2284
  */
2275
2285
  type $InternalRegleStatusType = $InternalRegleCollectionStatus | $InternalRegleStatus | $InternalRegleFieldStatus;
2276
- interface RegleFieldIssue {
2277
- $property: string;
2278
- $rule: string;
2279
- $type?: string;
2280
- $message: string;
2281
- [x: string]: unknown;
2282
- }
2286
+ type RegleFieldIssue<TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = EmptyObject> = {
2287
+ readonly $property: string;
2288
+ readonly $type?: string;
2289
+ readonly $message: string;
2290
+ } & (IsEmptyObject<TRules> extends true ? {
2291
+ readonly $rule: string;
2292
+ } : { [K in keyof ComputeFieldRules<any, TRules>]: ComputeFieldRules<any, TRules>[K] extends {
2293
+ $metadata: infer TMetadata;
2294
+ } ? K extends string ? {
2295
+ readonly $rule: K;
2296
+ } & (TMetadata extends boolean ? {
2297
+ readonly $rule: string;
2298
+ } : TMetadata) : {
2299
+ readonly $rule: string;
2300
+ } : {
2301
+ readonly $rule: string;
2302
+ } }[keyof ComputeFieldRules<any, TRules>]);
2303
+ type ComputeFieldRules<TState extends any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>>> = IsEmptyObject<TRules> extends true ? {
2304
+ readonly [x: string]: RegleRuleStatus<TState, any[], any>;
2305
+ } : { readonly [TRuleKey in keyof Omit<TRules, '$each' | keyof FieldRegleBehaviourOptions>]: RegleRuleStatus<TState, TRules[TRuleKey] extends RegleRuleDefinition<any, infer TParams, any> ? TParams : [], TRules[TRuleKey] extends RegleRuleDefinition<any, any, any, infer TMetadata> ? TMetadata : TRules[TRuleKey] extends InlineRuleDeclaration<any, any[], infer TMetadata> ? TMetadata extends Promise<infer P> ? P : TMetadata : boolean> };
2283
2306
  /**
2284
2307
  * @public
2285
2308
  */
@@ -2295,13 +2318,13 @@ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormProperty
2295
2318
  /** Collection of all the error messages, collected for all children properties and nested forms. */
2296
2319
  readonly $silentErrors: string[];
2297
2320
  /**
2298
- * Collect all metadata of validators, Only contains errors from properties where $dirty equals true.
2321
+ * Collect all metadata of validators, Only contains metadata from properties where $dirty equals true.
2299
2322
  */
2300
- readonly $issues: RegleFieldIssue[];
2323
+ readonly $issues: RegleFieldIssue<TRules>[];
2301
2324
  /**
2302
2325
  * Collect all metadata of validators, including the error message.
2303
2326
  */
2304
- readonly $silentIssues: RegleFieldIssue[];
2327
+ readonly $silentIssues: RegleFieldIssue<TRules>[];
2305
2328
  /** Stores external errors of the current field */
2306
2329
  readonly $externalErrors: string[];
2307
2330
  /** Stores active tooltips messages of the current field */
@@ -2313,9 +2336,7 @@ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormProperty
2313
2336
  /** Sets all properties as dirty, triggering all rules. It returns a promise that will either resolve to false or a type safe copy of your form state. Values that had the required rule will be transformed into a non-nullable value (type only). */
2314
2337
  $validate: () => Promise<RegleResult<TState, TRules>>;
2315
2338
  /** This is reactive tree containing all the declared rules of your field. To know more about the rule properties check the rules properties section */
2316
- readonly $rules: IsEmptyObject<TRules> extends true ? {
2317
- readonly [x: string]: RegleRuleStatus<TState, any[], any>;
2318
- } : { readonly [TRuleKey in keyof Omit<TRules, '$each' | keyof FieldRegleBehaviourOptions>]: RegleRuleStatus<TState, TRules[TRuleKey] extends RegleRuleDefinition<any, infer TParams, any> ? TParams : [], TRules[TRuleKey] extends RegleRuleDefinition<any, any, any, infer TMetadata> ? TMetadata : TRules[TRuleKey] extends InlineRuleDeclaration<any, any[], infer TMetadata> ? TMetadata extends Promise<infer P> ? P : TMetadata : boolean> };
2339
+ readonly $rules: ComputeFieldRules<TState, TRules>;
2319
2340
  } & ([TShortcuts['fields']] extends [never] ? {} : { [K in keyof TShortcuts['fields']]: ReturnType<NonNullable<TShortcuts['fields']>[K]> });
2320
2341
  /**
2321
2342
  * @internal
@@ -2368,6 +2389,8 @@ interface RegleCommonStatus<TValue = any> {
2368
2389
  readonly $ready: boolean;
2369
2390
  /** Return the current key name of the field. */
2370
2391
  readonly $name: string;
2392
+ /** Returns the current path of the rule (used internally for tracking) */
2393
+ readonly $path: string;
2371
2394
  /** Id used to track collections items */
2372
2395
  $id?: string;
2373
2396
  /** A reference to the original validated model. It can be used to bind your form with v-model.*/
@@ -2464,6 +2487,12 @@ type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePar
2464
2487
  readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number, TShortcuts>>;
2465
2488
  /** Represents the status of the collection itself. You can have validation rules on the array like minLength, this field represents the isolated status of the collection. */
2466
2489
  readonly $self: RegleFieldStatus<TState, TFieldRule, TShortcuts>;
2490
+ /**
2491
+ * Collection of all the issues, collected for all children properties and nested forms.
2492
+ *
2493
+ * Only contains issues from properties where $dirty equals true.
2494
+ */
2495
+ readonly $issues: RegleCollectionErrors<TState, true>;
2467
2496
  /** Collection of all the error messages, collected for all children properties and nested forms.
2468
2497
  *
2469
2498
  * Only contains errors from properties where $dirty equals true. */
@@ -2479,9 +2508,10 @@ type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePar
2479
2508
  * @internal
2480
2509
  * @reference {@link RegleCollectionStatus}
2481
2510
  */
2482
- interface $InternalRegleCollectionStatus extends Omit<$InternalRegleStatus, '$fields' | '$errors' | '$silentErrors'> {
2511
+ interface $InternalRegleCollectionStatus extends Omit<$InternalRegleStatus, '$fields' | '$issues' | '$errors' | '$silentErrors'> {
2483
2512
  readonly $self: $InternalRegleFieldStatus;
2484
2513
  readonly $each: Array<$InternalRegleStatusType>;
2514
+ readonly $issues: $InternalRegleCollectionIssues;
2485
2515
  readonly $errors: $InternalRegleCollectionErrors;
2486
2516
  readonly $silentErrors: $InternalRegleCollectionErrors;
2487
2517
  readonly $externalErrors?: string[];
@@ -2491,15 +2521,16 @@ interface $InternalRegleCollectionStatus extends Omit<$InternalRegleStatus, '$fi
2491
2521
  //#endregion
2492
2522
  //#region src/types/rules/rule.errors.types.d.ts
2493
2523
  type RegleErrorTree<TState = MaybeRef<Record<string, any> | any[]>> = { readonly [K in keyof JoinDiscriminatedUnions<UnwrapMaybeRef<TState>>]: RegleValidationErrors<JoinDiscriminatedUnions<UnwrapMaybeRef<TState>>[K], false> };
2524
+ type RegleIssuesTree<TState = MaybeRef<Record<string, any> | any[]>> = { readonly [K in keyof JoinDiscriminatedUnions<UnwrapMaybeRef<TState>>]: RegleValidationErrors<JoinDiscriminatedUnions<UnwrapMaybeRef<TState>>[K], false, true> };
2494
2525
  type RegleExternalErrorTree<TState = MaybeRef<Record<string, any> | any[]>> = { readonly [K in keyof JoinDiscriminatedUnions<UnwrapMaybeRef<TState>>]?: RegleValidationErrors<JoinDiscriminatedUnions<UnwrapMaybeRef<TState>>[K], true> };
2495
2526
  type RegleExternalSchemaErrorTree<TState = MaybeRef<Record<string, any> | any[]>> = { readonly [K in keyof JoinDiscriminatedUnions<UnwrapMaybeRef<TState>>]?: RegleValidationErrors<JoinDiscriminatedUnions<UnwrapMaybeRef<TState>>[K], true, true> };
2496
2527
  type RegleValidationErrors<TState extends Record<string, any> | any[] | unknown = never, TExternal extends boolean = false, TIssue extends boolean = false> = NonNullable<TState> extends Array<infer U extends Record<string, any>> ? ExtendOnlyRealRecord<U> extends true ? TExternal extends false ? RegleCollectionErrors<U> : RegleExternalCollectionErrors<U> : TIssue extends true ? RegleFieldIssue[] : string[] : NonNullable<TState> extends Date | File ? TIssue extends true ? RegleFieldIssue[] : string[] : NonNullable<TState> extends Record<string, any> ? TExternal extends false ? RegleErrorTree<TState> : RegleExternalErrorTree<TState> : TIssue extends true ? RegleFieldIssue[] : string[];
2497
2528
  type RegleCollectionErrors<TState extends Record<string, any>, TIssue extends boolean = false> = {
2498
- readonly $self: string[];
2529
+ readonly $self: TIssue extends true ? RegleFieldIssue[] : string[];
2499
2530
  readonly $each: RegleValidationErrors<TState, false, TIssue>[];
2500
2531
  };
2501
2532
  type RegleExternalCollectionErrors<TState extends Record<string, any>, TIssue extends boolean = false> = {
2502
- readonly $self?: string[];
2533
+ readonly $self?: TIssue extends true ? RegleFieldIssue[] : string[];
2503
2534
  readonly $each?: RegleValidationErrors<TState, true, TIssue>[];
2504
2535
  };
2505
2536
  /** @internal */
@@ -2511,6 +2542,14 @@ type $InternalRegleErrorTree = {
2511
2542
  [x: string]: $InternalRegleErrors;
2512
2543
  };
2513
2544
  type $InternalRegleErrors = $InternalRegleCollectionErrors | string[] | $InternalRegleErrorTree;
2545
+ type $InternalRegleIssuesTree = {
2546
+ [x: string]: $InternalRegleIssues;
2547
+ };
2548
+ type $InternalRegleIssues = $InternalRegleCollectionIssues | RegleFieldIssue[] | $InternalRegleIssuesTree;
2549
+ type $InternalRegleCollectionIssues = {
2550
+ readonly $self?: RegleFieldIssue[];
2551
+ readonly $each?: $InternalRegleIssues[];
2552
+ };
2514
2553
  //#endregion
2515
2554
  //#region src/types/rules/compatibility.rules.d.ts
2516
2555
  interface SuperCompatibleRegle {
@@ -2737,13 +2776,13 @@ declare function createScopedUseRegle<TCustomRegle extends useRegleFn<any, any>
2737
2776
  useScopedRegle: TReturnedRegle;
2738
2777
  useCollectScope: useCollectScopeFn<TAsRecord>;
2739
2778
  };
2740
- declare const useCollectScope: <TValue extends Record<string, unknown>[] = Record<string, unknown>[]>(namespace?: vue0.MaybeRefOrGetter<string>) => {
2779
+ declare const useCollectScope: <TValue extends Record<string, unknown>[] = Record<string, unknown>[]>(namespace?: vue1.MaybeRefOrGetter<string>) => {
2741
2780
  r$: MergedScopedRegles<TValue>;
2742
2781
  }, useScopedRegle: useRegleFn<Partial<AllRulesDeclarations>, never, {
2743
2782
  dispose: () => void;
2744
2783
  register: () => void;
2745
2784
  }, {
2746
- namespace?: vue0.MaybeRefOrGetter<string>;
2785
+ namespace?: vue1.MaybeRefOrGetter<string>;
2747
2786
  }>;
2748
2787
  //#endregion
2749
2788
  //#region src/core/createVariant.d.ts
@@ -211,8 +211,8 @@ function getFunctionParametersLength(func) {
211
211
  //#endregion
212
212
  //#region src/core/createRule/defineRuleProcessors.ts
213
213
  function defineRuleProcessors(definition, ...params) {
214
- const { validator, type } = definition;
215
- const isAsync = type === InternalRuleType.Async || validator.constructor.name === "AsyncFunction";
214
+ const { validator, type, async } = definition;
215
+ const isAsync = async || type === InternalRuleType.Async || validator.constructor.name === "AsyncFunction";
216
216
  const defaultProcessors = {
217
217
  validator(value, ...args) {
218
218
  return definition.validator(value, ...unwrapRuleParameters(args.length ? args : params));
@@ -255,6 +255,7 @@ function defineRuleProcessors(definition, ...params) {
255
255
  };
256
256
  const processors = markRaw({
257
257
  ...defaultProcessors,
258
+ type,
258
259
  _validator: definition.validator,
259
260
  _message: definition.message,
260
261
  _active: definition.active,
@@ -305,8 +306,11 @@ function defineRuleProcessors(definition, ...params) {
305
306
  function createRule(definition) {
306
307
  if (typeof definition.validator === "function") {
307
308
  let fakeParams = [];
308
- const staticProcessors = defineRuleProcessors(definition, ...fakeParams);
309
309
  const isAsync = definition.async ?? definition.validator.constructor.name === "AsyncFunction";
310
+ const staticProcessors = defineRuleProcessors({
311
+ ...definition,
312
+ async: isAsync
313
+ }, ...fakeParams);
310
314
  if (getFunctionParametersLength(definition.validator) > 1) {
311
315
  const ruleFactory = function(...params) {
312
316
  return defineRuleProcessors(definition, ...params);
@@ -577,28 +581,41 @@ function extractRulesIssues({ field, silent = false }) {
577
581
  $message: message,
578
582
  $property: field.fieldName,
579
583
  $rule: key,
580
- $type: rule.$type
584
+ $type: rule.$type,
585
+ ...typeof rule.$metadata === "object" ? rule.$metadata : {}
581
586
  };
582
587
  return issue;
583
588
  });
584
- return issues.filter((msg) => !!msg).reduce((acc, issue) => {
585
- if (typeof issue.$message === "string") return acc?.concat([issue]);
586
- else return acc?.concat(issue.$message.map((msg) => ({
589
+ const filteredIssues = issues.filter((msg) => !!msg);
590
+ const ruleIssues = filteredIssues.reduce((acc, issue) => {
591
+ if (typeof issue.$message === "string") acc.push(issue);
592
+ else acc.push(...issue.$message.map((msg) => ({
587
593
  ...issue,
588
594
  $message: msg
589
595
  })));
590
- }, []).concat(field.$error ? field.$externalErrors?.map((error) => ({
596
+ return acc;
597
+ }, []);
598
+ const externalIssues = field.$error && field.$externalErrors ? field.$externalErrors.map((error) => ({
591
599
  $message: error,
592
600
  $property: field.fieldName,
593
601
  $rule: "external",
594
602
  $type: void 0
595
- })) ?? [] : []).concat(field.$error ? field.$schemaErrors ?? [] : []);
603
+ })) : [];
604
+ const schemaIssues = field.$error ? field.$schemaErrors ?? [] : [];
605
+ return [
606
+ ...ruleIssues,
607
+ ...externalIssues,
608
+ ...schemaIssues
609
+ ];
596
610
  }
597
611
  function extractRulesTooltips({ field }) {
598
- return Object.entries(field.$rules ?? {}).map(([_, rule]) => rule.$tooltip).filter((tooltip) => !!tooltip).reduce((acc, value) => {
599
- if (typeof value === "string") return acc?.concat([value]);
600
- else return acc?.concat(value);
601
- }, []);
612
+ const tooltips = [];
613
+ for (const rule of Object.values(field.$rules ?? {})) {
614
+ const tooltip = rule.$tooltip;
615
+ if (tooltip) if (typeof tooltip === "string") tooltips.push(tooltip);
616
+ else tooltips.push(...tooltip);
617
+ }
618
+ return tooltips;
602
619
  }
603
620
  function isCollectionError(errors) {
604
621
  return isObject(errors) && "$each" in errors;
@@ -635,13 +652,13 @@ function iterateErrors(errors, includePath = false, _path) {
635
652
 
636
653
  //#endregion
637
654
  //#region src/core/useRegle/root/createReactiveRuleStatus.ts
638
- function createReactiveRuleStatus({ customMessages, rule, ruleKey, state, path, storage, $debounce, modifiers }) {
655
+ function createReactiveRuleStatus({ customMessages, rule, ruleKey, state, path, cachePath, storage, $debounce, modifiers }) {
639
656
  let scope = effectScope();
640
657
  let scopeState = {};
641
658
  let $unwatchState;
642
659
  const $haveAsync = ref(false);
643
660
  const $maybePending = ref(false);
644
- const { $pending, $valid, $metadata, $validating } = storage.trySetRuleStatusRef(`${path}.${ruleKey}`);
661
+ const { $pending, $valid, $metadata, $validating } = storage.trySetRuleStatusRef(`${cachePath}.${ruleKey}`);
645
662
  function $watch() {
646
663
  scope = effectScope();
647
664
  scopeState = scope.run(() => {
@@ -811,70 +828,71 @@ function createReactiveRuleStatus({ customMessages, rule, ruleKey, state, path,
811
828
 
812
829
  //#endregion
813
830
  //#region src/core/useRegle/root/createReactiveFieldStatus.ts
814
- function createReactiveFieldStatus({ state, rulesDef, customMessages, path, fieldName, storage, options, externalErrors, schemaErrors, schemaMode, onUnwatch, $isArray, initialState, shortcuts, onValidate }) {
831
+ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cachePath, fieldName, storage, options, externalErrors, schemaErrors, schemaMode, onUnwatch, $isArray, initialState, shortcuts, onValidate }) {
815
832
  let scope = effectScope();
816
833
  let scopeState;
817
834
  let fieldScopes = [];
818
835
  let $unwatchState;
819
- let $unwatchValid;
820
836
  let $unwatchDirty;
821
837
  let $unwatchAsync;
822
838
  let $unwatchRuleFieldValues;
823
839
  let $commit = () => {};
824
840
  function createReactiveRulesResult() {
825
841
  const declaredRules = rulesDef.value;
826
- const storeResult = storage.checkRuleDeclEntry(path, declaredRules);
827
- $localOptions.value = Object.fromEntries(Object.entries(declaredRules).filter(([ruleKey]) => ruleKey.startsWith("$")));
842
+ const storeResult = storage.checkRuleDeclEntry(cachePath, declaredRules);
843
+ const options$1 = {};
844
+ for (const key in declaredRules) if (key.startsWith("$")) options$1[key] = declaredRules[key];
845
+ $localOptions.value = options$1;
828
846
  $watch();
829
- $rules.value = Object.fromEntries(Object.entries(rulesDef.value).filter(([ruleKey]) => !ruleKey.startsWith("$")).map(([ruleKey, rule]) => {
830
- if (rule) {
831
- const ruleRef = toRef(() => rule);
832
- return [ruleKey, createReactiveRuleStatus({
833
- modifiers: {
834
- $silent: scopeState.$silent,
835
- $rewardEarly: scopeState.$rewardEarly
836
- },
837
- customMessages,
838
- rule: ruleRef,
839
- ruleKey,
840
- state,
841
- path,
842
- storage,
843
- $debounce: $localOptions.value.$debounce
844
- })];
845
- }
846
- return [];
847
- }).filter((ruleDef) => !!ruleDef.length));
847
+ const rules = rulesDef.value;
848
+ const entries = [];
849
+ for (const ruleKey in rules) {
850
+ if (ruleKey.startsWith("$")) continue;
851
+ const rule = rules[ruleKey];
852
+ if (!rule) continue;
853
+ const ruleRef = toRef(() => rule);
854
+ entries.push([ruleKey, createReactiveRuleStatus({
855
+ modifiers: {
856
+ $silent: scopeState.$silent,
857
+ $rewardEarly: scopeState.$rewardEarly
858
+ },
859
+ customMessages,
860
+ rule: ruleRef,
861
+ ruleKey,
862
+ state,
863
+ path,
864
+ cachePath,
865
+ storage,
866
+ $debounce: $localOptions.value.$debounce
867
+ })]);
868
+ }
869
+ $rules.value = Object.fromEntries(entries);
848
870
  scopeState.processShortcuts();
849
871
  define$commit();
850
872
  if (storeResult?.valid != null) {
851
- scopeState.$dirty.value = storage.getDirtyState(path);
873
+ scopeState.$dirty.value = storage.getDirtyState(cachePath);
852
874
  if (scopeState.$dirty.value && !scopeState.$silent.value || scopeState.$rewardEarly.value && scopeState.$error.value) $commit();
853
875
  }
854
- storage.addRuleDeclEntry(path, declaredRules);
876
+ storage.addRuleDeclEntry(cachePath, declaredRules);
855
877
  }
856
878
  function define$commit() {
857
879
  $commit = scopeState.$debounce.value ? debounce($commitHandler, scopeState.$debounce.value ?? scopeState.$haveAnyAsyncRule ? 100 : 0) : $commitHandler;
858
880
  }
859
881
  function $unwatch() {
860
- if ($rules.value) Object.entries($rules.value).forEach(([_, rule]) => {
861
- rule.$unwatch();
862
- });
882
+ if ($rules.value) for (const rule of Object.values($rules.value)) rule.$unwatch();
863
883
  $unwatchDirty();
864
884
  $unwatchRuleFieldValues?.();
865
- if (scopeState.$dirty.value) storage.setDirtyEntry(path, scopeState.$dirty.value);
885
+ if (scopeState.$dirty.value) storage.setDirtyEntry(cachePath, scopeState.$dirty.value);
866
886
  $unwatchState?.();
867
887
  scope.stop();
868
888
  scope = effectScope();
869
- fieldScopes.forEach((s) => s.stop());
889
+ for (const s of fieldScopes) s.stop();
870
890
  fieldScopes = [];
871
891
  onUnwatch?.();
872
892
  $unwatchAsync?.();
873
893
  }
874
894
  function $watch() {
875
- if ($rules.value) Object.entries($rules.value).forEach(([_, rule]) => {
876
- rule.$watch();
877
- });
895
+ if ($rules.value) for (const rule of Object.values($rules.value)) rule.$watch();
878
896
  scopeState = scope.run(() => {
879
897
  const $dirty = ref(false);
880
898
  const triggerPunishment = ref(false);
@@ -914,9 +932,8 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, fiel
914
932
  return true;
915
933
  });
916
934
  const $validating$1 = computed(() => {
917
- return Object.entries($rules.value).some(([key, ruleResult]) => {
918
- return ruleResult.$validating;
919
- });
935
+ for (const ruleResult of Object.values($rules.value)) if (ruleResult.$validating) return true;
936
+ return false;
920
937
  });
921
938
  const $silentValue = computed({
922
939
  get: () => state.value,
@@ -982,34 +999,28 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, fiel
982
999
  const $invalid = computed(() => {
983
1000
  if (externalErrors?.value?.length || schemaErrors?.value?.length) return true;
984
1001
  else if ($inactive.value) return false;
985
- else if (!$rewardEarly$1.value || $rewardEarly$1.value) {
986
- const result = Object.entries($rules.value).some(([_, ruleResult]) => {
987
- return !(ruleResult.$valid && !ruleResult.$maybePending);
988
- });
989
- return result;
990
- }
1002
+ else if (!$rewardEarly$1.value || $rewardEarly$1.value) return Object.values($rules.value).some((ruleResult) => !ruleResult.$valid || ruleResult.$maybePending);
991
1003
  return false;
992
1004
  });
993
1005
  const $name = computed(() => fieldName);
994
1006
  const $inactive = computed(() => {
995
- if (Object.keys(rulesDef.value).filter(([ruleKey]) => !ruleKey.startsWith("$")).length === 0 && !schemaMode) return true;
996
- return false;
1007
+ return !schemaMode && !Object.keys(rulesDef.value).some((key) => !key.startsWith("$"));
997
1008
  });
998
1009
  const $correct = computed(() => {
999
1010
  if (externalErrors?.value?.length) return false;
1000
1011
  else if ($inactive.value) return false;
1001
1012
  else if ($dirty.value && !isEmpty(state.value) && !$validating$1.value && !$pending.value) if (schemaMode) return !schemaErrors?.value?.length;
1002
1013
  else {
1003
- const atLeastOneActiveRule = Object.values($rules.value).some((ruleResult) => ruleResult.$active);
1004
- if (atLeastOneActiveRule) return Object.values($rules.value).filter((ruleResult) => ruleResult.$active).every((ruleResult) => ruleResult.$valid);
1005
- else return false;
1014
+ const rules = Object.values($rules.value);
1015
+ for (const rule of rules) if (rule.$active) {
1016
+ if (!rule.$valid) return false;
1017
+ }
1018
+ return rules.some((rule) => rule.$active);
1006
1019
  }
1007
1020
  return false;
1008
1021
  });
1009
1022
  const $haveAnyAsyncRule$1 = computed(() => {
1010
- return Object.entries($rules.value).some(([key, ruleResult]) => {
1011
- return ruleResult.$haveAsync;
1012
- });
1023
+ return Object.values($rules.value).some((rule) => rule.$haveAsync);
1013
1024
  });
1014
1025
  function processShortcuts() {
1015
1026
  if (shortcuts?.fields) Object.entries(shortcuts.fields).forEach(([key, value]) => {
@@ -1077,7 +1088,7 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, fiel
1077
1088
  });
1078
1089
  define$watchState();
1079
1090
  $unwatchDirty = watch(scopeState.$dirty, (newDirty) => {
1080
- storage.setDirtyEntry(path, newDirty);
1091
+ storage.setDirtyEntry(cachePath, newDirty);
1081
1092
  Object.values($rules.value).forEach((rule) => {
1082
1093
  rule.$fieldDirty = newDirty;
1083
1094
  });
@@ -1118,7 +1129,7 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, fiel
1118
1129
  function $reset(options$1, fromParent) {
1119
1130
  $clearExternalErrors();
1120
1131
  scopeState.$dirty.value = false;
1121
- storage.setDirtyEntry(path, false);
1132
+ storage.setDirtyEntry(cachePath, false);
1122
1133
  if (!fromParent) if (options$1?.toInitialState) state.value = cloneDeep(initialState.value);
1123
1134
  else if (options$1?.toState) {
1124
1135
  let newInitialState;
@@ -1128,12 +1139,8 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, fiel
1128
1139
  state.value = cloneDeep(newInitialState);
1129
1140
  } else initialState.value = isObject(state.value) ? cloneDeep(state.value) : Array.isArray(state.value) ? [...state.value] : state.value;
1130
1141
  if (options$1?.clearExternalErrors) $clearExternalErrors();
1131
- if (!fromParent) Object.entries($rules.value).forEach(([_, rule]) => {
1132
- rule.$reset();
1133
- });
1134
- if (!scopeState.$lazy.value && !scopeState.$silent.value && !fromParent) Object.values($rules.value).forEach((rule) => {
1135
- return rule.$parse();
1136
- });
1142
+ if (!fromParent) for (const rule of Object.values($rules.value)) rule.$reset();
1143
+ if (!scopeState.$lazy.value && !scopeState.$silent.value && !fromParent) for (const rule of Object.values($rules.value)) rule.$parse();
1137
1144
  }
1138
1145
  function $touch(runCommit = true, withConditions = false) {
1139
1146
  if (!scopeState.$dirty.value) scopeState.$dirty.value = true;
@@ -1164,13 +1171,8 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, fiel
1164
1171
  valid: true,
1165
1172
  data
1166
1173
  };
1167
- const results = await Promise.allSettled(Object.entries($rules.value).map(([key, rule]) => {
1168
- return rule.$parse();
1169
- }));
1170
- const validationResults = results.every((value) => {
1171
- if (value.status === "fulfilled") return value.value === true;
1172
- else return false;
1173
- });
1174
+ const results = await Promise.allSettled(Object.values($rules.value).map((rule) => rule.$parse()));
1175
+ const validationResults = results.every((value) => value.status === "fulfilled" && value.value === true);
1174
1176
  return {
1175
1177
  valid: validationResults,
1176
1178
  data
@@ -1198,6 +1200,7 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, fiel
1198
1200
  $value: state,
1199
1201
  $rules,
1200
1202
  ...$shortcuts,
1203
+ $path: path,
1201
1204
  $reset,
1202
1205
  $touch,
1203
1206
  $validate,
@@ -1210,16 +1213,17 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, fiel
1210
1213
 
1211
1214
  //#endregion
1212
1215
  //#region src/core/useRegle/root/collections/createReactiveCollectionElement.ts
1213
- function createCollectionElement({ $id, path, index, options, storage, stateValue, customMessages, rules, externalErrors, schemaErrors, initialState, shortcuts, fieldName, schemaMode }) {
1216
+ function createCollectionElement({ $id, path, cachePath, index, options, storage, stateValue, customMessages, rules, externalErrors, schemaErrors, initialState, shortcuts, fieldName, schemaMode }) {
1214
1217
  const $fieldId = rules.$key ? rules.$key : randomId();
1215
- let $path = `${path}.${String($fieldId)}`;
1218
+ let $cachePath = `${path}.${String($fieldId)}`;
1219
+ let $path = `${path}.${index}`;
1216
1220
  if (typeof stateValue.value === "object" && stateValue.value != null) if (!stateValue.value.$id) Object.defineProperties(stateValue.value, { $id: {
1217
1221
  value: $fieldId,
1218
1222
  enumerable: false,
1219
1223
  configurable: false,
1220
1224
  writable: false
1221
1225
  } });
1222
- else $path = `${path}.${stateValue.value.$id}`;
1226
+ else $cachePath = `${path}.${stateValue.value.$id}`;
1223
1227
  const $externalErrors = toRef(externalErrors?.value ?? [], index);
1224
1228
  const $schemaErrors = computed(() => schemaErrors?.value?.[index]);
1225
1229
  const $status = createReactiveChildrenStatus({
@@ -1227,6 +1231,7 @@ function createCollectionElement({ $id, path, index, options, storage, stateValu
1227
1231
  rulesDef: toRef(() => rules),
1228
1232
  customMessages,
1229
1233
  path: $path,
1234
+ cachePath: $cachePath,
1230
1235
  storage,
1231
1236
  options,
1232
1237
  externalErrors: $externalErrors,
@@ -1294,6 +1299,7 @@ function createReactiveCollectionStatus({ state, rulesDef, customMessages, path,
1294
1299
  const element = createCollectionElement({
1295
1300
  $id: $id.value,
1296
1301
  path,
1302
+ cachePath: path,
1297
1303
  customMessages,
1298
1304
  rules: unwrapped ?? {},
1299
1305
  stateValue: toRef(() => value),
@@ -1316,6 +1322,7 @@ function createReactiveCollectionStatus({ state, rulesDef, customMessages, path,
1316
1322
  rulesDef,
1317
1323
  customMessages,
1318
1324
  path,
1325
+ cachePath: path,
1319
1326
  storage,
1320
1327
  options,
1321
1328
  externalErrors: toRef(externalErrors?.value ?? {}, `$self`),
@@ -1347,6 +1354,7 @@ function createReactiveCollectionStatus({ state, rulesDef, customMessages, path,
1347
1354
  const element = createCollectionElement({
1348
1355
  $id: $id.value,
1349
1356
  path,
1357
+ cachePath: path,
1350
1358
  customMessages,
1351
1359
  rules: unwrapped ?? {},
1352
1360
  stateValue: currentValue,
@@ -1437,6 +1445,12 @@ function createReactiveCollectionStatus({ state, rulesDef, customMessages, path,
1437
1445
  return statusOrField.$anyEdited;
1438
1446
  });
1439
1447
  });
1448
+ const $issues = computed(() => {
1449
+ return {
1450
+ $self: $selfStatus.value.$issues,
1451
+ $each: $eachStatus.value.map(($each) => $each.$issues)
1452
+ };
1453
+ });
1440
1454
  const $errors = computed(() => {
1441
1455
  return {
1442
1456
  $self: $selfStatus.value.$errors,
@@ -1475,20 +1489,22 @@ function createReactiveCollectionStatus({ state, rulesDef, customMessages, path,
1475
1489
  result.value = value(reactive({
1476
1490
  $dirty,
1477
1491
  $error,
1492
+ $path: path,
1478
1493
  $silentValue,
1479
1494
  $pending,
1480
1495
  $invalid,
1481
1496
  $correct,
1482
1497
  $errors,
1483
- $ready,
1484
1498
  $silentErrors,
1499
+ $ready,
1485
1500
  $anyDirty,
1486
1501
  $name,
1487
1502
  $each: $eachStatus,
1488
1503
  $self: $selfStatus,
1489
1504
  $value: state,
1490
1505
  $edited,
1491
- $anyEdited
1506
+ $anyEdited,
1507
+ $issues
1492
1508
  }));
1493
1509
  });
1494
1510
  return result;
@@ -1515,7 +1531,8 @@ function createReactiveCollectionStatus({ state, rulesDef, customMessages, path,
1515
1531
  $anyEdited,
1516
1532
  $rewardEarly,
1517
1533
  $silent,
1518
- $autoDirty
1534
+ $autoDirty,
1535
+ $issues
1519
1536
  };
1520
1537
  });
1521
1538
  if (immediateScopeState.isPrimitiveArray.value && rulesDef.value.$each) console.warn(`${path} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`);
@@ -1599,6 +1616,7 @@ function createReactiveCollectionStatus({ state, rulesDef, customMessages, path,
1599
1616
  $self: $selfStatus,
1600
1617
  ...restScopeState,
1601
1618
  ...$shortcuts,
1619
+ $path: path,
1602
1620
  $each: $eachStatus,
1603
1621
  $value: state,
1604
1622
  $validate,
@@ -1613,7 +1631,7 @@ function createReactiveCollectionStatus({ state, rulesDef, customMessages, path,
1613
1631
 
1614
1632
  //#endregion
1615
1633
  //#region src/core/useRegle/root/createReactiveNestedStatus.ts
1616
- function createReactiveNestedStatus({ rulesDef, state, path = "", rootRules, externalErrors, schemaErrors, rootSchemaErrors, validationGroups, initialState, fieldName,...commonArgs }) {
1634
+ function createReactiveNestedStatus({ rulesDef, state, path = "", cachePath, rootRules, externalErrors, schemaErrors, rootSchemaErrors, validationGroups, initialState, fieldName,...commonArgs }) {
1617
1635
  let scope = effectScope();
1618
1636
  let scopeState;
1619
1637
  let nestedScopes = [];
@@ -1624,35 +1642,38 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", rootRules, ext
1624
1642
  let $unwatchGroups = null;
1625
1643
  async function createReactiveFieldsStatus(watchSources = true) {
1626
1644
  const mapOfRulesDef = Object.entries(rulesDef.value);
1627
- const scopedRulesStatus = Object.fromEntries(mapOfRulesDef.filter(([_, rule]) => !!rule).map(([statePropKey, statePropRules]) => {
1628
- if (statePropRules) {
1629
- const stateRef = toRef(state.value ?? {}, statePropKey);
1630
- const statePropRulesRef = toRef(() => statePropRules);
1631
- const $externalErrors = toRef(externalErrors?.value ?? {}, statePropKey);
1632
- const $schemaErrors = computed(() => schemaErrors?.value?.[statePropKey]);
1633
- const initialStateRef = toRef(initialState?.value ?? {}, statePropKey);
1634
- return [statePropKey, createReactiveChildrenStatus({
1635
- state: stateRef,
1636
- rulesDef: statePropRulesRef,
1637
- path: path ? `${path}.${statePropKey}` : statePropKey,
1638
- externalErrors: $externalErrors,
1639
- schemaErrors: $schemaErrors,
1640
- initialState: initialStateRef,
1641
- fieldName: statePropKey,
1642
- ...commonArgs
1643
- })];
1644
- }
1645
- return [];
1646
- }));
1645
+ const scopedRulesStatus = Object.fromEntries(mapOfRulesDef.reduce((acc, [statePropKey, statePropRules]) => {
1646
+ if (!statePropRules) return acc;
1647
+ const stateRef = toRef(state.value ?? {}, statePropKey);
1648
+ const statePropRulesRef = toRef(() => statePropRules);
1649
+ const $externalErrors = toRef(externalErrors?.value ?? {}, statePropKey);
1650
+ const $schemaErrors = computed(() => schemaErrors?.value?.[statePropKey]);
1651
+ const initialStateRef = toRef(initialState?.value ?? {}, statePropKey);
1652
+ acc.push([statePropKey, createReactiveChildrenStatus({
1653
+ state: stateRef,
1654
+ rulesDef: statePropRulesRef,
1655
+ path: path ? `${path}.${statePropKey}` : statePropKey,
1656
+ cachePath: cachePath ? `${cachePath}.${statePropKey}` : statePropKey,
1657
+ externalErrors: $externalErrors,
1658
+ schemaErrors: $schemaErrors,
1659
+ initialState: initialStateRef,
1660
+ fieldName: statePropKey,
1661
+ ...commonArgs
1662
+ })]);
1663
+ return acc;
1664
+ }, []));
1647
1665
  const externalRulesStatus = Object.fromEntries(Object.entries(unref(externalErrors) ?? {}).filter(([key, errors]) => !(key in rulesDef.value) && !!errors).map(([key]) => {
1648
1666
  const stateRef = toRef(state.value ?? {}, key);
1649
1667
  const $externalErrors = toRef(externalErrors?.value ?? {}, key);
1650
1668
  const $schemaErrors = computed(() => schemaErrors?.value?.[key]);
1651
1669
  const initialStateRef = toRef(initialState?.value ?? {}, key);
1670
+ const computedPath = path ? `${path}.${key}` : key;
1671
+ const computedCachePath = cachePath ? `${cachePath}.${key}` : key;
1652
1672
  return [key, createReactiveChildrenStatus({
1653
1673
  state: stateRef,
1654
1674
  rulesDef: computed(() => ({})),
1655
- path: path ? `${path}.${key}` : key,
1675
+ path: computedPath,
1676
+ cachePath: computedCachePath,
1656
1677
  externalErrors: $externalErrors,
1657
1678
  schemaErrors: $schemaErrors,
1658
1679
  initialState: initialStateRef,
@@ -1661,14 +1682,18 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", rootRules, ext
1661
1682
  })];
1662
1683
  }));
1663
1684
  const schemasRulesStatus = Object.fromEntries(Object.entries(unref(schemaErrors) ?? {}).map(([key]) => {
1685
+ const computedPath = path ? `${path}.${key}` : key;
1686
+ const computedCachePath = cachePath ? `${cachePath}.${key}` : key;
1664
1687
  const stateRef = toRef(state.value ?? {}, key);
1665
1688
  const $externalErrors = toRef(externalErrors?.value ?? {}, key);
1666
1689
  const $schemaErrors = computed(() => schemaErrors?.value?.[key]);
1667
1690
  const initialStateRef = toRef(initialState?.value ?? {}, key);
1691
+ const emptyRulesDef = computed(() => ({}));
1668
1692
  return [key, createReactiveChildrenStatus({
1669
1693
  state: stateRef,
1670
- rulesDef: computed(() => ({})),
1671
- path: path ? `${path}.${key}` : key,
1694
+ rulesDef: emptyRulesDef,
1695
+ path: computedPath,
1696
+ cachePath: computedCachePath,
1672
1697
  externalErrors: $externalErrors,
1673
1698
  schemaErrors: $schemaErrors,
1674
1699
  initialState: initialStateRef,
@@ -1685,6 +1710,7 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", rootRules, ext
1685
1710
  state: stateRef,
1686
1711
  rulesDef: computed(() => ({})),
1687
1712
  path: path ? `${path}.${key}` : key,
1713
+ cachePath: cachePath ? `${cachePath}.${key}` : key,
1688
1714
  externalErrors: $externalErrors,
1689
1715
  schemaErrors: $schemaErrors,
1690
1716
  initialState: initialStateRef,
@@ -1757,39 +1783,44 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", rootRules, ext
1757
1783
  }
1758
1784
  });
1759
1785
  const $dirty = computed(() => {
1760
- return !!Object.entries($fields.value).length && Object.entries($fields.value).every(([_, statusOrField]) => {
1761
- return statusOrField?.$dirty;
1762
- });
1786
+ const fields = $fields.value;
1787
+ const fieldKeys = Object.keys(fields);
1788
+ if (!fieldKeys.length) return false;
1789
+ for (const key of fieldKeys) if (!fields[key]?.$dirty) return false;
1790
+ return true;
1763
1791
  });
1764
1792
  const $anyDirty = computed(() => {
1765
- return Object.entries($fields.value).some(([_, statusOrField]) => {
1766
- return statusOrField?.$anyDirty;
1767
- });
1793
+ const fields = $fields.value;
1794
+ for (const key in fields) if (fields[key]?.$anyDirty) return true;
1795
+ return false;
1768
1796
  });
1769
1797
  const $invalid = computed(() => {
1770
- return !!Object.entries($fields.value).length && Object.entries($fields.value).some(([_, statusOrField]) => {
1771
- return statusOrField?.$invalid;
1772
- });
1798
+ const fields = $fields.value;
1799
+ const entries = Object.entries(fields);
1800
+ if (!entries.length) return false;
1801
+ for (const [_, statusOrField] of entries) if (statusOrField?.$invalid) return true;
1802
+ return false;
1773
1803
  });
1774
1804
  const $correct = computed(() => {
1775
- const fields = Object.entries($fields.value).filter(([_, statusOrField]) => {
1776
- if (isFieldStatus(statusOrField)) return !statusOrField.$inactive;
1777
- return true;
1778
- });
1779
- if (fields.length) return fields.every(([_, statusOrField]) => {
1780
- if (commonArgs.schemaMode) return statusOrField.$correct;
1781
- else if (isFieldStatus(statusOrField)) {
1782
- if ("required" in statusOrField.$rules && statusOrField.$rules.required.$active) return statusOrField?.$correct;
1783
- return !statusOrField.$invalid && !statusOrField.$pending;
1784
- }
1785
- return statusOrField?.$correct;
1786
- });
1805
+ const fields = Object.entries($fields.value).reduce((acc, [key, statusOrField]) => {
1806
+ if (!isFieldStatus(statusOrField) || !statusOrField.$inactive) acc.push([key, statusOrField]);
1807
+ return acc;
1808
+ }, []);
1809
+ if (fields.length) {
1810
+ if (commonArgs.schemaMode) return fields.every(([_, statusOrField]) => statusOrField.$correct);
1811
+ return fields.every(([_, statusOrField]) => {
1812
+ if (!isFieldStatus(statusOrField)) return statusOrField?.$correct;
1813
+ const hasRequiredRule = "required" in statusOrField.$rules && statusOrField.$rules.required.$active;
1814
+ return hasRequiredRule ? statusOrField.$correct : !statusOrField.$invalid && !statusOrField.$pending;
1815
+ });
1816
+ }
1787
1817
  return false;
1788
1818
  });
1789
1819
  const $error = computed(() => {
1790
- return !!Object.entries($fields.value).length && Object.entries($fields.value).some(([_, statusOrField]) => {
1791
- return statusOrField?.$error;
1792
- });
1820
+ const fields = $fields.value;
1821
+ if (!Object.keys(fields).length) return false;
1822
+ for (const key in fields) if (fields[key]?.$error) return true;
1823
+ return false;
1793
1824
  });
1794
1825
  const $rewardEarly = computed(() => {
1795
1826
  if (unref(commonArgs.options.rewardEarly) != null) return unref(commonArgs.options.rewardEarly);
@@ -1810,29 +1841,34 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", rootRules, ext
1810
1841
  });
1811
1842
  const $localPending$1 = ref(false);
1812
1843
  const $pending = computed(() => {
1813
- return $localPending$1.value || Object.entries($fields.value).some(([key, statusOrField]) => {
1814
- return statusOrField?.$pending;
1815
- });
1844
+ if ($localPending$1.value) return true;
1845
+ const fields = $fields.value;
1846
+ for (const key in fields) if (fields[key]?.$pending) return true;
1847
+ return false;
1848
+ });
1849
+ const $issues = computed(() => {
1850
+ const result = {};
1851
+ for (const key in $fields.value) result[key] = $fields.value[key]?.$issues;
1852
+ return result;
1816
1853
  });
1817
1854
  const $errors = computed(() => {
1818
- return Object.fromEntries(Object.entries($fields.value).map(([key, statusOrField]) => {
1819
- return [key, statusOrField?.$errors];
1820
- }));
1855
+ const result = {};
1856
+ for (const key in $fields.value) result[key] = $fields.value[key]?.$errors;
1857
+ return result;
1821
1858
  });
1822
1859
  const $silentErrors = computed(() => {
1823
- return Object.fromEntries(Object.entries($fields.value).map(([key, statusOrField]) => {
1824
- return [key, statusOrField?.$silentErrors];
1825
- }));
1860
+ const result = {};
1861
+ for (const key in $fields.value) result[key] = $fields.value[key]?.$silentErrors;
1862
+ return result;
1826
1863
  });
1827
1864
  const $edited = computed(() => {
1828
- return !!Object.entries($fields.value).length && Object.entries($fields.value).every(([_, statusOrField]) => {
1829
- return statusOrField?.$edited;
1830
- });
1865
+ if (!Object.keys($fields.value).length) return false;
1866
+ for (const key in $fields.value) if (!$fields.value[key]?.$edited) return false;
1867
+ return true;
1831
1868
  });
1832
1869
  const $anyEdited = computed(() => {
1833
- return Object.entries($fields.value).some(([_, statusOrField]) => {
1834
- return statusOrField?.$anyEdited;
1835
- });
1870
+ for (const key in $fields.value) if ($fields.value[key]?.$anyEdited) return true;
1871
+ return false;
1836
1872
  });
1837
1873
  const $name = computed(() => fieldName);
1838
1874
  function processShortcuts() {
@@ -1843,6 +1879,7 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", rootRules, ext
1843
1879
  watchEffect(() => {
1844
1880
  result.value = value(reactive({
1845
1881
  $dirty,
1882
+ $path: path,
1846
1883
  $value: state,
1847
1884
  $silentValue,
1848
1885
  $error,
@@ -1856,7 +1893,8 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", rootRules, ext
1856
1893
  $errors,
1857
1894
  $fields,
1858
1895
  $edited,
1859
- $anyEdited
1896
+ $anyEdited,
1897
+ $issues
1860
1898
  }));
1861
1899
  });
1862
1900
  return result;
@@ -1892,6 +1930,7 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", rootRules, ext
1892
1930
  $correct,
1893
1931
  $error,
1894
1932
  $pending,
1933
+ $issues,
1895
1934
  $errors,
1896
1935
  $silentErrors,
1897
1936
  $ready,
@@ -1916,14 +1955,11 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", rootRules, ext
1916
1955
  $unwatchSchemaErrors?.();
1917
1956
  nestedScopes = [];
1918
1957
  scopeState = {};
1919
- if ($fields.value) Object.entries($fields.value).forEach(([_, field]) => {
1920
- field.$unwatch();
1921
- });
1958
+ if ($fields.value) for (const field of Object.values($fields.value)) field.$unwatch();
1922
1959
  }
1923
1960
  function $clearExternalErrors() {
1924
- Object.entries($fields.value).forEach(([_, field]) => {
1925
- field.$clearExternalErrors();
1926
- });
1961
+ const fields = $fields.value;
1962
+ for (const field of Object.values(fields)) field.$clearExternalErrors();
1927
1963
  }
1928
1964
  function $reset(options, fromParent) {
1929
1965
  $unwatchExternalErrors?.();
@@ -1936,17 +1972,13 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", rootRules, ext
1936
1972
  initialState.value = cloneDeep(newInitialState);
1937
1973
  state.value = cloneDeep(newInitialState);
1938
1974
  } else initialState.value = cloneDeep(state.value);
1939
- Object.values($fields.value).forEach((statusOrField) => {
1940
- statusOrField.$reset(options, true);
1941
- });
1975
+ for (const field of Object.values($fields.value)) field.$reset(options, true);
1942
1976
  if (options?.clearExternalErrors) $clearExternalErrors();
1943
1977
  define$WatchExternalErrors();
1944
1978
  if (!fromParent) createReactiveFieldsStatus();
1945
1979
  }
1946
1980
  function $touch(runCommit = true, withConditions = false) {
1947
- Object.values($fields.value).forEach((statusOrField) => {
1948
- statusOrField.$touch(runCommit, withConditions);
1949
- });
1981
+ for (const field of Object.values($fields.value)) field.$touch(runCommit, withConditions);
1950
1982
  }
1951
1983
  function filterNullishFields(fields) {
1952
1984
  return fields.filter(([key, value]) => {
@@ -1974,13 +2006,8 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", rootRules, ext
1974
2006
  };
1975
2007
  else {
1976
2008
  const data = state.value;
1977
- const results = await Promise.allSettled(Object.values($fields.value).map((statusOrField) => {
1978
- return statusOrField.$validate();
1979
- }));
1980
- const validationResults = results.every((value) => {
1981
- if (value.status === "fulfilled") return value.value.valid === true;
1982
- else return false;
1983
- });
2009
+ const results = await Promise.allSettled(Object.values($fields.value).map((statusOrField) => statusOrField.$validate()));
2010
+ const validationResults = results.every((value) => value.status === "fulfilled" && value?.value.valid === true);
1984
2011
  return {
1985
2012
  valid: validationResults,
1986
2013
  data
@@ -1999,6 +2026,7 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", rootRules, ext
1999
2026
  return reactive({
2000
2027
  ...restScopeState,
2001
2028
  ...$shortcuts,
2029
+ $path: path,
2002
2030
  $fields,
2003
2031
  $reset,
2004
2032
  $touch,
@@ -2065,6 +2093,7 @@ function useRootStorage({ initialState, options, scopeRules, state, customRules,
2065
2093
  shortcuts,
2066
2094
  fieldName: "root",
2067
2095
  path: "",
2096
+ cachePath: "",
2068
2097
  schemaErrors,
2069
2098
  rootSchemaErrors: schemaErrors,
2070
2099
  schemaMode,
@@ -2081,6 +2110,7 @@ function useRootStorage({ initialState, options, scopeRules, state, customRules,
2081
2110
  shortcuts,
2082
2111
  fieldName: "root",
2083
2112
  path: "",
2113
+ cachePath: "",
2084
2114
  schemaMode,
2085
2115
  schemaErrors,
2086
2116
  onValidate
@@ -1 +1 @@
1
- import{computed as e,effectScope as t,getCurrentInstance as n,getCurrentScope as r,isRef as i,markRaw as a,nextTick as o,onMounted as s,onScopeDispose as c,reactive as l,ref as u,shallowRef as d,toRef as f,toValue as p,triggerRef as m,unref as h,version as g,watch as _,watchEffect as v}from"vue";function y(e){return e?.constructor.name==`File`||e?.constructor.name==`FileList`}function b(e,t=!0){return e==null?!0:e instanceof Date?isNaN(e.getTime()):y(e)?e.size<=0:Array.isArray(e)?t?e.length===0:!1:typeof e==`object`&&e?Object.keys(e).length===0:!String(e).length}const x=Symbol(`regle-rule`);function S(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 C(e){let t=e,n={}.toString.call(e).slice(8,-1);if(n==`Set`&&(t=new Set([...e].map(e=>C(e)))),n==`Map`&&(t=new Map([...e].map(e=>[C(e[0]),C(e[1])]))),n==`Date`&&(t=new Date(e.getTime())),n==`RegExp`&&(t=RegExp(e.source,S(e))),n==`Array`||n==`Object`)for(let n in t=Array.isArray(e)?[]:{},e)t[n]=C(e[n]);return t}function w(e){return e&&(e instanceof Date||e.constructor.name==`File`||e.constructor.name==`FileList`)?!1:typeof e==`object`&&!!e&&!Array.isArray(e)}function T(e,...t){for(var n=[].slice.call(arguments),r,i=n.length;r=n[i-1],i--;)if(!r||typeof r!=`object`&&typeof r!=`function`)throw Error(`expected object, got `+r);for(var a=n[0],o=n.slice(1),s=o.length,i=0;i<s;i++){var c=o[i];for(var l in c)a[l]=c[l]}return a}function E(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]`||typeof e==`string`||t===`[object String]`?new Date(e):new Date(NaN)}function D(e,t,n){let r,i=(...i)=>new Promise(a=>{clearTimeout(r),r=setTimeout(()=>{r=void 0,n||Promise.resolve(e.apply(this,[...i])).then(a)},t),n&&!r&&Promise.resolve(e.apply(this,[...i])).then(a)});return i.cancel=()=>{clearTimeout(r),r=void 0},i}function O(e,t,n=!1,r=!0){if(e===t)return!0;if(e&&t&&typeof e==`object`&&typeof t==`object`){if(e.constructor!==t.constructor)return!1;var i,a,o;if(Array.isArray(e)&&Array.isArray(t)){if(i=e.length,i!=t.length)return!1;if(r||!r&&n){for(a=i;a--!==0;)if(!O(e[a],t[a],n,!1))return!1}return!0}if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if(o=Object.keys(e),i=o.length,i!==Object.keys(t).length)return!1;for(a=i;a--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[a]))return!1;for(a=i;a--!==0;){var s=o[a];return!(w(e)&&w(t)&&(r||!r&&n)&&!O(e[s],t[s],n,!1))}return!0}return e!==e&&t!==t}const k={Inline:`__inline`,Async:`__async`};function A(e,t){return e.some(e=>e[t])}function j(e,t){return e.reduce((e,n)=>{let r=n[t]||[];return e.concat(r)},[])}function M(e){try{return e.map(e=>p(e))}catch{return[]}}function N(t){return t.map(t=>t instanceof Function?e(t):i(t)?t:f(()=>t))}function P(e){let t=e.toString(),n=t.replace(/\/\/.*$/gm,``).replace(/\/\*[\s\S]*?\*\//g,``),r=n.match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);if(!r)return 0;let i=r[0]||r[1]||r[2]||r[3]||r[4]||``,a=i.split(`,`).map(e=>e.trim()).filter(e=>e.length>0);return a.length}function F(e,...t){let{validator:n,type:r}=e,i=r===k.Async||n.constructor.name===`AsyncFunction`,o={validator(n,...r){return e.validator(n,...M(r.length?r:t))},message(n){return typeof e.message==`function`?e.message({...n,$params:M(n?.$params?.length?n.$params:t)}):e.message},active(n){return typeof e.active==`function`?e.active({...n,$params:M(n?.$params?.length?n.$params:t)}):e.active??!0},tooltip(n){return typeof e.tooltip==`function`?e.tooltip({...n,$params:M(n?.$params?.length?n.$params:t)}):e.tooltip??[]},exec(n){let r=e.validator(n,...M(t)),i;return r instanceof Promise?r.then(e=>(i=e,typeof i==`object`&&`$valid`in i?i.$valid:typeof i==`boolean`?i:!1)):(i=r,typeof i==`object`&&`$valid`in i?i.$valid:typeof i==`boolean`?i:!1)}},s=a({...o,_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:i,_params:N(t),_brand:x});return s}function I(e){if(typeof e.validator==`function`){let t=[],n=F(e,...t),r=e.async??e.validator.constructor.name===`AsyncFunction`;if(P(e.validator)>1){let t=function(...t){return F(e,...t)};return t.validator=n.validator,t.message=n.message,t.active=n.active,t.tooltip=n.tooltip,t.type=n.type,t.exec=n.exec,t._validator=n.validator,t._message=n.message,t._active=n.active,t._tooltip=n.tooltip,t._type=e.type,t._message_pacthed=!1,t._tooltip_pacthed=!1,t._async=r,t}else return n}throw Error(`[createRule] validator must be a function`)}function L(){let e=d(new Map),t=d(new Map),n=d(new Map),i=d(new Map),a=d(new Map),o=d(new Map);function s(e){let n=t.value.get(e);if(n)return n;{let n=u({});return t.value.set(e,n),n}}function l(e){let t=n.value.get(e);if(t)return t;{let t=u([]);return n.value.set(e,t),t}}function f(e,t,n){o.value.set(`${e}-${t}`,n)}function p(e,t){return o.value.get(`${e}-${t}`)}function m(e,t){e&&t!=null&&o.value.delete(`${e}-${t}`)}function h(e,t){i.value.set(e,t)}function g(e){return i.value.get(e)??!1}function _(t,n){e.value.set(t,n)}function v(t,n){let r=e.value.get(t);if(!r)return;let i=r,a=y(n,i);return a?{valid:!0}:{valid:!1}}function y(e,t){let n=Object.keys(t),r=Object.keys(e);if(r.length!==n.length)return!1;let i=r.every(e=>n.includes(e));return i?r.every(n=>{let r=e[n],i=t[n];return!i||!r||typeof r==`function`||typeof i==`function`||typeof r==`number`||typeof r==`boolean`?!1:r._params?r._params?.every((e,t)=>{if(typeof i==`number`||typeof i==`boolean`)return!0;{let e=M(i._params),n=M(r._params);return e?.[t]===n?.[t]}}):!0}):!1}function b(e){let t=a.value.get(e);if(t)return t;{let t=u(!1),n=u(!0),r=u({}),i=u(!1);return a.value.set(e,{$pending:t,$valid:n,$metadata:r,$validating:i}),{$pending:t,$valid:n,$metadata:r,$validating:i}}}return r()&&c(()=>{e.value.clear(),t.value.clear(),n.value.clear(),i.value.clear(),a.value.clear(),o.value.clear()}),{addRuleDeclEntry:_,setDirtyEntry:h,checkRuleDeclEntry:v,getDirtyState:g,trySetRuleStatusRef:b,getFieldsEntry:s,getCollectionsEntry:l,getArrayStatus:p,addArrayStatus:f,deleteArrayStatus:m,arrayStatusStorage:o}}function R(e){return w(e.value)}function z(e,n,r){let i=t(),a;return a=e instanceof Function?i.run(()=>e(n,r??0)):e,{scope:i,unwrapped:a}}const B={LessThan:-1,EqualTo:0,GreaterThan:1};function V(e,t){let n=String(e).split(`.`),r=String(t).split(`.`);for(let e=0;e<Math.min(n.length,r.length);e++){let t=Number(n[e]),i=Number(r[e]);if(t>i)return B.GreaterThan;if(i>t)return B.LessThan;if(!isNaN(t)&&isNaN(i))return B.GreaterThan;if(isNaN(t)&&!isNaN(i))return B.LessThan}return B.EqualTo}const H=V(g,`3.5.0`)!==-1;function U(){return Math.floor(Math.random()*Date.now()).toString()}function W(){if(typeof window>`u`)return U();{let e=window.crypto.getRandomValues(new Uint32Array(1))[0];return e.toString(10)}}function G(e){return r()?(c(e),!0):!1}function K(e){let n=!1,r,i=t(!0);return(...t)=>(n||(r=i.run(()=>e(...t)),n=!0),r)}function q(e,t){return R(e)||w(t.value)&&!b(t.value)&&!Object.entries(t.value).some(([e,t])=>X(t)||typeof t==`function`)}function J(e,t,n=!1){return!!e.value&&w(e.value)&&`$each`in e.value||n&&Array.isArray(t.value)&&t.value.some(w)||Array.isArray(t.value)&&t.value.some(w)}function Y(e){return!!e.value&&w(e.value)}function X(e){return w(e)&&`_validator`in e}function Z(e){return typeof e.value==`function`?`_validator`in e.value:!0}function ee(e){return w(e)&&`$fields`in e}function te(e){return!!e&&`$rules`in e}function ne({field:e,silent:t=!1}){let n=Object.entries(e.$rules??{}).map(([n,r])=>{let i=``;if(t&&!r.$valid)i=r.$message;else if(!r.$valid&&e.$error&&!r.$validating)i=r.$message;else return null;let a={$message:i,$property:e.fieldName,$rule:n,$type:r.$type};return a});return n.filter(e=>!!e).reduce((e,t)=>typeof t.$message==`string`?e?.concat([t]):e?.concat(t.$message.map(e=>({...t,$message:e}))),[]).concat(e.$error?e.$externalErrors?.map(t=>({$message:t,$property:e.fieldName,$rule:`external`,$type:void 0}))??[]:[]).concat(e.$error?e.$schemaErrors??[]:[])}function re({field:e}){return Object.entries(e.$rules??{}).map(([e,t])=>t.$tooltip).filter(e=>!!e).reduce((e,t)=>typeof t==`string`?e?.concat([t]):e?.concat(t),[])}function ie(e){return w(e)&&`$each`in e}function ae(e,t){let{includePath:n=!1}=t??{};if(Array.isArray(e)&&e.every(e=>!w(e)))return e;if(ie(e)){let t=n?e.$self?.map(e=>({error:e,path:``}))??[]:e.$self??[],r=e.$each?.map(e=>Q(e,n))??[];return t?.concat(r.flat())}else return Object.entries(e).map(([e,t])=>Q(t,n,[e])).flat()}function Q(e,t=!1,n){let r=t&&!n?[]:n;if(Array.isArray(e)&&e.every(e=>!w(e)))return t?e.map(e=>({error:e,path:r?.join(`.`)??``})):e;if(ie(e)){let n=r?.length?e.$self?.map(e=>({error:e,path:r.join(`.`)}))??[]:e.$self??[],i=e.$each?.map((e,n)=>Q(e,t,r?.concat(n.toString())))??[];return n?.concat(i.flat())}else return Object.entries(e).map(([e,n])=>Q(n,t,r?.concat(e))).flat()}function oe({customMessages:n,rule:r,ruleKey:i,state:a,path:o,storage:s,$debounce:c,modifiers:d}){let f=t(),p={},m,h=u(!1),g=u(!1),{$pending:v,$valid:y,$metadata:x,$validating:S}=s.trySetRuleStatusRef(`${o}.${i}`);function C(){f=t(),p=f.run(()=>{let t=u(!1),s=u(!1),c=u(!0),l=u(!1),d=u(!1),f=e(()=>({$value:a.value,$error:s.value,$dirty:t.value,$pending:l.value,$correct:d.value,$invalid:c.value,$rule:{$valid:y.value,$invalid:!y.value,$pending:v.value},$params:C.value,...x.value})),p=e(()=>Z(r)?typeof r.value.active==`function`?r.value.active(f.value):!!r.value.active:!0);function m(e){let t=``,a=n?n[i]?.[e]:void 0;if(a&&(t=typeof a==`function`?a(f.value):a),Z(r)){let n=`_${e}_patched`;a&&!r.value[n]||(t=typeof r.value[e]==`function`?r.value[e](f.value):r.value[e]??``)}return t}let h=e(()=>{let e=m(`message`);return b(e)&&(e=`This field is not valid`),e}),g=e(()=>m(`tooltip`)),_=e(()=>Z(r)&&r.value.type?r.value.type:i),S=e(()=>Z(r)?r.value.validator:r.value),C=e(()=>typeof r.value==`function`?[]:M(r.value._params??[])),w=e(()=>`${o}.${_.value}`);return{$active:p,$message:h,$type:_,$validator:S,$params:C,$path:w,$tooltip:g,$fieldCorrect:d,$fieldError:s,$fieldDirty:t,$fieldPending:l,$fieldInvalid:c}}),m=_(p?.$params,()=>{(!d.$silent.value||d.$rewardEarly.value&&p.$fieldError.value)&&O()})}C();function w(){y.value=!0,p.$fieldDirty.value&&(v.value=!0)}async function T(){let e=!1;try{let t=p.$validator.value;if(typeof t!=`function`)return console.error(`${o}: Incorrect rule format, it needs to be either a function or created with "createRule".`),!1;let n=t(a.value,...p.$params.value),r=a.value;w();let i;if(i=n instanceof Promise?await n:n,a.value!==r)return!0;if(typeof i==`boolean`)e=i;else{let{$valid:t,...n}=i;e=t,x.value=n}}catch{e=!1}finally{v.value=!1}return e}let E=D(T,c??200);async function O(){try{S.value=!0;let e=!1;if(g.value=!0,X(r.value)&&r.value._async)e=await E();else{let t=p.$validator.value,n=t(a.value,...p.$params.value);if(n 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(n!=null)if(typeof n==`boolean`)e=n;else{let{$valid:t,...r}=n;e=t,x.value=r}}return y.value=e,e}catch{return!1}finally{S.value=!1,g.value=!1}}function k(){y.value=!0,x.value={},v.value=!1,S.value=!1,C()}function A(){m(),f.stop(),f=t()}return l({...p,$pending:v,$valid:y,$metadata:x,$haveAsync:h,$maybePending:g,$validating:S,$parse:O,$unwatch:A,$watch:C,$reset:k})}function se({state:n,rulesDef:r,customMessages:i,path:a,fieldName:o,storage:s,options:c,externalErrors:d,schemaErrors:p,schemaMode:m,onUnwatch:g,$isArray:y,initialState:x,shortcuts:S,onValidate:T}){let k=t(),A,j=[],M,N,P,F,I,L=()=>{};function R(){let e=r.value,t=s.checkRuleDeclEntry(a,e);K.value=Object.fromEntries(Object.entries(e).filter(([e])=>e.startsWith(`$`))),V(),G.value=Object.fromEntries(Object.entries(r.value).filter(([e])=>!e.startsWith(`$`)).map(([e,t])=>{if(t){let r=f(()=>t);return[e,oe({modifiers:{$silent:A.$silent,$rewardEarly:A.$rewardEarly},customMessages:i,rule:r,ruleKey:e,state:n,path:a,storage:s,$debounce:K.value.$debounce})]}return[]}).filter(e=>!!e.length)),A.processShortcuts(),z(),t?.valid!=null&&(A.$dirty.value=s.getDirtyState(a),(A.$dirty.value&&!A.$silent.value||A.$rewardEarly.value&&A.$error.value)&&L()),s.addRuleDeclEntry(a,e)}function z(){L=A.$debounce.value?D(W,A.$debounce.value??A.$haveAnyAsyncRule?100:0):W}function B(){G.value&&Object.entries(G.value).forEach(([e,t])=>{t.$unwatch()}),P(),I?.(),A.$dirty.value&&s.setDirtyEntry(a,A.$dirty.value),M?.(),k.stop(),k=t(),j.forEach(e=>e.stop()),j=[],g?.(),F?.()}function V(){G.value&&Object.entries(G.value).forEach(([e,t])=>{t.$watch()}),A=k.run(()=>{let i=u(!1),a=u(!1),s=e(()=>i.value),f=e(()=>K.value.$debounce),g=e(()=>K.value.$deepCompare==null?!1:K.value.$deepCompare),_=e(()=>K.value.$lazy==null?h(c.lazy)==null?!1:h(c.lazy):K.value.$lazy),y=e(()=>K.value.$rewardEarly==null?h(c.rewardEarly)==null?!1:h(c.rewardEarly):K.value.$rewardEarly),C=e(()=>K.value.$clearExternalErrorsOnChange==null?h(c.clearExternalErrorsOnChange)==null?!w.value:h(c.clearExternalErrorsOnChange):K.value.$clearExternalErrorsOnChange),w=e(()=>y.value?!0:K.value.$silent==null?h(c.silent)==null?!1:h(c.silent):K.value.$silent),T=e(()=>K.value.$autoDirty==null?h(c.autoDirty)==null?!0:h(c.autoDirty):K.value.$autoDirty),D=e(()=>Object.entries(G.value).some(([e,t])=>t.$validating)),k=e({get:()=>n.value,set(e){M(),n.value=e,U()}}),A=e(()=>H.value&&!V.value&&i.value),N=e(()=>ne({field:{$rules:G.value,$error:A.value,$externalErrors:d?.value,$schemaErrors:p?.value,fieldName:o}})),P=e(()=>ne({field:{$rules:G.value,$error:A.value,$externalErrors:d?.value,$schemaErrors:p?.value,fieldName:o},silent:!0})),F=e(()=>N.value.map(e=>e.$message)),I=e(()=>P.value.map(e=>e.$message)),L=e(()=>i.value?x.value instanceof Date&&n.value instanceof Date?E(x.value).getDate()!==E(n.value).getDate():x.value==null?!!n.value:Array.isArray(n.value)&&Array.isArray(x.value)?!O(n.value,x.value,K.value.$deepCompare):x.value!==n.value:!1),R=e(()=>L.value),z=e(()=>re({field:{$rules:G.value}})),B=e(()=>(w.value||s.value)&&!(H.value||V.value)),V=e(()=>a.value||!y.value?Object.entries(G.value).some(([e,t])=>t.$pending):!1),H=e(()=>{if(d?.value?.length||p?.value?.length)return!0;if(q.value)return!1;if(!y.value||y.value){let e=Object.entries(G.value).some(([e,t])=>!(t.$valid&&!t.$maybePending));return e}return!1}),W=e(()=>o),q=e(()=>Object.keys(r.value).filter(([e])=>!e.startsWith(`$`)).length===0&&!m),J=e(()=>{if(d?.value?.length||q.value)return!1;if(i.value&&!b(n.value)&&!D.value&&!V.value){if(m)return!p?.value?.length;{let e=Object.values(G.value).some(e=>e.$active);return e?Object.values(G.value).filter(e=>e.$active).every(e=>e.$valid):!1}}return!1}),Y=e(()=>Object.entries(G.value).some(([e,t])=>t.$haveAsync));function X(){S?.fields&&Object.entries(S.fields).forEach(([e,r])=>{let a=t();Z[e]=a.run(()=>{let e=u();return v(()=>{e.value=r(l({$dirty:i,$externalErrors:d?.value??[],$value:n,$silentValue:k,$rules:G,$error:A,$pending:V,$invalid:H,$correct:J,$errors:F,$ready:B,$silentErrors:I,$anyDirty:s,$tooltips:z,$name:W,$inactive:q,$edited:L,$anyEdited:R}))}),e}),j.push(a)})}let Z={};return{$error:A,$pending:V,$invalid:H,$correct:J,$debounce:f,$deepCompare:g,$lazy:_,$ready:B,$issues:N,$silentIssues:P,$errors:F,$silentErrors:I,$rewardEarly:y,$autoDirty:T,$silent:w,$clearExternalErrorsOnChange:C,$anyDirty:s,$edited:L,$anyEdited:R,$name:W,$haveAnyAsyncRule:Y,$shortcuts:Z,$validating:D,$tooltips:z,$dirty:i,processShortcuts:X,$silentValue:k,$inactive:q}}),U(),P=_(A.$dirty,e=>{s.setDirtyEntry(a,e),Object.values(G.value).forEach(t=>{t.$fieldDirty=e})}),I=_([A.$error,A.$correct,A.$invalid,A.$pending],()=>{Object.values(G.value).forEach(e=>{e.$fieldError=A.$error.value,e.$fieldInvalid=A.$invalid.value,e.$fieldPending=A.$pending.value,e.$fieldCorrect=A.$correct.value})}),F=_(A.$haveAnyAsyncRule,z)}function U(){M=_(n,()=>{A.$autoDirty.value&&!A.$silent.value&&(A.$dirty.value||(A.$dirty.value=!0)),r.value instanceof Function&&R(),(!A.$silent.value||A.$rewardEarly.value&&A.$error.value)&&L(),A.$clearExternalErrorsOnChange.value&&Z()},{deep:y?!0:H?1:!0})}function W(){Object.values(G.value).forEach(e=>{e.$parse()})}let G=u({}),K=u({});R();function q(e,t){if(Z(),A.$dirty.value=!1,s.setDirtyEntry(a,!1),!t)if(e?.toInitialState)n.value=C(x.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,x.value=C(t),n.value=C(t)}else x.value=w(n.value)?C(n.value):Array.isArray(n.value)?[...n.value]:n.value;e?.clearExternalErrors&&Z(),t||Object.entries(G.value).forEach(([e,t])=>{t.$reset()}),!A.$lazy.value&&!A.$silent.value&&!t&&Object.values(G.value).forEach(e=>e.$parse())}function J(e=!0,t=!1){A.$dirty.value||(A.$dirty.value=!0),t&&e?(!A.$silent.value||A.$rewardEarly.value&&A.$error.value)&&L():e&&L()}async function Y(){try{if(m)return T?(J(!1),T()):{valid:!1,data:n.value};let e=n.value;if(!A.$dirty.value)A.$dirty.value=!0;else if(!A.$silent.value&&A.$dirty.value&&!A.$pending.value)return{valid:!A.$error.value,data:e};if(m)return{valid:!p?.value?.length,data:e};if(b(G.value))return{valid:!0,data:e};let t=await Promise.allSettled(Object.entries(G.value).map(([e,t])=>t.$parse())),r=t.every(e=>e.status===`fulfilled`?e.value===!0:!1);return{valid:r,data:e}}catch{return{valid:!1,data:n.value}}}function X(e=!0){return A.$dirty.value?n.value:e?{_null:!0}:null}function Z(){d?.value?.length&&(d.value=[])}!A.$lazy.value&&!A.$dirty.value&&!A.$silent.value&&L();let{$shortcuts:ee,$validating:te,$autoDirty:ie,$rewardEarly:ae,$clearExternalErrorsOnChange:Q,$haveAnyAsyncRule:se,$debounce:ce,$lazy:le,...ue}=A;return l({...ue,$externalErrors:d,$value:n,$rules:G,...ee,$reset:q,$touch:J,$validate:Y,$unwatch:B,$watch:V,$extractDirtyFields:X,$clearExternalErrors:Z})}function ce({$id:t,path:n,index:r,options:i,storage:a,stateValue:o,customMessages:s,rules:c,externalErrors:l,schemaErrors:u,initialState:d,shortcuts:p,fieldName:m,schemaMode:h}){let g=c.$key?c.$key:W(),_=`${n}.${String(g)}`;typeof o.value==`object`&&o.value!=null&&(o.value.$id?_=`${n}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:g,enumerable:!1,configurable:!1,writable:!1}}));let v=f(l?.value??[],r),y=e(()=>u?.value?.[r]),b=$({state:o,rulesDef:f(()=>c),customMessages:s,path:_,storage:a,options:i,externalErrors:v,schemaErrors:y,initialState:d,shortcuts:p,fieldName:m,schemaMode:h});if(b){let e=o.value?.$id;b.$id=e??String(g),a.addArrayStatus(t,b.$id,b)}return b}function le({state:n,rulesDef:r,customMessages:i,path:a,storage:o,options:s,externalErrors:c,schemaErrors:d,schemaMode:p,initialState:m,shortcuts:g,fieldName:y}){let x=t(),S,w=t(),T,E=[];if(!Array.isArray(n.value)&&!r.value.$each)return;let D=u(),O=u(n.value),k=u({}),A,j,M=u({}),N=o.getCollectionsEntry(a);T=w.run(()=>{let t=e(()=>n.value?.length?Array.isArray(n.value)&&n.value.length?n.value.every(e=>typeof e!=`object`):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(e=>X(e)||typeof e==`function`):!1:!1);return{isPrimitiveArray:t}}),P(),L();function P(){k.value=Object.fromEntries(Object.entries(r.value).filter(([e])=>e.startsWith(`$`))),typeof n.value==`object`&&(n.value!=null&&!n.value?.$id&&n.value!==null?(D.value=W(),Object.defineProperties(n.value,{$id:{value:D.value,enumerable:!1,configurable:!1,writable:!1}})):n.value?.$id&&(D.value=n.value.$id)),O.value=M.value.$value,Array.isArray(n.value)&&!T.isPrimitiveArray.value?N.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let{scope:l,unwrapped:u}=z(r.value.$each,f(()=>t),n);l&&E.push(l);let h=f(m.value??[],n),_=f(c?.value??{},`$each`),v=e(()=>d?.value?.$each),b=ce({$id:D.value,path:a,customMessages:i,rules:u??{},stateValue:f(()=>t),index:n,options:s,storage:o,externalErrors:_,schemaErrors:v,initialState:h,shortcuts:g,fieldName:y,schemaMode:p});return b||null}).filter(e=>!!e):N.value=[],M.value=se({state:n,rulesDef:r,customMessages:i,path:a,storage:o,options:s,externalErrors:f(c?.value??{},`$self`),schemaErrors:e(()=>d?.value?.$self),$isArray:!0,initialState:m,shortcuts:g,fieldName:y,schemaMode:p})}function F(){if(Array.isArray(n.value)&&!T.isPrimitiveArray.value){let t=C(N.value);N.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let l=f(()=>t);if(t.$id&&N.value.find(e=>e.$id===t.$id)){let e=o.getArrayStatus(D.value,t.$id);return e?(e.$value=l,e):null}else{let{scope:t,unwrapped:u}=z(r.value.$each,l,n);t&&E.push(t);let h=f(c?.value??{},`$each`),_=e(()=>d?.value?.$each??[]),v=ce({$id:D.value,path:a,customMessages:i,rules:u??{},stateValue:l,index:n,options:s,storage:o,externalErrors:h,schemaErrors:_,initialState:f(m.value??[],n),shortcuts:g,fieldName:y,schemaMode:p});return v||null}}).filter(e=>!!e),t.filter(e=>!n.value?.find(t=>e.$id===t.$id)).forEach((e,t)=>{o.deleteArrayStatus(D.value,t.toString())})}else N.value=[]}function I(){A=_(n,()=>{n.value!=null&&!Object.hasOwn(n.value,`$id`)?P():F()},{deep:H?1:!0,flush:`pre`}),j=_(n,()=>{S.$autoDirty.value&&!S.$silent.value&&B(!1,!0)},{flush:`pre`})}function L(){I(),x=t(),S=x.run(()=>{let r=e({get:()=>n.value,set(e){A?.(),j?.(),n.value=e,I()}}),i=e(()=>M.value.$dirty&&(!N.value.length||N.value.every(e=>e.$dirty))),a=e(()=>M.value.$anyDirty||N.value.some(e=>e.$anyDirty)),o=e(()=>M.value.$invalid||N.value.some(e=>e.$invalid)),c=e(()=>(b(M.value.$rules)?!0:M.value.$correct)&&(!N.value.length||N.value.every(e=>e.$correct||e.$anyDirty&&!e.$invalid))),d=e(()=>M.value.$error||N.value.some(e=>e.$error)),f=e(()=>!(o.value||p.value)),p=e(()=>M.value.$pending||N.value.some(e=>e.$pending)),m=e(()=>!!N.value.length&&N.value.every(e=>e.$edited)),_=e(()=>M.value.$anyEdited||N.value.some(e=>e.$anyEdited)),x=e(()=>({$self:M.value.$errors,$each:N.value.map(e=>e.$errors)})),S=e(()=>({$self:M.value.$silentErrors,$each:N.value.map(e=>e.$silentErrors)})),C=e(()=>k.value.$rewardEarly==null?h(s.rewardEarly)==null?!1:h(s.rewardEarly):k.value.$rewardEarly),w=e(()=>C.value?!0:k.value.$silent==null?h(s.silent)==null?!1:h(s.silent):k.value.$silent),T=e(()=>k.value.$autoDirty==null?h(s.autoDirty)==null?!0:h(s.autoDirty):k.value.$autoDirty),D=e(()=>y);function O(){g?.collections&&Object.entries(g?.collections).forEach(([e,s])=>{let h=t();P[e]=h.run(()=>{let e=u();return v(()=>{e.value=s(l({$dirty:i,$error:d,$silentValue:r,$pending:p,$invalid:o,$correct:c,$errors:x,$ready:f,$silentErrors:S,$anyDirty:a,$name:D,$each:N,$self:M,$value:n,$edited:m,$anyEdited:_}))}),e}),E.push(h)})}let P={};return O(),{$dirty:i,$anyDirty:a,$invalid:o,$correct:c,$error:d,$pending:p,$errors:x,$silentErrors:S,$ready:f,$name:D,$shortcuts:P,$silentValue:r,$edited:m,$anyEdited:_,$rewardEarly:C,$silent:w,$autoDirty:T}}),T.isPrimitiveArray.value&&r.value.$each&&console.warn(`${a} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`)}function R(){A?.(),M.value&&M.value.$unwatch(),N.value&&N.value.forEach(e=>{`$dirty`in e&&e.$unwatch()}),x.stop(),x=t(),w.stop(),w=t(!0),E.forEach(e=>e.stop()),E=[]}function B(e=!0,t=!1){M.value.$touch(e,t),N.value.forEach(n=>{n.$touch(e,t)})}function V(e,t){if(R(),!t)if(e?.toInitialState)n.value=C(m.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,m.value=C(t),n.value=C(t)}else m.value=C(n.value);e?.clearExternalErrors&&G(),M.value.$reset(e,t),N.value.forEach(t=>{t.$reset(e,!0)}),t||P()}async function U(){let e=n.value;try{let t=await Promise.allSettled([M.value.$validate(),...N.value.map(e=>e.$validate())]),n=t.every(e=>e.status===`fulfilled`?e.value.valid===!0:!1);return{valid:n,data:e}}catch{return{valid:!1,data:e}}}function G(){M.value.$clearExternalErrors(),N.value.forEach(e=>{e.$clearExternalErrors()})}function K(e=!0){let t=N.value.map(t=>{if(ee(t))return t.$extractDirtyFields(e)});return e&&t.every(e=>b(e))&&(t=[]),t}let{$shortcuts:q,...J}=S;return l({$self:M,...J,...q,$each:N,$value:n,$validate:U,$unwatch:R,$watch:L,$touch:B,$reset:V,$extractDirtyFields:K,$clearExternalErrors:G})}function ue({rulesDef:n,state:r,path:i=``,rootRules:a,externalErrors:o,schemaErrors:s,rootSchemaErrors:c,validationGroups:d,initialState:p,fieldName:m,...g}){let y=t(),x,S=[],T=null,E=null,D=null,O=null,k=null;async function M(t=!0){let a=Object.entries(n.value),c=Object.fromEntries(a.filter(([e,t])=>!!t).map(([t,n])=>{if(n){let a=f(r.value??{},t),c=f(()=>n),l=f(o?.value??{},t),u=e(()=>s?.value?.[t]),d=f(p?.value??{},t);return[t,$({state:a,rulesDef:c,path:i?`${i}.${t}`:t,externalErrors:l,schemaErrors:u,initialState:d,fieldName:t,...g})]}return[]})),l=Object.fromEntries(Object.entries(h(o)??{}).filter(([e,t])=>!(e in n.value)&&!!t).map(([t])=>{let n=f(r.value??{},t),a=f(o?.value??{},t),c=e(()=>s?.value?.[t]),l=f(p?.value??{},t);return[t,$({state:n,rulesDef:e(()=>({})),path:i?`${i}.${t}`:t,externalErrors:a,schemaErrors:c,initialState:l,fieldName:t,...g})]})),u=Object.fromEntries(Object.entries(h(s)??{}).map(([t])=>{let n=f(r.value??{},t),a=f(o?.value??{},t),c=e(()=>s?.value?.[t]),l=f(p?.value??{},t);return[t,$({state:n,rulesDef:e(()=>({})),path:i?`${i}.${t}`:t,externalErrors:a,schemaErrors:c,initialState:l,fieldName:t,...g})]})),d=Object.fromEntries(Object.entries(r.value??{}).filter(([e])=>!(e in n.value)&&!(e in(l??{}))&&!(e in(u??{}))).map(([t])=>{let n=f(r.value??{},t),a=f(o?.value??{},t),c=e(()=>s?.value?.[t]),l=f(p?.value??{},t);return[t,$({state:n,rulesDef:e(()=>({})),path:i?`${i}.${t}`:t,externalErrors:a,schemaErrors:c,initialState:l,fieldName:t,...g})]}));N.value={...c,...l,...u,...d},t&&I()}let N=g.storage.getFieldsEntry(i);M();function P(){o&&(D=_(o,()=>{L(),M()},{deep:!0}))}function F(){O=_(r,()=>{L(),M(),x.$autoDirty.value&&!x.$silent.value&&B(!1,!0)})}function I(){a&&(T?.(),T=_(a,()=>{L(),M()},{deep:!0,flush:`pre`}),P()),c&&(E?.(),E=_(c,()=>{L(),M()},{deep:!0,flush:`post`})),F(),x=y.run(()=>{let n=e({get:()=>r.value,set(e){L(),r.value=e,M(),x.$autoDirty.value&&!x.$silent.value&&B(!1,!0)}}),i=e({get:()=>r.value,set(e){L(),r.value=e,M()}}),a=e(()=>!!Object.entries(N.value).length&&Object.entries(N.value).every(([e,t])=>t?.$dirty)),o=e(()=>Object.entries(N.value).some(([e,t])=>t?.$anyDirty)),s=e(()=>!!Object.entries(N.value).length&&Object.entries(N.value).some(([e,t])=>t?.$invalid)),c=e(()=>{let e=Object.entries(N.value).filter(([e,t])=>te(t)?!t.$inactive:!0);return e.length?e.every(([e,t])=>g.schemaMode?t.$correct:te(t)?`required`in t.$rules&&t.$rules.required.$active?t?.$correct:!t.$invalid&&!t.$pending:t?.$correct):!1}),f=e(()=>!!Object.entries(N.value).length&&Object.entries(N.value).some(([e,t])=>t?.$error)),p=e(()=>h(g.options.rewardEarly)==null?!1:h(g.options.rewardEarly)),_=e(()=>h(g.options.silent)==null?!!p.value:h(g.options.silent)),y=e(()=>h(g.options.autoDirty)==null?!0:h(g.options.autoDirty)),b=e(()=>(_.value||o.value)&&!(s.value||w.value)),C=u(!1),w=e(()=>C.value||Object.entries(N.value).some(([e,t])=>t?.$pending)),T=e(()=>Object.fromEntries(Object.entries(N.value).map(([e,t])=>[e,t?.$errors]))),E=e(()=>Object.fromEntries(Object.entries(N.value).map(([e,t])=>[e,t?.$silentErrors]))),D=e(()=>!!Object.entries(N.value).length&&Object.entries(N.value).every(([e,t])=>t?.$edited)),O=e(()=>Object.entries(N.value).some(([e,t])=>t?.$anyEdited)),k=e(()=>m);function P(){g.shortcuts?.nested&&Object.entries(g.shortcuts.nested).forEach(([e,n])=>{let d=t();I[e]=d.run(()=>{let e=u();return v(()=>{e.value=n(l({$dirty:a,$value:r,$silentValue:i,$error:f,$pending:w,$invalid:s,$correct:c,$ready:b,$anyDirty:o,$name:k,$silentErrors:E,$errors:T,$fields:N,$edited:D,$anyEdited:O}))}),e}),S.push(d)})}let F=e({get:()=>d?Object.fromEntries(Object.entries(d?.(N.value)??{}).map(([e,t])=>t.length?[e,{...Object.fromEntries([`$invalid`,`$error`,`$pending`,`$dirty`,`$correct`].map(e=>[e,A(t,e)])),...Object.fromEntries([`$errors`,`$silentErrors`].map(e=>[e,j(t,e)]))}]:[])):{},set(){}}),I={};return P(),{$dirty:a,$anyDirty:o,$invalid:s,$correct:c,$error:f,$pending:w,$errors:T,$silentErrors:E,$ready:b,$name:k,$shortcuts:I,$groups:F,$silentValue:i,$edited:D,$anyEdited:O,$localPending:C,$autoDirty:y,$silent:_,$value:n}})}function L(){T?.(),D?.(),O?.(),k?.(),E?.(),S=[],x={},N.value&&Object.entries(N.value).forEach(([e,t])=>{t.$unwatch()})}function R(){Object.entries(N.value).forEach(([e,t])=>{t.$clearExternalErrors()})}function z(e,t){if(D?.(),L(),!t)if(e?.toInitialState)r.value=C({...p.value??{}});else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,p.value=C(t),r.value=C(t)}else p.value=C(r.value);Object.values(N.value).forEach(t=>{t.$reset(e,!0)}),e?.clearExternalErrors&&R(),P(),t||M()}function B(e=!0,t=!1){Object.values(N.value).forEach(n=>{n.$touch(e,t)})}function V(e){return e.filter(([e,t])=>w(t)?!(t&&typeof t==`object`&&`_null`in t)&&!b(t):Array.isArray(t)?t.length:!0)}function H(e=!0){let t=Object.entries(N.value).map(([t,n])=>[t,n.$extractDirtyFields(e)]);return e&&(t=V(t)),Object.fromEntries(t)}async function U(){try{if(g.schemaMode)return g.onValidate?(B(!1),x.$localPending.value=!0,g.onValidate()):{valid:!1,data:r.value};{let e=r.value,t=await Promise.allSettled(Object.values(N.value).map(e=>e.$validate())),n=t.every(e=>e.status===`fulfilled`?e.value.valid===!0:!1);return{valid:n,data:e}}}catch{return{valid:!1,data:r.value}}finally{x.$localPending.value=!1}}let{$shortcuts:W,$localPending:G,...K}=x;return l({...K,...W,$fields:N,$reset:z,$touch:B,$validate:U,$unwatch:L,$watch:I,$clearExternalErrors:R,$extractDirtyFields:H})}function $({rulesDef:e,...n}){if(J(e,n.state,n.schemaMode))return le({rulesDef:e,...n});if(q(n.state,e)){if(R(n.state))return ue({rulesDef:e,...n});{let r=t(),i=r.run(()=>{let e=f(n.state.value?n.state:u({}));return _(()=>n.state.value,t=>{e.value=t},{deep:!0}),_(e,e=>{n.state.value=e},{deep:!0}),{fakeState:e}}),{state:a,...o}=n;return ue({rulesDef:e,...o,state:i.fakeState})}}else if(Y(e))return se({rulesDef:e,...n})}function de({initialState:e,options:t,scopeRules:n,state:i,customRules:a,shortcuts:o,schemaErrors:s,schemaMode:d=!1,onValidate:f}){let p=L(),m=u();return q(i,n)?m.value=ue({rootRules:n,rulesDef:n,state:i,customMessages:a?.(),storage:p,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:`root`,path:``,schemaErrors:s,rootSchemaErrors:s,schemaMode:d,onValidate:f}):Y(n)&&(m.value=se({rulesDef:n,state:i,customMessages:a?.(),storage:p,options:t,externalErrors:t.externalErrors,initialState:e,shortcuts:o,fieldName:`root`,path:``,schemaMode:d,schemaErrors:s,onValidate:f})),r()&&c(()=>{m.value?.$unwatch()}),l({regle:m})}function fe(t,n,r){let a={autoDirty:n?.autoDirty,lazy:n?.lazy,rewardEarly:n?.rewardEarly,silent:n?.silent,clearExternalErrorsOnChange:n?.clearExternalErrorsOnChange};function o(n,o,s){let c=i(o)?o:typeof o==`function`?void 0:e(()=>o),l={...a,...s},f=i(n)?n:u(n),p=d(c??{});typeof o==`function`&&v(()=>{p.value=o(f),m(p)});let h=u(w(f.value)?{...C(f.value)}:C(f.value)),g=de({scopeRules:p,state:f,options:l,initialState:h,customRules:t,shortcuts:r});return{r$:g.regle}}return o}const pe=fe();function me(){function e(e,t){return t}return e}const he=me();function ge({rules:e,modifiers:t,shortcuts:n}){let r=fe(e,t,n);r.__config={rules:e,modifiers:t,shortcuts:n};let i=me();return{useRegle:r,inferRules:i}}function _e(e,{rules:t,modifiers:n,shortcuts:r}){let i=e.__config??{},a=()=>({...i.rules?.(),...t?.()}),o=i.modifiers&&n?T(i.modifiers,n):n,s=i.shortcuts&&r?T(i.shortcuts,r):r,c=fe(a,o,s);c.__config={rules:a,modifiers:o,shortcuts:s};let l=me();return{useRegle:c,inferRules:l}}function ve(t,n){let r=n??!1,i=e({get:()=>r?Object.values(t).map(e=>e.$value):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$value])),set:e=>{r||typeof e==`object`&&Object.entries(e).forEach(([e,n])=>t[e].$value=n)}}),a=e({get:()=>Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentValue])),set:e=>{typeof e==`object`&&Object.entries(e).forEach(([e,n])=>t[e].$silentValue=n)}}),o=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$dirty)}),s=e(()=>Object.entries(t).some(([e,t])=>t?.$anyDirty)),c=e(()=>Object.entries(t).some(([e,t])=>t?.$invalid)),u=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$correct||t.$anyDirty&&!t.$invalid)}),d=e(()=>Object.entries(t).some(([e,t])=>t?.$error)),f=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$ready)}),p=e(()=>Object.entries(t).some(([e,t])=>t?.$pending)),m=e(()=>r?Object.entries(t).map(([e,t])=>t.$errors):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$errors]))),h=e(()=>r?Object.entries(t).map(([e,t])=>t.$silentErrors):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentErrors]))),g=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$edited)}),_=e(()=>Object.entries(t).some(([e,t])=>t?.$anyEdited)),v=e(()=>r?Object.values(t):t);function y(e){Object.values(t).forEach(t=>{t.$reset(e)})}function b(){Object.values(t).forEach(e=>{e.$touch()})}function x(e=!0){return Object.values(t).map(t=>t.$extractDirtyFields(e))}function S(){Object.values(t).forEach(e=>{e.$clearExternalErrors()})}async function C(){try{let e=i.value,n=await Promise.allSettled(Object.values(t).map(e=>e.$validate())),r=n.every(e=>e.status===`fulfilled`?e.value.valid===!0:!1);return{valid:r,data:e}}catch{return{valid:!1,data:i.value}}}return l({...!r&&{$silentValue:a},$errors:m,$silentErrors:h,$instances:v,$value:i,$dirty:o,$anyDirty:s,$invalid:c,$correct:u,$error:d,$pending:p,$ready:f,$edited:g,$anyEdited:_,$reset:y,$touch:b,$validate:C,$extractDirtyFields:x,$clearExternalErrors:S})}function ye(t,n){function r(r){let i=e(()=>p(r));s();let a=u(c(t.value)),o=l({r$:a});function s(){i.value&&!t.value[i.value]&&(t.value[i.value]={})}_(i,s),_(t,e=>{a.value=c(e)},{deep:!0});function c(e){if(i.value){let t=e[i.value]??{};return ve(t,!n.asRecord)}else return ve(e[`~~global`]??{},!n.asRecord)}return{r$:o.r$}}return{useCollectScope:r}}function be(t,r){let i=r??pe,a=(r,a,o)=>{let{namespace:c,scopeKey:l,...d}=o??{};i.__config??={};let f=e(()=>p(c)),m=u(`${Object.keys(t.value).length+1}-${W()}`),h=e(()=>o?.scopeKey??`instance-${m.value}`),{r$:g}=i(r,a,d);y(),G(v),_(f,(e,t)=>{v(t),y()}),n()&&s(()=>{let e=n();typeof window<`u`&&e?.proxy?.$el?.parentElement&&document.documentElement&&!document.documentElement.contains(e?.proxy?.$el?.parentElement)&&v()});function v(e){let n=e??f.value;n?t.value[n]&&delete t.value[n][h.value]:t.value[`~~global`][h.value]&&delete t.value[`~~global`][h.value]}function y(){f.value?(t.value[f.value]||(t.value[f.value]={}),t.value[f.value][h.value]=g):(t.value[`~~global`]||(t.value[`~~global`]={}),t.value[`~~global`][h.value]=g)}return{r$:g,dispose:v,register:y}};return{useScopedRegle:a}}function xe(e){let t=e?.customStore?()=>(e.customStore&&(e.customStore?.value[`~~global`]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value[`~~global`]={}),e.customStore):K(()=>{let e=u({"~~global":{}});return e}),n=t(),{useScopedRegle:r}=be(n,e?.customUseRegle),{useCollectScope:i}=ye(n,{asRecord:e?.asRecord});return{useScopedRegle:r,useCollectScope:i}}const{useCollectScope:Se,useScopedRegle:Ce}=xe();function we(t,n,r){let i=e(()=>p(t)[n]),a=e(()=>{let e=r.find(e=>{if(e[n]&&`literal`in e[n]){let t=e[n].literal;if(X(t))return h(t._params?.[0])===i.value}});if(e)return e;{let e=r.find(e=>w(e[n])&&!Object.keys(e[n]).some(e=>e===`literal`));return e||{}}});return a}function Te(e,t,n){return w(e[t])&&`$value`in e[t]&&e[t]?.$value===n}function Ee(e,t,n){let r=i(e)?f(e.value,`$fields`):f(e,`$fields`),a=u();return _(r,async()=>{await o(),Te(r.value,t,n)?a.value=r.value:a.value=void 0},{immediate:!0,flush:`pre`}),a}function De(e){return e}function Oe(e,t){return n=>T({...e},t(n))}export{k as InternalRuleType,I as createRule,xe as createScopedUseRegle,we as createVariant,ge as defineRegleConfig,De as defineRules,_e as extendRegleConfig,ae as flatErrors,he as inferRules,ve as mergeRegles,Te as narrowVariant,Oe as refineRules,M as unwrapRuleParameters,Se as useCollectScope,pe as useRegle,de as useRootStorage,Ce as useScopedRegle,Ee as variantToRef};
1
+ import{computed as e,effectScope as t,getCurrentInstance as n,getCurrentScope as r,isRef as i,markRaw as a,nextTick as o,onMounted as s,onScopeDispose as c,reactive as l,ref as u,shallowRef as d,toRef as f,toValue as p,triggerRef as m,unref as h,version as g,watch as _,watchEffect as v}from"vue";function y(e){return e?.constructor.name==`File`||e?.constructor.name==`FileList`}function b(e,t=!0){return e==null?!0:e instanceof Date?isNaN(e.getTime()):y(e)?e.size<=0:Array.isArray(e)?t?e.length===0:!1:typeof e==`object`&&e?Object.keys(e).length===0:!String(e).length}const x=Symbol(`regle-rule`);function S(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 C(e){let t=e,n={}.toString.call(e).slice(8,-1);if(n==`Set`&&(t=new Set([...e].map(e=>C(e)))),n==`Map`&&(t=new Map([...e].map(e=>[C(e[0]),C(e[1])]))),n==`Date`&&(t=new Date(e.getTime())),n==`RegExp`&&(t=RegExp(e.source,S(e))),n==`Array`||n==`Object`)for(let n in t=Array.isArray(e)?[]:{},e)t[n]=C(e[n]);return t}function w(e){return e&&(e instanceof Date||e.constructor.name==`File`||e.constructor.name==`FileList`)?!1:typeof e==`object`&&!!e&&!Array.isArray(e)}function T(e,...t){for(var n=[].slice.call(arguments),r,i=n.length;r=n[i-1],i--;)if(!r||typeof r!=`object`&&typeof r!=`function`)throw Error(`expected object, got `+r);for(var a=n[0],o=n.slice(1),s=o.length,i=0;i<s;i++){var c=o[i];for(var l in c)a[l]=c[l]}return a}function E(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]`||typeof e==`string`||t===`[object String]`?new Date(e):new Date(NaN)}function D(e,t,n){let r,i=(...i)=>new Promise(a=>{clearTimeout(r),r=setTimeout(()=>{r=void 0,n||Promise.resolve(e.apply(this,[...i])).then(a)},t),n&&!r&&Promise.resolve(e.apply(this,[...i])).then(a)});return i.cancel=()=>{clearTimeout(r),r=void 0},i}function O(e,t,n=!1,r=!0){if(e===t)return!0;if(e&&t&&typeof e==`object`&&typeof t==`object`){if(e.constructor!==t.constructor)return!1;var i,a,o;if(Array.isArray(e)&&Array.isArray(t)){if(i=e.length,i!=t.length)return!1;if(r||!r&&n){for(a=i;a--!==0;)if(!O(e[a],t[a],n,!1))return!1}return!0}if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if(o=Object.keys(e),i=o.length,i!==Object.keys(t).length)return!1;for(a=i;a--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[a]))return!1;for(a=i;a--!==0;){var s=o[a];return!(w(e)&&w(t)&&(r||!r&&n)&&!O(e[s],t[s],n,!1))}return!0}return e!==e&&t!==t}const k={Inline:`__inline`,Async:`__async`};function A(e,t){return e.some(e=>e[t])}function j(e,t){return e.reduce((e,n)=>{let r=n[t]||[];return e.concat(r)},[])}function M(e){try{return e.map(e=>p(e))}catch{return[]}}function N(t){return t.map(t=>t instanceof Function?e(t):i(t)?t:f(()=>t))}function P(e){let t=e.toString(),n=t.replace(/\/\/.*$/gm,``).replace(/\/\*[\s\S]*?\*\//g,``),r=n.match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);if(!r)return 0;let i=r[0]||r[1]||r[2]||r[3]||r[4]||``,a=i.split(`,`).map(e=>e.trim()).filter(e=>e.length>0);return a.length}function F(e,...t){let{validator:n,type:r,async:i}=e,o=i||r===k.Async||n.constructor.name===`AsyncFunction`,s={validator(n,...r){return e.validator(n,...M(r.length?r:t))},message(n){return typeof e.message==`function`?e.message({...n,$params:M(n?.$params?.length?n.$params:t)}):e.message},active(n){return typeof e.active==`function`?e.active({...n,$params:M(n?.$params?.length?n.$params:t)}):e.active??!0},tooltip(n){return typeof e.tooltip==`function`?e.tooltip({...n,$params:M(n?.$params?.length?n.$params:t)}):e.tooltip??[]},exec(n){let r=e.validator(n,...M(t)),i;return r instanceof Promise?r.then(e=>(i=e,typeof i==`object`&&`$valid`in i?i.$valid:typeof i==`boolean`?i:!1)):(i=r,typeof i==`object`&&`$valid`in i?i.$valid:typeof i==`boolean`?i:!1)}},c=a({...s,type:r,_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:o,_params:N(t),_brand:x});return c}function I(e){if(typeof e.validator==`function`){let t=[],n=e.async??e.validator.constructor.name===`AsyncFunction`,r=F({...e,async:n},...t);if(P(e.validator)>1){let t=function(...t){return F(e,...t)};return t.validator=r.validator,t.message=r.message,t.active=r.active,t.tooltip=r.tooltip,t.type=r.type,t.exec=r.exec,t._validator=r.validator,t._message=r.message,t._active=r.active,t._tooltip=r.tooltip,t._type=e.type,t._message_pacthed=!1,t._tooltip_pacthed=!1,t._async=n,t}else return r}throw Error(`[createRule] validator must be a function`)}function L(){let e=d(new Map),t=d(new Map),n=d(new Map),i=d(new Map),a=d(new Map),o=d(new Map);function s(e){let n=t.value.get(e);if(n)return n;{let n=u({});return t.value.set(e,n),n}}function l(e){let t=n.value.get(e);if(t)return t;{let t=u([]);return n.value.set(e,t),t}}function f(e,t,n){o.value.set(`${e}-${t}`,n)}function p(e,t){return o.value.get(`${e}-${t}`)}function m(e,t){e&&t!=null&&o.value.delete(`${e}-${t}`)}function h(e,t){i.value.set(e,t)}function g(e){return i.value.get(e)??!1}function _(t,n){e.value.set(t,n)}function v(t,n){let r=e.value.get(t);if(!r)return;let i=r,a=y(n,i);return a?{valid:!0}:{valid:!1}}function y(e,t){let n=Object.keys(t),r=Object.keys(e);if(r.length!==n.length)return!1;let i=r.every(e=>n.includes(e));return i?r.every(n=>{let r=e[n],i=t[n];return!i||!r||typeof r==`function`||typeof i==`function`||typeof r==`number`||typeof r==`boolean`?!1:r._params?r._params?.every((e,t)=>{if(typeof i==`number`||typeof i==`boolean`)return!0;{let e=M(i._params),n=M(r._params);return e?.[t]===n?.[t]}}):!0}):!1}function b(e){let t=a.value.get(e);if(t)return t;{let t=u(!1),n=u(!0),r=u({}),i=u(!1);return a.value.set(e,{$pending:t,$valid:n,$metadata:r,$validating:i}),{$pending:t,$valid:n,$metadata:r,$validating:i}}}return r()&&c(()=>{e.value.clear(),t.value.clear(),n.value.clear(),i.value.clear(),a.value.clear(),o.value.clear()}),{addRuleDeclEntry:_,setDirtyEntry:h,checkRuleDeclEntry:v,getDirtyState:g,trySetRuleStatusRef:b,getFieldsEntry:s,getCollectionsEntry:l,getArrayStatus:p,addArrayStatus:f,deleteArrayStatus:m,arrayStatusStorage:o}}function R(e){return w(e.value)}function z(e,n,r){let i=t(),a;return a=e instanceof Function?i.run(()=>e(n,r??0)):e,{scope:i,unwrapped:a}}const B={LessThan:-1,EqualTo:0,GreaterThan:1};function V(e,t){let n=String(e).split(`.`),r=String(t).split(`.`);for(let e=0;e<Math.min(n.length,r.length);e++){let t=Number(n[e]),i=Number(r[e]);if(t>i)return B.GreaterThan;if(i>t)return B.LessThan;if(!isNaN(t)&&isNaN(i))return B.GreaterThan;if(isNaN(t)&&!isNaN(i))return B.LessThan}return B.EqualTo}const H=V(g,`3.5.0`)!==-1;function U(){return Math.floor(Math.random()*Date.now()).toString()}function W(){if(typeof window>`u`)return U();{let e=window.crypto.getRandomValues(new Uint32Array(1))[0];return e.toString(10)}}function G(e){return r()?(c(e),!0):!1}function K(e){let n=!1,r,i=t(!0);return(...t)=>(n||(r=i.run(()=>e(...t)),n=!0),r)}function q(e,t){return R(e)||w(t.value)&&!b(t.value)&&!Object.entries(t.value).some(([e,t])=>X(t)||typeof t==`function`)}function J(e,t,n=!1){return!!e.value&&w(e.value)&&`$each`in e.value||n&&Array.isArray(t.value)&&t.value.some(w)||Array.isArray(t.value)&&t.value.some(w)}function Y(e){return!!e.value&&w(e.value)}function X(e){return w(e)&&`_validator`in e}function Z(e){return typeof e.value==`function`?`_validator`in e.value:!0}function ee(e){return w(e)&&`$fields`in e}function te(e){return!!e&&`$rules`in e}function ne({field:e,silent:t=!1}){let n=Object.entries(e.$rules??{}).map(([n,r])=>{let i=``;if(t&&!r.$valid)i=r.$message;else if(!r.$valid&&e.$error&&!r.$validating)i=r.$message;else return null;let a={$message:i,$property:e.fieldName,$rule:n,$type:r.$type,...typeof r.$metadata==`object`?r.$metadata:{}};return a}),r=n.filter(e=>!!e),i=r.reduce((e,t)=>(typeof t.$message==`string`?e.push(t):e.push(...t.$message.map(e=>({...t,$message:e}))),e),[]),a=e.$error&&e.$externalErrors?e.$externalErrors.map(t=>({$message:t,$property:e.fieldName,$rule:`external`,$type:void 0})):[],o=e.$error?e.$schemaErrors??[]:[];return[...i,...a,...o]}function re({field:e}){let t=[];for(let n of Object.values(e.$rules??{})){let e=n.$tooltip;e&&(typeof e==`string`?t.push(e):t.push(...e))}return t}function ie(e){return w(e)&&`$each`in e}function ae(e,t){let{includePath:n=!1}=t??{};if(Array.isArray(e)&&e.every(e=>!w(e)))return e;if(ie(e)){let t=n?e.$self?.map(e=>({error:e,path:``}))??[]:e.$self??[],r=e.$each?.map(e=>Q(e,n))??[];return t?.concat(r.flat())}else return Object.entries(e).map(([e,t])=>Q(t,n,[e])).flat()}function Q(e,t=!1,n){let r=t&&!n?[]:n;if(Array.isArray(e)&&e.every(e=>!w(e)))return t?e.map(e=>({error:e,path:r?.join(`.`)??``})):e;if(ie(e)){let n=r?.length?e.$self?.map(e=>({error:e,path:r.join(`.`)}))??[]:e.$self??[],i=e.$each?.map((e,n)=>Q(e,t,r?.concat(n.toString())))??[];return n?.concat(i.flat())}else return Object.entries(e).map(([e,n])=>Q(n,t,r?.concat(e))).flat()}function oe({customMessages:n,rule:r,ruleKey:i,state:a,path:o,cachePath:s,storage:c,$debounce:d,modifiers:f}){let p=t(),m={},h,g=u(!1),v=u(!1),{$pending:y,$valid:x,$metadata:S,$validating:C}=c.trySetRuleStatusRef(`${s}.${i}`);function w(){p=t(),m=p.run(()=>{let t=u(!1),s=u(!1),c=u(!0),l=u(!1),d=u(!1),f=e(()=>({$value:a.value,$error:s.value,$dirty:t.value,$pending:l.value,$correct:d.value,$invalid:c.value,$rule:{$valid:x.value,$invalid:!x.value,$pending:y.value},$params:C.value,...S.value})),p=e(()=>Z(r)?typeof r.value.active==`function`?r.value.active(f.value):!!r.value.active:!0);function m(e){let t=``,a=n?n[i]?.[e]:void 0;if(a&&(t=typeof a==`function`?a(f.value):a),Z(r)){let n=`_${e}_patched`;a&&!r.value[n]||(t=typeof r.value[e]==`function`?r.value[e](f.value):r.value[e]??``)}return t}let h=e(()=>{let e=m(`message`);return b(e)&&(e=`This field is not valid`),e}),g=e(()=>m(`tooltip`)),_=e(()=>Z(r)&&r.value.type?r.value.type:i),v=e(()=>Z(r)?r.value.validator:r.value),C=e(()=>typeof r.value==`function`?[]:M(r.value._params??[])),w=e(()=>`${o}.${_.value}`);return{$active:p,$message:h,$type:_,$validator:v,$params:C,$path:w,$tooltip:g,$fieldCorrect:d,$fieldError:s,$fieldDirty:t,$fieldPending:l,$fieldInvalid:c}}),h=_(m?.$params,()=>{(!f.$silent.value||f.$rewardEarly.value&&m.$fieldError.value)&&k()})}w();function T(){x.value=!0,m.$fieldDirty.value&&(y.value=!0)}async function E(){let e=!1;try{let t=m.$validator.value;if(typeof t!=`function`)return console.error(`${o}: Incorrect rule format, it needs to be either a function or created with "createRule".`),!1;let n=t(a.value,...m.$params.value),r=a.value;T();let i;if(i=n instanceof Promise?await n:n,a.value!==r)return!0;if(typeof i==`boolean`)e=i;else{let{$valid:t,...n}=i;e=t,S.value=n}}catch{e=!1}finally{y.value=!1}return e}let O=D(E,d??200);async function k(){try{C.value=!0;let e=!1;if(v.value=!0,X(r.value)&&r.value._async)e=await O();else{let t=m.$validator.value,n=t(a.value,...m.$params.value);if(n 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(n!=null)if(typeof n==`boolean`)e=n;else{let{$valid:t,...r}=n;e=t,S.value=r}}return x.value=e,e}catch{return!1}finally{C.value=!1,v.value=!1}}function A(){x.value=!0,S.value={},y.value=!1,C.value=!1,w()}function j(){h(),p.stop(),p=t()}return l({...m,$pending:y,$valid:x,$metadata:S,$haveAsync:g,$maybePending:v,$validating:C,$parse:k,$unwatch:j,$watch:w,$reset:A})}function se({state:n,rulesDef:r,customMessages:i,path:a,cachePath:o,fieldName:s,storage:c,options:d,externalErrors:p,schemaErrors:m,schemaMode:g,onUnwatch:y,$isArray:x,initialState:S,shortcuts:T,onValidate:k}){let A=t(),j,M=[],N,P,F,I,L=()=>{};function R(){let e=r.value,t=c.checkRuleDeclEntry(o,e),s={};for(let t in e)t.startsWith(`$`)&&(s[t]=e[t]);K.value=s,V();let l=r.value,u=[];for(let e in l){if(e.startsWith(`$`))continue;let t=l[e];if(!t)continue;let r=f(()=>t);u.push([e,oe({modifiers:{$silent:j.$silent,$rewardEarly:j.$rewardEarly},customMessages:i,rule:r,ruleKey:e,state:n,path:a,cachePath:o,storage:c,$debounce:K.value.$debounce})])}G.value=Object.fromEntries(u),j.processShortcuts(),z(),t?.valid!=null&&(j.$dirty.value=c.getDirtyState(o),(j.$dirty.value&&!j.$silent.value||j.$rewardEarly.value&&j.$error.value)&&L()),c.addRuleDeclEntry(o,e)}function z(){L=j.$debounce.value?D(W,j.$debounce.value??j.$haveAnyAsyncRule?100:0):W}function B(){if(G.value)for(let e of Object.values(G.value))e.$unwatch();P(),I?.(),j.$dirty.value&&c.setDirtyEntry(o,j.$dirty.value),N?.(),A.stop(),A=t();for(let e of M)e.stop();M=[],y?.(),F?.()}function V(){if(G.value)for(let e of Object.values(G.value))e.$watch();j=A.run(()=>{let i=u(!1),a=u(!1),o=e(()=>i.value),c=e(()=>K.value.$debounce),f=e(()=>K.value.$deepCompare==null?!1:K.value.$deepCompare),_=e(()=>K.value.$lazy==null?h(d.lazy)==null?!1:h(d.lazy):K.value.$lazy),y=e(()=>K.value.$rewardEarly==null?h(d.rewardEarly)==null?!1:h(d.rewardEarly):K.value.$rewardEarly),x=e(()=>K.value.$clearExternalErrorsOnChange==null?h(d.clearExternalErrorsOnChange)==null?!C.value:h(d.clearExternalErrorsOnChange):K.value.$clearExternalErrorsOnChange),C=e(()=>y.value?!0:K.value.$silent==null?h(d.silent)==null?!1:h(d.silent):K.value.$silent),w=e(()=>K.value.$autoDirty==null?h(d.autoDirty)==null?!0:h(d.autoDirty):K.value.$autoDirty),D=e(()=>{for(let e of Object.values(G.value))if(e.$validating)return!0;return!1}),k=e({get:()=>n.value,set(e){N(),n.value=e,U()}}),A=e(()=>H.value&&!V.value&&i.value),j=e(()=>ne({field:{$rules:G.value,$error:A.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:s}})),P=e(()=>ne({field:{$rules:G.value,$error:A.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:s},silent:!0})),F=e(()=>j.value.map(e=>e.$message)),I=e(()=>P.value.map(e=>e.$message)),L=e(()=>i.value?S.value instanceof Date&&n.value instanceof Date?E(S.value).getDate()!==E(n.value).getDate():S.value==null?!!n.value:Array.isArray(n.value)&&Array.isArray(S.value)?!O(n.value,S.value,K.value.$deepCompare):S.value!==n.value:!1),R=e(()=>L.value),z=e(()=>re({field:{$rules:G.value}})),B=e(()=>(C.value||o.value)&&!(H.value||V.value)),V=e(()=>a.value||!y.value?Object.entries(G.value).some(([e,t])=>t.$pending):!1),H=e(()=>p?.value?.length||m?.value?.length?!0:q.value?!1:!y.value||y.value?Object.values(G.value).some(e=>!e.$valid||e.$maybePending):!1),W=e(()=>s),q=e(()=>!g&&!Object.keys(r.value).some(e=>!e.startsWith(`$`))),J=e(()=>{if(p?.value?.length||q.value)return!1;if(i.value&&!b(n.value)&&!D.value&&!V.value){if(g)return!m?.value?.length;{let e=Object.values(G.value);for(let t of e)if(t.$active&&!t.$valid)return!1;return e.some(e=>e.$active)}}return!1}),Y=e(()=>Object.values(G.value).some(e=>e.$haveAsync));function X(){T?.fields&&Object.entries(T.fields).forEach(([e,r])=>{let a=t();Z[e]=a.run(()=>{let e=u();return v(()=>{e.value=r(l({$dirty:i,$externalErrors:p?.value??[],$value:n,$silentValue:k,$rules:G,$error:A,$pending:V,$invalid:H,$correct:J,$errors:F,$ready:B,$silentErrors:I,$anyDirty:o,$tooltips:z,$name:W,$inactive:q,$edited:L,$anyEdited:R}))}),e}),M.push(a)})}let Z={};return{$error:A,$pending:V,$invalid:H,$correct:J,$debounce:c,$deepCompare:f,$lazy:_,$ready:B,$issues:j,$silentIssues:P,$errors:F,$silentErrors:I,$rewardEarly:y,$autoDirty:w,$silent:C,$clearExternalErrorsOnChange:x,$anyDirty:o,$edited:L,$anyEdited:R,$name:W,$haveAnyAsyncRule:Y,$shortcuts:Z,$validating:D,$tooltips:z,$dirty:i,processShortcuts:X,$silentValue:k,$inactive:q}}),U(),P=_(j.$dirty,e=>{c.setDirtyEntry(o,e),Object.values(G.value).forEach(t=>{t.$fieldDirty=e})}),I=_([j.$error,j.$correct,j.$invalid,j.$pending],()=>{Object.values(G.value).forEach(e=>{e.$fieldError=j.$error.value,e.$fieldInvalid=j.$invalid.value,e.$fieldPending=j.$pending.value,e.$fieldCorrect=j.$correct.value})}),F=_(j.$haveAnyAsyncRule,z)}function U(){N=_(n,()=>{j.$autoDirty.value&&!j.$silent.value&&(j.$dirty.value||(j.$dirty.value=!0)),r.value instanceof Function&&R(),(!j.$silent.value||j.$rewardEarly.value&&j.$error.value)&&L(),j.$clearExternalErrorsOnChange.value&&Z()},{deep:x?!0:H?1:!0})}function W(){Object.values(G.value).forEach(e=>{e.$parse()})}let G=u({}),K=u({});R();function q(e,t){if(Z(),j.$dirty.value=!1,c.setDirtyEntry(o,!1),!t)if(e?.toInitialState)n.value=C(S.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,S.value=C(t),n.value=C(t)}else S.value=w(n.value)?C(n.value):Array.isArray(n.value)?[...n.value]:n.value;if(e?.clearExternalErrors&&Z(),!t)for(let e of Object.values(G.value))e.$reset();if(!j.$lazy.value&&!j.$silent.value&&!t)for(let e of Object.values(G.value))e.$parse()}function J(e=!0,t=!1){j.$dirty.value||(j.$dirty.value=!0),t&&e?(!j.$silent.value||j.$rewardEarly.value&&j.$error.value)&&L():e&&L()}async function Y(){try{if(g)return k?(J(!1),k()):{valid:!1,data:n.value};let e=n.value;if(!j.$dirty.value)j.$dirty.value=!0;else if(!j.$silent.value&&j.$dirty.value&&!j.$pending.value)return{valid:!j.$error.value,data:e};if(g)return{valid:!m?.value?.length,data:e};if(b(G.value))return{valid:!0,data:e};let t=await Promise.allSettled(Object.values(G.value).map(e=>e.$parse())),r=t.every(e=>e.status===`fulfilled`&&e.value===!0);return{valid:r,data:e}}catch{return{valid:!1,data:n.value}}}function X(e=!0){return j.$dirty.value?n.value:e?{_null:!0}:null}function Z(){p?.value?.length&&(p.value=[])}!j.$lazy.value&&!j.$dirty.value&&!j.$silent.value&&L();let{$shortcuts:ee,$validating:te,$autoDirty:ie,$rewardEarly:ae,$clearExternalErrorsOnChange:Q,$haveAnyAsyncRule:se,$debounce:ce,$lazy:le,...ue}=j;return l({...ue,$externalErrors:p,$value:n,$rules:G,...ee,$path:a,$reset:q,$touch:J,$validate:Y,$unwatch:B,$watch:V,$extractDirtyFields:X,$clearExternalErrors:Z})}function ce({$id:t,path:n,cachePath:r,index:i,options:a,storage:o,stateValue:s,customMessages:c,rules:l,externalErrors:u,schemaErrors:d,initialState:p,shortcuts:m,fieldName:h,schemaMode:g}){let _=l.$key?l.$key:W(),v=`${n}.${String(_)}`,y=`${n}.${i}`;typeof s.value==`object`&&s.value!=null&&(s.value.$id?v=`${n}.${s.value.$id}`:Object.defineProperties(s.value,{$id:{value:_,enumerable:!1,configurable:!1,writable:!1}}));let b=f(u?.value??[],i),x=e(()=>d?.value?.[i]),S=$({state:s,rulesDef:f(()=>l),customMessages:c,path:y,cachePath:v,storage:o,options:a,externalErrors:b,schemaErrors:x,initialState:p,shortcuts:m,fieldName:h,schemaMode:g});if(S){let e=s.value?.$id;S.$id=e??String(_),o.addArrayStatus(t,S.$id,S)}return S}function le({state:n,rulesDef:r,customMessages:i,path:a,storage:o,options:s,externalErrors:c,schemaErrors:d,schemaMode:p,initialState:m,shortcuts:g,fieldName:y}){let x=t(),S,w=t(),T,E=[];if(!Array.isArray(n.value)&&!r.value.$each)return;let D=u(),O=u(n.value),k=u({}),A,j,M=u({}),N=o.getCollectionsEntry(a);T=w.run(()=>{let t=e(()=>n.value?.length?Array.isArray(n.value)&&n.value.length?n.value.every(e=>typeof e!=`object`):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(e=>X(e)||typeof e==`function`):!1:!1);return{isPrimitiveArray:t}}),P(),L();function P(){k.value=Object.fromEntries(Object.entries(r.value).filter(([e])=>e.startsWith(`$`))),typeof n.value==`object`&&(n.value!=null&&!n.value?.$id&&n.value!==null?(D.value=W(),Object.defineProperties(n.value,{$id:{value:D.value,enumerable:!1,configurable:!1,writable:!1}})):n.value?.$id&&(D.value=n.value.$id)),O.value=M.value.$value,Array.isArray(n.value)&&!T.isPrimitiveArray.value?N.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let{scope:l,unwrapped:u}=z(r.value.$each,f(()=>t),n);l&&E.push(l);let h=f(m.value??[],n),_=f(c?.value??{},`$each`),v=e(()=>d?.value?.$each),b=ce({$id:D.value,path:a,cachePath:a,customMessages:i,rules:u??{},stateValue:f(()=>t),index:n,options:s,storage:o,externalErrors:_,schemaErrors:v,initialState:h,shortcuts:g,fieldName:y,schemaMode:p});return b||null}).filter(e=>!!e):N.value=[],M.value=se({state:n,rulesDef:r,customMessages:i,path:a,cachePath:a,storage:o,options:s,externalErrors:f(c?.value??{},`$self`),schemaErrors:e(()=>d?.value?.$self),$isArray:!0,initialState:m,shortcuts:g,fieldName:y,schemaMode:p})}function F(){if(Array.isArray(n.value)&&!T.isPrimitiveArray.value){let t=C(N.value);N.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let l=f(()=>t);if(t.$id&&N.value.find(e=>e.$id===t.$id)){let e=o.getArrayStatus(D.value,t.$id);return e?(e.$value=l,e):null}else{let{scope:t,unwrapped:u}=z(r.value.$each,l,n);t&&E.push(t);let h=f(c?.value??{},`$each`),_=e(()=>d?.value?.$each??[]),v=ce({$id:D.value,path:a,cachePath:a,customMessages:i,rules:u??{},stateValue:l,index:n,options:s,storage:o,externalErrors:h,schemaErrors:_,initialState:f(m.value??[],n),shortcuts:g,fieldName:y,schemaMode:p});return v||null}}).filter(e=>!!e),t.filter(e=>!n.value?.find(t=>e.$id===t.$id)).forEach((e,t)=>{o.deleteArrayStatus(D.value,t.toString())})}else N.value=[]}function I(){A=_(n,()=>{n.value!=null&&!Object.hasOwn(n.value,`$id`)?P():F()},{deep:H?1:!0,flush:`pre`}),j=_(n,()=>{S.$autoDirty.value&&!S.$silent.value&&B(!1,!0)},{flush:`pre`})}function L(){I(),x=t(),S=x.run(()=>{let r=e({get:()=>n.value,set(e){A?.(),j?.(),n.value=e,I()}}),i=e(()=>M.value.$dirty&&(!N.value.length||N.value.every(e=>e.$dirty))),o=e(()=>M.value.$anyDirty||N.value.some(e=>e.$anyDirty)),c=e(()=>M.value.$invalid||N.value.some(e=>e.$invalid)),d=e(()=>(b(M.value.$rules)?!0:M.value.$correct)&&(!N.value.length||N.value.every(e=>e.$correct||e.$anyDirty&&!e.$invalid))),f=e(()=>M.value.$error||N.value.some(e=>e.$error)),p=e(()=>!(c.value||m.value)),m=e(()=>M.value.$pending||N.value.some(e=>e.$pending)),_=e(()=>!!N.value.length&&N.value.every(e=>e.$edited)),x=e(()=>M.value.$anyEdited||N.value.some(e=>e.$anyEdited)),S=e(()=>({$self:M.value.$issues,$each:N.value.map(e=>e.$issues)})),C=e(()=>({$self:M.value.$errors,$each:N.value.map(e=>e.$errors)})),w=e(()=>({$self:M.value.$silentErrors,$each:N.value.map(e=>e.$silentErrors)})),T=e(()=>k.value.$rewardEarly==null?h(s.rewardEarly)==null?!1:h(s.rewardEarly):k.value.$rewardEarly),D=e(()=>T.value?!0:k.value.$silent==null?h(s.silent)==null?!1:h(s.silent):k.value.$silent),O=e(()=>k.value.$autoDirty==null?h(s.autoDirty)==null?!0:h(s.autoDirty):k.value.$autoDirty),P=e(()=>y);function F(){g?.collections&&Object.entries(g?.collections).forEach(([e,s])=>{let h=t();L[e]=h.run(()=>{let e=u();return v(()=>{e.value=s(l({$dirty:i,$error:f,$path:a,$silentValue:r,$pending:m,$invalid:c,$correct:d,$errors:C,$silentErrors:w,$ready:p,$anyDirty:o,$name:P,$each:N,$self:M,$value:n,$edited:_,$anyEdited:x,$issues:S}))}),e}),E.push(h)})}let L={};return F(),{$dirty:i,$anyDirty:o,$invalid:c,$correct:d,$error:f,$pending:m,$errors:C,$silentErrors:w,$ready:p,$name:P,$shortcuts:L,$silentValue:r,$edited:_,$anyEdited:x,$rewardEarly:T,$silent:D,$autoDirty:O,$issues:S}}),T.isPrimitiveArray.value&&r.value.$each&&console.warn(`${a} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`)}function R(){A?.(),M.value&&M.value.$unwatch(),N.value&&N.value.forEach(e=>{`$dirty`in e&&e.$unwatch()}),x.stop(),x=t(),w.stop(),w=t(!0),E.forEach(e=>e.stop()),E=[]}function B(e=!0,t=!1){M.value.$touch(e,t),N.value.forEach(n=>{n.$touch(e,t)})}function V(e,t){if(R(),!t)if(e?.toInitialState)n.value=C(m.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,m.value=C(t),n.value=C(t)}else m.value=C(n.value);e?.clearExternalErrors&&G(),M.value.$reset(e,t),N.value.forEach(t=>{t.$reset(e,!0)}),t||P()}async function U(){let e=n.value;try{let t=await Promise.allSettled([M.value.$validate(),...N.value.map(e=>e.$validate())]),n=t.every(e=>e.status===`fulfilled`?e.value.valid===!0:!1);return{valid:n,data:e}}catch{return{valid:!1,data:e}}}function G(){M.value.$clearExternalErrors(),N.value.forEach(e=>{e.$clearExternalErrors()})}function K(e=!0){let t=N.value.map(t=>{if(ee(t))return t.$extractDirtyFields(e)});return e&&t.every(e=>b(e))&&(t=[]),t}let{$shortcuts:q,...J}=S;return l({$self:M,...J,...q,$path:a,$each:N,$value:n,$validate:U,$unwatch:R,$watch:L,$touch:B,$reset:V,$extractDirtyFields:K,$clearExternalErrors:G})}function ue({rulesDef:n,state:r,path:i=``,cachePath:a,rootRules:o,externalErrors:s,schemaErrors:c,rootSchemaErrors:d,validationGroups:p,initialState:m,fieldName:g,...y}){let x=t(),S,T=[],E=null,D=null,O=null,k=null,M=null;async function N(t=!0){let o=Object.entries(n.value),l=Object.fromEntries(o.reduce((t,[n,o])=>{if(!o)return t;let l=f(r.value??{},n),u=f(()=>o),d=f(s?.value??{},n),p=e(()=>c?.value?.[n]),h=f(m?.value??{},n);return t.push([n,$({state:l,rulesDef:u,path:i?`${i}.${n}`:n,cachePath:a?`${a}.${n}`:n,externalErrors:d,schemaErrors:p,initialState:h,fieldName:n,...y})]),t},[])),u=Object.fromEntries(Object.entries(h(s)??{}).filter(([e,t])=>!(e in n.value)&&!!t).map(([t])=>{let n=f(r.value??{},t),o=f(s?.value??{},t),l=e(()=>c?.value?.[t]),u=f(m?.value??{},t),d=i?`${i}.${t}`:t,p=a?`${a}.${t}`:t;return[t,$({state:n,rulesDef:e(()=>({})),path:d,cachePath:p,externalErrors:o,schemaErrors:l,initialState:u,fieldName:t,...y})]})),d=Object.fromEntries(Object.entries(h(c)??{}).map(([t])=>{let n=i?`${i}.${t}`:t,o=a?`${a}.${t}`:t,l=f(r.value??{},t),u=f(s?.value??{},t),d=e(()=>c?.value?.[t]),p=f(m?.value??{},t),h=e(()=>({}));return[t,$({state:l,rulesDef:h,path:n,cachePath:o,externalErrors:u,schemaErrors:d,initialState:p,fieldName:t,...y})]})),p=Object.fromEntries(Object.entries(r.value??{}).filter(([e])=>!(e in n.value)&&!(e in(u??{}))&&!(e in(d??{}))).map(([t])=>{let n=f(r.value??{},t),o=f(s?.value??{},t),l=e(()=>c?.value?.[t]),u=f(m?.value??{},t);return[t,$({state:n,rulesDef:e(()=>({})),path:i?`${i}.${t}`:t,cachePath:a?`${a}.${t}`:t,externalErrors:o,schemaErrors:l,initialState:u,fieldName:t,...y})]}));P.value={...l,...u,...d,...p},t&&L()}let P=y.storage.getFieldsEntry(i);N();function F(){s&&(O=_(s,()=>{R(),N()},{deep:!0}))}function I(){k=_(r,()=>{R(),N(),S.$autoDirty.value&&!S.$silent.value&&V(!1,!0)})}function L(){o&&(E?.(),E=_(o,()=>{R(),N()},{deep:!0,flush:`pre`}),F()),d&&(D?.(),D=_(d,()=>{R(),N()},{deep:!0,flush:`post`})),I(),S=x.run(()=>{let n=e({get:()=>r.value,set(e){R(),r.value=e,N(),S.$autoDirty.value&&!S.$silent.value&&V(!1,!0)}}),a=e({get:()=>r.value,set(e){R(),r.value=e,N()}}),o=e(()=>{let e=P.value,t=Object.keys(e);if(!t.length)return!1;for(let n of t)if(!e[n]?.$dirty)return!1;return!0}),s=e(()=>{let e=P.value;for(let t in e)if(e[t]?.$anyDirty)return!0;return!1}),c=e(()=>{let e=P.value,t=Object.entries(e);if(!t.length)return!1;for(let[e,n]of t)if(n?.$invalid)return!0;return!1}),d=e(()=>{let e=Object.entries(P.value).reduce((e,[t,n])=>((!te(n)||!n.$inactive)&&e.push([t,n]),e),[]);return e.length?y.schemaMode?e.every(([e,t])=>t.$correct):e.every(([e,t])=>{if(!te(t))return t?.$correct;let n=`required`in t.$rules&&t.$rules.required.$active;return n?t.$correct:!t.$invalid&&!t.$pending}):!1}),f=e(()=>{let e=P.value;if(!Object.keys(e).length)return!1;for(let t in e)if(e[t]?.$error)return!0;return!1}),m=e(()=>h(y.options.rewardEarly)==null?!1:h(y.options.rewardEarly)),_=e(()=>h(y.options.silent)==null?!!m.value:h(y.options.silent)),b=e(()=>h(y.options.autoDirty)==null?!0:h(y.options.autoDirty)),x=e(()=>(_.value||s.value)&&!(c.value||w.value)),C=u(!1),w=e(()=>{if(C.value)return!0;let e=P.value;for(let t in e)if(e[t]?.$pending)return!0;return!1}),E=e(()=>{let e={};for(let t in P.value)e[t]=P.value[t]?.$issues;return e}),D=e(()=>{let e={};for(let t in P.value)e[t]=P.value[t]?.$errors;return e}),O=e(()=>{let e={};for(let t in P.value)e[t]=P.value[t]?.$silentErrors;return e}),k=e(()=>{if(!Object.keys(P.value).length)return!1;for(let e in P.value)if(!P.value[e]?.$edited)return!1;return!0}),M=e(()=>{for(let e in P.value)if(P.value[e]?.$anyEdited)return!0;return!1}),F=e(()=>g);function I(){y.shortcuts?.nested&&Object.entries(y.shortcuts.nested).forEach(([e,n])=>{let p=t();z[e]=p.run(()=>{let e=u();return v(()=>{e.value=n(l({$dirty:o,$path:i,$value:r,$silentValue:a,$error:f,$pending:w,$invalid:c,$correct:d,$ready:x,$anyDirty:s,$name:F,$silentErrors:O,$errors:D,$fields:P,$edited:k,$anyEdited:M,$issues:E}))}),e}),T.push(p)})}let L=e({get:()=>p?Object.fromEntries(Object.entries(p?.(P.value)??{}).map(([e,t])=>t.length?[e,{...Object.fromEntries([`$invalid`,`$error`,`$pending`,`$dirty`,`$correct`].map(e=>[e,A(t,e)])),...Object.fromEntries([`$errors`,`$silentErrors`].map(e=>[e,j(t,e)]))}]:[])):{},set(){}}),z={};return I(),{$dirty:o,$anyDirty:s,$invalid:c,$correct:d,$error:f,$pending:w,$issues:E,$errors:D,$silentErrors:O,$ready:x,$name:F,$shortcuts:z,$groups:L,$silentValue:a,$edited:k,$anyEdited:M,$localPending:C,$autoDirty:b,$silent:_,$value:n}})}function R(){if(E?.(),O?.(),k?.(),M?.(),D?.(),T=[],S={},P.value)for(let e of Object.values(P.value))e.$unwatch()}function z(){let e=P.value;for(let t of Object.values(e))t.$clearExternalErrors()}function B(e,t){if(O?.(),R(),!t)if(e?.toInitialState)r.value=C({...m.value??{}});else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,m.value=C(t),r.value=C(t)}else m.value=C(r.value);for(let t of Object.values(P.value))t.$reset(e,!0);e?.clearExternalErrors&&z(),F(),t||N()}function V(e=!0,t=!1){for(let n of Object.values(P.value))n.$touch(e,t)}function H(e){return e.filter(([e,t])=>w(t)?!(t&&typeof t==`object`&&`_null`in t)&&!b(t):Array.isArray(t)?t.length:!0)}function U(e=!0){let t=Object.entries(P.value).map(([t,n])=>[t,n.$extractDirtyFields(e)]);return e&&(t=H(t)),Object.fromEntries(t)}async function W(){try{if(y.schemaMode)return y.onValidate?(V(!1),S.$localPending.value=!0,y.onValidate()):{valid:!1,data:r.value};{let e=r.value,t=await Promise.allSettled(Object.values(P.value).map(e=>e.$validate())),n=t.every(e=>e.status===`fulfilled`&&e?.value.valid===!0);return{valid:n,data:e}}}catch{return{valid:!1,data:r.value}}finally{S.$localPending.value=!1}}let{$shortcuts:G,$localPending:K,...q}=S;return l({...q,...G,$path:i,$fields:P,$reset:B,$touch:V,$validate:W,$unwatch:R,$watch:L,$clearExternalErrors:z,$extractDirtyFields:U})}function $({rulesDef:e,...n}){if(J(e,n.state,n.schemaMode))return le({rulesDef:e,...n});if(q(n.state,e)){if(R(n.state))return ue({rulesDef:e,...n});{let r=t(),i=r.run(()=>{let e=f(n.state.value?n.state:u({}));return _(()=>n.state.value,t=>{e.value=t},{deep:!0}),_(e,e=>{n.state.value=e},{deep:!0}),{fakeState:e}}),{state:a,...o}=n;return ue({rulesDef:e,...o,state:i.fakeState})}}else if(Y(e))return se({rulesDef:e,...n})}function de({initialState:e,options:t,scopeRules:n,state:i,customRules:a,shortcuts:o,schemaErrors:s,schemaMode:d=!1,onValidate:f}){let p=L(),m=u();return q(i,n)?m.value=ue({rootRules:n,rulesDef:n,state:i,customMessages:a?.(),storage:p,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:`root`,path:``,cachePath:``,schemaErrors:s,rootSchemaErrors:s,schemaMode:d,onValidate:f}):Y(n)&&(m.value=se({rulesDef:n,state:i,customMessages:a?.(),storage:p,options:t,externalErrors:t.externalErrors,initialState:e,shortcuts:o,fieldName:`root`,path:``,cachePath:``,schemaMode:d,schemaErrors:s,onValidate:f})),r()&&c(()=>{m.value?.$unwatch()}),l({regle:m})}function fe(t,n,r){let a={autoDirty:n?.autoDirty,lazy:n?.lazy,rewardEarly:n?.rewardEarly,silent:n?.silent,clearExternalErrorsOnChange:n?.clearExternalErrorsOnChange};function o(n,o,s){let c=i(o)?o:typeof o==`function`?void 0:e(()=>o),l={...a,...s},f=i(n)?n:u(n),p=d(c??{});typeof o==`function`&&v(()=>{p.value=o(f),m(p)});let h=u(w(f.value)?{...C(f.value)}:C(f.value)),g=de({scopeRules:p,state:f,options:l,initialState:h,customRules:t,shortcuts:r});return{r$:g.regle}}return o}const pe=fe();function me(){function e(e,t){return t}return e}const he=me();function ge({rules:e,modifiers:t,shortcuts:n}){let r=fe(e,t,n);r.__config={rules:e,modifiers:t,shortcuts:n};let i=me();return{useRegle:r,inferRules:i}}function _e(e,{rules:t,modifiers:n,shortcuts:r}){let i=e.__config??{},a=()=>({...i.rules?.(),...t?.()}),o=i.modifiers&&n?T(i.modifiers,n):n,s=i.shortcuts&&r?T(i.shortcuts,r):r,c=fe(a,o,s);c.__config={rules:a,modifiers:o,shortcuts:s};let l=me();return{useRegle:c,inferRules:l}}function ve(t,n){let r=n??!1,i=e({get:()=>r?Object.values(t).map(e=>e.$value):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$value])),set:e=>{r||typeof e==`object`&&Object.entries(e).forEach(([e,n])=>t[e].$value=n)}}),a=e({get:()=>Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentValue])),set:e=>{typeof e==`object`&&Object.entries(e).forEach(([e,n])=>t[e].$silentValue=n)}}),o=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$dirty)}),s=e(()=>Object.entries(t).some(([e,t])=>t?.$anyDirty)),c=e(()=>Object.entries(t).some(([e,t])=>t?.$invalid)),u=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$correct||t.$anyDirty&&!t.$invalid)}),d=e(()=>Object.entries(t).some(([e,t])=>t?.$error)),f=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$ready)}),p=e(()=>Object.entries(t).some(([e,t])=>t?.$pending)),m=e(()=>r?Object.entries(t).map(([e,t])=>t.$errors):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$errors]))),h=e(()=>r?Object.entries(t).map(([e,t])=>t.$silentErrors):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentErrors]))),g=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$edited)}),_=e(()=>Object.entries(t).some(([e,t])=>t?.$anyEdited)),v=e(()=>r?Object.values(t):t);function y(e){Object.values(t).forEach(t=>{t.$reset(e)})}function b(){Object.values(t).forEach(e=>{e.$touch()})}function x(e=!0){return Object.values(t).map(t=>t.$extractDirtyFields(e))}function S(){Object.values(t).forEach(e=>{e.$clearExternalErrors()})}async function C(){try{let e=i.value,n=await Promise.allSettled(Object.values(t).map(e=>e.$validate())),r=n.every(e=>e.status===`fulfilled`?e.value.valid===!0:!1);return{valid:r,data:e}}catch{return{valid:!1,data:i.value}}}return l({...!r&&{$silentValue:a},$errors:m,$silentErrors:h,$instances:v,$value:i,$dirty:o,$anyDirty:s,$invalid:c,$correct:u,$error:d,$pending:p,$ready:f,$edited:g,$anyEdited:_,$reset:y,$touch:b,$validate:C,$extractDirtyFields:x,$clearExternalErrors:S})}function ye(t,n){function r(r){let i=e(()=>p(r));s();let a=u(c(t.value)),o=l({r$:a});function s(){i.value&&!t.value[i.value]&&(t.value[i.value]={})}_(i,s),_(t,e=>{a.value=c(e)},{deep:!0});function c(e){if(i.value){let t=e[i.value]??{};return ve(t,!n.asRecord)}else return ve(e[`~~global`]??{},!n.asRecord)}return{r$:o.r$}}return{useCollectScope:r}}function be(t,r){let i=r??pe,a=(r,a,o)=>{let{namespace:c,scopeKey:l,...d}=o??{};i.__config??={};let f=e(()=>p(c)),m=u(`${Object.keys(t.value).length+1}-${W()}`),h=e(()=>o?.scopeKey??`instance-${m.value}`),{r$:g}=i(r,a,d);y(),G(v),_(f,(e,t)=>{v(t),y()}),n()&&s(()=>{let e=n();typeof window<`u`&&e?.proxy?.$el?.parentElement&&document.documentElement&&!document.documentElement.contains(e?.proxy?.$el?.parentElement)&&v()});function v(e){let n=e??f.value;n?t.value[n]&&delete t.value[n][h.value]:t.value[`~~global`][h.value]&&delete t.value[`~~global`][h.value]}function y(){f.value?(t.value[f.value]||(t.value[f.value]={}),t.value[f.value][h.value]=g):(t.value[`~~global`]||(t.value[`~~global`]={}),t.value[`~~global`][h.value]=g)}return{r$:g,dispose:v,register:y}};return{useScopedRegle:a}}function xe(e){let t=e?.customStore?()=>(e.customStore&&(e.customStore?.value[`~~global`]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value[`~~global`]={}),e.customStore):K(()=>{let e=u({"~~global":{}});return e}),n=t(),{useScopedRegle:r}=be(n,e?.customUseRegle),{useCollectScope:i}=ye(n,{asRecord:e?.asRecord});return{useScopedRegle:r,useCollectScope:i}}const{useCollectScope:Se,useScopedRegle:Ce}=xe();function we(t,n,r){let i=e(()=>p(t)[n]),a=e(()=>{let e=r.find(e=>{if(e[n]&&`literal`in e[n]){let t=e[n].literal;if(X(t))return h(t._params?.[0])===i.value}});if(e)return e;{let e=r.find(e=>w(e[n])&&!Object.keys(e[n]).some(e=>e===`literal`));return e||{}}});return a}function Te(e,t,n){return w(e[t])&&`$value`in e[t]&&e[t]?.$value===n}function Ee(e,t,n){let r=i(e)?f(e.value,`$fields`):f(e,`$fields`),a=u();return _(r,async()=>{await o(),Te(r.value,t,n)?a.value=r.value:a.value=void 0},{immediate:!0,flush:`pre`}),a}function De(e){return e}function Oe(e,t){return n=>T({...e},t(n))}export{k as InternalRuleType,I as createRule,xe as createScopedUseRegle,we as createVariant,ge as defineRegleConfig,De as defineRules,_e as extendRegleConfig,ae as flatErrors,he as inferRules,ve as mergeRegles,Te as narrowVariant,Oe as refineRules,M as unwrapRuleParameters,Se as useCollectScope,pe as useRegle,de as useRootStorage,Ce as useScopedRegle,Ee as variantToRef};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regle/core",
3
- "version": "1.4.0-beta.2",
3
+ "version": "1.4.0",
4
4
  "description": "Headless form validation library for Vue 3",
5
5
  "peerDependencies": {
6
6
  "pinia": ">=2.2.5",