@regle/core 1.1.2 → 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 +16 -10
- package/dist/regle-core.d.ts +160 -46
- package/dist/regle-core.min.mjs +2 -2
- package/dist/regle-core.mjs +59 -34
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# Regle
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
Regle \ʁɛɡl\ (French word for 'rule'
|
|
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
|
-
| [](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/simple-example?file=examples/simple-example/src/App.vue&configPath=examples/simple-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> | [](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/simple-example?file=examples/simple-example/src/App.vue&configPath=examples/simple-example) | [](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
|
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
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) 🚧
|
package/dist/regle-core.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ type MaybeOutput<T = any> = T | undefined;
|
|
|
9
9
|
type PromiseReturn<T> = T extends Promise<infer U> ? U : T;
|
|
10
10
|
type MaybeGetter<T, V = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V>, index: number) => T & TAdd);
|
|
11
11
|
type Unwrap<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : UnwrapNestedRefs<T>;
|
|
12
|
+
type UnwrapSimple<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : T extends (...args: any[]) => infer U ? U : T;
|
|
12
13
|
type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends ((value: Ref<any>, index: number) => infer U extends Record<string, any>) ? U : T;
|
|
13
14
|
type ExtendOnlyRealRecord<T extends unknown> = NonNullable<T> extends File | Date ? false : NonNullable<T> extends Record<string, any> ? true : false;
|
|
14
15
|
type OmitByType<T extends Record<string, any>, U> = {
|
|
@@ -626,6 +627,41 @@ type HasMultipleCallSignatures<T extends (...arguments_: any[]) => unknown> =
|
|
|
626
627
|
: true
|
|
627
628
|
: false;
|
|
628
629
|
|
|
630
|
+
/**
|
|
631
|
+
Returns a boolean for whether the given type is a union type.
|
|
632
|
+
|
|
633
|
+
@example
|
|
634
|
+
```
|
|
635
|
+
type A = IsUnion<string | number>;
|
|
636
|
+
//=> true
|
|
637
|
+
|
|
638
|
+
type B = IsUnion<string>;
|
|
639
|
+
//=> false
|
|
640
|
+
```
|
|
641
|
+
*/
|
|
642
|
+
type IsUnion$1<T> = InternalIsUnion<T>;
|
|
643
|
+
|
|
644
|
+
/**
|
|
645
|
+
The actual implementation of `IsUnion`.
|
|
646
|
+
*/
|
|
647
|
+
type InternalIsUnion<T, U = T> =
|
|
648
|
+
(
|
|
649
|
+
// @link https://ghaiklor.github.io/type-challenges-solutions/en/medium-isunion.html
|
|
650
|
+
IsNever$1<T> extends true
|
|
651
|
+
? false
|
|
652
|
+
: T extends any
|
|
653
|
+
? [U] extends [T]
|
|
654
|
+
? false
|
|
655
|
+
: true
|
|
656
|
+
: never
|
|
657
|
+
) extends infer Result
|
|
658
|
+
// In some cases `Result` will return `false | true` which is `boolean`,
|
|
659
|
+
// that means `T` has at least two types and it's a union type,
|
|
660
|
+
// so we will return `true` instead of `boolean`.
|
|
661
|
+
? boolean extends Result ? true
|
|
662
|
+
: Result
|
|
663
|
+
: never; // Should never happen
|
|
664
|
+
|
|
629
665
|
/**
|
|
630
666
|
Merges user specified options with default options.
|
|
631
667
|
|
|
@@ -1044,20 +1080,27 @@ interface RegleBehaviourOptions {
|
|
|
1044
1080
|
*/
|
|
1045
1081
|
lazy?: boolean | undefined;
|
|
1046
1082
|
/**
|
|
1047
|
-
*
|
|
1083
|
+
* Automatically set the dirty set without the need of `$value` or `$touch`.
|
|
1048
1084
|
* @default true
|
|
1049
1085
|
*
|
|
1050
|
-
* @default false if rewardEarly is true
|
|
1051
|
-
|
|
1052
1086
|
*/
|
|
1053
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;
|
|
1054
1097
|
/**
|
|
1055
1098
|
* The fields will turn valid when they are, but not invalid unless calling `r$.$validate()`
|
|
1056
1099
|
* @default false
|
|
1057
1100
|
*/
|
|
1058
1101
|
rewardEarly?: boolean | undefined;
|
|
1059
1102
|
/**
|
|
1060
|
-
* Define
|
|
1103
|
+
* Define whether the external errors should be cleared when updating a field
|
|
1061
1104
|
* @default true
|
|
1062
1105
|
*
|
|
1063
1106
|
*/
|
|
@@ -1089,15 +1132,15 @@ type ShortcutCommonFn<T extends Record<string, any>> = {
|
|
|
1089
1132
|
};
|
|
1090
1133
|
type RegleShortcutDefinition<TCustomRules extends Record<string, any> = {}> = {
|
|
1091
1134
|
/**
|
|
1092
|
-
* Allow you to customize the properties
|
|
1135
|
+
* Allow you to customize the properties for every field
|
|
1093
1136
|
*/
|
|
1094
1137
|
fields?: ShortcutCommonFn<RegleFieldStatus<any, Partial<TCustomRules> & Partial<DefaultValidators>>>;
|
|
1095
1138
|
/**
|
|
1096
|
-
* Allow you to customize the properties
|
|
1139
|
+
* Allow you to customize the properties for every parent of a nested object
|
|
1097
1140
|
*/
|
|
1098
1141
|
nested?: ShortcutCommonFn<RegleStatus<Record<string, any>, ReglePartialRuleTree<any, Partial<TCustomRules> & Partial<DefaultValidators>>>>;
|
|
1099
1142
|
/**
|
|
1100
|
-
* Allow you to customize the properties
|
|
1143
|
+
* Allow you to customize the properties for every parent of a collection
|
|
1101
1144
|
*/
|
|
1102
1145
|
collections?: ShortcutCommonFn<RegleCollectionStatus<any[], Partial<TCustomRules> & Partial<DefaultValidators>>>;
|
|
1103
1146
|
};
|
|
@@ -1107,7 +1150,7 @@ type AddDollarToOptions<T extends Record<string, any>> = {
|
|
|
1107
1150
|
|
|
1108
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> = {}> = {
|
|
1109
1152
|
/**
|
|
1110
|
-
* r$ is a reactive object containing the values, errors, dirty state and all the necessary validations properties you'll need to display
|
|
1153
|
+
* r$ is a reactive object containing the values, errors, dirty state and all the necessary validations properties you'll need to display information.
|
|
1111
1154
|
*
|
|
1112
1155
|
* To see the list of properties: {@link https://reglejs.dev/core-concepts/validation-properties}
|
|
1113
1156
|
*/
|
|
@@ -1115,7 +1158,7 @@ type Regle<TState extends Record<string, any> = EmptyObject, TRules extends Regl
|
|
|
1115
1158
|
} & TAdditionalReturnProperties;
|
|
1116
1159
|
type RegleSingleField<TState extends Maybe<PrimitiveTypes> = any, TRules extends RegleRuleDecl<NonNullable<TState>> = EmptyObject, TShortcuts extends RegleShortcutDefinition = {}, TAdditionalReturnProperties extends Record<string, any> = {}> = {
|
|
1117
1160
|
/**
|
|
1118
|
-
* r$ is a reactive object containing the values, errors, dirty state and all the necessary validations properties you'll need to display
|
|
1161
|
+
* r$ is a reactive object containing the values, errors, dirty state and all the necessary validations properties you'll need to display information.
|
|
1119
1162
|
*
|
|
1120
1163
|
* To see the list of properties: {@link https://reglejs.dev/core-concepts/validation-properties}
|
|
1121
1164
|
*/
|
|
@@ -1135,7 +1178,7 @@ type ResetOptions<TState extends unknown> = RequireOneOrNone<{
|
|
|
1135
1178
|
toInitialState?: boolean;
|
|
1136
1179
|
/**
|
|
1137
1180
|
* Reset validation status and reset form state to the given state
|
|
1138
|
-
* Also set the new state as
|
|
1181
|
+
* Also set the new state as the initial state.
|
|
1139
1182
|
*/
|
|
1140
1183
|
toState?: TState | (() => TState);
|
|
1141
1184
|
/**
|
|
@@ -1174,16 +1217,16 @@ type $InternalRegleResult = {
|
|
|
1174
1217
|
data: any;
|
|
1175
1218
|
};
|
|
1176
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<{
|
|
1177
|
-
[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]>;
|
|
1178
1221
|
} & {
|
|
1179
|
-
[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]>>;
|
|
1180
1223
|
}> : TState;
|
|
1181
|
-
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> ? true : false : NonNullable<TRule['required']> extends TRule['required'] ? TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? true : false : false : false : false;
|
|
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;
|
|
1182
1225
|
type ObjectHaveAtLeastOneRequiredField<TState extends Record<string, any>, TRule extends ReglePartialRuleTree<TState, any>> = TState extends Maybe<TState> ? {
|
|
1183
1226
|
[K in keyof NonNullable<TState>]-?: IsPropertyOutputRequired<NonNullable<TState>[K], TRule[K]>;
|
|
1184
1227
|
}[keyof TState] extends false ? false : true : true;
|
|
1185
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;
|
|
1186
|
-
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined> =
|
|
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;
|
|
1187
1230
|
type IsPropertyOutputRequired<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = [
|
|
1188
1231
|
unknown
|
|
1189
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;
|
|
@@ -1659,10 +1702,18 @@ type FindCorrespondingVariant<TState extends Record<string, any>, TRules extends
|
|
|
1659
1702
|
infer F,
|
|
1660
1703
|
...infer R
|
|
1661
1704
|
] ? F extends ReglePartialRuleTree<TState> ? [F] : FindCorrespondingVariant<TState, R> : [];
|
|
1662
|
-
type PossibleLiteralTypes<T extends Record<string, any>, TKey extends keyof T> = {
|
|
1705
|
+
type PossibleLiteralTypes<T extends Record<string, any>, TKey extends keyof T> = unknown extends T[TKey] ? {
|
|
1706
|
+
[x: string]: {
|
|
1707
|
+
[K in TKey]-?: Omit<RegleRuleDecl<any, Partial<AllRulesDeclarations>>, 'literal'> & {
|
|
1708
|
+
literal?: RegleRuleDefinition<any, [literal: any], false, boolean, any, string | number>;
|
|
1709
|
+
};
|
|
1710
|
+
};
|
|
1711
|
+
} : {
|
|
1663
1712
|
[TVal in NonNullable<T[TKey]>]: {
|
|
1664
1713
|
[K in TKey]-?: Omit<RegleRuleDecl<TVal, Partial<AllRulesDeclarations>>, 'literal'> & {
|
|
1665
|
-
literal?: RegleRuleDefinition<TVal
|
|
1714
|
+
literal?: RegleRuleDefinition<MaybeInput<TVal>, [
|
|
1715
|
+
literal: TVal
|
|
1716
|
+
], false, boolean, MaybeInput<TVal>, string | number>;
|
|
1666
1717
|
};
|
|
1667
1718
|
};
|
|
1668
1719
|
};
|
|
@@ -1673,7 +1724,7 @@ type VariantTuple<T extends Record<string, any>, TKey extends keyof T> = [
|
|
|
1673
1724
|
];
|
|
1674
1725
|
|
|
1675
1726
|
interface useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never, TAdditionalReturnProperties extends Record<string, any> = {}, TAdditionalOptions extends Record<string, any> = {}> {
|
|
1676
|
-
<TState extends Record<string, any> | MaybeInput<PrimitiveTypes>, TRules extends ReglePartialRuleTree<Unwrap<TState extends Record<string, any> ? TState : {}>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TDecl extends RegleRuleDecl<NonNullable<TState>, Partial<AllRulesDeclarations> & TCustomRules>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, Unwrap<TState extends Record<string, any> ? TState : {}>> extends true ? {} : MismatchInfo<RegleRuleTree<Unwrap<TState extends Record<string, any> ? TState : {}>, Partial<AllRulesDeclarations> & TCustomRules>, NoInferLegacy<TRules>>>(state: Maybe<MaybeRef<TState> | DeepReactiveState<TState>>, rulesFactory: TState extends MaybeInput<PrimitiveTypes> ? MaybeRefOrGetter<TDecl> : TState extends Record<string, any> ?
|
|
1727
|
+
<TState extends Record<string, any> | MaybeInput<PrimitiveTypes>, TRules extends ReglePartialRuleTree<Unwrap<TState extends Record<string, any> ? TState : {}>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TDecl extends RegleRuleDecl<NonNullable<TState>, Partial<AllRulesDeclarations> & TCustomRules>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, Unwrap<TState extends Record<string, any> ? TState : {}>> extends true ? {} : MismatchInfo<RegleRuleTree<Unwrap<TState extends Record<string, any> ? TState : {}>, Partial<AllRulesDeclarations> & TCustomRules>, NoInferLegacy<TRules>>>(state: Maybe<MaybeRef<TState> | DeepReactiveState<TState>>, rulesFactory: TState extends MaybeInput<PrimitiveTypes> ? MaybeRefOrGetter<TDecl> : TState extends Record<string, any> ? MaybeRef<TRules> | ((...args: any[]) => TRules) : {}, options?: TState extends MaybeInput<PrimitiveTypes> ? Partial<DeepMaybeRef<RegleBehaviourOptions>> & TAdditionalOptions : Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<JoinDiscriminatedUnions<TState extends Record<string, any> ? Unwrap<TState> : {}>, TState extends Record<string, any> ? TRules : {}, TValidationGroups> & TAdditionalOptions): NonNullable<TState> extends PrimitiveTypes ? RegleSingleField<NonNullable<TState>, TDecl, TShortcuts, TAdditionalReturnProperties> : Regle<TState extends Record<string, any> ? Unwrap<TState> : {}, TRules, TValidationGroups, TShortcuts, TAdditionalReturnProperties>;
|
|
1677
1728
|
__config?: {
|
|
1678
1729
|
rules?: () => CustomRulesDeclarationTree;
|
|
1679
1730
|
modifiers?: RegleBehaviourOptions;
|
|
@@ -1728,7 +1779,7 @@ declare function useRootStorage({ initialState, options, scopeRules, state, cust
|
|
|
1728
1779
|
};
|
|
1729
1780
|
|
|
1730
1781
|
/**
|
|
1731
|
-
* Converts
|
|
1782
|
+
* Converts a nested $errors object to a flat array of string errors
|
|
1732
1783
|
*
|
|
1733
1784
|
* Can also flatten to an array containing the path of each error with the options.includePath
|
|
1734
1785
|
*/
|
|
@@ -1758,7 +1809,7 @@ type RemoveCommonKey<T extends readonly any[], K extends PropertyKey> = T extend
|
|
|
1758
1809
|
*/
|
|
1759
1810
|
type GetMaybeObjectValue<O extends Record<string, any>, K extends string> = K extends keyof O ? O[K] : undefined;
|
|
1760
1811
|
/**
|
|
1761
|
-
* Combine all
|
|
1812
|
+
* Combine all union values to be able to get even the normally "never" values, act as an intersection type
|
|
1762
1813
|
*/
|
|
1763
1814
|
type RetrieveUnionUnknownValues<T extends readonly any[], TKeys extends string> = T extends [
|
|
1764
1815
|
infer F extends Record<string, any>,
|
|
@@ -1772,15 +1823,15 @@ type RetrieveUnionUnknownValues<T extends readonly any[], TKeys extends string>
|
|
|
1772
1823
|
...RetrieveUnionUnknownValues<R, TKeys>
|
|
1773
1824
|
] : [];
|
|
1774
1825
|
/**
|
|
1775
|
-
* Get all possible keys from
|
|
1826
|
+
* Get all possible keys from a union, even the ones present only on one union
|
|
1776
1827
|
*/
|
|
1777
1828
|
type RetrieveUnionUnknownKeysOf<T extends readonly any[]> = T extends [infer F, ...infer R] ? [keyof F, ...RetrieveUnionUnknownKeysOf<R>] : [];
|
|
1778
1829
|
/**
|
|
1779
|
-
* Transforms
|
|
1830
|
+
* Transforms a union and apply undefined values to non-present keys to support intersection
|
|
1780
1831
|
*/
|
|
1781
1832
|
type NormalizeUnion<TUnion> = RetrieveUnionUnknownValues<NonNullable<UnionToTuple$1<TUnion>>, RetrieveUnionUnknownKeysOf<NonNullable<UnionToTuple$1<TUnion>>>[number]>[number];
|
|
1782
1833
|
/**
|
|
1783
|
-
* Combine all members of
|
|
1834
|
+
* Combine all members of a union type, merging types for each key, and keeping loose types
|
|
1784
1835
|
*/
|
|
1785
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;
|
|
1786
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;
|
|
@@ -1799,6 +1850,25 @@ type isDeepExact<TRules, TTree> = {
|
|
|
1799
1850
|
}[keyof TRules] extends true ? true : false;
|
|
1800
1851
|
type CheckDeepExact<TRules, TTree> = [TTree] extends [never] ? false : TRules extends RegleCollectionRuleDecl ? TTree extends Array<any> ? isDeepExact<NonNullable<TRules['$each']>, JoinDiscriminatedUnions<NonNullable<ArrayElement<TTree>>>> : TRules extends RegleRuleDecl ? true : TRules extends ReglePartialRuleTree<any> ? isDeepExact<TRules, TTree> : false : TRules extends RegleRuleDecl ? true : TRules extends ReglePartialRuleTree<any> ? isDeepExact<TRules, TTree> : false;
|
|
1801
1852
|
|
|
1853
|
+
type InferInput<TRules extends MaybeRef<ReglePartialRuleTree<Record<string, any>, any>> | ((state: any) => ReglePartialRuleTree<Record<string, any>, any>), TMarkMaybe extends boolean = true> = IsUnion$1<UnwrapSimple<TRules>> extends true ? InferTupleUnionInput<UnionToTuple$1<UnwrapSimple<TRules>>>[number] : TMarkMaybe extends true ? Prettify<{
|
|
1854
|
+
[K in keyof UnwrapSimple<TRules>]?: ProcessInputChildren<UnwrapSimple<TRules>[K], TMarkMaybe>;
|
|
1855
|
+
}> : Prettify<{
|
|
1856
|
+
[K in keyof UnwrapSimple<TRules>]: ProcessInputChildren<UnwrapSimple<TRules>[K], TMarkMaybe>;
|
|
1857
|
+
}>;
|
|
1858
|
+
type ProcessInputChildren<TRule extends unknown, TMarkMaybe extends boolean> = TRule extends {
|
|
1859
|
+
$each: RegleCollectionEachRules<any, any>;
|
|
1860
|
+
} ? ExtractFromGetter<TRule['$each']> extends ReglePartialRuleTree<any, any> ? InferInput<ExtractFromGetter<TRule['$each']>, TMarkMaybe>[] : any[] : TRule extends RegleRuleDecl<any, any> ? [ExtractTypeFromRules<TRule>] extends [never] ? unknown : ExtractTypeFromRules<TRule> : TRule extends ReglePartialRuleTree<any, any> ? InferInput<TRule, TMarkMaybe> : string;
|
|
1861
|
+
type ExtractTypeFromRules<TRules extends RegleRuleDecl<any, any>> = FilterRulesWithInput<TRules> extends {
|
|
1862
|
+
type: infer Input;
|
|
1863
|
+
} ? Input : [FilterRulesWithSingleType<TRules>[keyof FilterRulesWithSingleType<TRules>]] extends [never] ? FilterRulesWithInput<TRules>[keyof FilterRulesWithInput<TRules>] : FilterRulesWithSingleType<TRules>[keyof FilterRulesWithSingleType<TRules>];
|
|
1864
|
+
type FilterRulesWithInput<TRules extends RegleRuleDecl<any, any>> = {
|
|
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;
|
|
1866
|
+
};
|
|
1867
|
+
type FilterRulesWithSingleType<TRules extends RegleRuleDecl<any, any>> = {
|
|
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;
|
|
1869
|
+
};
|
|
1870
|
+
type InferTupleUnionInput<T extends any[]> = T extends [infer F extends ReglePartialRuleTree, ...infer R] ? [InferInput<F, true>, ...InferTupleUnionInput<R>] : [];
|
|
1871
|
+
|
|
1802
1872
|
type CreateFn<T extends any[]> = (...args: T) => any;
|
|
1803
1873
|
/**
|
|
1804
1874
|
* Transform normal parameters tuple declaration to a rich tuple declaration
|
|
@@ -1813,9 +1883,9 @@ type UnwrapRegleUniversalParams<T extends MaybeRefOrGetter[] = [], F = CreateFn<
|
|
|
1813
1883
|
}) => any : never>;
|
|
1814
1884
|
|
|
1815
1885
|
/**
|
|
1816
|
-
* 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
|
|
1817
1887
|
*/
|
|
1818
|
-
|
|
1888
|
+
type RegleInternalRuleDefs<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> = Raw<{
|
|
1819
1889
|
_validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
|
|
1820
1890
|
_message: string | string[] | ((metadata: PossibleRegleRuleMetadataConsumer<TValue>) => string | string[]);
|
|
1821
1891
|
_active?: boolean | ((metadata: PossibleRegleRuleMetadataConsumer<TValue>) => boolean);
|
|
@@ -1826,7 +1896,7 @@ interface RegleInternalRuleDefs<TValue extends any = any, TParams extends any[]
|
|
|
1826
1896
|
_params?: RegleUniversalParams<TParams>;
|
|
1827
1897
|
_async: TAsync;
|
|
1828
1898
|
readonly _brand: symbol;
|
|
1829
|
-
}
|
|
1899
|
+
}>;
|
|
1830
1900
|
declare const InternalRuleType: {
|
|
1831
1901
|
readonly Inline: "__inline";
|
|
1832
1902
|
readonly Async: "__async";
|
|
@@ -1837,7 +1907,7 @@ type IsLiteral<T> = string extends T ? false : true;
|
|
|
1837
1907
|
/**
|
|
1838
1908
|
* Returned typed of rules created with `createRule`
|
|
1839
1909
|
* */
|
|
1840
|
-
interface RegleRuleDefinition<TValue extends
|
|
1910
|
+
interface RegleRuleDefinition<TValue extends unknown = unknown, TParams extends any[] = [], TAsync extends boolean = boolean, TMetaData extends RegleRuleMetadataDefinition = RegleRuleMetadataDefinition, TInput = unknown, TFilteredValue extends any = TValue extends Date & File & infer M ? M : TValue> extends RegleInternalRuleDefs<TFilteredValue, TParams, TAsync, TMetaData> {
|
|
1841
1911
|
validator: RegleRuleDefinitionProcessor<TFilteredValue, TParams, TAsync extends false ? TMetaData : Promise<TMetaData>>;
|
|
1842
1912
|
message: (metadata: PossibleRegleRuleMetadataConsumer<TFilteredValue>) => string | string[];
|
|
1843
1913
|
active: (metadata: PossibleRegleRuleMetadataConsumer<TFilteredValue>) => boolean;
|
|
@@ -1849,8 +1919,8 @@ interface RegleRuleDefinition<TValue extends any = unknown, TParams extends any[
|
|
|
1849
1919
|
/**
|
|
1850
1920
|
* Rules with params created with `createRules` are callable while being customizable
|
|
1851
1921
|
*/
|
|
1852
|
-
type RegleRuleWithParamsDefinition<TValue extends
|
|
1853
|
-
(...params: RegleUniversalParams<TParams>): RegleRuleDefinition<TFilteredValue, TParams, TAsync, TMetadata>;
|
|
1922
|
+
type RegleRuleWithParamsDefinition<TValue extends unknown = unknown, TParams extends any[] = never, TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean, TInput = unknown, TFilteredValue extends any = TValue extends Date & File & infer M ? M : TValue> = RegleRuleCore<TFilteredValue, TParams, TAsync, TMetadata> & RegleInternalRuleDefs<TFilteredValue, TParams, TAsync, TMetadata> & {
|
|
1923
|
+
(...params: RegleUniversalParams<TParams>): RegleRuleDefinition<TFilteredValue, TParams, TAsync, TMetadata, TInput>;
|
|
1854
1924
|
} & (TParams extends [param?: any, ...any[]] ? {
|
|
1855
1925
|
exec: (value: Maybe<TFilteredValue>) => TAsync extends false ? TMetadata : Promise<TMetadata>;
|
|
1856
1926
|
} : {});
|
|
@@ -1876,7 +1946,7 @@ type DefaultMetadataProperties = DefaultMetadataPropertiesCommon & {
|
|
|
1876
1946
|
$rule: Pick<$InternalRegleRuleStatus, '$valid' | '$pending'>;
|
|
1877
1947
|
};
|
|
1878
1948
|
/**
|
|
1879
|
-
* Will be used to
|
|
1949
|
+
* Will be used to consume metadata on related helpers and rule status
|
|
1880
1950
|
*/
|
|
1881
1951
|
type RegleRuleMetadataConsumer<TValue extends any, TParams extends [...any[]] = never, TMetadata extends RegleRuleMetadataDefinition = boolean> = {
|
|
1882
1952
|
$value: Maybe<TValue>;
|
|
@@ -1884,7 +1954,7 @@ type RegleRuleMetadataConsumer<TValue extends any, TParams extends [...any[]] =
|
|
|
1884
1954
|
$params: [...TParams];
|
|
1885
1955
|
}) & (Exclude<TMetadata, boolean> extends RegleRuleMetadataExtended ? TMetadata extends boolean ? Partial<Omit<Exclude<TMetadata, boolean>, '$valid'>> : Omit<Exclude<TMetadata, boolean>, '$valid'> : {});
|
|
1886
1956
|
/**
|
|
1887
|
-
* Will be used to
|
|
1957
|
+
* Will be used to consume metadata on related helpers and rule status
|
|
1888
1958
|
*/
|
|
1889
1959
|
type PossibleRegleRuleMetadataConsumer<TValue> = {
|
|
1890
1960
|
$value: Maybe<TValue>;
|
|
@@ -1901,7 +1971,7 @@ type RegleRuleRawInput<TValue extends any = any, TParams extends [...any[]] = [.
|
|
|
1901
1971
|
tooltip?: any;
|
|
1902
1972
|
};
|
|
1903
1973
|
/**
|
|
1904
|
-
* Process the type of
|
|
1974
|
+
* Process the type of created rule with `createRule`.
|
|
1905
1975
|
* For a rule with params it will return a function
|
|
1906
1976
|
* Otherwise it will return the rule definition
|
|
1907
1977
|
*/
|
|
@@ -1961,29 +2031,34 @@ type DefaultValidators = {
|
|
|
1961
2031
|
alpha: RegleRuleWithParamsDefinition<string, [options?: CommonAlphaOptions | undefined]>;
|
|
1962
2032
|
alphaNum: RegleRuleWithParamsDefinition<string | number, [options?: CommonAlphaOptions | undefined]>;
|
|
1963
2033
|
between: RegleRuleWithParamsDefinition<number, [min: Maybe<number>, max: Maybe<number>]>;
|
|
2034
|
+
boolean: RegleRuleDefinition<unknown, [], false, boolean, any, unknown>;
|
|
1964
2035
|
checked: RegleRuleDefinition<boolean, [], false, boolean, boolean>;
|
|
1965
2036
|
contains: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
|
|
2037
|
+
date: RegleRuleDefinition<unknown, [], false, boolean, MaybeInput<Date>, unknown>;
|
|
1966
2038
|
dateAfter: RegleRuleWithParamsDefinition<string | Date, [
|
|
1967
|
-
after: Maybe<string | Date
|
|
2039
|
+
after: Maybe<string | Date>,
|
|
2040
|
+
options?: CommonComparisonOptions
|
|
1968
2041
|
], false, true | {
|
|
1969
2042
|
$valid: false;
|
|
1970
2043
|
error: 'date-not-after';
|
|
1971
2044
|
} | {
|
|
1972
2045
|
$valid: false;
|
|
1973
|
-
error: 'value-or-
|
|
2046
|
+
error: 'value-or-parameter-not-a-date';
|
|
1974
2047
|
}>;
|
|
1975
2048
|
dateBefore: RegleRuleWithParamsDefinition<string | Date, [
|
|
1976
|
-
before: Maybe<string | Date
|
|
2049
|
+
before: Maybe<string | Date>,
|
|
2050
|
+
options?: CommonComparisonOptions
|
|
1977
2051
|
], false, true | {
|
|
1978
2052
|
$valid: false;
|
|
1979
2053
|
error: 'date-not-before';
|
|
1980
2054
|
} | {
|
|
1981
2055
|
$valid: false;
|
|
1982
|
-
error: 'value-or-
|
|
2056
|
+
error: 'value-or-parameter-not-a-date';
|
|
1983
2057
|
}>;
|
|
1984
2058
|
dateBetween: RegleRuleWithParamsDefinition<string | Date, [
|
|
1985
2059
|
before: Maybe<string | Date>,
|
|
1986
|
-
after: Maybe<string | Date
|
|
2060
|
+
after: Maybe<string | Date>,
|
|
2061
|
+
options?: CommonComparisonOptions
|
|
1987
2062
|
], false, boolean>;
|
|
1988
2063
|
decimal: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
1989
2064
|
email: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
@@ -1992,6 +2067,7 @@ type DefaultValidators = {
|
|
|
1992
2067
|
count: number
|
|
1993
2068
|
], false, boolean>;
|
|
1994
2069
|
exactValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
|
|
2070
|
+
hexadecimal: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
1995
2071
|
integer: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
1996
2072
|
ipv4Address: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
1997
2073
|
literal: RegleRuleDefinition<string | number, [literal: string | number], false, boolean, string | number>;
|
|
@@ -2007,11 +2083,14 @@ type DefaultValidators = {
|
|
|
2007
2083
|
], false, boolean>;
|
|
2008
2084
|
minValue: RegleRuleWithParamsDefinition<number, [count: number, options?: CommonComparisonOptions], false, boolean>;
|
|
2009
2085
|
nativeEnum: RegleRuleDefinition<string | number, [enumLike: EnumLike], false, boolean, string | number>;
|
|
2086
|
+
number: RegleRuleDefinition<unknown, [], false, boolean, any, unknown>;
|
|
2010
2087
|
numeric: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
2011
2088
|
oneOf: RegleRuleDefinition<string | number, [options: (string | number)[]], false, boolean, string | number>;
|
|
2012
2089
|
regex: RegleRuleWithParamsDefinition<string, [regexp: RegExp], false, boolean>;
|
|
2013
2090
|
required: RegleRuleDefinition<unknown, []>;
|
|
2014
2091
|
sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown, otherName?: string], false, boolean>;
|
|
2092
|
+
string: RegleRuleDefinition<unknown, [], false, boolean, any, unknown>;
|
|
2093
|
+
type: RegleRuleDefinition<unknown, [], false, boolean, unknown, unknown>;
|
|
2015
2094
|
startsWith: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
|
|
2016
2095
|
url: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
2017
2096
|
};
|
|
@@ -2027,7 +2106,7 @@ type AllRulesDeclarations = CustomRulesDeclarationTree & DefaultValidatorsTree;
|
|
|
2027
2106
|
/**
|
|
2028
2107
|
* @public
|
|
2029
2108
|
*/
|
|
2030
|
-
type ReglePartialRuleTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
2109
|
+
type ReglePartialRuleTree<TForm extends Record<string, any> = Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
2031
2110
|
[TKey in keyof TForm]?: RegleFormPropertyType<TForm[TKey], TCustomRules>;
|
|
2032
2111
|
};
|
|
2033
2112
|
/**
|
|
@@ -2036,6 +2115,12 @@ type ReglePartialRuleTree<TForm extends Record<string, any>, TCustomRules extend
|
|
|
2036
2115
|
type RegleRuleTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
2037
2116
|
[TKey in keyof TForm]: RegleFormPropertyType<TForm[TKey], TCustomRules>;
|
|
2038
2117
|
};
|
|
2118
|
+
/**
|
|
2119
|
+
* @public
|
|
2120
|
+
*/
|
|
2121
|
+
type RegleUnknownRulesTree = {
|
|
2122
|
+
[x: string]: RegleRuleDecl | RegleCollectionRuleDecl | RegleUnknownRulesTree;
|
|
2123
|
+
};
|
|
2039
2124
|
/**
|
|
2040
2125
|
* @public
|
|
2041
2126
|
*/
|
|
@@ -2080,10 +2165,12 @@ type RegleCollectionRuleDeclKeyProperty = {
|
|
|
2080
2165
|
* @public
|
|
2081
2166
|
*/
|
|
2082
2167
|
type RegleCollectionRuleDecl<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = ({
|
|
2083
|
-
$each?:
|
|
2168
|
+
$each?: RegleCollectionEachRules<TValue, TCustomRules>;
|
|
2084
2169
|
} & RegleRuleDecl<NonNullable<TValue>, TCustomRules>) | ({
|
|
2085
|
-
$each?:
|
|
2170
|
+
$each?: RegleCollectionEachRules<TValue, TCustomRules>;
|
|
2086
2171
|
} & FieldRegleBehaviourOptions);
|
|
2172
|
+
/** @public */
|
|
2173
|
+
type RegleCollectionEachRules<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = MaybeGetter<RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>, ArrayElement<TValue>, RegleCollectionRuleDeclKeyProperty>;
|
|
2087
2174
|
/**
|
|
2088
2175
|
* @internal
|
|
2089
2176
|
* @reference {@link RegleCollectionRuleDecl}
|
|
@@ -2180,7 +2267,7 @@ interface $InternalRegleStatus extends $InternalRegleCommonStatus {
|
|
|
2180
2267
|
/**
|
|
2181
2268
|
* @public
|
|
2182
2269
|
*/
|
|
2183
|
-
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>;
|
|
2184
2271
|
/**
|
|
2185
2272
|
* @internal
|
|
2186
2273
|
* @reference {@link InferRegleStatusType}
|
|
@@ -2462,13 +2549,13 @@ declare function createRule<TValue extends any, TParams extends any[], TReturn e
|
|
|
2462
2549
|
|
|
2463
2550
|
/**
|
|
2464
2551
|
* Returns a clean list of parameters
|
|
2465
|
-
* Removing Ref and executing function to return the
|
|
2552
|
+
* Removing Ref and executing function to return the unwrapped value
|
|
2466
2553
|
*/
|
|
2467
2554
|
declare function unwrapRuleParameters<TParams extends any[]>(params: MaybeRefOrGetter[]): TParams;
|
|
2468
2555
|
|
|
2469
2556
|
/**
|
|
2470
2557
|
* Define a global regle configuration, where you can:
|
|
2471
|
-
* - Customize
|
|
2558
|
+
* - Customize built-in rules messages
|
|
2472
2559
|
* - Add your custom rules
|
|
2473
2560
|
* - Define global modifiers
|
|
2474
2561
|
* - Define shortcuts
|
|
@@ -2506,7 +2593,7 @@ declare function extendRegleConfig<TRootCustomRules extends Partial<AllRulesDecl
|
|
|
2506
2593
|
type MergedRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TValue = {
|
|
2507
2594
|
[K in keyof TRegles]: TRegles[K]['$value'];
|
|
2508
2595
|
}> = Omit<RegleCommonStatus, '$value' | '$silentValue' | '$errors' | '$silentErrors' | '$name' | '$unwatch' | '$watch'> & {
|
|
2509
|
-
/**
|
|
2596
|
+
/** Map of merged Regle instances and their properties */
|
|
2510
2597
|
readonly $instances: {
|
|
2511
2598
|
[K in keyof TRegles]: TRegles[K];
|
|
2512
2599
|
};
|
|
@@ -2605,7 +2692,7 @@ declare const useScopedRegle: useRegleFn<Partial<AllRulesDeclarations>, never, {
|
|
|
2605
2692
|
* })
|
|
2606
2693
|
* ```
|
|
2607
2694
|
*/
|
|
2608
|
-
declare function createVariant<TForm extends Record<string, any>, TDiscriminant extends keyof JoinDiscriminatedUnions<TForm>, TVariants extends VariantTuple<JoinDiscriminatedUnions<TForm>, TDiscriminant>>(root: MaybeRefOrGetter<TForm> | DeepReactiveState<TForm>,
|
|
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]>;
|
|
2609
2696
|
/**
|
|
2610
2697
|
* Narrow a nested variant field to a discriminated value
|
|
2611
2698
|
*
|
|
@@ -2620,7 +2707,7 @@ declare function narrowVariant<TRoot extends {
|
|
|
2620
2707
|
}, const TKey extends keyof TRoot, const TValue extends LazyJoinDiscriminatedUnions<Exclude<TRoot[TKey], RegleCollectionStatus<any, any, any> | RegleStatus<any, any, any>>> extends {
|
|
2621
2708
|
$value: infer V;
|
|
2622
2709
|
} ? V : unknown>(root: TRoot, discriminantKey: TKey, discriminantValue: TValue): root is Extract<TRoot, {
|
|
2623
|
-
[K in TKey]: RegleFieldStatus<TValue, any, any>;
|
|
2710
|
+
[K in TKey]: RegleFieldStatus<TValue, any, any> | RegleFieldStatus<MaybeInput<TValue>, any, any>;
|
|
2624
2711
|
}>;
|
|
2625
2712
|
/**
|
|
2626
2713
|
* Narrow a nested variant root to a reactive reference
|
|
@@ -2637,4 +2724,31 @@ declare function variantToRef<TRoot extends RegleStatus<{}, any, any>, const TKe
|
|
|
2637
2724
|
[K in TKey]: RegleFieldStatus<TValue, any, any>;
|
|
2638
2725
|
}> | undefined>;
|
|
2639
2726
|
|
|
2640
|
-
|
|
2727
|
+
/**
|
|
2728
|
+
* Helper method to wrap an raw rules object
|
|
2729
|
+
*
|
|
2730
|
+
* Similar to:
|
|
2731
|
+
*
|
|
2732
|
+
* ```ts
|
|
2733
|
+
* const rules = {...} satisfies RegleUnknownRulesTree
|
|
2734
|
+
* ```
|
|
2735
|
+
*/
|
|
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
|
+
*/
|
|
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>;
|
|
2753
|
+
|
|
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 };
|
package/dist/regle-core.min.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {effectScope,computed,toValue,ref,watch,getCurrentInstance,onMounted,reactive,getCurrentScope,onScopeDispose,isRef,shallowRef,toRef,unref,watchEffect,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 xt=Symbol("regle-rule");function nr(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 G(e){let t=e,n={}.toString.call(e).slice(8,-1);if(n=="Set"&&(t=new Set([...e].map(r=>G(r)))),n=="Map"&&(t=new Map([...e].map(r=>[G(r[0]),G(r[1])]))),n=="Date"&&(t=new Date(e.getTime())),n=="RegExp"&&(t=RegExp(e.source,nr(e))),n=="Array"||n=="Object"){t=Array.isArray(e)?[]:{};for(let r in e)t[r]=G(e[r]);}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 Ye(e,...t){for(var n=[].slice.call(arguments),r,a=n.length;r=n[a-1],a--;)if(!r||typeof r!="object"&&typeof r!="function")throw new Error("expected object, got "+r);for(var o=n[0],s=n.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 _e(e,t,n){let r,a=(...o)=>new Promise(s=>{clearTimeout(r),r=setTimeout(()=>{r=void 0,Promise.resolve(e.apply(this,[...o])).then(s);},t);});return a.cancel=()=>{clearTimeout(r),r=void 0;},a}var Xe={Inline:"__inline",Async:"__async"};function Dt(e,t){return e.some(n=>n[t])}function Ct(e,t){return e.reduce((n,r)=>{let a=r[t]||[];return n.concat(a)},[])}function re(e){try{return e.map(t=>toValue(t))}catch{return []}}function It(e){return e.map(t=>t instanceof Function?computed(t):isRef(t)?t:toRef(()=>t))}function Ot(e){let r=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return r?(r[0]||r[1]||r[2]||r[3]||r[4]||"").split(",").map(s=>s.trim()).filter(s=>s.length>0).length:0}function Ze(e,...t){let{validator:n,type:r}=e,a=r===Xe.Async||n.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:It(t),_brand:xt}}function et(e){if(typeof e.validator=="function"){let n=Ze(e,...[]),r=e.async??e.validator.constructor.name==="AsyncFunction";if(Ot(e.validator)>1){let a=function(...o){return Ze(e,...o)};return a.validator=n.validator,a.message=n.message,a.active=n.active,a.tooltip=n.tooltip,a.type=n.type,a.exec=n.exec,a._validator=n.validator,a._message=n.message,a._active=n.active,a._tooltip=n.tooltip,a._type=e.type,a._message_pacthed=false,a._tooltip_pacthed=false,a._async=r,a}else return n}throw new Error("[createRule] validator must be a function")}function tt(){let e=shallowRef(new Map),t=shallowRef(new Map),n=shallowRef(new Map),r=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=n.value.get($);if(E)return E;{let x=ref([]);return n.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 V($,E){r.value.set($,E);}function D($){return r.value.get($)??false}function A($,E){e.value.set($,E);}function P($,E){let x=e.value.get($);return x?O(E,x)?{valid:true}:{valid:false}:void 0}function O($,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((N,W)=>{if(typeof S=="number"||typeof S=="boolean")return true;{let K=re(S._params),H=re(y._params);return K?.[W]===H?.[W]}}):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(),n.value.clear(),r.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:A,setDirtyEntry:V,checkRuleDeclEntry:P,getDirtyState:D,trySetRuleStatusRef:l,getFieldsEntry:s,getCollectionsEntry:i,getArrayStatus:R,addArrayStatus:g,deleteArrayStatus:h,arrayStatusStorage:o}}function Ne(e){return _(e.value)}function rt(e,t,n){let r=effectScope(),a;return e instanceof Function?a=r.run(()=>e(t,n??0)):a=e,{scope:r,unwrapped:a}}var Pe={LessThan:-1,EqualTo:0,GreaterThan:1};function Rr(e,t){let n=String(e).split("."),r=String(t).split(".");for(let a=0;a<Math.min(n.length,r.length);a++){let o=Number(n[a]),s=Number(r[a]);if(o>s)return Pe.GreaterThan;if(s>o)return Pe.LessThan;if(!isNaN(o)&&isNaN(s))return Pe.GreaterThan;if(isNaN(o)&&!isNaN(s))return Pe.LessThan}return Pe.EqualTo}var ke=Rr(version,"3.5.0")!==-1;function dr(){return Math.floor(Math.random()*Date.now()).toString()}function he(){return typeof window>"u"?dr():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function wt(e){return getCurrentScope()?(onScopeDispose(e),true):false}function Pt(e){let t=false,n,r=effectScope(true);return (...a)=>(t||(n=r.run(()=>e(...a)),t=true),n)}function Ge(e,t){return Ne(e)||_(t.value)&&!te(t.value)&&!Object.entries(t.value).some(([n,r])=>me(r)||typeof r=="function")}function Mt(e,t,n=false){return !!e.value&&_(e.value)&&"$each"in e.value||n&&Array.isArray(t.value)&&t.value.some(_)||Array.isArray(t.value)&&t.value.some(_)}function Ue(e){return !!e.value&&_(e.value)}function me(e){return _(e)&&"_validator"in e}function Me(e){return typeof e.value=="function"?"_validator"in e.value:true}function jt(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(([n,r])=>t&&!r.$valid||!r.$valid&&e.$error&&!r.$validating?r.$message:null).filter(n=>!!n).reduce((n,r)=>typeof r=="string"?n?.concat([r]):n?.concat(r),[]).concat(e.$error?e.$externalErrors??[]:[]).concat(e.$error?e.$schemaErrors??[]:[])}function At({field:e}){return Object.entries(e.$rules??{}).map(([t,n])=>n.$tooltip).filter(t=>!!t).reduce((t,n)=>typeof n=="string"?t?.concat([n]):t?.concat(n),[])}function Vt(e){return _(e)&&"$each"in e}function lt(e,t){let{includePath:n=false}=t??{};if(Array.isArray(e)&&e.every(r=>!_(r)))return e;if(Vt(e)){let r=n?e.$self?.map(o=>({error:o,path:""}))??[]:e.$self??[],a=e.$each?.map(o=>We(o,n))??[];return r?.concat(a.flat())}else return Object.entries(e).map(([r,a])=>We(a,n,[r])).flat()}function We(e,t=false,n){let r=t&&!n?[]:n;if(Array.isArray(e)&&e.every(a=>!_(a)))return t?e.map(a=>({error:a,path:r?.join(".")??""})):e;if(Vt(e)){let a=r?.length?e.$self?.map(s=>({error:s,path:r.join(".")}))??[]:e.$self??[],o=e.$each?.map((s,i)=>We(s,t,r?.concat(i.toString())))??[];return a?.concat(o.flat())}else return Object.entries(e).map(([a,o])=>We(o,t,r?.concat(a))).flat()}function Ft({customMessages:e,rule:t,ruleKey:n,state:r,path:a,storage:o,$debounce:s,modifiers:i}){let g=effectScope(),R={},h,V=ref(false),D=ref(false),{$pending:A,$valid:P,$metadata:O,$validating:l}=o.trySetRuleStatusRef(`${a}.${n}`);function $(){g=effectScope(),R=g.run(()=>{let S=ref(false),N=ref(false),W=ref(true),K=ref(false),H=ref(false),le=computed(()=>({$value:r.value,$error:N.value,$dirty:S.value,$pending:K.value,$correct:H.value,$invalid:W.value,$rule:{$valid:P.value,$invalid:!P.value,$pending:A.value},$params:f.value,...O.value})),C=computed(()=>Me(t)?typeof t.value.active=="function"?t.value.active(le.value):!!t.value.active:true);function z(w){let J="",m=e?e[n]?.[w]:void 0;if(m&&(typeof m=="function"?J=m(le.value):J=m),Me(t)){let j=`_${w}_patched`;m&&!t.value[j]||(typeof t.value[w]=="function"?J=t.value[w](le.value):J=t.value[w]??"");}return J}let ge=computed(()=>{let w=z("message");return te(w)&&(w="This field is not valid"),w}),ce=computed(()=>z("tooltip")),u=computed(()=>Me(t)&&t.value.type?t.value.type:n),p=computed(()=>Me(t)?t.value.validator:t.value),f=computed(()=>typeof t.value=="function"?[]:re(t.value._params??[])),I=computed(()=>`${a}.${u.value}`);return {$active:C,$message:ge,$type:u,$validator:p,$params:f,$path:I,$tooltip:ce,$fieldCorrect:H,$fieldError:N,$fieldDirty:S,$fieldPending:K,$fieldInvalid:W}}),h=watch(R?.$params,()=>{(i.$autoDirty.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 N=R.$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(r.value,...R.$params.value),K=r.value;E();let H;if(W instanceof Promise?H=await W:H=W,r.value!==K)return !0;if(typeof H=="boolean")S=H;else {let{$valid:le,...C}=H;S=le,O.value=C;}}catch{S=false;}finally{A.value=false;}return S}let d=_e(x,s??200);async function b(){try{l.value=!0;let S=!1;if(D.value=!0,me(t.value)&&t.value._async)S=await d();else {let N=R.$validator.value,W=N(r.value,...R.$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,O.value=H;}}return P.value=S,S}catch{return false}finally{l.value=false,D.value=false;}}function c(){P.value=true,O.value={},A.value=false,l.value=false,$();}function y(){h(),g.stop(),g=effectScope();}return reactive({...R,$pending:A,$valid:P,$metadata:O,$haveAsync:V,$maybePending:D,$validating:l,$parse:b,$unwatch:y,$watch:$,$reset:c})}function Ee({state:e,rulesDef:t,customMessages:n,path:r,fieldName:a,storage:o,options:s,externalErrors:i,schemaErrors:g,schemaMode:R,onUnwatch:h,$isArray:V,initialState:D,shortcuts:A,onValidate:P}){let O=effectScope(),l,$=[],E,x,d,b,c,y=()=>{};function S(){let T=t.value,F=o.checkRuleDeclEntry(r,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,Ft({modifiers:{$autoDirty:l.$autoDirty,$rewardEarly:l.$rewardEarly},customMessages:n,rule:se,ruleKey:v,state:e,path:r,storage:o,$debounce:z.value.$debounce})]}return []}).filter(v=>!!v.length)),l.processShortcuts(),N(),F?.valid!=null&&(l.$dirty.value=o.getDirtyState(r),(l.$dirty.value&&l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&y()),o.addRuleDeclEntry(r,T);}function N(){y=l.$debounce.value?_e(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(r,l.$dirty.value),E?.(),x?.(),O.stop(),O=effectScope(),$.forEach(T=>T.stop()),$=[],h?.(),b?.();}function K(){C.value&&Object.entries(C.value).forEach(([T,F])=>{F.$watch();}),l=O.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)),we=computed({get:()=>e.value,set(ie){E(),e.value=ie,H();}}),Ve=computed(()=>$e.value&&!ve.value&&T.value),mt=computed(()=>at({field:{$rules:C.value,$error:Ve.value,$externalErrors:i?.value,$schemaErrors:g?.value}})),yt=computed(()=>at({field:{$rules:C.value,$error:Ve.value,$externalErrors:i?.value,$schemaErrors:g?.value},silent:true})),qe=computed(()=>T.value?D.value instanceof Date&&e.value instanceof Date?Qe(D.value).getDate()!==Qe(e.value).getDate():D.value==null?!!e.value:Array.isArray(e.value)&&Array.isArray(D.value)?e.value.length!==D.value.length:D.value!==e.value:false),gt=computed(()=>qe.value),vt=computed(()=>At({field:{$rules:C.value}})),$t=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||g?.value?.length?true:Fe.value?false:!oe.value||oe.value&&F.value?Object.entries(C.value).some(([ie,X])=>!(X.$valid&&!X.$maybePending)):false),St=computed(()=>a),Fe=computed(()=>!!(te(C.value)&&!R)),Tt=computed(()=>i?.value?.length||Fe.value?false:T.value&&!te(e.value)&&!k.value&&!ve.value?R?!g?.value?.length:Object.values(C.value).some(X=>X.$active)?Object.values(C.value).filter(X=>X.$active).every(X=>X.$valid):false:false),tr=computed(()=>Object.entries(C.value).some(([ie,X])=>X.$haveAsync));function rr(){A?.fields&&Object.entries(A.fields).forEach(([ie,X])=>{let bt=effectScope();ht[ie]=bt.run(()=>{let Et=ref();return watchEffect(()=>{Et.value=X(reactive({$dirty:T,$externalErrors:i?.value??[],$value:e,$silentValue:we,$rules:C,$error:Ve,$pending:ve,$invalid:$e,$correct:Tt,$errors:mt,$ready:$t,$silentErrors:yt,$anyDirty:v,$tooltips:vt,$name:St,$inactive:Fe,$edited:qe,$anyEdited:gt}));}),Et}),$.push(bt);});}let ht={};return watch($e,ie=>{ie||(F.value=false);}),{$error:Ve,$pending:ve,$invalid:$e,$correct:Tt,$debounce:ee,$lazy:se,$errors:mt,$ready:$t,$silentErrors:yt,$rewardEarly:oe,$autoDirty:M,$clearExternalErrorsOnChange:B,$anyDirty:v,$edited:qe,$anyEdited:gt,$name:St,$haveAnyAsyncRule:tr,$shortcuts:ht,$validating:k,$tooltips:vt,$dirty:T,triggerPunishment:F,processShortcuts:rr,$silentValue:we,$inactive:Fe}}),H(),d=watch(l.$dirty,T=>{o.setDirtyEntry(r,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;});}),x=watch(l.$invalid,T=>{l.$rewardEarly.value&&!T&&(l.triggerPunishment.value=false);}),b=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)&&y(),l.$rewardEarly.value!==true&&l.$clearExternalErrorsOnChange.value&&f();},{deep:V?true:ke?1:true});}function le(){Object.values(C.value).forEach(T=>{T.$parse();});}let C=ref({}),z=ref({});S();function ge(T,F){if(f(),l.$dirty.value=false,l.triggerPunishment.value=false,o.setDirtyEntry(r,false),!F)if(T?.toInitialState)e.value=G(D);else if(T?.toState){let v;typeof T?.toState=="function"?v=T?.toState():v=T?.toState,D.value=G(v),e.value=G(v);}else D.value=_(e.value)?G(e.value):Array.isArray(e.value)?[...e.value]:e.value;T?.clearExternalErrors&&f(),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)&&y():T&&y();}async function u(){try{if(R)return P?(ce(!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.$autoDirty.value&&l.$dirty.value&&!l.$pending.value)return {valid:!l.$error.value,data:T};return R?{valid:!g?.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 f(){i?.value?.length&&(i.value=[]);}!l.$lazy.value&&!l.$dirty.value&&l.$autoDirty.value&&y();let{$shortcuts:I,$validating:w,$autoDirty:J,$rewardEarly:m,$clearExternalErrorsOnChange:j,$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:f})}function it({$id:e,path:t,index:n,options:r,storage:a,stateValue:o,customMessages:s,rules:i,externalErrors:g,schemaErrors:R,initialState:h,shortcuts:V,fieldName:D,schemaMode:A}){let P=i.$key?i.$key:he(),O=`${t}.${String(P)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?O=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:P,enumerable:false,configurable:false,writable:false}}));let l=toRef(g?.value??[],n),$=computed(()=>R?.value?.[n]),E=xe({state:o,rulesDef:toRef(()=>i),customMessages:s,path:O,storage:a,options:r,externalErrors:l,schemaErrors:$,initialState:h,shortcuts:V,fieldName:D,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:n,path:r,storage:a,options:o,externalErrors:s,schemaErrors:i,schemaMode:g,initialState:R,shortcuts:h,fieldName:V}){let D=effectScope(),A,P=effectScope(),O,l=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let $=ref(),E=ref(e.value),x,d=ref({}),b=a.getCollectionsEntry(r);O=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(),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)&&!O.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 w=toRef(R.value??[],p),J=toRef(s?.value??{},"$each"),m=computed(()=>i?.value?.$each),j=it({$id:$.value,path:r,customMessages:n,rules:I??{},stateValue:toRef(()=>u),index:p,options:o,storage:a,externalErrors:J,schemaErrors:m,initialState:w,shortcuts:h,fieldName:V,schemaMode:g});return j||null}).filter(u=>!!u):b.value=[],d.value=Ee({state:e,rulesDef:t,customMessages:n,path:r,storage:a,options:o,externalErrors:toRef(s?.value??{},"$self"),schemaErrors:computed(()=>i?.value?.$self),$isArray:true,initialState:R,shortcuts:h,fieldName:V,schemaMode:g});}function y(){if(Array.isArray(e.value)&&!O.isPrimitiveArray.value){let u=G(b.value);b.value=e.value.filter(p=>typeof p=="object").map((p,f)=>{let I=toRef(()=>p);if(p.$id&&b.value.find(w=>w.$id===p.$id)){let w=a.getArrayStatus($.value,p.$id);return w?(w.$value=I,w):null}else {let{scope:w,unwrapped:J}=rt(t.value.$each,I,f);w&&l.push(w);let m=toRef(s?.value??{},"$each"),j=computed(()=>i?.value?.$each??[]),q=it({$id:$.value,path:r,customMessages:n,rules:J??{},stateValue:I,index:f,options:o,storage:a,externalErrors:m,schemaErrors:j,initialState:toRef(R.value??[],f),shortcuts:h,fieldName:V,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:ke?1:true,flush:"pre"});}function N(){S(),D=effectScope(),A=D.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)),w=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||j.value)),j=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)})),fe=computed(()=>({$self:d.value.$silentErrors,$each:b.value.map(v=>v.$silentErrors)})),ue=computed(()=>V);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:j,$invalid:I,$correct:w,$errors:Q,$ready:m,$silentErrors:fe,$anyDirty:f,$name:ue,$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:w,$error:J,$pending:j,$errors:Q,$silentErrors:fe,$ready:m,$name:ue,$shortcuts:F,$silentValue:u,$edited:q,$anyEdited:Z}}),O.isPrimitiveArray.value&&t.value.$each&&console.warn(`${r} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`);}function W(){x&&x(),d.value&&d.value.$unwatch(),b.value&&b.value.forEach(u=>{"$dirty"in u&&u.$unwatch();}),D.stop(),D=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 H(u,p){if(W(),!p)if(u?.toInitialState)e.value=G(R.value);else if(u?.toState){let f;typeof u?.toState=="function"?f=u?.toState():f=u?.toState,R.value=G(f),e.value=G(f);}else R.value=G(e.value);u?.clearExternalErrors&&C(),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 C(){d.value.$clearExternalErrors(),b.value.forEach(u=>{u.$clearExternalErrors();});}function z(u=true){let p=b.value.map(f=>{if(jt(f))return f.$extractDirtyFields(u)});return u&&p.every(f=>te(f))&&(p=[]),p}let{$shortcuts:ge,...ce}=A;return reactive({$self:d,...ce,...ge,$each:b,$value:e,$validate:le,$unwatch:W,$watch:N,$touch:K,$reset:H,$extractDirtyFields:z,$clearExternalErrors:C})}function Le({rulesDef:e,state:t,path:n="",rootRules:r,externalErrors:a,schemaErrors:o,rootSchemaErrors:s,validationGroups:i,initialState:g,fieldName:R,...h}){let V=effectScope(),D,A=[],P=null,O=null,l=null,$=null;async function x(u=true){let p=Object.entries(e.value),f=Object.fromEntries(p.filter(([m,j])=>!!j).map(([m,j])=>{if(j){let q=toRef(t.value??{},m),Z=toRef(()=>j),Q=toRef(a?.value??{},m),fe=computed(()=>o?.value?.[m]),ue=toRef(g?.value??{},m);return [m,xe({state:q,rulesDef:Z,path:n?`${n}.${m}`:m,externalErrors:Q,schemaErrors:fe,initialState:ue,fieldName:m,...h})]}return []})),I=Object.fromEntries(Object.entries(unref(a)??{}).filter(([m,j])=>!(m in e.value)&&!!j).map(([m])=>{let j=toRef(t.value??{},m),q=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),Q=toRef(g?.value??{},m);return [m,xe({state:j,rulesDef:computed(()=>({})),path:n?`${n}.${m}`:m,externalErrors:q,schemaErrors:Z,initialState:Q,fieldName:m,...h})]})),w=Object.fromEntries(Object.entries(unref(o)??{}).map(([m])=>{let j=toRef(t.value??{},m),q=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),Q=toRef(g?.value??{},m);return [m,xe({state:j,rulesDef:computed(()=>({})),path:n?`${n}.${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(w??{}))).map(([m])=>{let j=toRef(t.value??{},m),q=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),Q=toRef(g?.value??{},m);return [m,xe({state:j,rulesDef:computed(()=>({})),path:n?`${n}.${m}`:m,externalErrors:q,schemaErrors:Z,initialState:Q,fieldName:m,...h})]}));d.value={...f,...I,...w,...J},u&&y();}let d=h.storage.getFieldsEntry(n);x();function b(){a&&(l=watch(a,()=>{S(),x();},{deep:true}));}function c(){$=watch(t,()=>{S(),x(),K(true,true);},{flush:"sync"});}function y(){r&&(P?.(),P=watch(r,()=>{S(),x();},{deep:true,flush:"pre"}),b()),s&&(O?.(),O=watch(s,()=>{S(),x();},{deep:true,flush:"post"})),c(),D=V.run(()=>{let u=computed({get:()=>t.value,set(B){S(),t.value=B,x();}}),p=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).every(([B,M])=>M?.$dirty)),f=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)),w=computed(()=>{let B=Object.entries(d.value).filter(([M,k])=>nt(k)?!k.$inactive:true);return B.length?B.every(([M,k])=>h.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(h.options.rewardEarly)!=null?unref(h.options.rewardEarly):false),j=computed(()=>unref(h.options.autoDirty)!=null?unref(h.options.autoDirty):!m.value),q=computed(()=>j.value?f.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(()=>R);function ee(){h.shortcuts?.nested&&Object.entries(h.shortcuts.nested).forEach(([B,M])=>{let k=effectScope();oe[B]=k.run(()=>{let we=ref();return watchEffect(()=>{we.value=M(reactive({$dirty:p,$value:t,$silentValue:u,$error:J,$pending:Q,$invalid:I,$correct:w,$ready:q,$anyDirty:f,$name:v,$silentErrors:ue,$errors:fe,$fields:d,$edited:T,$anyEdited:F}));}),we}),A.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,Dt(M,k)])),...Object.fromEntries(["$errors","$silentErrors"].map(k=>[k,Ct(M,k)]))}]:[])):{},set(){}}),oe={};return ee(),{$dirty:p,$anyDirty:f,$invalid:I,$correct:w,$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(){P?.(),l?.(),$?.(),O?.(),A=[],D={},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=G({...g.value??{}});else if(u?.toState){let f;typeof u?.toState=="function"?f=u?.toState():f=u?.toState,g.value=G(f),t.value=G(f);}else g.value=G(t.value);Object.values(d.value).forEach(f=>{f.$reset(u,true);}),u?.clearExternalErrors&&N(),b(),p||x();}function K(u=true,p=false){Object.values(d.value).forEach(f=>{f.$touch(u,p);});}function H(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=H(p)),Object.fromEntries(p)}async function C(){try{if(h.schemaMode)return h.onValidate?(K(!1),D.$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{D.$localPending.value=false;}}let{$shortcuts:z,$localPending:ge,...ce}=D;return reactive({...ce,...z,$fields:d,$value:t,$reset:W,$touch:K,$validate:C,$unwatch:S,$watch:y,$clearExternalErrors:N,$extractDirtyFields:le})}function xe({rulesDef:e,...t}){if(Mt(e,t.state,t.schemaMode))return Gt({rulesDef:e,...t});if(Ge(t.state,e)){if(Ne(t.state))return Le({rulesDef:e,...t});{let r=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 Le({rulesDef:e,...o,state:r.fakeState})}}else if(Ue(e))return Ee({rulesDef:e,...t})}function Oe({initialState:e,options:t,scopeRules:n,state:r,customRules:a,shortcuts:o,schemaErrors:s,schemaMode:i=false,onValidate:g}){let R=tt(),h=ref();return Ge(r,n)?h.value=Le({rootRules:n,rulesDef:n,state:r,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}):Ue(n)&&(h.value=Ee({rulesDef:n,state:r,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 He(e,t,n){let r={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function a(o,s,i){let g=isRef(s)?s:computed(typeof s=="function"?s:()=>s),R={...r,...i},h=isRef(o)?o:ref(o),V=ref(_(h.value)?{...G(h.value)}:G(h.value));return {r$:Oe({scopeRules:g,state:h,options:R,initialState:V,customRules:e,shortcuts:n}).regle}}return a}var ze=He();function Je(){function e(t,n){return n}return e}var ft=Je();function Lt({rules:e,modifiers:t,shortcuts:n}){let r=He(e,t,n);r.__config={rules:e,modifiers:t,shortcuts:n};let a=Je();return {useRegle:r,inferRules:a}}function Ht(e,{rules:t,modifiers:n,shortcuts:r}){let a=e.__config??{},o=()=>({...a.rules?.(),...t?.()}),s=a.modifiers&&n?Ye(a.modifiers,n):n,i=a.shortcuts&&r?Ye(a.shortcuts,r):r,g=He(o,s,i);g.__config={rules:o,modifiers:s,shortcuts:i};let R=Je();return {useRegle:g,inferRules:R}}function Ae(e,t){let n=t??false,r=computed({get:()=>n?Object.values(e).map(c=>c.$value):Object.fromEntries(Object.entries(e).map(([c,y])=>[c,y.$value])),set:c=>{n||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)}),V=computed(()=>Object.entries(e).some(([c,y])=>y?.$pending)),D=computed(()=>n?Object.entries(e).map(([c,y])=>y.$errors):Object.fromEntries(Object.entries(e).map(([c,y])=>[c,y.$errors]))),A=computed(()=>n?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)}),O=computed(()=>Object.entries(e).some(([c,y])=>y?.$anyEdited)),l=computed(()=>n?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=r.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:r.value}}}return reactive({...!n&&{$silentValue:a},$errors:D,$silentErrors:A,$instances:l,$value:r,$dirty:o,$anyDirty:s,$invalid:i,$correct:g,$error:R,$pending:V,$ready:h,$edited:P,$anyEdited:O,$reset:$,$touch:E,$validate:b,$extractDirtyFields:x,$clearExternalErrors:d})}function Jt(e){function t(n){let r=computed(()=>toValue(n));s();let a=ref(i(e.value)),o=reactive({r$:a});function s(){r.value&&!e.value[r.value]&&(e.value[r.value]={});}watch(r,s),watch(e,g=>{a.value=i(g);},{deep:true});function i(g){if(r.value){let R=g[r.value]??{};return Ae(R,true)}else return Ae(g["~~global"]??{},true)}return {r$:o.r$}}return {useCollectScope:t}}function Yt(e,t){let n=t??ze;return {useScopedRegle:(a,o,s)=>{let{namespace:i,...g}=s??{},R=computed(()=>toValue(i)),h=ref(`${Object.keys(e.value).length+1}-${he()}`),V=computed(()=>`instance-${h.value}`),{r$:D}=n(a,o,g);P(),wt(A),watch(R,(O,l)=>{A(l),P();}),getCurrentInstance()&&onMounted(()=>{let O=getCurrentInstance();typeof window<"u"&&O?.proxy?.$el?.parentElement&&document.documentElement&&!document.documentElement.contains(O?.proxy?.$el?.parentElement)&&A();});function A(O){let l=O??R.value;l?e.value[l]&&delete e.value[l][V.value]:e.value["~~global"][V.value]&&delete e.value["~~global"][V.value];}function P(){R.value?(e.value[R.value]||(e.value[R.value]={}),e.value[R.value][V.value]=D):(e.value["~~global"]||(e.value["~~global"]={}),e.value["~~global"][V.value]=D);}return {r$:D,dispose:A,register:P}}}}function Ke(e){let n=(e?.customStore?()=>(e.customStore&&(e.customStore?.value["~~global"]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value["~~global"]={}),e.customStore):Pt(()=>ref({"~~global":{}})))(),{useScopedRegle:r}=Yt(n,e?.customUseRegle),{useCollectScope:a}=Jt(n);return {useScopedRegle:r,useCollectScope:a}}var {useCollectScope:Rt,useScopedRegle:dt}=Ke();function Zt(e,t,n){let r=computed(()=>toValue(e)[t]);return computed(()=>{let o=n.find(s=>{if(s[t]&&"literal"in s[t]){let i=s[t].literal;if(me(i))return unref(i._params?.[0])===r.value}});if(o)return o;{let s=n.find(i=>_(i[t])&&!Object.keys(i[t]).some(g=>g==="literal"));return s||{}}})}function pt(e,t,n){return _(e[t])&&"$value"in e[t]&&e[t]?.$value===n}function er(e,t,n){let r=isRef(e)?toRef(e.value,"$fields"):toRef(e,"$fields"),a=ref();return watch(r,()=>{pt(r.value,t,n)?a.value=r.value:a.value=void 0;},{immediate:true}),a}
|
|
2
|
-
export{Xe as InternalRuleType,et as createRule,
|
|
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};
|
package/dist/regle-core.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { effectScope, ref, computed, toValue, reactive, watch, getCurrentInstance, onMounted, getCurrentScope, onScopeDispose, isRef, shallowRef, toRef, unref,
|
|
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) =>
|
|
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]) =>
|
|
539
|
+
return Object.entries(errors).map(([key, value]) => iterateErrors(value, includePath, [key])).flat();
|
|
540
540
|
}
|
|
541
541
|
}
|
|
542
|
-
function
|
|
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) =>
|
|
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]) =>
|
|
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.$
|
|
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
|
-
$
|
|
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.$
|
|
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 (
|
|
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.$
|
|
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.$
|
|
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.$
|
|
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.$
|
|
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.$
|
|
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 $
|
|
1999
|
-
if (unref(commonArgs.options.
|
|
2000
|
-
return unref(commonArgs.options.
|
|
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
|
|
2010
|
+
return true;
|
|
2003
2011
|
}
|
|
2004
|
-
return
|
|
2012
|
+
return false;
|
|
2005
2013
|
});
|
|
2006
2014
|
const $ready = computed(() => {
|
|
2007
|
-
if (
|
|
2015
|
+
if ($silent.value) {
|
|
2008
2016
|
return !($invalid.value || $pending.value);
|
|
2009
2017
|
}
|
|
2010
2018
|
return $anyDirty.value && !($invalid.value || $pending.value);
|
|
@@ -2363,20 +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
|
-
const
|
|
2378
|
+
const definedRules = isRef(rulesFactory) ? rulesFactory : typeof rulesFactory === "function" ? void 0 : computed(() => rulesFactory);
|
|
2370
2379
|
const resolvedOptions = {
|
|
2371
2380
|
...globalOptions,
|
|
2372
2381
|
...options2
|
|
2373
2382
|
};
|
|
2374
2383
|
const processedState = isRef(state) ? state : ref(state);
|
|
2384
|
+
const watchableRulesGetters = shallowRef(definedRules ?? {});
|
|
2385
|
+
if (typeof rulesFactory === "function") {
|
|
2386
|
+
watchEffect(() => {
|
|
2387
|
+
watchableRulesGetters.value = rulesFactory(processedState);
|
|
2388
|
+
triggerRef(watchableRulesGetters);
|
|
2389
|
+
});
|
|
2390
|
+
}
|
|
2375
2391
|
const initialState = ref(
|
|
2376
2392
|
isObject(processedState.value) ? { ...cloneDeep(processedState.value) } : cloneDeep(processedState.value)
|
|
2377
2393
|
);
|
|
2378
2394
|
const regle = useRootStorage({
|
|
2379
|
-
scopeRules,
|
|
2395
|
+
scopeRules: watchableRulesGetters,
|
|
2380
2396
|
state: processedState,
|
|
2381
2397
|
options: resolvedOptions,
|
|
2382
2398
|
initialState,
|
|
@@ -2702,12 +2718,12 @@ function createScopedUseRegle(options) {
|
|
|
2702
2718
|
};
|
|
2703
2719
|
}
|
|
2704
2720
|
var { useCollectScope, useScopedRegle } = createScopedUseRegle();
|
|
2705
|
-
function createVariant(root,
|
|
2706
|
-
const watchableRoot = computed(() => toValue(root)[
|
|
2721
|
+
function createVariant(root, discriminantKey, variants) {
|
|
2722
|
+
const watchableRoot = computed(() => toValue(root)[discriminantKey]);
|
|
2707
2723
|
const computedRules = computed(() => {
|
|
2708
2724
|
const selectedVariant = variants.find((variant) => {
|
|
2709
|
-
if (variant[
|
|
2710
|
-
const literalRule = variant[
|
|
2725
|
+
if (variant[discriminantKey] && "literal" in variant[discriminantKey]) {
|
|
2726
|
+
const literalRule = variant[discriminantKey]["literal"];
|
|
2711
2727
|
if (isRuleDef(literalRule)) {
|
|
2712
2728
|
return unref(literalRule._params?.[0]) === watchableRoot.value;
|
|
2713
2729
|
}
|
|
@@ -2717,7 +2733,7 @@ function createVariant(root, disciminantKey, variants) {
|
|
|
2717
2733
|
return selectedVariant;
|
|
2718
2734
|
} else {
|
|
2719
2735
|
const anyDiscriminantRules = variants.find(
|
|
2720
|
-
(variant) => isObject(variant[
|
|
2736
|
+
(variant) => isObject(variant[discriminantKey]) && !Object.keys(variant[discriminantKey]).some((key) => key === "literal")
|
|
2721
2737
|
);
|
|
2722
2738
|
if (anyDiscriminantRules) {
|
|
2723
2739
|
return anyDiscriminantRules;
|
|
@@ -2736,16 +2752,25 @@ function variantToRef(root, discriminantKey, discriminantValue) {
|
|
|
2736
2752
|
const returnedRef = ref();
|
|
2737
2753
|
watch(
|
|
2738
2754
|
fromRoot,
|
|
2739
|
-
() => {
|
|
2755
|
+
async () => {
|
|
2756
|
+
await nextTick();
|
|
2740
2757
|
if (narrowVariant(fromRoot.value, discriminantKey, discriminantValue)) {
|
|
2741
2758
|
returnedRef.value = fromRoot.value;
|
|
2742
2759
|
} else {
|
|
2743
2760
|
returnedRef.value = void 0;
|
|
2744
2761
|
}
|
|
2745
2762
|
},
|
|
2746
|
-
{ immediate: true }
|
|
2763
|
+
{ immediate: true, flush: "pre" }
|
|
2747
2764
|
);
|
|
2748
2765
|
return returnedRef;
|
|
2749
2766
|
}
|
|
2750
2767
|
|
|
2751
|
-
|
|
2768
|
+
// src/core/refineRules.ts
|
|
2769
|
+
function defineRules(rules) {
|
|
2770
|
+
return rules;
|
|
2771
|
+
}
|
|
2772
|
+
function refineRules(rules, refinement) {
|
|
2773
|
+
return (state) => merge({ ...rules }, refinement(state));
|
|
2774
|
+
}
|
|
2775
|
+
|
|
2776
|
+
export { InternalRuleType, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, useRegle, useRootStorage, useScopedRegle, variantToRef };
|