@regle/core 1.2.0-beta.1 → 1.2.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  # Regle
6
6
 
7
7
 
8
- Regle \ʁɛɡl\ (French word for 'rule' ) is a Typescript-first model-based validation library for Vue 3.
8
+ Regle \ʁɛɡl\ (French word for 'rule') is a Typescript-first model-based validation library for Vue 3.
9
9
  It's heavily inspired by Vuelidate.
10
10
 
11
11
 
@@ -15,14 +15,20 @@ It's heavily inspired by Vuelidate.
15
15
 
16
16
  ## 🎮 Play with it
17
17
 
18
- | Simple demo | Advanced Demo |
19
- | ------------- | ------------- |
20
- | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/simple-example?file=examples/simple-example/src/App.vue&configPath=examples/simple-example) | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/advanced-example?file=examples/advanced-example/src/App.vue&configPath=examples/advanced-example) |
18
+ | Playground | Simple demo | Advanced Demo |
19
+ | ------------- | ------------- | ------------- |
20
+ | <a target='_blank' href="https://play.reglejs.dev"><img width="180" src="https://raw.githubusercontent.com/victorgarciaesgi/regle/refs/heads/main/.github/images/regle-playground-button.svg" /></a> | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/simple-example?file=examples/simple-example/src/App.vue&configPath=examples/simple-example) | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/advanced-example?file=examples/advanced-example/src/App.vue&configPath=examples/advanced-example) |
21
21
 
22
22
  ## 🧰 Features
23
- - ✅ 100% type inference
24
- - 📖 Model based validation
25
- - 🪗 Extensible
26
- - 🛒 Collection validation
27
- - 🦸‍♂️ [Zod](https://zod.dev/) support
28
- - 🤖 [Valibot](https://valibot.dev/) support
23
+
24
+ - ☁️ Headless
25
+ - Type safety
26
+ - 🧮 Model based
27
+ - 🧰 Modular
28
+ - 🔄 Async validation
29
+ - 🌐 Plug any i18n library
30
+ - 📗 Vuelidate compatible API
31
+ - Standard Schemas spec support
32
+ - 🦸‍♂️ [Zod](https://zod.dev/)
33
+ - 🤖 [Valibot](https://valibot.dev/)
34
+ - 🚢 [ArkType](https://arktype.io) 🚧
@@ -1080,20 +1080,27 @@ interface RegleBehaviourOptions {
1080
1080
  */
1081
1081
  lazy?: boolean | undefined;
1082
1082
  /**
1083
- * Automaticaly set the dirty set without the need of `$value` or `$touch`
1083
+ * Automatically set the dirty set without the need of `$value` or `$touch`.
1084
1084
  * @default true
1085
1085
  *
1086
- * @default false if rewardEarly is true
1087
-
1088
1086
  */
1089
1087
  autoDirty?: boolean | undefined;
1088
+ /**
1089
+ * Only update error status when calling `$validate`.
1090
+ * Will not display errors as you type
1091
+ * @default false
1092
+ *
1093
+ * @default true if rewardEarly is true
1094
+ *
1095
+ */
1096
+ silent?: boolean | undefined;
1090
1097
  /**
1091
1098
  * The fields will turn valid when they are, but not invalid unless calling `r$.$validate()`
1092
1099
  * @default false
1093
1100
  */
1094
1101
  rewardEarly?: boolean | undefined;
1095
1102
  /**
1096
- * Define wether or not the external errors should be cleared when updating a field
1103
+ * Define whether the external errors should be cleared when updating a field
1097
1104
  * @default true
1098
1105
  *
1099
1106
  */
@@ -1125,15 +1132,15 @@ type ShortcutCommonFn<T extends Record<string, any>> = {
1125
1132
  };
1126
1133
  type RegleShortcutDefinition<TCustomRules extends Record<string, any> = {}> = {
1127
1134
  /**
1128
- * Allow you to customize the properties of every single field
1135
+ * Allow you to customize the properties for every field
1129
1136
  */
1130
1137
  fields?: ShortcutCommonFn<RegleFieldStatus<any, Partial<TCustomRules> & Partial<DefaultValidators>>>;
1131
1138
  /**
1132
- * Allow you to customize the properties of every parent of a nested object
1139
+ * Allow you to customize the properties for every parent of a nested object
1133
1140
  */
1134
1141
  nested?: ShortcutCommonFn<RegleStatus<Record<string, any>, ReglePartialRuleTree<any, Partial<TCustomRules> & Partial<DefaultValidators>>>>;
1135
1142
  /**
1136
- * Allow you to customize the properties of every parent of a collection
1143
+ * Allow you to customize the properties for every parent of a collection
1137
1144
  */
1138
1145
  collections?: ShortcutCommonFn<RegleCollectionStatus<any[], Partial<TCustomRules> & Partial<DefaultValidators>>>;
1139
1146
  };
@@ -1143,7 +1150,7 @@ type AddDollarToOptions<T extends Record<string, any>> = {
1143
1150
 
1144
1151
  type Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> = EmptyObject, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}, TShortcuts extends RegleShortcutDefinition = {}, TAdditionalReturnProperties extends Record<string, any> = {}> = {
1145
1152
  /**
1146
- * r$ is a reactive object containing the values, errors, dirty state and all the necessary validations properties you'll need to display informations.
1153
+ * r$ is a reactive object containing the values, errors, dirty state and all the necessary validations properties you'll need to display information.
1147
1154
  *
1148
1155
  * To see the list of properties: {@link https://reglejs.dev/core-concepts/validation-properties}
1149
1156
  */
@@ -1151,7 +1158,7 @@ type Regle<TState extends Record<string, any> = EmptyObject, TRules extends Regl
1151
1158
  } & TAdditionalReturnProperties;
1152
1159
  type RegleSingleField<TState extends Maybe<PrimitiveTypes> = any, TRules extends RegleRuleDecl<NonNullable<TState>> = EmptyObject, TShortcuts extends RegleShortcutDefinition = {}, TAdditionalReturnProperties extends Record<string, any> = {}> = {
1153
1160
  /**
1154
- * r$ is a reactive object containing the values, errors, dirty state and all the necessary validations properties you'll need to display informations.
1161
+ * r$ is a reactive object containing the values, errors, dirty state and all the necessary validations properties you'll need to display information.
1155
1162
  *
1156
1163
  * To see the list of properties: {@link https://reglejs.dev/core-concepts/validation-properties}
1157
1164
  */
@@ -1171,7 +1178,7 @@ type ResetOptions<TState extends unknown> = RequireOneOrNone<{
1171
1178
  toInitialState?: boolean;
1172
1179
  /**
1173
1180
  * Reset validation status and reset form state to the given state
1174
- * Also set the new state as new initial state.
1181
+ * Also set the new state as the initial state.
1175
1182
  */
1176
1183
  toState?: TState | (() => TState);
1177
1184
  /**
@@ -1210,16 +1217,16 @@ type $InternalRegleResult = {
1210
1217
  data: any;
1211
1218
  };
1212
1219
  type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Record<string, any>, CustomRulesDeclarationTree> | undefined> = [unknown] extends [TState] ? {} : TRules extends undefined ? TState : TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> ? Prettify<{
1213
- [K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? K : never]?: SafeProperty<TState[K], TRules[K]>;
1220
+ [K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? K : never]?: SafeProperty<TState[K], TRules[K]> extends MaybeInput<infer M> ? MaybeOutput<M> : SafeProperty<TState[K], TRules[K]>;
1214
1221
  } & {
1215
- [K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? never : K]-?: NonNullable<SafeProperty<TState[K], TRules[K]>>;
1222
+ [K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? never : K]-?: unknown extends SafeProperty<TState[K], TRules[K]> ? unknown : NonNullable<SafeProperty<TState[K], TRules[K]>>;
1216
1223
  }> : TState;
1217
1224
  type FieldHaveRequiredRule<TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleRuleDecl<any, any> ? [unknown] extends TRule['required'] ? NonNullable<TRule['literal']> extends RegleRuleDefinition<any, any[], any, any, any, any> ? true : false : NonNullable<TRule['required']> extends TRule['required'] ? TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any, any> ? Params extends never[] ? true : false : false : false : false;
1218
1225
  type ObjectHaveAtLeastOneRequiredField<TState extends Record<string, any>, TRule extends ReglePartialRuleTree<TState, any>> = TState extends Maybe<TState> ? {
1219
1226
  [K in keyof NonNullable<TState>]-?: IsPropertyOutputRequired<NonNullable<TState>[K], TRule[K]>;
1220
1227
  }[keyof TState] extends false ? false : true : true;
1221
1228
  type ArrayHaveAtLeastOneRequiredField<TState extends Maybe<any[]>, TRule extends RegleCollectionRuleDecl<TState>> = TState extends Maybe<TState> ? FieldHaveRequiredRule<Omit<TRule, '$each'> extends RegleRuleDecl ? Omit<TRule, '$each'> : {}> | ObjectHaveAtLeastOneRequiredField<ArrayElement<NonNullable<TState>>, ExtractFromGetter<TRule['$each']> extends undefined ? {} : NonNullable<ExtractFromGetter<TRule['$each']>>> extends false ? false : true : true;
1222
- type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = [unknown] extends [TState] ? unknown : TRule extends RegleCollectionRuleDecl<any, any> ? TState extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, ExtractFromGetter<TRule['$each']>>[] : TState : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? DeepSafeFormState<NonNullable<TState> extends Record<string, any> ? JoinDiscriminatedUnions<NonNullable<TState>> : {}, TRule> : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends true ? TState : MaybeOutput<TState> : TState : TState;
1229
+ type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = unknown extends TState ? unknown : TRule extends RegleCollectionRuleDecl<any, any> ? TState extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, ExtractFromGetter<TRule['$each']>>[] : TState : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? DeepSafeFormState<NonNullable<TState> extends Record<string, any> ? JoinDiscriminatedUnions<NonNullable<TState>> : {}, TRule> : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends true ? TState : MaybeOutput<TState> : TState : TState;
1223
1230
  type IsPropertyOutputRequired<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = [
1224
1231
  unknown
1225
1232
  ] extends [TState] ? unknown : NonNullable<TState> extends Array<any> ? TRule extends RegleCollectionRuleDecl<any, any> ? ArrayHaveAtLeastOneRequiredField<NonNullable<TState>, TRule> extends false ? false : true : false : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? ObjectHaveAtLeastOneRequiredField<NonNullable<TState> extends Record<string, any> ? NonNullable<TState> : {}, TRule> extends false ? false : true : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends false ? false : true : false : false;
@@ -1772,7 +1779,7 @@ declare function useRootStorage({ initialState, options, scopeRules, state, cust
1772
1779
  };
1773
1780
 
1774
1781
  /**
1775
- * Converts an nested $errors object to a flat array of string errors
1782
+ * Converts a nested $errors object to a flat array of string errors
1776
1783
  *
1777
1784
  * Can also flatten to an array containing the path of each error with the options.includePath
1778
1785
  */
@@ -1802,7 +1809,7 @@ type RemoveCommonKey<T extends readonly any[], K extends PropertyKey> = T extend
1802
1809
  */
1803
1810
  type GetMaybeObjectValue<O extends Record<string, any>, K extends string> = K extends keyof O ? O[K] : undefined;
1804
1811
  /**
1805
- * Combine all unions values to be able to get even the normally "never" values, act as an intersection type
1812
+ * Combine all union values to be able to get even the normally "never" values, act as an intersection type
1806
1813
  */
1807
1814
  type RetrieveUnionUnknownValues<T extends readonly any[], TKeys extends string> = T extends [
1808
1815
  infer F extends Record<string, any>,
@@ -1816,15 +1823,15 @@ type RetrieveUnionUnknownValues<T extends readonly any[], TKeys extends string>
1816
1823
  ...RetrieveUnionUnknownValues<R, TKeys>
1817
1824
  ] : [];
1818
1825
  /**
1819
- * Get all possible keys from an union, even the ones present only on one union
1826
+ * Get all possible keys from a union, even the ones present only on one union
1820
1827
  */
1821
1828
  type RetrieveUnionUnknownKeysOf<T extends readonly any[]> = T extends [infer F, ...infer R] ? [keyof F, ...RetrieveUnionUnknownKeysOf<R>] : [];
1822
1829
  /**
1823
- * Transforms an union and apply undefined values to non-present keys to support intersection
1830
+ * Transforms a union and apply undefined values to non-present keys to support intersection
1824
1831
  */
1825
1832
  type NormalizeUnion<TUnion> = RetrieveUnionUnknownValues<NonNullable<UnionToTuple$1<TUnion>>, RetrieveUnionUnknownKeysOf<NonNullable<UnionToTuple$1<TUnion>>>[number]>[number];
1826
1833
  /**
1827
- * Combine all members of an union type, merging types for each keys, and keeping loose types
1834
+ * Combine all members of a union type, merging types for each key, and keeping loose types
1828
1835
  */
1829
1836
  type JoinDiscriminatedUnions<TUnion extends unknown> = isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection$1<RemoveCommonKey<UnionToTuple$1<TUnion>, keyof NormalizeUnion<TUnion>>[number]>> & Pick<NormalizeUnion<TUnion>, keyof NormalizeUnion<TUnion>>> : TUnion;
1830
1837
  type LazyJoinDiscriminatedUnions<TUnion extends unknown> = isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection$1<RemoveCommonKey<UnionToTuple$1<TUnion>, keyof NonNullable<TUnion>>[number]>> & Pick<NonNullable<TUnion>, keyof NonNullable<TUnion>>> : TUnion;
@@ -1858,7 +1865,7 @@ type FilterRulesWithInput<TRules extends RegleRuleDecl<any, any>> = {
1858
1865
  [K in keyof TRules as TRules[K] extends RegleRuleDefinition<any, any, any, any, infer Input> ? unknown extends Input ? never : K : never]: TRules[K] extends RegleRuleDefinition<any, any, any, any, infer Input> ? Input : unknown;
1859
1866
  };
1860
1867
  type FilterRulesWithSingleType<TRules extends RegleRuleDecl<any, any>> = {
1861
- [K in keyof TRules as TRules[K] extends RegleRuleDefinition<any, any, any, any, infer Input> ? unknown extends Input ? never : K : never]: TRules[K] extends RegleRuleDefinition<any, any, any, any, infer Input> ? IsUnion$1<NonNullable<Input>> extends true ? unknown : Input : unknown;
1868
+ [K in keyof TRules as TRules[K] extends RegleRuleDefinition<any, any, any, any, infer Input> ? unknown extends Input ? never : IsUnion$1<NonNullable<Input>> extends true ? never : K : never]: TRules[K] extends RegleRuleDefinition<any, any, any, any, infer Input> ? IsUnion$1<NonNullable<Input>> extends true ? unknown : Input : unknown;
1862
1869
  };
1863
1870
  type InferTupleUnionInput<T extends any[]> = T extends [infer F extends ReglePartialRuleTree, ...infer R] ? [InferInput<F, true>, ...InferTupleUnionInput<R>] : [];
1864
1871
 
@@ -1876,9 +1883,9 @@ type UnwrapRegleUniversalParams<T extends MaybeRefOrGetter[] = [], F = CreateFn<
1876
1883
  }) => any : never>;
1877
1884
 
1878
1885
  /**
1879
- * Internal definition of the rule, can be used to reset or patch the rule
1886
+ * Internal definition of the rule, this can be used to reset or patch the rule
1880
1887
  */
1881
- interface RegleInternalRuleDefs<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> {
1888
+ type RegleInternalRuleDefs<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> = Raw<{
1882
1889
  _validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
1883
1890
  _message: string | string[] | ((metadata: PossibleRegleRuleMetadataConsumer<TValue>) => string | string[]);
1884
1891
  _active?: boolean | ((metadata: PossibleRegleRuleMetadataConsumer<TValue>) => boolean);
@@ -1889,7 +1896,7 @@ interface RegleInternalRuleDefs<TValue extends any = any, TParams extends any[]
1889
1896
  _params?: RegleUniversalParams<TParams>;
1890
1897
  _async: TAsync;
1891
1898
  readonly _brand: symbol;
1892
- }
1899
+ }>;
1893
1900
  declare const InternalRuleType: {
1894
1901
  readonly Inline: "__inline";
1895
1902
  readonly Async: "__async";
@@ -1939,7 +1946,7 @@ type DefaultMetadataProperties = DefaultMetadataPropertiesCommon & {
1939
1946
  $rule: Pick<$InternalRegleRuleStatus, '$valid' | '$pending'>;
1940
1947
  };
1941
1948
  /**
1942
- * Will be used to consumme metadata on related helpers and rule status
1949
+ * Will be used to consume metadata on related helpers and rule status
1943
1950
  */
1944
1951
  type RegleRuleMetadataConsumer<TValue extends any, TParams extends [...any[]] = never, TMetadata extends RegleRuleMetadataDefinition = boolean> = {
1945
1952
  $value: Maybe<TValue>;
@@ -1947,7 +1954,7 @@ type RegleRuleMetadataConsumer<TValue extends any, TParams extends [...any[]] =
1947
1954
  $params: [...TParams];
1948
1955
  }) & (Exclude<TMetadata, boolean> extends RegleRuleMetadataExtended ? TMetadata extends boolean ? Partial<Omit<Exclude<TMetadata, boolean>, '$valid'>> : Omit<Exclude<TMetadata, boolean>, '$valid'> : {});
1949
1956
  /**
1950
- * Will be used to consumme metadata on related helpers and rule status
1957
+ * Will be used to consume metadata on related helpers and rule status
1951
1958
  */
1952
1959
  type PossibleRegleRuleMetadataConsumer<TValue> = {
1953
1960
  $value: Maybe<TValue>;
@@ -1964,7 +1971,7 @@ type RegleRuleRawInput<TValue extends any = any, TParams extends [...any[]] = [.
1964
1971
  tooltip?: any;
1965
1972
  };
1966
1973
  /**
1967
- * Process the type of a created rule with `createRule`.
1974
+ * Process the type of created rule with `createRule`.
1968
1975
  * For a rule with params it will return a function
1969
1976
  * Otherwise it will return the rule definition
1970
1977
  */
@@ -2024,29 +2031,34 @@ type DefaultValidators = {
2024
2031
  alpha: RegleRuleWithParamsDefinition<string, [options?: CommonAlphaOptions | undefined]>;
2025
2032
  alphaNum: RegleRuleWithParamsDefinition<string | number, [options?: CommonAlphaOptions | undefined]>;
2026
2033
  between: RegleRuleWithParamsDefinition<number, [min: Maybe<number>, max: Maybe<number>]>;
2034
+ boolean: RegleRuleDefinition<unknown, [], false, boolean, any, unknown>;
2027
2035
  checked: RegleRuleDefinition<boolean, [], false, boolean, boolean>;
2028
2036
  contains: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
2037
+ date: RegleRuleDefinition<unknown, [], false, boolean, MaybeInput<Date>, unknown>;
2029
2038
  dateAfter: RegleRuleWithParamsDefinition<string | Date, [
2030
- after: Maybe<string | Date>
2039
+ after: Maybe<string | Date>,
2040
+ options?: CommonComparisonOptions
2031
2041
  ], false, true | {
2032
2042
  $valid: false;
2033
2043
  error: 'date-not-after';
2034
2044
  } | {
2035
2045
  $valid: false;
2036
- error: 'value-or-paramater-not-a-date';
2046
+ error: 'value-or-parameter-not-a-date';
2037
2047
  }>;
2038
2048
  dateBefore: RegleRuleWithParamsDefinition<string | Date, [
2039
- before: Maybe<string | Date>
2049
+ before: Maybe<string | Date>,
2050
+ options?: CommonComparisonOptions
2040
2051
  ], false, true | {
2041
2052
  $valid: false;
2042
2053
  error: 'date-not-before';
2043
2054
  } | {
2044
2055
  $valid: false;
2045
- error: 'value-or-paramater-not-a-date';
2056
+ error: 'value-or-parameter-not-a-date';
2046
2057
  }>;
2047
2058
  dateBetween: RegleRuleWithParamsDefinition<string | Date, [
2048
2059
  before: Maybe<string | Date>,
2049
- after: Maybe<string | Date>
2060
+ after: Maybe<string | Date>,
2061
+ options?: CommonComparisonOptions
2050
2062
  ], false, boolean>;
2051
2063
  decimal: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
2052
2064
  email: RegleRuleDefinition<string, [], false, boolean, string>;
@@ -2055,6 +2067,7 @@ type DefaultValidators = {
2055
2067
  count: number
2056
2068
  ], false, boolean>;
2057
2069
  exactValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
2070
+ hexadecimal: RegleRuleDefinition<string, [], false, boolean, string>;
2058
2071
  integer: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
2059
2072
  ipv4Address: RegleRuleDefinition<string, [], false, boolean, string>;
2060
2073
  literal: RegleRuleDefinition<string | number, [literal: string | number], false, boolean, string | number>;
@@ -2070,11 +2083,13 @@ type DefaultValidators = {
2070
2083
  ], false, boolean>;
2071
2084
  minValue: RegleRuleWithParamsDefinition<number, [count: number, options?: CommonComparisonOptions], false, boolean>;
2072
2085
  nativeEnum: RegleRuleDefinition<string | number, [enumLike: EnumLike], false, boolean, string | number>;
2086
+ number: RegleRuleDefinition<unknown, [], false, boolean, any, unknown>;
2073
2087
  numeric: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
2074
2088
  oneOf: RegleRuleDefinition<string | number, [options: (string | number)[]], false, boolean, string | number>;
2075
2089
  regex: RegleRuleWithParamsDefinition<string, [regexp: RegExp], false, boolean>;
2076
2090
  required: RegleRuleDefinition<unknown, []>;
2077
2091
  sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown, otherName?: string], false, boolean>;
2092
+ string: RegleRuleDefinition<unknown, [], false, boolean, any, unknown>;
2078
2093
  type: RegleRuleDefinition<unknown, [], false, boolean, unknown, unknown>;
2079
2094
  startsWith: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
2080
2095
  url: RegleRuleDefinition<string, [], false, boolean, string>;
@@ -2252,7 +2267,7 @@ interface $InternalRegleStatus extends $InternalRegleCommonStatus {
2252
2267
  /**
2253
2268
  * @public
2254
2269
  */
2255
- type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialRuleTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string, TShortcuts extends RegleShortcutDefinition = {}> = [TState[TKey]] extends [undefined] ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Array<infer U extends Record<string, any>> ? ExtendOnlyRealRecord<U> extends true ? TRule extends RegleCollectionRuleDefinition<any, any> ? ExtractFromGetter<TRule['$each']> extends ReglePartialRuleTree<any> ? RegleCollectionStatus<TState[TKey], ExtractFromGetter<TRule['$each']>, TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : RegleCollectionStatus<TState[TKey], {}, TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : TRule extends ReglePartialRuleTree<any> ? NonNullable<TState[TKey]> extends Array<any> ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? MaybeVariantStatus<TState[TKey], TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? MaybeVariantStatus<TState[TKey], ReglePartialRuleTree<TState[TKey]>, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts>;
2270
+ type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialRuleTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string, TShortcuts extends RegleShortcutDefinition = {}> = [TState[TKey]] extends [undefined | null] ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Array<infer U extends Record<string, any>> ? ExtendOnlyRealRecord<U> extends true ? TRule extends RegleCollectionRuleDefinition<any, any> ? ExtractFromGetter<TRule['$each']> extends ReglePartialRuleTree<any> ? RegleCollectionStatus<TState[TKey], ExtractFromGetter<TRule['$each']>, TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : RegleCollectionStatus<TState[TKey], {}, TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : TRule extends ReglePartialRuleTree<any> ? NonNullable<TState[TKey]> extends Array<any> ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : unknown extends TState[TKey] ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? MaybeVariantStatus<TState[TKey], TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : unknown extends TState[TKey] ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? MaybeVariantStatus<TState[TKey], ReglePartialRuleTree<TState[TKey]>, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts>;
2256
2271
  /**
2257
2272
  * @internal
2258
2273
  * @reference {@link InferRegleStatusType}
@@ -2534,13 +2549,13 @@ declare function createRule<TValue extends any, TParams extends any[], TReturn e
2534
2549
 
2535
2550
  /**
2536
2551
  * Returns a clean list of parameters
2537
- * Removing Ref and executing function to return the unwraped value
2552
+ * Removing Ref and executing function to return the unwrapped value
2538
2553
  */
2539
2554
  declare function unwrapRuleParameters<TParams extends any[]>(params: MaybeRefOrGetter[]): TParams;
2540
2555
 
2541
2556
  /**
2542
2557
  * Define a global regle configuration, where you can:
2543
- * - Customize buil-in rules messages
2558
+ * - Customize built-in rules messages
2544
2559
  * - Add your custom rules
2545
2560
  * - Define global modifiers
2546
2561
  * - Define shortcuts
@@ -2578,7 +2593,7 @@ declare function extendRegleConfig<TRootCustomRules extends Partial<AllRulesDecl
2578
2593
  type MergedRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TValue = {
2579
2594
  [K in keyof TRegles]: TRegles[K]['$value'];
2580
2595
  }> = Omit<RegleCommonStatus, '$value' | '$silentValue' | '$errors' | '$silentErrors' | '$name' | '$unwatch' | '$watch'> & {
2581
- /** Dictionnay of merged Regle instances and their properties */
2596
+ /** Map of merged Regle instances and their properties */
2582
2597
  readonly $instances: {
2583
2598
  [K in keyof TRegles]: TRegles[K];
2584
2599
  };
@@ -2677,7 +2692,7 @@ declare const useScopedRegle: useRegleFn<Partial<AllRulesDeclarations>, never, {
2677
2692
  * })
2678
2693
  * ```
2679
2694
  */
2680
- declare function createVariant<TForm extends Record<string, any>, TDiscriminant extends keyof JoinDiscriminatedUnions<TForm>, TVariants extends VariantTuple<JoinDiscriminatedUnions<TForm>, TDiscriminant>>(root: MaybeRefOrGetter<TForm> | DeepReactiveState<TForm>, disciminantKey: TDiscriminant, variants: [...TVariants]): Ref<TVariants[number]>;
2695
+ declare function createVariant<TForm extends Record<string, any>, TDiscriminant extends keyof JoinDiscriminatedUnions<TForm>, TVariants extends VariantTuple<JoinDiscriminatedUnions<TForm>, TDiscriminant>>(root: MaybeRefOrGetter<TForm> | DeepReactiveState<TForm>, discriminantKey: TDiscriminant, variants: [...TVariants]): Ref<TVariants[number]>;
2681
2696
  /**
2682
2697
  * Narrow a nested variant field to a discriminated value
2683
2698
  *
@@ -2709,7 +2724,31 @@ declare function variantToRef<TRoot extends RegleStatus<{}, any, any>, const TKe
2709
2724
  [K in TKey]: RegleFieldStatus<TValue, any, any>;
2710
2725
  }> | undefined>;
2711
2726
 
2727
+ /**
2728
+ * Helper method to wrap an raw rules object
2729
+ *
2730
+ * Similar to:
2731
+ *
2732
+ * ```ts
2733
+ * const rules = {...} satisfies RegleUnknownRulesTree
2734
+ * ```
2735
+ */
2712
2736
  declare function defineRules<TRules extends RegleUnknownRulesTree>(rules: TRules): TRules;
2737
+ /**
2738
+ * Refine a raw rules object to set rules that depends on the state values.
2739
+ *
2740
+ * @example
2741
+ *
2742
+ * ```ts
2743
+ * const rules = refineRules({
2744
+ * password: { required, type: type<string>() },
2745
+ * }, (state) => {
2746
+ * return {
2747
+ * confirmPassword: { required, sameAs: sameAs(() => state.value.password)}
2748
+ * }
2749
+ * })
2750
+ * ```
2751
+ */
2713
2752
  declare function refineRules<TRules extends RegleUnknownRulesTree, TRefinement extends ReglePartialRuleTree<InferInput<TRules>> & RegleUnknownRulesTree>(rules: TRules, refinement: (state: Ref<InferInput<TRules>>) => TRefinement): (state: Ref<InferInput<TRules>>) => Merge<TRules, TRefinement>;
2714
2753
 
2715
2754
  export { type $InternalRegleStatus, type AllRulesDeclarations, type CommonAlphaOptions, type CommonComparisonOptions, type DeepMaybeRef, type DeepReactiveState, type DefaultValidatorsTree, type FormRuleDeclaration, type InferInput, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InferSafeOutput, type InlineRuleDeclaration, InternalRuleType, type JoinDiscriminatedUnions, type LocalRegleBehaviourOptions, type Maybe, type MaybeInput, type MaybeOutput, type MaybeVariantStatus, type MergedRegles, type NarrowVariant, type NoInferLegacy, type PrimitiveTypes, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialRuleTree, type RegleResult, type RegleRoot, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleMetadataExtended, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleTypeReturn, type RegleRuleWithParamsDefinition, type RegleShortcutDefinition, type RegleSingleField, type RegleStatus, type RegleUniversalParams, type RegleUnknownRulesTree, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleRuleTree as RegleValidationTree, type ResolvedRegleBehaviourOptions, type ScopedInstancesRecord, type ScopedInstancesRecordLike, type SuperCompatibleRegleCollectionErrors, type SuperCompatibleRegleCollectionStatus, type SuperCompatibleRegleFieldStatus, type SuperCompatibleRegleResult, type SuperCompatibleRegleRoot, type SuperCompatibleRegleRuleStatus, type SuperCompatibleRegleStatus, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, useRegle, useRootStorage, useScopedRegle, variantToRef };
@@ -1,2 +1,2 @@
1
- import {effectScope,computed,toValue,ref,watch,getCurrentInstance,onMounted,reactive,getCurrentScope,onScopeDispose,isRef,watchEffect,shallowRef,toRef,unref,version}from'vue';function te(e,t=true){return e==null?true:e instanceof Date?isNaN(e.getTime()):e.constructor.name=="File"||e.constructor.name=="FileList"?e.size<=0:Array.isArray(e)?t?e.length===0:false:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var Dt=Symbol("regle-rule");function or(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function U(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>U(n)))),r=="Map"&&(t=new Map([...e].map(n=>[U(n[0]),U(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,or(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=U(e[n]);}return t}function _(e){return e&&(e instanceof Date||e.constructor.name=="File"||e.constructor.name=="FileList")?false:typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pe(e,...t){for(var r=[].slice.call(arguments),n,a=r.length;n=r[a-1],a--;)if(!n||typeof n!="object"&&typeof n!="function")throw new Error("expected object, got "+n);for(var o=r[0],s=r.slice(1),i=s.length,a=0;a<i;a++){var y=s[a];for(var f in y)o[f]=y[f];}return o}function Qe(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}function Ne(e,t,r){let n,a=(...o)=>new Promise(s=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(s);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a}var Xe={Inline:"__inline",Async:"__async"};function Ct(e,t){return e.some(r=>r[t])}function It(e,t){return e.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[])}function re(e){try{return e.map(t=>toValue(t))}catch{return []}}function wt(e){return e.map(t=>t instanceof Function?computed(t):isRef(t)?t:toRef(()=>t))}function Ot(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(s=>s.trim()).filter(s=>s.length>0).length:0}function Ze(e,...t){let{validator:r,type:n}=e,a=n===Xe.Async||r.constructor.name==="AsyncFunction";return {...{validator(i,...y){return e.validator(i,...re(y.length?y:t))},message(i){return typeof e.message=="function"?e.message({...i,$params:re(i?.$params?.length?i.$params:t)}):e.message},active(i){return typeof e.active=="function"?e.active({...i,$params:re(i?.$params?.length?i.$params:t)}):e.active??true},tooltip(i){return typeof e.tooltip=="function"?e.tooltip({...i,$params:re(i?.$params?.length?i.$params:t)}):e.tooltip??[]},exec(i){let y=e.validator(i,...re(t)),f;return y instanceof Promise?y.then(b=>(f=b,typeof f=="object"&&"$valid"in f?f.$valid:typeof f=="boolean"?f:false)):(f=y,typeof f=="object"&&"$valid"in f?f.$valid:typeof f=="boolean"?f:false)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:false,_tooltip_patched:false,_async:a,_params:wt(t),_brand:Dt}}function et(e){if(typeof e.validator=="function"){let r=Ze(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(Ot(e.validator)>1){let a=function(...o){return Ze(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.tooltip=r.tooltip,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._tooltip=r.tooltip,a._type=e.type,a._message_pacthed=false,a._tooltip_pacthed=false,a._async=n,a}else return r}throw new Error("[createRule] validator must be a function")}function tt(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),o=shallowRef(new Map);function s($){let E=t.value.get($);if(E)return E;{let D=ref({});return t.value.set($,D),D}}function i($){let E=r.value.get($);if(E)return E;{let D=ref([]);return r.value.set($,D),D}}function y($,E,D){o.value.set(`${$}-${E}`,D);}function f($,E){return o.value.get(`${$}-${E}`)}function b($,E){$&&E!=null&&o.value.delete(`${$}-${E}`);}function V($,E){n.value.set($,E);}function x($){return n.value.get($)??false}function j($,E){e.value.set($,E);}function O($,E){let D=e.value.get($);return D?w(E,D)?{valid:true}:{valid:false}:void 0}function w($,E){let D=Object.keys(E),d=Object.keys($);return d.length!==D.length||!d.every(c=>D.includes(c))?false:d.every(c=>{let g=$[c],S=E[c];return !S||!g||typeof g=="function"||typeof S=="function"||typeof g=="number"||typeof g=="boolean"?false:g._params?g._params?.every((N,W)=>{if(typeof S=="number"||typeof S=="boolean")return true;{let K=re(S._params),H=re(g._params);return K?.[W]===H?.[W]}}):true})}function l($){let E=a.value.get($);if(E)return E;{let D=ref(false),d=ref(true),h=ref({}),c=ref(false);return a.value.set($,{$pending:D,$valid:d,$metadata:h,$validating:c}),{$pending:D,$valid:d,$metadata:h,$validating:c}}}return getCurrentScope()&&onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:j,setDirtyEntry:V,checkRuleDeclEntry:O,getDirtyState:x,trySetRuleStatusRef:l,getFieldsEntry:s,getCollectionsEntry:i,getArrayStatus:f,addArrayStatus:y,deleteArrayStatus:b,arrayStatusStorage:o}}function ke(e){return _(e.value)}function rt(e,t,r){let n=effectScope(),a;return e instanceof Function?a=n.run(()=>e(t,r??0)):a=e,{scope:n,unwrapped:a}}var Me={LessThan:-1,EqualTo:0,GreaterThan:1};function mr(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),s=Number(n[a]);if(o>s)return Me.GreaterThan;if(s>o)return Me.LessThan;if(!isNaN(o)&&isNaN(s))return Me.GreaterThan;if(isNaN(o)&&!isNaN(s))return Me.LessThan}return Me.EqualTo}var Ue=mr(version,"3.5.0")!==-1;function yr(){return Math.floor(Math.random()*Date.now()).toString()}function he(){return typeof window>"u"?yr():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Pt(e){return getCurrentScope()?(onScopeDispose(e),true):false}function Mt(e){let t=false,r,n=effectScope(true);return (...a)=>(t||(r=n.run(()=>e(...a)),t=true),r)}function Ge(e,t){return ke(e)||_(t.value)&&!te(t.value)&&!Object.entries(t.value).some(([r,n])=>me(n)||typeof n=="function")}function jt(e,t,r=false){return !!e.value&&_(e.value)&&"$each"in e.value||r&&Array.isArray(t.value)&&t.value.some(_)||Array.isArray(t.value)&&t.value.some(_)}function We(e){return !!e.value&&_(e.value)}function me(e){return _(e)&&"_validator"in e}function je(e){return typeof e.value=="function"?"_validator"in e.value:true}function At(e){return _(e)&&"$fields"in e}function nt(e){return !!e&&"$rules"in e}function at({field:e,silent:t=false}){return Object.entries(e.$rules??{}).map(([r,n])=>t&&!n.$valid||!n.$valid&&e.$error&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$error?e.$externalErrors??[]:[]).concat(e.$error?e.$schemaErrors??[]:[])}function Vt({field:e}){return Object.entries(e.$rules??{}).map(([t,r])=>r.$tooltip).filter(t=>!!t).reduce((t,r)=>typeof r=="string"?t?.concat([r]):t?.concat(r),[])}function Ft(e){return _(e)&&"$each"in e}function lt(e,t){let{includePath:r=false}=t??{};if(Array.isArray(e)&&e.every(n=>!_(n)))return e;if(Ft(e)){let n=r?e.$self?.map(o=>({error:o,path:""}))??[]:e.$self??[],a=e.$each?.map(o=>Be(o,r))??[];return n?.concat(a.flat())}else return Object.entries(e).map(([n,a])=>Be(a,r,[n])).flat()}function Be(e,t=false,r){let n=t&&!r?[]:r;if(Array.isArray(e)&&e.every(a=>!_(a)))return t?e.map(a=>({error:a,path:n?.join(".")??""})):e;if(Ft(e)){let a=n?.length?e.$self?.map(s=>({error:s,path:n.join(".")}))??[]:e.$self??[],o=e.$each?.map((s,i)=>Be(s,t,n?.concat(i.toString())))??[];return a?.concat(o.flat())}else return Object.entries(e).map(([a,o])=>Be(o,t,n?.concat(a))).flat()}function _t({customMessages:e,rule:t,ruleKey:r,state:n,path:a,storage:o,$debounce:s,modifiers:i}){let y=effectScope(),f={},b,V=ref(false),x=ref(false),{$pending:j,$valid:O,$metadata:w,$validating:l}=o.trySetRuleStatusRef(`${a}.${r}`);function $(){y=effectScope(),f=y.run(()=>{let S=ref(false),N=ref(false),W=ref(true),K=ref(false),H=ref(false),le=computed(()=>({$value:n.value,$error:N.value,$dirty:S.value,$pending:K.value,$correct:H.value,$invalid:W.value,$rule:{$valid:O.value,$invalid:!O.value,$pending:j.value},$params:R.value,...w.value})),C=computed(()=>je(t)?typeof t.value.active=="function"?t.value.active(le.value):!!t.value.active:true);function z(P){let J="",m=e?e[r]?.[P]:void 0;if(m&&(typeof m=="function"?J=m(le.value):J=m),je(t)){let A=`_${P}_patched`;m&&!t.value[A]||(typeof t.value[P]=="function"?J=t.value[P](le.value):J=t.value[P]??"");}return J}let ge=computed(()=>{let P=z("message");return te(P)&&(P="This field is not valid"),P}),ce=computed(()=>z("tooltip")),u=computed(()=>je(t)&&t.value.type?t.value.type:r),p=computed(()=>je(t)?t.value.validator:t.value),R=computed(()=>typeof t.value=="function"?[]:re(t.value._params??[])),I=computed(()=>`${a}.${u.value}`);return {$active:C,$message:ge,$type:u,$validator:p,$params:R,$path:I,$tooltip:ce,$fieldCorrect:H,$fieldError:N,$fieldDirty:S,$fieldPending:K,$fieldInvalid:W}}),b=watch(f?.$params,()=>{(i.$autoDirty.value||i.$rewardEarly.value&&f.$fieldError.value)&&h();});}$();function E(){O.value=true,f.$fieldDirty.value&&(j.value=true);}async function D(){let S=false;try{let N=f.$validator.value;if(typeof N!="function")return console.error(`${a}: Incorrect rule format, it needs to be either a function or created with "createRule".`),!1;let W=N(n.value,...f.$params.value),K=n.value;E();let H;if(W instanceof Promise?H=await W:H=W,n.value!==K)return !0;if(typeof H=="boolean")S=H;else {let{$valid:le,...C}=H;S=le,w.value=C;}}catch{S=false;}finally{j.value=false;}return S}let d=Ne(D,s??200);async function h(){try{l.value=!0;let S=!1;if(x.value=!0,me(t.value)&&t.value._async)S=await d();else {let N=f.$validator.value,W=N(n.value,...f.$params.value);if(W instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(W!=null)if(typeof W=="boolean")S=W;else {let{$valid:K,...H}=W;S=K,w.value=H;}}return O.value=S,S}catch{return false}finally{l.value=false,x.value=false;}}function c(){O.value=true,w.value={},j.value=false,l.value=false,$();}function g(){b(),y.stop(),y=effectScope();}return reactive({...f,$pending:j,$valid:O,$metadata:w,$haveAsync:V,$maybePending:x,$validating:l,$parse:h,$unwatch:g,$watch:$,$reset:c})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:s,externalErrors:i,schemaErrors:y,schemaMode:f,onUnwatch:b,$isArray:V,initialState:x,shortcuts:j,onValidate:O}){let w=effectScope(),l,$=[],E,D,d,h,c,g=()=>{};function S(){let T=t.value,F=o.checkRuleDeclEntry(n,T);z.value=Object.fromEntries(Object.entries(T).filter(([v])=>v.startsWith("$"))),K(),C.value=Object.fromEntries(Object.entries(t.value).filter(([v])=>!v.startsWith("$")).map(([v,ee])=>{if(ee){let se=toRef(()=>ee);return [v,_t({modifiers:{$autoDirty:l.$autoDirty,$rewardEarly:l.$rewardEarly},customMessages:r,rule:se,ruleKey:v,state:e,path:n,storage:o,$debounce:z.value.$debounce})]}return []}).filter(v=>!!v.length)),l.processShortcuts(),N(),F?.valid!=null&&(l.$dirty.value=o.getDirtyState(n),(l.$dirty.value&&l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&g()),o.addRuleDeclEntry(n,T);}function N(){g=l.$debounce.value?Ne(le,l.$debounce.value??l.$haveAnyAsyncRule?100:0):le;}function W(){C.value&&Object.entries(C.value).forEach(([T,F])=>{F.$unwatch();}),d(),c?.(),l.$dirty.value&&o.setDirtyEntry(n,l.$dirty.value),E?.(),D?.(),w.stop(),w=effectScope(),$.forEach(T=>T.stop()),$=[],b?.(),h?.();}function K(){C.value&&Object.entries(C.value).forEach(([T,F])=>{F.$watch();}),l=w.run(()=>{let T=ref(false),F=ref(false),v=computed(()=>T.value),ee=computed(()=>z.value.$debounce),se=computed(()=>z.value.$lazy!=null?z.value.$lazy:unref(s.lazy)!=null?unref(s.lazy):false),oe=computed(()=>z.value.$rewardEarly!=null?z.value.$rewardEarly:unref(s.rewardEarly)!=null?unref(s.rewardEarly):false),B=computed(()=>z.value.$clearExternalErrorsOnChange!=null?z.value.$clearExternalErrorsOnChange:unref(s.clearExternalErrorsOnChange)!=null?unref(s.clearExternalErrorsOnChange):true),M=computed(()=>z.value.$autoDirty!=null?z.value.$autoDirty:unref(s.autoDirty)!=null?unref(s.autoDirty):!oe.value),k=computed(()=>Object.entries(C.value).some(([ie,X])=>X.$validating)),Oe=computed({get:()=>e.value,set(ie){E(),e.value=ie,H();}}),Fe=computed(()=>$e.value&&!ve.value&&T.value),yt=computed(()=>at({field:{$rules:C.value,$error:Fe.value,$externalErrors:i?.value,$schemaErrors:y?.value}})),gt=computed(()=>at({field:{$rules:C.value,$error:Fe.value,$externalErrors:i?.value,$schemaErrors:y?.value},silent:true})),Ye=computed(()=>T.value?x.value instanceof Date&&e.value instanceof Date?Qe(x.value).getDate()!==Qe(e.value).getDate():x.value==null?!!e.value:Array.isArray(e.value)&&Array.isArray(x.value)?e.value.length!==x.value.length:x.value!==e.value:false),vt=computed(()=>Ye.value),$t=computed(()=>Vt({field:{$rules:C.value}})),St=computed(()=>M.value?v.value&&!($e.value||ve.value):!($e.value||ve.value)),ve=computed(()=>F.value||!oe.value?Object.entries(C.value).some(([ie,X])=>X.$pending):false),$e=computed(()=>i?.value?.length||y?.value?.length?true:_e.value?false:!oe.value||oe.value&&F.value?Object.entries(C.value).some(([ie,X])=>!(X.$valid&&!X.$maybePending)):false),Tt=computed(()=>a),_e=computed(()=>!!(te(C.value)&&!f)),ht=computed(()=>i?.value?.length||_e.value?false:T.value&&!te(e.value)&&!k.value&&!ve.value?f?!y?.value?.length:Object.values(C.value).some(X=>X.$active)?Object.values(C.value).filter(X=>X.$active).every(X=>X.$valid):false:false),ar=computed(()=>Object.entries(C.value).some(([ie,X])=>X.$haveAsync));function lr(){j?.fields&&Object.entries(j.fields).forEach(([ie,X])=>{let Et=effectScope();bt[ie]=Et.run(()=>{let xt=ref();return watchEffect(()=>{xt.value=X(reactive({$dirty:T,$externalErrors:i?.value??[],$value:e,$silentValue:Oe,$rules:C,$error:Fe,$pending:ve,$invalid:$e,$correct:ht,$errors:yt,$ready:St,$silentErrors:gt,$anyDirty:v,$tooltips:$t,$name:Tt,$inactive:_e,$edited:Ye,$anyEdited:vt}));}),xt}),$.push(Et);});}let bt={};return watch($e,ie=>{ie||(F.value=false);}),{$error:Fe,$pending:ve,$invalid:$e,$correct:ht,$debounce:ee,$lazy:se,$errors:yt,$ready:St,$silentErrors:gt,$rewardEarly:oe,$autoDirty:M,$clearExternalErrorsOnChange:B,$anyDirty:v,$edited:Ye,$anyEdited:vt,$name:Tt,$haveAnyAsyncRule:ar,$shortcuts:bt,$validating:k,$tooltips:$t,$dirty:T,triggerPunishment:F,processShortcuts:lr,$silentValue:Oe,$inactive:_e}}),H(),d=watch(l.$dirty,T=>{o.setDirtyEntry(n,T),Object.values(C.value).forEach(F=>{F.$fieldDirty=T;});}),c=watch([l.$error,l.$correct,l.$invalid,l.$pending],()=>{Object.values(C.value).forEach(T=>{T.$fieldError=l.$error.value,T.$fieldInvalid=l.$invalid.value,T.$fieldPending=l.$pending.value,T.$fieldCorrect=l.$correct.value;});}),D=watch(l.$invalid,T=>{l.$rewardEarly.value&&!T&&(l.triggerPunishment.value=false);}),h=watch(l.$haveAnyAsyncRule,N);}function H(){E=watch(e,()=>{l.$autoDirty.value&&(l.$dirty.value||(l.$dirty.value=true)),t.value instanceof Function&&S(),(l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&g(),l.$rewardEarly.value!==true&&l.$clearExternalErrorsOnChange.value&&R();},{deep:V?true:Ue?1:true});}function le(){Object.values(C.value).forEach(T=>{T.$parse();});}let C=ref({}),z=ref({});S();function ge(T,F){if(R(),l.$dirty.value=false,l.triggerPunishment.value=false,o.setDirtyEntry(n,false),!F)if(T?.toInitialState)e.value=U(x);else if(T?.toState){let v;typeof T?.toState=="function"?v=T?.toState():v=T?.toState,x.value=U(v),e.value=U(v);}else x.value=_(e.value)?U(e.value):Array.isArray(e.value)?[...e.value]:e.value;T?.clearExternalErrors&&R(),F||Object.entries(C.value).forEach(([v,ee])=>{ee.$reset();}),!l.$lazy.value&&l.$autoDirty.value&&Object.values(C.value).forEach(v=>v.$parse());}function ce(T=true,F=false){l.$dirty.value||(l.$dirty.value=true),F&&T?(l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&g():T&&g();}async function u(){try{if(f)return O?(ce(!1),O()):{valid:!1,data:e.value};let T=e.value;if(l.triggerPunishment.value=!0,!l.$dirty.value)l.$dirty.value=!0;else if(l.$autoDirty.value&&l.$dirty.value&&!l.$pending.value)return {valid:!l.$error.value,data:T};return f?{valid:!y?.value?.length,data:T}:te(C.value)?{valid:!0,data:T}:{valid:(await Promise.allSettled(Object.entries(C.value).map(([ee,se])=>se.$parse()))).every(ee=>ee.status==="fulfilled"?ee.value===!0:!1),data:T}}catch{return {valid:false,data:e.value}}}function p(T=true){return l.$dirty.value?e.value:T?{_null:true}:null}function R(){i?.value?.length&&(i.value=[]);}!l.$lazy.value&&!l.$dirty.value&&l.$autoDirty.value&&g();let{$shortcuts:I,$validating:P,$autoDirty:J,$rewardEarly:m,$clearExternalErrorsOnChange:A,$haveAnyAsyncRule:q,$debounce:Z,$lazy:Q,triggerPunishment:fe,...ue}=l;return reactive({...ue,$externalErrors:i,$value:e,$rules:C,...I,$reset:ge,$touch:ce,$validate:u,$unwatch:W,$watch:K,$extractDirtyFields:p,$clearExternalErrors:R})}function it({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:s,rules:i,externalErrors:y,schemaErrors:f,initialState:b,shortcuts:V,fieldName:x,schemaMode:j}){let O=i.$key?i.$key:he(),w=`${t}.${String(O)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?w=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:O,enumerable:false,configurable:false,writable:false}}));let l=toRef(y?.value??[],r),$=computed(()=>f?.value?.[r]),E=xe({state:o,rulesDef:toRef(()=>i),customMessages:s,path:w,storage:a,options:n,externalErrors:l,schemaErrors:$,initialState:b,shortcuts:V,fieldName:x,schemaMode:j});if(E){let D=o.value?.$id;E.$id=D??String(O),a.addArrayStatus(e,E.$id,E);}return E}function Gt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:s,schemaErrors:i,schemaMode:y,initialState:f,shortcuts:b,fieldName:V}){let x=effectScope(),j,O=effectScope(),w,l=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let $=ref(),E=ref(e.value),D,d=ref({}),h=a.getCollectionsEntry(n);w=O.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.every(p=>typeof p!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(p=>me(p)||typeof p=="function"):false)})),c(),N();function c(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?($.value=he(),Object.defineProperties(e.value,{$id:{value:$.value,enumerable:false,configurable:false,writable:false}})):e.value?.$id&&($.value=e.value.$id)),E.value=d.value.$value,Array.isArray(e.value)&&!w.isPrimitiveArray.value?h.value=e.value.filter(u=>typeof u=="object").map((u,p)=>{let{scope:R,unwrapped:I}=rt(t.value.$each,toRef(()=>u),p);R&&l.push(R);let P=toRef(f.value??[],p),J=toRef(s?.value??{},"$each"),m=computed(()=>i?.value?.$each),A=it({$id:$.value,path:n,customMessages:r,rules:I??{},stateValue:toRef(()=>u),index:p,options:o,storage:a,externalErrors:J,schemaErrors:m,initialState:P,shortcuts:b,fieldName:V,schemaMode:y});return A||null}).filter(u=>!!u):h.value=[],d.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:toRef(s?.value??{},"$self"),schemaErrors:computed(()=>i?.value?.$self),$isArray:true,initialState:f,shortcuts:b,fieldName:V,schemaMode:y});}function g(){if(Array.isArray(e.value)&&!w.isPrimitiveArray.value){let u=U(h.value);h.value=e.value.filter(p=>typeof p=="object").map((p,R)=>{let I=toRef(()=>p);if(p.$id&&h.value.find(P=>P.$id===p.$id)){let P=a.getArrayStatus($.value,p.$id);return P?(P.$value=I,P):null}else {let{scope:P,unwrapped:J}=rt(t.value.$each,I,R);P&&l.push(P);let m=toRef(s?.value??{},"$each"),A=computed(()=>i?.value?.$each??[]),q=it({$id:$.value,path:n,customMessages:r,rules:J??{},stateValue:I,index:R,options:o,storage:a,externalErrors:m,schemaErrors:A,initialState:toRef(f.value??[],R),shortcuts:b,fieldName:V,schemaMode:y});return q||null}}).filter(p=>!!p),u.filter(p=>!e.value?.find(R=>p.$id===R.$id)).forEach((p,R)=>{a.deleteArrayStatus($.value,R.toString());});}else h.value=[];}function S(){D=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?c():g();},{deep:Ue?1:true,flush:"pre"});}function N(){S(),x=effectScope(),j=x.run(()=>{let u=computed({get:()=>e.value,set(v){D(),e.value=v,S();}}),p=computed(()=>d.value.$dirty&&(!h.value.length||h.value.every(v=>v.$dirty))),R=computed(()=>d.value.$anyDirty||h.value.some(v=>v.$anyDirty)),I=computed(()=>d.value.$invalid||h.value.some(v=>v.$invalid)),P=computed(()=>(te(d.value.$rules)?true:d.value.$correct)&&(!h.value.length||h.value.every(v=>v.$correct||v.$anyDirty&&!v.$invalid))),J=computed(()=>d.value.$error||h.value.some(v=>v.$error)),m=computed(()=>!(I.value||A.value)),A=computed(()=>d.value.$pending||h.value.some(v=>v.$pending)),q=computed(()=>!!h.value.length&&h.value.every(v=>v.$edited)),Z=computed(()=>d.value.$anyEdited||h.value.some(v=>v.$anyEdited)),Q=computed(()=>({$self:d.value.$errors,$each:h.value.map(v=>v.$errors)})),fe=computed(()=>({$self:d.value.$silentErrors,$each:h.value.map(v=>v.$silentErrors)})),ue=computed(()=>V);function T(){b?.collections&&Object.entries(b?.collections).forEach(([v,ee])=>{let se=effectScope();F[v]=se.run(()=>{let oe=ref();return watchEffect(()=>{oe.value=ee(reactive({$dirty:p,$error:J,$silentValue:u,$pending:A,$invalid:I,$correct:P,$errors:Q,$ready:m,$silentErrors:fe,$anyDirty:R,$name:ue,$each:h,$self:d,$value:e,$edited:q,$anyEdited:Z}));}),oe}),l.push(se);});}let F={};return T(),{$dirty:p,$anyDirty:R,$invalid:I,$correct:P,$error:J,$pending:A,$errors:Q,$silentErrors:fe,$ready:m,$name:ue,$shortcuts:F,$silentValue:u,$edited:q,$anyEdited:Z}}),w.isPrimitiveArray.value&&t.value.$each&&console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`);}function W(){D&&D(),d.value&&d.value.$unwatch(),h.value&&h.value.forEach(u=>{"$dirty"in u&&u.$unwatch();}),x.stop(),x=effectScope(),O.stop(),O=effectScope(true),l.forEach(u=>u.stop()),l=[];}function K(u=true,p=false){d.value.$touch(u,p),h.value.forEach(R=>{R.$touch(u,p);});}function H(u,p){if(W(),!p)if(u?.toInitialState)e.value=U(f.value);else if(u?.toState){let R;typeof u?.toState=="function"?R=u?.toState():R=u?.toState,f.value=U(R),e.value=U(R);}else f.value=U(e.value);u?.clearExternalErrors&&C(),d.value.$reset(),h.value.forEach(R=>{R.$reset(u,true);}),p||c();}async function le(){let u=e.value;try{return {valid:(await Promise.allSettled([d.value.$validate(),...h.value.map(I=>I.$validate())])).every(I=>I.status==="fulfilled"?I.value.valid===!0:!1),data:u}}catch{return {valid:false,data:u}}}function C(){d.value.$clearExternalErrors(),h.value.forEach(u=>{u.$clearExternalErrors();});}function z(u=true){let p=h.value.map(R=>{if(At(R))return R.$extractDirtyFields(u)});return u&&p.every(R=>te(R))&&(p=[]),p}let{$shortcuts:ge,...ce}=j;return reactive({$self:d,...ce,...ge,$each:h,$value:e,$validate:le,$unwatch:W,$watch:N,$touch:K,$reset:H,$extractDirtyFields:z,$clearExternalErrors:C})}function He({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:a,schemaErrors:o,rootSchemaErrors:s,validationGroups:i,initialState:y,fieldName:f,...b}){let V=effectScope(),x,j=[],O=null,w=null,l=null,$=null;async function D(u=true){let p=Object.entries(e.value),R=Object.fromEntries(p.filter(([m,A])=>!!A).map(([m,A])=>{if(A){let q=toRef(t.value??{},m),Z=toRef(()=>A),Q=toRef(a?.value??{},m),fe=computed(()=>o?.value?.[m]),ue=toRef(y?.value??{},m);return [m,xe({state:q,rulesDef:Z,path:r?`${r}.${m}`:m,externalErrors:Q,schemaErrors:fe,initialState:ue,fieldName:m,...b})]}return []})),I=Object.fromEntries(Object.entries(unref(a)??{}).filter(([m,A])=>!(m in e.value)&&!!A).map(([m])=>{let A=toRef(t.value??{},m),q=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),Q=toRef(y?.value??{},m);return [m,xe({state:A,rulesDef:computed(()=>({})),path:r?`${r}.${m}`:m,externalErrors:q,schemaErrors:Z,initialState:Q,fieldName:m,...b})]})),P=Object.fromEntries(Object.entries(unref(o)??{}).map(([m])=>{let A=toRef(t.value??{},m),q=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),Q=toRef(y?.value??{},m);return [m,xe({state:A,rulesDef:computed(()=>({})),path:r?`${r}.${m}`:m,externalErrors:q,schemaErrors:Z,initialState:Q,fieldName:m,...b})]})),J=Object.fromEntries(Object.entries(t.value??{}).filter(([m])=>!(m in e.value)&&!(m in(I??{}))&&!(m in(P??{}))).map(([m])=>{let A=toRef(t.value??{},m),q=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),Q=toRef(y?.value??{},m);return [m,xe({state:A,rulesDef:computed(()=>({})),path:r?`${r}.${m}`:m,externalErrors:q,schemaErrors:Z,initialState:Q,fieldName:m,...b})]}));d.value={...R,...I,...P,...J},u&&g();}let d=b.storage.getFieldsEntry(r);D();function h(){a&&(l=watch(a,()=>{S(),D();},{deep:true}));}function c(){$=watch(t,()=>{S(),D(),K(true,true);},{flush:"sync"});}function g(){n&&(O?.(),O=watch(n,()=>{S(),D();},{deep:true,flush:"pre"}),h()),s&&(w?.(),w=watch(s,()=>{S(),D();},{deep:true,flush:"post"})),c(),x=V.run(()=>{let u=computed({get:()=>t.value,set(B){S(),t.value=B,D();}}),p=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).every(([B,M])=>M?.$dirty)),R=computed(()=>Object.entries(d.value).some(([B,M])=>M?.$anyDirty)),I=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).some(([B,M])=>M?.$invalid)),P=computed(()=>{let B=Object.entries(d.value).filter(([M,k])=>nt(k)?!k.$inactive:true);return B.length?B.every(([M,k])=>b.schemaMode?k.$correct:nt(k)?"required"in k.$rules&&k.$rules.required.$active?k?.$correct:!k.$invalid&&!k.$pending:k?.$correct):false}),J=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).some(([B,M])=>M?.$error)),m=computed(()=>unref(b.options.rewardEarly)!=null?unref(b.options.rewardEarly):false),A=computed(()=>unref(b.options.autoDirty)!=null?unref(b.options.autoDirty):!m.value),q=computed(()=>A.value?R.value&&!(I.value||Q.value):!(I.value||Q.value)),Z=ref(false),Q=computed(()=>Z.value||Object.entries(d.value).some(([B,M])=>M?.$pending)),fe=computed(()=>Object.fromEntries(Object.entries(d.value).map(([B,M])=>[B,M?.$errors]))),ue=computed(()=>Object.fromEntries(Object.entries(d.value).map(([B,M])=>[B,M?.$silentErrors]))),T=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).every(([B,M])=>M?.$edited)),F=computed(()=>Object.entries(d.value).some(([B,M])=>M?.$anyEdited)),v=computed(()=>f);function ee(){b.shortcuts?.nested&&Object.entries(b.shortcuts.nested).forEach(([B,M])=>{let k=effectScope();oe[B]=k.run(()=>{let Oe=ref();return watchEffect(()=>{Oe.value=M(reactive({$dirty:p,$value:t,$silentValue:u,$error:J,$pending:Q,$invalid:I,$correct:P,$ready:q,$anyDirty:R,$name:v,$silentErrors:ue,$errors:fe,$fields:d,$edited:T,$anyEdited:F}));}),Oe}),j.push(k);});}let se=computed({get:()=>i?Object.fromEntries(Object.entries(i?.(d.value)??{}).map(([B,M])=>M.length?[B,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$correct"].map(k=>[k,Ct(M,k)])),...Object.fromEntries(["$errors","$silentErrors"].map(k=>[k,It(M,k)]))}]:[])):{},set(){}}),oe={};return ee(),{$dirty:p,$anyDirty:R,$invalid:I,$correct:P,$error:J,$pending:Q,$errors:fe,$silentErrors:ue,$ready:q,$name:v,$shortcuts:oe,$groups:se,$silentValue:u,$edited:T,$anyEdited:F,$localPending:Z}});}function S(){O?.(),l?.(),$?.(),w?.(),j=[],x={},d.value&&Object.entries(d.value).forEach(([u,p])=>{p.$unwatch();});}function N(){Object.entries(d.value).forEach(([u,p])=>{p.$clearExternalErrors();});}function W(u,p){if(l?.(),S(),!p)if(u?.toInitialState)t.value=U({...y.value??{}});else if(u?.toState){let R;typeof u?.toState=="function"?R=u?.toState():R=u?.toState,y.value=U(R),t.value=U(R);}else y.value=U(t.value);Object.values(d.value).forEach(R=>{R.$reset(u,true);}),u?.clearExternalErrors&&N(),h(),p||D();}function K(u=true,p=false){Object.values(d.value).forEach(R=>{R.$touch(u,p);});}function H(u){return u.filter(([p,R])=>_(R)?!(R&&typeof R=="object"&&"_null"in R)&&!te(R):Array.isArray(R)?R.length:true)}function le(u=true){let p=Object.entries(d.value).map(([R,I])=>[R,I.$extractDirtyFields(u)]);return u&&(p=H(p)),Object.fromEntries(p)}async function C(){try{if(b.schemaMode)return b.onValidate?(K(!1),x.$localPending.value=!0,b.onValidate()):{valid:!1,data:t.value};{let u=t.value;return {valid:(await Promise.allSettled(Object.values(d.value).map(I=>I.$validate()))).every(I=>I.status==="fulfilled"?I.value.valid===!0:!1),data:u}}}catch{return {valid:false,data:t.value}}finally{x.$localPending.value=false;}}let{$shortcuts:z,$localPending:ge,...ce}=x;return reactive({...ce,...z,$fields:d,$value:t,$reset:W,$touch:K,$validate:C,$unwatch:S,$watch:g,$clearExternalErrors:N,$extractDirtyFields:le})}function xe({rulesDef:e,...t}){if(jt(e,t.state,t.schemaMode))return Gt({rulesDef:e,...t});if(Ge(t.state,e)){if(ke(t.state))return He({rulesDef:e,...t});{let n=effectScope().run(()=>{let s=toRef(t.state.value?t.state:ref({}));return watch(()=>t.state.value,i=>{s.value=i;},{deep:true}),watch(s,i=>{t.state.value=i;},{deep:true}),{fakeState:s}}),{state:a,...o}=t;return He({rulesDef:e,...o,state:n.fakeState})}}else if(We(e))return Ee({rulesDef:e,...t})}function we({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o,schemaErrors:s,schemaMode:i=false,onValidate:y}){let f=tt(),b=ref();return Ge(n,r)?b.value=He({rootRules:r,rulesDef:r,state:n,customMessages:a?.(),storage:f,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root",path:"",schemaErrors:s,rootSchemaErrors:s,schemaMode:i,onValidate:y}):We(r)&&(b.value=Ee({rulesDef:r,state:n,customMessages:a?.(),storage:f,options:t,externalErrors:t.externalErrors,initialState:e,shortcuts:o,fieldName:"root",path:"",schemaMode:i,schemaErrors:s,onValidate:y})),getCurrentScope()&&onScopeDispose(()=>{b.value?.$unwatch();}),reactive({regle:b})}function ze(e,t,r){let n={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function a(o,s,i){let y=isRef(s)?s:typeof s=="function"?void 0:computed(()=>s),f=ref(),b=computed(()=>y?.value?y.value:f.value?f.value:{}),V={...n,...i},x=isRef(o)?o:ref(o);typeof s=="function"&&watchEffect(()=>{f.value=s(x);});let j=ref(_(x.value)?{...U(x.value)}:U(x.value));return {r$:we({scopeRules:b,state:x,options:V,initialState:j,customRules:e,shortcuts:r}).regle}}return a}var Je=ze();function Ke(){function e(t,r){return r}return e}var Rt=Ke();function Ht({rules:e,modifiers:t,shortcuts:r}){let n=ze(e,t,r);n.__config={rules:e,modifiers:t,shortcuts:r};let a=Ke();return {useRegle:n,inferRules:a}}function zt(e,{rules:t,modifiers:r,shortcuts:n}){let a=e.__config??{},o=()=>({...a.rules?.(),...t?.()}),s=a.modifiers&&r?Pe(a.modifiers,r):r,i=a.shortcuts&&n?Pe(a.shortcuts,n):n,y=ze(o,s,i);y.__config={rules:o,modifiers:s,shortcuts:i};let f=Ke();return {useRegle:y,inferRules:f}}function Ve(e,t){let r=t??false,n=computed({get:()=>r?Object.values(e).map(c=>c.$value):Object.fromEntries(Object.entries(e).map(([c,g])=>[c,g.$value])),set:c=>{r||typeof c=="object"&&Object.entries(c).forEach(([g,S])=>e[g].$value=S);}}),a=computed({get:()=>Object.fromEntries(Object.entries(e).map(([c,g])=>[c,g.$silentValue])),set:c=>{typeof c=="object"&&Object.entries(c).forEach(([g,S])=>e[g].$silentValue=S);}}),o=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([g,S])=>S?.$dirty)}),s=computed(()=>Object.entries(e).some(([c,g])=>g?.$anyDirty)),i=computed(()=>Object.entries(e).some(([c,g])=>g?.$invalid)),y=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([g,S])=>S?.$correct||S.$anyDirty&&!S.$invalid)}),f=computed(()=>Object.entries(e).some(([c,g])=>g?.$error)),b=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([g,S])=>S?.$ready)}),V=computed(()=>Object.entries(e).some(([c,g])=>g?.$pending)),x=computed(()=>r?Object.entries(e).map(([c,g])=>g.$errors):Object.fromEntries(Object.entries(e).map(([c,g])=>[c,g.$errors]))),j=computed(()=>r?Object.entries(e).map(([c,g])=>g.$silentErrors):Object.fromEntries(Object.entries(e).map(([c,g])=>[c,g.$silentErrors]))),O=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([g,S])=>S?.$edited)}),w=computed(()=>Object.entries(e).some(([c,g])=>g?.$anyEdited)),l=computed(()=>r?Object.values(e):e);function $(c){Object.values(e).forEach(g=>{g.$reset(c);});}function E(){Object.values(e).forEach(c=>{c.$touch();});}function D(c=true){return Object.values(e).map(g=>g.$extractDirtyFields(c))}function d(){Object.values(e).forEach(c=>{c.$clearExternalErrors();});}async function h(){try{let c=n.value;return {valid:(await Promise.allSettled(Object.values(e).map(N=>N.$validate()))).every(N=>N.status==="fulfilled"?N.value.valid===!0:!1),data:c}}catch{return {valid:false,data:n.value}}}return reactive({...!r&&{$silentValue:a},$errors:x,$silentErrors:j,$instances:l,$value:n,$dirty:o,$anyDirty:s,$invalid:i,$correct:y,$error:f,$pending:V,$ready:b,$edited:O,$anyEdited:w,$reset:$,$touch:E,$validate:h,$extractDirtyFields:D,$clearExternalErrors:d})}function Kt(e){function t(r){let n=computed(()=>toValue(r));s();let a=ref(i(e.value)),o=reactive({r$:a});function s(){n.value&&!e.value[n.value]&&(e.value[n.value]={});}watch(n,s),watch(e,y=>{a.value=i(y);},{deep:true});function i(y){if(n.value){let f=y[n.value]??{};return Ve(f,true)}else return Ve(y["~~global"]??{},true)}return {r$:o.r$}}return {useCollectScope:t}}function Qt(e,t){let r=t??Je;return {useScopedRegle:(a,o,s)=>{let{namespace:i,...y}=s??{},f=computed(()=>toValue(i)),b=ref(`${Object.keys(e.value).length+1}-${he()}`),V=computed(()=>`instance-${b.value}`),{r$:x}=r(a,o,y);O(),Pt(j),watch(f,(w,l)=>{j(l),O();}),getCurrentInstance()&&onMounted(()=>{let w=getCurrentInstance();typeof window<"u"&&w?.proxy?.$el?.parentElement&&document.documentElement&&!document.documentElement.contains(w?.proxy?.$el?.parentElement)&&j();});function j(w){let l=w??f.value;l?e.value[l]&&delete e.value[l][V.value]:e.value["~~global"][V.value]&&delete e.value["~~global"][V.value];}function O(){f.value?(e.value[f.value]||(e.value[f.value]={}),e.value[f.value][V.value]=x):(e.value["~~global"]||(e.value["~~global"]={}),e.value["~~global"][V.value]=x);}return {r$:x,dispose:j,register:O}}}}function qe(e){let r=(e?.customStore?()=>(e.customStore&&(e.customStore?.value["~~global"]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value["~~global"]={}),e.customStore):Mt(()=>ref({"~~global":{}})))(),{useScopedRegle:n}=Qt(r,e?.customUseRegle),{useCollectScope:a}=Kt(r);return {useScopedRegle:n,useCollectScope:a}}var {useCollectScope:dt,useScopedRegle:pt}=qe();function er(e,t,r){let n=computed(()=>toValue(e)[t]);return computed(()=>{let o=r.find(s=>{if(s[t]&&"literal"in s[t]){let i=s[t].literal;if(me(i))return unref(i._params?.[0])===n.value}});if(o)return o;{let s=r.find(i=>_(i[t])&&!Object.keys(i[t]).some(y=>y==="literal"));return s||{}}})}function mt(e,t,r){return _(e[t])&&"$value"in e[t]&&e[t]?.$value===r}function tr(e,t,r){let n=isRef(e)?toRef(e.value,"$fields"):toRef(e,"$fields"),a=ref();return watch(n,()=>{mt(n.value,t,r)?a.value=n.value:a.value=void 0;},{immediate:true}),a}function rr(e){return e}function nr(e,t){return r=>Pe(e,t(r))}
2
- export{Xe as InternalRuleType,et as createRule,qe as createScopedUseRegle,er as createVariant,Ht as defineRegleConfig,rr as defineRules,zt as extendRegleConfig,lt as flatErrors,Rt as inferRules,Ve as mergeRegles,mt as narrowVariant,nr as refineRules,re as unwrapRuleParameters,dt as useCollectScope,Je as useRegle,we as useRootStorage,pt as useScopedRegle,tr as variantToRef};
1
+ import {effectScope,computed,toValue,ref,watch,getCurrentInstance,onMounted,reactive,getCurrentScope,onScopeDispose,isRef,shallowRef,watchEffect,triggerRef,toRef,unref,version,nextTick}from'vue';function te(e,t=true){return e==null?true:e instanceof Date?isNaN(e.getTime()):e.constructor.name=="File"||e.constructor.name=="FileList"?e.size<=0:Array.isArray(e)?t?e.length===0:false:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var Ct=Symbol("regle-rule");function or(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function N(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>N(n)))),r=="Map"&&(t=new Map([...e].map(n=>[N(n[0]),N(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,or(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=N(e[n]);}return t}function _(e){return e&&(e instanceof Date||e.constructor.name=="File"||e.constructor.name=="FileList")?false:typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pe(e,...t){for(var r=[].slice.call(arguments),n,a=r.length;n=r[a-1],a--;)if(!n||typeof n!="object"&&typeof n!="function")throw new Error("expected object, got "+n);for(var o=r[0],s=r.slice(1),i=s.length,a=0;a<i;a++){var g=s[a];for(var R in g)o[R]=g[R];}return o}function Qe(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}function ke(e,t,r){let n,a=(...o)=>new Promise(s=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(s);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a}var Xe={Inline:"__inline",Async:"__async"};function Dt(e,t){return e.some(r=>r[t])}function It(e,t){return e.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[])}function re(e){try{return e.map(t=>toValue(t))}catch{return []}}function wt(e){return e.map(t=>t instanceof Function?computed(t):isRef(t)?t:toRef(()=>t))}function Ot(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(s=>s.trim()).filter(s=>s.length>0).length:0}function Ze(e,...t){let{validator:r,type:n}=e,a=n===Xe.Async||r.constructor.name==="AsyncFunction";return {...{validator(i,...g){return e.validator(i,...re(g.length?g:t))},message(i){return typeof e.message=="function"?e.message({...i,$params:re(i?.$params?.length?i.$params:t)}):e.message},active(i){return typeof e.active=="function"?e.active({...i,$params:re(i?.$params?.length?i.$params:t)}):e.active??true},tooltip(i){return typeof e.tooltip=="function"?e.tooltip({...i,$params:re(i?.$params?.length?i.$params:t)}):e.tooltip??[]},exec(i){let g=e.validator(i,...re(t)),R;return g instanceof Promise?g.then(h=>(R=h,typeof R=="object"&&"$valid"in R?R.$valid:typeof R=="boolean"?R:false)):(R=g,typeof R=="object"&&"$valid"in R?R.$valid:typeof R=="boolean"?R:false)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:false,_tooltip_patched:false,_async:a,_params:wt(t),_brand:Ct}}function et(e){if(typeof e.validator=="function"){let r=Ze(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(Ot(e.validator)>1){let a=function(...o){return Ze(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.tooltip=r.tooltip,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._tooltip=r.tooltip,a._type=e.type,a._message_pacthed=false,a._tooltip_pacthed=false,a._async=n,a}else return r}throw new Error("[createRule] validator must be a function")}function tt(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),o=shallowRef(new Map);function s($){let E=t.value.get($);if(E)return E;{let x=ref({});return t.value.set($,x),x}}function i($){let E=r.value.get($);if(E)return E;{let x=ref([]);return r.value.set($,x),x}}function g($,E,x){o.value.set(`${$}-${E}`,x);}function R($,E){return o.value.get(`${$}-${E}`)}function h($,E){$&&E!=null&&o.value.delete(`${$}-${E}`);}function j($,E){n.value.set($,E);}function C($){return n.value.get($)??false}function A($,E){e.value.set($,E);}function P($,E){let x=e.value.get($);return x?w(E,x)?{valid:true}:{valid:false}:void 0}function w($,E){let x=Object.keys(E),d=Object.keys($);return d.length!==x.length||!d.every(c=>x.includes(c))?false:d.every(c=>{let y=$[c],S=E[c];return !S||!y||typeof y=="function"||typeof S=="function"||typeof y=="number"||typeof y=="boolean"?false:y._params?y._params?.every((k,G)=>{if(typeof S=="number"||typeof S=="boolean")return true;{let K=re(S._params),z=re(y._params);return K?.[G]===z?.[G]}}):true})}function l($){let E=a.value.get($);if(E)return E;{let x=ref(false),d=ref(true),b=ref({}),c=ref(false);return a.value.set($,{$pending:x,$valid:d,$metadata:b,$validating:c}),{$pending:x,$valid:d,$metadata:b,$validating:c}}}return getCurrentScope()&&onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:A,setDirtyEntry:j,checkRuleDeclEntry:P,getDirtyState:C,trySetRuleStatusRef:l,getFieldsEntry:s,getCollectionsEntry:i,getArrayStatus:R,addArrayStatus:g,deleteArrayStatus:h,arrayStatusStorage:o}}function Ne(e){return _(e.value)}function rt(e,t,r){let n=effectScope(),a;return e instanceof Function?a=n.run(()=>e(t,r??0)):a=e,{scope:n,unwrapped:a}}var Me={LessThan:-1,EqualTo:0,GreaterThan:1};function mr(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),s=Number(n[a]);if(o>s)return Me.GreaterThan;if(s>o)return Me.LessThan;if(!isNaN(o)&&isNaN(s))return Me.GreaterThan;if(isNaN(o)&&!isNaN(s))return Me.LessThan}return Me.EqualTo}var Ue=mr(version,"3.5.0")!==-1;function yr(){return Math.floor(Math.random()*Date.now()).toString()}function he(){return typeof window>"u"?yr():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Pt(e){return getCurrentScope()?(onScopeDispose(e),true):false}function Mt(e){let t=false,r,n=effectScope(true);return (...a)=>(t||(r=n.run(()=>e(...a)),t=true),r)}function Ge(e,t){return Ne(e)||_(t.value)&&!te(t.value)&&!Object.entries(t.value).some(([r,n])=>me(n)||typeof n=="function")}function jt(e,t,r=false){return !!e.value&&_(e.value)&&"$each"in e.value||r&&Array.isArray(t.value)&&t.value.some(_)||Array.isArray(t.value)&&t.value.some(_)}function We(e){return !!e.value&&_(e.value)}function me(e){return _(e)&&"_validator"in e}function je(e){return typeof e.value=="function"?"_validator"in e.value:true}function At(e){return _(e)&&"$fields"in e}function nt(e){return !!e&&"$rules"in e}function at({field:e,silent:t=false}){return Object.entries(e.$rules??{}).map(([r,n])=>t&&!n.$valid||!n.$valid&&e.$error&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$error?e.$externalErrors??[]:[]).concat(e.$error?e.$schemaErrors??[]:[])}function Vt({field:e}){return Object.entries(e.$rules??{}).map(([t,r])=>r.$tooltip).filter(t=>!!t).reduce((t,r)=>typeof r=="string"?t?.concat([r]):t?.concat(r),[])}function Ft(e){return _(e)&&"$each"in e}function lt(e,t){let{includePath:r=false}=t??{};if(Array.isArray(e)&&e.every(n=>!_(n)))return e;if(Ft(e)){let n=r?e.$self?.map(o=>({error:o,path:""}))??[]:e.$self??[],a=e.$each?.map(o=>Be(o,r))??[];return n?.concat(a.flat())}else return Object.entries(e).map(([n,a])=>Be(a,r,[n])).flat()}function Be(e,t=false,r){let n=t&&!r?[]:r;if(Array.isArray(e)&&e.every(a=>!_(a)))return t?e.map(a=>({error:a,path:n?.join(".")??""})):e;if(Ft(e)){let a=n?.length?e.$self?.map(s=>({error:s,path:n.join(".")}))??[]:e.$self??[],o=e.$each?.map((s,i)=>Be(s,t,n?.concat(i.toString())))??[];return a?.concat(o.flat())}else return Object.entries(e).map(([a,o])=>Be(o,t,n?.concat(a))).flat()}function _t({customMessages:e,rule:t,ruleKey:r,state:n,path:a,storage:o,$debounce:s,modifiers:i}){let g=effectScope(),R={},h,j=ref(false),C=ref(false),{$pending:A,$valid:P,$metadata:w,$validating:l}=o.trySetRuleStatusRef(`${a}.${r}`);function $(){g=effectScope(),R=g.run(()=>{let S=ref(false),k=ref(false),G=ref(true),K=ref(false),z=ref(false),le=computed(()=>({$value:n.value,$error:k.value,$dirty:S.value,$pending:K.value,$correct:z.value,$invalid:G.value,$rule:{$valid:P.value,$invalid:!P.value,$pending:A.value},$params:f.value,...w.value})),D=computed(()=>je(t)?typeof t.value.active=="function"?t.value.active(le.value):!!t.value.active:true);function H(O){let J="",m=e?e[r]?.[O]:void 0;if(m&&(typeof m=="function"?J=m(le.value):J=m),je(t)){let V=`_${O}_patched`;m&&!t.value[V]||(typeof t.value[O]=="function"?J=t.value[O](le.value):J=t.value[O]??"");}return J}let ge=computed(()=>{let O=H("message");return te(O)&&(O="This field is not valid"),O}),fe=computed(()=>H("tooltip")),u=computed(()=>je(t)&&t.value.type?t.value.type:r),p=computed(()=>je(t)?t.value.validator:t.value),f=computed(()=>typeof t.value=="function"?[]:re(t.value._params??[])),I=computed(()=>`${a}.${u.value}`);return {$active:D,$message:ge,$type:u,$validator:p,$params:f,$path:I,$tooltip:fe,$fieldCorrect:z,$fieldError:k,$fieldDirty:S,$fieldPending:K,$fieldInvalid:G}}),h=watch(R?.$params,()=>{(!i.$silent.value||i.$rewardEarly.value&&R.$fieldError.value)&&b();});}$();function E(){P.value=true,R.$fieldDirty.value&&(A.value=true);}async function x(){let S=false;try{let k=R.$validator.value;if(typeof k!="function")return console.error(`${a}: Incorrect rule format, it needs to be either a function or created with "createRule".`),!1;let G=k(n.value,...R.$params.value),K=n.value;E();let z;if(G instanceof Promise?z=await G:z=G,n.value!==K)return !0;if(typeof z=="boolean")S=z;else {let{$valid:le,...D}=z;S=le,w.value=D;}}catch{S=false;}finally{A.value=false;}return S}let d=ke(x,s??200);async function b(){try{l.value=!0;let S=!1;if(C.value=!0,me(t.value)&&t.value._async)S=await d();else {let k=R.$validator.value,G=k(n.value,...R.$params.value);if(G instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(G!=null)if(typeof G=="boolean")S=G;else {let{$valid:K,...z}=G;S=K,w.value=z;}}return P.value=S,S}catch{return false}finally{l.value=false,C.value=false;}}function c(){P.value=true,w.value={},A.value=false,l.value=false,$();}function y(){h(),g.stop(),g=effectScope();}return reactive({...R,$pending:A,$valid:P,$metadata:w,$haveAsync:j,$maybePending:C,$validating:l,$parse:b,$unwatch:y,$watch:$,$reset:c})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:s,externalErrors:i,schemaErrors:g,schemaMode:R,onUnwatch:h,$isArray:j,initialState:C,shortcuts:A,onValidate:P}){let w=effectScope(),l,$=[],E,x,d,b,c,y=()=>{};function S(){let T=t.value,F=o.checkRuleDeclEntry(n,T);H.value=Object.fromEntries(Object.entries(T).filter(([v])=>v.startsWith("$"))),K(),D.value=Object.fromEntries(Object.entries(t.value).filter(([v])=>!v.startsWith("$")).map(([v,ee])=>{if(ee){let se=toRef(()=>ee);return [v,_t({modifiers:{$silent:l.$silent,$rewardEarly:l.$rewardEarly},customMessages:r,rule:se,ruleKey:v,state:e,path:n,storage:o,$debounce:H.value.$debounce})]}return []}).filter(v=>!!v.length)),l.processShortcuts(),k(),F?.valid!=null&&(l.$dirty.value=o.getDirtyState(n),(l.$dirty.value&&!l.$silent.value||l.$rewardEarly.value&&l.$error.value)&&y()),o.addRuleDeclEntry(n,T);}function k(){y=l.$debounce.value?ke(le,l.$debounce.value??l.$haveAnyAsyncRule?100:0):le;}function G(){D.value&&Object.entries(D.value).forEach(([T,F])=>{F.$unwatch();}),d(),c?.(),l.$dirty.value&&o.setDirtyEntry(n,l.$dirty.value),E?.(),x?.(),w.stop(),w=effectScope(),$.forEach(T=>T.stop()),$=[],h?.(),b?.();}function K(){D.value&&Object.entries(D.value).forEach(([T,F])=>{F.$watch();}),l=w.run(()=>{let T=ref(false),F=ref(false),v=computed(()=>T.value),ee=computed(()=>H.value.$debounce),se=computed(()=>H.value.$lazy!=null?H.value.$lazy:unref(s.lazy)!=null?unref(s.lazy):false),oe=computed(()=>H.value.$rewardEarly!=null?H.value.$rewardEarly:unref(s.rewardEarly)!=null?unref(s.rewardEarly):false),L=computed(()=>H.value.$clearExternalErrorsOnChange!=null?H.value.$clearExternalErrorsOnChange:unref(s.clearExternalErrorsOnChange)!=null?unref(s.clearExternalErrorsOnChange):true),M=computed(()=>oe.value?true:H.value.$silent!=null?H.value.$silent:unref(s.silent)!=null?unref(s.silent):false),W=computed(()=>H.value.$autoDirty!=null?H.value.$autoDirty:unref(s.autoDirty)!=null?unref(s.autoDirty):true),Oe=computed(()=>Object.entries(D.value).some(([ie,X])=>X.$validating)),mt=computed({get:()=>e.value,set(ie){E(),e.value=ie,z();}}),Fe=computed(()=>$e.value&&!ve.value&&T.value),yt=computed(()=>at({field:{$rules:D.value,$error:Fe.value,$externalErrors:i?.value,$schemaErrors:g?.value}})),gt=computed(()=>at({field:{$rules:D.value,$error:Fe.value,$externalErrors:i?.value,$schemaErrors:g?.value},silent:true})),Ye=computed(()=>T.value?C.value instanceof Date&&e.value instanceof Date?Qe(C.value).getDate()!==Qe(e.value).getDate():C.value==null?!!e.value:Array.isArray(e.value)&&Array.isArray(C.value)?e.value.length!==C.value.length:C.value!==e.value:false),vt=computed(()=>Ye.value),$t=computed(()=>Vt({field:{$rules:D.value}})),St=computed(()=>(M.value||v.value)&&!($e.value||ve.value)),ve=computed(()=>F.value||!oe.value?Object.entries(D.value).some(([ie,X])=>X.$pending):false),$e=computed(()=>i?.value?.length||g?.value?.length?true:_e.value?false:!oe.value||oe.value&&F.value?Object.entries(D.value).some(([ie,X])=>!(X.$valid&&!X.$maybePending)):false),Tt=computed(()=>a),_e=computed(()=>!!(te(D.value)&&!R)),ht=computed(()=>i?.value?.length||_e.value?false:T.value&&!te(e.value)&&!Oe.value&&!ve.value?R?!g?.value?.length:Object.values(D.value).some(X=>X.$active)?Object.values(D.value).filter(X=>X.$active).every(X=>X.$valid):false:false),ar=computed(()=>Object.entries(D.value).some(([ie,X])=>X.$haveAsync));function lr(){A?.fields&&Object.entries(A.fields).forEach(([ie,X])=>{let Et=effectScope();bt[ie]=Et.run(()=>{let xt=ref();return watchEffect(()=>{xt.value=X(reactive({$dirty:T,$externalErrors:i?.value??[],$value:e,$silentValue:mt,$rules:D,$error:Fe,$pending:ve,$invalid:$e,$correct:ht,$errors:yt,$ready:St,$silentErrors:gt,$anyDirty:v,$tooltips:$t,$name:Tt,$inactive:_e,$edited:Ye,$anyEdited:vt}));}),xt}),$.push(Et);});}let bt={};return watch($e,ie=>{ie||(F.value=false);}),{$error:Fe,$pending:ve,$invalid:$e,$correct:ht,$debounce:ee,$lazy:se,$errors:yt,$ready:St,$silentErrors:gt,$rewardEarly:oe,$autoDirty:W,$silent:M,$clearExternalErrorsOnChange:L,$anyDirty:v,$edited:Ye,$anyEdited:vt,$name:Tt,$haveAnyAsyncRule:ar,$shortcuts:bt,$validating:Oe,$tooltips:$t,$dirty:T,triggerPunishment:F,processShortcuts:lr,$silentValue:mt,$inactive:_e}}),z(),d=watch(l.$dirty,T=>{o.setDirtyEntry(n,T),Object.values(D.value).forEach(F=>{F.$fieldDirty=T;});}),c=watch([l.$error,l.$correct,l.$invalid,l.$pending],()=>{Object.values(D.value).forEach(T=>{T.$fieldError=l.$error.value,T.$fieldInvalid=l.$invalid.value,T.$fieldPending=l.$pending.value,T.$fieldCorrect=l.$correct.value;});}),x=watch(l.$invalid,T=>{l.$rewardEarly.value&&!T&&(l.triggerPunishment.value=false);}),b=watch(l.$haveAnyAsyncRule,k);}function z(){E=watch(e,()=>{l.$autoDirty.value&&!l.$silent.value&&(l.$dirty.value||(l.$dirty.value=true)),t.value instanceof Function&&S(),(!l.$silent.value||l.$rewardEarly.value&&l.$error.value)&&y(),l.$rewardEarly.value!==true&&l.$clearExternalErrorsOnChange.value&&f();},{deep:j?true:Ue?1:true});}function le(){Object.values(D.value).forEach(T=>{T.$parse();});}let D=ref({}),H=ref({});S();function ge(T,F){if(f(),l.$dirty.value=false,l.triggerPunishment.value=false,o.setDirtyEntry(n,false),!F)if(T?.toInitialState)e.value=N(C);else if(T?.toState){let v;typeof T?.toState=="function"?v=T?.toState():v=T?.toState,C.value=N(v),e.value=N(v);}else C.value=_(e.value)?N(e.value):Array.isArray(e.value)?[...e.value]:e.value;T?.clearExternalErrors&&f(),F||Object.entries(D.value).forEach(([v,ee])=>{ee.$reset();}),!l.$lazy.value&&!l.$silent.value&&Object.values(D.value).forEach(v=>v.$parse());}function fe(T=true,F=false){l.$dirty.value||(l.$dirty.value=true),F&&T?(!l.$silent.value||l.$rewardEarly.value&&l.$error.value)&&y():T&&y();}async function u(){try{if(R)return P?(fe(!1),P()):{valid:!1,data:e.value};let T=e.value;if(l.triggerPunishment.value=!0,!l.$dirty.value)l.$dirty.value=!0;else if(!l.$silent.value&&l.$dirty.value&&!l.$pending.value)return {valid:!l.$error.value,data:T};return R?{valid:!g?.value?.length,data:T}:te(D.value)?{valid:!0,data:T}:{valid:(await Promise.allSettled(Object.entries(D.value).map(([ee,se])=>se.$parse()))).every(ee=>ee.status==="fulfilled"?ee.value===!0:!1),data:T}}catch{return {valid:false,data:e.value}}}function p(T=true){return l.$dirty.value?e.value:T?{_null:true}:null}function f(){i?.value?.length&&(i.value=[]);}!l.$lazy.value&&!l.$dirty.value&&!l.$silent.value&&y();let{$shortcuts:I,$validating:O,$autoDirty:J,$rewardEarly:m,$clearExternalErrorsOnChange:V,$haveAnyAsyncRule:q,$debounce:Z,$lazy:Q,triggerPunishment:Re,...ce}=l;return reactive({...ce,$externalErrors:i,$value:e,$rules:D,...I,$reset:ge,$touch:fe,$validate:u,$unwatch:G,$watch:K,$extractDirtyFields:p,$clearExternalErrors:f})}function it({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:s,rules:i,externalErrors:g,schemaErrors:R,initialState:h,shortcuts:j,fieldName:C,schemaMode:A}){let P=i.$key?i.$key:he(),w=`${t}.${String(P)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?w=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:P,enumerable:false,configurable:false,writable:false}}));let l=toRef(g?.value??[],r),$=computed(()=>R?.value?.[r]),E=xe({state:o,rulesDef:toRef(()=>i),customMessages:s,path:w,storage:a,options:n,externalErrors:l,schemaErrors:$,initialState:h,shortcuts:j,fieldName:C,schemaMode:A});if(E){let x=o.value?.$id;E.$id=x??String(P),a.addArrayStatus(e,E.$id,E);}return E}function Gt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:s,schemaErrors:i,schemaMode:g,initialState:R,shortcuts:h,fieldName:j}){let C=effectScope(),A,P=effectScope(),w,l=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let $=ref(),E=ref(e.value),x,d=ref({}),b=a.getCollectionsEntry(n);w=P.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.every(p=>typeof p!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(p=>me(p)||typeof p=="function"):false)})),c(),k();function c(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?($.value=he(),Object.defineProperties(e.value,{$id:{value:$.value,enumerable:false,configurable:false,writable:false}})):e.value?.$id&&($.value=e.value.$id)),E.value=d.value.$value,Array.isArray(e.value)&&!w.isPrimitiveArray.value?b.value=e.value.filter(u=>typeof u=="object").map((u,p)=>{let{scope:f,unwrapped:I}=rt(t.value.$each,toRef(()=>u),p);f&&l.push(f);let O=toRef(R.value??[],p),J=toRef(s?.value??{},"$each"),m=computed(()=>i?.value?.$each),V=it({$id:$.value,path:n,customMessages:r,rules:I??{},stateValue:toRef(()=>u),index:p,options:o,storage:a,externalErrors:J,schemaErrors:m,initialState:O,shortcuts:h,fieldName:j,schemaMode:g});return V||null}).filter(u=>!!u):b.value=[],d.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:toRef(s?.value??{},"$self"),schemaErrors:computed(()=>i?.value?.$self),$isArray:true,initialState:R,shortcuts:h,fieldName:j,schemaMode:g});}function y(){if(Array.isArray(e.value)&&!w.isPrimitiveArray.value){let u=N(b.value);b.value=e.value.filter(p=>typeof p=="object").map((p,f)=>{let I=toRef(()=>p);if(p.$id&&b.value.find(O=>O.$id===p.$id)){let O=a.getArrayStatus($.value,p.$id);return O?(O.$value=I,O):null}else {let{scope:O,unwrapped:J}=rt(t.value.$each,I,f);O&&l.push(O);let m=toRef(s?.value??{},"$each"),V=computed(()=>i?.value?.$each??[]),q=it({$id:$.value,path:n,customMessages:r,rules:J??{},stateValue:I,index:f,options:o,storage:a,externalErrors:m,schemaErrors:V,initialState:toRef(R.value??[],f),shortcuts:h,fieldName:j,schemaMode:g});return q||null}}).filter(p=>!!p),u.filter(p=>!e.value?.find(f=>p.$id===f.$id)).forEach((p,f)=>{a.deleteArrayStatus($.value,f.toString());});}else b.value=[];}function S(){x=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?c():y();},{deep:Ue?1:true,flush:"pre"});}function k(){S(),C=effectScope(),A=C.run(()=>{let u=computed({get:()=>e.value,set(v){x(),e.value=v,S();}}),p=computed(()=>d.value.$dirty&&(!b.value.length||b.value.every(v=>v.$dirty))),f=computed(()=>d.value.$anyDirty||b.value.some(v=>v.$anyDirty)),I=computed(()=>d.value.$invalid||b.value.some(v=>v.$invalid)),O=computed(()=>(te(d.value.$rules)?true:d.value.$correct)&&(!b.value.length||b.value.every(v=>v.$correct||v.$anyDirty&&!v.$invalid))),J=computed(()=>d.value.$error||b.value.some(v=>v.$error)),m=computed(()=>!(I.value||V.value)),V=computed(()=>d.value.$pending||b.value.some(v=>v.$pending)),q=computed(()=>!!b.value.length&&b.value.every(v=>v.$edited)),Z=computed(()=>d.value.$anyEdited||b.value.some(v=>v.$anyEdited)),Q=computed(()=>({$self:d.value.$errors,$each:b.value.map(v=>v.$errors)})),Re=computed(()=>({$self:d.value.$silentErrors,$each:b.value.map(v=>v.$silentErrors)})),ce=computed(()=>j);function T(){h?.collections&&Object.entries(h?.collections).forEach(([v,ee])=>{let se=effectScope();F[v]=se.run(()=>{let oe=ref();return watchEffect(()=>{oe.value=ee(reactive({$dirty:p,$error:J,$silentValue:u,$pending:V,$invalid:I,$correct:O,$errors:Q,$ready:m,$silentErrors:Re,$anyDirty:f,$name:ce,$each:b,$self:d,$value:e,$edited:q,$anyEdited:Z}));}),oe}),l.push(se);});}let F={};return T(),{$dirty:p,$anyDirty:f,$invalid:I,$correct:O,$error:J,$pending:V,$errors:Q,$silentErrors:Re,$ready:m,$name:ce,$shortcuts:F,$silentValue:u,$edited:q,$anyEdited:Z}}),w.isPrimitiveArray.value&&t.value.$each&&console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`);}function G(){x&&x(),d.value&&d.value.$unwatch(),b.value&&b.value.forEach(u=>{"$dirty"in u&&u.$unwatch();}),C.stop(),C=effectScope(),P.stop(),P=effectScope(true),l.forEach(u=>u.stop()),l=[];}function K(u=true,p=false){d.value.$touch(u,p),b.value.forEach(f=>{f.$touch(u,p);});}function z(u,p){if(G(),!p)if(u?.toInitialState)e.value=N(R.value);else if(u?.toState){let f;typeof u?.toState=="function"?f=u?.toState():f=u?.toState,R.value=N(f),e.value=N(f);}else R.value=N(e.value);u?.clearExternalErrors&&D(),d.value.$reset(),b.value.forEach(f=>{f.$reset(u,true);}),p||c();}async function le(){let u=e.value;try{return {valid:(await Promise.allSettled([d.value.$validate(),...b.value.map(I=>I.$validate())])).every(I=>I.status==="fulfilled"?I.value.valid===!0:!1),data:u}}catch{return {valid:false,data:u}}}function D(){d.value.$clearExternalErrors(),b.value.forEach(u=>{u.$clearExternalErrors();});}function H(u=true){let p=b.value.map(f=>{if(At(f))return f.$extractDirtyFields(u)});return u&&p.every(f=>te(f))&&(p=[]),p}let{$shortcuts:ge,...fe}=A;return reactive({$self:d,...fe,...ge,$each:b,$value:e,$validate:le,$unwatch:G,$watch:k,$touch:K,$reset:z,$extractDirtyFields:H,$clearExternalErrors:D})}function He({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:a,schemaErrors:o,rootSchemaErrors:s,validationGroups:i,initialState:g,fieldName:R,...h}){let j=effectScope(),C,A=[],P=null,w=null,l=null,$=null;async function x(u=true){let p=Object.entries(e.value),f=Object.fromEntries(p.filter(([m,V])=>!!V).map(([m,V])=>{if(V){let q=toRef(t.value??{},m),Z=toRef(()=>V),Q=toRef(a?.value??{},m),Re=computed(()=>o?.value?.[m]),ce=toRef(g?.value??{},m);return [m,xe({state:q,rulesDef:Z,path:r?`${r}.${m}`:m,externalErrors:Q,schemaErrors:Re,initialState:ce,fieldName:m,...h})]}return []})),I=Object.fromEntries(Object.entries(unref(a)??{}).filter(([m,V])=>!(m in e.value)&&!!V).map(([m])=>{let V=toRef(t.value??{},m),q=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),Q=toRef(g?.value??{},m);return [m,xe({state:V,rulesDef:computed(()=>({})),path:r?`${r}.${m}`:m,externalErrors:q,schemaErrors:Z,initialState:Q,fieldName:m,...h})]})),O=Object.fromEntries(Object.entries(unref(o)??{}).map(([m])=>{let V=toRef(t.value??{},m),q=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),Q=toRef(g?.value??{},m);return [m,xe({state:V,rulesDef:computed(()=>({})),path:r?`${r}.${m}`:m,externalErrors:q,schemaErrors:Z,initialState:Q,fieldName:m,...h})]})),J=Object.fromEntries(Object.entries(t.value??{}).filter(([m])=>!(m in e.value)&&!(m in(I??{}))&&!(m in(O??{}))).map(([m])=>{let V=toRef(t.value??{},m),q=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),Q=toRef(g?.value??{},m);return [m,xe({state:V,rulesDef:computed(()=>({})),path:r?`${r}.${m}`:m,externalErrors:q,schemaErrors:Z,initialState:Q,fieldName:m,...h})]}));d.value={...f,...I,...O,...J},u&&y();}let d=h.storage.getFieldsEntry(r);x();function b(){a&&(l=watch(a,()=>{S(),x();},{deep:true}));}function c(){$=watch(t,()=>{S(),x(),K(true,true);},{flush:"sync"});}function y(){n&&(P?.(),P=watch(n,()=>{S(),x();},{deep:true,flush:"pre"}),b()),s&&(w?.(),w=watch(s,()=>{S(),x();},{deep:true,flush:"post"})),c(),C=j.run(()=>{let u=computed({get:()=>t.value,set(L){S(),t.value=L,x();}}),p=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).every(([L,M])=>M?.$dirty)),f=computed(()=>Object.entries(d.value).some(([L,M])=>M?.$anyDirty)),I=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).some(([L,M])=>M?.$invalid)),O=computed(()=>{let L=Object.entries(d.value).filter(([M,W])=>nt(W)?!W.$inactive:true);return L.length?L.every(([M,W])=>h.schemaMode?W.$correct:nt(W)?"required"in W.$rules&&W.$rules.required.$active?W?.$correct:!W.$invalid&&!W.$pending:W?.$correct):false}),J=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).some(([L,M])=>M?.$error)),m=computed(()=>unref(h.options.rewardEarly)!=null?unref(h.options.rewardEarly):false),V=computed(()=>unref(h.options.silent)!=null?unref(h.options.silent):!!m.value),q=computed(()=>(V.value||f.value)&&!(I.value||Q.value)),Z=ref(false),Q=computed(()=>Z.value||Object.entries(d.value).some(([L,M])=>M?.$pending)),Re=computed(()=>Object.fromEntries(Object.entries(d.value).map(([L,M])=>[L,M?.$errors]))),ce=computed(()=>Object.fromEntries(Object.entries(d.value).map(([L,M])=>[L,M?.$silentErrors]))),T=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).every(([L,M])=>M?.$edited)),F=computed(()=>Object.entries(d.value).some(([L,M])=>M?.$anyEdited)),v=computed(()=>R);function ee(){h.shortcuts?.nested&&Object.entries(h.shortcuts.nested).forEach(([L,M])=>{let W=effectScope();oe[L]=W.run(()=>{let Oe=ref();return watchEffect(()=>{Oe.value=M(reactive({$dirty:p,$value:t,$silentValue:u,$error:J,$pending:Q,$invalid:I,$correct:O,$ready:q,$anyDirty:f,$name:v,$silentErrors:ce,$errors:Re,$fields:d,$edited:T,$anyEdited:F}));}),Oe}),A.push(W);});}let se=computed({get:()=>i?Object.fromEntries(Object.entries(i?.(d.value)??{}).map(([L,M])=>M.length?[L,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$correct"].map(W=>[W,Dt(M,W)])),...Object.fromEntries(["$errors","$silentErrors"].map(W=>[W,It(M,W)]))}]:[])):{},set(){}}),oe={};return ee(),{$dirty:p,$anyDirty:f,$invalid:I,$correct:O,$error:J,$pending:Q,$errors:Re,$silentErrors:ce,$ready:q,$name:v,$shortcuts:oe,$groups:se,$silentValue:u,$edited:T,$anyEdited:F,$localPending:Z}});}function S(){P?.(),l?.(),$?.(),w?.(),A=[],C={},d.value&&Object.entries(d.value).forEach(([u,p])=>{p.$unwatch();});}function k(){Object.entries(d.value).forEach(([u,p])=>{p.$clearExternalErrors();});}function G(u,p){if(l?.(),S(),!p)if(u?.toInitialState)t.value=N({...g.value??{}});else if(u?.toState){let f;typeof u?.toState=="function"?f=u?.toState():f=u?.toState,g.value=N(f),t.value=N(f);}else g.value=N(t.value);Object.values(d.value).forEach(f=>{f.$reset(u,true);}),u?.clearExternalErrors&&k(),b(),p||x();}function K(u=true,p=false){Object.values(d.value).forEach(f=>{f.$touch(u,p);});}function z(u){return u.filter(([p,f])=>_(f)?!(f&&typeof f=="object"&&"_null"in f)&&!te(f):Array.isArray(f)?f.length:true)}function le(u=true){let p=Object.entries(d.value).map(([f,I])=>[f,I.$extractDirtyFields(u)]);return u&&(p=z(p)),Object.fromEntries(p)}async function D(){try{if(h.schemaMode)return h.onValidate?(K(!1),C.$localPending.value=!0,h.onValidate()):{valid:!1,data:t.value};{let u=t.value;return {valid:(await Promise.allSettled(Object.values(d.value).map(I=>I.$validate()))).every(I=>I.status==="fulfilled"?I.value.valid===!0:!1),data:u}}}catch{return {valid:false,data:t.value}}finally{C.$localPending.value=false;}}let{$shortcuts:H,$localPending:ge,...fe}=C;return reactive({...fe,...H,$fields:d,$value:t,$reset:G,$touch:K,$validate:D,$unwatch:S,$watch:y,$clearExternalErrors:k,$extractDirtyFields:le})}function xe({rulesDef:e,...t}){if(jt(e,t.state,t.schemaMode))return Gt({rulesDef:e,...t});if(Ge(t.state,e)){if(Ne(t.state))return He({rulesDef:e,...t});{let n=effectScope().run(()=>{let s=toRef(t.state.value?t.state:ref({}));return watch(()=>t.state.value,i=>{s.value=i;},{deep:true}),watch(s,i=>{t.state.value=i;},{deep:true}),{fakeState:s}}),{state:a,...o}=t;return He({rulesDef:e,...o,state:n.fakeState})}}else if(We(e))return Ee({rulesDef:e,...t})}function we({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o,schemaErrors:s,schemaMode:i=false,onValidate:g}){let R=tt(),h=ref();return Ge(n,r)?h.value=He({rootRules:r,rulesDef:r,state:n,customMessages:a?.(),storage:R,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root",path:"",schemaErrors:s,rootSchemaErrors:s,schemaMode:i,onValidate:g}):We(r)&&(h.value=Ee({rulesDef:r,state:n,customMessages:a?.(),storage:R,options:t,externalErrors:t.externalErrors,initialState:e,shortcuts:o,fieldName:"root",path:"",schemaMode:i,schemaErrors:s,onValidate:g})),getCurrentScope()&&onScopeDispose(()=>{h.value?.$unwatch();}),reactive({regle:h})}function ze(e,t,r){let n={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,silent:t?.silent,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function a(o,s,i){let g=isRef(s)?s:typeof s=="function"?void 0:computed(()=>s),R={...n,...i},h=isRef(o)?o:ref(o),j=shallowRef(g??{});typeof s=="function"&&watchEffect(()=>{j.value=s(h),triggerRef(j);});let C=ref(_(h.value)?{...N(h.value)}:N(h.value));return {r$:we({scopeRules:j,state:h,options:R,initialState:C,customRules:e,shortcuts:r}).regle}}return a}var Je=ze();function Ke(){function e(t,r){return r}return e}var ft=Ke();function Ht({rules:e,modifiers:t,shortcuts:r}){let n=ze(e,t,r);n.__config={rules:e,modifiers:t,shortcuts:r};let a=Ke();return {useRegle:n,inferRules:a}}function zt(e,{rules:t,modifiers:r,shortcuts:n}){let a=e.__config??{},o=()=>({...a.rules?.(),...t?.()}),s=a.modifiers&&r?Pe(a.modifiers,r):r,i=a.shortcuts&&n?Pe(a.shortcuts,n):n,g=ze(o,s,i);g.__config={rules:o,modifiers:s,shortcuts:i};let R=Ke();return {useRegle:g,inferRules:R}}function Ve(e,t){let r=t??false,n=computed({get:()=>r?Object.values(e).map(c=>c.$value):Object.fromEntries(Object.entries(e).map(([c,y])=>[c,y.$value])),set:c=>{r||typeof c=="object"&&Object.entries(c).forEach(([y,S])=>e[y].$value=S);}}),a=computed({get:()=>Object.fromEntries(Object.entries(e).map(([c,y])=>[c,y.$silentValue])),set:c=>{typeof c=="object"&&Object.entries(c).forEach(([y,S])=>e[y].$silentValue=S);}}),o=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([y,S])=>S?.$dirty)}),s=computed(()=>Object.entries(e).some(([c,y])=>y?.$anyDirty)),i=computed(()=>Object.entries(e).some(([c,y])=>y?.$invalid)),g=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([y,S])=>S?.$correct||S.$anyDirty&&!S.$invalid)}),R=computed(()=>Object.entries(e).some(([c,y])=>y?.$error)),h=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([y,S])=>S?.$ready)}),j=computed(()=>Object.entries(e).some(([c,y])=>y?.$pending)),C=computed(()=>r?Object.entries(e).map(([c,y])=>y.$errors):Object.fromEntries(Object.entries(e).map(([c,y])=>[c,y.$errors]))),A=computed(()=>r?Object.entries(e).map(([c,y])=>y.$silentErrors):Object.fromEntries(Object.entries(e).map(([c,y])=>[c,y.$silentErrors]))),P=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([y,S])=>S?.$edited)}),w=computed(()=>Object.entries(e).some(([c,y])=>y?.$anyEdited)),l=computed(()=>r?Object.values(e):e);function $(c){Object.values(e).forEach(y=>{y.$reset(c);});}function E(){Object.values(e).forEach(c=>{c.$touch();});}function x(c=true){return Object.values(e).map(y=>y.$extractDirtyFields(c))}function d(){Object.values(e).forEach(c=>{c.$clearExternalErrors();});}async function b(){try{let c=n.value;return {valid:(await Promise.allSettled(Object.values(e).map(k=>k.$validate()))).every(k=>k.status==="fulfilled"?k.value.valid===!0:!1),data:c}}catch{return {valid:false,data:n.value}}}return reactive({...!r&&{$silentValue:a},$errors:C,$silentErrors:A,$instances:l,$value:n,$dirty:o,$anyDirty:s,$invalid:i,$correct:g,$error:R,$pending:j,$ready:h,$edited:P,$anyEdited:w,$reset:$,$touch:E,$validate:b,$extractDirtyFields:x,$clearExternalErrors:d})}function Kt(e){function t(r){let n=computed(()=>toValue(r));s();let a=ref(i(e.value)),o=reactive({r$:a});function s(){n.value&&!e.value[n.value]&&(e.value[n.value]={});}watch(n,s),watch(e,g=>{a.value=i(g);},{deep:true});function i(g){if(n.value){let R=g[n.value]??{};return Ve(R,true)}else return Ve(g["~~global"]??{},true)}return {r$:o.r$}}return {useCollectScope:t}}function Qt(e,t){let r=t??Je;return {useScopedRegle:(a,o,s)=>{let{namespace:i,...g}=s??{},R=computed(()=>toValue(i)),h=ref(`${Object.keys(e.value).length+1}-${he()}`),j=computed(()=>`instance-${h.value}`),{r$:C}=r(a,o,g);P(),Pt(A),watch(R,(w,l)=>{A(l),P();}),getCurrentInstance()&&onMounted(()=>{let w=getCurrentInstance();typeof window<"u"&&w?.proxy?.$el?.parentElement&&document.documentElement&&!document.documentElement.contains(w?.proxy?.$el?.parentElement)&&A();});function A(w){let l=w??R.value;l?e.value[l]&&delete e.value[l][j.value]:e.value["~~global"][j.value]&&delete e.value["~~global"][j.value];}function P(){R.value?(e.value[R.value]||(e.value[R.value]={}),e.value[R.value][j.value]=C):(e.value["~~global"]||(e.value["~~global"]={}),e.value["~~global"][j.value]=C);}return {r$:C,dispose:A,register:P}}}}function qe(e){let r=(e?.customStore?()=>(e.customStore&&(e.customStore?.value["~~global"]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value["~~global"]={}),e.customStore):Mt(()=>ref({"~~global":{}})))(),{useScopedRegle:n}=Qt(r,e?.customUseRegle),{useCollectScope:a}=Kt(r);return {useScopedRegle:n,useCollectScope:a}}var {useCollectScope:Rt,useScopedRegle:dt}=qe();function er(e,t,r){let n=computed(()=>toValue(e)[t]);return computed(()=>{let o=r.find(s=>{if(s[t]&&"literal"in s[t]){let i=s[t].literal;if(me(i))return unref(i._params?.[0])===n.value}});if(o)return o;{let s=r.find(i=>_(i[t])&&!Object.keys(i[t]).some(g=>g==="literal"));return s||{}}})}function pt(e,t,r){return _(e[t])&&"$value"in e[t]&&e[t]?.$value===r}function tr(e,t,r){let n=isRef(e)?toRef(e.value,"$fields"):toRef(e,"$fields"),a=ref();return watch(n,async()=>{await nextTick(),pt(n.value,t,r)?a.value=n.value:a.value=void 0;},{immediate:true,flush:"pre"}),a}function rr(e){return e}function nr(e,t){return r=>Pe({...e},t(r))}
2
+ export{Xe as InternalRuleType,et as createRule,qe as createScopedUseRegle,er as createVariant,Ht as defineRegleConfig,rr as defineRules,zt as extendRegleConfig,lt as flatErrors,ft as inferRules,Ve as mergeRegles,pt as narrowVariant,nr as refineRules,re as unwrapRuleParameters,Rt as useCollectScope,Je as useRegle,we as useRootStorage,dt as useScopedRegle,tr as variantToRef};
@@ -1,4 +1,4 @@
1
- import { effectScope, ref, computed, toValue, reactive, watch, getCurrentInstance, onMounted, getCurrentScope, onScopeDispose, isRef, watchEffect, shallowRef, toRef, unref, version } from 'vue';
1
+ import { effectScope, ref, computed, toValue, reactive, watch, getCurrentInstance, onMounted, getCurrentScope, onScopeDispose, isRef, shallowRef, watchEffect, triggerRef, toRef, unref, version, nextTick } from 'vue';
2
2
 
3
3
  // ../shared/utils/isEmpty.ts
4
4
  function isEmpty(value, considerEmptyArrayInvalid = true) {
@@ -533,13 +533,13 @@ function flatErrors(errors, options) {
533
533
  return errors;
534
534
  } else if (isCollectionError(errors)) {
535
535
  const selfErrors = includePath ? errors.$self?.map((err) => ({ error: err, path: "" })) ?? [] : errors.$self ?? [];
536
- const eachErrors = errors.$each?.map((err) => interateErrors(err, includePath)) ?? [];
536
+ const eachErrors = errors.$each?.map((err) => iterateErrors(err, includePath)) ?? [];
537
537
  return selfErrors?.concat(eachErrors.flat());
538
538
  } else {
539
- return Object.entries(errors).map(([key, value]) => interateErrors(value, includePath, [key])).flat();
539
+ return Object.entries(errors).map(([key, value]) => iterateErrors(value, includePath, [key])).flat();
540
540
  }
541
541
  }
542
- function interateErrors(errors, includePath = false, _path) {
542
+ function iterateErrors(errors, includePath = false, _path) {
543
543
  const path = includePath && !_path ? [] : _path;
544
544
  if (Array.isArray(errors) && errors.every((err) => !isObject(err))) {
545
545
  if (includePath) {
@@ -548,10 +548,10 @@ function interateErrors(errors, includePath = false, _path) {
548
548
  return errors;
549
549
  } else if (isCollectionError(errors)) {
550
550
  const selfErrors = path?.length ? errors.$self?.map((err) => ({ error: err, path: path.join(".") })) ?? [] : errors.$self ?? [];
551
- const eachErrors = errors.$each?.map((err, index) => interateErrors(err, includePath, path?.concat(index.toString()))) ?? [];
551
+ const eachErrors = errors.$each?.map((err, index) => iterateErrors(err, includePath, path?.concat(index.toString()))) ?? [];
552
552
  return selfErrors?.concat(eachErrors.flat());
553
553
  } else {
554
- return Object.entries(errors).map(([key, value]) => interateErrors(value, includePath, path?.concat(key))).flat();
554
+ return Object.entries(errors).map(([key, value]) => iterateErrors(value, includePath, path?.concat(key))).flat();
555
555
  }
556
556
  }
557
557
  function createReactiveRuleStatus({
@@ -673,7 +673,7 @@ function createReactiveRuleStatus({
673
673
  };
674
674
  });
675
675
  $unwatchState = watch(scopeState?.$params, () => {
676
- if (modifiers.$autoDirty.value || modifiers.$rewardEarly.value && scopeState.$fieldError.value) {
676
+ if (!modifiers.$silent.value || modifiers.$rewardEarly.value && scopeState.$fieldError.value) {
677
677
  $parse();
678
678
  }
679
679
  });
@@ -825,7 +825,7 @@ function createReactiveFieldStatus({
825
825
  ruleKey,
826
826
  createReactiveRuleStatus({
827
827
  modifiers: {
828
- $autoDirty: scopeState.$autoDirty,
828
+ $silent: scopeState.$silent,
829
829
  $rewardEarly: scopeState.$rewardEarly
830
830
  },
831
831
  customMessages,
@@ -845,7 +845,7 @@ function createReactiveFieldStatus({
845
845
  define$commit();
846
846
  if (storeResult?.valid != null) {
847
847
  scopeState.$dirty.value = storage.getDirtyState(path);
848
- if (scopeState.$dirty.value && scopeState.$autoDirty.value || scopeState.$rewardEarly.value && scopeState.$error.value) {
848
+ if (scopeState.$dirty.value && !scopeState.$silent.value || scopeState.$rewardEarly.value && scopeState.$error.value) {
849
849
  $commit();
850
850
  }
851
851
  }
@@ -911,13 +911,20 @@ function createReactiveFieldStatus({
911
911
  }
912
912
  return true;
913
913
  });
914
+ const $silent = computed(() => {
915
+ if ($rewardEarly2.value) {
916
+ return true;
917
+ } else if ($localOptions.value.$silent != null) {
918
+ return $localOptions.value.$silent;
919
+ } else if (unref(options.silent) != null) {
920
+ return unref(options.silent);
921
+ } else return false;
922
+ });
914
923
  const $autoDirty2 = computed(() => {
915
924
  if ($localOptions.value.$autoDirty != null) {
916
925
  return $localOptions.value.$autoDirty;
917
926
  } else if (unref(options.autoDirty) != null) {
918
927
  return unref(options.autoDirty);
919
- } else if ($rewardEarly2.value) {
920
- return false;
921
928
  }
922
929
  return true;
923
930
  });
@@ -982,7 +989,7 @@ function createReactiveFieldStatus({
982
989
  });
983
990
  });
984
991
  const $ready = computed(() => {
985
- if (!$autoDirty2.value) {
992
+ if ($silent.value) {
986
993
  return !($invalid.value || $pending.value);
987
994
  }
988
995
  return $anyDirty.value && !($invalid.value || $pending.value);
@@ -1092,6 +1099,7 @@ function createReactiveFieldStatus({
1092
1099
  $silentErrors,
1093
1100
  $rewardEarly: $rewardEarly2,
1094
1101
  $autoDirty: $autoDirty2,
1102
+ $silent,
1095
1103
  $clearExternalErrorsOnChange: $clearExternalErrorsOnChange2,
1096
1104
  $anyDirty,
1097
1105
  $edited,
@@ -1137,7 +1145,7 @@ function createReactiveFieldStatus({
1137
1145
  $unwatchState = watch(
1138
1146
  state,
1139
1147
  () => {
1140
- if (scopeState.$autoDirty.value) {
1148
+ if (scopeState.$autoDirty.value && !scopeState.$silent.value) {
1141
1149
  if (!scopeState.$dirty.value) {
1142
1150
  scopeState.$dirty.value = true;
1143
1151
  }
@@ -1145,7 +1153,7 @@ function createReactiveFieldStatus({
1145
1153
  if (rulesDef.value instanceof Function) {
1146
1154
  createReactiveRulesResult();
1147
1155
  }
1148
- if (scopeState.$autoDirty.value || scopeState.$rewardEarly.value && scopeState.$error.value) {
1156
+ if (!scopeState.$silent.value || scopeState.$rewardEarly.value && scopeState.$error.value) {
1149
1157
  $commit();
1150
1158
  }
1151
1159
  if (scopeState.$rewardEarly.value !== true && scopeState.$clearExternalErrorsOnChange.value) {
@@ -1192,7 +1200,7 @@ function createReactiveFieldStatus({
1192
1200
  rule.$reset();
1193
1201
  });
1194
1202
  }
1195
- if (!scopeState.$lazy.value && scopeState.$autoDirty.value) {
1203
+ if (!scopeState.$lazy.value && !scopeState.$silent.value) {
1196
1204
  Object.values($rules.value).forEach((rule) => {
1197
1205
  return rule.$parse();
1198
1206
  });
@@ -1203,7 +1211,7 @@ function createReactiveFieldStatus({
1203
1211
  scopeState.$dirty.value = true;
1204
1212
  }
1205
1213
  if (withConditions && runCommit) {
1206
- if (scopeState.$autoDirty.value || scopeState.$rewardEarly.value && scopeState.$error.value) {
1214
+ if (!scopeState.$silent.value || scopeState.$rewardEarly.value && scopeState.$error.value) {
1207
1215
  $commit();
1208
1216
  }
1209
1217
  } else if (runCommit) {
@@ -1224,7 +1232,7 @@ function createReactiveFieldStatus({
1224
1232
  scopeState.triggerPunishment.value = true;
1225
1233
  if (!scopeState.$dirty.value) {
1226
1234
  scopeState.$dirty.value = true;
1227
- } else if (scopeState.$autoDirty.value && scopeState.$dirty.value && !scopeState.$pending.value) {
1235
+ } else if (!scopeState.$silent.value && scopeState.$dirty.value && !scopeState.$pending.value) {
1228
1236
  return { valid: !scopeState.$error.value, data };
1229
1237
  }
1230
1238
  if (schemaMode) {
@@ -1263,7 +1271,7 @@ function createReactiveFieldStatus({
1263
1271
  externalErrors.value = [];
1264
1272
  }
1265
1273
  }
1266
- if (!scopeState.$lazy.value && !scopeState.$dirty.value && scopeState.$autoDirty.value) {
1274
+ if (!scopeState.$lazy.value && !scopeState.$dirty.value && !scopeState.$silent.value) {
1267
1275
  $commit();
1268
1276
  }
1269
1277
  const {
@@ -1995,16 +2003,16 @@ function createReactiveNestedStatus({
1995
2003
  }
1996
2004
  return false;
1997
2005
  });
1998
- const $autoDirty = computed(() => {
1999
- if (unref(commonArgs.options.autoDirty) != null) {
2000
- return unref(commonArgs.options.autoDirty);
2006
+ const $silent = computed(() => {
2007
+ if (unref(commonArgs.options.silent) != null) {
2008
+ return unref(commonArgs.options.silent);
2001
2009
  } else if ($rewardEarly.value) {
2002
- return false;
2010
+ return true;
2003
2011
  }
2004
- return true;
2012
+ return false;
2005
2013
  });
2006
2014
  const $ready = computed(() => {
2007
- if (!$autoDirty.value) {
2015
+ if ($silent.value) {
2008
2016
  return !($invalid.value || $pending.value);
2009
2017
  }
2010
2018
  return $anyDirty.value && !($invalid.value || $pending.value);
@@ -2363,34 +2371,28 @@ function createUseRegleComposable(customRules, options, shortcuts) {
2363
2371
  autoDirty: options?.autoDirty,
2364
2372
  lazy: options?.lazy,
2365
2373
  rewardEarly: options?.rewardEarly,
2374
+ silent: options?.silent,
2366
2375
  clearExternalErrorsOnChange: options?.clearExternalErrorsOnChange
2367
2376
  };
2368
2377
  function useRegle2(state, rulesFactory, options2) {
2369
2378
  const definedRules = isRef(rulesFactory) ? rulesFactory : typeof rulesFactory === "function" ? void 0 : computed(() => rulesFactory);
2370
- const watchableRulesGetters = ref();
2371
- const scopeRules = computed(() => {
2372
- if (definedRules?.value) {
2373
- return definedRules.value;
2374
- } else if (watchableRulesGetters.value) {
2375
- return watchableRulesGetters.value;
2376
- }
2377
- return {};
2378
- });
2379
2379
  const resolvedOptions = {
2380
2380
  ...globalOptions,
2381
2381
  ...options2
2382
2382
  };
2383
2383
  const processedState = isRef(state) ? state : ref(state);
2384
+ const watchableRulesGetters = shallowRef(definedRules ?? {});
2384
2385
  if (typeof rulesFactory === "function") {
2385
2386
  watchEffect(() => {
2386
2387
  watchableRulesGetters.value = rulesFactory(processedState);
2388
+ triggerRef(watchableRulesGetters);
2387
2389
  });
2388
2390
  }
2389
2391
  const initialState = ref(
2390
2392
  isObject(processedState.value) ? { ...cloneDeep(processedState.value) } : cloneDeep(processedState.value)
2391
2393
  );
2392
2394
  const regle = useRootStorage({
2393
- scopeRules,
2395
+ scopeRules: watchableRulesGetters,
2394
2396
  state: processedState,
2395
2397
  options: resolvedOptions,
2396
2398
  initialState,
@@ -2716,12 +2718,12 @@ function createScopedUseRegle(options) {
2716
2718
  };
2717
2719
  }
2718
2720
  var { useCollectScope, useScopedRegle } = createScopedUseRegle();
2719
- function createVariant(root, disciminantKey, variants) {
2720
- const watchableRoot = computed(() => toValue(root)[disciminantKey]);
2721
+ function createVariant(root, discriminantKey, variants) {
2722
+ const watchableRoot = computed(() => toValue(root)[discriminantKey]);
2721
2723
  const computedRules = computed(() => {
2722
2724
  const selectedVariant = variants.find((variant) => {
2723
- if (variant[disciminantKey] && "literal" in variant[disciminantKey]) {
2724
- const literalRule = variant[disciminantKey]["literal"];
2725
+ if (variant[discriminantKey] && "literal" in variant[discriminantKey]) {
2726
+ const literalRule = variant[discriminantKey]["literal"];
2725
2727
  if (isRuleDef(literalRule)) {
2726
2728
  return unref(literalRule._params?.[0]) === watchableRoot.value;
2727
2729
  }
@@ -2731,7 +2733,7 @@ function createVariant(root, disciminantKey, variants) {
2731
2733
  return selectedVariant;
2732
2734
  } else {
2733
2735
  const anyDiscriminantRules = variants.find(
2734
- (variant) => isObject(variant[disciminantKey]) && !Object.keys(variant[disciminantKey]).some((key) => key === "literal")
2736
+ (variant) => isObject(variant[discriminantKey]) && !Object.keys(variant[discriminantKey]).some((key) => key === "literal")
2735
2737
  );
2736
2738
  if (anyDiscriminantRules) {
2737
2739
  return anyDiscriminantRules;
@@ -2750,14 +2752,15 @@ function variantToRef(root, discriminantKey, discriminantValue) {
2750
2752
  const returnedRef = ref();
2751
2753
  watch(
2752
2754
  fromRoot,
2753
- () => {
2755
+ async () => {
2756
+ await nextTick();
2754
2757
  if (narrowVariant(fromRoot.value, discriminantKey, discriminantValue)) {
2755
2758
  returnedRef.value = fromRoot.value;
2756
2759
  } else {
2757
2760
  returnedRef.value = void 0;
2758
2761
  }
2759
2762
  },
2760
- { immediate: true }
2763
+ { immediate: true, flush: "pre" }
2761
2764
  );
2762
2765
  return returnedRef;
2763
2766
  }
@@ -2767,7 +2770,7 @@ function defineRules(rules) {
2767
2770
  return rules;
2768
2771
  }
2769
2772
  function refineRules(rules, refinement) {
2770
- return (state) => merge(rules, refinement(state));
2773
+ return (state) => merge({ ...rules }, refinement(state));
2771
2774
  }
2772
2775
 
2773
2776
  export { InternalRuleType, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, useRegle, useRootStorage, useScopedRegle, variantToRef };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regle/core",
3
- "version": "1.2.0-beta.1",
3
+ "version": "1.2.0-beta.2",
4
4
  "description": "Headless form validation library for Vue 3",
5
5
  "peerDependencies": {
6
6
  "pinia": ">=2.2.5",