@regle/core 1.9.0 → 1.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/regle-core.d.ts +164 -25
- package/dist/regle-core.js +201 -66
- package/dist/regle-core.min.js +1 -1
- package/package.json +4 -1
package/dist/regle-core.d.ts
CHANGED
|
@@ -1251,7 +1251,7 @@ type CollectionRegleBehaviourOptions = FieldRegleBehaviourOptions & {
|
|
|
1251
1251
|
};
|
|
1252
1252
|
type ResolvedRegleBehaviourOptions = DeepMaybeRef<RequiredDeep<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Record<string, any>, Record<string, any>, Record<string, any[]>>;
|
|
1253
1253
|
type ShortcutCommonFn<T extends Record<string, any>> = {
|
|
1254
|
-
[x: string]: (element: OmitByType<T, Function>) => unknown;
|
|
1254
|
+
[x: string]: (element: Omit<OmitByType<T, Function>, '~standard'>) => unknown;
|
|
1255
1255
|
};
|
|
1256
1256
|
type RegleShortcutDefinition<TCustomRules extends Record<string, any> = {}> = {
|
|
1257
1257
|
/**
|
|
@@ -1332,8 +1332,17 @@ type ResetOptions<TState extends unknown> = RequireOneOrNone<{
|
|
|
1332
1332
|
toState?: TState | (() => TState);
|
|
1333
1333
|
/**
|
|
1334
1334
|
* Clears the $externalErrors state back to an empty object.
|
|
1335
|
+
*
|
|
1336
|
+
* @default false
|
|
1335
1337
|
*/
|
|
1336
1338
|
clearExternalErrors?: boolean;
|
|
1339
|
+
/**
|
|
1340
|
+
* Keep the validation state of the form ($dirty, $invalid, $pending etc..)
|
|
1341
|
+
* Only useful if you only want to reset the form state.
|
|
1342
|
+
*
|
|
1343
|
+
* @default false
|
|
1344
|
+
*/
|
|
1345
|
+
keepValidationState?: boolean;
|
|
1337
1346
|
}, 'toInitialState' | 'toState'>;
|
|
1338
1347
|
//#endregion
|
|
1339
1348
|
//#region src/types/core/scopedRegle.types.d.ts
|
|
@@ -1351,6 +1360,28 @@ type RegleResult<Data extends Record<string, any> | any[] | unknown, TRules exte
|
|
|
1351
1360
|
valid: true;
|
|
1352
1361
|
data: IsUnknown<Data> extends true ? unknown : IsAny<Data> extends true ? unknown : HasNamedKeys<Data> extends true ? Data extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, TRules>[] : Data extends Date | File ? SafeFieldProperty<Data, TRules> : Data extends Record<string, any> ? DeepSafeFormState<Data, TRules> : SafeFieldProperty<Data, TRules> : unknown;
|
|
1353
1362
|
};
|
|
1363
|
+
type RegleNestedResult<Data extends Record<string, any> | unknown, TRules extends ReglePartialRuleTree<any> | RegleFormPropertyType<any>> = RegleResult<Data, TRules> & ({
|
|
1364
|
+
valid: false;
|
|
1365
|
+
issues: RegleIssuesTree<Data>;
|
|
1366
|
+
errors: RegleErrorTree<Data>;
|
|
1367
|
+
} | {
|
|
1368
|
+
valid: true;
|
|
1369
|
+
issues: EmptyObject;
|
|
1370
|
+
errors: EmptyObject;
|
|
1371
|
+
});
|
|
1372
|
+
type RegleCollectionResult<Data extends any[], TRules extends ReglePartialRuleTree<any> | RegleFormPropertyType<any>> = RegleResult<Data, TRules> & ({
|
|
1373
|
+
valid: false;
|
|
1374
|
+
issues: RegleCollectionErrors<Data, true>;
|
|
1375
|
+
errors: RegleCollectionErrors<Data>;
|
|
1376
|
+
} | {
|
|
1377
|
+
valid: true;
|
|
1378
|
+
issues: EmptyObject;
|
|
1379
|
+
errors: EmptyObject;
|
|
1380
|
+
});
|
|
1381
|
+
type RegleFieldResult<Data extends any, TRules extends ReglePartialRuleTree<any> | RegleFormPropertyType<any>> = RegleResult<Data, TRules> & {
|
|
1382
|
+
issues: RegleFieldIssue<TRules>[];
|
|
1383
|
+
errors: string[];
|
|
1384
|
+
};
|
|
1354
1385
|
/**
|
|
1355
1386
|
* Infer safe output from any `r$` instance
|
|
1356
1387
|
*
|
|
@@ -1362,6 +1393,8 @@ type InferSafeOutput<TRegle extends MaybeRef<RegleRoot<{}, any, any, any>> | May
|
|
|
1362
1393
|
type $InternalRegleResult = {
|
|
1363
1394
|
valid: boolean;
|
|
1364
1395
|
data: any;
|
|
1396
|
+
errors: $InternalRegleErrorTree | $InternalRegleCollectionErrors | string[];
|
|
1397
|
+
issues: $InternalRegleIssuesTree | $InternalRegleCollectionIssues | RegleFieldIssue[];
|
|
1365
1398
|
};
|
|
1366
1399
|
type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Record<string, any>, CustomRulesDeclarationTree> | RegleFormPropertyType<any, any> | undefined> = [unknown] extends [TState] ? {} : TRules extends undefined ? TState : TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> ? Prettify<{ [K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? K : never]?: SafeProperty<TState[K], TRules[K]> extends MaybeInput<infer M> ? MaybeOutput<M> : SafeProperty<TState[K], TRules[K]> } & { [K in keyof TState as IsPropertyOutputRequired<TState[K], TRules[K]> extends false ? never : K]-?: unknown extends SafeProperty<TState[K], TRules[K]> ? unknown : NonNullable<SafeProperty<TState[K], TRules[K]>> }> : TState;
|
|
1367
1400
|
type FieldHaveRequiredRule<TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends MaybeRef<RegleRuleDecl<any, any>> ? [unknown] extends UnwrapRef<TRule>['required'] ? NonNullable<UnwrapRef<TRule>['literal']> extends RegleRuleDefinition<any, any[], any, any, any, any> ? true : false : NonNullable<UnwrapRef<TRule>['required']> extends UnwrapRef<TRule>['required'] ? UnwrapRef<TRule>['required'] extends RegleRuleDefinition<any, infer Params, any, any, any, any> ? Params extends never[] ? true : false : false : false : false;
|
|
@@ -1412,9 +1445,14 @@ type IsUnion<T> = Not<Extends<UnionToTuple$1<T>['length'], 1>>;
|
|
|
1412
1445
|
//#region src/types/core/variants.types.d.ts
|
|
1413
1446
|
type NarrowVariant<TRoot extends {
|
|
1414
1447
|
[x: string]: unknown;
|
|
1448
|
+
$fields: {
|
|
1449
|
+
[x: string]: unknown;
|
|
1450
|
+
};
|
|
1415
1451
|
}, TKey extends keyof TRoot, TValue extends (LazyJoinDiscriminatedUnions<Exclude<TRoot[TKey], RegleCollectionStatus<any, any, any> | RegleStatus<any, any, any>>> extends {
|
|
1416
1452
|
$value: infer V;
|
|
1417
|
-
} ? V : unknown)> = Extract<TRoot, { [K in TKey]: RegleFieldStatus<TValue, any, any> }
|
|
1453
|
+
} ? V : unknown)> = Extract<TRoot, { [K in TKey]: RegleFieldStatus<TValue, any, any> | RegleFieldStatus<MaybeInput<TValue>, any, any> }> & {
|
|
1454
|
+
$fields: Extract<TRoot['$fields'], { [K in TKey]: RegleFieldStatus<TValue, any, any> | RegleFieldStatus<MaybeInput<TValue>, any, any> }>;
|
|
1455
|
+
};
|
|
1418
1456
|
type MaybeVariantStatus<TState extends Record<string, any> | undefined = Record<string, any>, TRules extends ReglePartialRuleTree<NonNullable<TState>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = {}> = IsUnion<NonNullable<TState>> extends true ? Omit<RegleStatus<TState, TRules, TShortcuts>, '$fields' | keyof RegleStatus<TState, TRules, TShortcuts>['$fields']> & {
|
|
1419
1457
|
$fields: ProcessChildrenFields<TState, TRules, TShortcuts>[keyof ProcessChildrenFields<TState, TRules, TShortcuts>];
|
|
1420
1458
|
} & (HasNamedKeys<TState> extends true ? ProcessChildrenFields<TState, TRules, TShortcuts>[keyof ProcessChildrenFields<TState, TRules, TShortcuts>] : {}) : RegleStatus<TState, TRules, TShortcuts>;
|
|
@@ -1501,6 +1539,64 @@ declare function useRootStorage({
|
|
|
1501
1539
|
regle: $InternalRegleStatusType | undefined;
|
|
1502
1540
|
};
|
|
1503
1541
|
//#endregion
|
|
1542
|
+
//#region ../../node_modules/.pnpm/@standard-schema+spec@1.0.0/node_modules/@standard-schema/spec/dist/index.d.ts
|
|
1543
|
+
/** The Standard Schema interface. */
|
|
1544
|
+
interface StandardSchemaV1<Input = unknown, Output = Input> {
|
|
1545
|
+
/** The Standard Schema properties. */
|
|
1546
|
+
readonly "~standard": StandardSchemaV1.Props<Input, Output>;
|
|
1547
|
+
}
|
|
1548
|
+
declare namespace StandardSchemaV1 {
|
|
1549
|
+
/** The Standard Schema properties interface. */
|
|
1550
|
+
export interface Props<Input = unknown, Output = Input> {
|
|
1551
|
+
/** The version number of the standard. */
|
|
1552
|
+
readonly version: 1;
|
|
1553
|
+
/** The vendor name of the schema library. */
|
|
1554
|
+
readonly vendor: string;
|
|
1555
|
+
/** Validates unknown input values. */
|
|
1556
|
+
readonly validate: (value: unknown) => Result<Output> | Promise<Result<Output>>;
|
|
1557
|
+
/** Inferred types associated with the schema. */
|
|
1558
|
+
readonly types?: Types<Input, Output> | undefined;
|
|
1559
|
+
}
|
|
1560
|
+
/** The result interface of the validate function. */
|
|
1561
|
+
export type Result<Output> = SuccessResult<Output> | FailureResult;
|
|
1562
|
+
/** The result interface if validation succeeds. */
|
|
1563
|
+
export interface SuccessResult<Output> {
|
|
1564
|
+
/** The typed output value. */
|
|
1565
|
+
readonly value: Output;
|
|
1566
|
+
/** The non-existent issues. */
|
|
1567
|
+
readonly issues?: undefined;
|
|
1568
|
+
}
|
|
1569
|
+
/** The result interface if validation fails. */
|
|
1570
|
+
export interface FailureResult {
|
|
1571
|
+
/** The issues of failed validation. */
|
|
1572
|
+
readonly issues: ReadonlyArray<Issue>;
|
|
1573
|
+
}
|
|
1574
|
+
/** The issue interface of the failure output. */
|
|
1575
|
+
export interface Issue {
|
|
1576
|
+
/** The error message of the issue. */
|
|
1577
|
+
readonly message: string;
|
|
1578
|
+
/** The path of the issue, if any. */
|
|
1579
|
+
readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;
|
|
1580
|
+
}
|
|
1581
|
+
/** The path segment interface of the issue. */
|
|
1582
|
+
export interface PathSegment {
|
|
1583
|
+
/** The key representing a path segment. */
|
|
1584
|
+
readonly key: PropertyKey;
|
|
1585
|
+
}
|
|
1586
|
+
/** The Standard Schema types interface. */
|
|
1587
|
+
export interface Types<Input = unknown, Output = Input> {
|
|
1588
|
+
/** The input type of the schema. */
|
|
1589
|
+
readonly input: Input;
|
|
1590
|
+
/** The output type of the schema. */
|
|
1591
|
+
readonly output: Output;
|
|
1592
|
+
}
|
|
1593
|
+
/** Infers the input type of a Standard Schema. */
|
|
1594
|
+
export type InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema["~standard"]["types"]>["input"];
|
|
1595
|
+
/** Infers the output type of a Standard Schema. */
|
|
1596
|
+
export type InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema["~standard"]["types"]>["output"];
|
|
1597
|
+
export {};
|
|
1598
|
+
}
|
|
1599
|
+
//#endregion
|
|
1504
1600
|
//#region src/core/useRegle/useErrors.d.ts
|
|
1505
1601
|
/**
|
|
1506
1602
|
* Converts a nested $errors object to a flat array of string errors
|
|
@@ -1509,14 +1605,40 @@ declare function useRootStorage({
|
|
|
1509
1605
|
*/
|
|
1510
1606
|
declare function flatErrors(errors: $InternalRegleErrors, options: {
|
|
1511
1607
|
includePath: true;
|
|
1512
|
-
}):
|
|
1513
|
-
error: string;
|
|
1514
|
-
path: string;
|
|
1515
|
-
}[];
|
|
1608
|
+
}): StandardSchemaV1.Issue[];
|
|
1516
1609
|
declare function flatErrors(errors: $InternalRegleErrors, options?: {
|
|
1517
1610
|
includePath?: false;
|
|
1518
1611
|
}): string[];
|
|
1519
1612
|
//#endregion
|
|
1613
|
+
//#region src/core/useRegle/useRules.d.ts
|
|
1614
|
+
type useRulesFnOptions<TRules extends RegleUnknownRulesTree | RegleRuleDecl, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TState = InferInput<TRules>> = Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<JoinDiscriminatedUnions<TState extends Record<string, any> ? Unwrap<TState> : {}>, TState extends Record<string, any> ? (TRules extends Record<string, any> ? TRules : {}) : {}, TValidationGroups>;
|
|
1615
|
+
interface useRulesFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> {
|
|
1616
|
+
<TRules extends RegleUnknownRulesTree | RegleRuleDecl, TDecl extends RegleRuleDecl<NonNullable<TState>, Partial<AllRulesDeclarations> & TCustomRules>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TState extends Record<string, any> = InferInput<TRules>>(rulesFactory: TState extends Record<string, any> ? MaybeRef<TRules> | ((...args: any[]) => TRules) : {}, options?: useRulesFnOptions<TRules, TValidationGroups, TState>): NonNullable<TState> extends PrimitiveTypes ? Raw<RegleFieldStatus<NonNullable<TState>, TDecl, TShortcuts>> & StandardSchemaV1<TState> : Raw<RegleRoot<TState extends Record<string, any> ? Unwrap<TState> : {}, TRules extends Record<string, any> ? TRules : {}, TValidationGroups, TShortcuts>> & StandardSchemaV1<TState>;
|
|
1617
|
+
__config?: {
|
|
1618
|
+
rules?: () => CustomRulesDeclarationTree;
|
|
1619
|
+
modifiers?: RegleBehaviourOptions;
|
|
1620
|
+
shortcuts?: TShortcuts;
|
|
1621
|
+
};
|
|
1622
|
+
}
|
|
1623
|
+
/**
|
|
1624
|
+
* useRules is a clone of useRegle, without the need to provide a state.
|
|
1625
|
+
*
|
|
1626
|
+
* It accepts the following inputs:
|
|
1627
|
+
*
|
|
1628
|
+
* @param rules - Your rules object
|
|
1629
|
+
* @param modifiers - Customize regle behaviour
|
|
1630
|
+
*
|
|
1631
|
+
* ```ts
|
|
1632
|
+
* import { useRules } from '@regle/core';
|
|
1633
|
+
import { required } from '@regle/rules';
|
|
1634
|
+
|
|
1635
|
+
const { r$ } = useRules({
|
|
1636
|
+
email: { required }
|
|
1637
|
+
})
|
|
1638
|
+
* ```
|
|
1639
|
+
*/
|
|
1640
|
+
declare const useRules: useRulesFn<Partial<AllRulesDeclarations>, RegleShortcutDefinition<any>>;
|
|
1641
|
+
//#endregion
|
|
1520
1642
|
//#region src/types/utils/props.types.d.ts
|
|
1521
1643
|
/**
|
|
1522
1644
|
* Infer type of the `r$` of any function returning a regle instance
|
|
@@ -1602,7 +1724,7 @@ type HasNamedKeys<T> = IsUnion<T> extends true ? ProcessHasNamedKeys<LazyJoinDis
|
|
|
1602
1724
|
type ProcessHasNamedKeys<T> = { [K in keyof NonNullable<T>]: K extends string ? (string extends K ? never : K) : never }[keyof NonNullable<T>] extends never ? false : true;
|
|
1603
1725
|
//#endregion
|
|
1604
1726
|
//#region src/types/utils/infer.types.d.ts
|
|
1605
|
-
type InferInput<TRules extends MaybeRef<ReglePartialRuleTree<Record<string, any>, any>> | ((state: any) => ReglePartialRuleTree<Record<string, any>, any>)
|
|
1727
|
+
type InferInput<TRules extends MaybeRef<ReglePartialRuleTree<Record<string, any>, any>> | ((state: any) => ReglePartialRuleTree<Record<string, any>, any>) | MaybeRef<StandardSchemaV1<any>>, TMarkMaybe extends boolean = true> = TRules extends MaybeRef<StandardSchemaV1<infer State>> ? State : IsUnion$1<UnwrapSimple<TRules>> extends true ? InferTupleUnionInput<UnionToTuple<UnwrapSimple<TRules>>>[number] : TMarkMaybe extends true ? Prettify<{ [K in keyof UnwrapSimple<TRules> as UnwrapSimple<TRules>[K] extends MaybeRef<RegleRuleDecl<any, any>> ? K : never]?: ProcessInputChildren<UnwrapSimple<TRules>[K], TMarkMaybe> } & { [K in keyof UnwrapSimple<TRules> as UnwrapSimple<TRules>[K] extends MaybeRef<RegleRuleDecl<any, any>> ? never : K]: ProcessInputChildren<UnwrapSimple<TRules>[K], TMarkMaybe> }> : Prettify<{ [K in keyof UnwrapSimple<TRules>]: ProcessInputChildren<UnwrapSimple<TRules>[K], TMarkMaybe> }>;
|
|
1606
1728
|
type ProcessInputChildren<TRule extends unknown, TMarkMaybe extends boolean> = TRule extends {
|
|
1607
1729
|
$each: RegleCollectionEachRules<any, any>;
|
|
1608
1730
|
} ? ExtractFromGetter<TRule['$each']> extends ReglePartialRuleTree<any, any> ? InferInput<ExtractFromGetter<TRule['$each']>, TMarkMaybe>[] : any[] : TRule extends MaybeRef<RegleRuleDecl<any, any>> ? [ExtractTypeFromRules<UnwrapRef<TRule>>] extends [never] ? unknown : ExtractTypeFromRules<UnwrapRef<TRule>> : TRule extends ReglePartialRuleTree<any, any> ? InferInput<TRule, TMarkMaybe> : string;
|
|
@@ -1940,7 +2062,7 @@ type RegleStatus<TState extends Record<string, any> | undefined = Record<string,
|
|
|
1940
2062
|
/** Will return a copy of your state with only the fields that are dirty. By default it will filter out nullish values or objects, but you can override it with the first parameter $extractDirtyFields(false). */
|
|
1941
2063
|
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
1942
2064
|
/** 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). */
|
|
1943
|
-
$validate: () => Promise<
|
|
2065
|
+
$validate: (forceValues?: JoinDiscriminatedUnions<TState> extends EmptyObject ? any : HasNamedKeys<JoinDiscriminatedUnions<TState>> extends true ? IsUnknown<JoinDiscriminatedUnions<TState>> extends true ? any : JoinDiscriminatedUnions<TState> : any) => Promise<RegleNestedResult<JoinDiscriminatedUnions<TState>, TRules>>;
|
|
1944
2066
|
} & ProcessNestedFields<TState, TRules, TShortcuts> & ([TShortcuts['nested']] extends [never] ? {} : { [K in keyof TShortcuts['nested']]: ReturnType<NonNullable<TShortcuts['nested']>[K]> });
|
|
1945
2067
|
/**
|
|
1946
2068
|
* @internal
|
|
@@ -1954,7 +2076,7 @@ interface $InternalRegleStatus extends $InternalRegleCommonStatus {
|
|
|
1954
2076
|
readonly $errors: Record<string, $InternalRegleErrors>;
|
|
1955
2077
|
readonly $silentErrors: Record<string, $InternalRegleErrors>;
|
|
1956
2078
|
$extractDirtyFields: (filterNullishValues?: boolean) => Record<string, any>;
|
|
1957
|
-
$validate: () => Promise<$InternalRegleResult>;
|
|
2079
|
+
$validate: (forceValues?: any) => Promise<$InternalRegleResult>;
|
|
1958
2080
|
}
|
|
1959
2081
|
/**
|
|
1960
2082
|
* @public
|
|
@@ -2016,7 +2138,7 @@ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormProperty
|
|
|
2016
2138
|
/** Will return a copy of your state with only the fields that are dirty. By default it will filter out nullish values or objects, but you can override it with the first parameter $extractDirtyFields(false). */
|
|
2017
2139
|
$extractDirtyFields: (filterNullishValues?: boolean) => MaybeOutput<TState>;
|
|
2018
2140
|
/** 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). */
|
|
2019
|
-
$validate: () => Promise<
|
|
2141
|
+
$validate: (forceValues?: IsUnknown<TState> extends true ? any : TState) => Promise<RegleFieldResult<TState, TRules>>;
|
|
2020
2142
|
/** This is reactive tree containing all the declared rules of your field. To know more about the rule properties check the rules properties section */
|
|
2021
2143
|
readonly $rules: ComputeFieldRules<TState, TRules>;
|
|
2022
2144
|
} & ([TShortcuts['fields']] extends [never] ? {} : { [K in keyof TShortcuts['fields']]: ReturnType<NonNullable<TShortcuts['fields']>[K]> });
|
|
@@ -2036,12 +2158,12 @@ interface $InternalRegleFieldStatus extends $InternalRegleCommonStatus {
|
|
|
2036
2158
|
readonly $issues: RegleFieldIssue[];
|
|
2037
2159
|
readonly $isDebouncing: boolean;
|
|
2038
2160
|
$extractDirtyFields: (filterNullishValues?: boolean) => any;
|
|
2039
|
-
$validate: () => Promise<$InternalRegleResult>;
|
|
2161
|
+
$validate: (forceValues?: any) => Promise<$InternalRegleResult>;
|
|
2040
2162
|
}
|
|
2041
2163
|
/**
|
|
2042
2164
|
* @public
|
|
2043
2165
|
*/
|
|
2044
|
-
interface RegleCommonStatus<TValue = any> {
|
|
2166
|
+
interface RegleCommonStatus<TValue = any> extends StandardSchemaV1<TValue> {
|
|
2045
2167
|
/** Indicates whether the field is invalid. It becomes true if any associated rules return false. */
|
|
2046
2168
|
readonly $invalid: boolean;
|
|
2047
2169
|
/**
|
|
@@ -2196,7 +2318,7 @@ type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePar
|
|
|
2196
2318
|
/** Will return a copy of your state with only the fields that are dirty. By default it will filter out nullish values or objects, but you can override it with the first parameter $extractDirtyFields(false). */
|
|
2197
2319
|
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TState>;
|
|
2198
2320
|
/** 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). */
|
|
2199
|
-
$validate: () => Promise<
|
|
2321
|
+
$validate: (value?: JoinDiscriminatedUnions<TState>) => Promise<RegleCollectionResult<TState, JoinDiscriminatedUnions<TRules>>>;
|
|
2200
2322
|
} & ([TShortcuts['collections']] extends [never] ? {} : { [K in keyof TShortcuts['collections']]: ReturnType<NonNullable<TShortcuts['collections']>[K]> });
|
|
2201
2323
|
/**
|
|
2202
2324
|
* @internal
|
|
@@ -2210,7 +2332,7 @@ interface $InternalRegleCollectionStatus extends Omit<$InternalRegleStatus, '$fi
|
|
|
2210
2332
|
readonly $silentErrors: $InternalRegleCollectionErrors;
|
|
2211
2333
|
readonly $externalErrors?: string[];
|
|
2212
2334
|
$extractDirtyFields: (filterNullishValues?: boolean) => any[];
|
|
2213
|
-
$validate: () => Promise<$InternalRegleResult>;
|
|
2335
|
+
$validate: (forceValues?: any) => Promise<$InternalRegleResult>;
|
|
2214
2336
|
}
|
|
2215
2337
|
//#endregion
|
|
2216
2338
|
//#region src/types/rules/rule.errors.types.d.ts
|
|
@@ -2254,7 +2376,7 @@ type SuperCompatibleRegleRoot = SuperCompatibleRegleStatus & {
|
|
|
2254
2376
|
$groups?: {
|
|
2255
2377
|
[x: string]: RegleValidationGroupOutput;
|
|
2256
2378
|
};
|
|
2257
|
-
$validate: () => Promise<SuperCompatibleRegleResult>;
|
|
2379
|
+
$validate: (...args: any[]) => Promise<SuperCompatibleRegleResult>;
|
|
2258
2380
|
};
|
|
2259
2381
|
type SuperCompatibleRegleResult = $InternalRegleResult;
|
|
2260
2382
|
type SuperCompatibleRegleStatus = {
|
|
@@ -2363,6 +2485,7 @@ declare function defineRegleConfig<TShortcuts extends RegleShortcutDefinition<TC
|
|
|
2363
2485
|
}): {
|
|
2364
2486
|
useRegle: useRegleFn<TCustomRules, TShortcuts>;
|
|
2365
2487
|
inferRules: inferRulesFn<TCustomRules>;
|
|
2488
|
+
useRules: useRulesFn<TCustomRules, TShortcuts>;
|
|
2366
2489
|
};
|
|
2367
2490
|
/**
|
|
2368
2491
|
* Extend an already created custom `useRegle` (as the first parameter)
|
|
@@ -2399,10 +2522,12 @@ type MergedRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TVal
|
|
|
2399
2522
|
readonly $errors: { [K in keyof TRegles]: TRegles[K]['$errors'] };
|
|
2400
2523
|
/** Collection of all the error messages, collected for all children properties. */
|
|
2401
2524
|
readonly $silentErrors: { [K in keyof TRegles]: TRegles[K]['$silentErrors'] };
|
|
2525
|
+
readonly $issues: { [K in keyof TRegles]: TRegles[K]['$issues'] };
|
|
2526
|
+
readonly $silentIssues: { [K in keyof TRegles]: TRegles[K]['$silentIssues'] };
|
|
2402
2527
|
/** Will return a copy of your state with only the fields that are dirty. By default it will filter out nullish values or objects, but you can override it with the first parameter $extractDirtyFields(false). */
|
|
2403
2528
|
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TValue>;
|
|
2404
2529
|
/** 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). */
|
|
2405
|
-
$validate: () => Promise<MergedReglesResult<TRegles>>;
|
|
2530
|
+
$validate: (forceValues?: TRegles['$value']) => Promise<MergedReglesResult<TRegles>>;
|
|
2406
2531
|
};
|
|
2407
2532
|
type MergedScopedRegles<TValue extends Record<string, unknown>[] = Record<string, unknown>[]> = Omit<MergedRegles<Record<string, SuperCompatibleRegleRoot>, TValue>, '$instances' | '$errors' | '$silentErrors' | '$value' | '$silentValue' | '$validate'> & {
|
|
2408
2533
|
/** Array of scoped Regles instances */
|
|
@@ -2413,10 +2538,16 @@ type MergedScopedRegles<TValue extends Record<string, unknown>[] = Record<string
|
|
|
2413
2538
|
readonly $errors: RegleValidationErrors<Record<string, unknown>>[];
|
|
2414
2539
|
/** Collection of all registered Regles instances silent errors */
|
|
2415
2540
|
readonly $silentErrors: RegleValidationErrors<Record<string, unknown>>[];
|
|
2541
|
+
/** Collection of all registered Regles instances issues */
|
|
2542
|
+
readonly $issues: RegleValidationErrors<Record<string, unknown>, false, true>[];
|
|
2543
|
+
/** Collection of all registered Regles instances silent issues */
|
|
2544
|
+
readonly $silentIssues: RegleValidationErrors<Record<string, unknown>, false, true>[];
|
|
2416
2545
|
/** 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). */
|
|
2417
|
-
$validate: () => Promise<{
|
|
2546
|
+
$validate: (forceValues?: TValue) => Promise<{
|
|
2418
2547
|
valid: boolean;
|
|
2419
2548
|
data: TValue;
|
|
2549
|
+
errors: RegleValidationErrors<Record<string, unknown>>[];
|
|
2550
|
+
issues: RegleValidationErrors<Record<string, unknown>>[];
|
|
2420
2551
|
}>;
|
|
2421
2552
|
};
|
|
2422
2553
|
type MergedReglesResult<TRegles extends Record<string, SuperCompatibleRegleRoot>> = {
|
|
@@ -2424,11 +2555,15 @@ type MergedReglesResult<TRegles extends Record<string, SuperCompatibleRegleRoot>
|
|
|
2424
2555
|
data: { [K in keyof TRegles]: Extract<PromiseReturn<ReturnType<TRegles[K]['$validate']>>, {
|
|
2425
2556
|
valid: false;
|
|
2426
2557
|
}>['data'] };
|
|
2558
|
+
errors: { [K in keyof TRegles]: TRegles[K]['$errors'] };
|
|
2559
|
+
issues: { [K in keyof TRegles]: TRegles[K]['$issues'] };
|
|
2427
2560
|
} | {
|
|
2428
2561
|
valid: true;
|
|
2429
2562
|
data: { [K in keyof TRegles]: Extract<PromiseReturn<ReturnType<TRegles[K]['$validate']>>, {
|
|
2430
2563
|
valid: true;
|
|
2431
2564
|
}>['data'] };
|
|
2565
|
+
errors: EmptyObject;
|
|
2566
|
+
issues: EmptyObject;
|
|
2432
2567
|
};
|
|
2433
2568
|
declare function mergeRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TScoped extends boolean = false>(regles: TRegles, _scoped?: TScoped): TScoped extends false ? MergedRegles<TRegles> : MergedScopedRegles;
|
|
2434
2569
|
//#endregion
|
|
@@ -2482,7 +2617,7 @@ declare const useCollectScope: <TValue extends Record<string, unknown>[] = Recor
|
|
|
2482
2617
|
namespace?: vue0.MaybeRefOrGetter<string>;
|
|
2483
2618
|
}>;
|
|
2484
2619
|
//#endregion
|
|
2485
|
-
//#region src/core/createVariant.d.ts
|
|
2620
|
+
//#region src/core/variants/createVariant.d.ts
|
|
2486
2621
|
/**
|
|
2487
2622
|
* Declare variations of state that depends on one value
|
|
2488
2623
|
*
|
|
@@ -2520,9 +2655,7 @@ declare function narrowVariant<TRoot extends {
|
|
|
2520
2655
|
};
|
|
2521
2656
|
}, const TKey extends keyof TRoot, const TValue extends (LazyJoinDiscriminatedUnions<Exclude<TRoot[TKey], RegleCollectionStatus<any, any, any> | RegleStatus<any, any, any>>> extends {
|
|
2522
2657
|
$value: infer V;
|
|
2523
|
-
} ? V : unknown)>(root: TRoot, discriminantKey: TKey, discriminantValue: TValue): root is
|
|
2524
|
-
$fields: Extract<TRoot['$fields'], { [K in TKey]: RegleFieldStatus<TValue, any, any> | RegleFieldStatus<MaybeInput<TValue>, any, any> }>;
|
|
2525
|
-
};
|
|
2658
|
+
} ? V : unknown)>(root: TRoot, discriminantKey: TKey, discriminantValue: TValue): root is NarrowVariant<TRoot, TKey, TValue>;
|
|
2526
2659
|
/**
|
|
2527
2660
|
* Narrow a nested variant root to a reactive reference
|
|
2528
2661
|
*
|
|
@@ -2534,9 +2667,15 @@ declare function narrowVariant<TRoot extends {
|
|
|
2534
2667
|
*/
|
|
2535
2668
|
declare function variantToRef<TRoot extends RegleStatus<{}, any, any>, const TKey extends keyof TRoot['$fields'], const TValue extends (LazyJoinDiscriminatedUnions<Exclude<TRoot['$fields'][TKey], RegleCollectionStatus<any, any, any> | RegleStatus<any, any, any>>> extends {
|
|
2536
2669
|
$value: infer V;
|
|
2537
|
-
} ? V : unknown)>(root: MaybeRef<TRoot>, discriminantKey: TKey, discriminantValue: TValue
|
|
2538
|
-
|
|
2539
|
-
|
|
2670
|
+
} ? V : unknown)>(root: MaybeRef<TRoot>, discriminantKey: TKey, discriminantValue: TValue, options: {
|
|
2671
|
+
/**
|
|
2672
|
+
* Assert that the variant is always defined, use with caution
|
|
2673
|
+
*/
|
|
2674
|
+
unsafeAssertion: true;
|
|
2675
|
+
}): Ref<NarrowVariant<TRoot, TKey, TValue>>;
|
|
2676
|
+
declare function variantToRef<TRoot extends RegleStatus<{}, any, any>, const TKey extends keyof TRoot['$fields'], const TValue extends (LazyJoinDiscriminatedUnions<Exclude<TRoot['$fields'][TKey], RegleCollectionStatus<any, any, any> | RegleStatus<any, any, any>>> extends {
|
|
2677
|
+
$value: infer V;
|
|
2678
|
+
} ? V : unknown)>(root: MaybeRef<TRoot>, discriminantKey: TKey, discriminantValue: TValue): Ref<NarrowVariant<TRoot, TKey, TValue> | undefined>;
|
|
2540
2679
|
//#endregion
|
|
2541
2680
|
//#region src/core/refineRules.d.ts
|
|
2542
2681
|
/**
|
|
@@ -2566,4 +2705,4 @@ declare function defineRules<TRules extends RegleUnknownRulesTree>(rules: TRules
|
|
|
2566
2705
|
*/
|
|
2567
2706
|
declare function refineRules<TRules extends RegleUnknownRulesTree, TRefinement extends ReglePartialRuleTree<InferInput<TRules>> & RegleUnknownRulesTree>(rules: TRules, refinement: (state: Ref<InferInput<TRules>>) => TRefinement): (state: Ref<InferInput<TRules>>) => Merge<TRules, TRefinement>;
|
|
2568
2707
|
//#endregion
|
|
2569
|
-
export { type $InternalRegleStatus, type AllRulesDeclarations, type ArrayElement, type CommonAlphaOptions, type CommonComparisonOptions, type CreateScopedUseRegleOptions, type DeepMaybeRef, type DeepReactiveState, type DefaultValidatorsTree, type FormRuleDeclaration, type HasNamedKeys, type HaveAnyRequiredProps, type InferInput, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InferSafeOutput, type InlineRuleDeclaration, InternalRuleType, type JoinDiscriminatedUnions, type LocalRegleBehaviourOptions, type Maybe, type MaybeInput, type MaybeOutput, type MaybeReadonly, type MaybeVariantStatus, type MergedRegles, type MergedScopedRegles, type NarrowVariant, type NoInferLegacy, type NonEmptyTuple, type PrimitiveTypes, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleCustomFieldStatus, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalSchemaErrorTree, type RegleFieldIssue, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type RegleIssuesTree, type ReglePartialRuleTree, type RegleResult, type RegleRoot, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleMetadataExtended, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleTypeReturn, type RegleRuleWithParamsDefinition, type RegleShortcutDefinition, type RegleSingleField, type RegleStatus, type RegleUniversalParams, type RegleUnknownRulesTree, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleRuleTree as RegleValidationTree, type ResolvedRegleBehaviourOptions, type ScopedInstancesRecord, type ScopedInstancesRecordLike, type SuperCompatibleRegle, type SuperCompatibleRegleCollectionErrors, type SuperCompatibleRegleCollectionStatus, type SuperCompatibleRegleFieldStatus, type SuperCompatibleRegleResult, type SuperCompatibleRegleRoot, type SuperCompatibleRegleRuleStatus, type SuperCompatibleRegleStatus, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, type UseScopedRegleOptions, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, type inferRulesFn, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, type useCollectScopeFn, useRegle, type useRegleFn, useRootStorage, useScopedRegle, variantToRef };
|
|
2708
|
+
export { type $InternalRegleStatus, type AllRulesDeclarations, type ArrayElement, type CommonAlphaOptions, type CommonComparisonOptions, type CreateScopedUseRegleOptions, type DeepMaybeRef, type DeepReactiveState, type DefaultValidatorsTree, type FormRuleDeclaration, type HasNamedKeys, type HaveAnyRequiredProps, type InferInput, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InferSafeOutput, type InlineRuleDeclaration, InternalRuleType, type JoinDiscriminatedUnions, type LocalRegleBehaviourOptions, type Maybe, type MaybeInput, type MaybeOutput, type MaybeReadonly, type MaybeVariantStatus, type MergedRegles, type MergedScopedRegles, type NarrowVariant, type NoInferLegacy, type NonEmptyTuple, type PrimitiveTypes, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleCustomFieldStatus, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalSchemaErrorTree, type RegleFieldIssue, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type RegleIssuesTree, type ReglePartialRuleTree, type RegleResult, type RegleRoot, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleMetadataExtended, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleTypeReturn, type RegleRuleWithParamsDefinition, type RegleShortcutDefinition, type RegleSingleField, type RegleStatus, type RegleUniversalParams, type RegleUnknownRulesTree, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleRuleTree as RegleValidationTree, type ResolvedRegleBehaviourOptions, type ScopedInstancesRecord, type ScopedInstancesRecordLike, type SuperCompatibleRegle, type SuperCompatibleRegleCollectionErrors, type SuperCompatibleRegleCollectionStatus, type SuperCompatibleRegleFieldStatus, type SuperCompatibleRegleResult, type SuperCompatibleRegleRoot, type SuperCompatibleRegleRuleStatus, type SuperCompatibleRegleStatus, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, type UseScopedRegleOptions, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, type inferRulesFn, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, type useCollectScopeFn, useRegle, type useRegleFn, useRootStorage, useRules, type useRulesFn, useScopedRegle, variantToRef };
|
package/dist/regle-core.js
CHANGED
|
@@ -709,8 +709,8 @@ function flatErrors(errors, options) {
|
|
|
709
709
|
if (Array.isArray(errors) && errors.every((err) => !isObject(err))) return errors;
|
|
710
710
|
else if (isCollectionError(errors)) {
|
|
711
711
|
const selfErrors = includePath ? errors.$self?.map((err) => ({
|
|
712
|
-
|
|
713
|
-
path:
|
|
712
|
+
message: err,
|
|
713
|
+
path: []
|
|
714
714
|
})) ?? [] : errors.$self ?? [];
|
|
715
715
|
const eachErrors = errors.$each?.map((err) => iterateErrors(err, includePath)) ?? [];
|
|
716
716
|
return selfErrors?.concat(eachErrors.flat());
|
|
@@ -720,16 +720,16 @@ function iterateErrors(errors, includePath = false, _path) {
|
|
|
720
720
|
const path = includePath && !_path ? [] : _path;
|
|
721
721
|
if (Array.isArray(errors) && errors.every((err) => !isObject(err))) {
|
|
722
722
|
if (includePath) return errors.map((err) => ({
|
|
723
|
-
|
|
724
|
-
path: path
|
|
723
|
+
message: err,
|
|
724
|
+
path: path ?? []
|
|
725
725
|
}));
|
|
726
726
|
return errors;
|
|
727
727
|
} else if (isCollectionError(errors)) {
|
|
728
728
|
const selfErrors = path?.length ? errors.$self?.map((err) => ({
|
|
729
|
-
|
|
730
|
-
path: path
|
|
729
|
+
message: err,
|
|
730
|
+
path: path ?? []
|
|
731
731
|
})) ?? [] : errors.$self ?? [];
|
|
732
|
-
const eachErrors = errors.$each?.map((err, index) => iterateErrors(err, includePath, path?.concat(index
|
|
732
|
+
const eachErrors = errors.$each?.map((err, index) => iterateErrors(err, includePath, path?.concat(index))) ?? [];
|
|
733
733
|
return selfErrors?.concat(eachErrors.flat());
|
|
734
734
|
} else return Object.entries(errors).map(([key, value]) => iterateErrors(value, includePath, path?.concat(key))).flat();
|
|
735
735
|
}
|
|
@@ -911,6 +911,23 @@ function createReactiveRuleStatus({ customMessages, rule, ruleKey, state, path,
|
|
|
911
911
|
});
|
|
912
912
|
}
|
|
913
913
|
|
|
914
|
+
//#endregion
|
|
915
|
+
//#region src/core/useRegle/root/standard-schemas.ts
|
|
916
|
+
function createStandardSchema(validateFn) {
|
|
917
|
+
return { "~standard": {
|
|
918
|
+
version: 1,
|
|
919
|
+
vendor: "regle",
|
|
920
|
+
validate: async (value) => {
|
|
921
|
+
const { valid, data, errors } = await validateFn(value);
|
|
922
|
+
if (valid) return {
|
|
923
|
+
value: data,
|
|
924
|
+
issues: []
|
|
925
|
+
};
|
|
926
|
+
return { issues: flatErrors(errors, { includePath: true }) };
|
|
927
|
+
}
|
|
928
|
+
} };
|
|
929
|
+
}
|
|
930
|
+
|
|
914
931
|
//#endregion
|
|
915
932
|
//#region src/core/useRegle/root/createReactiveFieldStatus.ts
|
|
916
933
|
function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cachePath, fieldName, storage, options, externalErrors, schemaErrors, schemaMode, onUnwatch, $isArray, initialState, originalState, shortcuts, onValidate }) {
|
|
@@ -933,7 +950,7 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
|
|
|
933
950
|
const rules = rulesDef.value;
|
|
934
951
|
const entries = [];
|
|
935
952
|
for (const ruleKey in rules) {
|
|
936
|
-
if (ruleKey.startsWith("$")) continue;
|
|
953
|
+
if (ruleKey.startsWith("$") || ruleKey.startsWith("~")) continue;
|
|
937
954
|
const rule = rules[ruleKey];
|
|
938
955
|
if (!rule) continue;
|
|
939
956
|
const ruleRef = toRef(() => rule);
|
|
@@ -1231,7 +1248,7 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
|
|
|
1231
1248
|
state.value = cloneDeep(newInitialState);
|
|
1232
1249
|
} else initialState.value = isObject(state.value) ? cloneDeep(state.value) : Array.isArray(state.value) ? [...state.value] : state.value;
|
|
1233
1250
|
if (options$1?.clearExternalErrors) $clearExternalErrors();
|
|
1234
|
-
if (!fromParent) for (const rule of Object.values($rules.value)) rule.$reset();
|
|
1251
|
+
if (!fromParent && !options$1?.keepValidationState) for (const rule of Object.values($rules.value)) rule.$reset();
|
|
1235
1252
|
if (!scopeState.$lazy.value && !scopeState.$silent.value && !fromParent) for (const rule of Object.values($rules.value)) rule.$parse();
|
|
1236
1253
|
}
|
|
1237
1254
|
function $touch(runCommit = true, withConditions = false) {
|
|
@@ -1240,37 +1257,50 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
|
|
|
1240
1257
|
if (!scopeState.$silent.value || scopeState.$rewardEarly.value && scopeState.$error.value) $commit();
|
|
1241
1258
|
} else if (runCommit) $commit();
|
|
1242
1259
|
}
|
|
1243
|
-
async function $validate() {
|
|
1260
|
+
async function $validate(forceValues) {
|
|
1244
1261
|
try {
|
|
1262
|
+
if (forceValues) state.value = forceValues;
|
|
1245
1263
|
if (schemaMode) if (onValidate) {
|
|
1246
1264
|
$touch(false);
|
|
1247
1265
|
return onValidate();
|
|
1248
1266
|
} else return {
|
|
1249
1267
|
valid: false,
|
|
1250
|
-
data: state.value
|
|
1268
|
+
data: state.value,
|
|
1269
|
+
errors: scopeState.$errors.value,
|
|
1270
|
+
issues: scopeState.$issues.value
|
|
1251
1271
|
};
|
|
1252
1272
|
const data = state.value;
|
|
1253
1273
|
if (!scopeState.$dirty.value) scopeState.$dirty.value = true;
|
|
1254
1274
|
else if (!scopeState.$silent.value && scopeState.$dirty.value && !scopeState.$pending.value) return {
|
|
1255
1275
|
valid: !scopeState.$error.value,
|
|
1256
|
-
data
|
|
1276
|
+
data,
|
|
1277
|
+
errors: scopeState.$errors.value,
|
|
1278
|
+
issues: scopeState.$issues.value
|
|
1257
1279
|
};
|
|
1258
1280
|
if (schemaMode) return {
|
|
1259
1281
|
valid: !schemaErrors?.value?.length,
|
|
1260
|
-
data
|
|
1282
|
+
data,
|
|
1283
|
+
errors: scopeState.$errors.value,
|
|
1284
|
+
issues: scopeState.$issues.value
|
|
1261
1285
|
};
|
|
1262
1286
|
else if (isEmpty($rules.value)) return {
|
|
1263
1287
|
valid: true,
|
|
1264
|
-
data
|
|
1288
|
+
data,
|
|
1289
|
+
errors: scopeState.$errors.value,
|
|
1290
|
+
issues: scopeState.$issues.value
|
|
1265
1291
|
};
|
|
1266
1292
|
return {
|
|
1267
1293
|
valid: (await Promise.allSettled(Object.values($rules.value).map((rule) => rule.$parse()))).every((value) => value.status === "fulfilled" && value.value === true),
|
|
1268
|
-
data
|
|
1294
|
+
data,
|
|
1295
|
+
errors: scopeState.$errors.value,
|
|
1296
|
+
issues: scopeState.$issues.value
|
|
1269
1297
|
};
|
|
1270
1298
|
} catch {
|
|
1271
1299
|
return {
|
|
1272
1300
|
valid: false,
|
|
1273
|
-
data: state.value
|
|
1301
|
+
data: state.value,
|
|
1302
|
+
errors: scopeState.$errors.value,
|
|
1303
|
+
issues: scopeState.$issues.value
|
|
1274
1304
|
};
|
|
1275
1305
|
}
|
|
1276
1306
|
}
|
|
@@ -1300,7 +1330,8 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
|
|
|
1300
1330
|
$unwatch,
|
|
1301
1331
|
$watch,
|
|
1302
1332
|
$extractDirtyFields,
|
|
1303
|
-
$clearExternalErrors
|
|
1333
|
+
$clearExternalErrors,
|
|
1334
|
+
...createStandardSchema($validate)
|
|
1304
1335
|
});
|
|
1305
1336
|
}
|
|
1306
1337
|
|
|
@@ -1674,28 +1705,35 @@ function createReactiveCollectionStatus({ state, rulesDef, customMessages, path,
|
|
|
1674
1705
|
state.value = cloneDeep(newInitialState);
|
|
1675
1706
|
} else initialState.value = cloneDeep(state.value);
|
|
1676
1707
|
if (options$1?.clearExternalErrors) $clearExternalErrors();
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
$
|
|
1680
|
-
|
|
1708
|
+
if (!options$1?.keepValidationState) {
|
|
1709
|
+
$selfStatus.value.$reset(options$1, fromParent);
|
|
1710
|
+
$eachStatus.value.forEach(($each) => {
|
|
1711
|
+
$each.$reset(options$1, true);
|
|
1712
|
+
});
|
|
1713
|
+
}
|
|
1681
1714
|
if (!fromParent) createStatus();
|
|
1682
1715
|
}
|
|
1683
|
-
async function $validate() {
|
|
1716
|
+
async function $validate(forceValues) {
|
|
1717
|
+
if (forceValues) state.value = forceValues;
|
|
1684
1718
|
const data = state.value;
|
|
1685
1719
|
try {
|
|
1686
1720
|
return {
|
|
1687
|
-
valid: (await Promise.allSettled([$selfStatus.value.$validate(), ...$eachStatus.value.map((status) => {
|
|
1721
|
+
valid: (await Promise.allSettled([$selfStatus.value.$validate(forceValues), ...$eachStatus.value.map((status) => {
|
|
1688
1722
|
return status.$validate();
|
|
1689
1723
|
})])).every((value) => {
|
|
1690
1724
|
if (value.status === "fulfilled") return value.value.valid === true;
|
|
1691
1725
|
else return false;
|
|
1692
1726
|
}),
|
|
1693
|
-
data
|
|
1727
|
+
data,
|
|
1728
|
+
errors: scopeState.$errors.value,
|
|
1729
|
+
issues: scopeState.$issues.value
|
|
1694
1730
|
};
|
|
1695
1731
|
} catch {
|
|
1696
1732
|
return {
|
|
1697
1733
|
valid: false,
|
|
1698
|
-
data
|
|
1734
|
+
data,
|
|
1735
|
+
errors: scopeState.$errors.value,
|
|
1736
|
+
issues: scopeState.$issues.value
|
|
1699
1737
|
};
|
|
1700
1738
|
}
|
|
1701
1739
|
}
|
|
@@ -1732,7 +1770,8 @@ function createReactiveCollectionStatus({ state, rulesDef, customMessages, path,
|
|
|
1732
1770
|
$touch,
|
|
1733
1771
|
$reset,
|
|
1734
1772
|
$extractDirtyFields,
|
|
1735
|
-
$clearExternalErrors
|
|
1773
|
+
$clearExternalErrors,
|
|
1774
|
+
...createStandardSchema($validate)
|
|
1736
1775
|
});
|
|
1737
1776
|
}
|
|
1738
1777
|
|
|
@@ -2087,7 +2126,7 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", cachePath, roo
|
|
|
2087
2126
|
initialState.value = cloneDeep(newInitialState);
|
|
2088
2127
|
state.value = cloneDeep(newInitialState);
|
|
2089
2128
|
} else initialState.value = cloneDeep(state.value);
|
|
2090
|
-
for (const field of Object.values($fields.value)) field?.$reset(options, true);
|
|
2129
|
+
if (!options?.keepValidationState) for (const field of Object.values($fields.value)) field?.$reset(options, true);
|
|
2091
2130
|
if (options?.clearExternalErrors) $clearExternalErrors();
|
|
2092
2131
|
define$WatchExternalErrors();
|
|
2093
2132
|
if (!fromParent) createReactiveFieldsStatus();
|
|
@@ -2109,27 +2148,34 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", cachePath, roo
|
|
|
2109
2148
|
if (filterNullishValues) dirtyFields = filterNullishFields(dirtyFields);
|
|
2110
2149
|
return Object.fromEntries(dirtyFields);
|
|
2111
2150
|
}
|
|
2112
|
-
async function $validate() {
|
|
2151
|
+
async function $validate(forceValues) {
|
|
2113
2152
|
try {
|
|
2153
|
+
if (forceValues) state.value = forceValues;
|
|
2114
2154
|
if (commonArgs.schemaMode) if (commonArgs.onValidate) {
|
|
2115
2155
|
$touch(false);
|
|
2116
2156
|
scopeState.$localPending.value = true;
|
|
2117
2157
|
return commonArgs.onValidate();
|
|
2118
2158
|
} else return {
|
|
2119
2159
|
valid: false,
|
|
2120
|
-
data: state.value
|
|
2160
|
+
data: state.value,
|
|
2161
|
+
errors: scopeState.$errors.value,
|
|
2162
|
+
issues: scopeState.$issues.value
|
|
2121
2163
|
};
|
|
2122
2164
|
else {
|
|
2123
2165
|
const data = state.value;
|
|
2124
2166
|
return {
|
|
2125
2167
|
valid: (await Promise.allSettled(Object.values($fields.value).map((statusOrField) => statusOrField.$validate()))).every((value) => value.status === "fulfilled" && value?.value.valid === true),
|
|
2126
|
-
data
|
|
2168
|
+
data,
|
|
2169
|
+
errors: scopeState.$errors.value,
|
|
2170
|
+
issues: scopeState.$issues.value
|
|
2127
2171
|
};
|
|
2128
2172
|
}
|
|
2129
2173
|
} catch {
|
|
2130
2174
|
return {
|
|
2131
2175
|
valid: false,
|
|
2132
|
-
data: state.value
|
|
2176
|
+
data: state.value,
|
|
2177
|
+
errors: scopeState.$errors.value,
|
|
2178
|
+
issues: scopeState.$issues.value
|
|
2133
2179
|
};
|
|
2134
2180
|
} finally {
|
|
2135
2181
|
scopeState.$localPending.value = false;
|
|
@@ -2149,10 +2195,11 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", cachePath, roo
|
|
|
2149
2195
|
$unwatch,
|
|
2150
2196
|
$watch,
|
|
2151
2197
|
$clearExternalErrors,
|
|
2152
|
-
$extractDirtyFields
|
|
2198
|
+
$extractDirtyFields,
|
|
2199
|
+
...createStandardSchema($validate)
|
|
2153
2200
|
});
|
|
2154
2201
|
watchEffect(() => {
|
|
2155
|
-
for (const key of Object.keys(fullStatus).filter((key$1) => !key$1.startsWith("$"))) delete fullStatus[key];
|
|
2202
|
+
for (const key of Object.keys(fullStatus).filter((key$1) => !key$1.startsWith("$") && !key$1.startsWith("~"))) delete fullStatus[key];
|
|
2156
2203
|
for (const field of Object.values($fields.value)) if (field?.$name) Object.assign(fullStatus, { [field.$name]: field });
|
|
2157
2204
|
});
|
|
2158
2205
|
return fullStatus;
|
|
@@ -2263,6 +2310,32 @@ function useRootStorage({ initialState, originalState, options, scopeRules, stat
|
|
|
2263
2310
|
return reactive({ regle });
|
|
2264
2311
|
}
|
|
2265
2312
|
|
|
2313
|
+
//#endregion
|
|
2314
|
+
//#region src/core/useRegle/shared.rootRegle.ts
|
|
2315
|
+
function createRootRegleLogic({ state, rulesFactory, options, globalOptions, customRules, shortcuts }) {
|
|
2316
|
+
const definedRules = isRef(rulesFactory) ? rulesFactory : typeof rulesFactory === "function" ? void 0 : computed(() => rulesFactory);
|
|
2317
|
+
const resolvedOptions = {
|
|
2318
|
+
...globalOptions,
|
|
2319
|
+
...options
|
|
2320
|
+
};
|
|
2321
|
+
const watchableRulesGetters = shallowRef(definedRules ?? {});
|
|
2322
|
+
if (typeof rulesFactory === "function") watchEffect(() => {
|
|
2323
|
+
watchableRulesGetters.value = rulesFactory(state);
|
|
2324
|
+
triggerRef(watchableRulesGetters);
|
|
2325
|
+
});
|
|
2326
|
+
const initialState = ref(isObject(state.value) ? { ...cloneDeep(state.value) } : cloneDeep(state.value));
|
|
2327
|
+
const originalState = isObject(state.value) ? { ...cloneDeep(state.value) } : cloneDeep(state.value);
|
|
2328
|
+
return useRootStorage({
|
|
2329
|
+
scopeRules: watchableRulesGetters,
|
|
2330
|
+
state,
|
|
2331
|
+
options: resolvedOptions,
|
|
2332
|
+
initialState,
|
|
2333
|
+
originalState,
|
|
2334
|
+
customRules,
|
|
2335
|
+
shortcuts
|
|
2336
|
+
});
|
|
2337
|
+
}
|
|
2338
|
+
|
|
2266
2339
|
//#endregion
|
|
2267
2340
|
//#region src/core/useRegle/useRegle.ts
|
|
2268
2341
|
function createUseRegleComposable(customRules, options, shortcuts) {
|
|
@@ -2274,25 +2347,12 @@ function createUseRegleComposable(customRules, options, shortcuts) {
|
|
|
2274
2347
|
clearExternalErrorsOnChange: options?.clearExternalErrorsOnChange
|
|
2275
2348
|
};
|
|
2276
2349
|
function useRegle$1(state, rulesFactory, options$1) {
|
|
2277
|
-
const definedRules = isRef(rulesFactory) ? rulesFactory : typeof rulesFactory === "function" ? void 0 : computed(() => rulesFactory);
|
|
2278
|
-
const resolvedOptions = {
|
|
2279
|
-
...globalOptions,
|
|
2280
|
-
...options$1
|
|
2281
|
-
};
|
|
2282
2350
|
const processedState = isRef(state) ? state : ref(state);
|
|
2283
|
-
|
|
2284
|
-
if (typeof rulesFactory === "function") watchEffect(() => {
|
|
2285
|
-
watchableRulesGetters.value = rulesFactory(processedState);
|
|
2286
|
-
triggerRef(watchableRulesGetters);
|
|
2287
|
-
});
|
|
2288
|
-
const initialState = ref(isObject(processedState.value) ? { ...cloneDeep(processedState.value) } : cloneDeep(processedState.value));
|
|
2289
|
-
const originalState = isObject(processedState.value) ? { ...cloneDeep(processedState.value) } : cloneDeep(processedState.value);
|
|
2290
|
-
return { r$: useRootStorage({
|
|
2291
|
-
scopeRules: watchableRulesGetters,
|
|
2351
|
+
return { r$: createRootRegleLogic({
|
|
2292
2352
|
state: processedState,
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2353
|
+
rulesFactory,
|
|
2354
|
+
options: options$1,
|
|
2355
|
+
globalOptions,
|
|
2296
2356
|
customRules,
|
|
2297
2357
|
shortcuts
|
|
2298
2358
|
}).regle };
|
|
@@ -2337,6 +2397,60 @@ function createInferRuleHelper() {
|
|
|
2337
2397
|
*/
|
|
2338
2398
|
const inferRules = createInferRuleHelper();
|
|
2339
2399
|
|
|
2400
|
+
//#endregion
|
|
2401
|
+
//#region src/core/useRegle/useRules.ts
|
|
2402
|
+
function createEmptyRuleState(rules) {
|
|
2403
|
+
const result = {};
|
|
2404
|
+
if (Object.entries(rules).some(([_, rule]) => isRuleDef(rule) || typeof rule === "function")) return null;
|
|
2405
|
+
for (const key in rules) {
|
|
2406
|
+
const item = rules[key];
|
|
2407
|
+
if (!!item && isObject(item) && "$each" in item && item["$each"] && isObject(item["$each"])) result[key] = [createEmptyRuleState(item["$each"])];
|
|
2408
|
+
else if (isObject(item) && !isEmpty(item) && !Object.entries(item).some(([_, rule]) => isRuleDef(rule) || typeof rule === "function")) result[key] = createEmptyRuleState(item);
|
|
2409
|
+
else result[key] = null;
|
|
2410
|
+
}
|
|
2411
|
+
return result;
|
|
2412
|
+
}
|
|
2413
|
+
function createUseRulesComposable(customRules, options, shortcuts) {
|
|
2414
|
+
const globalOptions = {
|
|
2415
|
+
autoDirty: options?.autoDirty,
|
|
2416
|
+
lazy: options?.lazy,
|
|
2417
|
+
rewardEarly: options?.rewardEarly,
|
|
2418
|
+
silent: options?.silent,
|
|
2419
|
+
clearExternalErrorsOnChange: options?.clearExternalErrorsOnChange
|
|
2420
|
+
};
|
|
2421
|
+
function useRules$1(rulesFactory, options$1) {
|
|
2422
|
+
const definedRules = isRef(rulesFactory) ? rulesFactory : typeof rulesFactory === "function" ? void 0 : computed(() => rulesFactory);
|
|
2423
|
+
const processedState = ref(createEmptyRuleState(definedRules?.value));
|
|
2424
|
+
return createRootRegleLogic({
|
|
2425
|
+
state: processedState,
|
|
2426
|
+
rulesFactory: definedRules,
|
|
2427
|
+
options: options$1,
|
|
2428
|
+
globalOptions,
|
|
2429
|
+
customRules,
|
|
2430
|
+
shortcuts
|
|
2431
|
+
}).regle;
|
|
2432
|
+
}
|
|
2433
|
+
return useRules$1;
|
|
2434
|
+
}
|
|
2435
|
+
/**
|
|
2436
|
+
* useRules is a clone of useRegle, without the need to provide a state.
|
|
2437
|
+
*
|
|
2438
|
+
* It accepts the following inputs:
|
|
2439
|
+
*
|
|
2440
|
+
* @param rules - Your rules object
|
|
2441
|
+
* @param modifiers - Customize regle behaviour
|
|
2442
|
+
*
|
|
2443
|
+
* ```ts
|
|
2444
|
+
* import { useRules } from '@regle/core';
|
|
2445
|
+
import { required } from '@regle/rules';
|
|
2446
|
+
|
|
2447
|
+
const { r$ } = useRules({
|
|
2448
|
+
email: { required }
|
|
2449
|
+
})
|
|
2450
|
+
* ```
|
|
2451
|
+
*/
|
|
2452
|
+
const useRules = createUseRulesComposable();
|
|
2453
|
+
|
|
2340
2454
|
//#endregion
|
|
2341
2455
|
//#region src/core/defineRegleConfig.ts
|
|
2342
2456
|
/**
|
|
@@ -2353,15 +2467,22 @@ const inferRules = createInferRuleHelper();
|
|
|
2353
2467
|
*/
|
|
2354
2468
|
function defineRegleConfig({ rules, modifiers, shortcuts }) {
|
|
2355
2469
|
const useRegle$1 = createUseRegleComposable(rules, modifiers, shortcuts);
|
|
2470
|
+
const useRules$1 = createUseRulesComposable(rules, modifiers, shortcuts);
|
|
2356
2471
|
useRegle$1.__config = {
|
|
2357
2472
|
rules,
|
|
2358
2473
|
modifiers,
|
|
2359
2474
|
shortcuts
|
|
2360
2475
|
};
|
|
2476
|
+
useRules$1.__config = {
|
|
2477
|
+
rules,
|
|
2478
|
+
modifiers,
|
|
2479
|
+
shortcuts
|
|
2480
|
+
};
|
|
2361
2481
|
const inferRules$1 = createInferRuleHelper();
|
|
2362
2482
|
return {
|
|
2363
2483
|
useRegle: useRegle$1,
|
|
2364
|
-
inferRules: inferRules$1
|
|
2484
|
+
inferRules: inferRules$1,
|
|
2485
|
+
useRules: useRules$1
|
|
2365
2486
|
};
|
|
2366
2487
|
}
|
|
2367
2488
|
/**
|
|
@@ -2452,6 +2573,22 @@ function mergeRegles(regles, _scoped) {
|
|
|
2452
2573
|
return regle?.$pending;
|
|
2453
2574
|
});
|
|
2454
2575
|
});
|
|
2576
|
+
const $issues = computed(() => {
|
|
2577
|
+
if (scoped) return Object.entries(regles).map(([_, regle]) => {
|
|
2578
|
+
return regle.$issues;
|
|
2579
|
+
});
|
|
2580
|
+
else return Object.fromEntries(Object.entries(regles).map(([key, regle]) => {
|
|
2581
|
+
return [key, regle.$issues];
|
|
2582
|
+
}));
|
|
2583
|
+
});
|
|
2584
|
+
const $silentIssues = computed(() => {
|
|
2585
|
+
if (scoped) return Object.entries(regles).map(([_, regle]) => {
|
|
2586
|
+
return regle.$silentIssues;
|
|
2587
|
+
});
|
|
2588
|
+
else return Object.fromEntries(Object.entries(regles).map(([key, regle]) => {
|
|
2589
|
+
return [key, regle.$silentIssues];
|
|
2590
|
+
}));
|
|
2591
|
+
});
|
|
2455
2592
|
const $errors = computed(() => {
|
|
2456
2593
|
if (scoped) return Object.entries(regles).map(([_, regle]) => {
|
|
2457
2594
|
return regle.$errors;
|
|
@@ -2501,8 +2638,9 @@ function mergeRegles(regles, _scoped) {
|
|
|
2501
2638
|
regle.$clearExternalErrors();
|
|
2502
2639
|
});
|
|
2503
2640
|
}
|
|
2504
|
-
async function $validate() {
|
|
2641
|
+
async function $validate(forceValues) {
|
|
2505
2642
|
try {
|
|
2643
|
+
if (forceValues) $value.value = forceValues;
|
|
2506
2644
|
const data = $value.value;
|
|
2507
2645
|
return {
|
|
2508
2646
|
valid: (await Promise.allSettled(Object.values(regles).map((regle) => {
|
|
@@ -2511,18 +2649,24 @@ function mergeRegles(regles, _scoped) {
|
|
|
2511
2649
|
if (value.status === "fulfilled") return value.value.valid === true;
|
|
2512
2650
|
else return false;
|
|
2513
2651
|
}),
|
|
2514
|
-
data
|
|
2652
|
+
data,
|
|
2653
|
+
errors: $errors.value,
|
|
2654
|
+
issues: $issues.value
|
|
2515
2655
|
};
|
|
2516
2656
|
} catch {
|
|
2517
2657
|
return {
|
|
2518
2658
|
valid: false,
|
|
2519
|
-
data: $value.value
|
|
2659
|
+
data: $value.value,
|
|
2660
|
+
errors: $errors.value,
|
|
2661
|
+
issues: $issues.value
|
|
2520
2662
|
};
|
|
2521
2663
|
}
|
|
2522
2664
|
}
|
|
2523
2665
|
return reactive({
|
|
2524
2666
|
...!scoped && { $silentValue },
|
|
2525
2667
|
$errors,
|
|
2668
|
+
$issues,
|
|
2669
|
+
$silentIssues,
|
|
2526
2670
|
$silentErrors,
|
|
2527
2671
|
$instances,
|
|
2528
2672
|
$value,
|
|
@@ -2640,7 +2784,7 @@ function createScopedUseRegle(options) {
|
|
|
2640
2784
|
const { useCollectScope, useScopedRegle } = createScopedUseRegle();
|
|
2641
2785
|
|
|
2642
2786
|
//#endregion
|
|
2643
|
-
//#region src/core/createVariant.ts
|
|
2787
|
+
//#region src/core/variants/createVariant.ts
|
|
2644
2788
|
/**
|
|
2645
2789
|
* Declare variations of state that depends on one value
|
|
2646
2790
|
*
|
|
@@ -2690,16 +2834,7 @@ function createVariant(root, discriminantKey, variants) {
|
|
|
2690
2834
|
function narrowVariant(root, discriminantKey, discriminantValue) {
|
|
2691
2835
|
return isObject(root[discriminantKey]) && "$value" in root[discriminantKey] && root[discriminantKey]?.$value === discriminantValue;
|
|
2692
2836
|
}
|
|
2693
|
-
|
|
2694
|
-
* Narrow a nested variant root to a reactive reference
|
|
2695
|
-
*
|
|
2696
|
-
* ```vue
|
|
2697
|
-
* <script setup lang="ts">
|
|
2698
|
-
* const variantR$ = variantToRef(r$, 'type', 'EMAIL');
|
|
2699
|
-
* <\/script>
|
|
2700
|
-
* ```
|
|
2701
|
-
*/
|
|
2702
|
-
function variantToRef(root, discriminantKey, discriminantValue) {
|
|
2837
|
+
function variantToRef(root, discriminantKey, discriminantValue, _options) {
|
|
2703
2838
|
const fromRoot = isRef(root) ? toRef(root.value, "$fields") : toRef(root, "$fields");
|
|
2704
2839
|
const returnedRef = ref();
|
|
2705
2840
|
watch(fromRoot, async () => {
|
|
@@ -2747,4 +2882,4 @@ function refineRules(rules, refinement) {
|
|
|
2747
2882
|
}
|
|
2748
2883
|
|
|
2749
2884
|
//#endregion
|
|
2750
|
-
export { InternalRuleType, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, useRegle, useRootStorage, useScopedRegle, variantToRef };
|
|
2885
|
+
export { InternalRuleType, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, useRegle, useRootStorage, useRules, useScopedRegle, variantToRef };
|
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={};for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n],i=n.split(`.`),a=t;for(let e=0;e<i.length;e++){let t=i[e],n=e===i.length-1,o=t.match(/^\d+$/)?Number(t):null;if(o!==null){if(Array.isArray(a))if(n)a[o]=r;else{if(typeof a[o]!=`object`||a[o]===null){let t=i[e+1];a[o]=t&&t.match(/^\d+$/)?{$each:[],$self:[]}:{}}a=`$each`in a[o]?a[o].$each:a[o]}}else if(n)if(Array.isArray(a[t])){let e=a[t].slice();a[t]={},a[t].$self=e}else typeof a[t]==`object`&&a[t]!==null&&`$each`in a[t]?a[t].$self=r:a[t]=r;else{let n=i[e+1];if(Array.isArray(a[t])){let e=a[t].slice();a[t]={$each:[]},a[t].$self=e}(typeof a[t]!=`object`||a[t]===null||Array.isArray(a[t])&&!n.match(/^\d+$/))&&(n&&n.match(/^\d+$/)?a[t]={$each:[],$self:[]}:a[t]={}),a=`$each`in a[t]?a[t].$each:a[t]}}}return t}function D(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 O(e,t,{immediate:n=!1,trackDebounceRef:r}={}){let i,a=(...a)=>{r&&(r.value=!0);function o(){r&&(r.value=!1)}return new Promise(r=>{function s(e){r(e),o()}clearTimeout(i),i=setTimeout(()=>{i=void 0,n||Promise.resolve(e.apply(this,[...a])).then(s).finally(o)},t),n&&!i&&Promise.resolve(e.apply(this,[...a])).then(s).finally(o)})};return a.cancel=()=>{clearTimeout(i),i=void 0,r&&(r.value=!1)},a}function k(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(!k(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];if(w(e)&&w(t)&&s&&(r||!r&&n)&&!k(e[s],t[s],n,!1))return!1}return!0}return e!==e&&t!==t}const A={Inline:`__inline`,Async:`__async`};function j(e,t){return e.some(e=>t?e?.[t]:!1)}function M(e,t){return t?e.reduce((e,n)=>{let r=n?.[t]||[];return e.concat(r)},[]):[]}function N(e){try{return e.map(e=>p(e))}catch{return[]}}function P(t){return t.map(t=>t instanceof Function?e(t):i(t)?t:f(()=>t))}function F(e){let t=e.toString().replace(/\/\/.*$/gm,``).replace(/\/\*[\s\S]*?\*\//g,``).match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return t?(t[0]||t[1]||t[2]||t[3]||t[4]||``).split(`,`).map(e=>e.trim()).filter(e=>e.length>0).length:0}function I(e,...t){let{validator:n,type:r,async:i}=e,o=i||r===A.Async||n.constructor.name===`AsyncFunction`;return a({validator(n,...r){return e.validator(n,...N(r.length?r:t))},message(n){return typeof e.message==`function`?e.message({...n,$params:N(n?.$params?.length?n.$params:t)}):e.message},active(n){return typeof e.active==`function`?e.active({...n,$params:N(n?.$params?.length?n.$params:t)}):e.active??!0},tooltip(n){return typeof e.tooltip==`function`?e.tooltip({...n,$params:N(n?.$params?.length?n.$params:t)}):e.tooltip??[]},exec(n){let r=e.validator(n,...N(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)},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:P(t),_brand:x})}function L(e){if(typeof e.validator==`function`){let t=[],n=e.async??e.validator.constructor.name===`AsyncFunction`,r=I({...e,async:n},...t);if(F(e.validator)>1){let t=function(...t){return I(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 R(){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 y(n,r)?{valid:!0}:{valid:!1}}function y(e,t){let n=Object.keys(t),r=Object.keys(e);return r.length!==n.length||!r.every(e=>n.includes(e))?!1: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=N(i._params),n=N(r._params);return e?.[t]===n?.[t]}}):!0})}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 z(e){return w(e.value)}function B(e,n,r){let i=t(),a;return a=e instanceof Function?i.run(()=>e(n,r??0)):e,{scope:i,unwrapped:a}}const V={LessThan:-1,EqualTo:0,GreaterThan:1};function H(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 V.GreaterThan;if(i>t)return V.LessThan;if(!isNaN(t)&&isNaN(i))return V.GreaterThan;if(isNaN(t)&&!isNaN(i))return V.LessThan}return V.EqualTo}const U=H(g,`3.5.0`)!==-1;function W(){return Math.floor(Math.random()*Date.now()).toString()}function G(){return typeof window>`u`?W():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function K(e){return r()?(c(e),!0):!1}function q(e){let n=!1,r,i=t(!0);return((...t)=>(n||=(r=i.run(()=>e(...t)),!0),r))}function J(e,t){return z(e)||w(t.value)&&!b(t.value)&&!Object.entries(t.value).some(([e,t])=>Z(t)||typeof t==`function`)}function Y(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 X(e){return!!e.value&&(w(e.value)||z(e.value))}function Z(e){return w(e)&&`_validator`in e}function Q(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;return{$message:i,$property:e.fieldName,$rule:n,$type:r.$type,...typeof r.$metadata==`object`?r.$metadata:{}}}).filter(e=>!!e).reduce((e,t)=>(typeof t.$message==`string`?e.push(t):e.push(...t.$message.map(e=>({...t,$message:e}))),e),[]),r=e.$error&&e.$externalErrors?e.$externalErrors.map(t=>({$message:t,$property:e.fieldName,$rule:`external`,$type:void 0})):[],i=[];return e.$schemaErrors&&e.$error&&(i=!Array.isArray(e.$schemaErrors)&&`$self`in e.$schemaErrors?e.$schemaErrors.$self??[]:e.$schemaErrors??[]),[...n,...r,...i]}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=>oe(e,n))??[];return t?.concat(r.flat())}else return Object.entries(e).map(([e,t])=>oe(t,n,[e])).flat()}function oe(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)=>oe(e,t,r?.concat(n.toString())))??[];return n?.concat(i.flat())}else return Object.entries(e).map(([e,n])=>oe(n,t,r?.concat(e))).flat()}function se({customMessages:n,rule:r,ruleKey:i,state:a,path:o,cachePath:s,storage:c,modifiers:d}){let f=t(),p={},m,h=e(()=>Z(r.value)&&r.value._async),g=u(!1),{$pending:v,$valid:y,$metadata:x,$validating:S}=c.trySetRuleStatusRef(`${s}.${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(()=>Q(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),Q(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(()=>Q(r)&&r.value.type?r.value.type:i),S=e(()=>Q(r)?r.value.validator:r.value),C=e(()=>typeof r.value==`function`?[]:N(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)&&E()})}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}async function E(){try{S.value=!0;let e=!1;if(g.value=!0,Z(r.value)&&r.value._async)e=await T();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 D(){y.value=!0,x.value={},v.value=!1,S.value=!1,C()}function O(){m(),f.stop(),f=t()}return l({...p,$pending:v,$valid:y,$metadata:x,$haveAsync:h,$maybePending:g,$validating:S,$parse:E,$unwatch:O,$watch:C,$reset:D})}function ce({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,originalState:T,shortcuts:E,onValidate:A}){let j=t(),M,N=[],P,F,I,L,R=()=>{},z=u(!1);function B(){let e=r.value,t=c.checkRuleDeclEntry(o,e),s={};for(let t in e)t.startsWith(`$`)&&(s[t]=e[t]);J.value=s,W();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,se({modifiers:{$silent:M.$silent,$rewardEarly:M.$rewardEarly},customMessages:i,rule:r,ruleKey:e,state:n,path:a,cachePath:o,storage:c,$debounce:J.value.$debounce})])}q.value=Object.fromEntries(u),M.processShortcuts(),V(),t?.valid!=null&&(M.$dirty.value=c.getDirtyState(o),(M.$dirty.value&&!M.$silent.value||M.$rewardEarly.value&&M.$error.value)&&R()),c.addRuleDeclEntry(o,e)}function V(){R=M.$debounce.value||M.$haveAnyAsyncRule.value?O(K,M.$debounce.value??(M.$haveAnyAsyncRule?200:0),{trackDebounceRef:z}):K}function H(){if(q.value)for(let e of Object.values(q.value))e.$unwatch();F(),L?.(),M.$dirty.value&&c.setDirtyEntry(o,M.$dirty.value),P?.(),j.stop(),j=t();for(let e of N)e.stop();N=[],y?.(),I?.()}function W(){if(q.value)for(let e of Object.values(q.value))e.$watch();M=j.run(()=>{let i=u(!1),a=u(!1),o=e(()=>i.value),c=e(()=>J.value.$debounce),f=e(()=>J.value.$deepCompare==null?!1:J.value.$deepCompare),_=e(()=>J.value.$lazy==null?h(d.lazy)==null?!1:h(d.lazy):J.value.$lazy),y=e(()=>J.value.$rewardEarly==null?h(d.rewardEarly)==null?!1:h(d.rewardEarly):J.value.$rewardEarly),x=e(()=>J.value.$clearExternalErrorsOnChange==null?h(d.clearExternalErrorsOnChange)==null?!C.value:h(d.clearExternalErrorsOnChange):J.value.$clearExternalErrorsOnChange),C=e(()=>y.value?!0:J.value.$silent==null?h(d.silent)==null?!1:h(d.silent):J.value.$silent),w=e(()=>J.value.$autoDirty==null?h(d.autoDirty)==null?!0:h(d.autoDirty):J.value.$autoDirty),T=e(()=>{for(let e of Object.values(q.value))if(e.$validating)return!0;return!1}),O=e({get:()=>n.value,set(e){P(),n.value=e,G()}}),A=e(()=>z.value?U.value&&i.value:U.value&&!H.value&&i.value),j=e(()=>ne({field:{$rules:q.value,$error:A.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:s}})),M=e(()=>ne({field:{$rules:q.value,$error:A.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:s},silent:!0})),F=e(()=>j.value.map(e=>e.$message)),I=e(()=>M.value.map(e=>e.$message)),L=e(()=>i.value?S.value instanceof Date&&n.value instanceof Date?D(S.value).getDate()!==D(n.value).getDate():S.value==null?!!n.value:Array.isArray(n.value)&&Array.isArray(S.value)?!k(n.value,S.value,J.value.$deepCompare):S.value!==n.value:!1),R=e(()=>L.value),B=e(()=>re({field:{$rules:q.value}})),V=e(()=>(C.value||o.value)&&!(U.value||H.value)),H=e(()=>a.value||!y.value?Object.entries(q.value).some(([e,t])=>t.$pending):!1),U=e(()=>m?.value&&!Array.isArray(m?.value)&&`$self`in m.value?m?.value.$self?.length>0:p?.value?.length||m?.value?.length?!0:K.value?!1:Object.values(q.value).some(e=>!e.$valid||e.$maybePending)),W=e(()=>s),K=e(()=>!g&&!Object.keys(r.value).some(e=>!e.startsWith(`$`))),Y=e(()=>{if(p?.value?.length||K.value||z.value)return!1;if(i.value&&!b(n.value)&&!T.value&&!H.value){if(g)return!m?.value?.length;{let e=Object.values(q.value);for(let t of e)if(t.$active&&!t.$valid)return!1;return e.some(e=>e.$active)}}return!1}),X=e(()=>Object.values(q.value).some(e=>e.$haveAsync));function Z(){E?.fields&&Object.entries(E.fields).forEach(([e,r])=>{let a=t();Q[e]=a.run(()=>{let e=u();return v(()=>{e.value=r(l({$dirty:i,$externalErrors:p?.value??[],$value:n,$silentValue:O,$rules:q,$error:A,$pending:H,$invalid:U,$correct:Y,$errors:F,$ready:V,$silentErrors:I,$anyDirty:o,$tooltips:B,$name:W,$inactive:K,$edited:L,$anyEdited:R}))}),e}),N.push(a)})}let Q={};return{$error:A,$pending:H,$invalid:U,$correct:Y,$debounce:c,$deepCompare:f,$lazy:_,$ready:V,$issues:j,$silentIssues:M,$errors:F,$silentErrors:I,$rewardEarly:y,$autoDirty:w,$silent:C,$clearExternalErrorsOnChange:x,$anyDirty:o,$edited:L,$anyEdited:R,$name:W,$haveAnyAsyncRule:X,$shortcuts:Q,$validating:T,$tooltips:B,$dirty:i,processShortcuts:Z,$silentValue:O,$inactive:K}}),G(),F=_(M.$dirty,e=>{c.setDirtyEntry(o,e),Object.values(q.value).forEach(t=>{t.$fieldDirty=e})}),L=_([M.$error,M.$correct,M.$invalid,M.$pending],()=>{Object.values(q.value).forEach(e=>{e.$fieldError=M.$error.value,e.$fieldInvalid=M.$invalid.value,e.$fieldPending=M.$pending.value,e.$fieldCorrect=M.$correct.value})}),I=_(M.$haveAnyAsyncRule,V)}function G(){P=_(n,()=>{M.$autoDirty.value&&!M.$silent.value&&(M.$dirty.value||(M.$dirty.value=!0)),r.value instanceof Function&&B(),(!M.$silent.value||M.$rewardEarly.value&&M.$error.value)&&R(),M.$clearExternalErrorsOnChange.value&&ee()},{deep:x?!0:U?1:!0})}function K(){Object.values(q.value).forEach(e=>{e.$parse()})}let q=u({}),J=u({});B();function Y(e,t){if(ee(),M.$dirty.value=!1,c.setDirtyEntry(o,!1),!t)if(e?.toOriginalState)n.value=C(T),S.value=C(T);else 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&&ee(),!t)for(let e of Object.values(q.value))e.$reset();if(!M.$lazy.value&&!M.$silent.value&&!t)for(let e of Object.values(q.value))e.$parse()}function X(e=!0,t=!1){M.$dirty.value||(M.$dirty.value=!0),t&&e?(!M.$silent.value||M.$rewardEarly.value&&M.$error.value)&&R():e&&R()}async function Z(){try{if(g)return A?(X(!1),A()):{valid:!1,data:n.value};let e=n.value;if(!M.$dirty.value)M.$dirty.value=!0;else if(!M.$silent.value&&M.$dirty.value&&!M.$pending.value)return{valid:!M.$error.value,data:e};return g?{valid:!m?.value?.length,data:e}:b(q.value)?{valid:!0,data:e}:{valid:(await Promise.allSettled(Object.values(q.value).map(e=>e.$parse()))).every(e=>e.status===`fulfilled`&&e.value===!0),data:e}}catch{return{valid:!1,data:n.value}}}function Q(e=!0){return M.$dirty.value?n.value:e?{_null:!0}:null}function ee(){p?.value?.length&&(p.value=[])}!M.$lazy.value&&!M.$dirty.value&&!M.$silent.value&&R();let{$shortcuts:te,$validating:ie,$autoDirty:ae,$rewardEarly:oe,$clearExternalErrorsOnChange:ce,$haveAnyAsyncRule:le,$debounce:ue,$lazy:de,...$}=M;return l({...$,$externalErrors:p,$value:n,$initialValue:S,$originalValue:T,$rules:q,...te,$path:a,$isDebouncing:z,$reset:Y,$touch:X,$validate:Z,$unwatch:H,$watch:W,$extractDirtyFields:Q,$clearExternalErrors:ee})}function le({$id:t,path:n,cachePath:r,index:i,options:a,storage:o,stateValue:s,customMessages:c,rules:l,externalErrors:u,schemaErrors:d,initialState:p,originalState:m,shortcuts:h,fieldName:g,schemaMode:_}){let v=s.value?.$id??l.$key??G(),y=`${r}.${String(v)}`,b=`${n}.${i}`;typeof s.value==`object`&&s.value!=null&&(s.value.$id||Object.defineProperties(s.value,{$id:{value:v,enumerable:!1,configurable:!1,writable:!1}}));let x=f(u?.value??[],i),S=e(()=>d?.value?.[i]),C=$({index:i,state:s,rulesDef:f(()=>l),customMessages:c,path:b,cachePath:y,storage:o,options:a,externalErrors:x,schemaErrors:S,initialState:p,originalState:m,shortcuts:h,fieldName:g,schemaMode:_});return C&&(C.$id=s.value?.$id??String(v),o.addArrayStatus(t,C.$id,C)),C}function ue({state:n,rulesDef:r,customMessages:i,path:a,storage:o,options:s,externalErrors:c,schemaErrors:d,schemaMode:p,initialState:m,originalState:g,shortcuts:y,fieldName:x}){let S=t(),w,T=t(),E,D=[];if(!Array.isArray(n.value)&&!r.value.$each)return;let O=u(),k=u(n.value),A=u({}),j,M,N=u({}),P=o.getCollectionsEntry(a);E=T.run(()=>({isPrimitiveArray: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=>Z(e)||typeof e==`function`):!1:!1)})),F(),z();function F(){A.value=Object.fromEntries(Object.entries(r.value).filter(([e])=>e.startsWith(`$`))),typeof n.value==`object`&&(n.value!=null&&!n.value?.$id&&n.value!==null?(O.value=G(),Object.defineProperties(n.value,{$id:{value:O.value,enumerable:!1,configurable:!1,writable:!1}})):n.value?.$id&&(O.value=n.value.$id)),k.value=N.value.$value,Array.isArray(n.value)&&!E.isPrimitiveArray.value?P.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let{scope:l,unwrapped:u}=B(r.value.$each,f(()=>t),n);l&&D.push(l);let h=f(m.value??[],n),_=f(c?.value??{},`$each`),v=e(()=>d?.value?.$each);return le({$id:O.value,path:a,cachePath:a,customMessages:i,rules:u??{},stateValue:f(()=>t),index:n,options:s,storage:o,externalErrors:_,schemaErrors:v,initialState:h,originalState:g,shortcuts:y,fieldName:x,schemaMode:p})||null}).filter(e=>!!e):P.value=[],N.value=ce({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,originalState:g,shortcuts:y,fieldName:x,schemaMode:p})}function I(){if(Array.isArray(n.value)&&!E.isPrimitiveArray.value){let t=C(P.value);P.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let l=f(()=>t);if(t.$id&&P.value.find(e=>e.$id===t.$id)){let e=o.getArrayStatus(O.value,t.$id);return e?(e.$value=l,e):null}else{let{scope:t,unwrapped:u}=B(r.value.$each,l,n);t&&D.push(t);let h=f(c?.value??{},`$each`),_=e(()=>d?.value?.$each??[]);return le({$id:O.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),originalState:g,shortcuts:y,fieldName:x,schemaMode:p})||null}}).filter(e=>!!e),t.filter(e=>!n.value?.find(t=>e.$id===t.$id)).forEach((e,t)=>{o.deleteArrayStatus(O.value,t.toString())})}else P.value=[]}function L(){j=_(n,()=>{M?.(),n.value!=null&&!Object.hasOwn(n.value,`$id`)&&!O.value?F():I(),R()},{deep:U?1:!0,flush:`pre`}),R()}function R(){M=_(n,()=>{w.$autoDirty.value&&!w.$silent.value&&N.value.$touch(!1,!0)},{flush:`post`})}function z(){L(),S=t(),w=S.run(()=>{let r=e({get:()=>n.value,set(e){j?.(),M?.(),n.value=e,L()}}),i=e(()=>N.value.$dirty&&(!P.value.length||P.value.every(e=>e.$dirty))),o=e(()=>N.value.$anyDirty||P.value.some(e=>e.$anyDirty)),c=e(()=>N.value.$invalid||P.value.some(e=>e.$invalid)),d=e(()=>(b(N.value.$rules)?!0:N.value.$correct)&&(!P.value.length||P.value.every(e=>e.$correct||e.$anyDirty&&!e.$invalid))),f=e(()=>N.value.$error||P.value.some(e=>e.$error)),p=e(()=>!(c.value||_.value)),_=e(()=>N.value.$pending||P.value.some(e=>e.$pending)),S=e(()=>!!P.value.length&&P.value.every(e=>e.$edited)),C=e(()=>N.value.$anyEdited||P.value.some(e=>e.$anyEdited)),w=e(()=>({$self:N.value.$issues,$each:P.value.map(e=>e.$issues)})),T=e(()=>({$self:N.value.$errors,$each:P.value.map(e=>e.$errors)})),E=e(()=>({$self:N.value.$silentErrors,$each:P.value.map(e=>e.$silentErrors)})),O=e(()=>A.value.$rewardEarly==null?h(s.rewardEarly)==null?!1:h(s.rewardEarly):A.value.$rewardEarly),k=e(()=>O.value?!0:A.value.$silent==null?h(s.silent)==null?!1:h(s.silent):A.value.$silent),F=e(()=>A.value.$autoDirty==null?h(s.autoDirty)==null?!0:h(s.autoDirty):A.value.$autoDirty),I=e(()=>x);function R(){y?.collections&&Object.entries(y?.collections).forEach(([e,s])=>{let h=t();z[e]=h.run(()=>{let e=u();return v(()=>{e.value=s(l({$dirty:i,$error:f,$path:a,$silentValue:r,$pending:_,$invalid:c,$correct:d,$errors:T,$silentErrors:E,$initialValue:m,$originalValue:g,$ready:p,$anyDirty:o,$name:I,$each:P,$self:N,$value:n,$edited:S,$anyEdited:C,$issues:w}))}),e}),D.push(h)})}let z={};return R(),{$dirty:i,$anyDirty:o,$invalid:c,$correct:d,$error:f,$pending:_,$errors:T,$silentErrors:E,$ready:p,$name:I,$shortcuts:z,$silentValue:r,$edited:S,$anyEdited:C,$rewardEarly:O,$silent:k,$autoDirty:F,$issues:w}}),E.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 V(){j?.(),N.value&&N.value.$unwatch(),P.value&&P.value.forEach(e=>{`$dirty`in e&&e.$unwatch()}),S.stop(),S=t(),T.stop(),T=t(!0),D.forEach(e=>e.stop()),D=[]}function H(e=!0,t=!1){N.value.$touch(e,t),P.value.forEach(n=>{n.$touch(e,t)})}function W(e,t){if(V(),!t)if(e?.toOriginalState)n.value=C(g),m.value=C(g);else 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&&q(),N.value.$reset(e,t),P.value.forEach(t=>{t.$reset(e,!0)}),t||F()}async function K(){let e=n.value;try{return{valid:(await Promise.allSettled([N.value.$validate(),...P.value.map(e=>e.$validate())])).every(e=>e.status===`fulfilled`?e.value.valid===!0:!1),data:e}}catch{return{valid:!1,data:e}}}function q(){N.value.$clearExternalErrors(),P.value.forEach(e=>{e.$clearExternalErrors()})}function J(e=!0){let t=P.value.map(t=>{if(ee(t))return t.$extractDirtyFields(e)});return e&&t.every(e=>b(e))&&(t=[]),t}let{$shortcuts:Y,...X}=w;return l({$self:N,...X,...Y,$path:a,$each:P,$value:n,$initialValue:m,$originalValue:g,$validate:K,$unwatch:V,$watch:z,$touch:H,$reset:W,$extractDirtyFields:J,$clearExternalErrors:q})}function de({rulesDef:n,state:r,path:i=``,cachePath:a,rootRules:o,externalErrors:s,schemaErrors:c,rootSchemaErrors:d,validationGroups:p,initialState:m,originalState:g,fieldName:y,...x}){let S=t(),T,E=[],D=null,O=null,k=null,A=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,originalState:g?.[n],fieldName:n,...x})]),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,originalState:g?.[t],fieldName:t,...x})]})),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,originalState:g?.[t],fieldName:t,...x})]})),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,originalState:g?.[t],fieldName:t,...x})]}));P.value={...l,...u,...d,...p},t&&L()}let P=x.storage.getFieldsEntry(a);N();function F(){s&&(k=_(s,()=>{R(),N()},{deep:!0}))}function I(){A=_(r,()=>{R(),N(),T.$autoDirty.value&&!T.$silent.value&&V(!1,!0)},{flush:`post`})}function L(){o&&(D?.(),D=_(o,()=>{R(),N()},{deep:!0,flush:`pre`}),F()),d&&(O?.(),O=_(d,()=>{R(),N()},{deep:!0,flush:`post`})),I(),T=S.run(()=>{let n=e({get:()=>r.value,set(e){R(),r.value=e,N(),T.$autoDirty.value&&!T.$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?x.schemaMode?e.every(([e,t])=>t.$correct):e.every(([e,t])=>te(t)?`required`in t.$rules&&t.$rules.required.$active?t.$correct:!t.$invalid&&!t.$pending&&!t.$isDebouncing:t?.$correct):!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}),_=e(()=>h(x.options.rewardEarly)==null?!1:h(x.options.rewardEarly)),b=e(()=>h(x.options.silent)==null?!!_.value:h(x.options.silent)),S=e(()=>h(x.options.autoDirty)==null?!0:h(x.options.autoDirty)),C=e(()=>(b.value||s.value)&&!(c.value||D.value)),w=u(!1),D=e(()=>{if(w.value)return!0;let e=P.value;for(let t in e)if(e[t]?.$pending)return!0;return!1}),O=e(()=>{let e={};for(let t in P.value)e[t]=P.value[t]?.$issues;return e}),k=e(()=>{let e={};for(let t in P.value)e[t]=P.value[t]?.$errors;return e}),A=e(()=>{let e={};for(let t in P.value)e[t]=P.value[t]?.$silentErrors;return e}),F=e(()=>{if(!Object.keys(P.value).length)return!1;for(let e in P.value)if(!P.value[e]?.$edited)return!1;return!0}),I=e(()=>{for(let e in P.value)if(P.value[e]?.$anyEdited)return!0;return!1}),L=e(()=>y);function z(){x.shortcuts?.nested&&Object.entries(x.shortcuts.nested).forEach(([e,n])=>{let p=t();H[e]=p.run(()=>{let e=u();return v(()=>{e.value=n(l({$dirty:o,$path:i,$value:r,$silentValue:a,$error:f,$originalValue:g,$pending:D,$invalid:c,$correct:d,$ready:C,$anyDirty:s,$name:L,$silentErrors:A,$initialValue:m,$errors:k,$fields:P,$edited:F,$anyEdited:I,$issues:O}))}),e}),E.push(p)})}let B=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,j(t,e)])),...Object.fromEntries([`$errors`,`$silentErrors`].map(e=>[e,M(t,e)]))}]:[])):{},set(){}}),H={};return z(),{$dirty:o,$anyDirty:s,$invalid:c,$correct:d,$error:f,$pending:D,$issues:O,$errors:k,$silentErrors:A,$ready:C,$name:L,$shortcuts:H,$groups:B,$silentValue:a,$edited:F,$anyEdited:I,$localPending:w,$autoDirty:S,$silent:b,$value:n}})}function R(){if(D?.(),k?.(),A?.(),O?.(),E=[],T={},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(k?.(),R(),!t)if(e?.toOriginalState)r.value=C({...g}),m.value=C({...g});else 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(x.schemaMode)return x.onValidate?(V(!1),T.$localPending.value=!0,x.onValidate()):{valid:!1,data:r.value};{let e=r.value;return{valid:(await Promise.allSettled(Object.values(P.value).map(e=>e.$validate()))).every(e=>e.status===`fulfilled`&&e?.value.valid===!0),data:e}}}catch{return{valid:!1,data:r.value}}finally{T.$localPending.value=!1}}let{$shortcuts:G,$localPending:K,...q}=T,J=l({...q,...G,$path:i,$initialValue:m,$originalValue:g,$fields:P,$reset:B,$touch:V,$validate:W,$unwatch:R,$watch:L,$clearExternalErrors:z,$extractDirtyFields:U});return v(()=>{for(let e of Object.keys(J).filter(e=>!e.startsWith(`$`)))delete J[e];for(let e of Object.values(P.value))e?.$name&&Object.assign(J,{[e.$name]:e})}),J}function $({rulesDef:e,...n}){if(Y(e,n.state,n.schemaMode))return ue({rulesDef:e,...n});if(J(n.state,e)){if(z(n.state))return de({rulesDef:e,...n});{let r=t().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:i,...a}=n;return de({rulesDef:e,...a,state:r.fakeState})}}else if(X(e))return ce({rulesDef:i(e.value)?e.value:e,...n})}function fe({initialState:e,originalState:t,options:n,scopeRules:i,state:a,customRules:o,shortcuts:s,schemaErrors:d,schemaMode:f=!1,onValidate:p}){let m=R(),h=u(),g=u(),v,y;function b(){v=_(()=>n.externalErrors?.value,()=>{y?.(),n.externalErrors?.value&&Object.keys(n.externalErrors.value).some(e=>e.includes(`.`))?g.value=E(n.externalErrors.value):g.value=n.externalErrors?.value,x()},{immediate:!0,deep:!0})}function x(){y=_(()=>g.value,()=>{v?.(),n.externalErrors?.value&&(n.externalErrors.value=g.value),b()},{deep:!0})}return b(),J(a,i)?h.value=de({rootRules:i,rulesDef:i,state:a,customMessages:o?.(),storage:m,options:n,externalErrors:g,validationGroups:n.validationGroups,initialState:e,originalState:t,shortcuts:s,fieldName:`root`,path:``,cachePath:``,schemaErrors:d,rootSchemaErrors:d,schemaMode:f,onValidate:p}):X(i)&&(h.value=ce({rulesDef:i,state:a,customMessages:o?.(),storage:m,options:n,externalErrors:g,initialState:e,originalState:t,shortcuts:s,fieldName:`root`,path:``,cachePath:``,schemaMode:f,schemaErrors:d,onValidate:p})),r()&&c(()=>{h.value?.$unwatch()}),l({regle:h})}function pe(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=w(f.value)?{...C(f.value)}:C(f.value);return{r$:fe({scopeRules:p,state:f,options:l,initialState:h,originalState:g,customRules:t,shortcuts:r}).regle}}return o}const me=pe();function he(){function e(e,t){return t}return e}const ge=he();function _e({rules:e,modifiers:t,shortcuts:n}){let r=pe(e,t,n);r.__config={rules:e,modifiers:t,shortcuts:n};let i=he();return{useRegle:r,inferRules:i}}function ve(e,{rules:t,modifiers:n,shortcuts:r}){let i=e.__config??{},a=()=>({...i.rules?.(),...t?.()}),o=i.modifiers&&n?T(i.modifiers,n):i.modifiers??n,s=i.shortcuts&&r?T(i.shortcuts,r):i.shortcuts??r,c=pe(a,o,s);c.__config={rules:a,modifiers:o,shortcuts:s};let l=he();return{useRegle:c,inferRules:l}}function ye(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;return{valid:(await Promise.allSettled(Object.values(t).map(e=>e.$validate()))).every(e=>e.status===`fulfilled`?e.value.valid===!0:!1),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 be(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 ye(t,!n.asRecord)}else return ye(e[`~~global`]??{},!n.asRecord)}return{r$:o.r$}}return{useCollectScope:r}}function xe(t,r){let i=r??me;return{useScopedRegle:((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}-${G()}`),h=e(()=>o?.scopeKey??`instance-${m.value}`),{r$:g}=i(r,a,d);y(),K(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}})}}function Se(e){let t=(e?.customStore?()=>(e.customStore&&(e.customStore?.value[`~~global`]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value[`~~global`]={}),e.customStore):q(()=>u({"~~global":{}})))(),{useScopedRegle:n}=xe(t,e?.customUseRegle),{useCollectScope:r}=be(t,{asRecord:e?.asRecord});return{useScopedRegle:n,useCollectScope:r}}const{useCollectScope:Ce,useScopedRegle:we}=Se();function Te(t,n,r){let i=e(()=>p(t)[n]);return e(()=>r.find(e=>{if(e[n]&&`literal`in e[n]){let t=e[n].literal;if(Z(t))return h(t._params?.[0])===i.value}})||r.find(e=>w(e[n])&&!Object.keys(e[n]).some(e=>e===`literal`))||{})}function Ee(e,t,n){return w(e[t])&&`$value`in e[t]&&e[t]?.$value===n}function De(e,t,n){let r=i(e)?f(e.value,`$fields`):f(e,`$fields`),a=u();return _(r,async()=>{await o(),Ee(r.value,t,n)?a.value=f(e).value:a.value=void 0},{immediate:!0,flush:`pre`}),a}function Oe(e){return e}function ke(e,t){return n=>T({...e},t(n))}export{A as InternalRuleType,L as createRule,Se as createScopedUseRegle,Te as createVariant,_e as defineRegleConfig,Oe as defineRules,ve as extendRegleConfig,ae as flatErrors,ge as inferRules,ye as mergeRegles,Ee as narrowVariant,ke as refineRules,N as unwrapRuleParameters,Ce as useCollectScope,me as useRegle,fe as useRootStorage,we as useScopedRegle,De 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={};for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n],i=n.split(`.`),a=t;for(let e=0;e<i.length;e++){let t=i[e],n=e===i.length-1,o=t.match(/^\d+$/)?Number(t):null;if(o!==null){if(Array.isArray(a))if(n)a[o]=r;else{if(typeof a[o]!=`object`||a[o]===null){let t=i[e+1];a[o]=t&&t.match(/^\d+$/)?{$each:[],$self:[]}:{}}a=`$each`in a[o]?a[o].$each:a[o]}}else if(n)if(Array.isArray(a[t])){let e=a[t].slice();a[t]={},a[t].$self=e}else typeof a[t]==`object`&&a[t]!==null&&`$each`in a[t]?a[t].$self=r:a[t]=r;else{let n=i[e+1];if(Array.isArray(a[t])){let e=a[t].slice();a[t]={$each:[]},a[t].$self=e}(typeof a[t]!=`object`||a[t]===null||Array.isArray(a[t])&&!n.match(/^\d+$/))&&(n&&n.match(/^\d+$/)?a[t]={$each:[],$self:[]}:a[t]={}),a=`$each`in a[t]?a[t].$each:a[t]}}}return t}function D(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 O(e,t,{immediate:n=!1,trackDebounceRef:r}={}){let i,a=(...a)=>{r&&(r.value=!0);function o(){r&&(r.value=!1)}return new Promise(r=>{function s(e){r(e),o()}clearTimeout(i),i=setTimeout(()=>{i=void 0,n||Promise.resolve(e.apply(this,[...a])).then(s).finally(o)},t),n&&!i&&Promise.resolve(e.apply(this,[...a])).then(s).finally(o)})};return a.cancel=()=>{clearTimeout(i),i=void 0,r&&(r.value=!1)},a}function k(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(!k(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];if(w(e)&&w(t)&&s&&(r||!r&&n)&&!k(e[s],t[s],n,!1))return!1}return!0}return e!==e&&t!==t}const A={Inline:`__inline`,Async:`__async`};function j(e,t){return e.some(e=>t?e?.[t]:!1)}function M(e,t){return t?e.reduce((e,n)=>{let r=n?.[t]||[];return e.concat(r)},[]):[]}function N(e){try{return e.map(e=>p(e))}catch{return[]}}function P(t){return t.map(t=>t instanceof Function?e(t):i(t)?t:f(()=>t))}function F(e){let t=e.toString().replace(/\/\/.*$/gm,``).replace(/\/\*[\s\S]*?\*\//g,``).match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return t?(t[0]||t[1]||t[2]||t[3]||t[4]||``).split(`,`).map(e=>e.trim()).filter(e=>e.length>0).length:0}function I(e,...t){let{validator:n,type:r,async:i}=e,o=i||r===A.Async||n.constructor.name===`AsyncFunction`;return a({validator(n,...r){return e.validator(n,...N(r.length?r:t))},message(n){return typeof e.message==`function`?e.message({...n,$params:N(n?.$params?.length?n.$params:t)}):e.message},active(n){return typeof e.active==`function`?e.active({...n,$params:N(n?.$params?.length?n.$params:t)}):e.active??!0},tooltip(n){return typeof e.tooltip==`function`?e.tooltip({...n,$params:N(n?.$params?.length?n.$params:t)}):e.tooltip??[]},exec(n){let r=e.validator(n,...N(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)},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:P(t),_brand:x})}function L(e){if(typeof e.validator==`function`){let t=[],n=e.async??e.validator.constructor.name===`AsyncFunction`,r=I({...e,async:n},...t);if(F(e.validator)>1){let t=function(...t){return I(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 R(){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 y(n,r)?{valid:!0}:{valid:!1}}function y(e,t){let n=Object.keys(t),r=Object.keys(e);return r.length!==n.length||!r.every(e=>n.includes(e))?!1: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=N(i._params),n=N(r._params);return e?.[t]===n?.[t]}}):!0})}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 z(e){return w(e.value)}function B(e,n,r){let i=t(),a;return a=e instanceof Function?i.run(()=>e(n,r??0)):e,{scope:i,unwrapped:a}}const V={LessThan:-1,EqualTo:0,GreaterThan:1};function H(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 V.GreaterThan;if(i>t)return V.LessThan;if(!isNaN(t)&&isNaN(i))return V.GreaterThan;if(isNaN(t)&&!isNaN(i))return V.LessThan}return V.EqualTo}const U=H(g,`3.5.0`)!==-1;function W(){return Math.floor(Math.random()*Date.now()).toString()}function G(){return typeof window>`u`?W():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function K(e){return r()?(c(e),!0):!1}function q(e){let n=!1,r,i=t(!0);return((...t)=>(n||=(r=i.run(()=>e(...t)),!0),r))}function J(e,t){return z(e)||w(t.value)&&!b(t.value)&&!Object.entries(t.value).some(([e,t])=>Z(t)||typeof t==`function`)}function Y(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 X(e){return!!e.value&&(w(e.value)||z(e.value))}function Z(e){return w(e)&&`_validator`in e}function Q(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;return{$message:i,$property:e.fieldName,$rule:n,$type:r.$type,...typeof r.$metadata==`object`?r.$metadata:{}}}).filter(e=>!!e).reduce((e,t)=>(typeof t.$message==`string`?e.push(t):e.push(...t.$message.map(e=>({...t,$message:e}))),e),[]),r=e.$error&&e.$externalErrors?e.$externalErrors.map(t=>({$message:t,$property:e.fieldName,$rule:`external`,$type:void 0})):[],i=[];return e.$schemaErrors&&e.$error&&(i=!Array.isArray(e.$schemaErrors)&&`$self`in e.$schemaErrors?e.$schemaErrors.$self??[]:e.$schemaErrors??[]),[...n,...r,...i]}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=>({message:e,path:[]}))??[]:e.$self??[],r=e.$each?.map(e=>oe(e,n))??[];return t?.concat(r.flat())}else return Object.entries(e).map(([e,t])=>oe(t,n,[e])).flat()}function oe(e,t=!1,n){let r=t&&!n?[]:n;if(Array.isArray(e)&&e.every(e=>!w(e)))return t?e.map(e=>({message:e,path:r??[]})):e;if(ie(e)){let n=r?.length?e.$self?.map(e=>({message:e,path:r??[]}))??[]:e.$self??[],i=e.$each?.map((e,n)=>oe(e,t,r?.concat(n)))??[];return n?.concat(i.flat())}else return Object.entries(e).map(([e,n])=>oe(n,t,r?.concat(e))).flat()}function se({customMessages:n,rule:r,ruleKey:i,state:a,path:o,cachePath:s,storage:c,modifiers:d}){let f=t(),p={},m,h=e(()=>Z(r.value)&&r.value._async),g=u(!1),{$pending:v,$valid:y,$metadata:x,$validating:S}=c.trySetRuleStatusRef(`${s}.${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(()=>Q(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),Q(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(()=>Q(r)&&r.value.type?r.value.type:i),S=e(()=>Q(r)?r.value.validator:r.value),C=e(()=>typeof r.value==`function`?[]:N(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)&&E()})}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}async function E(){try{S.value=!0;let e=!1;if(g.value=!0,Z(r.value)&&r.value._async)e=await T();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 D(){y.value=!0,x.value={},v.value=!1,S.value=!1,C()}function O(){m(),f.stop(),f=t()}return l({...p,$pending:v,$valid:y,$metadata:x,$haveAsync:h,$maybePending:g,$validating:S,$parse:E,$unwatch:O,$watch:C,$reset:D})}function ce(e){return{"~standard":{version:1,vendor:`regle`,validate:async t=>{let{valid:n,data:r,errors:i}=await e(t);return n?{value:r,issues:[]}:{issues:ae(i,{includePath:!0})}}}}}function le({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,originalState:T,shortcuts:E,onValidate:A}){let j=t(),M,N=[],P,F,I,L,R=()=>{},z=u(!1);function B(){let e=r.value,t=c.checkRuleDeclEntry(o,e),s={};for(let t in e)t.startsWith(`$`)&&(s[t]=e[t]);J.value=s,W();let l=r.value,u=[];for(let e in l){if(e.startsWith(`$`)||e.startsWith(`~`))continue;let t=l[e];if(!t)continue;let r=f(()=>t);u.push([e,se({modifiers:{$silent:M.$silent,$rewardEarly:M.$rewardEarly},customMessages:i,rule:r,ruleKey:e,state:n,path:a,cachePath:o,storage:c,$debounce:J.value.$debounce})])}q.value=Object.fromEntries(u),M.processShortcuts(),V(),t?.valid!=null&&(M.$dirty.value=c.getDirtyState(o),(M.$dirty.value&&!M.$silent.value||M.$rewardEarly.value&&M.$error.value)&&R()),c.addRuleDeclEntry(o,e)}function V(){R=M.$debounce.value||M.$haveAnyAsyncRule.value?O(K,M.$debounce.value??(M.$haveAnyAsyncRule?200:0),{trackDebounceRef:z}):K}function H(){if(q.value)for(let e of Object.values(q.value))e.$unwatch();F(),L?.(),M.$dirty.value&&c.setDirtyEntry(o,M.$dirty.value),P?.(),j.stop(),j=t();for(let e of N)e.stop();N=[],y?.(),I?.()}function W(){if(q.value)for(let e of Object.values(q.value))e.$watch();M=j.run(()=>{let i=u(!1),a=u(!1),o=e(()=>i.value),c=e(()=>J.value.$debounce),f=e(()=>J.value.$deepCompare==null?!1:J.value.$deepCompare),_=e(()=>J.value.$lazy==null?h(d.lazy)==null?!1:h(d.lazy):J.value.$lazy),y=e(()=>J.value.$rewardEarly==null?h(d.rewardEarly)==null?!1:h(d.rewardEarly):J.value.$rewardEarly),x=e(()=>J.value.$clearExternalErrorsOnChange==null?h(d.clearExternalErrorsOnChange)==null?!C.value:h(d.clearExternalErrorsOnChange):J.value.$clearExternalErrorsOnChange),C=e(()=>y.value?!0:J.value.$silent==null?h(d.silent)==null?!1:h(d.silent):J.value.$silent),w=e(()=>J.value.$autoDirty==null?h(d.autoDirty)==null?!0:h(d.autoDirty):J.value.$autoDirty),T=e(()=>{for(let e of Object.values(q.value))if(e.$validating)return!0;return!1}),O=e({get:()=>n.value,set(e){P(),n.value=e,G()}}),A=e(()=>z.value?U.value&&i.value:U.value&&!H.value&&i.value),j=e(()=>ne({field:{$rules:q.value,$error:A.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:s}})),M=e(()=>ne({field:{$rules:q.value,$error:A.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:s},silent:!0})),F=e(()=>j.value.map(e=>e.$message)),I=e(()=>M.value.map(e=>e.$message)),L=e(()=>i.value?S.value instanceof Date&&n.value instanceof Date?D(S.value).getDate()!==D(n.value).getDate():S.value==null?!!n.value:Array.isArray(n.value)&&Array.isArray(S.value)?!k(n.value,S.value,J.value.$deepCompare):S.value!==n.value:!1),R=e(()=>L.value),B=e(()=>re({field:{$rules:q.value}})),V=e(()=>(C.value||o.value)&&!(U.value||H.value)),H=e(()=>a.value||!y.value?Object.entries(q.value).some(([e,t])=>t.$pending):!1),U=e(()=>m?.value&&!Array.isArray(m?.value)&&`$self`in m.value?m?.value.$self?.length>0:p?.value?.length||m?.value?.length?!0:K.value?!1:Object.values(q.value).some(e=>!e.$valid||e.$maybePending)),W=e(()=>s),K=e(()=>!g&&!Object.keys(r.value).some(e=>!e.startsWith(`$`))),Y=e(()=>{if(p?.value?.length||K.value||z.value)return!1;if(i.value&&!b(n.value)&&!T.value&&!H.value){if(g)return!m?.value?.length;{let e=Object.values(q.value);for(let t of e)if(t.$active&&!t.$valid)return!1;return e.some(e=>e.$active)}}return!1}),X=e(()=>Object.values(q.value).some(e=>e.$haveAsync));function Z(){E?.fields&&Object.entries(E.fields).forEach(([e,r])=>{let a=t();Q[e]=a.run(()=>{let e=u();return v(()=>{e.value=r(l({$dirty:i,$externalErrors:p?.value??[],$value:n,$silentValue:O,$rules:q,$error:A,$pending:H,$invalid:U,$correct:Y,$errors:F,$ready:V,$silentErrors:I,$anyDirty:o,$tooltips:B,$name:W,$inactive:K,$edited:L,$anyEdited:R}))}),e}),N.push(a)})}let Q={};return{$error:A,$pending:H,$invalid:U,$correct:Y,$debounce:c,$deepCompare:f,$lazy:_,$ready:V,$issues:j,$silentIssues:M,$errors:F,$silentErrors:I,$rewardEarly:y,$autoDirty:w,$silent:C,$clearExternalErrorsOnChange:x,$anyDirty:o,$edited:L,$anyEdited:R,$name:W,$haveAnyAsyncRule:X,$shortcuts:Q,$validating:T,$tooltips:B,$dirty:i,processShortcuts:Z,$silentValue:O,$inactive:K}}),G(),F=_(M.$dirty,e=>{c.setDirtyEntry(o,e),Object.values(q.value).forEach(t=>{t.$fieldDirty=e})}),L=_([M.$error,M.$correct,M.$invalid,M.$pending],()=>{Object.values(q.value).forEach(e=>{e.$fieldError=M.$error.value,e.$fieldInvalid=M.$invalid.value,e.$fieldPending=M.$pending.value,e.$fieldCorrect=M.$correct.value})}),I=_(M.$haveAnyAsyncRule,V)}function G(){P=_(n,()=>{M.$autoDirty.value&&!M.$silent.value&&(M.$dirty.value||(M.$dirty.value=!0)),r.value instanceof Function&&B(),(!M.$silent.value||M.$rewardEarly.value&&M.$error.value)&&R(),M.$clearExternalErrorsOnChange.value&&ee()},{deep:x?!0:U?1:!0})}function K(){Object.values(q.value).forEach(e=>{e.$parse()})}let q=u({}),J=u({});B();function Y(e,t){if(ee(),M.$dirty.value=!1,c.setDirtyEntry(o,!1),!t)if(e?.toOriginalState)n.value=C(T),S.value=C(T);else 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&&ee(),!t&&!e?.keepValidationState)for(let e of Object.values(q.value))e.$reset();if(!M.$lazy.value&&!M.$silent.value&&!t)for(let e of Object.values(q.value))e.$parse()}function X(e=!0,t=!1){M.$dirty.value||(M.$dirty.value=!0),t&&e?(!M.$silent.value||M.$rewardEarly.value&&M.$error.value)&&R():e&&R()}async function Z(e){try{if(e&&(n.value=e),g)return A?(X(!1),A()):{valid:!1,data:n.value,errors:M.$errors.value,issues:M.$issues.value};let t=n.value;if(!M.$dirty.value)M.$dirty.value=!0;else if(!M.$silent.value&&M.$dirty.value&&!M.$pending.value)return{valid:!M.$error.value,data:t,errors:M.$errors.value,issues:M.$issues.value};return g?{valid:!m?.value?.length,data:t,errors:M.$errors.value,issues:M.$issues.value}:b(q.value)?{valid:!0,data:t,errors:M.$errors.value,issues:M.$issues.value}:{valid:(await Promise.allSettled(Object.values(q.value).map(e=>e.$parse()))).every(e=>e.status===`fulfilled`&&e.value===!0),data:t,errors:M.$errors.value,issues:M.$issues.value}}catch{return{valid:!1,data:n.value,errors:M.$errors.value,issues:M.$issues.value}}}function Q(e=!0){return M.$dirty.value?n.value:e?{_null:!0}:null}function ee(){p?.value?.length&&(p.value=[])}!M.$lazy.value&&!M.$dirty.value&&!M.$silent.value&&R();let{$shortcuts:te,$validating:ie,$autoDirty:ae,$rewardEarly:oe,$clearExternalErrorsOnChange:le,$haveAnyAsyncRule:ue,$debounce:de,$lazy:fe,...$}=M;return l({...$,$externalErrors:p,$value:n,$initialValue:S,$originalValue:T,$rules:q,...te,$path:a,$isDebouncing:z,$reset:Y,$touch:X,$validate:Z,$unwatch:H,$watch:W,$extractDirtyFields:Q,$clearExternalErrors:ee,...ce(Z)})}function ue({$id:t,path:n,cachePath:r,index:i,options:a,storage:o,stateValue:s,customMessages:c,rules:l,externalErrors:u,schemaErrors:d,initialState:p,originalState:m,shortcuts:h,fieldName:g,schemaMode:_}){let v=s.value?.$id??l.$key??G(),y=`${r}.${String(v)}`,b=`${n}.${i}`;typeof s.value==`object`&&s.value!=null&&(s.value.$id||Object.defineProperties(s.value,{$id:{value:v,enumerable:!1,configurable:!1,writable:!1}}));let x=f(u?.value??[],i),S=e(()=>d?.value?.[i]),C=$({index:i,state:s,rulesDef:f(()=>l),customMessages:c,path:b,cachePath:y,storage:o,options:a,externalErrors:x,schemaErrors:S,initialState:p,originalState:m,shortcuts:h,fieldName:g,schemaMode:_});return C&&(C.$id=s.value?.$id??String(v),o.addArrayStatus(t,C.$id,C)),C}function de({state:n,rulesDef:r,customMessages:i,path:a,storage:o,options:s,externalErrors:c,schemaErrors:d,schemaMode:p,initialState:m,originalState:g,shortcuts:y,fieldName:x}){let S=t(),w,T=t(),E,D=[];if(!Array.isArray(n.value)&&!r.value.$each)return;let O=u(),k=u(n.value),A=u({}),j,M,N=u({}),P=o.getCollectionsEntry(a);E=T.run(()=>({isPrimitiveArray: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=>Z(e)||typeof e==`function`):!1:!1)})),F(),z();function F(){A.value=Object.fromEntries(Object.entries(r.value).filter(([e])=>e.startsWith(`$`))),typeof n.value==`object`&&(n.value!=null&&!n.value?.$id&&n.value!==null?(O.value=G(),Object.defineProperties(n.value,{$id:{value:O.value,enumerable:!1,configurable:!1,writable:!1}})):n.value?.$id&&(O.value=n.value.$id)),k.value=N.value.$value,Array.isArray(n.value)&&!E.isPrimitiveArray.value?P.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let{scope:l,unwrapped:u}=B(r.value.$each,f(()=>t),n);l&&D.push(l);let h=f(m.value??[],n),_=f(c?.value??{},`$each`),v=e(()=>d?.value?.$each);return ue({$id:O.value,path:a,cachePath:a,customMessages:i,rules:u??{},stateValue:f(()=>t),index:n,options:s,storage:o,externalErrors:_,schemaErrors:v,initialState:h,originalState:g,shortcuts:y,fieldName:x,schemaMode:p})||null}).filter(e=>!!e):P.value=[],N.value=le({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,originalState:g,shortcuts:y,fieldName:x,schemaMode:p})}function I(){if(Array.isArray(n.value)&&!E.isPrimitiveArray.value){let t=C(P.value);P.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let l=f(()=>t);if(t.$id&&P.value.find(e=>e.$id===t.$id)){let e=o.getArrayStatus(O.value,t.$id);return e?(e.$value=l,e):null}else{let{scope:t,unwrapped:u}=B(r.value.$each,l,n);t&&D.push(t);let h=f(c?.value??{},`$each`),_=e(()=>d?.value?.$each??[]);return ue({$id:O.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),originalState:g,shortcuts:y,fieldName:x,schemaMode:p})||null}}).filter(e=>!!e),t.filter(e=>!n.value?.find(t=>e.$id===t.$id)).forEach((e,t)=>{o.deleteArrayStatus(O.value,t.toString())})}else P.value=[]}function L(){j=_(n,()=>{M?.(),n.value!=null&&!Object.hasOwn(n.value,`$id`)&&!O.value?F():I(),R()},{deep:U?1:!0,flush:`pre`}),R()}function R(){M=_(n,()=>{w.$autoDirty.value&&!w.$silent.value&&N.value.$touch(!1,!0)},{flush:`post`})}function z(){L(),S=t(),w=S.run(()=>{let r=e({get:()=>n.value,set(e){j?.(),M?.(),n.value=e,L()}}),i=e(()=>N.value.$dirty&&(!P.value.length||P.value.every(e=>e.$dirty))),o=e(()=>N.value.$anyDirty||P.value.some(e=>e.$anyDirty)),c=e(()=>N.value.$invalid||P.value.some(e=>e.$invalid)),d=e(()=>(b(N.value.$rules)?!0:N.value.$correct)&&(!P.value.length||P.value.every(e=>e.$correct||e.$anyDirty&&!e.$invalid))),f=e(()=>N.value.$error||P.value.some(e=>e.$error)),p=e(()=>!(c.value||_.value)),_=e(()=>N.value.$pending||P.value.some(e=>e.$pending)),S=e(()=>!!P.value.length&&P.value.every(e=>e.$edited)),C=e(()=>N.value.$anyEdited||P.value.some(e=>e.$anyEdited)),w=e(()=>({$self:N.value.$issues,$each:P.value.map(e=>e.$issues)})),T=e(()=>({$self:N.value.$errors,$each:P.value.map(e=>e.$errors)})),E=e(()=>({$self:N.value.$silentErrors,$each:P.value.map(e=>e.$silentErrors)})),O=e(()=>A.value.$rewardEarly==null?h(s.rewardEarly)==null?!1:h(s.rewardEarly):A.value.$rewardEarly),k=e(()=>O.value?!0:A.value.$silent==null?h(s.silent)==null?!1:h(s.silent):A.value.$silent),F=e(()=>A.value.$autoDirty==null?h(s.autoDirty)==null?!0:h(s.autoDirty):A.value.$autoDirty),I=e(()=>x);function R(){y?.collections&&Object.entries(y?.collections).forEach(([e,s])=>{let h=t();z[e]=h.run(()=>{let e=u();return v(()=>{e.value=s(l({$dirty:i,$error:f,$path:a,$silentValue:r,$pending:_,$invalid:c,$correct:d,$errors:T,$silentErrors:E,$initialValue:m,$originalValue:g,$ready:p,$anyDirty:o,$name:I,$each:P,$self:N,$value:n,$edited:S,$anyEdited:C,$issues:w}))}),e}),D.push(h)})}let z={};return R(),{$dirty:i,$anyDirty:o,$invalid:c,$correct:d,$error:f,$pending:_,$errors:T,$silentErrors:E,$ready:p,$name:I,$shortcuts:z,$silentValue:r,$edited:S,$anyEdited:C,$rewardEarly:O,$silent:k,$autoDirty:F,$issues:w}}),E.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 V(){j?.(),N.value&&N.value.$unwatch(),P.value&&P.value.forEach(e=>{`$dirty`in e&&e.$unwatch()}),S.stop(),S=t(),T.stop(),T=t(!0),D.forEach(e=>e.stop()),D=[]}function H(e=!0,t=!1){N.value.$touch(e,t),P.value.forEach(n=>{n.$touch(e,t)})}function W(e,t){if(V(),!t)if(e?.toOriginalState)n.value=C(g),m.value=C(g);else 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&&q(),e?.keepValidationState||(N.value.$reset(e,t),P.value.forEach(t=>{t.$reset(e,!0)})),t||F()}async function K(e){e&&(n.value=e);let t=n.value;try{return{valid:(await Promise.allSettled([N.value.$validate(e),...P.value.map(e=>e.$validate())])).every(e=>e.status===`fulfilled`?e.value.valid===!0:!1),data:t,errors:w.$errors.value,issues:w.$issues.value}}catch{return{valid:!1,data:t,errors:w.$errors.value,issues:w.$issues.value}}}function q(){N.value.$clearExternalErrors(),P.value.forEach(e=>{e.$clearExternalErrors()})}function J(e=!0){let t=P.value.map(t=>{if(ee(t))return t.$extractDirtyFields(e)});return e&&t.every(e=>b(e))&&(t=[]),t}let{$shortcuts:Y,...X}=w;return l({$self:N,...X,...Y,$path:a,$each:P,$value:n,$initialValue:m,$originalValue:g,$validate:K,$unwatch:V,$watch:z,$touch:H,$reset:W,$extractDirtyFields:J,$clearExternalErrors:q,...ce(K)})}function fe({rulesDef:n,state:r,path:i=``,cachePath:a,rootRules:o,externalErrors:s,schemaErrors:c,rootSchemaErrors:d,validationGroups:p,initialState:m,originalState:g,fieldName:y,...x}){let S=t(),T,E=[],D=null,O=null,k=null,A=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,originalState:g?.[n],fieldName:n,...x})]),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,originalState:g?.[t],fieldName:t,...x})]})),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,originalState:g?.[t],fieldName:t,...x})]})),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,originalState:g?.[t],fieldName:t,...x})]}));P.value={...l,...u,...d,...p},t&&L()}let P=x.storage.getFieldsEntry(a);N();function F(){s&&(k=_(s,()=>{R(),N()},{deep:!0}))}function I(){A=_(r,()=>{R(),N(),T.$autoDirty.value&&!T.$silent.value&&V(!1,!0)},{flush:`post`})}function L(){o&&(D?.(),D=_(o,()=>{R(),N()},{deep:!0,flush:`pre`}),F()),d&&(O?.(),O=_(d,()=>{R(),N()},{deep:!0,flush:`post`})),I(),T=S.run(()=>{let n=e({get:()=>r.value,set(e){R(),r.value=e,N(),T.$autoDirty.value&&!T.$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?x.schemaMode?e.every(([e,t])=>t.$correct):e.every(([e,t])=>te(t)?`required`in t.$rules&&t.$rules.required.$active?t.$correct:!t.$invalid&&!t.$pending&&!t.$isDebouncing:t?.$correct):!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}),_=e(()=>h(x.options.rewardEarly)==null?!1:h(x.options.rewardEarly)),b=e(()=>h(x.options.silent)==null?!!_.value:h(x.options.silent)),S=e(()=>h(x.options.autoDirty)==null?!0:h(x.options.autoDirty)),C=e(()=>(b.value||s.value)&&!(c.value||D.value)),w=u(!1),D=e(()=>{if(w.value)return!0;let e=P.value;for(let t in e)if(e[t]?.$pending)return!0;return!1}),O=e(()=>{let e={};for(let t in P.value)e[t]=P.value[t]?.$issues;return e}),k=e(()=>{let e={};for(let t in P.value)e[t]=P.value[t]?.$errors;return e}),A=e(()=>{let e={};for(let t in P.value)e[t]=P.value[t]?.$silentErrors;return e}),F=e(()=>{if(!Object.keys(P.value).length)return!1;for(let e in P.value)if(!P.value[e]?.$edited)return!1;return!0}),I=e(()=>{for(let e in P.value)if(P.value[e]?.$anyEdited)return!0;return!1}),L=e(()=>y);function z(){x.shortcuts?.nested&&Object.entries(x.shortcuts.nested).forEach(([e,n])=>{let p=t();H[e]=p.run(()=>{let e=u();return v(()=>{e.value=n(l({$dirty:o,$path:i,$value:r,$silentValue:a,$error:f,$originalValue:g,$pending:D,$invalid:c,$correct:d,$ready:C,$anyDirty:s,$name:L,$silentErrors:A,$initialValue:m,$errors:k,$fields:P,$edited:F,$anyEdited:I,$issues:O}))}),e}),E.push(p)})}let B=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,j(t,e)])),...Object.fromEntries([`$errors`,`$silentErrors`].map(e=>[e,M(t,e)]))}]:[])):{},set(){}}),H={};return z(),{$dirty:o,$anyDirty:s,$invalid:c,$correct:d,$error:f,$pending:D,$issues:O,$errors:k,$silentErrors:A,$ready:C,$name:L,$shortcuts:H,$groups:B,$silentValue:a,$edited:F,$anyEdited:I,$localPending:w,$autoDirty:S,$silent:b,$value:n}})}function R(){if(D?.(),k?.(),A?.(),O?.(),E=[],T={},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(k?.(),R(),!t)if(e?.toOriginalState)r.value=C({...g}),m.value=C({...g});else 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);if(!e?.keepValidationState)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(e){try{if(e&&(r.value=e),x.schemaMode)return x.onValidate?(V(!1),T.$localPending.value=!0,x.onValidate()):{valid:!1,data:r.value,errors:T.$errors.value,issues:T.$issues.value};{let e=r.value;return{valid:(await Promise.allSettled(Object.values(P.value).map(e=>e.$validate()))).every(e=>e.status===`fulfilled`&&e?.value.valid===!0),data:e,errors:T.$errors.value,issues:T.$issues.value}}}catch{return{valid:!1,data:r.value,errors:T.$errors.value,issues:T.$issues.value}}finally{T.$localPending.value=!1}}let{$shortcuts:G,$localPending:K,...q}=T,J=l({...q,...G,$path:i,$initialValue:m,$originalValue:g,$fields:P,$reset:B,$touch:V,$validate:W,$unwatch:R,$watch:L,$clearExternalErrors:z,$extractDirtyFields:U,...ce(W)});return v(()=>{for(let e of Object.keys(J).filter(e=>!e.startsWith(`$`)&&!e.startsWith(`~`)))delete J[e];for(let e of Object.values(P.value))e?.$name&&Object.assign(J,{[e.$name]:e})}),J}function $({rulesDef:e,...n}){if(Y(e,n.state,n.schemaMode))return de({rulesDef:e,...n});if(J(n.state,e)){if(z(n.state))return fe({rulesDef:e,...n});{let r=t().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:i,...a}=n;return fe({rulesDef:e,...a,state:r.fakeState})}}else if(X(e))return le({rulesDef:i(e.value)?e.value:e,...n})}function pe({initialState:e,originalState:t,options:n,scopeRules:i,state:a,customRules:o,shortcuts:s,schemaErrors:d,schemaMode:f=!1,onValidate:p}){let m=R(),h=u(),g=u(),v,y;function b(){v=_(()=>n.externalErrors?.value,()=>{y?.(),n.externalErrors?.value&&Object.keys(n.externalErrors.value).some(e=>e.includes(`.`))?g.value=E(n.externalErrors.value):g.value=n.externalErrors?.value,x()},{immediate:!0,deep:!0})}function x(){y=_(()=>g.value,()=>{v?.(),n.externalErrors?.value&&(n.externalErrors.value=g.value),b()},{deep:!0})}return b(),J(a,i)?h.value=fe({rootRules:i,rulesDef:i,state:a,customMessages:o?.(),storage:m,options:n,externalErrors:g,validationGroups:n.validationGroups,initialState:e,originalState:t,shortcuts:s,fieldName:`root`,path:``,cachePath:``,schemaErrors:d,rootSchemaErrors:d,schemaMode:f,onValidate:p}):X(i)&&(h.value=le({rulesDef:i,state:a,customMessages:o?.(),storage:m,options:n,externalErrors:g,initialState:e,originalState:t,shortcuts:s,fieldName:`root`,path:``,cachePath:``,schemaMode:f,schemaErrors:d,onValidate:p})),r()&&c(()=>{h.value?.$unwatch()}),l({regle:h})}function me({state:t,rulesFactory:n,options:r,globalOptions:a,customRules:o,shortcuts:s}){let c=i(n)?n:typeof n==`function`?void 0:e(()=>n),l={...a,...r},f=d(c??{});typeof n==`function`&&v(()=>{f.value=n(t),m(f)});let p=u(w(t.value)?{...C(t.value)}:C(t.value)),h=w(t.value)?{...C(t.value)}:C(t.value);return pe({scopeRules:f,state:t,options:l,initialState:p,originalState:h,customRules:o,shortcuts:s})}function he(e,t,n){let r={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,silent:t?.silent,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function a(t,a,o){let s=i(t)?t:u(t);return{r$:me({state:s,rulesFactory:a,options:o,globalOptions:r,customRules:e,shortcuts:n}).regle}}return a}const ge=he();function _e(){function e(e,t){return t}return e}const ve=_e();function ye(e){let t={};if(Object.entries(e).some(([e,t])=>Z(t)||typeof t==`function`))return null;for(let n in e){let r=e[n];r&&w(r)&&`$each`in r&&r.$each&&w(r.$each)?t[n]=[ye(r.$each)]:w(r)&&!b(r)&&!Object.entries(r).some(([e,t])=>Z(t)||typeof t==`function`)?t[n]=ye(r):t[n]=null}return t}function be(t,n,r){let a={autoDirty:n?.autoDirty,lazy:n?.lazy,rewardEarly:n?.rewardEarly,silent:n?.silent,clearExternalErrorsOnChange:n?.clearExternalErrorsOnChange};function o(n,o){let s=i(n)?n:typeof n==`function`?void 0:e(()=>n),c=u(ye(s?.value));return me({state:c,rulesFactory:s,options:o,globalOptions:a,customRules:t,shortcuts:r}).regle}return o}const xe=be();function Se({rules:e,modifiers:t,shortcuts:n}){let r=he(e,t,n),i=be(e,t,n);r.__config={rules:e,modifiers:t,shortcuts:n},i.__config={rules:e,modifiers:t,shortcuts:n};let a=_e();return{useRegle:r,inferRules:a,useRules:i}}function Ce(e,{rules:t,modifiers:n,shortcuts:r}){let i=e.__config??{},a=()=>({...i.rules?.(),...t?.()}),o=i.modifiers&&n?T(i.modifiers,n):i.modifiers??n,s=i.shortcuts&&r?T(i.shortcuts,r):i.shortcuts??r,c=he(a,o,s);c.__config={rules:a,modifiers:o,shortcuts:s};let l=_e();return{useRegle:c,inferRules:l}}function we(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.$issues):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$issues]))),h=e(()=>r?Object.entries(t).map(([e,t])=>t.$silentIssues):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentIssues]))),g=e(()=>r?Object.entries(t).map(([e,t])=>t.$errors):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$errors]))),_=e(()=>r?Object.entries(t).map(([e,t])=>t.$silentErrors):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentErrors]))),v=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$edited)}),y=e(()=>Object.entries(t).some(([e,t])=>t?.$anyEdited)),b=e(()=>r?Object.values(t):t);function x(e){Object.values(t).forEach(t=>{t.$reset(e)})}function S(){Object.values(t).forEach(e=>{e.$touch()})}function C(e=!0){return Object.values(t).map(t=>t.$extractDirtyFields(e))}function w(){Object.values(t).forEach(e=>{e.$clearExternalErrors()})}async function T(e){try{e&&(i.value=e);let n=i.value;return{valid:(await Promise.allSettled(Object.values(t).map(e=>e.$validate()))).every(e=>e.status===`fulfilled`?e.value.valid===!0:!1),data:n,errors:g.value,issues:m.value}}catch{return{valid:!1,data:i.value,errors:g.value,issues:m.value}}}return l({...!r&&{$silentValue:a},$errors:g,$issues:m,$silentIssues:h,$silentErrors:_,$instances:b,$value:i,$dirty:o,$anyDirty:s,$invalid:c,$correct:u,$error:d,$pending:p,$ready:f,$edited:v,$anyEdited:y,$reset:x,$touch:S,$validate:T,$extractDirtyFields:C,$clearExternalErrors:w})}function Te(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 we(t,!n.asRecord)}else return we(e[`~~global`]??{},!n.asRecord)}return{r$:o.r$}}return{useCollectScope:r}}function Ee(t,r){let i=r??ge;return{useScopedRegle:((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}-${G()}`),h=e(()=>o?.scopeKey??`instance-${m.value}`),{r$:g}=i(r,a,d);y(),K(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}})}}function De(e){let t=(e?.customStore?()=>(e.customStore&&(e.customStore?.value[`~~global`]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value[`~~global`]={}),e.customStore):q(()=>u({"~~global":{}})))(),{useScopedRegle:n}=Ee(t,e?.customUseRegle),{useCollectScope:r}=Te(t,{asRecord:e?.asRecord});return{useScopedRegle:n,useCollectScope:r}}const{useCollectScope:Oe,useScopedRegle:ke}=De();function Ae(t,n,r){let i=e(()=>p(t)[n]);return e(()=>r.find(e=>{if(e[n]&&`literal`in e[n]){let t=e[n].literal;if(Z(t))return h(t._params?.[0])===i.value}})||r.find(e=>w(e[n])&&!Object.keys(e[n]).some(e=>e===`literal`))||{})}function je(e,t,n){return w(e[t])&&`$value`in e[t]&&e[t]?.$value===n}function Me(e,t,n,r){let a=i(e)?f(e.value,`$fields`):f(e,`$fields`),s=u();return _(a,async()=>{await o(),je(a.value,t,n)?s.value=f(e).value:s.value=void 0},{immediate:!0,flush:`pre`}),s}function Ne(e){return e}function Pe(e,t){return n=>T({...e},t(n))}export{A as InternalRuleType,L as createRule,De as createScopedUseRegle,Ae as createVariant,Se as defineRegleConfig,Ne as defineRules,Ce as extendRegleConfig,ae as flatErrors,ve as inferRules,we as mergeRegles,je as narrowVariant,Pe as refineRules,N as unwrapRuleParameters,Oe as useCollectScope,ge as useRegle,pe as useRootStorage,xe as useRules,ke as useScopedRegle,Me as variantToRef};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@regle/core",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.2",
|
|
4
4
|
"description": "Headless form validation library for Vue 3",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"pinia": ">=2.2.5",
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
"optional": true
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@standard-schema/spec": "1.0.0"
|
|
16
|
+
},
|
|
14
17
|
"devDependencies": {
|
|
15
18
|
"@total-typescript/ts-reset": "0.6.1",
|
|
16
19
|
"@types/node": "22.13.14",
|