@regle/core 0.5.11 β†’ 0.5.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -20,10 +20,11 @@ It's heavily inspired by Vuelidate.
20
20
  | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/simple-example?file=examples/simple-example/src/App.vue&configPath=examples/simple-example) | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/advanced-example?file=examples/advanced-example/src/App.vue&configPath=examples/advanced-example) |
21
21
 
22
22
  ## 🧰 Features
23
- - πŸ€– 100% type inference
23
+ - βœ… 100% type inference
24
24
  - πŸ“– Model based validation
25
- - πŸ›’ Collection validation
25
+ - πŸ’€ Headless
26
26
  - πŸͺ— Extensible
27
+ - πŸ›’ Collection validation
27
28
  - πŸ¦Έβ€β™‚οΈ [Zod](https://zod.dev/) support
28
29
  - πŸ€– [Valibot](https://valibot.dev/) support
29
30
  - πŸͺΆ Light(~7kb gzip) and 0 dependencies
@@ -68,6 +68,30 @@ function isObject(obj) {
68
68
  return typeof obj === "object" && obj !== null && !Array.isArray(obj);
69
69
  }
70
70
 
71
+ // ../shared/utils/isDate.ts
72
+ function isDate(value) {
73
+ if (isEmpty(value)) {
74
+ return false;
75
+ }
76
+ try {
77
+ let possibleDate = null;
78
+ if (value instanceof Date) {
79
+ possibleDate = value;
80
+ } else if (typeof value === "number" && !isNaN(value)) {
81
+ possibleDate = new Date(value);
82
+ } else if (typeof value === "string") {
83
+ const date = new Date(value);
84
+ if (date.toString() === "Invalid Date") {
85
+ return false;
86
+ }
87
+ possibleDate = date;
88
+ }
89
+ return !!possibleDate;
90
+ } catch (e) {
91
+ return false;
92
+ }
93
+ }
94
+
71
95
  // src/types/rules/rule.internal.types.ts
72
96
  var InternalRuleType = /* @__PURE__ */ ((InternalRuleType2) => {
73
97
  InternalRuleType2["Inline"] = "__inline";
@@ -782,29 +806,36 @@ function createReactiveFieldStatus({
782
806
  const $lazy2 = vue.computed(() => {
783
807
  if ($localOptions.value.$lazy != null) {
784
808
  return $localOptions.value.$lazy;
809
+ } else if (vue.unref(options.lazy) != null) {
810
+ return vue.unref(options.lazy);
785
811
  }
786
- return vue.unref(options.lazy);
812
+ return false;
787
813
  });
788
814
  const $rewardEarly2 = vue.computed(() => {
789
- if ($autoDirty2.value === true) {
790
- return false;
791
- }
792
815
  if ($localOptions.value.$rewardEarly != null) {
793
816
  return $localOptions.value.$rewardEarly;
817
+ } else if (vue.unref(options.rewardEarly) != null) {
818
+ return vue.unref(options.rewardEarly);
794
819
  }
795
- return vue.unref(options.rewardEarly);
820
+ return false;
796
821
  });
797
822
  const $clearExternalErrorsOnChange2 = vue.computed(() => {
798
823
  if ($localOptions.value.$clearExternalErrorsOnChange != null) {
799
824
  return $localOptions.value.$clearExternalErrorsOnChange;
825
+ } else if (vue.unref(options.clearExternalErrorsOnChange) != null) {
826
+ return vue.unref(options.clearExternalErrorsOnChange);
800
827
  }
801
- return vue.unref(options.clearExternalErrorsOnChange);
828
+ return true;
802
829
  });
803
830
  const $autoDirty2 = vue.computed(() => {
804
831
  if ($localOptions.value.$autoDirty != null) {
805
832
  return $localOptions.value.$autoDirty;
833
+ } else if (vue.unref(options.autoDirty) != null) {
834
+ return vue.unref(options.autoDirty);
835
+ } else if ($rewardEarly2.value) {
836
+ return false;
806
837
  }
807
- return vue.unref(options.autoDirty);
838
+ return true;
808
839
  });
809
840
  const $validating2 = vue.computed(() => {
810
841
  return Object.entries($rules.value).some(([key, ruleResult]) => {
@@ -834,6 +865,16 @@ function createReactiveFieldStatus({
834
865
  }
835
866
  return [];
836
867
  });
868
+ const $edited = vue.computed(() => {
869
+ if ($dirty.value) {
870
+ if (isDate(initialState.value) && isDate(state.value)) {
871
+ return initialState.value.getDate() !== state.value.getDate();
872
+ }
873
+ return initialState.value !== state.value;
874
+ }
875
+ return false;
876
+ });
877
+ const $anyEdited = vue.computed(() => $edited.value);
837
878
  const $tooltips = vue.computed(() => {
838
879
  return extractRulesTooltips({
839
880
  field: {
@@ -852,7 +893,10 @@ function createReactiveFieldStatus({
852
893
  });
853
894
  });
854
895
  const $ready = vue.computed(() => {
855
- return !($invalid.value || $pending.value);
896
+ if (!$autoDirty2.value) {
897
+ return !($invalid.value || $pending.value);
898
+ }
899
+ return $anyDirty.value && !($invalid.value || $pending.value);
856
900
  });
857
901
  const $pending = vue.computed(() => {
858
902
  if (triggerPunishment.value || !$rewardEarly2.value) {
@@ -922,7 +966,9 @@ function createReactiveFieldStatus({
922
966
  $anyDirty,
923
967
  $tooltips,
924
968
  $name,
925
- $inactive
969
+ $inactive,
970
+ $edited,
971
+ $anyEdited
926
972
  })
927
973
  );
928
974
  });
@@ -952,6 +998,8 @@ function createReactiveFieldStatus({
952
998
  $autoDirty: $autoDirty2,
953
999
  $clearExternalErrorsOnChange: $clearExternalErrorsOnChange2,
954
1000
  $anyDirty,
1001
+ $edited,
1002
+ $anyEdited,
955
1003
  $name,
956
1004
  $haveAnyAsyncRule: $haveAnyAsyncRule2,
957
1005
  $shortcuts: $shortcuts2,
@@ -1008,8 +1056,9 @@ function createReactiveFieldStatus({
1008
1056
  function $reset() {
1009
1057
  $clearExternalErrors();
1010
1058
  scopeState.$dirty.value = false;
1059
+ scopeState.triggerPunishment.value = false;
1011
1060
  storage.setDirtyEntry(path, false);
1012
- Object.entries($rules.value).forEach(([key, rule]) => {
1061
+ Object.entries($rules.value).forEach(([_, rule]) => {
1013
1062
  rule.$reset();
1014
1063
  });
1015
1064
  if (!scopeState.$lazy.value && scopeState.$autoDirty.value) {
@@ -1146,7 +1195,7 @@ function createCollectionElement({
1146
1195
  storage,
1147
1196
  options,
1148
1197
  externalErrors: vue.toRef(externalErrors?.value ?? [], index),
1149
- initialState: initialState?.[index],
1198
+ initialState: vue.computed(() => initialState.value?.[index]),
1150
1199
  shortcuts,
1151
1200
  fieldName
1152
1201
  });
@@ -1239,7 +1288,7 @@ function createReactiveCollectionStatus({
1239
1288
  options,
1240
1289
  storage,
1241
1290
  externalErrors: vue.toRef(externalErrors?.value ?? {}, `$each`),
1242
- initialState: initialState?.[index],
1291
+ initialState: vue.computed(() => initialState.value?.[index]),
1243
1292
  shortcuts,
1244
1293
  fieldName
1245
1294
  });
@@ -1293,7 +1342,7 @@ function createReactiveCollectionStatus({
1293
1342
  options,
1294
1343
  storage,
1295
1344
  externalErrors: vue.toRef(externalErrors?.value ?? {}, `$each`),
1296
- initialState: initialState?.[index],
1345
+ initialState: vue.computed(() => initialState.value?.[index]),
1297
1346
  shortcuts,
1298
1347
  fieldName
1299
1348
  });
@@ -1337,7 +1386,7 @@ function createReactiveCollectionStatus({
1337
1386
  }
1338
1387
  });
1339
1388
  const $dirty = vue.computed(() => {
1340
- return $fieldStatus.value.$dirty && $eachStatus.value.every((statusOrField) => {
1389
+ return $fieldStatus.value.$dirty && !!$eachStatus.value.length && $eachStatus.value.every((statusOrField) => {
1341
1390
  return statusOrField.$dirty;
1342
1391
  });
1343
1392
  });
@@ -1369,6 +1418,16 @@ function createReactiveCollectionStatus({
1369
1418
  return statusOrField.$pending;
1370
1419
  });
1371
1420
  });
1421
+ const $edited = vue.computed(() => {
1422
+ return $fieldStatus.value.$edited && !!$eachStatus.value.length && $eachStatus.value.every((statusOrField) => {
1423
+ return statusOrField.$edited;
1424
+ });
1425
+ });
1426
+ const $anyEdited = vue.computed(() => {
1427
+ return $fieldStatus.value.$anyEdited || $eachStatus.value.some((statusOrField) => {
1428
+ return statusOrField.$anyEdited;
1429
+ });
1430
+ });
1372
1431
  const $errors = vue.computed(() => {
1373
1432
  return {
1374
1433
  $self: $fieldStatus.value.$errors,
@@ -1404,7 +1463,9 @@ function createReactiveCollectionStatus({
1404
1463
  $name,
1405
1464
  $each: $eachStatus,
1406
1465
  $field: $fieldStatus,
1407
- $value: state
1466
+ $value: state,
1467
+ $edited,
1468
+ $anyEdited
1408
1469
  })
1409
1470
  );
1410
1471
  });
@@ -1428,7 +1489,9 @@ function createReactiveCollectionStatus({
1428
1489
  $ready,
1429
1490
  $name,
1430
1491
  $shortcuts: $shortcuts2,
1431
- $silentValue
1492
+ $silentValue,
1493
+ $edited,
1494
+ $anyEdited
1432
1495
  };
1433
1496
  });
1434
1497
  if (immediateScopeState.isPrimitiveArray.value) {
@@ -1515,7 +1578,7 @@ function createReactiveCollectionStatus({
1515
1578
  }
1516
1579
  function $resetAll() {
1517
1580
  $unwatch();
1518
- state.value = cloneDeep(initialState);
1581
+ state.value = cloneDeep(initialState.value);
1519
1582
  $reset();
1520
1583
  }
1521
1584
  const { $shortcuts, ...restScopeState } = scopeState;
@@ -1562,6 +1625,7 @@ function createReactiveNestedStatus({
1562
1625
  const stateRef = vue.toRef(state.value, statePropKey);
1563
1626
  const statePropRulesRef = vue.toRef(() => statePropRules);
1564
1627
  const $externalErrors = vue.toRef(externalErrors?.value ?? {}, statePropKey);
1628
+ const initialStateRef = vue.computed(() => initialState?.value?.[statePropKey]);
1565
1629
  return [
1566
1630
  statePropKey,
1567
1631
  createReactiveChildrenStatus({
@@ -1569,7 +1633,7 @@ function createReactiveNestedStatus({
1569
1633
  rulesDef: statePropRulesRef,
1570
1634
  path: path ? `${path}.${statePropKey}` : statePropKey,
1571
1635
  externalErrors: $externalErrors,
1572
- initialState: initialState?.[statePropKey],
1636
+ initialState: initialStateRef,
1573
1637
  fieldName: statePropKey,
1574
1638
  ...commonArgs
1575
1639
  })
@@ -1581,6 +1645,7 @@ function createReactiveNestedStatus({
1581
1645
  const externalRulesStatus = Object.fromEntries(
1582
1646
  Object.entries(vue.unref(externalErrors) ?? {}).filter(([key, errors]) => !(key in rulesDef.value) && !!errors).map(([key]) => {
1583
1647
  const stateRef = vue.toRef(state.value, key);
1648
+ const initialStateRef = vue.computed(() => initialState?.value?.[key]);
1584
1649
  return [
1585
1650
  key,
1586
1651
  createReactiveChildrenStatus({
@@ -1588,7 +1653,7 @@ function createReactiveNestedStatus({
1588
1653
  rulesDef: vue.computed(() => ({})),
1589
1654
  path: path ? `${path}.${key}` : key,
1590
1655
  externalErrors: vue.toRef(externalErrors?.value ?? {}, key),
1591
- initialState: initialState?.[key],
1656
+ initialState: initialStateRef,
1592
1657
  fieldName: key,
1593
1658
  ...commonArgs
1594
1659
  })
@@ -1598,6 +1663,7 @@ function createReactiveNestedStatus({
1598
1663
  const statesWithNoRules = Object.fromEntries(
1599
1664
  Object.entries(state.value).filter(([key]) => !(key in rulesDef.value) && !(key in (externalRulesStatus.value ?? {}))).map(([key]) => {
1600
1665
  const stateRef = vue.toRef(state.value, key);
1666
+ const initialStateRef = vue.computed(() => initialState?.value?.[key]);
1601
1667
  return [
1602
1668
  key,
1603
1669
  createReactiveChildrenStatus({
@@ -1605,7 +1671,7 @@ function createReactiveNestedStatus({
1605
1671
  rulesDef: vue.computed(() => ({})),
1606
1672
  path: path ? `${path}.${key}` : key,
1607
1673
  externalErrors: vue.toRef(externalErrors?.value ?? {}, key),
1608
- initialState: initialState?.[key],
1674
+ initialState: initialStateRef,
1609
1675
  fieldName: key,
1610
1676
  ...commonArgs
1611
1677
  })
@@ -1628,6 +1694,7 @@ function createReactiveNestedStatus({
1628
1694
  Object.values($fields.value).forEach((statusOrField) => {
1629
1695
  statusOrField.$reset();
1630
1696
  });
1697
+ commonArgs.onReset?.();
1631
1698
  define$WatchExternalErrors();
1632
1699
  }
1633
1700
  function $touch(runCommit = true, withConditions = false) {
@@ -1712,8 +1779,22 @@ function createReactiveNestedStatus({
1712
1779
  return false;
1713
1780
  });
1714
1781
  const $error = vue.computed(() => $anyDirty.value && !$pending.value && $invalid.value);
1782
+ const $rewardEarly = vue.computed(() => {
1783
+ if (vue.unref(commonArgs.options.rewardEarly) != null) {
1784
+ return vue.unref(commonArgs.options.rewardEarly);
1785
+ }
1786
+ return false;
1787
+ });
1788
+ const $autoDirty = vue.computed(() => {
1789
+ if (vue.unref(commonArgs.options.autoDirty) != null) {
1790
+ return vue.unref(commonArgs.options.autoDirty);
1791
+ } else if ($rewardEarly.value) {
1792
+ return false;
1793
+ }
1794
+ return true;
1795
+ });
1715
1796
  const $ready = vue.computed(() => {
1716
- if (!vue.unref(commonArgs.options.autoDirty)) {
1797
+ if (!$autoDirty.value) {
1717
1798
  return !($invalid.value || $pending.value);
1718
1799
  }
1719
1800
  return $anyDirty.value && !($invalid.value || $pending.value);
@@ -1737,6 +1818,16 @@ function createReactiveNestedStatus({
1737
1818
  })
1738
1819
  );
1739
1820
  });
1821
+ const $edited = vue.computed(() => {
1822
+ return !!Object.entries($fields.value).length && Object.entries($fields.value).every(([_, statusOrField]) => {
1823
+ return statusOrField?.$edited;
1824
+ });
1825
+ });
1826
+ const $anyEdited = vue.computed(() => {
1827
+ return Object.entries($fields.value).some(([_, statusOrField]) => {
1828
+ return statusOrField?.$anyEdited;
1829
+ });
1830
+ });
1740
1831
  const $name = vue.computed(() => fieldName);
1741
1832
  function processShortcuts() {
1742
1833
  if (commonArgs.shortcuts?.nested) {
@@ -1759,7 +1850,9 @@ function createReactiveNestedStatus({
1759
1850
  $name,
1760
1851
  $silentErrors,
1761
1852
  $errors,
1762
- $fields
1853
+ $fields,
1854
+ $edited,
1855
+ $anyEdited
1763
1856
  })
1764
1857
  );
1765
1858
  });
@@ -1817,7 +1910,9 @@ function createReactiveNestedStatus({
1817
1910
  $name,
1818
1911
  $shortcuts: $shortcuts2,
1819
1912
  $groups,
1820
- $silentValue
1913
+ $silentValue,
1914
+ $edited,
1915
+ $anyEdited
1821
1916
  };
1822
1917
  });
1823
1918
  }
@@ -1841,7 +1936,7 @@ function createReactiveNestedStatus({
1841
1936
  }
1842
1937
  async function $resetAll() {
1843
1938
  $unwatch();
1844
- state.value = cloneDeep({ ...initialState ?? {} });
1939
+ state.value = cloneDeep({ ...initialState.value ?? {} });
1845
1940
  $reset();
1846
1941
  createReactiveFieldsStatus();
1847
1942
  }
@@ -1954,7 +2049,8 @@ function useRootStorage({
1954
2049
  scopeRules,
1955
2050
  state,
1956
2051
  customRules,
1957
- shortcuts
2052
+ shortcuts,
2053
+ onReset
1958
2054
  }) {
1959
2055
  const storage = useStorage();
1960
2056
  const regle = vue.ref();
@@ -1970,7 +2066,8 @@ function useRootStorage({
1970
2066
  initialState,
1971
2067
  shortcuts,
1972
2068
  fieldName: "root",
1973
- path: ""
2069
+ path: "",
2070
+ onReset
1974
2071
  });
1975
2072
  if (vue.getCurrentScope()) {
1976
2073
  vue.onScopeDispose(() => {
@@ -1983,10 +2080,10 @@ function useRootStorage({
1983
2080
  // src/core/useRegle/useRegle.ts
1984
2081
  function createUseRegleComposable(customRules, options, shortcuts) {
1985
2082
  const globalOptions = {
1986
- autoDirty: options?.autoDirty ?? true,
1987
- lazy: options?.lazy ?? false,
1988
- rewardEarly: options?.rewardEarly ?? false,
1989
- clearExternalErrorsOnChange: options?.clearExternalErrorsOnChange ?? true
2083
+ autoDirty: options?.autoDirty,
2084
+ lazy: options?.lazy,
2085
+ rewardEarly: options?.rewardEarly,
2086
+ clearExternalErrorsOnChange: options?.clearExternalErrorsOnChange
1990
2087
  };
1991
2088
  function useRegle2(state, rulesFactory, options2) {
1992
2089
  const scopeRules = vue.isRef(rulesFactory) ? rulesFactory : vue.computed(typeof rulesFactory === "function" ? rulesFactory : () => rulesFactory);
@@ -1995,14 +2092,18 @@ function createUseRegleComposable(customRules, options, shortcuts) {
1995
2092
  ...options2
1996
2093
  };
1997
2094
  const processedState = vue.isRef(state) ? state : vue.ref(state);
1998
- const initialState = { ...cloneDeep(processedState.value) };
2095
+ const initialState = vue.ref({ ...cloneDeep(processedState.value) });
2096
+ function onReset() {
2097
+ initialState.value = { ...cloneDeep(processedState.value) };
2098
+ }
1999
2099
  const regle = useRootStorage({
2000
2100
  scopeRules,
2001
2101
  state: processedState,
2002
2102
  options: resolvedOptions,
2003
2103
  initialState,
2004
2104
  customRules,
2005
- shortcuts
2105
+ shortcuts,
2106
+ onReset
2006
2107
  });
2007
2108
  return {
2008
2109
  r$: regle.regle
@@ -473,24 +473,26 @@ interface RegleBehaviourOptions {
473
473
  * Only display error when calling `r$.$validate()`
474
474
  * @default false
475
475
  */
476
- lazy?: boolean;
476
+ lazy?: boolean | undefined;
477
477
  /**
478
478
  * Automaticaly set the dirty set without the need of `$value` or `$touch`
479
479
  * @default true
480
+ *
481
+ * @default false if rewardEarly is true
482
+
480
483
  */
481
- autoDirty?: boolean;
484
+ autoDirty?: boolean | undefined;
482
485
  /**
483
486
  * The fields will turn valid when they are, but not invalid unless calling `r$.$validate()`
484
487
  * @default false
485
- *
486
488
  */
487
- rewardEarly?: boolean;
489
+ rewardEarly?: boolean | undefined;
488
490
  /**
489
491
  * Define wether or not the external errors should be cleared when updating a field
490
492
  * @default true
491
493
  *
492
494
  */
493
- clearExternalErrorsOnChange?: boolean;
495
+ clearExternalErrorsOnChange?: boolean | undefined;
494
496
  }
495
497
  interface LocalRegleBehaviourOptions<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}> {
496
498
  externalErrors?: Ref<RegleExternalErrorTree<Unwrap<TState>>>;
@@ -588,13 +590,14 @@ interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
588
590
  */
589
591
  declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
590
592
 
591
- declare function useRootStorage({ initialState, options, scopeRules, state, customRules, shortcuts, }: {
593
+ declare function useRootStorage({ initialState, options, scopeRules, state, customRules, shortcuts, onReset, }: {
592
594
  scopeRules: ComputedRef<$InternalReglePartialRuleTree>;
593
595
  state: Ref<Record<string, any>>;
594
596
  options: ResolvedRegleBehaviourOptions;
595
- initialState: Record<string, any>;
597
+ initialState: Ref<Record<string, any>>;
596
598
  customRules?: () => CustomRulesDeclarationTree;
597
599
  shortcuts: RegleShortcutDefinition | undefined;
600
+ onReset?: () => void;
598
601
  }): {
599
602
  regle: $InternalRegleStatus | undefined;
600
603
  };
@@ -1481,6 +1484,8 @@ interface RegleCommonStatus<TValue = any> {
1481
1484
  readonly $invalid: boolean;
1482
1485
  readonly $dirty: boolean;
1483
1486
  readonly $anyDirty: boolean;
1487
+ readonly $edited: boolean;
1488
+ readonly $anyEdited: boolean;
1484
1489
  /** Indicates if any async rule for the field is currently running. Always false for synchronous rules. */
1485
1490
  readonly $pending: boolean;
1486
1491
  /** Convenience flag to easily decide if a message should be displayed. Equivalent to $dirty && !$pending && $invalid. */
@@ -1497,7 +1502,11 @@ interface RegleCommonStatus<TValue = any> {
1497
1502
  $silentValue: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue>>;
1498
1503
  /** Marks the field and all nested properties as $dirty. */
1499
1504
  $touch(runCommit?: boolean, withConditions?: boolean): void;
1500
- /** Resets the $dirty state on all nested properties of a form. */
1505
+ /**
1506
+ * - Restore the validation state to a pristine state while keeping the current state.
1507
+ * - Resets the `$dirty` state on all nested properties of a form.
1508
+ * - Rerun rules if `$lazy` is false
1509
+ */
1501
1510
  $reset(): void;
1502
1511
  /** Will reset both your validation state and your form state to their initial values. */
1503
1512
  $resetAll: () => void;
@@ -1516,6 +1525,7 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
1516
1525
  readonly $type: string;
1517
1526
  /** Returns the computed error message or messages for the current rule. */
1518
1527
  readonly $message: string | string[];
1528
+ /** Stores the current rule tooltip or tooltips */
1519
1529
  readonly $tooltip: string | string[];
1520
1530
  /** Indicates whether or not the rule is enabled (for rules like requiredIf) */
1521
1531
  readonly $active: boolean;
@@ -473,24 +473,26 @@ interface RegleBehaviourOptions {
473
473
  * Only display error when calling `r$.$validate()`
474
474
  * @default false
475
475
  */
476
- lazy?: boolean;
476
+ lazy?: boolean | undefined;
477
477
  /**
478
478
  * Automaticaly set the dirty set without the need of `$value` or `$touch`
479
479
  * @default true
480
+ *
481
+ * @default false if rewardEarly is true
482
+
480
483
  */
481
- autoDirty?: boolean;
484
+ autoDirty?: boolean | undefined;
482
485
  /**
483
486
  * The fields will turn valid when they are, but not invalid unless calling `r$.$validate()`
484
487
  * @default false
485
- *
486
488
  */
487
- rewardEarly?: boolean;
489
+ rewardEarly?: boolean | undefined;
488
490
  /**
489
491
  * Define wether or not the external errors should be cleared when updating a field
490
492
  * @default true
491
493
  *
492
494
  */
493
- clearExternalErrorsOnChange?: boolean;
495
+ clearExternalErrorsOnChange?: boolean | undefined;
494
496
  }
495
497
  interface LocalRegleBehaviourOptions<TState extends Record<string, any>, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}> {
496
498
  externalErrors?: Ref<RegleExternalErrorTree<Unwrap<TState>>>;
@@ -588,13 +590,14 @@ interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
588
590
  */
589
591
  declare const inferRules: inferRulesFn<Partial<AllRulesDeclarations>>;
590
592
 
591
- declare function useRootStorage({ initialState, options, scopeRules, state, customRules, shortcuts, }: {
593
+ declare function useRootStorage({ initialState, options, scopeRules, state, customRules, shortcuts, onReset, }: {
592
594
  scopeRules: ComputedRef<$InternalReglePartialRuleTree>;
593
595
  state: Ref<Record<string, any>>;
594
596
  options: ResolvedRegleBehaviourOptions;
595
- initialState: Record<string, any>;
597
+ initialState: Ref<Record<string, any>>;
596
598
  customRules?: () => CustomRulesDeclarationTree;
597
599
  shortcuts: RegleShortcutDefinition | undefined;
600
+ onReset?: () => void;
598
601
  }): {
599
602
  regle: $InternalRegleStatus | undefined;
600
603
  };
@@ -1481,6 +1484,8 @@ interface RegleCommonStatus<TValue = any> {
1481
1484
  readonly $invalid: boolean;
1482
1485
  readonly $dirty: boolean;
1483
1486
  readonly $anyDirty: boolean;
1487
+ readonly $edited: boolean;
1488
+ readonly $anyEdited: boolean;
1484
1489
  /** Indicates if any async rule for the field is currently running. Always false for synchronous rules. */
1485
1490
  readonly $pending: boolean;
1486
1491
  /** Convenience flag to easily decide if a message should be displayed. Equivalent to $dirty && !$pending && $invalid. */
@@ -1497,7 +1502,11 @@ interface RegleCommonStatus<TValue = any> {
1497
1502
  $silentValue: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue>>;
1498
1503
  /** Marks the field and all nested properties as $dirty. */
1499
1504
  $touch(runCommit?: boolean, withConditions?: boolean): void;
1500
- /** Resets the $dirty state on all nested properties of a form. */
1505
+ /**
1506
+ * - Restore the validation state to a pristine state while keeping the current state.
1507
+ * - Resets the `$dirty` state on all nested properties of a form.
1508
+ * - Rerun rules if `$lazy` is false
1509
+ */
1501
1510
  $reset(): void;
1502
1511
  /** Will reset both your validation state and your form state to their initial values. */
1503
1512
  $resetAll: () => void;
@@ -1516,6 +1525,7 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
1516
1525
  readonly $type: string;
1517
1526
  /** Returns the computed error message or messages for the current rule. */
1518
1527
  readonly $message: string | string[];
1528
+ /** Stores the current rule tooltip or tooltips */
1519
1529
  readonly $tooltip: string | string[];
1520
1530
  /** Indicates whether or not the rule is enabled (for rules like requiredIf) */
1521
1531
  readonly $active: boolean;
@@ -1,2 +1,2 @@
1
- 'use strict';var vue=require('vue');function B(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var tt=Symbol("regle-rule");function xt(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 q(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>q(n)))),r=="Map"&&(t=new Map([...e].map(n=>[q(n[0]),q(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,xt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=q(e[n]);}return t}function Z(e){return e instanceof Date||e instanceof File?!1:typeof e=="object"&&e!==null&&!Array.isArray(e)}var we=(r=>(r.Inline="__inline",r.Async="__async",r))(we||{});function rt(e,t){return e.some(r=>r[t])}function nt(e,t){return e.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[])}function L(e){try{return e.map(t=>vue.toValue(t))}catch{return []}}function at(e){return e.map(t=>t instanceof Function?vue.computed(t):vue.isRef(t)?t:vue.toRef(()=>t))}function lt(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(y=>y.trim()).filter(y=>y.length>0).length:0}function Oe(e,...t){let{validator:r,type:n}=e,a=n==="__async"||r.constructor.name==="AsyncFunction";return {...{validator(d,...h){return e.validator(d,...L(h.length?h:t))},message(d){return typeof e.message=="function"?e.message({...d,$params:L(d?.$params?.length?d.$params:t)}):e.message},active(d){return typeof e.active=="function"?e.active({...d,$params:L(d?.$params?.length?d.$params:t)}):e.active??!0},tooltip(d){return typeof e.tooltip=="function"?e.tooltip({...d,$params:L(d?.$params?.length?d.$params:t)}):e.tooltip??[]},exec(d){let h=e.validator(d,...L(t)),$;return h instanceof Promise?h.then(D=>($=D,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)):($=h,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:a,_params:at(t),_brand:tt}}function Ae(e){if(typeof e.validator=="function"){let r=Oe(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(lt(e.validator)>1){let a=function(...f){return Oe(e,...f)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.tooltip=r.tooltip,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._tooltip=r.tooltip,a._type=e.type,a._message_pacthed=!1,a._tooltip_pacthed=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function Fe(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),a=vue.shallowRef(new Map),f=vue.shallowRef(new Map);function y(u){let s=t.value.get(u);if(s)return s;{let c=vue.ref({});return t.value.set(u,c),c}}function d(u){let s=r.value.get(u);if(s)return s;{let c=vue.ref([]);return r.value.set(u,c),c}}function h(u,s,c){f.value.set(`${u}-${s}`,c);}function $(u,s){return f.value.get(`${u}-${s}`)}function D(u,s){u&&s!=null&&f.value.delete(`${u}-${s}`);}function j(u,s){n.value.set(u,s);}function A(u){return n.value.get(u)??!1}function l(u,s){e.value.set(u,s);}function E(u,s){let c=e.value.get(u);return c?C(s,c)?{valid:!0}:{valid:!1}:void 0}function C(u,s){let c=Object.keys(s),V=Object.keys(u);return V.length!==c.length||!V.every(G=>c.includes(G))?!1:V.every(G=>{let P=u[G],b=s[G];return !b||!P||typeof P=="function"||typeof b=="function"||typeof P=="number"||typeof P=="boolean"?!1:P._params?P._params?.every((k,m)=>{if(typeof b=="number"||typeof b=="boolean")return !0;{let I=L(b._params),N=L(P._params);return I?.[m]===N?.[m]}}):!0})}function _(u){let s=a.value.get(u);if(s)return s;{let c=vue.ref(!1),V=vue.ref(!0),W=vue.ref({}),G=vue.ref(!1);return a.value.set(u,{$pending:c,$valid:V,$metadata:W,$validating:G}),{$pending:c,$valid:V,$metadata:W,$validating:G}}}return vue.getCurrentScope()&&vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),f.value.clear();}),{addRuleDeclEntry:l,setDirtyEntry:j,checkRuleDeclEntry:E,getDirtyState:A,trySetRuleStatusRef:_,getFieldsEntry:y,getCollectionsEntry:d,getArrayStatus:$,addArrayStatus:h,deleteArrayStatus:D,arrayStatusStorage:f}}function ge(e){return e.value instanceof Date||e.value instanceof File?!1:Z(e.value)}function Me(e,t,r){let n=vue.effectScope(),a;return e instanceof Function?a=n.run(()=>e(t,r??0)):a=e,{scope:n,unwrapped:a}}function Se(e,t,r){let n,a=(...f)=>new Promise(y=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...f])).then(y);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a}function Mt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let f=Number(r[a]),y=Number(n[a]);if(f>y)return 1;if(y>f)return -1;if(!isNaN(f)&&isNaN(y))return 1;if(isNaN(f)&&!isNaN(y))return -1}return 0}var he=Mt(vue.version,"3.5.0")!==-1;function jt(){return Math.floor(Math.random()*Date.now()).toString()}function be(){return typeof window>"u"?jt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function ot(e,t){return ge(e)||Z(t.value)&&!B(t.value)&&!Object.entries(t.value).some(([r,n])=>Re(n)||typeof n=="function")}function ut(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function it(e){return !!e.value&&Z(e.value)}function Re(e){return Z(e)&&"_validator"in e}function pe(e){return typeof e.value!="function"}function st(e){return Z(e)&&"$fields"in e}function ct(e){return !!e&&"$rules"in e}function je({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function ft({field:e}){return Object.entries(e.$rules??{}).map(([t,r])=>r.$tooltip).filter(t=>!!t).reduce((t,r)=>typeof r=="string"?t?.concat([r]):t?.concat(r),[])}function Rt({fieldProperties:e,customMessages:t,rule:r,ruleKey:n,state:a,path:f,storage:y,$debounce:d,modifiers:h}){let $=vue.effectScope(),D={},j,A=vue.ref(!1),{$pending:l,$valid:E,$metadata:C,$validating:_}=y.trySetRuleStatusRef(`${f}.${n}`);function u(){$=vue.effectScope(),D=$.run(()=>{let b=vue.computed(()=>({$value:a.value,$error:e.$error.value,$dirty:e.$dirty.value,$pending:e.$pending.value,$valid:e.$valid.value,$invalid:e.$invalid.value,$rule:{$valid:E.value,$invalid:!E.value,$pending:l.value},$params:x.value,...C.value})),k=vue.computed(()=>pe(r)?typeof r.value.active=="function"?r.value.active(b.value):!!r.value.active:!0);function m(o){let i="",g=t?t[n]?.[o]:void 0;if(g&&(typeof g=="function"?i=g(b.value):i=g),pe(r)){let R=`_${o}_patched`;g&&!r.value[R]||(typeof r.value[o]=="function"?i=r.value[o](b.value):i=r.value[o]??"");}return i}let I=vue.computed(()=>{let o=m("message");return B(o)&&(o="This field is not valid"),o}),N=vue.computed(()=>m("tooltip")),Q=vue.computed(()=>pe(r)&&r.value.type?r.value.type:n),K=vue.computed(()=>pe(r)?r.value.validator:r.value),x=vue.computed(()=>typeof r.value=="function"?[]:L(r.value._params??[])),w=vue.computed(()=>`${f}.${Q.value}`);return {$active:k,$message:I,$type:Q,$validator:K,$params:x,$path:w,$tooltip:N}}),j=vue.watch(D?.$params,()=>{(h.$autoDirty.value||h.$rewardEarly.value&&e.$error.value)&&W();});}u();function s(){E.value=!0,e.$dirty.value&&(l.value=!0);}async function c(){let b=!1;try{let k=D.$validator.value,m=k(a.value,...D.$params.value),I=a.value;s();let N;if(m instanceof Promise?N=await m:N=m,a.value!==I)return !0;if(typeof N=="boolean")b=N;else {let{$valid:Q,...K}=N;b=Q,C.value=K;}}catch{b=!1;}finally{l.value=!1;}return b}let V=Se(c,d??200);async function W(){try{_.value=!0;let b=!1;if(Re(r.value)&&r.value._async)b=await V();else {let k=D.$validator.value,m=k(a.value,...D.$params.value);if(m 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(m!=null)if(typeof m=="boolean")b=m;else {let{$valid:I,...N}=m;b=I,C.value=N;}}return E.value=b,b}catch{return !1}finally{_.value=!1;}}function G(){E.value=!0,C.value={},l.value=!1,_.value=!1,u();}function P(){j(),$.stop(),$=vue.effectScope();}return vue.reactive({...D,$pending:l,$valid:E,$metadata:C,$haveAsync:A,$validating:_,$validate:W,$unwatch:P,$watch:u,$reset:G})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:f,options:y,externalErrors:d,onUnwatch:h,$isArray:$,initialState:D,shortcuts:j}){let A=vue.effectScope(),l,E=[],C,_,u,s,c=()=>{};function V(){let v=t.value,F=f.checkRuleDeclEntry(n,v);I.value=Object.fromEntries(Object.entries(v).filter(([S])=>S.startsWith("$"))),P(),m.value=Object.fromEntries(Object.entries(t.value).filter(([S])=>!S.startsWith("$")).map(([S,p])=>{if(p){let O=vue.toRef(()=>p);return [S,Rt({fieldProperties:{$dirty:l.$dirty,$error:l.$error,$invalid:l.$invalid,$pending:l.$pending,$valid:l.$valid},modifiers:{$autoDirty:l.$autoDirty,$rewardEarly:l.$rewardEarly},customMessages:r,rule:O,ruleKey:S,state:e,path:n,storage:f,$debounce:I.value.$debounce})]}return []}).filter(S=>!!S.length)),l.processShortcuts(),W(),F?.valid!=null&&(l.$dirty.value=f.getDirtyState(n),l.$dirty.value&&c()),f.addRuleDeclEntry(n,v);}function W(){c=l.$debounce.value?Se(k,l.$debounce.value??l.$haveAnyAsyncRule?100:0):k;}function G(){m.value&&Object.entries(m.value).forEach(([v,F])=>{F.$unwatch();}),u(),l.$dirty.value&&f.setDirtyEntry(n,l.$dirty.value),C?.(),_?.(),A.stop(),A=vue.effectScope(),E.forEach(v=>v.stop()),E=[],h?.(),s?.();}function P(){m.value&&Object.entries(m.value).forEach(([v,F])=>{F.$watch();}),l=A.run(()=>{let v=vue.ref(!1),F=vue.ref(!1),S=vue.computed(()=>v.value),p=vue.computed(()=>I.value.$debounce),O=vue.computed(()=>I.value.$lazy!=null?I.value.$lazy:vue.unref(y.lazy)),X=vue.computed(()=>Be.value===!0?!1:I.value.$rewardEarly!=null?I.value.$rewardEarly:vue.unref(y.rewardEarly)),ve=vue.computed(()=>I.value.$clearExternalErrorsOnChange!=null?I.value.$clearExternalErrorsOnChange:vue.unref(y.clearExternalErrorsOnChange)),Be=vue.computed(()=>I.value.$autoDirty!=null?I.value.$autoDirty:vue.unref(y.autoDirty)),Le=vue.computed(()=>Object.entries(m.value).some(([z,te])=>te.$validating)),He=vue.computed({get:()=>e.value,set(z){C(),e.value=z,b();}}),Ie=vue.computed(()=>fe.value&&!$e.value&&v.value),qe=vue.computed(()=>Ie.value?je({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value}}):[]),ze=vue.computed(()=>ft({field:{$rules:m.value}})),Je=vue.computed(()=>je({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value},silent:!0})),Ye=vue.computed(()=>!(fe.value||$e.value)),$e=vue.computed(()=>F.value||!X.value?Object.entries(m.value).some(([z,te])=>te.$pending):!1),fe=vue.computed(()=>d?.value?.length?!0:B(m.value)?!1:!X.value||X.value&&F.value?Object.entries(m.value).some(([z,te])=>!te.$valid):!1),Qe=vue.computed(()=>a),Pe=vue.computed(()=>!!B(m.value)),Xe=vue.computed(()=>d?.value?.length||Pe.value?!1:v.value&&!B(e.value)&&!Le.value?Object.values(m.value).every(z=>z.$valid&&z.$active):!1),Tt=vue.computed(()=>Object.entries(m.value).some(([z,te])=>te.$haveAsync));function Et(){j?.fields&&Object.entries(j.fields).forEach(([z,te])=>{let Ke=vue.effectScope();Ze[z]=Ke.run(()=>{let et=vue.ref();return vue.watchEffect(()=>{et.value=te(vue.reactive({$dirty:v,$externalErrors:d?.value??[],$value:e,$silentValue:He,$rules:m,$error:Ie,$pending:$e,$invalid:fe,$valid:Xe,$errors:qe,$ready:Ye,$silentErrors:Je,$anyDirty:S,$tooltips:ze,$name:Qe,$inactive:Pe}));}),et}),E.push(Ke);});}let Ze={};return vue.watch(fe,z=>{z||(F.value=!1);}),{$error:Ie,$pending:$e,$invalid:fe,$valid:Xe,$debounce:p,$lazy:O,$errors:qe,$ready:Ye,$silentErrors:Je,$rewardEarly:X,$autoDirty:Be,$clearExternalErrorsOnChange:ve,$anyDirty:S,$name:Qe,$haveAnyAsyncRule:Tt,$shortcuts:Ze,$validating:Le,$tooltips:ze,$dirty:v,triggerPunishment:F,processShortcuts:Et,$silentValue:He,$inactive:Pe}}),b(),u=vue.watch(l.$dirty,()=>{f.setDirtyEntry(n,l.$dirty.value);}),_=vue.watch(l.$valid,v=>{l.$rewardEarly.value&&v&&(l.triggerPunishment.value=!1);}),s=vue.watch(l.$haveAnyAsyncRule,W);}function b(){C=vue.watch(e,()=>{l.$autoDirty.value&&(l.$dirty.value||(l.$dirty.value=!0)),t.value instanceof Function&&V(),(l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&c(),l.$rewardEarly.value!==!0&&l.$clearExternalErrorsOnChange.value&&o();},{deep:$?!0:he?1:!0});}function k(){Object.values(m.value).forEach(v=>{v.$validate();});}let m=vue.ref({}),I=vue.ref({});V();function N(){o(),l.$dirty.value=!1,f.setDirtyEntry(n,!1),Object.entries(m.value).forEach(([v,F])=>{F.$reset();}),!l.$lazy.value&&l.$autoDirty.value&&Object.values(m.value).forEach(v=>v.$validate());}function Q(v=!0,F=!1){l.$dirty.value||(l.$dirty.value=!0),F&&v?(l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&c():v&&c();}async function K(){try{let v=e.value;if(l.triggerPunishment.value=!0,!l.$dirty.value)l.$dirty.value=!0;else if(l.$autoDirty.value&&l.$dirty.value&&!l.$pending.value)return {result:!l.$error.value,data:v};return B(m.value)?{result:!0,data:v}:{result:(await Promise.allSettled(Object.entries(m.value).map(([p,O])=>O.$validate()))).every(p=>p.status==="fulfilled"?p.value===!0:!1),data:v}}catch{return {result:!1,data:e.value}}}function x(){G(),e.value=q(D),N();}function w(v=!0){return l.$dirty.value?e.value:v?{_null:!0}:null}function o(){d?.value?.length&&(d.value=[]);}!l.$lazy.value&&!l.$dirty.value&&l.$autoDirty.value&&c();let{$shortcuts:i,$validating:g,$autoDirty:R,$rewardEarly:T,$clearExternalErrorsOnChange:U,$haveAnyAsyncRule:Y,$debounce:ee,$lazy:ae,...le}=l;return vue.reactive({...le,$externalErrors:d,$value:e,$rules:m,...i,$reset:N,$touch:Q,$validate:K,$unwatch:G,$watch:P,$resetAll:x,$extractDirtyFields:w,$clearExternalErrors:o})}function Ge({$id:e,path:t,index:r,options:n,storage:a,stateValue:f,customMessages:y,rules:d,externalErrors:h,initialState:$,shortcuts:D,fieldName:j}){let A=d.$key?d.$key:be(),l=`${t}.${String(A)}`;typeof f.value=="object"&&f.value!=null&&(f.value.$id?l=`${t}.${f.value.$id}`:Object.defineProperties(f.value,{$id:{value:A,enumerable:!1,configurable:!1,writable:!1}}));let E=ye({state:f,rulesDef:vue.toRef(()=>d),customMessages:y,path:l,storage:a,options:n,externalErrors:vue.toRef(h?.value??[],r),initialState:$?.[r],shortcuts:D,fieldName:j});if(E){let C=f.value?.$id;E.$id=C??String(A),a.addArrayStatus(e,E.$id,E);}return E}function yt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:f,externalErrors:y,initialState:d,shortcuts:h,fieldName:$}){let D=vue.effectScope(),j,A=vue.effectScope(),l,E=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let C=vue.ref(),_=vue.ref(e.value),u,s=vue.ref({}),c=a.getCollectionsEntry(n);l=A.run(()=>({isPrimitiveArray:vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(i=>typeof i!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(i=>Re(i)):!1)})),V(),P();function V(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(C.value=be(),Object.defineProperties(e.value,{$id:{value:C.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(C.value=e.value.$id)),!l.isPrimitiveArray.value&&(_.value=s.value.$value,Array.isArray(e.value)?c.value=e.value.map((o,i)=>{let{scope:g,unwrapped:R}=Me(t.value.$each,vue.toRef(()=>o),i);g&&E.push(g);let T=Ge({$id:C.value,path:n,customMessages:r,rules:R??{},stateValue:vue.toRef(()=>o),index:i,options:f,storage:a,externalErrors:vue.toRef(y?.value??{},"$each"),initialState:d?.[i],shortcuts:h,fieldName:$});return T||null}).filter(o=>!!o):c.value=[],s.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:f,externalErrors:vue.toRef(y?.value??{},"$self"),$isArray:!0,initialState:d,shortcuts:h,fieldName:$}));}function W(){if(Array.isArray(e.value)){let o=q(c.value);c.value=e.value.map((i,g)=>{let R=vue.toRef(()=>i);if(i.$id&&c.value.find(T=>T.$id===i.$id)){let T=a.getArrayStatus(C.value,i.$id);return T?(T.$value=R,T):null}else {let{scope:T,unwrapped:U}=Me(t.value.$each,R,g);if(T&&E.push(T),U){let Y=Ge({$id:C.value,path:n,customMessages:r,rules:U,stateValue:R,index:g,options:f,storage:a,externalErrors:vue.toRef(y?.value??{},"$each"),initialState:d?.[g],shortcuts:h,fieldName:$});return Y||null}}}).filter(i=>!!i),o.filter(i=>!e.value.find(g=>i.$id===g.$id)).forEach((i,g)=>{a.deleteArrayStatus(C.value,g.toString());});}else c.value=[];}function G(){u=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?V():W();},{deep:he?1:!0,flush:"pre"});}function P(){G(),D=vue.effectScope(),j=D.run(()=>{let o=vue.computed({get:()=>e.value,set(p){u(),e.value=p,G();}}),i=vue.computed(()=>s.value.$dirty&&c.value.every(p=>p.$dirty)),g=vue.computed(()=>s.value.$anyDirty||c.value.some(p=>p.$anyDirty)),R=vue.computed(()=>s.value.$invalid||c.value.some(p=>p.$invalid)),T=vue.computed(()=>(B(s.value.$rules)?!0:s.value.$valid)&&c.value.every(p=>p.$valid)),U=vue.computed(()=>s.value.$error||c.value.some(p=>p.$error)),Y=vue.computed(()=>!(R.value||ee.value)),ee=vue.computed(()=>s.value.$pending||c.value.some(p=>p.$pending)),ae=vue.computed(()=>({$self:s.value.$errors,$each:c.value.map(p=>p.$errors)})),le=vue.computed(()=>({$self:s.value.$silentErrors,$each:c.value.map(p=>p.$silentErrors)})),v=vue.computed(()=>$);function F(){h?.collections&&Object.entries(h?.collections).forEach(([p,O])=>{let X=vue.effectScope();S[p]=X.run(()=>{let ve=vue.ref();return vue.watchEffect(()=>{ve.value=O(vue.reactive({$dirty:i,$error:U,$silentValue:o,$pending:ee,$invalid:R,$valid:T,$errors:ae,$ready:Y,$silentErrors:le,$anyDirty:g,$name:v,$each:c,$field:s,$value:e}));}),ve}),E.push(X);});}let S={};return F(),{$dirty:i,$anyDirty:g,$invalid:R,$valid:T,$error:U,$pending:ee,$errors:ae,$silentErrors:le,$ready:Y,$name:v,$shortcuts:S,$silentValue:o}}),l.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),u());}function b(){u&&u(),s.value&&s.value.$unwatch(),c.value&&c.value.forEach(o=>{"$dirty"in o&&o.$unwatch();}),D.stop(),D=vue.effectScope(),A.stop(),A=vue.effectScope(!0),E.forEach(o=>o.stop()),E=[];}function k(o=!0,i=!1){s.value.$touch(o,i),c.value.forEach(g=>{g.$touch(o,i);});}function m(){s.value.$reset(),c.value.forEach(o=>{o.$reset();});}async function I(){let o=e.value;try{return {result:(await Promise.allSettled([s.value.$validate(),...c.value.map(R=>R.$validate())])).every(R=>R.status==="fulfilled"?R.value.result===!0:!1),data:o}}catch{return {result:!1,data:o}}}function N(){s.value.$clearExternalErrors(),c.value.forEach(o=>{o.$clearExternalErrors();});}function Q(o=!0){let i=c.value.map(g=>{if(st(g))return g.$extractDirtyFields(o)});return o&&i.every(g=>B(g))&&(i=[]),i}function K(){b(),e.value=q(d),m();}let{$shortcuts:x,...w}=j;return vue.reactive({$field:s,...w,...x,$each:c,$value:e,$validate:I,$unwatch:b,$watch:P,$touch:k,$reset:m,$resetAll:K,$extractDirtyFields:Q,$clearExternalErrors:N})}function Ce({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:a,validationGroups:f,initialState:y,fieldName:d,...h}){let $=vue.effectScope(),D,j=[],A=null,l=null,E=null;async function _(x=!0){let w=Object.entries(e.value),o=Object.fromEntries(w.filter(([R,T])=>!!T).map(([R,T])=>{if(T){let U=vue.toRef(t.value,R),Y=vue.toRef(()=>T),ee=vue.toRef(a?.value??{},R);return [R,ye({state:U,rulesDef:Y,path:r?`${r}.${R}`:R,externalErrors:ee,initialState:y?.[R],fieldName:R,...h})]}return []})),i=Object.fromEntries(Object.entries(vue.unref(a)??{}).filter(([R,T])=>!(R in e.value)&&!!T).map(([R])=>{let T=vue.toRef(t.value,R);return [R,ye({state:T,rulesDef:vue.computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:vue.toRef(a?.value??{},R),initialState:y?.[R],fieldName:R,...h})]})),g=Object.fromEntries(Object.entries(t.value).filter(([R])=>!(R in e.value)&&!(R in(i.value??{}))).map(([R])=>{let T=vue.toRef(t.value,R);return [R,ye({state:T,rulesDef:vue.computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:vue.toRef(a?.value??{},R),initialState:y?.[R],fieldName:R,...h})]}));u.value={...o,...i,...g},x&&G();}let u=h.storage.getFieldsEntry(r);_();function s(){l?.(),Object.values(u.value).forEach(x=>{x.$reset();}),V();}function c(x=!0,w=!1){Object.values(u.value).forEach(o=>{o.$touch(x,w);});}function V(){a?.value&&(l=vue.watch(a,()=>{P(),_();},{deep:!0}));}function W(){E=vue.watch(t,()=>{P(),_(),c(!0,!0);},{flush:"sync"});}function G(){n&&(A?.(),A=vue.watch(n,()=>{P(),_();},{deep:!0,flush:"post"}),V()),W(),$=vue.effectScope(),D=$.run(()=>{let x=vue.computed({get:()=>t.value,set(S){P(),t.value=S,_();}}),w=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([S,p])=>p?.$dirty)),o=vue.computed(()=>Object.entries(u.value).some(([S,p])=>p?.$anyDirty)),i=vue.computed(()=>Object.entries(u.value).some(([S,p])=>p?.$invalid)),g=vue.computed(()=>{let S=Object.entries(u.value).filter(([p,O])=>ct(O)?!O.$inactive:!0);return S.length?S.every(([p,O])=>O?.$valid):!1}),R=vue.computed(()=>o.value&&!U.value&&i.value),T=vue.computed(()=>vue.unref(h.options.autoDirty)?o.value&&!(i.value||U.value):!(i.value||U.value)),U=vue.computed(()=>Object.entries(u.value).some(([S,p])=>p?.$pending)),Y=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([S,p])=>[S,p?.$errors]))),ee=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([S,p])=>[S,p?.$silentErrors]))),ae=vue.computed(()=>d);function le(){h.shortcuts?.nested&&Object.entries(h.shortcuts.nested).forEach(([S,p])=>{let O=vue.effectScope();F[S]=O.run(()=>{let X=vue.ref();return vue.watchEffect(()=>{X.value=p(vue.reactive({$dirty:w,$value:t,$silentValue:x,$error:R,$pending:U,$invalid:i,$valid:g,$ready:T,$anyDirty:o,$name:ae,$silentErrors:ee,$errors:Y,$fields:u}));}),X}),j.push(O);});}let v=vue.computed({get:()=>f?Object.fromEntries(Object.entries(f?.(u.value)??{}).map(([S,p])=>p.length?[S,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(O=>[O,rt(p,O)])),...Object.fromEntries(["$errors","$silentErrors"].map(O=>[O,nt(p,O)]))}]:[])):{},set(){}}),F={};return le(),{$dirty:w,$anyDirty:o,$invalid:i,$valid:g,$error:R,$pending:U,$errors:Y,$silentErrors:ee,$ready:T,$name:ae,$shortcuts:F,$groups:v,$silentValue:x}});}function P(){A?.(),l?.(),E?.(),j.forEach(x=>x.stop()),j=[],$.stop(),u.value&&Object.entries(u.value).forEach(([x,w])=>{w.$unwatch();});}function b(){Object.entries(u.value).forEach(([x,w])=>{w.$clearExternalErrors();});}async function k(){P(),t.value=q({...y??{}}),s(),_();}function m(x){return x.filter(([w,o])=>Z(o)?!(o&&typeof o=="object"&&"_null"in o)&&!B(o):Array.isArray(o)?o.length:!0)}function I(x=!0){let w=Object.entries(u.value).map(([o,i])=>[o,i.$extractDirtyFields(x)]);return x&&(w=m(w)),Object.fromEntries(w)}async function N(){try{let x=t.value;return {result:(await Promise.allSettled(Object.values(u.value).map(i=>i.$validate()))).every(i=>i.status==="fulfilled"?i.value.result===!0:!1),data:x}}catch{return {result:!1,data:t.value}}}let{$shortcuts:Q,...K}=D;return vue.reactive({...K,...Q,$fields:u,$value:t,$resetAll:k,$reset:s,$touch:c,$validate:N,$unwatch:P,$watch:G,$clearExternalErrors:b,$extractDirtyFields:I})}function ye({rulesDef:e,externalErrors:t,...r}){if(ut(e,r.state))return yt({rulesDef:e,externalErrors:t,...r});if(ot(r.state,e)){if(ge(r.state))return Ce({rulesDef:e,externalErrors:t,...r});{let n=vue.ref({}),a=vue.watch(n,d=>{a(),r.state.value=d;},{deep:!0}),{state:f,...y}=r;return Ce({rulesDef:e,externalErrors:t,...y,state:n})}}else if(it(e))return Ee({rulesDef:e,externalErrors:t,...r})}function ce({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:f}){let y=Fe(),d=vue.ref();return d.value=Ce({rootRules:r,rulesDef:r,state:n,customMessages:a?.(),storage:y,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:f,fieldName:"root",path:""}),vue.getCurrentScope()&&vue.onScopeDispose(()=>{d.value?.$unwatch();}),vue.reactive({regle:d})}function We(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange??!0};function a(f,y,d){let h=vue.isRef(y)?y:vue.computed(typeof y=="function"?y:()=>y),$={...n,...d},D=vue.isRef(f)?f:vue.ref(f),j={...q(D.value)};return {r$:ce({scopeRules:h,state:D,options:$,initialState:j,customRules:e,shortcuts:r}).regle}}return a}var ht=We();function ke(){function e(t,r){return r}return e}var Ue=ke();function bt({rules:e,modifiers:t,shortcuts:r}){let n=We(e,t,r),a=ke();return {useRegle:n,inferRules:a}}
2
- exports.InternalRuleType=we;exports.createRule=Ae;exports.defineRegleConfig=bt;exports.inferRules=Ue;exports.unwrapRuleParameters=L;exports.useRegle=ht;exports.useRootStorage=ce;
1
+ 'use strict';var vue=require('vue');function B(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var lt=Symbol("regle-rule");function wt(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 J(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>J(n)))),r=="Map"&&(t=new Map([...e].map(n=>[J(n[0]),J(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,wt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=J(e[n]);}return t}function re(e){return e instanceof Date||e instanceof File?!1:typeof e=="object"&&e!==null&&!Array.isArray(e)}function Me(e){if(B(e))return !1;try{let t=null;if(e instanceof Date)t=e;else if(typeof e=="number"&&!isNaN(e))t=new Date(e);else if(typeof e=="string"){let r=new Date(e);if(r.toString()==="Invalid Date")return !1;t=r;}return !!t}catch{return !1}}var _e=(r=>(r.Inline="__inline",r.Async="__async",r))(_e||{});function ot(e,t){return e.some(r=>r[t])}function ut(e,t){return e.reduce((r,n)=>{let l=n[t]||[];return r.concat(l)},[])}function Y(e){try{return e.map(t=>vue.toValue(t))}catch{return []}}function it(e){return e.map(t=>t instanceof Function?vue.computed(t):vue.isRef(t)?t:vue.toRef(()=>t))}function st(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(p=>p.trim()).filter(p=>p.length>0).length:0}function Ve(e,...t){let{validator:r,type:n}=e,l=n==="__async"||r.constructor.name==="AsyncFunction";return {...{validator(d,...m){return e.validator(d,...Y(m.length?m:t))},message(d){return typeof e.message=="function"?e.message({...d,$params:Y(d?.$params?.length?d.$params:t)}):e.message},active(d){return typeof e.active=="function"?e.active({...d,$params:Y(d?.$params?.length?d.$params:t)}):e.active??!0},tooltip(d){return typeof e.tooltip=="function"?e.tooltip({...d,$params:Y(d?.$params?.length?d.$params:t)}):e.tooltip??[]},exec(d){let m=e.validator(d,...Y(t)),$;return m instanceof Promise?m.then(h=>($=h,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)):($=m,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:l,_params:it(t),_brand:lt}}function Ge(e){if(typeof e.validator=="function"){let r=Ve(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(st(e.validator)>1){let l=function(...f){return Ve(e,...f)};return l.validator=r.validator,l.message=r.message,l.active=r.active,l.tooltip=r.tooltip,l.type=r.type,l.exec=r.exec,l._validator=r.validator,l._message=r.message,l._active=r.active,l._tooltip=r.tooltip,l._type=e.type,l._message_pacthed=!1,l._tooltip_pacthed=!1,l._async=n,l}else return r}throw new Error("Validator must be a function")}function Ne(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),l=vue.shallowRef(new Map),f=vue.shallowRef(new Map);function p(o){let s=t.value.get(o);if(s)return s;{let i=vue.ref({});return t.value.set(o,i),i}}function d(o){let s=r.value.get(o);if(s)return s;{let i=vue.ref([]);return r.value.set(o,i),i}}function m(o,s,i){f.value.set(`${o}-${s}`,i);}function $(o,s){return f.value.get(`${o}-${s}`)}function h(o,s){o&&s!=null&&f.value.delete(`${o}-${s}`);}function _(o,s){n.value.set(o,s);}function A(o){return n.value.get(o)??!1}function a(o,s){e.value.set(o,s);}function D(o,s){let i=e.value.get(o);return i?C(s,i)?{valid:!0}:{valid:!1}:void 0}function C(o,s){let i=Object.keys(s),W=Object.keys(o);return W.length!==i.length||!W.every(k=>i.includes(k))?!1:W.every(k=>{let w=o[k],b=s[k];return !b||!w||typeof w=="function"||typeof b=="function"||typeof w=="number"||typeof w=="boolean"?!1:w._params?w._params?.every((z,y)=>{if(typeof b=="number"||typeof b=="boolean")return !0;{let I=Y(b._params),U=Y(w._params);return I?.[y]===U?.[y]}}):!0})}function N(o){let s=l.value.get(o);if(s)return s;{let i=vue.ref(!1),W=vue.ref(!0),H=vue.ref({}),k=vue.ref(!1);return l.value.set(o,{$pending:i,$valid:W,$metadata:H,$validating:k}),{$pending:i,$valid:W,$metadata:H,$validating:k}}}return vue.getCurrentScope()&&vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),l.value.clear(),f.value.clear();}),{addRuleDeclEntry:a,setDirtyEntry:_,checkRuleDeclEntry:D,getDirtyState:A,trySetRuleStatusRef:N,getFieldsEntry:p,getCollectionsEntry:d,getArrayStatus:$,addArrayStatus:m,deleteArrayStatus:h,arrayStatusStorage:f}}function Te(e){return e.value instanceof Date||e.value instanceof File?!1:re(e.value)}function We(e,t,r){let n=vue.effectScope(),l;return e instanceof Function?l=n.run(()=>e(t,r??0)):l=e,{scope:n,unwrapped:l}}function De(e,t,r){let n,l=(...f)=>new Promise(p=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...f])).then(p);},t);});return l.cancel=()=>{clearTimeout(n),n=void 0;},l}function Gt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let l=0;l<Math.min(r.length,n.length);l++){let f=Number(r[l]),p=Number(n[l]);if(f>p)return 1;if(p>f)return -1;if(!isNaN(f)&&isNaN(p))return 1;if(isNaN(f)&&!isNaN(p))return -1}return 0}var xe=Gt(vue.version,"3.5.0")!==-1;function Nt(){return Math.floor(Math.random()*Date.now()).toString()}function Ce(){return typeof window>"u"?Nt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function ct(e,t){return Te(e)||re(t.value)&&!B(t.value)&&!Object.entries(t.value).some(([r,n])=>$e(n)||typeof n=="function")}function ft(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function Rt(e){return !!e.value&&re(e.value)}function $e(e){return re(e)&&"_validator"in e}function ge(e){return typeof e.value!="function"}function pt(e){return re(e)&&"$fields"in e}function dt(e){return !!e&&"$rules"in e}function ke({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function yt({field:e}){return Object.entries(e.$rules??{}).map(([t,r])=>r.$tooltip).filter(t=>!!t).reduce((t,r)=>typeof r=="string"?t?.concat([r]):t?.concat(r),[])}function mt({fieldProperties:e,customMessages:t,rule:r,ruleKey:n,state:l,path:f,storage:p,$debounce:d,modifiers:m}){let $=vue.effectScope(),h={},_,A=vue.ref(!1),{$pending:a,$valid:D,$metadata:C,$validating:N}=p.trySetRuleStatusRef(`${f}.${n}`);function o(){$=vue.effectScope(),h=$.run(()=>{let b=vue.computed(()=>({$value:l.value,$error:e.$error.value,$dirty:e.$dirty.value,$pending:e.$pending.value,$valid:e.$valid.value,$invalid:e.$invalid.value,$rule:{$valid:D.value,$invalid:!D.value,$pending:a.value},$params:x.value,...C.value})),z=vue.computed(()=>ge(r)?typeof r.value.active=="function"?r.value.active(b.value):!!r.value.active:!0);function y(u){let c="",g=t?t[n]?.[u]:void 0;if(g&&(typeof g=="function"?c=g(b.value):c=g),ge(r)){let R=`_${u}_patched`;g&&!r.value[R]||(typeof r.value[u]=="function"?c=r.value[u](b.value):c=r.value[u]??"");}return c}let I=vue.computed(()=>{let u=y("message");return B(u)&&(u="This field is not valid"),u}),U=vue.computed(()=>y("tooltip")),ee=vue.computed(()=>ge(r)&&r.value.type?r.value.type:n),ne=vue.computed(()=>ge(r)?r.value.validator:r.value),x=vue.computed(()=>typeof r.value=="function"?[]:Y(r.value._params??[])),P=vue.computed(()=>`${f}.${ee.value}`);return {$active:z,$message:I,$type:ee,$validator:ne,$params:x,$path:P,$tooltip:U}}),_=vue.watch(h?.$params,()=>{(m.$autoDirty.value||m.$rewardEarly.value&&e.$error.value)&&H();});}o();function s(){D.value=!0,e.$dirty.value&&(a.value=!0);}async function i(){let b=!1;try{let z=h.$validator.value,y=z(l.value,...h.$params.value),I=l.value;s();let U;if(y instanceof Promise?U=await y:U=y,l.value!==I)return !0;if(typeof U=="boolean")b=U;else {let{$valid:ee,...ne}=U;b=ee,C.value=ne;}}catch{b=!1;}finally{a.value=!1;}return b}let W=De(i,d??200);async function H(){try{N.value=!0;let b=!1;if($e(r.value)&&r.value._async)b=await W();else {let z=h.$validator.value,y=z(l.value,...h.$params.value);if(y 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(y!=null)if(typeof y=="boolean")b=y;else {let{$valid:I,...U}=y;b=I,C.value=U;}}return D.value=b,b}catch{return !1}finally{N.value=!1;}}function k(){D.value=!0,C.value={},a.value=!1,N.value=!1,o();}function w(){_(),$.stop(),$=vue.effectScope();}return vue.reactive({...h,$pending:a,$valid:D,$metadata:C,$haveAsync:A,$validating:N,$validate:H,$unwatch:w,$watch:o,$reset:k})}function Ie({state:e,rulesDef:t,customMessages:r,path:n,fieldName:l,storage:f,options:p,externalErrors:d,onUnwatch:m,$isArray:$,initialState:h,shortcuts:_}){let A=vue.effectScope(),a,D=[],C,N,o,s,i=()=>{};function W(){let v=t.value,F=f.checkRuleDeclEntry(n,v);I.value=Object.fromEntries(Object.entries(v).filter(([V])=>V.startsWith("$"))),w(),y.value=Object.fromEntries(Object.entries(t.value).filter(([V])=>!V.startsWith("$")).map(([V,X])=>{if(X){let te=vue.toRef(()=>X);return [V,mt({fieldProperties:{$dirty:a.$dirty,$error:a.$error,$invalid:a.$invalid,$pending:a.$pending,$valid:a.$valid},modifiers:{$autoDirty:a.$autoDirty,$rewardEarly:a.$rewardEarly},customMessages:r,rule:te,ruleKey:V,state:e,path:n,storage:f,$debounce:I.value.$debounce})]}return []}).filter(V=>!!V.length)),a.processShortcuts(),H(),F?.valid!=null&&(a.$dirty.value=f.getDirtyState(n),a.$dirty.value&&i()),f.addRuleDeclEntry(n,v);}function H(){i=a.$debounce.value?De(z,a.$debounce.value??a.$haveAnyAsyncRule?100:0):z;}function k(){y.value&&Object.entries(y.value).forEach(([v,F])=>{F.$unwatch();}),o(),a.$dirty.value&&f.setDirtyEntry(n,a.$dirty.value),C?.(),N?.(),A.stop(),A=vue.effectScope(),D.forEach(v=>v.stop()),D=[],m?.(),s?.();}function w(){y.value&&Object.entries(y.value).forEach(([v,F])=>{F.$watch();}),a=A.run(()=>{let v=vue.ref(!1),F=vue.ref(!1),V=vue.computed(()=>v.value),X=vue.computed(()=>I.value.$debounce),te=vue.computed(()=>I.value.$lazy!=null?I.value.$lazy:vue.unref(p.lazy)!=null?vue.unref(p.lazy):!1),S=vue.computed(()=>I.value.$rewardEarly!=null?I.value.$rewardEarly:vue.unref(p.rewardEarly)!=null?vue.unref(p.rewardEarly):!1),O=vue.computed(()=>I.value.$clearExternalErrorsOnChange!=null?I.value.$clearExternalErrorsOnChange:vue.unref(p.clearExternalErrorsOnChange)!=null?vue.unref(p.clearExternalErrorsOnChange):!0),E=vue.computed(()=>I.value.$autoDirty!=null?I.value.$autoDirty:vue.unref(p.autoDirty)!=null?vue.unref(p.autoDirty):!S.value),G=vue.computed(()=>Object.entries(y.value).some(([Z,ae])=>ae.$validating)),me=vue.computed({get:()=>e.value,set(Z){C(),e.value=Z,b();}}),Ae=vue.computed(()=>ce.value&&!ve.value&&v.value),Ye=vue.computed(()=>Ae.value?ke({field:{$dirty:v.value,$externalErrors:d?.value,$rules:y.value}}):[]),Fe=vue.computed(()=>v.value?Me(h.value)&&Me(e.value)?h.value.getDate()!==e.value.getDate():h.value!==e.value:!1),Qe=vue.computed(()=>Fe.value),Xe=vue.computed(()=>yt({field:{$rules:y.value}})),Ze=vue.computed(()=>ke({field:{$dirty:v.value,$externalErrors:d?.value,$rules:y.value},silent:!0})),Ke=vue.computed(()=>E.value?V.value&&!(ce.value||ve.value):!(ce.value||ve.value)),ve=vue.computed(()=>F.value||!S.value?Object.entries(y.value).some(([Z,ae])=>ae.$pending):!1),ce=vue.computed(()=>d?.value?.length?!0:B(y.value)?!1:!S.value||S.value&&F.value?Object.entries(y.value).some(([Z,ae])=>!ae.$valid):!1),et=vue.computed(()=>l),je=vue.computed(()=>!!B(y.value)),tt=vue.computed(()=>d?.value?.length||je.value?!1:v.value&&!B(e.value)&&!G.value?Object.values(y.value).every(Z=>Z.$valid&&Z.$active):!1),Ct=vue.computed(()=>Object.entries(y.value).some(([Z,ae])=>ae.$haveAsync));function It(){_?.fields&&Object.entries(_.fields).forEach(([Z,ae])=>{let nt=vue.effectScope();rt[Z]=nt.run(()=>{let at=vue.ref();return vue.watchEffect(()=>{at.value=ae(vue.reactive({$dirty:v,$externalErrors:d?.value??[],$value:e,$silentValue:me,$rules:y,$error:Ae,$pending:ve,$invalid:ce,$valid:tt,$errors:Ye,$ready:Ke,$silentErrors:Ze,$anyDirty:V,$tooltips:Xe,$name:et,$inactive:je,$edited:Fe,$anyEdited:Qe}));}),at}),D.push(nt);});}let rt={};return vue.watch(ce,Z=>{Z||(F.value=!1);}),{$error:Ae,$pending:ve,$invalid:ce,$valid:tt,$debounce:X,$lazy:te,$errors:Ye,$ready:Ke,$silentErrors:Ze,$rewardEarly:S,$autoDirty:E,$clearExternalErrorsOnChange:O,$anyDirty:V,$edited:Fe,$anyEdited:Qe,$name:et,$haveAnyAsyncRule:Ct,$shortcuts:rt,$validating:G,$tooltips:Xe,$dirty:v,triggerPunishment:F,processShortcuts:It,$silentValue:me,$inactive:je}}),b(),o=vue.watch(a.$dirty,()=>{f.setDirtyEntry(n,a.$dirty.value);}),N=vue.watch(a.$valid,v=>{a.$rewardEarly.value&&v&&(a.triggerPunishment.value=!1);}),s=vue.watch(a.$haveAnyAsyncRule,H);}function b(){C=vue.watch(e,()=>{a.$autoDirty.value&&(a.$dirty.value||(a.$dirty.value=!0)),t.value instanceof Function&&W(),(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&i(),a.$rewardEarly.value!==!0&&a.$clearExternalErrorsOnChange.value&&u();},{deep:$?!0:xe?1:!0});}function z(){Object.values(y.value).forEach(v=>{v.$validate();});}let y=vue.ref({}),I=vue.ref({});W();function U(){u(),a.$dirty.value=!1,a.triggerPunishment.value=!1,f.setDirtyEntry(n,!1),Object.entries(y.value).forEach(([v,F])=>{F.$reset();}),!a.$lazy.value&&a.$autoDirty.value&&Object.values(y.value).forEach(v=>v.$validate());}function ee(v=!0,F=!1){a.$dirty.value||(a.$dirty.value=!0),F&&v?(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&i():v&&i();}async function ne(){try{let v=e.value;if(a.triggerPunishment.value=!0,!a.$dirty.value)a.$dirty.value=!0;else if(a.$autoDirty.value&&a.$dirty.value&&!a.$pending.value)return {result:!a.$error.value,data:v};return B(y.value)?{result:!0,data:v}:{result:(await Promise.allSettled(Object.entries(y.value).map(([X,te])=>te.$validate()))).every(X=>X.status==="fulfilled"?X.value===!0:!1),data:v}}catch{return {result:!1,data:e.value}}}function x(){k(),e.value=J(h),U();}function P(v=!0){return a.$dirty.value?e.value:v?{_null:!0}:null}function u(){d?.value?.length&&(d.value=[]);}!a.$lazy.value&&!a.$dirty.value&&a.$autoDirty.value&&i();let{$shortcuts:c,$validating:g,$autoDirty:R,$rewardEarly:T,$clearExternalErrorsOnChange:q,$haveAnyAsyncRule:K,$debounce:Q,$lazy:le,...ie}=a;return vue.reactive({...ie,$externalErrors:d,$value:e,$rules:y,...c,$reset:U,$touch:ee,$validate:ne,$unwatch:k,$watch:w,$resetAll:x,$extractDirtyFields:P,$clearExternalErrors:u})}function Le({$id:e,path:t,index:r,options:n,storage:l,stateValue:f,customMessages:p,rules:d,externalErrors:m,initialState:$,shortcuts:h,fieldName:_}){let A=d.$key?d.$key:Ce(),a=`${t}.${String(A)}`;typeof f.value=="object"&&f.value!=null&&(f.value.$id?a=`${t}.${f.value.$id}`:Object.defineProperties(f.value,{$id:{value:A,enumerable:!1,configurable:!1,writable:!1}}));let D=be({state:f,rulesDef:vue.toRef(()=>d),customMessages:p,path:a,storage:l,options:n,externalErrors:vue.toRef(m?.value??[],r),initialState:vue.computed(()=>$.value?.[r]),shortcuts:h,fieldName:_});if(D){let C=f.value?.$id;D.$id=C??String(A),l.addArrayStatus(e,D.$id,D);}return D}function St({state:e,rulesDef:t,customMessages:r,path:n,storage:l,options:f,externalErrors:p,initialState:d,shortcuts:m,fieldName:$}){let h=vue.effectScope(),_,A=vue.effectScope(),a,D=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let C=vue.ref(),N=vue.ref(e.value),o,s=vue.ref({}),i=l.getCollectionsEntry(n);a=A.run(()=>({isPrimitiveArray:vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(c=>typeof c!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(c=>$e(c)):!1)})),W(),w();function W(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(C.value=Ce(),Object.defineProperties(e.value,{$id:{value:C.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(C.value=e.value.$id)),!a.isPrimitiveArray.value&&(N.value=s.value.$value,Array.isArray(e.value)?i.value=e.value.map((u,c)=>{let{scope:g,unwrapped:R}=We(t.value.$each,vue.toRef(()=>u),c);g&&D.push(g);let T=Le({$id:C.value,path:n,customMessages:r,rules:R??{},stateValue:vue.toRef(()=>u),index:c,options:f,storage:l,externalErrors:vue.toRef(p?.value??{},"$each"),initialState:vue.computed(()=>d.value?.[c]),shortcuts:m,fieldName:$});return T||null}).filter(u=>!!u):i.value=[],s.value=Ie({state:e,rulesDef:t,customMessages:r,path:n,storage:l,options:f,externalErrors:vue.toRef(p?.value??{},"$self"),$isArray:!0,initialState:d,shortcuts:m,fieldName:$}));}function H(){if(Array.isArray(e.value)){let u=J(i.value);i.value=e.value.map((c,g)=>{let R=vue.toRef(()=>c);if(c.$id&&i.value.find(T=>T.$id===c.$id)){let T=l.getArrayStatus(C.value,c.$id);return T?(T.$value=R,T):null}else {let{scope:T,unwrapped:q}=We(t.value.$each,R,g);if(T&&D.push(T),q){let K=Le({$id:C.value,path:n,customMessages:r,rules:q,stateValue:R,index:g,options:f,storage:l,externalErrors:vue.toRef(p?.value??{},"$each"),initialState:vue.computed(()=>d.value?.[g]),shortcuts:m,fieldName:$});return K||null}}}).filter(c=>!!c),u.filter(c=>!e.value.find(g=>c.$id===g.$id)).forEach((c,g)=>{l.deleteArrayStatus(C.value,g.toString());});}else i.value=[];}function k(){o=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?W():H();},{deep:xe?1:!0,flush:"pre"});}function w(){k(),h=vue.effectScope(),_=h.run(()=>{let u=vue.computed({get:()=>e.value,set(S){o(),e.value=S,k();}}),c=vue.computed(()=>s.value.$dirty&&!!i.value.length&&i.value.every(S=>S.$dirty)),g=vue.computed(()=>s.value.$anyDirty||i.value.some(S=>S.$anyDirty)),R=vue.computed(()=>s.value.$invalid||i.value.some(S=>S.$invalid)),T=vue.computed(()=>(B(s.value.$rules)?!0:s.value.$valid)&&i.value.every(S=>S.$valid)),q=vue.computed(()=>s.value.$error||i.value.some(S=>S.$error)),K=vue.computed(()=>!(R.value||Q.value)),Q=vue.computed(()=>s.value.$pending||i.value.some(S=>S.$pending)),le=vue.computed(()=>s.value.$edited&&!!i.value.length&&i.value.every(S=>S.$edited)),ie=vue.computed(()=>s.value.$anyEdited||i.value.some(S=>S.$anyEdited)),v=vue.computed(()=>({$self:s.value.$errors,$each:i.value.map(S=>S.$errors)})),F=vue.computed(()=>({$self:s.value.$silentErrors,$each:i.value.map(S=>S.$silentErrors)})),V=vue.computed(()=>$);function X(){m?.collections&&Object.entries(m?.collections).forEach(([S,O])=>{let E=vue.effectScope();te[S]=E.run(()=>{let G=vue.ref();return vue.watchEffect(()=>{G.value=O(vue.reactive({$dirty:c,$error:q,$silentValue:u,$pending:Q,$invalid:R,$valid:T,$errors:v,$ready:K,$silentErrors:F,$anyDirty:g,$name:V,$each:i,$field:s,$value:e,$edited:le,$anyEdited:ie}));}),G}),D.push(E);});}let te={};return X(),{$dirty:c,$anyDirty:g,$invalid:R,$valid:T,$error:q,$pending:Q,$errors:v,$silentErrors:F,$ready:K,$name:V,$shortcuts:te,$silentValue:u,$edited:le,$anyEdited:ie}}),a.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),o());}function b(){o&&o(),s.value&&s.value.$unwatch(),i.value&&i.value.forEach(u=>{"$dirty"in u&&u.$unwatch();}),h.stop(),h=vue.effectScope(),A.stop(),A=vue.effectScope(!0),D.forEach(u=>u.stop()),D=[];}function z(u=!0,c=!1){s.value.$touch(u,c),i.value.forEach(g=>{g.$touch(u,c);});}function y(){s.value.$reset(),i.value.forEach(u=>{u.$reset();});}async function I(){let u=e.value;try{return {result:(await Promise.allSettled([s.value.$validate(),...i.value.map(R=>R.$validate())])).every(R=>R.status==="fulfilled"?R.value.result===!0:!1),data:u}}catch{return {result:!1,data:u}}}function U(){s.value.$clearExternalErrors(),i.value.forEach(u=>{u.$clearExternalErrors();});}function ee(u=!0){let c=i.value.map(g=>{if(pt(g))return g.$extractDirtyFields(u)});return u&&c.every(g=>B(g))&&(c=[]),c}function ne(){b(),e.value=J(d.value),y();}let{$shortcuts:x,...P}=_;return vue.reactive({$field:s,...P,...x,$each:i,$value:e,$validate:I,$unwatch:b,$watch:w,$touch:z,$reset:y,$resetAll:ne,$extractDirtyFields:ee,$clearExternalErrors:U})}function Oe({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:l,validationGroups:f,initialState:p,fieldName:d,...m}){let $=vue.effectScope(),h,_=[],A=null,a=null,D=null;async function N(x=!0){let P=Object.entries(e.value),u=Object.fromEntries(P.filter(([R,T])=>!!T).map(([R,T])=>{if(T){let q=vue.toRef(t.value,R),K=vue.toRef(()=>T),Q=vue.toRef(l?.value??{},R),le=vue.computed(()=>p?.value?.[R]);return [R,be({state:q,rulesDef:K,path:r?`${r}.${R}`:R,externalErrors:Q,initialState:le,fieldName:R,...m})]}return []})),c=Object.fromEntries(Object.entries(vue.unref(l)??{}).filter(([R,T])=>!(R in e.value)&&!!T).map(([R])=>{let T=vue.toRef(t.value,R),q=vue.computed(()=>p?.value?.[R]);return [R,be({state:T,rulesDef:vue.computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:vue.toRef(l?.value??{},R),initialState:q,fieldName:R,...m})]})),g=Object.fromEntries(Object.entries(t.value).filter(([R])=>!(R in e.value)&&!(R in(c.value??{}))).map(([R])=>{let T=vue.toRef(t.value,R),q=vue.computed(()=>p?.value?.[R]);return [R,be({state:T,rulesDef:vue.computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:vue.toRef(l?.value??{},R),initialState:q,fieldName:R,...m})]}));o.value={...u,...c,...g},x&&k();}let o=m.storage.getFieldsEntry(r);N();function s(){a?.(),Object.values(o.value).forEach(x=>{x.$reset();}),m.onReset?.(),W();}function i(x=!0,P=!1){Object.values(o.value).forEach(u=>{u.$touch(x,P);});}function W(){l?.value&&(a=vue.watch(l,()=>{w(),N();},{deep:!0}));}function H(){D=vue.watch(t,()=>{w(),N(),i(!0,!0);},{flush:"sync"});}function k(){n&&(A?.(),A=vue.watch(n,()=>{w(),N();},{deep:!0,flush:"post"}),W()),H(),$=vue.effectScope(),h=$.run(()=>{let x=vue.computed({get:()=>t.value,set(O){w(),t.value=O,N();}}),P=vue.computed(()=>!!Object.entries(o.value).length&&Object.entries(o.value).every(([O,E])=>E?.$dirty)),u=vue.computed(()=>Object.entries(o.value).some(([O,E])=>E?.$anyDirty)),c=vue.computed(()=>Object.entries(o.value).some(([O,E])=>E?.$invalid)),g=vue.computed(()=>{let O=Object.entries(o.value).filter(([E,G])=>dt(G)?!G.$inactive:!0);return O.length?O.every(([E,G])=>G?.$valid):!1}),R=vue.computed(()=>u.value&&!Q.value&&c.value),T=vue.computed(()=>vue.unref(m.options.rewardEarly)!=null?vue.unref(m.options.rewardEarly):!1),q=vue.computed(()=>vue.unref(m.options.autoDirty)!=null?vue.unref(m.options.autoDirty):!T.value),K=vue.computed(()=>q.value?u.value&&!(c.value||Q.value):!(c.value||Q.value)),Q=vue.computed(()=>Object.entries(o.value).some(([O,E])=>E?.$pending)),le=vue.computed(()=>Object.fromEntries(Object.entries(o.value).map(([O,E])=>[O,E?.$errors]))),ie=vue.computed(()=>Object.fromEntries(Object.entries(o.value).map(([O,E])=>[O,E?.$silentErrors]))),v=vue.computed(()=>!!Object.entries(o.value).length&&Object.entries(o.value).every(([O,E])=>E?.$edited)),F=vue.computed(()=>Object.entries(o.value).some(([O,E])=>E?.$anyEdited)),V=vue.computed(()=>d);function X(){m.shortcuts?.nested&&Object.entries(m.shortcuts.nested).forEach(([O,E])=>{let G=vue.effectScope();S[O]=G.run(()=>{let me=vue.ref();return vue.watchEffect(()=>{me.value=E(vue.reactive({$dirty:P,$value:t,$silentValue:x,$error:R,$pending:Q,$invalid:c,$valid:g,$ready:K,$anyDirty:u,$name:V,$silentErrors:ie,$errors:le,$fields:o,$edited:v,$anyEdited:F}));}),me}),_.push(G);});}let te=vue.computed({get:()=>f?Object.fromEntries(Object.entries(f?.(o.value)??{}).map(([O,E])=>E.length?[O,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(G=>[G,ot(E,G)])),...Object.fromEntries(["$errors","$silentErrors"].map(G=>[G,ut(E,G)]))}]:[])):{},set(){}}),S={};return X(),{$dirty:P,$anyDirty:u,$invalid:c,$valid:g,$error:R,$pending:Q,$errors:le,$silentErrors:ie,$ready:K,$name:V,$shortcuts:S,$groups:te,$silentValue:x,$edited:v,$anyEdited:F}});}function w(){A?.(),a?.(),D?.(),_.forEach(x=>x.stop()),_=[],$.stop(),o.value&&Object.entries(o.value).forEach(([x,P])=>{P.$unwatch();});}function b(){Object.entries(o.value).forEach(([x,P])=>{P.$clearExternalErrors();});}async function z(){w(),t.value=J({...p.value??{}}),s(),N();}function y(x){return x.filter(([P,u])=>re(u)?!(u&&typeof u=="object"&&"_null"in u)&&!B(u):Array.isArray(u)?u.length:!0)}function I(x=!0){let P=Object.entries(o.value).map(([u,c])=>[u,c.$extractDirtyFields(x)]);return x&&(P=y(P)),Object.fromEntries(P)}async function U(){try{let x=t.value;return {result:(await Promise.allSettled(Object.values(o.value).map(c=>c.$validate()))).every(c=>c.status==="fulfilled"?c.value.result===!0:!1),data:x}}catch{return {result:!1,data:t.value}}}let{$shortcuts:ee,...ne}=h;return vue.reactive({...ne,...ee,$fields:o,$value:t,$resetAll:z,$reset:s,$touch:i,$validate:U,$unwatch:w,$watch:k,$clearExternalErrors:b,$extractDirtyFields:I})}function be({rulesDef:e,externalErrors:t,...r}){if(ft(e,r.state))return St({rulesDef:e,externalErrors:t,...r});if(ct(r.state,e)){if(Te(r.state))return Oe({rulesDef:e,externalErrors:t,...r});{let n=vue.ref({}),l=vue.watch(n,d=>{l(),r.state.value=d;},{deep:!0}),{state:f,...p}=r;return Oe({rulesDef:e,externalErrors:t,...p,state:n})}}else if(Rt(e))return Ie({rulesDef:e,externalErrors:t,...r})}function ye({initialState:e,options:t,scopeRules:r,state:n,customRules:l,shortcuts:f,onReset:p}){let d=Ne(),m=vue.ref();return m.value=Oe({rootRules:r,rulesDef:r,state:n,customMessages:l?.(),storage:d,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:f,fieldName:"root",path:"",onReset:p}),vue.getCurrentScope()&&vue.onScopeDispose(()=>{m.value?.$unwatch();}),vue.reactive({regle:m})}function ze(e,t,r){let n={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function l(f,p,d){let m=vue.isRef(p)?p:vue.computed(typeof p=="function"?p:()=>p),$={...n,...d},h=vue.isRef(f)?f:vue.ref(f),_=vue.ref({...J(h.value)});function A(){_.value={...J(h.value)};}return {r$:ye({scopeRules:m,state:h,options:$,initialState:_,customRules:e,shortcuts:r,onReset:A}).regle}}return l}var Dt=ze();function qe(){function e(t,r){return r}return e}var Je=qe();function xt({rules:e,modifiers:t,shortcuts:r}){let n=ze(e,t,r),l=qe();return {useRegle:n,inferRules:l}}
2
+ exports.InternalRuleType=_e;exports.createRule=Ge;exports.defineRegleConfig=xt;exports.inferRules=Je;exports.unwrapRuleParameters=Y;exports.useRegle=Dt;exports.useRootStorage=ye;
@@ -1,2 +1,2 @@
1
- import {toValue,version,ref,getCurrentScope,onScopeDispose,reactive,shallowRef,effectScope,computed,isRef,toRef,unref,watch,watchEffect}from'vue';function B(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var tt=Symbol("regle-rule");function xt(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 q(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>q(n)))),r=="Map"&&(t=new Map([...e].map(n=>[q(n[0]),q(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,xt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=q(e[n]);}return t}function Z(e){return e instanceof Date||e instanceof File?!1:typeof e=="object"&&e!==null&&!Array.isArray(e)}var we=(r=>(r.Inline="__inline",r.Async="__async",r))(we||{});function rt(e,t){return e.some(r=>r[t])}function nt(e,t){return e.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[])}function L(e){try{return e.map(t=>toValue(t))}catch{return []}}function at(e){return e.map(t=>t instanceof Function?computed(t):isRef(t)?t:toRef(()=>t))}function lt(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(y=>y.trim()).filter(y=>y.length>0).length:0}function Oe(e,...t){let{validator:r,type:n}=e,a=n==="__async"||r.constructor.name==="AsyncFunction";return {...{validator(d,...h){return e.validator(d,...L(h.length?h:t))},message(d){return typeof e.message=="function"?e.message({...d,$params:L(d?.$params?.length?d.$params:t)}):e.message},active(d){return typeof e.active=="function"?e.active({...d,$params:L(d?.$params?.length?d.$params:t)}):e.active??!0},tooltip(d){return typeof e.tooltip=="function"?e.tooltip({...d,$params:L(d?.$params?.length?d.$params:t)}):e.tooltip??[]},exec(d){let h=e.validator(d,...L(t)),$;return h instanceof Promise?h.then(D=>($=D,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)):($=h,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:a,_params:at(t),_brand:tt}}function Ae(e){if(typeof e.validator=="function"){let r=Oe(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(lt(e.validator)>1){let a=function(...f){return Oe(e,...f)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.tooltip=r.tooltip,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._tooltip=r.tooltip,a._type=e.type,a._message_pacthed=!1,a._tooltip_pacthed=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function Fe(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),f=shallowRef(new Map);function y(u){let s=t.value.get(u);if(s)return s;{let c=ref({});return t.value.set(u,c),c}}function d(u){let s=r.value.get(u);if(s)return s;{let c=ref([]);return r.value.set(u,c),c}}function h(u,s,c){f.value.set(`${u}-${s}`,c);}function $(u,s){return f.value.get(`${u}-${s}`)}function D(u,s){u&&s!=null&&f.value.delete(`${u}-${s}`);}function j(u,s){n.value.set(u,s);}function A(u){return n.value.get(u)??!1}function l(u,s){e.value.set(u,s);}function E(u,s){let c=e.value.get(u);return c?C(s,c)?{valid:!0}:{valid:!1}:void 0}function C(u,s){let c=Object.keys(s),V=Object.keys(u);return V.length!==c.length||!V.every(G=>c.includes(G))?!1:V.every(G=>{let P=u[G],b=s[G];return !b||!P||typeof P=="function"||typeof b=="function"||typeof P=="number"||typeof P=="boolean"?!1:P._params?P._params?.every((k,m)=>{if(typeof b=="number"||typeof b=="boolean")return !0;{let I=L(b._params),N=L(P._params);return I?.[m]===N?.[m]}}):!0})}function _(u){let s=a.value.get(u);if(s)return s;{let c=ref(!1),V=ref(!0),W=ref({}),G=ref(!1);return a.value.set(u,{$pending:c,$valid:V,$metadata:W,$validating:G}),{$pending:c,$valid:V,$metadata:W,$validating:G}}}return getCurrentScope()&&onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),f.value.clear();}),{addRuleDeclEntry:l,setDirtyEntry:j,checkRuleDeclEntry:E,getDirtyState:A,trySetRuleStatusRef:_,getFieldsEntry:y,getCollectionsEntry:d,getArrayStatus:$,addArrayStatus:h,deleteArrayStatus:D,arrayStatusStorage:f}}function ge(e){return e.value instanceof Date||e.value instanceof File?!1:Z(e.value)}function Me(e,t,r){let n=effectScope(),a;return e instanceof Function?a=n.run(()=>e(t,r??0)):a=e,{scope:n,unwrapped:a}}function Se(e,t,r){let n,a=(...f)=>new Promise(y=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...f])).then(y);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a}function Mt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let f=Number(r[a]),y=Number(n[a]);if(f>y)return 1;if(y>f)return -1;if(!isNaN(f)&&isNaN(y))return 1;if(isNaN(f)&&!isNaN(y))return -1}return 0}var he=Mt(version,"3.5.0")!==-1;function jt(){return Math.floor(Math.random()*Date.now()).toString()}function be(){return typeof window>"u"?jt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function ot(e,t){return ge(e)||Z(t.value)&&!B(t.value)&&!Object.entries(t.value).some(([r,n])=>Re(n)||typeof n=="function")}function ut(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function it(e){return !!e.value&&Z(e.value)}function Re(e){return Z(e)&&"_validator"in e}function pe(e){return typeof e.value!="function"}function st(e){return Z(e)&&"$fields"in e}function ct(e){return !!e&&"$rules"in e}function je({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function ft({field:e}){return Object.entries(e.$rules??{}).map(([t,r])=>r.$tooltip).filter(t=>!!t).reduce((t,r)=>typeof r=="string"?t?.concat([r]):t?.concat(r),[])}function Rt({fieldProperties:e,customMessages:t,rule:r,ruleKey:n,state:a,path:f,storage:y,$debounce:d,modifiers:h}){let $=effectScope(),D={},j,A=ref(!1),{$pending:l,$valid:E,$metadata:C,$validating:_}=y.trySetRuleStatusRef(`${f}.${n}`);function u(){$=effectScope(),D=$.run(()=>{let b=computed(()=>({$value:a.value,$error:e.$error.value,$dirty:e.$dirty.value,$pending:e.$pending.value,$valid:e.$valid.value,$invalid:e.$invalid.value,$rule:{$valid:E.value,$invalid:!E.value,$pending:l.value},$params:x.value,...C.value})),k=computed(()=>pe(r)?typeof r.value.active=="function"?r.value.active(b.value):!!r.value.active:!0);function m(o){let i="",g=t?t[n]?.[o]:void 0;if(g&&(typeof g=="function"?i=g(b.value):i=g),pe(r)){let R=`_${o}_patched`;g&&!r.value[R]||(typeof r.value[o]=="function"?i=r.value[o](b.value):i=r.value[o]??"");}return i}let I=computed(()=>{let o=m("message");return B(o)&&(o="This field is not valid"),o}),N=computed(()=>m("tooltip")),Q=computed(()=>pe(r)&&r.value.type?r.value.type:n),K=computed(()=>pe(r)?r.value.validator:r.value),x=computed(()=>typeof r.value=="function"?[]:L(r.value._params??[])),w=computed(()=>`${f}.${Q.value}`);return {$active:k,$message:I,$type:Q,$validator:K,$params:x,$path:w,$tooltip:N}}),j=watch(D?.$params,()=>{(h.$autoDirty.value||h.$rewardEarly.value&&e.$error.value)&&W();});}u();function s(){E.value=!0,e.$dirty.value&&(l.value=!0);}async function c(){let b=!1;try{let k=D.$validator.value,m=k(a.value,...D.$params.value),I=a.value;s();let N;if(m instanceof Promise?N=await m:N=m,a.value!==I)return !0;if(typeof N=="boolean")b=N;else {let{$valid:Q,...K}=N;b=Q,C.value=K;}}catch{b=!1;}finally{l.value=!1;}return b}let V=Se(c,d??200);async function W(){try{_.value=!0;let b=!1;if(Re(r.value)&&r.value._async)b=await V();else {let k=D.$validator.value,m=k(a.value,...D.$params.value);if(m 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(m!=null)if(typeof m=="boolean")b=m;else {let{$valid:I,...N}=m;b=I,C.value=N;}}return E.value=b,b}catch{return !1}finally{_.value=!1;}}function G(){E.value=!0,C.value={},l.value=!1,_.value=!1,u();}function P(){j(),$.stop(),$=effectScope();}return reactive({...D,$pending:l,$valid:E,$metadata:C,$haveAsync:A,$validating:_,$validate:W,$unwatch:P,$watch:u,$reset:G})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:f,options:y,externalErrors:d,onUnwatch:h,$isArray:$,initialState:D,shortcuts:j}){let A=effectScope(),l,E=[],C,_,u,s,c=()=>{};function V(){let v=t.value,F=f.checkRuleDeclEntry(n,v);I.value=Object.fromEntries(Object.entries(v).filter(([S])=>S.startsWith("$"))),P(),m.value=Object.fromEntries(Object.entries(t.value).filter(([S])=>!S.startsWith("$")).map(([S,p])=>{if(p){let O=toRef(()=>p);return [S,Rt({fieldProperties:{$dirty:l.$dirty,$error:l.$error,$invalid:l.$invalid,$pending:l.$pending,$valid:l.$valid},modifiers:{$autoDirty:l.$autoDirty,$rewardEarly:l.$rewardEarly},customMessages:r,rule:O,ruleKey:S,state:e,path:n,storage:f,$debounce:I.value.$debounce})]}return []}).filter(S=>!!S.length)),l.processShortcuts(),W(),F?.valid!=null&&(l.$dirty.value=f.getDirtyState(n),l.$dirty.value&&c()),f.addRuleDeclEntry(n,v);}function W(){c=l.$debounce.value?Se(k,l.$debounce.value??l.$haveAnyAsyncRule?100:0):k;}function G(){m.value&&Object.entries(m.value).forEach(([v,F])=>{F.$unwatch();}),u(),l.$dirty.value&&f.setDirtyEntry(n,l.$dirty.value),C?.(),_?.(),A.stop(),A=effectScope(),E.forEach(v=>v.stop()),E=[],h?.(),s?.();}function P(){m.value&&Object.entries(m.value).forEach(([v,F])=>{F.$watch();}),l=A.run(()=>{let v=ref(!1),F=ref(!1),S=computed(()=>v.value),p=computed(()=>I.value.$debounce),O=computed(()=>I.value.$lazy!=null?I.value.$lazy:unref(y.lazy)),X=computed(()=>Be.value===!0?!1:I.value.$rewardEarly!=null?I.value.$rewardEarly:unref(y.rewardEarly)),ve=computed(()=>I.value.$clearExternalErrorsOnChange!=null?I.value.$clearExternalErrorsOnChange:unref(y.clearExternalErrorsOnChange)),Be=computed(()=>I.value.$autoDirty!=null?I.value.$autoDirty:unref(y.autoDirty)),Le=computed(()=>Object.entries(m.value).some(([z,te])=>te.$validating)),He=computed({get:()=>e.value,set(z){C(),e.value=z,b();}}),Ie=computed(()=>fe.value&&!$e.value&&v.value),qe=computed(()=>Ie.value?je({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value}}):[]),ze=computed(()=>ft({field:{$rules:m.value}})),Je=computed(()=>je({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value},silent:!0})),Ye=computed(()=>!(fe.value||$e.value)),$e=computed(()=>F.value||!X.value?Object.entries(m.value).some(([z,te])=>te.$pending):!1),fe=computed(()=>d?.value?.length?!0:B(m.value)?!1:!X.value||X.value&&F.value?Object.entries(m.value).some(([z,te])=>!te.$valid):!1),Qe=computed(()=>a),Pe=computed(()=>!!B(m.value)),Xe=computed(()=>d?.value?.length||Pe.value?!1:v.value&&!B(e.value)&&!Le.value?Object.values(m.value).every(z=>z.$valid&&z.$active):!1),Tt=computed(()=>Object.entries(m.value).some(([z,te])=>te.$haveAsync));function Et(){j?.fields&&Object.entries(j.fields).forEach(([z,te])=>{let Ke=effectScope();Ze[z]=Ke.run(()=>{let et=ref();return watchEffect(()=>{et.value=te(reactive({$dirty:v,$externalErrors:d?.value??[],$value:e,$silentValue:He,$rules:m,$error:Ie,$pending:$e,$invalid:fe,$valid:Xe,$errors:qe,$ready:Ye,$silentErrors:Je,$anyDirty:S,$tooltips:ze,$name:Qe,$inactive:Pe}));}),et}),E.push(Ke);});}let Ze={};return watch(fe,z=>{z||(F.value=!1);}),{$error:Ie,$pending:$e,$invalid:fe,$valid:Xe,$debounce:p,$lazy:O,$errors:qe,$ready:Ye,$silentErrors:Je,$rewardEarly:X,$autoDirty:Be,$clearExternalErrorsOnChange:ve,$anyDirty:S,$name:Qe,$haveAnyAsyncRule:Tt,$shortcuts:Ze,$validating:Le,$tooltips:ze,$dirty:v,triggerPunishment:F,processShortcuts:Et,$silentValue:He,$inactive:Pe}}),b(),u=watch(l.$dirty,()=>{f.setDirtyEntry(n,l.$dirty.value);}),_=watch(l.$valid,v=>{l.$rewardEarly.value&&v&&(l.triggerPunishment.value=!1);}),s=watch(l.$haveAnyAsyncRule,W);}function b(){C=watch(e,()=>{l.$autoDirty.value&&(l.$dirty.value||(l.$dirty.value=!0)),t.value instanceof Function&&V(),(l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&c(),l.$rewardEarly.value!==!0&&l.$clearExternalErrorsOnChange.value&&o();},{deep:$?!0:he?1:!0});}function k(){Object.values(m.value).forEach(v=>{v.$validate();});}let m=ref({}),I=ref({});V();function N(){o(),l.$dirty.value=!1,f.setDirtyEntry(n,!1),Object.entries(m.value).forEach(([v,F])=>{F.$reset();}),!l.$lazy.value&&l.$autoDirty.value&&Object.values(m.value).forEach(v=>v.$validate());}function Q(v=!0,F=!1){l.$dirty.value||(l.$dirty.value=!0),F&&v?(l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&c():v&&c();}async function K(){try{let v=e.value;if(l.triggerPunishment.value=!0,!l.$dirty.value)l.$dirty.value=!0;else if(l.$autoDirty.value&&l.$dirty.value&&!l.$pending.value)return {result:!l.$error.value,data:v};return B(m.value)?{result:!0,data:v}:{result:(await Promise.allSettled(Object.entries(m.value).map(([p,O])=>O.$validate()))).every(p=>p.status==="fulfilled"?p.value===!0:!1),data:v}}catch{return {result:!1,data:e.value}}}function x(){G(),e.value=q(D),N();}function w(v=!0){return l.$dirty.value?e.value:v?{_null:!0}:null}function o(){d?.value?.length&&(d.value=[]);}!l.$lazy.value&&!l.$dirty.value&&l.$autoDirty.value&&c();let{$shortcuts:i,$validating:g,$autoDirty:R,$rewardEarly:T,$clearExternalErrorsOnChange:U,$haveAnyAsyncRule:Y,$debounce:ee,$lazy:ae,...le}=l;return reactive({...le,$externalErrors:d,$value:e,$rules:m,...i,$reset:N,$touch:Q,$validate:K,$unwatch:G,$watch:P,$resetAll:x,$extractDirtyFields:w,$clearExternalErrors:o})}function Ge({$id:e,path:t,index:r,options:n,storage:a,stateValue:f,customMessages:y,rules:d,externalErrors:h,initialState:$,shortcuts:D,fieldName:j}){let A=d.$key?d.$key:be(),l=`${t}.${String(A)}`;typeof f.value=="object"&&f.value!=null&&(f.value.$id?l=`${t}.${f.value.$id}`:Object.defineProperties(f.value,{$id:{value:A,enumerable:!1,configurable:!1,writable:!1}}));let E=ye({state:f,rulesDef:toRef(()=>d),customMessages:y,path:l,storage:a,options:n,externalErrors:toRef(h?.value??[],r),initialState:$?.[r],shortcuts:D,fieldName:j});if(E){let C=f.value?.$id;E.$id=C??String(A),a.addArrayStatus(e,E.$id,E);}return E}function yt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:f,externalErrors:y,initialState:d,shortcuts:h,fieldName:$}){let D=effectScope(),j,A=effectScope(),l,E=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let C=ref(),_=ref(e.value),u,s=ref({}),c=a.getCollectionsEntry(n);l=A.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(i=>typeof i!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(i=>Re(i)):!1)})),V(),P();function V(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(C.value=be(),Object.defineProperties(e.value,{$id:{value:C.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(C.value=e.value.$id)),!l.isPrimitiveArray.value&&(_.value=s.value.$value,Array.isArray(e.value)?c.value=e.value.map((o,i)=>{let{scope:g,unwrapped:R}=Me(t.value.$each,toRef(()=>o),i);g&&E.push(g);let T=Ge({$id:C.value,path:n,customMessages:r,rules:R??{},stateValue:toRef(()=>o),index:i,options:f,storage:a,externalErrors:toRef(y?.value??{},"$each"),initialState:d?.[i],shortcuts:h,fieldName:$});return T||null}).filter(o=>!!o):c.value=[],s.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:f,externalErrors:toRef(y?.value??{},"$self"),$isArray:!0,initialState:d,shortcuts:h,fieldName:$}));}function W(){if(Array.isArray(e.value)){let o=q(c.value);c.value=e.value.map((i,g)=>{let R=toRef(()=>i);if(i.$id&&c.value.find(T=>T.$id===i.$id)){let T=a.getArrayStatus(C.value,i.$id);return T?(T.$value=R,T):null}else {let{scope:T,unwrapped:U}=Me(t.value.$each,R,g);if(T&&E.push(T),U){let Y=Ge({$id:C.value,path:n,customMessages:r,rules:U,stateValue:R,index:g,options:f,storage:a,externalErrors:toRef(y?.value??{},"$each"),initialState:d?.[g],shortcuts:h,fieldName:$});return Y||null}}}).filter(i=>!!i),o.filter(i=>!e.value.find(g=>i.$id===g.$id)).forEach((i,g)=>{a.deleteArrayStatus(C.value,g.toString());});}else c.value=[];}function G(){u=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?V():W();},{deep:he?1:!0,flush:"pre"});}function P(){G(),D=effectScope(),j=D.run(()=>{let o=computed({get:()=>e.value,set(p){u(),e.value=p,G();}}),i=computed(()=>s.value.$dirty&&c.value.every(p=>p.$dirty)),g=computed(()=>s.value.$anyDirty||c.value.some(p=>p.$anyDirty)),R=computed(()=>s.value.$invalid||c.value.some(p=>p.$invalid)),T=computed(()=>(B(s.value.$rules)?!0:s.value.$valid)&&c.value.every(p=>p.$valid)),U=computed(()=>s.value.$error||c.value.some(p=>p.$error)),Y=computed(()=>!(R.value||ee.value)),ee=computed(()=>s.value.$pending||c.value.some(p=>p.$pending)),ae=computed(()=>({$self:s.value.$errors,$each:c.value.map(p=>p.$errors)})),le=computed(()=>({$self:s.value.$silentErrors,$each:c.value.map(p=>p.$silentErrors)})),v=computed(()=>$);function F(){h?.collections&&Object.entries(h?.collections).forEach(([p,O])=>{let X=effectScope();S[p]=X.run(()=>{let ve=ref();return watchEffect(()=>{ve.value=O(reactive({$dirty:i,$error:U,$silentValue:o,$pending:ee,$invalid:R,$valid:T,$errors:ae,$ready:Y,$silentErrors:le,$anyDirty:g,$name:v,$each:c,$field:s,$value:e}));}),ve}),E.push(X);});}let S={};return F(),{$dirty:i,$anyDirty:g,$invalid:R,$valid:T,$error:U,$pending:ee,$errors:ae,$silentErrors:le,$ready:Y,$name:v,$shortcuts:S,$silentValue:o}}),l.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),u());}function b(){u&&u(),s.value&&s.value.$unwatch(),c.value&&c.value.forEach(o=>{"$dirty"in o&&o.$unwatch();}),D.stop(),D=effectScope(),A.stop(),A=effectScope(!0),E.forEach(o=>o.stop()),E=[];}function k(o=!0,i=!1){s.value.$touch(o,i),c.value.forEach(g=>{g.$touch(o,i);});}function m(){s.value.$reset(),c.value.forEach(o=>{o.$reset();});}async function I(){let o=e.value;try{return {result:(await Promise.allSettled([s.value.$validate(),...c.value.map(R=>R.$validate())])).every(R=>R.status==="fulfilled"?R.value.result===!0:!1),data:o}}catch{return {result:!1,data:o}}}function N(){s.value.$clearExternalErrors(),c.value.forEach(o=>{o.$clearExternalErrors();});}function Q(o=!0){let i=c.value.map(g=>{if(st(g))return g.$extractDirtyFields(o)});return o&&i.every(g=>B(g))&&(i=[]),i}function K(){b(),e.value=q(d),m();}let{$shortcuts:x,...w}=j;return reactive({$field:s,...w,...x,$each:c,$value:e,$validate:I,$unwatch:b,$watch:P,$touch:k,$reset:m,$resetAll:K,$extractDirtyFields:Q,$clearExternalErrors:N})}function Ce({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:a,validationGroups:f,initialState:y,fieldName:d,...h}){let $=effectScope(),D,j=[],A=null,l=null,E=null;async function _(x=!0){let w=Object.entries(e.value),o=Object.fromEntries(w.filter(([R,T])=>!!T).map(([R,T])=>{if(T){let U=toRef(t.value,R),Y=toRef(()=>T),ee=toRef(a?.value??{},R);return [R,ye({state:U,rulesDef:Y,path:r?`${r}.${R}`:R,externalErrors:ee,initialState:y?.[R],fieldName:R,...h})]}return []})),i=Object.fromEntries(Object.entries(unref(a)??{}).filter(([R,T])=>!(R in e.value)&&!!T).map(([R])=>{let T=toRef(t.value,R);return [R,ye({state:T,rulesDef:computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:toRef(a?.value??{},R),initialState:y?.[R],fieldName:R,...h})]})),g=Object.fromEntries(Object.entries(t.value).filter(([R])=>!(R in e.value)&&!(R in(i.value??{}))).map(([R])=>{let T=toRef(t.value,R);return [R,ye({state:T,rulesDef:computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:toRef(a?.value??{},R),initialState:y?.[R],fieldName:R,...h})]}));u.value={...o,...i,...g},x&&G();}let u=h.storage.getFieldsEntry(r);_();function s(){l?.(),Object.values(u.value).forEach(x=>{x.$reset();}),V();}function c(x=!0,w=!1){Object.values(u.value).forEach(o=>{o.$touch(x,w);});}function V(){a?.value&&(l=watch(a,()=>{P(),_();},{deep:!0}));}function W(){E=watch(t,()=>{P(),_(),c(!0,!0);},{flush:"sync"});}function G(){n&&(A?.(),A=watch(n,()=>{P(),_();},{deep:!0,flush:"post"}),V()),W(),$=effectScope(),D=$.run(()=>{let x=computed({get:()=>t.value,set(S){P(),t.value=S,_();}}),w=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([S,p])=>p?.$dirty)),o=computed(()=>Object.entries(u.value).some(([S,p])=>p?.$anyDirty)),i=computed(()=>Object.entries(u.value).some(([S,p])=>p?.$invalid)),g=computed(()=>{let S=Object.entries(u.value).filter(([p,O])=>ct(O)?!O.$inactive:!0);return S.length?S.every(([p,O])=>O?.$valid):!1}),R=computed(()=>o.value&&!U.value&&i.value),T=computed(()=>unref(h.options.autoDirty)?o.value&&!(i.value||U.value):!(i.value||U.value)),U=computed(()=>Object.entries(u.value).some(([S,p])=>p?.$pending)),Y=computed(()=>Object.fromEntries(Object.entries(u.value).map(([S,p])=>[S,p?.$errors]))),ee=computed(()=>Object.fromEntries(Object.entries(u.value).map(([S,p])=>[S,p?.$silentErrors]))),ae=computed(()=>d);function le(){h.shortcuts?.nested&&Object.entries(h.shortcuts.nested).forEach(([S,p])=>{let O=effectScope();F[S]=O.run(()=>{let X=ref();return watchEffect(()=>{X.value=p(reactive({$dirty:w,$value:t,$silentValue:x,$error:R,$pending:U,$invalid:i,$valid:g,$ready:T,$anyDirty:o,$name:ae,$silentErrors:ee,$errors:Y,$fields:u}));}),X}),j.push(O);});}let v=computed({get:()=>f?Object.fromEntries(Object.entries(f?.(u.value)??{}).map(([S,p])=>p.length?[S,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(O=>[O,rt(p,O)])),...Object.fromEntries(["$errors","$silentErrors"].map(O=>[O,nt(p,O)]))}]:[])):{},set(){}}),F={};return le(),{$dirty:w,$anyDirty:o,$invalid:i,$valid:g,$error:R,$pending:U,$errors:Y,$silentErrors:ee,$ready:T,$name:ae,$shortcuts:F,$groups:v,$silentValue:x}});}function P(){A?.(),l?.(),E?.(),j.forEach(x=>x.stop()),j=[],$.stop(),u.value&&Object.entries(u.value).forEach(([x,w])=>{w.$unwatch();});}function b(){Object.entries(u.value).forEach(([x,w])=>{w.$clearExternalErrors();});}async function k(){P(),t.value=q({...y??{}}),s(),_();}function m(x){return x.filter(([w,o])=>Z(o)?!(o&&typeof o=="object"&&"_null"in o)&&!B(o):Array.isArray(o)?o.length:!0)}function I(x=!0){let w=Object.entries(u.value).map(([o,i])=>[o,i.$extractDirtyFields(x)]);return x&&(w=m(w)),Object.fromEntries(w)}async function N(){try{let x=t.value;return {result:(await Promise.allSettled(Object.values(u.value).map(i=>i.$validate()))).every(i=>i.status==="fulfilled"?i.value.result===!0:!1),data:x}}catch{return {result:!1,data:t.value}}}let{$shortcuts:Q,...K}=D;return reactive({...K,...Q,$fields:u,$value:t,$resetAll:k,$reset:s,$touch:c,$validate:N,$unwatch:P,$watch:G,$clearExternalErrors:b,$extractDirtyFields:I})}function ye({rulesDef:e,externalErrors:t,...r}){if(ut(e,r.state))return yt({rulesDef:e,externalErrors:t,...r});if(ot(r.state,e)){if(ge(r.state))return Ce({rulesDef:e,externalErrors:t,...r});{let n=ref({}),a=watch(n,d=>{a(),r.state.value=d;},{deep:!0}),{state:f,...y}=r;return Ce({rulesDef:e,externalErrors:t,...y,state:n})}}else if(it(e))return Ee({rulesDef:e,externalErrors:t,...r})}function ce({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:f}){let y=Fe(),d=ref();return d.value=Ce({rootRules:r,rulesDef:r,state:n,customMessages:a?.(),storage:y,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:f,fieldName:"root",path:""}),getCurrentScope()&&onScopeDispose(()=>{d.value?.$unwatch();}),reactive({regle:d})}function We(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange??!0};function a(f,y,d){let h=isRef(y)?y:computed(typeof y=="function"?y:()=>y),$={...n,...d},D=isRef(f)?f:ref(f),j={...q(D.value)};return {r$:ce({scopeRules:h,state:D,options:$,initialState:j,customRules:e,shortcuts:r}).regle}}return a}var ht=We();function ke(){function e(t,r){return r}return e}var Ue=ke();function bt({rules:e,modifiers:t,shortcuts:r}){let n=We(e,t,r),a=ke();return {useRegle:n,inferRules:a}}
2
- export{we as InternalRuleType,Ae as createRule,bt as defineRegleConfig,Ue as inferRules,L as unwrapRuleParameters,ht as useRegle,ce as useRootStorage};
1
+ import {toValue,version,ref,getCurrentScope,onScopeDispose,reactive,shallowRef,effectScope,computed,isRef,toRef,unref,watch,watchEffect}from'vue';function B(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var lt=Symbol("regle-rule");function wt(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 J(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>J(n)))),r=="Map"&&(t=new Map([...e].map(n=>[J(n[0]),J(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,wt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=J(e[n]);}return t}function re(e){return e instanceof Date||e instanceof File?!1:typeof e=="object"&&e!==null&&!Array.isArray(e)}function Me(e){if(B(e))return !1;try{let t=null;if(e instanceof Date)t=e;else if(typeof e=="number"&&!isNaN(e))t=new Date(e);else if(typeof e=="string"){let r=new Date(e);if(r.toString()==="Invalid Date")return !1;t=r;}return !!t}catch{return !1}}var _e=(r=>(r.Inline="__inline",r.Async="__async",r))(_e||{});function ot(e,t){return e.some(r=>r[t])}function ut(e,t){return e.reduce((r,n)=>{let l=n[t]||[];return r.concat(l)},[])}function Y(e){try{return e.map(t=>toValue(t))}catch{return []}}function it(e){return e.map(t=>t instanceof Function?computed(t):isRef(t)?t:toRef(()=>t))}function st(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(p=>p.trim()).filter(p=>p.length>0).length:0}function Ve(e,...t){let{validator:r,type:n}=e,l=n==="__async"||r.constructor.name==="AsyncFunction";return {...{validator(d,...m){return e.validator(d,...Y(m.length?m:t))},message(d){return typeof e.message=="function"?e.message({...d,$params:Y(d?.$params?.length?d.$params:t)}):e.message},active(d){return typeof e.active=="function"?e.active({...d,$params:Y(d?.$params?.length?d.$params:t)}):e.active??!0},tooltip(d){return typeof e.tooltip=="function"?e.tooltip({...d,$params:Y(d?.$params?.length?d.$params:t)}):e.tooltip??[]},exec(d){let m=e.validator(d,...Y(t)),$;return m instanceof Promise?m.then(h=>($=h,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)):($=m,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:l,_params:it(t),_brand:lt}}function Ge(e){if(typeof e.validator=="function"){let r=Ve(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(st(e.validator)>1){let l=function(...f){return Ve(e,...f)};return l.validator=r.validator,l.message=r.message,l.active=r.active,l.tooltip=r.tooltip,l.type=r.type,l.exec=r.exec,l._validator=r.validator,l._message=r.message,l._active=r.active,l._tooltip=r.tooltip,l._type=e.type,l._message_pacthed=!1,l._tooltip_pacthed=!1,l._async=n,l}else return r}throw new Error("Validator must be a function")}function Ne(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),l=shallowRef(new Map),f=shallowRef(new Map);function p(o){let s=t.value.get(o);if(s)return s;{let i=ref({});return t.value.set(o,i),i}}function d(o){let s=r.value.get(o);if(s)return s;{let i=ref([]);return r.value.set(o,i),i}}function m(o,s,i){f.value.set(`${o}-${s}`,i);}function $(o,s){return f.value.get(`${o}-${s}`)}function h(o,s){o&&s!=null&&f.value.delete(`${o}-${s}`);}function _(o,s){n.value.set(o,s);}function A(o){return n.value.get(o)??!1}function a(o,s){e.value.set(o,s);}function D(o,s){let i=e.value.get(o);return i?C(s,i)?{valid:!0}:{valid:!1}:void 0}function C(o,s){let i=Object.keys(s),W=Object.keys(o);return W.length!==i.length||!W.every(k=>i.includes(k))?!1:W.every(k=>{let w=o[k],b=s[k];return !b||!w||typeof w=="function"||typeof b=="function"||typeof w=="number"||typeof w=="boolean"?!1:w._params?w._params?.every((z,y)=>{if(typeof b=="number"||typeof b=="boolean")return !0;{let I=Y(b._params),U=Y(w._params);return I?.[y]===U?.[y]}}):!0})}function N(o){let s=l.value.get(o);if(s)return s;{let i=ref(!1),W=ref(!0),H=ref({}),k=ref(!1);return l.value.set(o,{$pending:i,$valid:W,$metadata:H,$validating:k}),{$pending:i,$valid:W,$metadata:H,$validating:k}}}return getCurrentScope()&&onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),l.value.clear(),f.value.clear();}),{addRuleDeclEntry:a,setDirtyEntry:_,checkRuleDeclEntry:D,getDirtyState:A,trySetRuleStatusRef:N,getFieldsEntry:p,getCollectionsEntry:d,getArrayStatus:$,addArrayStatus:m,deleteArrayStatus:h,arrayStatusStorage:f}}function Te(e){return e.value instanceof Date||e.value instanceof File?!1:re(e.value)}function We(e,t,r){let n=effectScope(),l;return e instanceof Function?l=n.run(()=>e(t,r??0)):l=e,{scope:n,unwrapped:l}}function De(e,t,r){let n,l=(...f)=>new Promise(p=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...f])).then(p);},t);});return l.cancel=()=>{clearTimeout(n),n=void 0;},l}function Gt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let l=0;l<Math.min(r.length,n.length);l++){let f=Number(r[l]),p=Number(n[l]);if(f>p)return 1;if(p>f)return -1;if(!isNaN(f)&&isNaN(p))return 1;if(isNaN(f)&&!isNaN(p))return -1}return 0}var xe=Gt(version,"3.5.0")!==-1;function Nt(){return Math.floor(Math.random()*Date.now()).toString()}function Ce(){return typeof window>"u"?Nt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function ct(e,t){return Te(e)||re(t.value)&&!B(t.value)&&!Object.entries(t.value).some(([r,n])=>$e(n)||typeof n=="function")}function ft(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function Rt(e){return !!e.value&&re(e.value)}function $e(e){return re(e)&&"_validator"in e}function ge(e){return typeof e.value!="function"}function pt(e){return re(e)&&"$fields"in e}function dt(e){return !!e&&"$rules"in e}function ke({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function yt({field:e}){return Object.entries(e.$rules??{}).map(([t,r])=>r.$tooltip).filter(t=>!!t).reduce((t,r)=>typeof r=="string"?t?.concat([r]):t?.concat(r),[])}function mt({fieldProperties:e,customMessages:t,rule:r,ruleKey:n,state:l,path:f,storage:p,$debounce:d,modifiers:m}){let $=effectScope(),h={},_,A=ref(!1),{$pending:a,$valid:D,$metadata:C,$validating:N}=p.trySetRuleStatusRef(`${f}.${n}`);function o(){$=effectScope(),h=$.run(()=>{let b=computed(()=>({$value:l.value,$error:e.$error.value,$dirty:e.$dirty.value,$pending:e.$pending.value,$valid:e.$valid.value,$invalid:e.$invalid.value,$rule:{$valid:D.value,$invalid:!D.value,$pending:a.value},$params:x.value,...C.value})),z=computed(()=>ge(r)?typeof r.value.active=="function"?r.value.active(b.value):!!r.value.active:!0);function y(u){let c="",g=t?t[n]?.[u]:void 0;if(g&&(typeof g=="function"?c=g(b.value):c=g),ge(r)){let R=`_${u}_patched`;g&&!r.value[R]||(typeof r.value[u]=="function"?c=r.value[u](b.value):c=r.value[u]??"");}return c}let I=computed(()=>{let u=y("message");return B(u)&&(u="This field is not valid"),u}),U=computed(()=>y("tooltip")),ee=computed(()=>ge(r)&&r.value.type?r.value.type:n),ne=computed(()=>ge(r)?r.value.validator:r.value),x=computed(()=>typeof r.value=="function"?[]:Y(r.value._params??[])),P=computed(()=>`${f}.${ee.value}`);return {$active:z,$message:I,$type:ee,$validator:ne,$params:x,$path:P,$tooltip:U}}),_=watch(h?.$params,()=>{(m.$autoDirty.value||m.$rewardEarly.value&&e.$error.value)&&H();});}o();function s(){D.value=!0,e.$dirty.value&&(a.value=!0);}async function i(){let b=!1;try{let z=h.$validator.value,y=z(l.value,...h.$params.value),I=l.value;s();let U;if(y instanceof Promise?U=await y:U=y,l.value!==I)return !0;if(typeof U=="boolean")b=U;else {let{$valid:ee,...ne}=U;b=ee,C.value=ne;}}catch{b=!1;}finally{a.value=!1;}return b}let W=De(i,d??200);async function H(){try{N.value=!0;let b=!1;if($e(r.value)&&r.value._async)b=await W();else {let z=h.$validator.value,y=z(l.value,...h.$params.value);if(y 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(y!=null)if(typeof y=="boolean")b=y;else {let{$valid:I,...U}=y;b=I,C.value=U;}}return D.value=b,b}catch{return !1}finally{N.value=!1;}}function k(){D.value=!0,C.value={},a.value=!1,N.value=!1,o();}function w(){_(),$.stop(),$=effectScope();}return reactive({...h,$pending:a,$valid:D,$metadata:C,$haveAsync:A,$validating:N,$validate:H,$unwatch:w,$watch:o,$reset:k})}function Ie({state:e,rulesDef:t,customMessages:r,path:n,fieldName:l,storage:f,options:p,externalErrors:d,onUnwatch:m,$isArray:$,initialState:h,shortcuts:_}){let A=effectScope(),a,D=[],C,N,o,s,i=()=>{};function W(){let v=t.value,F=f.checkRuleDeclEntry(n,v);I.value=Object.fromEntries(Object.entries(v).filter(([V])=>V.startsWith("$"))),w(),y.value=Object.fromEntries(Object.entries(t.value).filter(([V])=>!V.startsWith("$")).map(([V,X])=>{if(X){let te=toRef(()=>X);return [V,mt({fieldProperties:{$dirty:a.$dirty,$error:a.$error,$invalid:a.$invalid,$pending:a.$pending,$valid:a.$valid},modifiers:{$autoDirty:a.$autoDirty,$rewardEarly:a.$rewardEarly},customMessages:r,rule:te,ruleKey:V,state:e,path:n,storage:f,$debounce:I.value.$debounce})]}return []}).filter(V=>!!V.length)),a.processShortcuts(),H(),F?.valid!=null&&(a.$dirty.value=f.getDirtyState(n),a.$dirty.value&&i()),f.addRuleDeclEntry(n,v);}function H(){i=a.$debounce.value?De(z,a.$debounce.value??a.$haveAnyAsyncRule?100:0):z;}function k(){y.value&&Object.entries(y.value).forEach(([v,F])=>{F.$unwatch();}),o(),a.$dirty.value&&f.setDirtyEntry(n,a.$dirty.value),C?.(),N?.(),A.stop(),A=effectScope(),D.forEach(v=>v.stop()),D=[],m?.(),s?.();}function w(){y.value&&Object.entries(y.value).forEach(([v,F])=>{F.$watch();}),a=A.run(()=>{let v=ref(!1),F=ref(!1),V=computed(()=>v.value),X=computed(()=>I.value.$debounce),te=computed(()=>I.value.$lazy!=null?I.value.$lazy:unref(p.lazy)!=null?unref(p.lazy):!1),S=computed(()=>I.value.$rewardEarly!=null?I.value.$rewardEarly:unref(p.rewardEarly)!=null?unref(p.rewardEarly):!1),O=computed(()=>I.value.$clearExternalErrorsOnChange!=null?I.value.$clearExternalErrorsOnChange:unref(p.clearExternalErrorsOnChange)!=null?unref(p.clearExternalErrorsOnChange):!0),E=computed(()=>I.value.$autoDirty!=null?I.value.$autoDirty:unref(p.autoDirty)!=null?unref(p.autoDirty):!S.value),G=computed(()=>Object.entries(y.value).some(([Z,ae])=>ae.$validating)),me=computed({get:()=>e.value,set(Z){C(),e.value=Z,b();}}),Ae=computed(()=>ce.value&&!ve.value&&v.value),Ye=computed(()=>Ae.value?ke({field:{$dirty:v.value,$externalErrors:d?.value,$rules:y.value}}):[]),Fe=computed(()=>v.value?Me(h.value)&&Me(e.value)?h.value.getDate()!==e.value.getDate():h.value!==e.value:!1),Qe=computed(()=>Fe.value),Xe=computed(()=>yt({field:{$rules:y.value}})),Ze=computed(()=>ke({field:{$dirty:v.value,$externalErrors:d?.value,$rules:y.value},silent:!0})),Ke=computed(()=>E.value?V.value&&!(ce.value||ve.value):!(ce.value||ve.value)),ve=computed(()=>F.value||!S.value?Object.entries(y.value).some(([Z,ae])=>ae.$pending):!1),ce=computed(()=>d?.value?.length?!0:B(y.value)?!1:!S.value||S.value&&F.value?Object.entries(y.value).some(([Z,ae])=>!ae.$valid):!1),et=computed(()=>l),je=computed(()=>!!B(y.value)),tt=computed(()=>d?.value?.length||je.value?!1:v.value&&!B(e.value)&&!G.value?Object.values(y.value).every(Z=>Z.$valid&&Z.$active):!1),Ct=computed(()=>Object.entries(y.value).some(([Z,ae])=>ae.$haveAsync));function It(){_?.fields&&Object.entries(_.fields).forEach(([Z,ae])=>{let nt=effectScope();rt[Z]=nt.run(()=>{let at=ref();return watchEffect(()=>{at.value=ae(reactive({$dirty:v,$externalErrors:d?.value??[],$value:e,$silentValue:me,$rules:y,$error:Ae,$pending:ve,$invalid:ce,$valid:tt,$errors:Ye,$ready:Ke,$silentErrors:Ze,$anyDirty:V,$tooltips:Xe,$name:et,$inactive:je,$edited:Fe,$anyEdited:Qe}));}),at}),D.push(nt);});}let rt={};return watch(ce,Z=>{Z||(F.value=!1);}),{$error:Ae,$pending:ve,$invalid:ce,$valid:tt,$debounce:X,$lazy:te,$errors:Ye,$ready:Ke,$silentErrors:Ze,$rewardEarly:S,$autoDirty:E,$clearExternalErrorsOnChange:O,$anyDirty:V,$edited:Fe,$anyEdited:Qe,$name:et,$haveAnyAsyncRule:Ct,$shortcuts:rt,$validating:G,$tooltips:Xe,$dirty:v,triggerPunishment:F,processShortcuts:It,$silentValue:me,$inactive:je}}),b(),o=watch(a.$dirty,()=>{f.setDirtyEntry(n,a.$dirty.value);}),N=watch(a.$valid,v=>{a.$rewardEarly.value&&v&&(a.triggerPunishment.value=!1);}),s=watch(a.$haveAnyAsyncRule,H);}function b(){C=watch(e,()=>{a.$autoDirty.value&&(a.$dirty.value||(a.$dirty.value=!0)),t.value instanceof Function&&W(),(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&i(),a.$rewardEarly.value!==!0&&a.$clearExternalErrorsOnChange.value&&u();},{deep:$?!0:xe?1:!0});}function z(){Object.values(y.value).forEach(v=>{v.$validate();});}let y=ref({}),I=ref({});W();function U(){u(),a.$dirty.value=!1,a.triggerPunishment.value=!1,f.setDirtyEntry(n,!1),Object.entries(y.value).forEach(([v,F])=>{F.$reset();}),!a.$lazy.value&&a.$autoDirty.value&&Object.values(y.value).forEach(v=>v.$validate());}function ee(v=!0,F=!1){a.$dirty.value||(a.$dirty.value=!0),F&&v?(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&i():v&&i();}async function ne(){try{let v=e.value;if(a.triggerPunishment.value=!0,!a.$dirty.value)a.$dirty.value=!0;else if(a.$autoDirty.value&&a.$dirty.value&&!a.$pending.value)return {result:!a.$error.value,data:v};return B(y.value)?{result:!0,data:v}:{result:(await Promise.allSettled(Object.entries(y.value).map(([X,te])=>te.$validate()))).every(X=>X.status==="fulfilled"?X.value===!0:!1),data:v}}catch{return {result:!1,data:e.value}}}function x(){k(),e.value=J(h),U();}function P(v=!0){return a.$dirty.value?e.value:v?{_null:!0}:null}function u(){d?.value?.length&&(d.value=[]);}!a.$lazy.value&&!a.$dirty.value&&a.$autoDirty.value&&i();let{$shortcuts:c,$validating:g,$autoDirty:R,$rewardEarly:T,$clearExternalErrorsOnChange:q,$haveAnyAsyncRule:K,$debounce:Q,$lazy:le,...ie}=a;return reactive({...ie,$externalErrors:d,$value:e,$rules:y,...c,$reset:U,$touch:ee,$validate:ne,$unwatch:k,$watch:w,$resetAll:x,$extractDirtyFields:P,$clearExternalErrors:u})}function Le({$id:e,path:t,index:r,options:n,storage:l,stateValue:f,customMessages:p,rules:d,externalErrors:m,initialState:$,shortcuts:h,fieldName:_}){let A=d.$key?d.$key:Ce(),a=`${t}.${String(A)}`;typeof f.value=="object"&&f.value!=null&&(f.value.$id?a=`${t}.${f.value.$id}`:Object.defineProperties(f.value,{$id:{value:A,enumerable:!1,configurable:!1,writable:!1}}));let D=be({state:f,rulesDef:toRef(()=>d),customMessages:p,path:a,storage:l,options:n,externalErrors:toRef(m?.value??[],r),initialState:computed(()=>$.value?.[r]),shortcuts:h,fieldName:_});if(D){let C=f.value?.$id;D.$id=C??String(A),l.addArrayStatus(e,D.$id,D);}return D}function St({state:e,rulesDef:t,customMessages:r,path:n,storage:l,options:f,externalErrors:p,initialState:d,shortcuts:m,fieldName:$}){let h=effectScope(),_,A=effectScope(),a,D=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let C=ref(),N=ref(e.value),o,s=ref({}),i=l.getCollectionsEntry(n);a=A.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(c=>typeof c!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(c=>$e(c)):!1)})),W(),w();function W(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(C.value=Ce(),Object.defineProperties(e.value,{$id:{value:C.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(C.value=e.value.$id)),!a.isPrimitiveArray.value&&(N.value=s.value.$value,Array.isArray(e.value)?i.value=e.value.map((u,c)=>{let{scope:g,unwrapped:R}=We(t.value.$each,toRef(()=>u),c);g&&D.push(g);let T=Le({$id:C.value,path:n,customMessages:r,rules:R??{},stateValue:toRef(()=>u),index:c,options:f,storage:l,externalErrors:toRef(p?.value??{},"$each"),initialState:computed(()=>d.value?.[c]),shortcuts:m,fieldName:$});return T||null}).filter(u=>!!u):i.value=[],s.value=Ie({state:e,rulesDef:t,customMessages:r,path:n,storage:l,options:f,externalErrors:toRef(p?.value??{},"$self"),$isArray:!0,initialState:d,shortcuts:m,fieldName:$}));}function H(){if(Array.isArray(e.value)){let u=J(i.value);i.value=e.value.map((c,g)=>{let R=toRef(()=>c);if(c.$id&&i.value.find(T=>T.$id===c.$id)){let T=l.getArrayStatus(C.value,c.$id);return T?(T.$value=R,T):null}else {let{scope:T,unwrapped:q}=We(t.value.$each,R,g);if(T&&D.push(T),q){let K=Le({$id:C.value,path:n,customMessages:r,rules:q,stateValue:R,index:g,options:f,storage:l,externalErrors:toRef(p?.value??{},"$each"),initialState:computed(()=>d.value?.[g]),shortcuts:m,fieldName:$});return K||null}}}).filter(c=>!!c),u.filter(c=>!e.value.find(g=>c.$id===g.$id)).forEach((c,g)=>{l.deleteArrayStatus(C.value,g.toString());});}else i.value=[];}function k(){o=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?W():H();},{deep:xe?1:!0,flush:"pre"});}function w(){k(),h=effectScope(),_=h.run(()=>{let u=computed({get:()=>e.value,set(S){o(),e.value=S,k();}}),c=computed(()=>s.value.$dirty&&!!i.value.length&&i.value.every(S=>S.$dirty)),g=computed(()=>s.value.$anyDirty||i.value.some(S=>S.$anyDirty)),R=computed(()=>s.value.$invalid||i.value.some(S=>S.$invalid)),T=computed(()=>(B(s.value.$rules)?!0:s.value.$valid)&&i.value.every(S=>S.$valid)),q=computed(()=>s.value.$error||i.value.some(S=>S.$error)),K=computed(()=>!(R.value||Q.value)),Q=computed(()=>s.value.$pending||i.value.some(S=>S.$pending)),le=computed(()=>s.value.$edited&&!!i.value.length&&i.value.every(S=>S.$edited)),ie=computed(()=>s.value.$anyEdited||i.value.some(S=>S.$anyEdited)),v=computed(()=>({$self:s.value.$errors,$each:i.value.map(S=>S.$errors)})),F=computed(()=>({$self:s.value.$silentErrors,$each:i.value.map(S=>S.$silentErrors)})),V=computed(()=>$);function X(){m?.collections&&Object.entries(m?.collections).forEach(([S,O])=>{let E=effectScope();te[S]=E.run(()=>{let G=ref();return watchEffect(()=>{G.value=O(reactive({$dirty:c,$error:q,$silentValue:u,$pending:Q,$invalid:R,$valid:T,$errors:v,$ready:K,$silentErrors:F,$anyDirty:g,$name:V,$each:i,$field:s,$value:e,$edited:le,$anyEdited:ie}));}),G}),D.push(E);});}let te={};return X(),{$dirty:c,$anyDirty:g,$invalid:R,$valid:T,$error:q,$pending:Q,$errors:v,$silentErrors:F,$ready:K,$name:V,$shortcuts:te,$silentValue:u,$edited:le,$anyEdited:ie}}),a.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),o());}function b(){o&&o(),s.value&&s.value.$unwatch(),i.value&&i.value.forEach(u=>{"$dirty"in u&&u.$unwatch();}),h.stop(),h=effectScope(),A.stop(),A=effectScope(!0),D.forEach(u=>u.stop()),D=[];}function z(u=!0,c=!1){s.value.$touch(u,c),i.value.forEach(g=>{g.$touch(u,c);});}function y(){s.value.$reset(),i.value.forEach(u=>{u.$reset();});}async function I(){let u=e.value;try{return {result:(await Promise.allSettled([s.value.$validate(),...i.value.map(R=>R.$validate())])).every(R=>R.status==="fulfilled"?R.value.result===!0:!1),data:u}}catch{return {result:!1,data:u}}}function U(){s.value.$clearExternalErrors(),i.value.forEach(u=>{u.$clearExternalErrors();});}function ee(u=!0){let c=i.value.map(g=>{if(pt(g))return g.$extractDirtyFields(u)});return u&&c.every(g=>B(g))&&(c=[]),c}function ne(){b(),e.value=J(d.value),y();}let{$shortcuts:x,...P}=_;return reactive({$field:s,...P,...x,$each:i,$value:e,$validate:I,$unwatch:b,$watch:w,$touch:z,$reset:y,$resetAll:ne,$extractDirtyFields:ee,$clearExternalErrors:U})}function Oe({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:l,validationGroups:f,initialState:p,fieldName:d,...m}){let $=effectScope(),h,_=[],A=null,a=null,D=null;async function N(x=!0){let P=Object.entries(e.value),u=Object.fromEntries(P.filter(([R,T])=>!!T).map(([R,T])=>{if(T){let q=toRef(t.value,R),K=toRef(()=>T),Q=toRef(l?.value??{},R),le=computed(()=>p?.value?.[R]);return [R,be({state:q,rulesDef:K,path:r?`${r}.${R}`:R,externalErrors:Q,initialState:le,fieldName:R,...m})]}return []})),c=Object.fromEntries(Object.entries(unref(l)??{}).filter(([R,T])=>!(R in e.value)&&!!T).map(([R])=>{let T=toRef(t.value,R),q=computed(()=>p?.value?.[R]);return [R,be({state:T,rulesDef:computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:toRef(l?.value??{},R),initialState:q,fieldName:R,...m})]})),g=Object.fromEntries(Object.entries(t.value).filter(([R])=>!(R in e.value)&&!(R in(c.value??{}))).map(([R])=>{let T=toRef(t.value,R),q=computed(()=>p?.value?.[R]);return [R,be({state:T,rulesDef:computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:toRef(l?.value??{},R),initialState:q,fieldName:R,...m})]}));o.value={...u,...c,...g},x&&k();}let o=m.storage.getFieldsEntry(r);N();function s(){a?.(),Object.values(o.value).forEach(x=>{x.$reset();}),m.onReset?.(),W();}function i(x=!0,P=!1){Object.values(o.value).forEach(u=>{u.$touch(x,P);});}function W(){l?.value&&(a=watch(l,()=>{w(),N();},{deep:!0}));}function H(){D=watch(t,()=>{w(),N(),i(!0,!0);},{flush:"sync"});}function k(){n&&(A?.(),A=watch(n,()=>{w(),N();},{deep:!0,flush:"post"}),W()),H(),$=effectScope(),h=$.run(()=>{let x=computed({get:()=>t.value,set(O){w(),t.value=O,N();}}),P=computed(()=>!!Object.entries(o.value).length&&Object.entries(o.value).every(([O,E])=>E?.$dirty)),u=computed(()=>Object.entries(o.value).some(([O,E])=>E?.$anyDirty)),c=computed(()=>Object.entries(o.value).some(([O,E])=>E?.$invalid)),g=computed(()=>{let O=Object.entries(o.value).filter(([E,G])=>dt(G)?!G.$inactive:!0);return O.length?O.every(([E,G])=>G?.$valid):!1}),R=computed(()=>u.value&&!Q.value&&c.value),T=computed(()=>unref(m.options.rewardEarly)!=null?unref(m.options.rewardEarly):!1),q=computed(()=>unref(m.options.autoDirty)!=null?unref(m.options.autoDirty):!T.value),K=computed(()=>q.value?u.value&&!(c.value||Q.value):!(c.value||Q.value)),Q=computed(()=>Object.entries(o.value).some(([O,E])=>E?.$pending)),le=computed(()=>Object.fromEntries(Object.entries(o.value).map(([O,E])=>[O,E?.$errors]))),ie=computed(()=>Object.fromEntries(Object.entries(o.value).map(([O,E])=>[O,E?.$silentErrors]))),v=computed(()=>!!Object.entries(o.value).length&&Object.entries(o.value).every(([O,E])=>E?.$edited)),F=computed(()=>Object.entries(o.value).some(([O,E])=>E?.$anyEdited)),V=computed(()=>d);function X(){m.shortcuts?.nested&&Object.entries(m.shortcuts.nested).forEach(([O,E])=>{let G=effectScope();S[O]=G.run(()=>{let me=ref();return watchEffect(()=>{me.value=E(reactive({$dirty:P,$value:t,$silentValue:x,$error:R,$pending:Q,$invalid:c,$valid:g,$ready:K,$anyDirty:u,$name:V,$silentErrors:ie,$errors:le,$fields:o,$edited:v,$anyEdited:F}));}),me}),_.push(G);});}let te=computed({get:()=>f?Object.fromEntries(Object.entries(f?.(o.value)??{}).map(([O,E])=>E.length?[O,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(G=>[G,ot(E,G)])),...Object.fromEntries(["$errors","$silentErrors"].map(G=>[G,ut(E,G)]))}]:[])):{},set(){}}),S={};return X(),{$dirty:P,$anyDirty:u,$invalid:c,$valid:g,$error:R,$pending:Q,$errors:le,$silentErrors:ie,$ready:K,$name:V,$shortcuts:S,$groups:te,$silentValue:x,$edited:v,$anyEdited:F}});}function w(){A?.(),a?.(),D?.(),_.forEach(x=>x.stop()),_=[],$.stop(),o.value&&Object.entries(o.value).forEach(([x,P])=>{P.$unwatch();});}function b(){Object.entries(o.value).forEach(([x,P])=>{P.$clearExternalErrors();});}async function z(){w(),t.value=J({...p.value??{}}),s(),N();}function y(x){return x.filter(([P,u])=>re(u)?!(u&&typeof u=="object"&&"_null"in u)&&!B(u):Array.isArray(u)?u.length:!0)}function I(x=!0){let P=Object.entries(o.value).map(([u,c])=>[u,c.$extractDirtyFields(x)]);return x&&(P=y(P)),Object.fromEntries(P)}async function U(){try{let x=t.value;return {result:(await Promise.allSettled(Object.values(o.value).map(c=>c.$validate()))).every(c=>c.status==="fulfilled"?c.value.result===!0:!1),data:x}}catch{return {result:!1,data:t.value}}}let{$shortcuts:ee,...ne}=h;return reactive({...ne,...ee,$fields:o,$value:t,$resetAll:z,$reset:s,$touch:i,$validate:U,$unwatch:w,$watch:k,$clearExternalErrors:b,$extractDirtyFields:I})}function be({rulesDef:e,externalErrors:t,...r}){if(ft(e,r.state))return St({rulesDef:e,externalErrors:t,...r});if(ct(r.state,e)){if(Te(r.state))return Oe({rulesDef:e,externalErrors:t,...r});{let n=ref({}),l=watch(n,d=>{l(),r.state.value=d;},{deep:!0}),{state:f,...p}=r;return Oe({rulesDef:e,externalErrors:t,...p,state:n})}}else if(Rt(e))return Ie({rulesDef:e,externalErrors:t,...r})}function ye({initialState:e,options:t,scopeRules:r,state:n,customRules:l,shortcuts:f,onReset:p}){let d=Ne(),m=ref();return m.value=Oe({rootRules:r,rulesDef:r,state:n,customMessages:l?.(),storage:d,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:f,fieldName:"root",path:"",onReset:p}),getCurrentScope()&&onScopeDispose(()=>{m.value?.$unwatch();}),reactive({regle:m})}function ze(e,t,r){let n={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function l(f,p,d){let m=isRef(p)?p:computed(typeof p=="function"?p:()=>p),$={...n,...d},h=isRef(f)?f:ref(f),_=ref({...J(h.value)});function A(){_.value={...J(h.value)};}return {r$:ye({scopeRules:m,state:h,options:$,initialState:_,customRules:e,shortcuts:r,onReset:A}).regle}}return l}var Dt=ze();function qe(){function e(t,r){return r}return e}var Je=qe();function xt({rules:e,modifiers:t,shortcuts:r}){let n=ze(e,t,r),l=qe();return {useRegle:n,inferRules:l}}
2
+ export{_e as InternalRuleType,Ge as createRule,xt as defineRegleConfig,Je as inferRules,Y as unwrapRuleParameters,Dt as useRegle,ye as useRootStorage};
@@ -66,6 +66,30 @@ function isObject(obj) {
66
66
  return typeof obj === "object" && obj !== null && !Array.isArray(obj);
67
67
  }
68
68
 
69
+ // ../shared/utils/isDate.ts
70
+ function isDate(value) {
71
+ if (isEmpty(value)) {
72
+ return false;
73
+ }
74
+ try {
75
+ let possibleDate = null;
76
+ if (value instanceof Date) {
77
+ possibleDate = value;
78
+ } else if (typeof value === "number" && !isNaN(value)) {
79
+ possibleDate = new Date(value);
80
+ } else if (typeof value === "string") {
81
+ const date = new Date(value);
82
+ if (date.toString() === "Invalid Date") {
83
+ return false;
84
+ }
85
+ possibleDate = date;
86
+ }
87
+ return !!possibleDate;
88
+ } catch (e) {
89
+ return false;
90
+ }
91
+ }
92
+
69
93
  // src/types/rules/rule.internal.types.ts
70
94
  var InternalRuleType = /* @__PURE__ */ ((InternalRuleType2) => {
71
95
  InternalRuleType2["Inline"] = "__inline";
@@ -780,29 +804,36 @@ function createReactiveFieldStatus({
780
804
  const $lazy2 = computed(() => {
781
805
  if ($localOptions.value.$lazy != null) {
782
806
  return $localOptions.value.$lazy;
807
+ } else if (unref(options.lazy) != null) {
808
+ return unref(options.lazy);
783
809
  }
784
- return unref(options.lazy);
810
+ return false;
785
811
  });
786
812
  const $rewardEarly2 = computed(() => {
787
- if ($autoDirty2.value === true) {
788
- return false;
789
- }
790
813
  if ($localOptions.value.$rewardEarly != null) {
791
814
  return $localOptions.value.$rewardEarly;
815
+ } else if (unref(options.rewardEarly) != null) {
816
+ return unref(options.rewardEarly);
792
817
  }
793
- return unref(options.rewardEarly);
818
+ return false;
794
819
  });
795
820
  const $clearExternalErrorsOnChange2 = computed(() => {
796
821
  if ($localOptions.value.$clearExternalErrorsOnChange != null) {
797
822
  return $localOptions.value.$clearExternalErrorsOnChange;
823
+ } else if (unref(options.clearExternalErrorsOnChange) != null) {
824
+ return unref(options.clearExternalErrorsOnChange);
798
825
  }
799
- return unref(options.clearExternalErrorsOnChange);
826
+ return true;
800
827
  });
801
828
  const $autoDirty2 = computed(() => {
802
829
  if ($localOptions.value.$autoDirty != null) {
803
830
  return $localOptions.value.$autoDirty;
831
+ } else if (unref(options.autoDirty) != null) {
832
+ return unref(options.autoDirty);
833
+ } else if ($rewardEarly2.value) {
834
+ return false;
804
835
  }
805
- return unref(options.autoDirty);
836
+ return true;
806
837
  });
807
838
  const $validating2 = computed(() => {
808
839
  return Object.entries($rules.value).some(([key, ruleResult]) => {
@@ -832,6 +863,16 @@ function createReactiveFieldStatus({
832
863
  }
833
864
  return [];
834
865
  });
866
+ const $edited = computed(() => {
867
+ if ($dirty.value) {
868
+ if (isDate(initialState.value) && isDate(state.value)) {
869
+ return initialState.value.getDate() !== state.value.getDate();
870
+ }
871
+ return initialState.value !== state.value;
872
+ }
873
+ return false;
874
+ });
875
+ const $anyEdited = computed(() => $edited.value);
835
876
  const $tooltips = computed(() => {
836
877
  return extractRulesTooltips({
837
878
  field: {
@@ -850,7 +891,10 @@ function createReactiveFieldStatus({
850
891
  });
851
892
  });
852
893
  const $ready = computed(() => {
853
- return !($invalid.value || $pending.value);
894
+ if (!$autoDirty2.value) {
895
+ return !($invalid.value || $pending.value);
896
+ }
897
+ return $anyDirty.value && !($invalid.value || $pending.value);
854
898
  });
855
899
  const $pending = computed(() => {
856
900
  if (triggerPunishment.value || !$rewardEarly2.value) {
@@ -920,7 +964,9 @@ function createReactiveFieldStatus({
920
964
  $anyDirty,
921
965
  $tooltips,
922
966
  $name,
923
- $inactive
967
+ $inactive,
968
+ $edited,
969
+ $anyEdited
924
970
  })
925
971
  );
926
972
  });
@@ -950,6 +996,8 @@ function createReactiveFieldStatus({
950
996
  $autoDirty: $autoDirty2,
951
997
  $clearExternalErrorsOnChange: $clearExternalErrorsOnChange2,
952
998
  $anyDirty,
999
+ $edited,
1000
+ $anyEdited,
953
1001
  $name,
954
1002
  $haveAnyAsyncRule: $haveAnyAsyncRule2,
955
1003
  $shortcuts: $shortcuts2,
@@ -1006,8 +1054,9 @@ function createReactiveFieldStatus({
1006
1054
  function $reset() {
1007
1055
  $clearExternalErrors();
1008
1056
  scopeState.$dirty.value = false;
1057
+ scopeState.triggerPunishment.value = false;
1009
1058
  storage.setDirtyEntry(path, false);
1010
- Object.entries($rules.value).forEach(([key, rule]) => {
1059
+ Object.entries($rules.value).forEach(([_, rule]) => {
1011
1060
  rule.$reset();
1012
1061
  });
1013
1062
  if (!scopeState.$lazy.value && scopeState.$autoDirty.value) {
@@ -1144,7 +1193,7 @@ function createCollectionElement({
1144
1193
  storage,
1145
1194
  options,
1146
1195
  externalErrors: toRef(externalErrors?.value ?? [], index),
1147
- initialState: initialState?.[index],
1196
+ initialState: computed(() => initialState.value?.[index]),
1148
1197
  shortcuts,
1149
1198
  fieldName
1150
1199
  });
@@ -1237,7 +1286,7 @@ function createReactiveCollectionStatus({
1237
1286
  options,
1238
1287
  storage,
1239
1288
  externalErrors: toRef(externalErrors?.value ?? {}, `$each`),
1240
- initialState: initialState?.[index],
1289
+ initialState: computed(() => initialState.value?.[index]),
1241
1290
  shortcuts,
1242
1291
  fieldName
1243
1292
  });
@@ -1291,7 +1340,7 @@ function createReactiveCollectionStatus({
1291
1340
  options,
1292
1341
  storage,
1293
1342
  externalErrors: toRef(externalErrors?.value ?? {}, `$each`),
1294
- initialState: initialState?.[index],
1343
+ initialState: computed(() => initialState.value?.[index]),
1295
1344
  shortcuts,
1296
1345
  fieldName
1297
1346
  });
@@ -1335,7 +1384,7 @@ function createReactiveCollectionStatus({
1335
1384
  }
1336
1385
  });
1337
1386
  const $dirty = computed(() => {
1338
- return $fieldStatus.value.$dirty && $eachStatus.value.every((statusOrField) => {
1387
+ return $fieldStatus.value.$dirty && !!$eachStatus.value.length && $eachStatus.value.every((statusOrField) => {
1339
1388
  return statusOrField.$dirty;
1340
1389
  });
1341
1390
  });
@@ -1367,6 +1416,16 @@ function createReactiveCollectionStatus({
1367
1416
  return statusOrField.$pending;
1368
1417
  });
1369
1418
  });
1419
+ const $edited = computed(() => {
1420
+ return $fieldStatus.value.$edited && !!$eachStatus.value.length && $eachStatus.value.every((statusOrField) => {
1421
+ return statusOrField.$edited;
1422
+ });
1423
+ });
1424
+ const $anyEdited = computed(() => {
1425
+ return $fieldStatus.value.$anyEdited || $eachStatus.value.some((statusOrField) => {
1426
+ return statusOrField.$anyEdited;
1427
+ });
1428
+ });
1370
1429
  const $errors = computed(() => {
1371
1430
  return {
1372
1431
  $self: $fieldStatus.value.$errors,
@@ -1402,7 +1461,9 @@ function createReactiveCollectionStatus({
1402
1461
  $name,
1403
1462
  $each: $eachStatus,
1404
1463
  $field: $fieldStatus,
1405
- $value: state
1464
+ $value: state,
1465
+ $edited,
1466
+ $anyEdited
1406
1467
  })
1407
1468
  );
1408
1469
  });
@@ -1426,7 +1487,9 @@ function createReactiveCollectionStatus({
1426
1487
  $ready,
1427
1488
  $name,
1428
1489
  $shortcuts: $shortcuts2,
1429
- $silentValue
1490
+ $silentValue,
1491
+ $edited,
1492
+ $anyEdited
1430
1493
  };
1431
1494
  });
1432
1495
  if (immediateScopeState.isPrimitiveArray.value) {
@@ -1513,7 +1576,7 @@ function createReactiveCollectionStatus({
1513
1576
  }
1514
1577
  function $resetAll() {
1515
1578
  $unwatch();
1516
- state.value = cloneDeep(initialState);
1579
+ state.value = cloneDeep(initialState.value);
1517
1580
  $reset();
1518
1581
  }
1519
1582
  const { $shortcuts, ...restScopeState } = scopeState;
@@ -1560,6 +1623,7 @@ function createReactiveNestedStatus({
1560
1623
  const stateRef = toRef(state.value, statePropKey);
1561
1624
  const statePropRulesRef = toRef(() => statePropRules);
1562
1625
  const $externalErrors = toRef(externalErrors?.value ?? {}, statePropKey);
1626
+ const initialStateRef = computed(() => initialState?.value?.[statePropKey]);
1563
1627
  return [
1564
1628
  statePropKey,
1565
1629
  createReactiveChildrenStatus({
@@ -1567,7 +1631,7 @@ function createReactiveNestedStatus({
1567
1631
  rulesDef: statePropRulesRef,
1568
1632
  path: path ? `${path}.${statePropKey}` : statePropKey,
1569
1633
  externalErrors: $externalErrors,
1570
- initialState: initialState?.[statePropKey],
1634
+ initialState: initialStateRef,
1571
1635
  fieldName: statePropKey,
1572
1636
  ...commonArgs
1573
1637
  })
@@ -1579,6 +1643,7 @@ function createReactiveNestedStatus({
1579
1643
  const externalRulesStatus = Object.fromEntries(
1580
1644
  Object.entries(unref(externalErrors) ?? {}).filter(([key, errors]) => !(key in rulesDef.value) && !!errors).map(([key]) => {
1581
1645
  const stateRef = toRef(state.value, key);
1646
+ const initialStateRef = computed(() => initialState?.value?.[key]);
1582
1647
  return [
1583
1648
  key,
1584
1649
  createReactiveChildrenStatus({
@@ -1586,7 +1651,7 @@ function createReactiveNestedStatus({
1586
1651
  rulesDef: computed(() => ({})),
1587
1652
  path: path ? `${path}.${key}` : key,
1588
1653
  externalErrors: toRef(externalErrors?.value ?? {}, key),
1589
- initialState: initialState?.[key],
1654
+ initialState: initialStateRef,
1590
1655
  fieldName: key,
1591
1656
  ...commonArgs
1592
1657
  })
@@ -1596,6 +1661,7 @@ function createReactiveNestedStatus({
1596
1661
  const statesWithNoRules = Object.fromEntries(
1597
1662
  Object.entries(state.value).filter(([key]) => !(key in rulesDef.value) && !(key in (externalRulesStatus.value ?? {}))).map(([key]) => {
1598
1663
  const stateRef = toRef(state.value, key);
1664
+ const initialStateRef = computed(() => initialState?.value?.[key]);
1599
1665
  return [
1600
1666
  key,
1601
1667
  createReactiveChildrenStatus({
@@ -1603,7 +1669,7 @@ function createReactiveNestedStatus({
1603
1669
  rulesDef: computed(() => ({})),
1604
1670
  path: path ? `${path}.${key}` : key,
1605
1671
  externalErrors: toRef(externalErrors?.value ?? {}, key),
1606
- initialState: initialState?.[key],
1672
+ initialState: initialStateRef,
1607
1673
  fieldName: key,
1608
1674
  ...commonArgs
1609
1675
  })
@@ -1626,6 +1692,7 @@ function createReactiveNestedStatus({
1626
1692
  Object.values($fields.value).forEach((statusOrField) => {
1627
1693
  statusOrField.$reset();
1628
1694
  });
1695
+ commonArgs.onReset?.();
1629
1696
  define$WatchExternalErrors();
1630
1697
  }
1631
1698
  function $touch(runCommit = true, withConditions = false) {
@@ -1710,8 +1777,22 @@ function createReactiveNestedStatus({
1710
1777
  return false;
1711
1778
  });
1712
1779
  const $error = computed(() => $anyDirty.value && !$pending.value && $invalid.value);
1780
+ const $rewardEarly = computed(() => {
1781
+ if (unref(commonArgs.options.rewardEarly) != null) {
1782
+ return unref(commonArgs.options.rewardEarly);
1783
+ }
1784
+ return false;
1785
+ });
1786
+ const $autoDirty = computed(() => {
1787
+ if (unref(commonArgs.options.autoDirty) != null) {
1788
+ return unref(commonArgs.options.autoDirty);
1789
+ } else if ($rewardEarly.value) {
1790
+ return false;
1791
+ }
1792
+ return true;
1793
+ });
1713
1794
  const $ready = computed(() => {
1714
- if (!unref(commonArgs.options.autoDirty)) {
1795
+ if (!$autoDirty.value) {
1715
1796
  return !($invalid.value || $pending.value);
1716
1797
  }
1717
1798
  return $anyDirty.value && !($invalid.value || $pending.value);
@@ -1735,6 +1816,16 @@ function createReactiveNestedStatus({
1735
1816
  })
1736
1817
  );
1737
1818
  });
1819
+ const $edited = computed(() => {
1820
+ return !!Object.entries($fields.value).length && Object.entries($fields.value).every(([_, statusOrField]) => {
1821
+ return statusOrField?.$edited;
1822
+ });
1823
+ });
1824
+ const $anyEdited = computed(() => {
1825
+ return Object.entries($fields.value).some(([_, statusOrField]) => {
1826
+ return statusOrField?.$anyEdited;
1827
+ });
1828
+ });
1738
1829
  const $name = computed(() => fieldName);
1739
1830
  function processShortcuts() {
1740
1831
  if (commonArgs.shortcuts?.nested) {
@@ -1757,7 +1848,9 @@ function createReactiveNestedStatus({
1757
1848
  $name,
1758
1849
  $silentErrors,
1759
1850
  $errors,
1760
- $fields
1851
+ $fields,
1852
+ $edited,
1853
+ $anyEdited
1761
1854
  })
1762
1855
  );
1763
1856
  });
@@ -1815,7 +1908,9 @@ function createReactiveNestedStatus({
1815
1908
  $name,
1816
1909
  $shortcuts: $shortcuts2,
1817
1910
  $groups,
1818
- $silentValue
1911
+ $silentValue,
1912
+ $edited,
1913
+ $anyEdited
1819
1914
  };
1820
1915
  });
1821
1916
  }
@@ -1839,7 +1934,7 @@ function createReactiveNestedStatus({
1839
1934
  }
1840
1935
  async function $resetAll() {
1841
1936
  $unwatch();
1842
- state.value = cloneDeep({ ...initialState ?? {} });
1937
+ state.value = cloneDeep({ ...initialState.value ?? {} });
1843
1938
  $reset();
1844
1939
  createReactiveFieldsStatus();
1845
1940
  }
@@ -1952,7 +2047,8 @@ function useRootStorage({
1952
2047
  scopeRules,
1953
2048
  state,
1954
2049
  customRules,
1955
- shortcuts
2050
+ shortcuts,
2051
+ onReset
1956
2052
  }) {
1957
2053
  const storage = useStorage();
1958
2054
  const regle = ref();
@@ -1968,7 +2064,8 @@ function useRootStorage({
1968
2064
  initialState,
1969
2065
  shortcuts,
1970
2066
  fieldName: "root",
1971
- path: ""
2067
+ path: "",
2068
+ onReset
1972
2069
  });
1973
2070
  if (getCurrentScope()) {
1974
2071
  onScopeDispose(() => {
@@ -1981,10 +2078,10 @@ function useRootStorage({
1981
2078
  // src/core/useRegle/useRegle.ts
1982
2079
  function createUseRegleComposable(customRules, options, shortcuts) {
1983
2080
  const globalOptions = {
1984
- autoDirty: options?.autoDirty ?? true,
1985
- lazy: options?.lazy ?? false,
1986
- rewardEarly: options?.rewardEarly ?? false,
1987
- clearExternalErrorsOnChange: options?.clearExternalErrorsOnChange ?? true
2081
+ autoDirty: options?.autoDirty,
2082
+ lazy: options?.lazy,
2083
+ rewardEarly: options?.rewardEarly,
2084
+ clearExternalErrorsOnChange: options?.clearExternalErrorsOnChange
1988
2085
  };
1989
2086
  function useRegle2(state, rulesFactory, options2) {
1990
2087
  const scopeRules = isRef(rulesFactory) ? rulesFactory : computed(typeof rulesFactory === "function" ? rulesFactory : () => rulesFactory);
@@ -1993,14 +2090,18 @@ function createUseRegleComposable(customRules, options, shortcuts) {
1993
2090
  ...options2
1994
2091
  };
1995
2092
  const processedState = isRef(state) ? state : ref(state);
1996
- const initialState = { ...cloneDeep(processedState.value) };
2093
+ const initialState = ref({ ...cloneDeep(processedState.value) });
2094
+ function onReset() {
2095
+ initialState.value = { ...cloneDeep(processedState.value) };
2096
+ }
1997
2097
  const regle = useRootStorage({
1998
2098
  scopeRules,
1999
2099
  state: processedState,
2000
2100
  options: resolvedOptions,
2001
2101
  initialState,
2002
2102
  customRules,
2003
- shortcuts
2103
+ shortcuts,
2104
+ onReset
2004
2105
  });
2005
2106
  return {
2006
2107
  r$: regle.regle
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regle/core",
3
- "version": "0.5.11",
3
+ "version": "0.5.12",
4
4
  "description": "Type safe form validation library for Vue 3",
5
5
  "peerDependencies": {
6
6
  "vue": "^3.3.0"