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