@regle/core 1.2.0-beta.1 → 1.2.0-beta.3
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 +152 -104
- package/dist/regle-core.min.mjs +2 -2
- package/dist/regle-core.mjs +45 -42
- package/package.json +8 -8
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
|
@@ -157,6 +157,46 @@ type Fail = IsEmptyObject<null>; //=> false
|
|
|
157
157
|
*/
|
|
158
158
|
type IsEmptyObject<T> = T extends EmptyObject ? true : false;
|
|
159
159
|
|
|
160
|
+
/**
|
|
161
|
+
Extract all optional keys from the given type.
|
|
162
|
+
|
|
163
|
+
This is useful when you want to create a new type that contains different type values for the optional keys only.
|
|
164
|
+
|
|
165
|
+
@example
|
|
166
|
+
```
|
|
167
|
+
import type {OptionalKeysOf, Except} from 'type-fest';
|
|
168
|
+
|
|
169
|
+
interface User {
|
|
170
|
+
name: string;
|
|
171
|
+
surname: string;
|
|
172
|
+
|
|
173
|
+
luckyNumber?: number;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const REMOVE_FIELD = Symbol('remove field symbol');
|
|
177
|
+
type UpdateOperation<Entity extends object> = Except<Partial<Entity>, OptionalKeysOf<Entity>> & {
|
|
178
|
+
[Key in OptionalKeysOf<Entity>]?: Entity[Key] | typeof REMOVE_FIELD;
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
const update1: UpdateOperation<User> = {
|
|
182
|
+
name: 'Alice'
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
const update2: UpdateOperation<User> = {
|
|
186
|
+
name: 'Bob',
|
|
187
|
+
luckyNumber: REMOVE_FIELD
|
|
188
|
+
};
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
@category Utilities
|
|
192
|
+
*/
|
|
193
|
+
type OptionalKeysOf<BaseType extends object> =
|
|
194
|
+
BaseType extends unknown // For distributing `BaseType`
|
|
195
|
+
? (keyof {
|
|
196
|
+
[Key in keyof BaseType as BaseType extends Record<Key, BaseType[Key]> ? never : Key]: never
|
|
197
|
+
}) & (keyof BaseType) // Intersect with `keyof BaseType` to ensure result of `OptionalKeysOf<BaseType>` is always assignable to `keyof BaseType`
|
|
198
|
+
: never; // Should never happen
|
|
199
|
+
|
|
160
200
|
/**
|
|
161
201
|
Extract all required keys from the given type.
|
|
162
202
|
|
|
@@ -181,11 +221,10 @@ const validator2 = createValidation<User>('surname', value => value.length < 25)
|
|
|
181
221
|
|
|
182
222
|
@category Utilities
|
|
183
223
|
*/
|
|
184
|
-
type RequiredKeysOf<BaseType extends object> =
|
|
185
|
-
|
|
186
|
-
?
|
|
187
|
-
: never
|
|
188
|
-
}[keyof BaseType], undefined>;
|
|
224
|
+
type RequiredKeysOf<BaseType extends object> =
|
|
225
|
+
BaseType extends unknown // For distributing `BaseType`
|
|
226
|
+
? Exclude<keyof BaseType, OptionalKeysOf<BaseType>>
|
|
227
|
+
: never; // Should never happen
|
|
189
228
|
|
|
190
229
|
/**
|
|
191
230
|
Returns a boolean for whether the given type is `never`.
|
|
@@ -566,45 +605,6 @@ type IfAny<T, TypeIfAny = true, TypeIfNotAny = false> = (
|
|
|
566
605
|
IsAny$1<T> extends true ? TypeIfAny : TypeIfNotAny
|
|
567
606
|
);
|
|
568
607
|
|
|
569
|
-
/**
|
|
570
|
-
Extract all optional keys from the given type.
|
|
571
|
-
|
|
572
|
-
This is useful when you want to create a new type that contains different type values for the optional keys only.
|
|
573
|
-
|
|
574
|
-
@example
|
|
575
|
-
```
|
|
576
|
-
import type {OptionalKeysOf, Except} from 'type-fest';
|
|
577
|
-
|
|
578
|
-
interface User {
|
|
579
|
-
name: string;
|
|
580
|
-
surname: string;
|
|
581
|
-
|
|
582
|
-
luckyNumber?: number;
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
const REMOVE_FIELD = Symbol('remove field symbol');
|
|
586
|
-
type UpdateOperation<Entity extends object> = Except<Partial<Entity>, OptionalKeysOf<Entity>> & {
|
|
587
|
-
[Key in OptionalKeysOf<Entity>]?: Entity[Key] | typeof REMOVE_FIELD;
|
|
588
|
-
};
|
|
589
|
-
|
|
590
|
-
const update1: UpdateOperation<User> = {
|
|
591
|
-
name: 'Alice'
|
|
592
|
-
};
|
|
593
|
-
|
|
594
|
-
const update2: UpdateOperation<User> = {
|
|
595
|
-
name: 'Bob',
|
|
596
|
-
luckyNumber: REMOVE_FIELD
|
|
597
|
-
};
|
|
598
|
-
```
|
|
599
|
-
|
|
600
|
-
@category Utilities
|
|
601
|
-
*/
|
|
602
|
-
type OptionalKeysOf<BaseType extends object> = Exclude<{
|
|
603
|
-
[Key in keyof BaseType]: BaseType extends Record<Key, BaseType[Key]>
|
|
604
|
-
? never
|
|
605
|
-
: Key
|
|
606
|
-
}[keyof BaseType], undefined>;
|
|
607
|
-
|
|
608
608
|
/**
|
|
609
609
|
Matches any primitive, `void`, `Date`, or `RegExp` value.
|
|
610
610
|
*/
|
|
@@ -723,7 +723,11 @@ type ApplyDefaultOptions<
|
|
|
723
723
|
IfNever<SpecifiedOptions, Defaults,
|
|
724
724
|
Simplify<Merge<Defaults, {
|
|
725
725
|
[Key in keyof SpecifiedOptions
|
|
726
|
-
as Key extends OptionalKeysOf<Options>
|
|
726
|
+
as Key extends OptionalKeysOf<Options>
|
|
727
|
+
? Extract<SpecifiedOptions[Key], undefined> extends never
|
|
728
|
+
? Key
|
|
729
|
+
: never
|
|
730
|
+
: Key
|
|
727
731
|
]: SpecifiedOptions[Key]
|
|
728
732
|
}> & Required<Options>> // `& Required<Options>` ensures that `ApplyDefaultOptions<SomeOption, ...>` is always assignable to `Required<SomeOption>`
|
|
729
733
|
>>;
|
|
@@ -893,27 +897,29 @@ const partialSettings: PartialDeep<Settings, {recurseIntoArrays: true}> = {
|
|
|
893
897
|
type PartialDeep<T, Options extends PartialDeepOptions = {}> =
|
|
894
898
|
_PartialDeep<T, ApplyDefaultOptions<PartialDeepOptions, DefaultPartialDeepOptions, Options>>;
|
|
895
899
|
|
|
896
|
-
type _PartialDeep<T, Options extends Required<PartialDeepOptions>> = T extends BuiltIns | ((
|
|
900
|
+
type _PartialDeep<T, Options extends Required<PartialDeepOptions>> = T extends BuiltIns | ((new (...arguments_: any[]) => unknown))
|
|
897
901
|
? T
|
|
898
|
-
: T extends
|
|
899
|
-
?
|
|
900
|
-
: T extends
|
|
901
|
-
?
|
|
902
|
-
: T extends
|
|
903
|
-
?
|
|
904
|
-
: T extends
|
|
905
|
-
?
|
|
906
|
-
: T extends
|
|
907
|
-
?
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
902
|
+
: IsNever$1<keyof T> extends true // For functions with no properties
|
|
903
|
+
? T
|
|
904
|
+
: T extends Map<infer KeyType, infer ValueType>
|
|
905
|
+
? PartialMapDeep<KeyType, ValueType, Options>
|
|
906
|
+
: T extends Set<infer ItemType>
|
|
907
|
+
? PartialSetDeep<ItemType, Options>
|
|
908
|
+
: T extends ReadonlyMap<infer KeyType, infer ValueType>
|
|
909
|
+
? PartialReadonlyMapDeep<KeyType, ValueType, Options>
|
|
910
|
+
: T extends ReadonlySet<infer ItemType>
|
|
911
|
+
? PartialReadonlySetDeep<ItemType, Options>
|
|
912
|
+
: T extends object
|
|
913
|
+
? T extends ReadonlyArray<infer ItemType> // Test for arrays/tuples, per https://github.com/microsoft/TypeScript/issues/35156
|
|
914
|
+
? Options['recurseIntoArrays'] extends true
|
|
915
|
+
? ItemType[] extends T // Test for arrays (non-tuples) specifically
|
|
916
|
+
? readonly ItemType[] extends T // Differentiate readonly and mutable arrays
|
|
917
|
+
? ReadonlyArray<_PartialDeep<Options['allowUndefinedInNonTupleArrays'] extends false ? ItemType : ItemType | undefined, Options>>
|
|
918
|
+
: Array<_PartialDeep<Options['allowUndefinedInNonTupleArrays'] extends false ? ItemType : ItemType | undefined, Options>>
|
|
919
|
+
: PartialObjectDeep<T, Options> // Tuples behave properly
|
|
920
|
+
: T // If they don't opt into array testing, just use the original type
|
|
921
|
+
: PartialObjectDeep<T, Options>
|
|
922
|
+
: unknown;
|
|
917
923
|
|
|
918
924
|
/**
|
|
919
925
|
Same as `PartialDeep`, but accepts only `Map`s and as inputs. Internal helper for `PartialDeep`.
|
|
@@ -938,9 +944,12 @@ type PartialReadonlySetDeep<T, Options extends Required<PartialDeepOptions>> = {
|
|
|
938
944
|
/**
|
|
939
945
|
Same as `PartialDeep`, but accepts only `object`s as inputs. Internal helper for `PartialDeep`.
|
|
940
946
|
*/
|
|
941
|
-
type PartialObjectDeep<ObjectType extends object, Options extends Required<PartialDeepOptions>> =
|
|
942
|
-
|
|
943
|
-
|
|
947
|
+
type PartialObjectDeep<ObjectType extends object, Options extends Required<PartialDeepOptions>> =
|
|
948
|
+
(ObjectType extends (...arguments_: any) => unknown
|
|
949
|
+
? (...arguments_: Parameters<ObjectType>) => ReturnType<ObjectType>
|
|
950
|
+
: {}) & ({
|
|
951
|
+
[KeyType in keyof ObjectType]?: _PartialDeep<ObjectType[KeyType], Options>
|
|
952
|
+
});
|
|
944
953
|
|
|
945
954
|
type ExcludeUndefined<T> = Exclude<T, undefined>;
|
|
946
955
|
|
|
@@ -1080,20 +1089,27 @@ interface RegleBehaviourOptions {
|
|
|
1080
1089
|
*/
|
|
1081
1090
|
lazy?: boolean | undefined;
|
|
1082
1091
|
/**
|
|
1083
|
-
*
|
|
1092
|
+
* Automatically set the dirty set without the need of `$value` or `$touch`.
|
|
1084
1093
|
* @default true
|
|
1085
1094
|
*
|
|
1086
|
-
* @default false if rewardEarly is true
|
|
1087
|
-
|
|
1088
1095
|
*/
|
|
1089
1096
|
autoDirty?: boolean | undefined;
|
|
1097
|
+
/**
|
|
1098
|
+
* Only update error status when calling `$validate`.
|
|
1099
|
+
* Will not display errors as you type
|
|
1100
|
+
* @default false
|
|
1101
|
+
*
|
|
1102
|
+
* @default true if rewardEarly is true
|
|
1103
|
+
*
|
|
1104
|
+
*/
|
|
1105
|
+
silent?: boolean | undefined;
|
|
1090
1106
|
/**
|
|
1091
1107
|
* The fields will turn valid when they are, but not invalid unless calling `r$.$validate()`
|
|
1092
1108
|
* @default false
|
|
1093
1109
|
*/
|
|
1094
1110
|
rewardEarly?: boolean | undefined;
|
|
1095
1111
|
/**
|
|
1096
|
-
* Define
|
|
1112
|
+
* Define whether the external errors should be cleared when updating a field
|
|
1097
1113
|
* @default true
|
|
1098
1114
|
*
|
|
1099
1115
|
*/
|
|
@@ -1125,15 +1141,15 @@ type ShortcutCommonFn<T extends Record<string, any>> = {
|
|
|
1125
1141
|
};
|
|
1126
1142
|
type RegleShortcutDefinition<TCustomRules extends Record<string, any> = {}> = {
|
|
1127
1143
|
/**
|
|
1128
|
-
* Allow you to customize the properties
|
|
1144
|
+
* Allow you to customize the properties for every field
|
|
1129
1145
|
*/
|
|
1130
1146
|
fields?: ShortcutCommonFn<RegleFieldStatus<any, Partial<TCustomRules> & Partial<DefaultValidators>>>;
|
|
1131
1147
|
/**
|
|
1132
|
-
* Allow you to customize the properties
|
|
1148
|
+
* Allow you to customize the properties for every parent of a nested object
|
|
1133
1149
|
*/
|
|
1134
1150
|
nested?: ShortcutCommonFn<RegleStatus<Record<string, any>, ReglePartialRuleTree<any, Partial<TCustomRules> & Partial<DefaultValidators>>>>;
|
|
1135
1151
|
/**
|
|
1136
|
-
* Allow you to customize the properties
|
|
1152
|
+
* Allow you to customize the properties for every parent of a collection
|
|
1137
1153
|
*/
|
|
1138
1154
|
collections?: ShortcutCommonFn<RegleCollectionStatus<any[], Partial<TCustomRules> & Partial<DefaultValidators>>>;
|
|
1139
1155
|
};
|
|
@@ -1143,7 +1159,7 @@ type AddDollarToOptions<T extends Record<string, any>> = {
|
|
|
1143
1159
|
|
|
1144
1160
|
type Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> = EmptyObject, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}, TShortcuts extends RegleShortcutDefinition = {}, TAdditionalReturnProperties extends Record<string, any> = {}> = {
|
|
1145
1161
|
/**
|
|
1146
|
-
* r$ is a reactive object containing the values, errors, dirty state and all the necessary validations properties you'll need to display
|
|
1162
|
+
* r$ is a reactive object containing the values, errors, dirty state and all the necessary validations properties you'll need to display information.
|
|
1147
1163
|
*
|
|
1148
1164
|
* To see the list of properties: {@link https://reglejs.dev/core-concepts/validation-properties}
|
|
1149
1165
|
*/
|
|
@@ -1151,7 +1167,7 @@ type Regle<TState extends Record<string, any> = EmptyObject, TRules extends Regl
|
|
|
1151
1167
|
} & TAdditionalReturnProperties;
|
|
1152
1168
|
type RegleSingleField<TState extends Maybe<PrimitiveTypes> = any, TRules extends RegleRuleDecl<NonNullable<TState>> = EmptyObject, TShortcuts extends RegleShortcutDefinition = {}, TAdditionalReturnProperties extends Record<string, any> = {}> = {
|
|
1153
1169
|
/**
|
|
1154
|
-
* r$ is a reactive object containing the values, errors, dirty state and all the necessary validations properties you'll need to display
|
|
1170
|
+
* r$ is a reactive object containing the values, errors, dirty state and all the necessary validations properties you'll need to display information.
|
|
1155
1171
|
*
|
|
1156
1172
|
* To see the list of properties: {@link https://reglejs.dev/core-concepts/validation-properties}
|
|
1157
1173
|
*/
|
|
@@ -1171,7 +1187,7 @@ type ResetOptions<TState extends unknown> = RequireOneOrNone<{
|
|
|
1171
1187
|
toInitialState?: boolean;
|
|
1172
1188
|
/**
|
|
1173
1189
|
* Reset validation status and reset form state to the given state
|
|
1174
|
-
* Also set the new state as
|
|
1190
|
+
* Also set the new state as the initial state.
|
|
1175
1191
|
*/
|
|
1176
1192
|
toState?: TState | (() => TState);
|
|
1177
1193
|
/**
|
|
@@ -1210,16 +1226,16 @@ type $InternalRegleResult = {
|
|
|
1210
1226
|
data: any;
|
|
1211
1227
|
};
|
|
1212
1228
|
type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Record<string, any>, CustomRulesDeclarationTree> | undefined> = [unknown] extends [TState] ? {} : TRules extends undefined ? TState : TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> ? Prettify<{
|
|
1213
|
-
[K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? K : never]?: SafeProperty<TState[K], TRules[K]>;
|
|
1229
|
+
[K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? K : never]?: SafeProperty<TState[K], TRules[K]> extends MaybeInput<infer M> ? MaybeOutput<M> : SafeProperty<TState[K], TRules[K]>;
|
|
1214
1230
|
} & {
|
|
1215
|
-
[K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? never : K]-?: NonNullable<SafeProperty<TState[K], TRules[K]>>;
|
|
1231
|
+
[K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? never : K]-?: unknown extends SafeProperty<TState[K], TRules[K]> ? unknown : NonNullable<SafeProperty<TState[K], TRules[K]>>;
|
|
1216
1232
|
}> : TState;
|
|
1217
1233
|
type FieldHaveRequiredRule<TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleRuleDecl<any, any> ? [unknown] extends TRule['required'] ? NonNullable<TRule['literal']> extends RegleRuleDefinition<any, any[], any, any, any, any> ? true : false : NonNullable<TRule['required']> extends TRule['required'] ? TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any, any> ? Params extends never[] ? true : false : false : false : false;
|
|
1218
1234
|
type ObjectHaveAtLeastOneRequiredField<TState extends Record<string, any>, TRule extends ReglePartialRuleTree<TState, any>> = TState extends Maybe<TState> ? {
|
|
1219
1235
|
[K in keyof NonNullable<TState>]-?: IsPropertyOutputRequired<NonNullable<TState>[K], TRule[K]>;
|
|
1220
1236
|
}[keyof TState] extends false ? false : true : true;
|
|
1221
1237
|
type ArrayHaveAtLeastOneRequiredField<TState extends Maybe<any[]>, TRule extends RegleCollectionRuleDecl<TState>> = TState extends Maybe<TState> ? FieldHaveRequiredRule<Omit<TRule, '$each'> extends RegleRuleDecl ? Omit<TRule, '$each'> : {}> | ObjectHaveAtLeastOneRequiredField<ArrayElement<NonNullable<TState>>, ExtractFromGetter<TRule['$each']> extends undefined ? {} : NonNullable<ExtractFromGetter<TRule['$each']>>> extends false ? false : true : true;
|
|
1222
|
-
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined> =
|
|
1238
|
+
type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = unknown extends TState ? unknown : TRule extends RegleCollectionRuleDecl<any, any> ? TState extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, ExtractFromGetter<TRule['$each']>>[] : TState : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? DeepSafeFormState<NonNullable<TState> extends Record<string, any> ? JoinDiscriminatedUnions<NonNullable<TState>> : {}, TRule> : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends true ? TState : MaybeOutput<TState> : TState : TState;
|
|
1223
1239
|
type IsPropertyOutputRequired<TState, TRule extends RegleFormPropertyType<any, any> | undefined> = [
|
|
1224
1240
|
unknown
|
|
1225
1241
|
] extends [TState] ? unknown : NonNullable<TState> extends Array<any> ? TRule extends RegleCollectionRuleDecl<any, any> ? ArrayHaveAtLeastOneRequiredField<NonNullable<TState>, TRule> extends false ? false : true : false : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? ObjectHaveAtLeastOneRequiredField<NonNullable<TState> extends Record<string, any> ? NonNullable<TState> : {}, TRule> extends false ? false : true : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends false ? false : true : false : false;
|
|
@@ -1772,7 +1788,7 @@ declare function useRootStorage({ initialState, options, scopeRules, state, cust
|
|
|
1772
1788
|
};
|
|
1773
1789
|
|
|
1774
1790
|
/**
|
|
1775
|
-
* Converts
|
|
1791
|
+
* Converts a nested $errors object to a flat array of string errors
|
|
1776
1792
|
*
|
|
1777
1793
|
* Can also flatten to an array containing the path of each error with the options.includePath
|
|
1778
1794
|
*/
|
|
@@ -1802,7 +1818,7 @@ type RemoveCommonKey<T extends readonly any[], K extends PropertyKey> = T extend
|
|
|
1802
1818
|
*/
|
|
1803
1819
|
type GetMaybeObjectValue<O extends Record<string, any>, K extends string> = K extends keyof O ? O[K] : undefined;
|
|
1804
1820
|
/**
|
|
1805
|
-
* Combine all
|
|
1821
|
+
* Combine all union values to be able to get even the normally "never" values, act as an intersection type
|
|
1806
1822
|
*/
|
|
1807
1823
|
type RetrieveUnionUnknownValues<T extends readonly any[], TKeys extends string> = T extends [
|
|
1808
1824
|
infer F extends Record<string, any>,
|
|
@@ -1816,15 +1832,15 @@ type RetrieveUnionUnknownValues<T extends readonly any[], TKeys extends string>
|
|
|
1816
1832
|
...RetrieveUnionUnknownValues<R, TKeys>
|
|
1817
1833
|
] : [];
|
|
1818
1834
|
/**
|
|
1819
|
-
* Get all possible keys from
|
|
1835
|
+
* Get all possible keys from a union, even the ones present only on one union
|
|
1820
1836
|
*/
|
|
1821
1837
|
type RetrieveUnionUnknownKeysOf<T extends readonly any[]> = T extends [infer F, ...infer R] ? [keyof F, ...RetrieveUnionUnknownKeysOf<R>] : [];
|
|
1822
1838
|
/**
|
|
1823
|
-
* Transforms
|
|
1839
|
+
* Transforms a union and apply undefined values to non-present keys to support intersection
|
|
1824
1840
|
*/
|
|
1825
1841
|
type NormalizeUnion<TUnion> = RetrieveUnionUnknownValues<NonNullable<UnionToTuple$1<TUnion>>, RetrieveUnionUnknownKeysOf<NonNullable<UnionToTuple$1<TUnion>>>[number]>[number];
|
|
1826
1842
|
/**
|
|
1827
|
-
* Combine all members of
|
|
1843
|
+
* Combine all members of a union type, merging types for each key, and keeping loose types
|
|
1828
1844
|
*/
|
|
1829
1845
|
type JoinDiscriminatedUnions<TUnion extends unknown> = isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection$1<RemoveCommonKey<UnionToTuple$1<TUnion>, keyof NormalizeUnion<TUnion>>[number]>> & Pick<NormalizeUnion<TUnion>, keyof NormalizeUnion<TUnion>>> : TUnion;
|
|
1830
1846
|
type LazyJoinDiscriminatedUnions<TUnion extends unknown> = isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection$1<RemoveCommonKey<UnionToTuple$1<TUnion>, keyof NonNullable<TUnion>>[number]>> & Pick<NonNullable<TUnion>, keyof NonNullable<TUnion>>> : TUnion;
|
|
@@ -1858,7 +1874,7 @@ type FilterRulesWithInput<TRules extends RegleRuleDecl<any, any>> = {
|
|
|
1858
1874
|
[K in keyof TRules as TRules[K] extends RegleRuleDefinition<any, any, any, any, infer Input> ? unknown extends Input ? never : K : never]: TRules[K] extends RegleRuleDefinition<any, any, any, any, infer Input> ? Input : unknown;
|
|
1859
1875
|
};
|
|
1860
1876
|
type FilterRulesWithSingleType<TRules extends RegleRuleDecl<any, any>> = {
|
|
1861
|
-
[K in keyof TRules as TRules[K] extends RegleRuleDefinition<any, any, any, any, infer Input> ? unknown extends Input ? never : K : never]: TRules[K] extends RegleRuleDefinition<any, any, any, any, infer Input> ? IsUnion$1<NonNullable<Input>> extends true ? unknown : Input : unknown;
|
|
1877
|
+
[K in keyof TRules as TRules[K] extends RegleRuleDefinition<any, any, any, any, infer Input> ? unknown extends Input ? never : IsUnion$1<NonNullable<Input>> extends true ? never : K : never]: TRules[K] extends RegleRuleDefinition<any, any, any, any, infer Input> ? IsUnion$1<NonNullable<Input>> extends true ? unknown : Input : unknown;
|
|
1862
1878
|
};
|
|
1863
1879
|
type InferTupleUnionInput<T extends any[]> = T extends [infer F extends ReglePartialRuleTree, ...infer R] ? [InferInput<F, true>, ...InferTupleUnionInput<R>] : [];
|
|
1864
1880
|
|
|
@@ -1876,9 +1892,9 @@ type UnwrapRegleUniversalParams<T extends MaybeRefOrGetter[] = [], F = CreateFn<
|
|
|
1876
1892
|
}) => any : never>;
|
|
1877
1893
|
|
|
1878
1894
|
/**
|
|
1879
|
-
* Internal definition of the rule, can be used to reset or patch the rule
|
|
1895
|
+
* Internal definition of the rule, this can be used to reset or patch the rule
|
|
1880
1896
|
*/
|
|
1881
|
-
|
|
1897
|
+
type RegleInternalRuleDefs<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> = Raw<{
|
|
1882
1898
|
_validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
|
|
1883
1899
|
_message: string | string[] | ((metadata: PossibleRegleRuleMetadataConsumer<TValue>) => string | string[]);
|
|
1884
1900
|
_active?: boolean | ((metadata: PossibleRegleRuleMetadataConsumer<TValue>) => boolean);
|
|
@@ -1889,7 +1905,7 @@ interface RegleInternalRuleDefs<TValue extends any = any, TParams extends any[]
|
|
|
1889
1905
|
_params?: RegleUniversalParams<TParams>;
|
|
1890
1906
|
_async: TAsync;
|
|
1891
1907
|
readonly _brand: symbol;
|
|
1892
|
-
}
|
|
1908
|
+
}>;
|
|
1893
1909
|
declare const InternalRuleType: {
|
|
1894
1910
|
readonly Inline: "__inline";
|
|
1895
1911
|
readonly Async: "__async";
|
|
@@ -1939,7 +1955,7 @@ type DefaultMetadataProperties = DefaultMetadataPropertiesCommon & {
|
|
|
1939
1955
|
$rule: Pick<$InternalRegleRuleStatus, '$valid' | '$pending'>;
|
|
1940
1956
|
};
|
|
1941
1957
|
/**
|
|
1942
|
-
* Will be used to
|
|
1958
|
+
* Will be used to consume metadata on related helpers and rule status
|
|
1943
1959
|
*/
|
|
1944
1960
|
type RegleRuleMetadataConsumer<TValue extends any, TParams extends [...any[]] = never, TMetadata extends RegleRuleMetadataDefinition = boolean> = {
|
|
1945
1961
|
$value: Maybe<TValue>;
|
|
@@ -1947,7 +1963,7 @@ type RegleRuleMetadataConsumer<TValue extends any, TParams extends [...any[]] =
|
|
|
1947
1963
|
$params: [...TParams];
|
|
1948
1964
|
}) & (Exclude<TMetadata, boolean> extends RegleRuleMetadataExtended ? TMetadata extends boolean ? Partial<Omit<Exclude<TMetadata, boolean>, '$valid'>> : Omit<Exclude<TMetadata, boolean>, '$valid'> : {});
|
|
1949
1965
|
/**
|
|
1950
|
-
* Will be used to
|
|
1966
|
+
* Will be used to consume metadata on related helpers and rule status
|
|
1951
1967
|
*/
|
|
1952
1968
|
type PossibleRegleRuleMetadataConsumer<TValue> = {
|
|
1953
1969
|
$value: Maybe<TValue>;
|
|
@@ -1964,7 +1980,7 @@ type RegleRuleRawInput<TValue extends any = any, TParams extends [...any[]] = [.
|
|
|
1964
1980
|
tooltip?: any;
|
|
1965
1981
|
};
|
|
1966
1982
|
/**
|
|
1967
|
-
* Process the type of
|
|
1983
|
+
* Process the type of created rule with `createRule`.
|
|
1968
1984
|
* For a rule with params it will return a function
|
|
1969
1985
|
* Otherwise it will return the rule definition
|
|
1970
1986
|
*/
|
|
@@ -2024,29 +2040,34 @@ type DefaultValidators = {
|
|
|
2024
2040
|
alpha: RegleRuleWithParamsDefinition<string, [options?: CommonAlphaOptions | undefined]>;
|
|
2025
2041
|
alphaNum: RegleRuleWithParamsDefinition<string | number, [options?: CommonAlphaOptions | undefined]>;
|
|
2026
2042
|
between: RegleRuleWithParamsDefinition<number, [min: Maybe<number>, max: Maybe<number>]>;
|
|
2043
|
+
boolean: RegleRuleDefinition<unknown, [], false, boolean, any, unknown>;
|
|
2027
2044
|
checked: RegleRuleDefinition<boolean, [], false, boolean, boolean>;
|
|
2028
2045
|
contains: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
|
|
2046
|
+
date: RegleRuleDefinition<unknown, [], false, boolean, MaybeInput<Date>, unknown>;
|
|
2029
2047
|
dateAfter: RegleRuleWithParamsDefinition<string | Date, [
|
|
2030
|
-
after: Maybe<string | Date
|
|
2048
|
+
after: Maybe<string | Date>,
|
|
2049
|
+
options?: CommonComparisonOptions
|
|
2031
2050
|
], false, true | {
|
|
2032
2051
|
$valid: false;
|
|
2033
2052
|
error: 'date-not-after';
|
|
2034
2053
|
} | {
|
|
2035
2054
|
$valid: false;
|
|
2036
|
-
error: 'value-or-
|
|
2055
|
+
error: 'value-or-parameter-not-a-date';
|
|
2037
2056
|
}>;
|
|
2038
2057
|
dateBefore: RegleRuleWithParamsDefinition<string | Date, [
|
|
2039
|
-
before: Maybe<string | Date
|
|
2058
|
+
before: Maybe<string | Date>,
|
|
2059
|
+
options?: CommonComparisonOptions
|
|
2040
2060
|
], false, true | {
|
|
2041
2061
|
$valid: false;
|
|
2042
2062
|
error: 'date-not-before';
|
|
2043
2063
|
} | {
|
|
2044
2064
|
$valid: false;
|
|
2045
|
-
error: 'value-or-
|
|
2065
|
+
error: 'value-or-parameter-not-a-date';
|
|
2046
2066
|
}>;
|
|
2047
2067
|
dateBetween: RegleRuleWithParamsDefinition<string | Date, [
|
|
2048
2068
|
before: Maybe<string | Date>,
|
|
2049
|
-
after: Maybe<string | Date
|
|
2069
|
+
after: Maybe<string | Date>,
|
|
2070
|
+
options?: CommonComparisonOptions
|
|
2050
2071
|
], false, boolean>;
|
|
2051
2072
|
decimal: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
2052
2073
|
email: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
@@ -2055,6 +2076,7 @@ type DefaultValidators = {
|
|
|
2055
2076
|
count: number
|
|
2056
2077
|
], false, boolean>;
|
|
2057
2078
|
exactValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
|
|
2079
|
+
hexadecimal: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
2058
2080
|
integer: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
2059
2081
|
ipv4Address: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
2060
2082
|
literal: RegleRuleDefinition<string | number, [literal: string | number], false, boolean, string | number>;
|
|
@@ -2070,11 +2092,13 @@ type DefaultValidators = {
|
|
|
2070
2092
|
], false, boolean>;
|
|
2071
2093
|
minValue: RegleRuleWithParamsDefinition<number, [count: number, options?: CommonComparisonOptions], false, boolean>;
|
|
2072
2094
|
nativeEnum: RegleRuleDefinition<string | number, [enumLike: EnumLike], false, boolean, string | number>;
|
|
2095
|
+
number: RegleRuleDefinition<unknown, [], false, boolean, any, unknown>;
|
|
2073
2096
|
numeric: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
2074
2097
|
oneOf: RegleRuleDefinition<string | number, [options: (string | number)[]], false, boolean, string | number>;
|
|
2075
2098
|
regex: RegleRuleWithParamsDefinition<string, [regexp: RegExp], false, boolean>;
|
|
2076
2099
|
required: RegleRuleDefinition<unknown, []>;
|
|
2077
2100
|
sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown, otherName?: string], false, boolean>;
|
|
2101
|
+
string: RegleRuleDefinition<unknown, [], false, boolean, any, unknown>;
|
|
2078
2102
|
type: RegleRuleDefinition<unknown, [], false, boolean, unknown, unknown>;
|
|
2079
2103
|
startsWith: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
|
|
2080
2104
|
url: RegleRuleDefinition<string, [], false, boolean, string>;
|
|
@@ -2252,7 +2276,7 @@ interface $InternalRegleStatus extends $InternalRegleCommonStatus {
|
|
|
2252
2276
|
/**
|
|
2253
2277
|
* @public
|
|
2254
2278
|
*/
|
|
2255
|
-
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialRuleTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string, TShortcuts extends RegleShortcutDefinition = {}> = [TState[TKey]] extends [undefined] ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Array<infer U extends Record<string, any>> ? ExtendOnlyRealRecord<U> extends true ? TRule extends RegleCollectionRuleDefinition<any, any> ? ExtractFromGetter<TRule['$each']> extends ReglePartialRuleTree<any> ? RegleCollectionStatus<TState[TKey], ExtractFromGetter<TRule['$each']>, TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : RegleCollectionStatus<TState[TKey], {}, TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : TRule extends ReglePartialRuleTree<any> ? NonNullable<TState[TKey]> extends Array<any> ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? MaybeVariantStatus<TState[TKey], TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? MaybeVariantStatus<TState[TKey], ReglePartialRuleTree<TState[TKey]>, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts>;
|
|
2279
|
+
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialRuleTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string, TShortcuts extends RegleShortcutDefinition = {}> = [TState[TKey]] extends [undefined | null] ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Array<infer U extends Record<string, any>> ? ExtendOnlyRealRecord<U> extends true ? TRule extends RegleCollectionRuleDefinition<any, any> ? ExtractFromGetter<TRule['$each']> extends ReglePartialRuleTree<any> ? RegleCollectionStatus<TState[TKey], ExtractFromGetter<TRule['$each']>, TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : RegleCollectionStatus<TState[TKey], {}, TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : TRule extends ReglePartialRuleTree<any> ? NonNullable<TState[TKey]> extends Array<any> ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : unknown extends TState[TKey] ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? MaybeVariantStatus<TState[TKey], TRule, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Date | File ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : unknown extends TState[TKey] ? RegleFieldStatus<TState[TKey], TRule, TShortcuts> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? MaybeVariantStatus<TState[TKey], ReglePartialRuleTree<TState[TKey]>, TShortcuts> : RegleFieldStatus<TState[TKey], TRule, TShortcuts>;
|
|
2256
2280
|
/**
|
|
2257
2281
|
* @internal
|
|
2258
2282
|
* @reference {@link InferRegleStatusType}
|
|
@@ -2534,13 +2558,13 @@ declare function createRule<TValue extends any, TParams extends any[], TReturn e
|
|
|
2534
2558
|
|
|
2535
2559
|
/**
|
|
2536
2560
|
* Returns a clean list of parameters
|
|
2537
|
-
* Removing Ref and executing function to return the
|
|
2561
|
+
* Removing Ref and executing function to return the unwrapped value
|
|
2538
2562
|
*/
|
|
2539
2563
|
declare function unwrapRuleParameters<TParams extends any[]>(params: MaybeRefOrGetter[]): TParams;
|
|
2540
2564
|
|
|
2541
2565
|
/**
|
|
2542
2566
|
* Define a global regle configuration, where you can:
|
|
2543
|
-
* - Customize
|
|
2567
|
+
* - Customize built-in rules messages
|
|
2544
2568
|
* - Add your custom rules
|
|
2545
2569
|
* - Define global modifiers
|
|
2546
2570
|
* - Define shortcuts
|
|
@@ -2578,7 +2602,7 @@ declare function extendRegleConfig<TRootCustomRules extends Partial<AllRulesDecl
|
|
|
2578
2602
|
type MergedRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TValue = {
|
|
2579
2603
|
[K in keyof TRegles]: TRegles[K]['$value'];
|
|
2580
2604
|
}> = Omit<RegleCommonStatus, '$value' | '$silentValue' | '$errors' | '$silentErrors' | '$name' | '$unwatch' | '$watch'> & {
|
|
2581
|
-
/**
|
|
2605
|
+
/** Map of merged Regle instances and their properties */
|
|
2582
2606
|
readonly $instances: {
|
|
2583
2607
|
[K in keyof TRegles]: TRegles[K];
|
|
2584
2608
|
};
|
|
@@ -2677,7 +2701,7 @@ declare const useScopedRegle: useRegleFn<Partial<AllRulesDeclarations>, never, {
|
|
|
2677
2701
|
* })
|
|
2678
2702
|
* ```
|
|
2679
2703
|
*/
|
|
2680
|
-
declare function createVariant<TForm extends Record<string, any>, TDiscriminant extends keyof JoinDiscriminatedUnions<TForm>, TVariants extends VariantTuple<JoinDiscriminatedUnions<TForm>, TDiscriminant>>(root: MaybeRefOrGetter<TForm> | DeepReactiveState<TForm>,
|
|
2704
|
+
declare function createVariant<TForm extends Record<string, any>, TDiscriminant extends keyof JoinDiscriminatedUnions<TForm>, TVariants extends VariantTuple<JoinDiscriminatedUnions<TForm>, TDiscriminant>>(root: MaybeRefOrGetter<TForm> | DeepReactiveState<TForm>, discriminantKey: TDiscriminant, variants: [...TVariants]): Ref<TVariants[number]>;
|
|
2681
2705
|
/**
|
|
2682
2706
|
* Narrow a nested variant field to a discriminated value
|
|
2683
2707
|
*
|
|
@@ -2709,7 +2733,31 @@ declare function variantToRef<TRoot extends RegleStatus<{}, any, any>, const TKe
|
|
|
2709
2733
|
[K in TKey]: RegleFieldStatus<TValue, any, any>;
|
|
2710
2734
|
}> | undefined>;
|
|
2711
2735
|
|
|
2736
|
+
/**
|
|
2737
|
+
* Helper method to wrap an raw rules object
|
|
2738
|
+
*
|
|
2739
|
+
* Similar to:
|
|
2740
|
+
*
|
|
2741
|
+
* ```ts
|
|
2742
|
+
* const rules = {...} satisfies RegleUnknownRulesTree
|
|
2743
|
+
* ```
|
|
2744
|
+
*/
|
|
2712
2745
|
declare function defineRules<TRules extends RegleUnknownRulesTree>(rules: TRules): TRules;
|
|
2746
|
+
/**
|
|
2747
|
+
* Refine a raw rules object to set rules that depends on the state values.
|
|
2748
|
+
*
|
|
2749
|
+
* @example
|
|
2750
|
+
*
|
|
2751
|
+
* ```ts
|
|
2752
|
+
* const rules = refineRules({
|
|
2753
|
+
* password: { required, type: type<string>() },
|
|
2754
|
+
* }, (state) => {
|
|
2755
|
+
* return {
|
|
2756
|
+
* confirmPassword: { required, sameAs: sameAs(() => state.value.password)}
|
|
2757
|
+
* }
|
|
2758
|
+
* })
|
|
2759
|
+
* ```
|
|
2760
|
+
*/
|
|
2713
2761
|
declare function refineRules<TRules extends RegleUnknownRulesTree, TRefinement extends ReglePartialRuleTree<InferInput<TRules>> & RegleUnknownRulesTree>(rules: TRules, refinement: (state: Ref<InferInput<TRules>>) => TRefinement): (state: Ref<InferInput<TRules>>) => Merge<TRules, TRefinement>;
|
|
2714
2762
|
|
|
2715
|
-
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 };
|
|
2763
|
+
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, type inferRulesFn, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, useRegle, type useRegleFn, 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,watchEffect,shallowRef,toRef,unref,version}from'vue';function te(e,t=true){return e==null?true:e instanceof Date?isNaN(e.getTime()):e.constructor.name=="File"||e.constructor.name=="FileList"?e.size<=0:Array.isArray(e)?t?e.length===0:false:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var Dt=Symbol("regle-rule");function or(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function U(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>U(n)))),r=="Map"&&(t=new Map([...e].map(n=>[U(n[0]),U(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,or(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=U(e[n]);}return t}function _(e){return e&&(e instanceof Date||e.constructor.name=="File"||e.constructor.name=="FileList")?false:typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pe(e,...t){for(var r=[].slice.call(arguments),n,a=r.length;n=r[a-1],a--;)if(!n||typeof n!="object"&&typeof n!="function")throw new Error("expected object, got "+n);for(var o=r[0],s=r.slice(1),i=s.length,a=0;a<i;a++){var y=s[a];for(var f in y)o[f]=y[f];}return o}function Qe(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}function Ne(e,t,r){let n,a=(...o)=>new Promise(s=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(s);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a}var Xe={Inline:"__inline",Async:"__async"};function Ct(e,t){return e.some(r=>r[t])}function It(e,t){return e.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[])}function re(e){try{return e.map(t=>toValue(t))}catch{return []}}function wt(e){return e.map(t=>t instanceof Function?computed(t):isRef(t)?t:toRef(()=>t))}function Ot(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(s=>s.trim()).filter(s=>s.length>0).length:0}function Ze(e,...t){let{validator:r,type:n}=e,a=n===Xe.Async||r.constructor.name==="AsyncFunction";return {...{validator(i,...y){return e.validator(i,...re(y.length?y:t))},message(i){return typeof e.message=="function"?e.message({...i,$params:re(i?.$params?.length?i.$params:t)}):e.message},active(i){return typeof e.active=="function"?e.active({...i,$params:re(i?.$params?.length?i.$params:t)}):e.active??true},tooltip(i){return typeof e.tooltip=="function"?e.tooltip({...i,$params:re(i?.$params?.length?i.$params:t)}):e.tooltip??[]},exec(i){let y=e.validator(i,...re(t)),f;return y instanceof Promise?y.then(b=>(f=b,typeof f=="object"&&"$valid"in f?f.$valid:typeof f=="boolean"?f:false)):(f=y,typeof f=="object"&&"$valid"in f?f.$valid:typeof f=="boolean"?f:false)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:false,_tooltip_patched:false,_async:a,_params:wt(t),_brand:Dt}}function et(e){if(typeof e.validator=="function"){let r=Ze(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(Ot(e.validator)>1){let a=function(...o){return Ze(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.tooltip=r.tooltip,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._tooltip=r.tooltip,a._type=e.type,a._message_pacthed=false,a._tooltip_pacthed=false,a._async=n,a}else return r}throw new Error("[createRule] validator must be a function")}function tt(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),o=shallowRef(new Map);function s($){let E=t.value.get($);if(E)return E;{let D=ref({});return t.value.set($,D),D}}function i($){let E=r.value.get($);if(E)return E;{let D=ref([]);return r.value.set($,D),D}}function y($,E,D){o.value.set(`${$}-${E}`,D);}function f($,E){return o.value.get(`${$}-${E}`)}function b($,E){$&&E!=null&&o.value.delete(`${$}-${E}`);}function V($,E){n.value.set($,E);}function x($){return n.value.get($)??false}function j($,E){e.value.set($,E);}function O($,E){let D=e.value.get($);return D?w(E,D)?{valid:true}:{valid:false}:void 0}function w($,E){let D=Object.keys(E),d=Object.keys($);return d.length!==D.length||!d.every(c=>D.includes(c))?false:d.every(c=>{let g=$[c],S=E[c];return !S||!g||typeof g=="function"||typeof S=="function"||typeof g=="number"||typeof g=="boolean"?false:g._params?g._params?.every((N,W)=>{if(typeof S=="number"||typeof S=="boolean")return true;{let K=re(S._params),H=re(g._params);return K?.[W]===H?.[W]}}):true})}function l($){let E=a.value.get($);if(E)return E;{let D=ref(false),d=ref(true),h=ref({}),c=ref(false);return a.value.set($,{$pending:D,$valid:d,$metadata:h,$validating:c}),{$pending:D,$valid:d,$metadata:h,$validating:c}}}return getCurrentScope()&&onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:j,setDirtyEntry:V,checkRuleDeclEntry:O,getDirtyState:x,trySetRuleStatusRef:l,getFieldsEntry:s,getCollectionsEntry:i,getArrayStatus:f,addArrayStatus:y,deleteArrayStatus:b,arrayStatusStorage:o}}function ke(e){return _(e.value)}function rt(e,t,r){let n=effectScope(),a;return e instanceof Function?a=n.run(()=>e(t,r??0)):a=e,{scope:n,unwrapped:a}}var Me={LessThan:-1,EqualTo:0,GreaterThan:1};function mr(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),s=Number(n[a]);if(o>s)return Me.GreaterThan;if(s>o)return Me.LessThan;if(!isNaN(o)&&isNaN(s))return Me.GreaterThan;if(isNaN(o)&&!isNaN(s))return Me.LessThan}return Me.EqualTo}var Ue=mr(version,"3.5.0")!==-1;function yr(){return Math.floor(Math.random()*Date.now()).toString()}function he(){return typeof window>"u"?yr():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Pt(e){return getCurrentScope()?(onScopeDispose(e),true):false}function Mt(e){let t=false,r,n=effectScope(true);return (...a)=>(t||(r=n.run(()=>e(...a)),t=true),r)}function Ge(e,t){return ke(e)||_(t.value)&&!te(t.value)&&!Object.entries(t.value).some(([r,n])=>me(n)||typeof n=="function")}function jt(e,t,r=false){return !!e.value&&_(e.value)&&"$each"in e.value||r&&Array.isArray(t.value)&&t.value.some(_)||Array.isArray(t.value)&&t.value.some(_)}function We(e){return !!e.value&&_(e.value)}function me(e){return _(e)&&"_validator"in e}function je(e){return typeof e.value=="function"?"_validator"in e.value:true}function At(e){return _(e)&&"$fields"in e}function nt(e){return !!e&&"$rules"in e}function at({field:e,silent:t=false}){return Object.entries(e.$rules??{}).map(([r,n])=>t&&!n.$valid||!n.$valid&&e.$error&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$error?e.$externalErrors??[]:[]).concat(e.$error?e.$schemaErrors??[]:[])}function Vt({field:e}){return Object.entries(e.$rules??{}).map(([t,r])=>r.$tooltip).filter(t=>!!t).reduce((t,r)=>typeof r=="string"?t?.concat([r]):t?.concat(r),[])}function Ft(e){return _(e)&&"$each"in e}function lt(e,t){let{includePath:r=false}=t??{};if(Array.isArray(e)&&e.every(n=>!_(n)))return e;if(Ft(e)){let n=r?e.$self?.map(o=>({error:o,path:""}))??[]:e.$self??[],a=e.$each?.map(o=>Be(o,r))??[];return n?.concat(a.flat())}else return Object.entries(e).map(([n,a])=>Be(a,r,[n])).flat()}function Be(e,t=false,r){let n=t&&!r?[]:r;if(Array.isArray(e)&&e.every(a=>!_(a)))return t?e.map(a=>({error:a,path:n?.join(".")??""})):e;if(Ft(e)){let a=n?.length?e.$self?.map(s=>({error:s,path:n.join(".")}))??[]:e.$self??[],o=e.$each?.map((s,i)=>Be(s,t,n?.concat(i.toString())))??[];return a?.concat(o.flat())}else return Object.entries(e).map(([a,o])=>Be(o,t,n?.concat(a))).flat()}function _t({customMessages:e,rule:t,ruleKey:r,state:n,path:a,storage:o,$debounce:s,modifiers:i}){let y=effectScope(),f={},b,V=ref(false),x=ref(false),{$pending:j,$valid:O,$metadata:w,$validating:l}=o.trySetRuleStatusRef(`${a}.${r}`);function $(){y=effectScope(),f=y.run(()=>{let S=ref(false),N=ref(false),W=ref(true),K=ref(false),H=ref(false),le=computed(()=>({$value:n.value,$error:N.value,$dirty:S.value,$pending:K.value,$correct:H.value,$invalid:W.value,$rule:{$valid:O.value,$invalid:!O.value,$pending:j.value},$params:R.value,...w.value})),C=computed(()=>je(t)?typeof t.value.active=="function"?t.value.active(le.value):!!t.value.active:true);function z(P){let J="",m=e?e[r]?.[P]:void 0;if(m&&(typeof m=="function"?J=m(le.value):J=m),je(t)){let A=`_${P}_patched`;m&&!t.value[A]||(typeof t.value[P]=="function"?J=t.value[P](le.value):J=t.value[P]??"");}return J}let ge=computed(()=>{let P=z("message");return te(P)&&(P="This field is not valid"),P}),ce=computed(()=>z("tooltip")),u=computed(()=>je(t)&&t.value.type?t.value.type:r),p=computed(()=>je(t)?t.value.validator:t.value),R=computed(()=>typeof t.value=="function"?[]:re(t.value._params??[])),I=computed(()=>`${a}.${u.value}`);return {$active:C,$message:ge,$type:u,$validator:p,$params:R,$path:I,$tooltip:ce,$fieldCorrect:H,$fieldError:N,$fieldDirty:S,$fieldPending:K,$fieldInvalid:W}}),b=watch(f?.$params,()=>{(i.$autoDirty.value||i.$rewardEarly.value&&f.$fieldError.value)&&h();});}$();function E(){O.value=true,f.$fieldDirty.value&&(j.value=true);}async function D(){let S=false;try{let N=f.$validator.value;if(typeof N!="function")return console.error(`${a}: Incorrect rule format, it needs to be either a function or created with "createRule".`),!1;let W=N(n.value,...f.$params.value),K=n.value;E();let H;if(W instanceof Promise?H=await W:H=W,n.value!==K)return !0;if(typeof H=="boolean")S=H;else {let{$valid:le,...C}=H;S=le,w.value=C;}}catch{S=false;}finally{j.value=false;}return S}let d=Ne(D,s??200);async function h(){try{l.value=!0;let S=!1;if(x.value=!0,me(t.value)&&t.value._async)S=await d();else {let N=f.$validator.value,W=N(n.value,...f.$params.value);if(W instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(W!=null)if(typeof W=="boolean")S=W;else {let{$valid:K,...H}=W;S=K,w.value=H;}}return O.value=S,S}catch{return false}finally{l.value=false,x.value=false;}}function c(){O.value=true,w.value={},j.value=false,l.value=false,$();}function g(){b(),y.stop(),y=effectScope();}return reactive({...f,$pending:j,$valid:O,$metadata:w,$haveAsync:V,$maybePending:x,$validating:l,$parse:h,$unwatch:g,$watch:$,$reset:c})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:o,options:s,externalErrors:i,schemaErrors:y,schemaMode:f,onUnwatch:b,$isArray:V,initialState:x,shortcuts:j,onValidate:O}){let w=effectScope(),l,$=[],E,D,d,h,c,g=()=>{};function S(){let T=t.value,F=o.checkRuleDeclEntry(n,T);z.value=Object.fromEntries(Object.entries(T).filter(([v])=>v.startsWith("$"))),K(),C.value=Object.fromEntries(Object.entries(t.value).filter(([v])=>!v.startsWith("$")).map(([v,ee])=>{if(ee){let se=toRef(()=>ee);return [v,_t({modifiers:{$autoDirty:l.$autoDirty,$rewardEarly:l.$rewardEarly},customMessages:r,rule:se,ruleKey:v,state:e,path:n,storage:o,$debounce:z.value.$debounce})]}return []}).filter(v=>!!v.length)),l.processShortcuts(),N(),F?.valid!=null&&(l.$dirty.value=o.getDirtyState(n),(l.$dirty.value&&l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&g()),o.addRuleDeclEntry(n,T);}function N(){g=l.$debounce.value?Ne(le,l.$debounce.value??l.$haveAnyAsyncRule?100:0):le;}function W(){C.value&&Object.entries(C.value).forEach(([T,F])=>{F.$unwatch();}),d(),c?.(),l.$dirty.value&&o.setDirtyEntry(n,l.$dirty.value),E?.(),D?.(),w.stop(),w=effectScope(),$.forEach(T=>T.stop()),$=[],b?.(),h?.();}function K(){C.value&&Object.entries(C.value).forEach(([T,F])=>{F.$watch();}),l=w.run(()=>{let T=ref(false),F=ref(false),v=computed(()=>T.value),ee=computed(()=>z.value.$debounce),se=computed(()=>z.value.$lazy!=null?z.value.$lazy:unref(s.lazy)!=null?unref(s.lazy):false),oe=computed(()=>z.value.$rewardEarly!=null?z.value.$rewardEarly:unref(s.rewardEarly)!=null?unref(s.rewardEarly):false),B=computed(()=>z.value.$clearExternalErrorsOnChange!=null?z.value.$clearExternalErrorsOnChange:unref(s.clearExternalErrorsOnChange)!=null?unref(s.clearExternalErrorsOnChange):true),M=computed(()=>z.value.$autoDirty!=null?z.value.$autoDirty:unref(s.autoDirty)!=null?unref(s.autoDirty):!oe.value),k=computed(()=>Object.entries(C.value).some(([ie,X])=>X.$validating)),Oe=computed({get:()=>e.value,set(ie){E(),e.value=ie,H();}}),Fe=computed(()=>$e.value&&!ve.value&&T.value),yt=computed(()=>at({field:{$rules:C.value,$error:Fe.value,$externalErrors:i?.value,$schemaErrors:y?.value}})),gt=computed(()=>at({field:{$rules:C.value,$error:Fe.value,$externalErrors:i?.value,$schemaErrors:y?.value},silent:true})),Ye=computed(()=>T.value?x.value instanceof Date&&e.value instanceof Date?Qe(x.value).getDate()!==Qe(e.value).getDate():x.value==null?!!e.value:Array.isArray(e.value)&&Array.isArray(x.value)?e.value.length!==x.value.length:x.value!==e.value:false),vt=computed(()=>Ye.value),$t=computed(()=>Vt({field:{$rules:C.value}})),St=computed(()=>M.value?v.value&&!($e.value||ve.value):!($e.value||ve.value)),ve=computed(()=>F.value||!oe.value?Object.entries(C.value).some(([ie,X])=>X.$pending):false),$e=computed(()=>i?.value?.length||y?.value?.length?true:_e.value?false:!oe.value||oe.value&&F.value?Object.entries(C.value).some(([ie,X])=>!(X.$valid&&!X.$maybePending)):false),Tt=computed(()=>a),_e=computed(()=>!!(te(C.value)&&!f)),ht=computed(()=>i?.value?.length||_e.value?false:T.value&&!te(e.value)&&!k.value&&!ve.value?f?!y?.value?.length:Object.values(C.value).some(X=>X.$active)?Object.values(C.value).filter(X=>X.$active).every(X=>X.$valid):false:false),ar=computed(()=>Object.entries(C.value).some(([ie,X])=>X.$haveAsync));function lr(){j?.fields&&Object.entries(j.fields).forEach(([ie,X])=>{let Et=effectScope();bt[ie]=Et.run(()=>{let xt=ref();return watchEffect(()=>{xt.value=X(reactive({$dirty:T,$externalErrors:i?.value??[],$value:e,$silentValue:Oe,$rules:C,$error:Fe,$pending:ve,$invalid:$e,$correct:ht,$errors:yt,$ready:St,$silentErrors:gt,$anyDirty:v,$tooltips:$t,$name:Tt,$inactive:_e,$edited:Ye,$anyEdited:vt}));}),xt}),$.push(Et);});}let bt={};return watch($e,ie=>{ie||(F.value=false);}),{$error:Fe,$pending:ve,$invalid:$e,$correct:ht,$debounce:ee,$lazy:se,$errors:yt,$ready:St,$silentErrors:gt,$rewardEarly:oe,$autoDirty:M,$clearExternalErrorsOnChange:B,$anyDirty:v,$edited:Ye,$anyEdited:vt,$name:Tt,$haveAnyAsyncRule:ar,$shortcuts:bt,$validating:k,$tooltips:$t,$dirty:T,triggerPunishment:F,processShortcuts:lr,$silentValue:Oe,$inactive:_e}}),H(),d=watch(l.$dirty,T=>{o.setDirtyEntry(n,T),Object.values(C.value).forEach(F=>{F.$fieldDirty=T;});}),c=watch([l.$error,l.$correct,l.$invalid,l.$pending],()=>{Object.values(C.value).forEach(T=>{T.$fieldError=l.$error.value,T.$fieldInvalid=l.$invalid.value,T.$fieldPending=l.$pending.value,T.$fieldCorrect=l.$correct.value;});}),D=watch(l.$invalid,T=>{l.$rewardEarly.value&&!T&&(l.triggerPunishment.value=false);}),h=watch(l.$haveAnyAsyncRule,N);}function H(){E=watch(e,()=>{l.$autoDirty.value&&(l.$dirty.value||(l.$dirty.value=true)),t.value instanceof Function&&S(),(l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&g(),l.$rewardEarly.value!==true&&l.$clearExternalErrorsOnChange.value&&R();},{deep:V?true:Ue?1:true});}function le(){Object.values(C.value).forEach(T=>{T.$parse();});}let C=ref({}),z=ref({});S();function ge(T,F){if(R(),l.$dirty.value=false,l.triggerPunishment.value=false,o.setDirtyEntry(n,false),!F)if(T?.toInitialState)e.value=U(x);else if(T?.toState){let v;typeof T?.toState=="function"?v=T?.toState():v=T?.toState,x.value=U(v),e.value=U(v);}else x.value=_(e.value)?U(e.value):Array.isArray(e.value)?[...e.value]:e.value;T?.clearExternalErrors&&R(),F||Object.entries(C.value).forEach(([v,ee])=>{ee.$reset();}),!l.$lazy.value&&l.$autoDirty.value&&Object.values(C.value).forEach(v=>v.$parse());}function ce(T=true,F=false){l.$dirty.value||(l.$dirty.value=true),F&&T?(l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&g():T&&g();}async function u(){try{if(f)return O?(ce(!1),O()):{valid:!1,data:e.value};let T=e.value;if(l.triggerPunishment.value=!0,!l.$dirty.value)l.$dirty.value=!0;else if(l.$autoDirty.value&&l.$dirty.value&&!l.$pending.value)return {valid:!l.$error.value,data:T};return f?{valid:!y?.value?.length,data:T}:te(C.value)?{valid:!0,data:T}:{valid:(await Promise.allSettled(Object.entries(C.value).map(([ee,se])=>se.$parse()))).every(ee=>ee.status==="fulfilled"?ee.value===!0:!1),data:T}}catch{return {valid:false,data:e.value}}}function p(T=true){return l.$dirty.value?e.value:T?{_null:true}:null}function R(){i?.value?.length&&(i.value=[]);}!l.$lazy.value&&!l.$dirty.value&&l.$autoDirty.value&&g();let{$shortcuts:I,$validating:P,$autoDirty:J,$rewardEarly:m,$clearExternalErrorsOnChange:A,$haveAnyAsyncRule:q,$debounce:Z,$lazy:Q,triggerPunishment:fe,...ue}=l;return reactive({...ue,$externalErrors:i,$value:e,$rules:C,...I,$reset:ge,$touch:ce,$validate:u,$unwatch:W,$watch:K,$extractDirtyFields:p,$clearExternalErrors:R})}function it({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:s,rules:i,externalErrors:y,schemaErrors:f,initialState:b,shortcuts:V,fieldName:x,schemaMode:j}){let O=i.$key?i.$key:he(),w=`${t}.${String(O)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?w=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:O,enumerable:false,configurable:false,writable:false}}));let l=toRef(y?.value??[],r),$=computed(()=>f?.value?.[r]),E=xe({state:o,rulesDef:toRef(()=>i),customMessages:s,path:w,storage:a,options:n,externalErrors:l,schemaErrors:$,initialState:b,shortcuts:V,fieldName:x,schemaMode:j});if(E){let D=o.value?.$id;E.$id=D??String(O),a.addArrayStatus(e,E.$id,E);}return E}function Gt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:s,schemaErrors:i,schemaMode:y,initialState:f,shortcuts:b,fieldName:V}){let x=effectScope(),j,O=effectScope(),w,l=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let $=ref(),E=ref(e.value),D,d=ref({}),h=a.getCollectionsEntry(n);w=O.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.every(p=>typeof p!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(p=>me(p)||typeof p=="function"):false)})),c(),N();function c(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?($.value=he(),Object.defineProperties(e.value,{$id:{value:$.value,enumerable:false,configurable:false,writable:false}})):e.value?.$id&&($.value=e.value.$id)),E.value=d.value.$value,Array.isArray(e.value)&&!w.isPrimitiveArray.value?h.value=e.value.filter(u=>typeof u=="object").map((u,p)=>{let{scope:R,unwrapped:I}=rt(t.value.$each,toRef(()=>u),p);R&&l.push(R);let P=toRef(f.value??[],p),J=toRef(s?.value??{},"$each"),m=computed(()=>i?.value?.$each),A=it({$id:$.value,path:n,customMessages:r,rules:I??{},stateValue:toRef(()=>u),index:p,options:o,storage:a,externalErrors:J,schemaErrors:m,initialState:P,shortcuts:b,fieldName:V,schemaMode:y});return A||null}).filter(u=>!!u):h.value=[],d.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:toRef(s?.value??{},"$self"),schemaErrors:computed(()=>i?.value?.$self),$isArray:true,initialState:f,shortcuts:b,fieldName:V,schemaMode:y});}function g(){if(Array.isArray(e.value)&&!w.isPrimitiveArray.value){let u=U(h.value);h.value=e.value.filter(p=>typeof p=="object").map((p,R)=>{let I=toRef(()=>p);if(p.$id&&h.value.find(P=>P.$id===p.$id)){let P=a.getArrayStatus($.value,p.$id);return P?(P.$value=I,P):null}else {let{scope:P,unwrapped:J}=rt(t.value.$each,I,R);P&&l.push(P);let m=toRef(s?.value??{},"$each"),A=computed(()=>i?.value?.$each??[]),q=it({$id:$.value,path:n,customMessages:r,rules:J??{},stateValue:I,index:R,options:o,storage:a,externalErrors:m,schemaErrors:A,initialState:toRef(f.value??[],R),shortcuts:b,fieldName:V,schemaMode:y});return q||null}}).filter(p=>!!p),u.filter(p=>!e.value?.find(R=>p.$id===R.$id)).forEach((p,R)=>{a.deleteArrayStatus($.value,R.toString());});}else h.value=[];}function S(){D=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?c():g();},{deep:Ue?1:true,flush:"pre"});}function N(){S(),x=effectScope(),j=x.run(()=>{let u=computed({get:()=>e.value,set(v){D(),e.value=v,S();}}),p=computed(()=>d.value.$dirty&&(!h.value.length||h.value.every(v=>v.$dirty))),R=computed(()=>d.value.$anyDirty||h.value.some(v=>v.$anyDirty)),I=computed(()=>d.value.$invalid||h.value.some(v=>v.$invalid)),P=computed(()=>(te(d.value.$rules)?true:d.value.$correct)&&(!h.value.length||h.value.every(v=>v.$correct||v.$anyDirty&&!v.$invalid))),J=computed(()=>d.value.$error||h.value.some(v=>v.$error)),m=computed(()=>!(I.value||A.value)),A=computed(()=>d.value.$pending||h.value.some(v=>v.$pending)),q=computed(()=>!!h.value.length&&h.value.every(v=>v.$edited)),Z=computed(()=>d.value.$anyEdited||h.value.some(v=>v.$anyEdited)),Q=computed(()=>({$self:d.value.$errors,$each:h.value.map(v=>v.$errors)})),fe=computed(()=>({$self:d.value.$silentErrors,$each:h.value.map(v=>v.$silentErrors)})),ue=computed(()=>V);function T(){b?.collections&&Object.entries(b?.collections).forEach(([v,ee])=>{let se=effectScope();F[v]=se.run(()=>{let oe=ref();return watchEffect(()=>{oe.value=ee(reactive({$dirty:p,$error:J,$silentValue:u,$pending:A,$invalid:I,$correct:P,$errors:Q,$ready:m,$silentErrors:fe,$anyDirty:R,$name:ue,$each:h,$self:d,$value:e,$edited:q,$anyEdited:Z}));}),oe}),l.push(se);});}let F={};return T(),{$dirty:p,$anyDirty:R,$invalid:I,$correct:P,$error:J,$pending:A,$errors:Q,$silentErrors:fe,$ready:m,$name:ue,$shortcuts:F,$silentValue:u,$edited:q,$anyEdited:Z}}),w.isPrimitiveArray.value&&t.value.$each&&console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`);}function W(){D&&D(),d.value&&d.value.$unwatch(),h.value&&h.value.forEach(u=>{"$dirty"in u&&u.$unwatch();}),x.stop(),x=effectScope(),O.stop(),O=effectScope(true),l.forEach(u=>u.stop()),l=[];}function K(u=true,p=false){d.value.$touch(u,p),h.value.forEach(R=>{R.$touch(u,p);});}function H(u,p){if(W(),!p)if(u?.toInitialState)e.value=U(f.value);else if(u?.toState){let R;typeof u?.toState=="function"?R=u?.toState():R=u?.toState,f.value=U(R),e.value=U(R);}else f.value=U(e.value);u?.clearExternalErrors&&C(),d.value.$reset(),h.value.forEach(R=>{R.$reset(u,true);}),p||c();}async function le(){let u=e.value;try{return {valid:(await Promise.allSettled([d.value.$validate(),...h.value.map(I=>I.$validate())])).every(I=>I.status==="fulfilled"?I.value.valid===!0:!1),data:u}}catch{return {valid:false,data:u}}}function C(){d.value.$clearExternalErrors(),h.value.forEach(u=>{u.$clearExternalErrors();});}function z(u=true){let p=h.value.map(R=>{if(At(R))return R.$extractDirtyFields(u)});return u&&p.every(R=>te(R))&&(p=[]),p}let{$shortcuts:ge,...ce}=j;return reactive({$self:d,...ce,...ge,$each:h,$value:e,$validate:le,$unwatch:W,$watch:N,$touch:K,$reset:H,$extractDirtyFields:z,$clearExternalErrors:C})}function He({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:a,schemaErrors:o,rootSchemaErrors:s,validationGroups:i,initialState:y,fieldName:f,...b}){let V=effectScope(),x,j=[],O=null,w=null,l=null,$=null;async function D(u=true){let p=Object.entries(e.value),R=Object.fromEntries(p.filter(([m,A])=>!!A).map(([m,A])=>{if(A){let q=toRef(t.value??{},m),Z=toRef(()=>A),Q=toRef(a?.value??{},m),fe=computed(()=>o?.value?.[m]),ue=toRef(y?.value??{},m);return [m,xe({state:q,rulesDef:Z,path:r?`${r}.${m}`:m,externalErrors:Q,schemaErrors:fe,initialState:ue,fieldName:m,...b})]}return []})),I=Object.fromEntries(Object.entries(unref(a)??{}).filter(([m,A])=>!(m in e.value)&&!!A).map(([m])=>{let A=toRef(t.value??{},m),q=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),Q=toRef(y?.value??{},m);return [m,xe({state:A,rulesDef:computed(()=>({})),path:r?`${r}.${m}`:m,externalErrors:q,schemaErrors:Z,initialState:Q,fieldName:m,...b})]})),P=Object.fromEntries(Object.entries(unref(o)??{}).map(([m])=>{let A=toRef(t.value??{},m),q=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),Q=toRef(y?.value??{},m);return [m,xe({state:A,rulesDef:computed(()=>({})),path:r?`${r}.${m}`:m,externalErrors:q,schemaErrors:Z,initialState:Q,fieldName:m,...b})]})),J=Object.fromEntries(Object.entries(t.value??{}).filter(([m])=>!(m in e.value)&&!(m in(I??{}))&&!(m in(P??{}))).map(([m])=>{let A=toRef(t.value??{},m),q=toRef(a?.value??{},m),Z=computed(()=>o?.value?.[m]),Q=toRef(y?.value??{},m);return [m,xe({state:A,rulesDef:computed(()=>({})),path:r?`${r}.${m}`:m,externalErrors:q,schemaErrors:Z,initialState:Q,fieldName:m,...b})]}));d.value={...R,...I,...P,...J},u&&g();}let d=b.storage.getFieldsEntry(r);D();function h(){a&&(l=watch(a,()=>{S(),D();},{deep:true}));}function c(){$=watch(t,()=>{S(),D(),K(true,true);},{flush:"sync"});}function g(){n&&(O?.(),O=watch(n,()=>{S(),D();},{deep:true,flush:"pre"}),h()),s&&(w?.(),w=watch(s,()=>{S(),D();},{deep:true,flush:"post"})),c(),x=V.run(()=>{let u=computed({get:()=>t.value,set(B){S(),t.value=B,D();}}),p=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).every(([B,M])=>M?.$dirty)),R=computed(()=>Object.entries(d.value).some(([B,M])=>M?.$anyDirty)),I=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).some(([B,M])=>M?.$invalid)),P=computed(()=>{let B=Object.entries(d.value).filter(([M,k])=>nt(k)?!k.$inactive:true);return B.length?B.every(([M,k])=>b.schemaMode?k.$correct:nt(k)?"required"in k.$rules&&k.$rules.required.$active?k?.$correct:!k.$invalid&&!k.$pending:k?.$correct):false}),J=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).some(([B,M])=>M?.$error)),m=computed(()=>unref(b.options.rewardEarly)!=null?unref(b.options.rewardEarly):false),A=computed(()=>unref(b.options.autoDirty)!=null?unref(b.options.autoDirty):!m.value),q=computed(()=>A.value?R.value&&!(I.value||Q.value):!(I.value||Q.value)),Z=ref(false),Q=computed(()=>Z.value||Object.entries(d.value).some(([B,M])=>M?.$pending)),fe=computed(()=>Object.fromEntries(Object.entries(d.value).map(([B,M])=>[B,M?.$errors]))),ue=computed(()=>Object.fromEntries(Object.entries(d.value).map(([B,M])=>[B,M?.$silentErrors]))),T=computed(()=>!!Object.entries(d.value).length&&Object.entries(d.value).every(([B,M])=>M?.$edited)),F=computed(()=>Object.entries(d.value).some(([B,M])=>M?.$anyEdited)),v=computed(()=>f);function ee(){b.shortcuts?.nested&&Object.entries(b.shortcuts.nested).forEach(([B,M])=>{let k=effectScope();oe[B]=k.run(()=>{let Oe=ref();return watchEffect(()=>{Oe.value=M(reactive({$dirty:p,$value:t,$silentValue:u,$error:J,$pending:Q,$invalid:I,$correct:P,$ready:q,$anyDirty:R,$name:v,$silentErrors:ue,$errors:fe,$fields:d,$edited:T,$anyEdited:F}));}),Oe}),j.push(k);});}let se=computed({get:()=>i?Object.fromEntries(Object.entries(i?.(d.value)??{}).map(([B,M])=>M.length?[B,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$correct"].map(k=>[k,Ct(M,k)])),...Object.fromEntries(["$errors","$silentErrors"].map(k=>[k,It(M,k)]))}]:[])):{},set(){}}),oe={};return ee(),{$dirty:p,$anyDirty:R,$invalid:I,$correct:P,$error:J,$pending:Q,$errors:fe,$silentErrors:ue,$ready:q,$name:v,$shortcuts:oe,$groups:se,$silentValue:u,$edited:T,$anyEdited:F,$localPending:Z}});}function S(){O?.(),l?.(),$?.(),w?.(),j=[],x={},d.value&&Object.entries(d.value).forEach(([u,p])=>{p.$unwatch();});}function N(){Object.entries(d.value).forEach(([u,p])=>{p.$clearExternalErrors();});}function W(u,p){if(l?.(),S(),!p)if(u?.toInitialState)t.value=U({...y.value??{}});else if(u?.toState){let R;typeof u?.toState=="function"?R=u?.toState():R=u?.toState,y.value=U(R),t.value=U(R);}else y.value=U(t.value);Object.values(d.value).forEach(R=>{R.$reset(u,true);}),u?.clearExternalErrors&&N(),h(),p||D();}function K(u=true,p=false){Object.values(d.value).forEach(R=>{R.$touch(u,p);});}function H(u){return u.filter(([p,R])=>_(R)?!(R&&typeof R=="object"&&"_null"in R)&&!te(R):Array.isArray(R)?R.length:true)}function le(u=true){let p=Object.entries(d.value).map(([R,I])=>[R,I.$extractDirtyFields(u)]);return u&&(p=H(p)),Object.fromEntries(p)}async function C(){try{if(b.schemaMode)return b.onValidate?(K(!1),x.$localPending.value=!0,b.onValidate()):{valid:!1,data:t.value};{let u=t.value;return {valid:(await Promise.allSettled(Object.values(d.value).map(I=>I.$validate()))).every(I=>I.status==="fulfilled"?I.value.valid===!0:!1),data:u}}}catch{return {valid:false,data:t.value}}finally{x.$localPending.value=false;}}let{$shortcuts:z,$localPending:ge,...ce}=x;return reactive({...ce,...z,$fields:d,$value:t,$reset:W,$touch:K,$validate:C,$unwatch:S,$watch:g,$clearExternalErrors:N,$extractDirtyFields:le})}function xe({rulesDef:e,...t}){if(jt(e,t.state,t.schemaMode))return Gt({rulesDef:e,...t});if(Ge(t.state,e)){if(ke(t.state))return He({rulesDef:e,...t});{let n=effectScope().run(()=>{let s=toRef(t.state.value?t.state:ref({}));return watch(()=>t.state.value,i=>{s.value=i;},{deep:true}),watch(s,i=>{t.state.value=i;},{deep:true}),{fakeState:s}}),{state:a,...o}=t;return He({rulesDef:e,...o,state:n.fakeState})}}else if(We(e))return Ee({rulesDef:e,...t})}function we({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:o,schemaErrors:s,schemaMode:i=false,onValidate:y}){let f=tt(),b=ref();return Ge(n,r)?b.value=He({rootRules:r,rulesDef:r,state:n,customMessages:a?.(),storage:f,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:o,fieldName:"root",path:"",schemaErrors:s,rootSchemaErrors:s,schemaMode:i,onValidate:y}):We(r)&&(b.value=Ee({rulesDef:r,state:n,customMessages:a?.(),storage:f,options:t,externalErrors:t.externalErrors,initialState:e,shortcuts:o,fieldName:"root",path:"",schemaMode:i,schemaErrors:s,onValidate:y})),getCurrentScope()&&onScopeDispose(()=>{b.value?.$unwatch();}),reactive({regle:b})}function ze(e,t,r){let n={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function a(o,s,i){let y=isRef(s)?s:typeof s=="function"?void 0:computed(()=>s),f=ref(),b=computed(()=>y?.value?y.value:f.value?f.value:{}),V={...n,...i},x=isRef(o)?o:ref(o);typeof s=="function"&&watchEffect(()=>{f.value=s(x);});let j=ref(_(x.value)?{...U(x.value)}:U(x.value));return {r$:we({scopeRules:b,state:x,options:V,initialState:j,customRules:e,shortcuts:r}).regle}}return a}var Je=ze();function Ke(){function e(t,r){return r}return e}var Rt=Ke();function Ht({rules:e,modifiers:t,shortcuts:r}){let n=ze(e,t,r);n.__config={rules:e,modifiers:t,shortcuts:r};let a=Ke();return {useRegle:n,inferRules:a}}function zt(e,{rules:t,modifiers:r,shortcuts:n}){let a=e.__config??{},o=()=>({...a.rules?.(),...t?.()}),s=a.modifiers&&r?Pe(a.modifiers,r):r,i=a.shortcuts&&n?Pe(a.shortcuts,n):n,y=ze(o,s,i);y.__config={rules:o,modifiers:s,shortcuts:i};let f=Ke();return {useRegle:y,inferRules:f}}function Ve(e,t){let r=t??false,n=computed({get:()=>r?Object.values(e).map(c=>c.$value):Object.fromEntries(Object.entries(e).map(([c,g])=>[c,g.$value])),set:c=>{r||typeof c=="object"&&Object.entries(c).forEach(([g,S])=>e[g].$value=S);}}),a=computed({get:()=>Object.fromEntries(Object.entries(e).map(([c,g])=>[c,g.$silentValue])),set:c=>{typeof c=="object"&&Object.entries(c).forEach(([g,S])=>e[g].$silentValue=S);}}),o=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([g,S])=>S?.$dirty)}),s=computed(()=>Object.entries(e).some(([c,g])=>g?.$anyDirty)),i=computed(()=>Object.entries(e).some(([c,g])=>g?.$invalid)),y=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([g,S])=>S?.$correct||S.$anyDirty&&!S.$invalid)}),f=computed(()=>Object.entries(e).some(([c,g])=>g?.$error)),b=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([g,S])=>S?.$ready)}),V=computed(()=>Object.entries(e).some(([c,g])=>g?.$pending)),x=computed(()=>r?Object.entries(e).map(([c,g])=>g.$errors):Object.fromEntries(Object.entries(e).map(([c,g])=>[c,g.$errors]))),j=computed(()=>r?Object.entries(e).map(([c,g])=>g.$silentErrors):Object.fromEntries(Object.entries(e).map(([c,g])=>[c,g.$silentErrors]))),O=computed(()=>{let c=Object.entries(e);return !!c.length&&c.every(([g,S])=>S?.$edited)}),w=computed(()=>Object.entries(e).some(([c,g])=>g?.$anyEdited)),l=computed(()=>r?Object.values(e):e);function $(c){Object.values(e).forEach(g=>{g.$reset(c);});}function E(){Object.values(e).forEach(c=>{c.$touch();});}function D(c=true){return Object.values(e).map(g=>g.$extractDirtyFields(c))}function d(){Object.values(e).forEach(c=>{c.$clearExternalErrors();});}async function h(){try{let c=n.value;return {valid:(await Promise.allSettled(Object.values(e).map(N=>N.$validate()))).every(N=>N.status==="fulfilled"?N.value.valid===!0:!1),data:c}}catch{return {valid:false,data:n.value}}}return reactive({...!r&&{$silentValue:a},$errors:x,$silentErrors:j,$instances:l,$value:n,$dirty:o,$anyDirty:s,$invalid:i,$correct:y,$error:f,$pending:V,$ready:b,$edited:O,$anyEdited:w,$reset:$,$touch:E,$validate:h,$extractDirtyFields:D,$clearExternalErrors:d})}function Kt(e){function t(r){let n=computed(()=>toValue(r));s();let a=ref(i(e.value)),o=reactive({r$:a});function s(){n.value&&!e.value[n.value]&&(e.value[n.value]={});}watch(n,s),watch(e,y=>{a.value=i(y);},{deep:true});function i(y){if(n.value){let f=y[n.value]??{};return Ve(f,true)}else return Ve(y["~~global"]??{},true)}return {r$:o.r$}}return {useCollectScope:t}}function Qt(e,t){let r=t??Je;return {useScopedRegle:(a,o,s)=>{let{namespace:i,...y}=s??{},f=computed(()=>toValue(i)),b=ref(`${Object.keys(e.value).length+1}-${he()}`),V=computed(()=>`instance-${b.value}`),{r$:x}=r(a,o,y);O(),Pt(j),watch(f,(w,l)=>{j(l),O();}),getCurrentInstance()&&onMounted(()=>{let w=getCurrentInstance();typeof window<"u"&&w?.proxy?.$el?.parentElement&&document.documentElement&&!document.documentElement.contains(w?.proxy?.$el?.parentElement)&&j();});function j(w){let l=w??f.value;l?e.value[l]&&delete e.value[l][V.value]:e.value["~~global"][V.value]&&delete e.value["~~global"][V.value];}function O(){f.value?(e.value[f.value]||(e.value[f.value]={}),e.value[f.value][V.value]=x):(e.value["~~global"]||(e.value["~~global"]={}),e.value["~~global"][V.value]=x);}return {r$:x,dispose:j,register:O}}}}function qe(e){let r=(e?.customStore?()=>(e.customStore&&(e.customStore?.value["~~global"]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value["~~global"]={}),e.customStore):Mt(()=>ref({"~~global":{}})))(),{useScopedRegle:n}=Qt(r,e?.customUseRegle),{useCollectScope:a}=Kt(r);return {useScopedRegle:n,useCollectScope:a}}var {useCollectScope:dt,useScopedRegle:pt}=qe();function er(e,t,r){let n=computed(()=>toValue(e)[t]);return computed(()=>{let o=r.find(s=>{if(s[t]&&"literal"in s[t]){let i=s[t].literal;if(me(i))return unref(i._params?.[0])===n.value}});if(o)return o;{let s=r.find(i=>_(i[t])&&!Object.keys(i[t]).some(y=>y==="literal"));return s||{}}})}function mt(e,t,r){return _(e[t])&&"$value"in e[t]&&e[t]?.$value===r}function tr(e,t,r){let n=isRef(e)?toRef(e.value,"$fields"):toRef(e,"$fields"),a=ref();return watch(n,()=>{mt(n.value,t,r)?a.value=n.value:a.value=void 0;},{immediate:true}),a}function rr(e){return e}function nr(e,t){return r=>Pe(e,t(r))}
|
|
2
|
-
export{Xe as InternalRuleType,et as createRule,qe as createScopedUseRegle,er as createVariant,Ht as defineRegleConfig,rr as defineRules,zt as extendRegleConfig,lt as flatErrors,
|
|
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, watchEffect,
|
|
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,34 +2371,28 @@ function createUseRegleComposable(customRules, options, shortcuts) {
|
|
|
2363
2371
|
autoDirty: options?.autoDirty,
|
|
2364
2372
|
lazy: options?.lazy,
|
|
2365
2373
|
rewardEarly: options?.rewardEarly,
|
|
2374
|
+
silent: options?.silent,
|
|
2366
2375
|
clearExternalErrorsOnChange: options?.clearExternalErrorsOnChange
|
|
2367
2376
|
};
|
|
2368
2377
|
function useRegle2(state, rulesFactory, options2) {
|
|
2369
2378
|
const definedRules = isRef(rulesFactory) ? rulesFactory : typeof rulesFactory === "function" ? void 0 : computed(() => rulesFactory);
|
|
2370
|
-
const watchableRulesGetters = ref();
|
|
2371
|
-
const scopeRules = computed(() => {
|
|
2372
|
-
if (definedRules?.value) {
|
|
2373
|
-
return definedRules.value;
|
|
2374
|
-
} else if (watchableRulesGetters.value) {
|
|
2375
|
-
return watchableRulesGetters.value;
|
|
2376
|
-
}
|
|
2377
|
-
return {};
|
|
2378
|
-
});
|
|
2379
2379
|
const resolvedOptions = {
|
|
2380
2380
|
...globalOptions,
|
|
2381
2381
|
...options2
|
|
2382
2382
|
};
|
|
2383
2383
|
const processedState = isRef(state) ? state : ref(state);
|
|
2384
|
+
const watchableRulesGetters = shallowRef(definedRules ?? {});
|
|
2384
2385
|
if (typeof rulesFactory === "function") {
|
|
2385
2386
|
watchEffect(() => {
|
|
2386
2387
|
watchableRulesGetters.value = rulesFactory(processedState);
|
|
2388
|
+
triggerRef(watchableRulesGetters);
|
|
2387
2389
|
});
|
|
2388
2390
|
}
|
|
2389
2391
|
const initialState = ref(
|
|
2390
2392
|
isObject(processedState.value) ? { ...cloneDeep(processedState.value) } : cloneDeep(processedState.value)
|
|
2391
2393
|
);
|
|
2392
2394
|
const regle = useRootStorage({
|
|
2393
|
-
scopeRules,
|
|
2395
|
+
scopeRules: watchableRulesGetters,
|
|
2394
2396
|
state: processedState,
|
|
2395
2397
|
options: resolvedOptions,
|
|
2396
2398
|
initialState,
|
|
@@ -2716,12 +2718,12 @@ function createScopedUseRegle(options) {
|
|
|
2716
2718
|
};
|
|
2717
2719
|
}
|
|
2718
2720
|
var { useCollectScope, useScopedRegle } = createScopedUseRegle();
|
|
2719
|
-
function createVariant(root,
|
|
2720
|
-
const watchableRoot = computed(() => toValue(root)[
|
|
2721
|
+
function createVariant(root, discriminantKey, variants) {
|
|
2722
|
+
const watchableRoot = computed(() => toValue(root)[discriminantKey]);
|
|
2721
2723
|
const computedRules = computed(() => {
|
|
2722
2724
|
const selectedVariant = variants.find((variant) => {
|
|
2723
|
-
if (variant[
|
|
2724
|
-
const literalRule = variant[
|
|
2725
|
+
if (variant[discriminantKey] && "literal" in variant[discriminantKey]) {
|
|
2726
|
+
const literalRule = variant[discriminantKey]["literal"];
|
|
2725
2727
|
if (isRuleDef(literalRule)) {
|
|
2726
2728
|
return unref(literalRule._params?.[0]) === watchableRoot.value;
|
|
2727
2729
|
}
|
|
@@ -2731,7 +2733,7 @@ function createVariant(root, disciminantKey, variants) {
|
|
|
2731
2733
|
return selectedVariant;
|
|
2732
2734
|
} else {
|
|
2733
2735
|
const anyDiscriminantRules = variants.find(
|
|
2734
|
-
(variant) => isObject(variant[
|
|
2736
|
+
(variant) => isObject(variant[discriminantKey]) && !Object.keys(variant[discriminantKey]).some((key) => key === "literal")
|
|
2735
2737
|
);
|
|
2736
2738
|
if (anyDiscriminantRules) {
|
|
2737
2739
|
return anyDiscriminantRules;
|
|
@@ -2750,14 +2752,15 @@ function variantToRef(root, discriminantKey, discriminantValue) {
|
|
|
2750
2752
|
const returnedRef = ref();
|
|
2751
2753
|
watch(
|
|
2752
2754
|
fromRoot,
|
|
2753
|
-
() => {
|
|
2755
|
+
async () => {
|
|
2756
|
+
await nextTick();
|
|
2754
2757
|
if (narrowVariant(fromRoot.value, discriminantKey, discriminantValue)) {
|
|
2755
2758
|
returnedRef.value = fromRoot.value;
|
|
2756
2759
|
} else {
|
|
2757
2760
|
returnedRef.value = void 0;
|
|
2758
2761
|
}
|
|
2759
2762
|
},
|
|
2760
|
-
{ immediate: true }
|
|
2763
|
+
{ immediate: true, flush: "pre" }
|
|
2761
2764
|
);
|
|
2762
2765
|
return returnedRef;
|
|
2763
2766
|
}
|
|
@@ -2767,7 +2770,7 @@ function defineRules(rules) {
|
|
|
2767
2770
|
return rules;
|
|
2768
2771
|
}
|
|
2769
2772
|
function refineRules(rules, refinement) {
|
|
2770
|
-
return (state) => merge(rules, refinement(state));
|
|
2773
|
+
return (state) => merge({ ...rules }, refinement(state));
|
|
2771
2774
|
}
|
|
2772
2775
|
|
|
2773
2776
|
export { InternalRuleType, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, useRegle, useRootStorage, useScopedRegle, variantToRef };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@regle/core",
|
|
3
|
-
"version": "1.2.0-beta.
|
|
3
|
+
"version": "1.2.0-beta.3",
|
|
4
4
|
"description": "Headless form validation library for Vue 3",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"pinia": ">=2.2.5",
|
|
@@ -13,22 +13,22 @@
|
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|
|
15
15
|
"@total-typescript/ts-reset": "0.6.1",
|
|
16
|
-
"@types/node": "22.
|
|
16
|
+
"@types/node": "22.15.3",
|
|
17
17
|
"@typescript-eslint/eslint-plugin": "8.28.0",
|
|
18
18
|
"@typescript-eslint/parser": "8.28.0",
|
|
19
19
|
"@vue/test-utils": "2.4.6",
|
|
20
|
-
"eslint": "9.
|
|
20
|
+
"eslint": "9.25.1",
|
|
21
21
|
"eslint-config-prettier": "9.1.0",
|
|
22
|
-
"eslint-plugin-vue": "9.
|
|
22
|
+
"eslint-plugin-vue": "9.33.0",
|
|
23
23
|
"expect-type": "1.2.1",
|
|
24
24
|
"prettier": "3.5.3",
|
|
25
25
|
"tsup": "8.4.0",
|
|
26
|
-
"type-fest": "4.
|
|
27
|
-
"typescript": "5.8.
|
|
28
|
-
"vitest": "3.1.
|
|
26
|
+
"type-fest": "4.40.1",
|
|
27
|
+
"typescript": "5.8.3",
|
|
28
|
+
"vitest": "3.1.2",
|
|
29
29
|
"vue": "3.5.13",
|
|
30
30
|
"vue-eslint-parser": "10.1.3",
|
|
31
|
-
"vue-tsc": "2.2.
|
|
31
|
+
"vue-tsc": "2.2.10"
|
|
32
32
|
},
|
|
33
33
|
"type": "module",
|
|
34
34
|
"exports": {
|