@regle/core 1.9.0 → 1.9.1

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.
@@ -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>), TMarkMaybe extends boolean = true> = IsUnion$1<UnwrapSimple<TRules>> extends true ? InferTupleUnionInput<UnionToTuple<UnwrapSimple<TRules>>>[number] : TMarkMaybe extends true ? Prettify<{ [K in keyof UnwrapSimple<TRules>]?: ProcessInputChildren<UnwrapSimple<TRules>[K], TMarkMaybe> }> : Prettify<{ [K in keyof UnwrapSimple<TRules>]: ProcessInputChildren<UnwrapSimple<TRules>[K], TMarkMaybe> }>;
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<RegleResult<JoinDiscriminatedUnions<TState>, TRules>>;
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<RegleResult<TState, TRules>>;
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<RegleResult<JoinDiscriminatedUnions<TState>, JoinDiscriminatedUnions<TRules>>>;
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 Extract<TRoot, { [K in TKey]: RegleFieldStatus<TValue, any, any> | RegleFieldStatus<MaybeInput<TValue>, any, any> }> & {
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): Ref<(Extract<TRoot, { [K in TKey]: RegleFieldStatus<TValue, any, any> | RegleFieldStatus<MaybeInput<TValue>, any, any> }> & {
2538
- $fields: Extract<TRoot['$fields'], { [K in TKey]: RegleFieldStatus<TValue, any, any> | RegleFieldStatus<MaybeInput<TValue>, any, any> }>;
2539
- }) | undefined>;
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 };
@@ -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
- error: err,
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
- error: err,
724
- path: path?.join(".") ?? ""
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
- error: err,
730
- path: path.join(".")
729
+ message: err,
730
+ path: path ?? []
731
731
  })) ?? [] : errors.$self ?? [];
732
- const eachErrors = errors.$each?.map((err, index) => iterateErrors(err, includePath, path?.concat(index.toString()))) ?? [];
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
- $selfStatus.value.$reset(options$1, fromParent);
1678
- $eachStatus.value.forEach(($each) => {
1679
- $each.$reset(options$1, true);
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
- const watchableRulesGetters = shallowRef(definedRules ?? {});
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
- options: resolvedOptions,
2294
- initialState,
2295
- originalState,
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 };
@@ -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.0",
3
+ "version": "1.9.1",
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",