@regle/core 0.5.10 β 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 +3 -3
- package/dist/regle-core.cjs +133 -32
- package/dist/regle-core.d.cts +24 -8
- package/dist/regle-core.d.ts +24 -8
- package/dist/regle-core.min.cjs +2 -2
- package/dist/regle-core.min.mjs +2 -2
- package/dist/regle-core.mjs +133 -32
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,11 +20,11 @@ It's heavily inspired by Vuelidate.
|
|
|
20
20
|
| [](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/simple-example?file=examples/simple-example/src/App.vue&configPath=examples/simple-example) | [](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/advanced-example?file=examples/advanced-example/src/App.vue&configPath=examples/advanced-example) |
|
|
21
21
|
|
|
22
22
|
## π§° Features
|
|
23
|
-
- β
|
|
24
|
-
- π€ 100% type inference
|
|
23
|
+
- β
100% type inference
|
|
25
24
|
- π Model based validation
|
|
26
|
-
-
|
|
25
|
+
- π Headless
|
|
27
26
|
- πͺ Extensible
|
|
27
|
+
- π Collection validation
|
|
28
28
|
- π¦ΈββοΈ [Zod](https://zod.dev/) support
|
|
29
29
|
- π€ [Valibot](https://valibot.dev/) support
|
|
30
30
|
- πͺΆ Light(~7kb gzip) and 0 dependencies
|
package/dist/regle-core.cjs
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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(([
|
|
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:
|
|
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:
|
|
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:
|
|
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 (
|
|
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
|
|
1987
|
-
lazy: options?.lazy
|
|
1988
|
-
rewardEarly: options?.rewardEarly
|
|
1989
|
-
clearExternalErrorsOnChange: options?.clearExternalErrorsOnChange
|
|
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
|
package/dist/regle-core.d.cts
CHANGED
|
@@ -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
|
};
|
|
@@ -1056,6 +1059,10 @@ type MismatchInfo<Actual, Expected> = And<[Extends<PrintType<Actual>, '...'>, No
|
|
|
1056
1059
|
|
|
1057
1060
|
type RemoveCommonKey<T extends readonly any[], K extends PropertyKey> = T extends [infer F, ...infer R] ? [Prettify<Omit<F, K>>, ...RemoveCommonKey<R, K>] : [];
|
|
1058
1061
|
type JoinDiscriminatedUnions<TUnion extends unknown> = isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection$1<RemoveCommonKey<UnionToTuple$1<TUnion>, keyof NonNullable<TUnion>>[number]>> & Pick<NonNullable<TUnion>, keyof NonNullable<TUnion>>> : TUnion;
|
|
1062
|
+
type EnumLike = {
|
|
1063
|
+
[k: string]: string | number;
|
|
1064
|
+
[nu: number]: string;
|
|
1065
|
+
};
|
|
1059
1066
|
|
|
1060
1067
|
type CreateFn<T extends any[]> = (...args: T) => any;
|
|
1061
1068
|
/**
|
|
@@ -1229,7 +1236,9 @@ type DefaultValidators = {
|
|
|
1229
1236
|
maxValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
|
|
1230
1237
|
minLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [count: number], false, boolean>;
|
|
1231
1238
|
minValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
|
|
1239
|
+
nativeEnum: RegleRuleDefinition<string | number, [enumLike: EnumLike], false, boolean, string | number>;
|
|
1232
1240
|
numeric: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
1241
|
+
oneOf: RegleRuleDefinition<string | number, [options: (string | number)[]], false, boolean, string | number>;
|
|
1233
1242
|
regex: RegleRuleWithParamsDefinition<string, [regexp: RegExp], false, boolean>;
|
|
1234
1243
|
required: RegleRuleDefinition<unknown, []>;
|
|
1235
1244
|
sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown, otherName?: string], false, boolean>;
|
|
@@ -1475,6 +1484,8 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
1475
1484
|
readonly $invalid: boolean;
|
|
1476
1485
|
readonly $dirty: boolean;
|
|
1477
1486
|
readonly $anyDirty: boolean;
|
|
1487
|
+
readonly $edited: boolean;
|
|
1488
|
+
readonly $anyEdited: boolean;
|
|
1478
1489
|
/** Indicates if any async rule for the field is currently running. Always false for synchronous rules. */
|
|
1479
1490
|
readonly $pending: boolean;
|
|
1480
1491
|
/** Convenience flag to easily decide if a message should be displayed. Equivalent to $dirty && !$pending && $invalid. */
|
|
@@ -1491,7 +1502,11 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
1491
1502
|
$silentValue: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue>>;
|
|
1492
1503
|
/** Marks the field and all nested properties as $dirty. */
|
|
1493
1504
|
$touch(runCommit?: boolean, withConditions?: boolean): void;
|
|
1494
|
-
/**
|
|
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
|
+
*/
|
|
1495
1510
|
$reset(): void;
|
|
1496
1511
|
/** Will reset both your validation state and your form state to their initial values. */
|
|
1497
1512
|
$resetAll: () => void;
|
|
@@ -1510,6 +1525,7 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
1510
1525
|
readonly $type: string;
|
|
1511
1526
|
/** Returns the computed error message or messages for the current rule. */
|
|
1512
1527
|
readonly $message: string | string[];
|
|
1528
|
+
/** Stores the current rule tooltip or tooltips */
|
|
1513
1529
|
readonly $tooltip: string | string[];
|
|
1514
1530
|
/** Indicates whether or not the rule is enabled (for rules like requiredIf) */
|
|
1515
1531
|
readonly $active: boolean;
|
package/dist/regle-core.d.ts
CHANGED
|
@@ -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
|
};
|
|
@@ -1056,6 +1059,10 @@ type MismatchInfo<Actual, Expected> = And<[Extends<PrintType<Actual>, '...'>, No
|
|
|
1056
1059
|
|
|
1057
1060
|
type RemoveCommonKey<T extends readonly any[], K extends PropertyKey> = T extends [infer F, ...infer R] ? [Prettify<Omit<F, K>>, ...RemoveCommonKey<R, K>] : [];
|
|
1058
1061
|
type JoinDiscriminatedUnions<TUnion extends unknown> = isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection$1<RemoveCommonKey<UnionToTuple$1<TUnion>, keyof NonNullable<TUnion>>[number]>> & Pick<NonNullable<TUnion>, keyof NonNullable<TUnion>>> : TUnion;
|
|
1062
|
+
type EnumLike = {
|
|
1063
|
+
[k: string]: string | number;
|
|
1064
|
+
[nu: number]: string;
|
|
1065
|
+
};
|
|
1059
1066
|
|
|
1060
1067
|
type CreateFn<T extends any[]> = (...args: T) => any;
|
|
1061
1068
|
/**
|
|
@@ -1229,7 +1236,9 @@ type DefaultValidators = {
|
|
|
1229
1236
|
maxValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
|
|
1230
1237
|
minLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [count: number], false, boolean>;
|
|
1231
1238
|
minValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
|
|
1239
|
+
nativeEnum: RegleRuleDefinition<string | number, [enumLike: EnumLike], false, boolean, string | number>;
|
|
1232
1240
|
numeric: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
|
|
1241
|
+
oneOf: RegleRuleDefinition<string | number, [options: (string | number)[]], false, boolean, string | number>;
|
|
1233
1242
|
regex: RegleRuleWithParamsDefinition<string, [regexp: RegExp], false, boolean>;
|
|
1234
1243
|
required: RegleRuleDefinition<unknown, []>;
|
|
1235
1244
|
sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown, otherName?: string], false, boolean>;
|
|
@@ -1475,6 +1484,8 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
1475
1484
|
readonly $invalid: boolean;
|
|
1476
1485
|
readonly $dirty: boolean;
|
|
1477
1486
|
readonly $anyDirty: boolean;
|
|
1487
|
+
readonly $edited: boolean;
|
|
1488
|
+
readonly $anyEdited: boolean;
|
|
1478
1489
|
/** Indicates if any async rule for the field is currently running. Always false for synchronous rules. */
|
|
1479
1490
|
readonly $pending: boolean;
|
|
1480
1491
|
/** Convenience flag to easily decide if a message should be displayed. Equivalent to $dirty && !$pending && $invalid. */
|
|
@@ -1491,7 +1502,11 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
1491
1502
|
$silentValue: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue>>;
|
|
1492
1503
|
/** Marks the field and all nested properties as $dirty. */
|
|
1493
1504
|
$touch(runCommit?: boolean, withConditions?: boolean): void;
|
|
1494
|
-
/**
|
|
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
|
+
*/
|
|
1495
1510
|
$reset(): void;
|
|
1496
1511
|
/** Will reset both your validation state and your form state to their initial values. */
|
|
1497
1512
|
$resetAll: () => void;
|
|
@@ -1510,6 +1525,7 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
1510
1525
|
readonly $type: string;
|
|
1511
1526
|
/** Returns the computed error message or messages for the current rule. */
|
|
1512
1527
|
readonly $message: string | string[];
|
|
1528
|
+
/** Stores the current rule tooltip or tooltips */
|
|
1513
1529
|
readonly $tooltip: string | string[];
|
|
1514
1530
|
/** Indicates whether or not the rule is enabled (for rules like requiredIf) */
|
|
1515
1531
|
readonly $active: boolean;
|
package/dist/regle-core.min.cjs
CHANGED
|
@@ -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=
|
|
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;
|
package/dist/regle-core.min.mjs
CHANGED
|
@@ -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{
|
|
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};
|
package/dist/regle-core.mjs
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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(([
|
|
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:
|
|
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:
|
|
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:
|
|
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 (
|
|
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
|
|
1985
|
-
lazy: options?.lazy
|
|
1986
|
-
rewardEarly: options?.rewardEarly
|
|
1987
|
-
clearExternalErrorsOnChange: options?.clearExternalErrorsOnChange
|
|
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
|