@regle/core 0.5.11 β 0.5.13
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 -2
- package/dist/regle-core.cjs +146 -29
- package/dist/regle-core.d.cts +18 -9
- package/dist/regle-core.d.ts +18 -9
- package/dist/regle-core.min.cjs +2 -2
- package/dist/regle-core.min.mjs +2 -2
- package/dist/regle-core.mjs +146 -29
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,10 +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
|
-
-
|
|
23
|
+
- β
100% type inference
|
|
24
24
|
- π Model based validation
|
|
25
|
-
-
|
|
25
|
+
- π Headless
|
|
26
26
|
- πͺ Extensible
|
|
27
|
+
- π Collection validation
|
|
27
28
|
- π¦ΈββοΈ [Zod](https://zod.dev/) support
|
|
28
29
|
- π€ [Valibot](https://valibot.dev/) support
|
|
29
30
|
- πͺΆ Light(~7kb gzip) and 0 dependencies
|
package/dist/regle-core.cjs
CHANGED
|
@@ -68,6 +68,44 @@ 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 === "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
|
+
|
|
93
|
+
// ../shared/utils/toDate.ts
|
|
94
|
+
function toDate(argument) {
|
|
95
|
+
const argStr = Object.prototype.toString.call(argument);
|
|
96
|
+
if (argument == null) {
|
|
97
|
+
return /* @__PURE__ */ new Date(NaN);
|
|
98
|
+
} else if (argument instanceof Date || typeof argument === "object" && argStr === "[object Date]") {
|
|
99
|
+
return new Date(argument.getTime());
|
|
100
|
+
} else if (typeof argument === "number" || argStr === "[object Number]") {
|
|
101
|
+
return new Date(argument);
|
|
102
|
+
} else if (typeof argument === "string" || argStr === "[object String]") {
|
|
103
|
+
return new Date(argument);
|
|
104
|
+
} else {
|
|
105
|
+
return /* @__PURE__ */ new Date(NaN);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
71
109
|
// src/types/rules/rule.internal.types.ts
|
|
72
110
|
var InternalRuleType = /* @__PURE__ */ ((InternalRuleType2) => {
|
|
73
111
|
InternalRuleType2["Inline"] = "__inline";
|
|
@@ -782,29 +820,36 @@ function createReactiveFieldStatus({
|
|
|
782
820
|
const $lazy2 = vue.computed(() => {
|
|
783
821
|
if ($localOptions.value.$lazy != null) {
|
|
784
822
|
return $localOptions.value.$lazy;
|
|
823
|
+
} else if (vue.unref(options.lazy) != null) {
|
|
824
|
+
return vue.unref(options.lazy);
|
|
785
825
|
}
|
|
786
|
-
return
|
|
826
|
+
return false;
|
|
787
827
|
});
|
|
788
828
|
const $rewardEarly2 = vue.computed(() => {
|
|
789
|
-
if ($autoDirty2.value === true) {
|
|
790
|
-
return false;
|
|
791
|
-
}
|
|
792
829
|
if ($localOptions.value.$rewardEarly != null) {
|
|
793
830
|
return $localOptions.value.$rewardEarly;
|
|
831
|
+
} else if (vue.unref(options.rewardEarly) != null) {
|
|
832
|
+
return vue.unref(options.rewardEarly);
|
|
794
833
|
}
|
|
795
|
-
return
|
|
834
|
+
return false;
|
|
796
835
|
});
|
|
797
836
|
const $clearExternalErrorsOnChange2 = vue.computed(() => {
|
|
798
837
|
if ($localOptions.value.$clearExternalErrorsOnChange != null) {
|
|
799
838
|
return $localOptions.value.$clearExternalErrorsOnChange;
|
|
839
|
+
} else if (vue.unref(options.clearExternalErrorsOnChange) != null) {
|
|
840
|
+
return vue.unref(options.clearExternalErrorsOnChange);
|
|
800
841
|
}
|
|
801
|
-
return
|
|
842
|
+
return true;
|
|
802
843
|
});
|
|
803
844
|
const $autoDirty2 = vue.computed(() => {
|
|
804
845
|
if ($localOptions.value.$autoDirty != null) {
|
|
805
846
|
return $localOptions.value.$autoDirty;
|
|
847
|
+
} else if (vue.unref(options.autoDirty) != null) {
|
|
848
|
+
return vue.unref(options.autoDirty);
|
|
849
|
+
} else if ($rewardEarly2.value) {
|
|
850
|
+
return false;
|
|
806
851
|
}
|
|
807
|
-
return
|
|
852
|
+
return true;
|
|
808
853
|
});
|
|
809
854
|
const $validating2 = vue.computed(() => {
|
|
810
855
|
return Object.entries($rules.value).some(([key, ruleResult]) => {
|
|
@@ -834,6 +879,22 @@ function createReactiveFieldStatus({
|
|
|
834
879
|
}
|
|
835
880
|
return [];
|
|
836
881
|
});
|
|
882
|
+
const $edited = vue.computed(() => {
|
|
883
|
+
if ($dirty.value) {
|
|
884
|
+
if (isDate(initialState.value) && isDate(state.value)) {
|
|
885
|
+
return toDate(initialState.value).getDate() !== toDate(state.value).getDate();
|
|
886
|
+
}
|
|
887
|
+
if (initialState.value == null) {
|
|
888
|
+
return !!state.value;
|
|
889
|
+
}
|
|
890
|
+
if (Array.isArray(state.value) && Array.isArray(initialState.value)) {
|
|
891
|
+
return state.value.length !== initialState.value.length;
|
|
892
|
+
}
|
|
893
|
+
return initialState.value !== state.value;
|
|
894
|
+
}
|
|
895
|
+
return false;
|
|
896
|
+
});
|
|
897
|
+
const $anyEdited = vue.computed(() => $edited.value);
|
|
837
898
|
const $tooltips = vue.computed(() => {
|
|
838
899
|
return extractRulesTooltips({
|
|
839
900
|
field: {
|
|
@@ -852,7 +913,10 @@ function createReactiveFieldStatus({
|
|
|
852
913
|
});
|
|
853
914
|
});
|
|
854
915
|
const $ready = vue.computed(() => {
|
|
855
|
-
|
|
916
|
+
if (!$autoDirty2.value) {
|
|
917
|
+
return !($invalid.value || $pending.value);
|
|
918
|
+
}
|
|
919
|
+
return $anyDirty.value && !($invalid.value || $pending.value);
|
|
856
920
|
});
|
|
857
921
|
const $pending = vue.computed(() => {
|
|
858
922
|
if (triggerPunishment.value || !$rewardEarly2.value) {
|
|
@@ -922,7 +986,9 @@ function createReactiveFieldStatus({
|
|
|
922
986
|
$anyDirty,
|
|
923
987
|
$tooltips,
|
|
924
988
|
$name,
|
|
925
|
-
$inactive
|
|
989
|
+
$inactive,
|
|
990
|
+
$edited,
|
|
991
|
+
$anyEdited
|
|
926
992
|
})
|
|
927
993
|
);
|
|
928
994
|
});
|
|
@@ -952,6 +1018,8 @@ function createReactiveFieldStatus({
|
|
|
952
1018
|
$autoDirty: $autoDirty2,
|
|
953
1019
|
$clearExternalErrorsOnChange: $clearExternalErrorsOnChange2,
|
|
954
1020
|
$anyDirty,
|
|
1021
|
+
$edited,
|
|
1022
|
+
$anyEdited,
|
|
955
1023
|
$name,
|
|
956
1024
|
$haveAnyAsyncRule: $haveAnyAsyncRule2,
|
|
957
1025
|
$shortcuts: $shortcuts2,
|
|
@@ -1008,8 +1076,10 @@ function createReactiveFieldStatus({
|
|
|
1008
1076
|
function $reset() {
|
|
1009
1077
|
$clearExternalErrors();
|
|
1010
1078
|
scopeState.$dirty.value = false;
|
|
1079
|
+
scopeState.triggerPunishment.value = false;
|
|
1011
1080
|
storage.setDirtyEntry(path, false);
|
|
1012
|
-
|
|
1081
|
+
initialState.value = isObject(state.value) ? cloneDeep(state.value) : Array.isArray(state.value) ? [...state.value] : state.value;
|
|
1082
|
+
Object.entries($rules.value).forEach(([_, rule]) => {
|
|
1013
1083
|
rule.$reset();
|
|
1014
1084
|
});
|
|
1015
1085
|
if (!scopeState.$lazy.value && scopeState.$autoDirty.value) {
|
|
@@ -1146,7 +1216,7 @@ function createCollectionElement({
|
|
|
1146
1216
|
storage,
|
|
1147
1217
|
options,
|
|
1148
1218
|
externalErrors: vue.toRef(externalErrors?.value ?? [], index),
|
|
1149
|
-
initialState
|
|
1219
|
+
initialState,
|
|
1150
1220
|
shortcuts,
|
|
1151
1221
|
fieldName
|
|
1152
1222
|
});
|
|
@@ -1229,6 +1299,7 @@ function createReactiveCollectionStatus({
|
|
|
1229
1299
|
if (scope2) {
|
|
1230
1300
|
collectionScopes.push(scope2);
|
|
1231
1301
|
}
|
|
1302
|
+
const initialStateRef = vue.toRef(initialState.value ?? [], index);
|
|
1232
1303
|
const element = createCollectionElement({
|
|
1233
1304
|
$id: $id.value,
|
|
1234
1305
|
path,
|
|
@@ -1239,7 +1310,7 @@ function createReactiveCollectionStatus({
|
|
|
1239
1310
|
options,
|
|
1240
1311
|
storage,
|
|
1241
1312
|
externalErrors: vue.toRef(externalErrors?.value ?? {}, `$each`),
|
|
1242
|
-
initialState:
|
|
1313
|
+
initialState: initialStateRef,
|
|
1243
1314
|
shortcuts,
|
|
1244
1315
|
fieldName
|
|
1245
1316
|
});
|
|
@@ -1293,7 +1364,7 @@ function createReactiveCollectionStatus({
|
|
|
1293
1364
|
options,
|
|
1294
1365
|
storage,
|
|
1295
1366
|
externalErrors: vue.toRef(externalErrors?.value ?? {}, `$each`),
|
|
1296
|
-
initialState: initialState
|
|
1367
|
+
initialState: vue.toRef(initialState.value ?? [], index),
|
|
1297
1368
|
shortcuts,
|
|
1298
1369
|
fieldName
|
|
1299
1370
|
});
|
|
@@ -1337,7 +1408,7 @@ function createReactiveCollectionStatus({
|
|
|
1337
1408
|
}
|
|
1338
1409
|
});
|
|
1339
1410
|
const $dirty = vue.computed(() => {
|
|
1340
|
-
return $fieldStatus.value.$dirty && $eachStatus.value.every((statusOrField) => {
|
|
1411
|
+
return $fieldStatus.value.$dirty && !!$eachStatus.value.length && $eachStatus.value.every((statusOrField) => {
|
|
1341
1412
|
return statusOrField.$dirty;
|
|
1342
1413
|
});
|
|
1343
1414
|
});
|
|
@@ -1369,6 +1440,16 @@ function createReactiveCollectionStatus({
|
|
|
1369
1440
|
return statusOrField.$pending;
|
|
1370
1441
|
});
|
|
1371
1442
|
});
|
|
1443
|
+
const $edited = vue.computed(() => {
|
|
1444
|
+
return !!$eachStatus.value.length && $eachStatus.value.every((statusOrField) => {
|
|
1445
|
+
return statusOrField.$edited;
|
|
1446
|
+
});
|
|
1447
|
+
});
|
|
1448
|
+
const $anyEdited = vue.computed(() => {
|
|
1449
|
+
return $fieldStatus.value.$anyEdited || $eachStatus.value.some((statusOrField) => {
|
|
1450
|
+
return statusOrField.$anyEdited;
|
|
1451
|
+
});
|
|
1452
|
+
});
|
|
1372
1453
|
const $errors = vue.computed(() => {
|
|
1373
1454
|
return {
|
|
1374
1455
|
$self: $fieldStatus.value.$errors,
|
|
@@ -1404,7 +1485,9 @@ function createReactiveCollectionStatus({
|
|
|
1404
1485
|
$name,
|
|
1405
1486
|
$each: $eachStatus,
|
|
1406
1487
|
$field: $fieldStatus,
|
|
1407
|
-
$value: state
|
|
1488
|
+
$value: state,
|
|
1489
|
+
$edited,
|
|
1490
|
+
$anyEdited
|
|
1408
1491
|
})
|
|
1409
1492
|
);
|
|
1410
1493
|
});
|
|
@@ -1428,7 +1511,9 @@ function createReactiveCollectionStatus({
|
|
|
1428
1511
|
$ready,
|
|
1429
1512
|
$name,
|
|
1430
1513
|
$shortcuts: $shortcuts2,
|
|
1431
|
-
$silentValue
|
|
1514
|
+
$silentValue,
|
|
1515
|
+
$edited,
|
|
1516
|
+
$anyEdited
|
|
1432
1517
|
};
|
|
1433
1518
|
});
|
|
1434
1519
|
if (immediateScopeState.isPrimitiveArray.value) {
|
|
@@ -1515,7 +1600,7 @@ function createReactiveCollectionStatus({
|
|
|
1515
1600
|
}
|
|
1516
1601
|
function $resetAll() {
|
|
1517
1602
|
$unwatch();
|
|
1518
|
-
state.value = cloneDeep(initialState);
|
|
1603
|
+
state.value = cloneDeep(initialState.value);
|
|
1519
1604
|
$reset();
|
|
1520
1605
|
}
|
|
1521
1606
|
const { $shortcuts, ...restScopeState } = scopeState;
|
|
@@ -1562,6 +1647,7 @@ function createReactiveNestedStatus({
|
|
|
1562
1647
|
const stateRef = vue.toRef(state.value, statePropKey);
|
|
1563
1648
|
const statePropRulesRef = vue.toRef(() => statePropRules);
|
|
1564
1649
|
const $externalErrors = vue.toRef(externalErrors?.value ?? {}, statePropKey);
|
|
1650
|
+
const initialStateRef = vue.toRef(initialState?.value ?? {}, statePropKey);
|
|
1565
1651
|
return [
|
|
1566
1652
|
statePropKey,
|
|
1567
1653
|
createReactiveChildrenStatus({
|
|
@@ -1569,7 +1655,7 @@ function createReactiveNestedStatus({
|
|
|
1569
1655
|
rulesDef: statePropRulesRef,
|
|
1570
1656
|
path: path ? `${path}.${statePropKey}` : statePropKey,
|
|
1571
1657
|
externalErrors: $externalErrors,
|
|
1572
|
-
initialState:
|
|
1658
|
+
initialState: initialStateRef,
|
|
1573
1659
|
fieldName: statePropKey,
|
|
1574
1660
|
...commonArgs
|
|
1575
1661
|
})
|
|
@@ -1581,6 +1667,7 @@ function createReactiveNestedStatus({
|
|
|
1581
1667
|
const externalRulesStatus = Object.fromEntries(
|
|
1582
1668
|
Object.entries(vue.unref(externalErrors) ?? {}).filter(([key, errors]) => !(key in rulesDef.value) && !!errors).map(([key]) => {
|
|
1583
1669
|
const stateRef = vue.toRef(state.value, key);
|
|
1670
|
+
const initialStateRef = vue.toRef(initialState?.value ?? {}, key);
|
|
1584
1671
|
return [
|
|
1585
1672
|
key,
|
|
1586
1673
|
createReactiveChildrenStatus({
|
|
@@ -1588,7 +1675,7 @@ function createReactiveNestedStatus({
|
|
|
1588
1675
|
rulesDef: vue.computed(() => ({})),
|
|
1589
1676
|
path: path ? `${path}.${key}` : key,
|
|
1590
1677
|
externalErrors: vue.toRef(externalErrors?.value ?? {}, key),
|
|
1591
|
-
initialState:
|
|
1678
|
+
initialState: initialStateRef,
|
|
1592
1679
|
fieldName: key,
|
|
1593
1680
|
...commonArgs
|
|
1594
1681
|
})
|
|
@@ -1598,6 +1685,7 @@ function createReactiveNestedStatus({
|
|
|
1598
1685
|
const statesWithNoRules = Object.fromEntries(
|
|
1599
1686
|
Object.entries(state.value).filter(([key]) => !(key in rulesDef.value) && !(key in (externalRulesStatus.value ?? {}))).map(([key]) => {
|
|
1600
1687
|
const stateRef = vue.toRef(state.value, key);
|
|
1688
|
+
const initialStateRef = vue.toRef(initialState?.value ?? {}, key);
|
|
1601
1689
|
return [
|
|
1602
1690
|
key,
|
|
1603
1691
|
createReactiveChildrenStatus({
|
|
@@ -1605,7 +1693,7 @@ function createReactiveNestedStatus({
|
|
|
1605
1693
|
rulesDef: vue.computed(() => ({})),
|
|
1606
1694
|
path: path ? `${path}.${key}` : key,
|
|
1607
1695
|
externalErrors: vue.toRef(externalErrors?.value ?? {}, key),
|
|
1608
|
-
initialState:
|
|
1696
|
+
initialState: initialStateRef,
|
|
1609
1697
|
fieldName: key,
|
|
1610
1698
|
...commonArgs
|
|
1611
1699
|
})
|
|
@@ -1628,6 +1716,7 @@ function createReactiveNestedStatus({
|
|
|
1628
1716
|
Object.values($fields.value).forEach((statusOrField) => {
|
|
1629
1717
|
statusOrField.$reset();
|
|
1630
1718
|
});
|
|
1719
|
+
initialState.value = { ...cloneDeep(state.value) };
|
|
1631
1720
|
define$WatchExternalErrors();
|
|
1632
1721
|
}
|
|
1633
1722
|
function $touch(runCommit = true, withConditions = false) {
|
|
@@ -1712,8 +1801,22 @@ function createReactiveNestedStatus({
|
|
|
1712
1801
|
return false;
|
|
1713
1802
|
});
|
|
1714
1803
|
const $error = vue.computed(() => $anyDirty.value && !$pending.value && $invalid.value);
|
|
1804
|
+
const $rewardEarly = vue.computed(() => {
|
|
1805
|
+
if (vue.unref(commonArgs.options.rewardEarly) != null) {
|
|
1806
|
+
return vue.unref(commonArgs.options.rewardEarly);
|
|
1807
|
+
}
|
|
1808
|
+
return false;
|
|
1809
|
+
});
|
|
1810
|
+
const $autoDirty = vue.computed(() => {
|
|
1811
|
+
if (vue.unref(commonArgs.options.autoDirty) != null) {
|
|
1812
|
+
return vue.unref(commonArgs.options.autoDirty);
|
|
1813
|
+
} else if ($rewardEarly.value) {
|
|
1814
|
+
return false;
|
|
1815
|
+
}
|
|
1816
|
+
return true;
|
|
1817
|
+
});
|
|
1715
1818
|
const $ready = vue.computed(() => {
|
|
1716
|
-
if (
|
|
1819
|
+
if (!$autoDirty.value) {
|
|
1717
1820
|
return !($invalid.value || $pending.value);
|
|
1718
1821
|
}
|
|
1719
1822
|
return $anyDirty.value && !($invalid.value || $pending.value);
|
|
@@ -1737,6 +1840,16 @@ function createReactiveNestedStatus({
|
|
|
1737
1840
|
})
|
|
1738
1841
|
);
|
|
1739
1842
|
});
|
|
1843
|
+
const $edited = vue.computed(() => {
|
|
1844
|
+
return !!Object.entries($fields.value).length && Object.entries($fields.value).every(([_, statusOrField]) => {
|
|
1845
|
+
return statusOrField?.$edited;
|
|
1846
|
+
});
|
|
1847
|
+
});
|
|
1848
|
+
const $anyEdited = vue.computed(() => {
|
|
1849
|
+
return Object.entries($fields.value).some(([_, statusOrField]) => {
|
|
1850
|
+
return statusOrField?.$anyEdited;
|
|
1851
|
+
});
|
|
1852
|
+
});
|
|
1740
1853
|
const $name = vue.computed(() => fieldName);
|
|
1741
1854
|
function processShortcuts() {
|
|
1742
1855
|
if (commonArgs.shortcuts?.nested) {
|
|
@@ -1759,7 +1872,9 @@ function createReactiveNestedStatus({
|
|
|
1759
1872
|
$name,
|
|
1760
1873
|
$silentErrors,
|
|
1761
1874
|
$errors,
|
|
1762
|
-
$fields
|
|
1875
|
+
$fields,
|
|
1876
|
+
$edited,
|
|
1877
|
+
$anyEdited
|
|
1763
1878
|
})
|
|
1764
1879
|
);
|
|
1765
1880
|
});
|
|
@@ -1817,7 +1932,9 @@ function createReactiveNestedStatus({
|
|
|
1817
1932
|
$name,
|
|
1818
1933
|
$shortcuts: $shortcuts2,
|
|
1819
1934
|
$groups,
|
|
1820
|
-
$silentValue
|
|
1935
|
+
$silentValue,
|
|
1936
|
+
$edited,
|
|
1937
|
+
$anyEdited
|
|
1821
1938
|
};
|
|
1822
1939
|
});
|
|
1823
1940
|
}
|
|
@@ -1841,7 +1958,7 @@ function createReactiveNestedStatus({
|
|
|
1841
1958
|
}
|
|
1842
1959
|
async function $resetAll() {
|
|
1843
1960
|
$unwatch();
|
|
1844
|
-
state.value = cloneDeep({ ...initialState ?? {} });
|
|
1961
|
+
state.value = cloneDeep({ ...initialState.value ?? {} });
|
|
1845
1962
|
$reset();
|
|
1846
1963
|
createReactiveFieldsStatus();
|
|
1847
1964
|
}
|
|
@@ -1983,10 +2100,10 @@ function useRootStorage({
|
|
|
1983
2100
|
// src/core/useRegle/useRegle.ts
|
|
1984
2101
|
function createUseRegleComposable(customRules, options, shortcuts) {
|
|
1985
2102
|
const globalOptions = {
|
|
1986
|
-
autoDirty: options?.autoDirty
|
|
1987
|
-
lazy: options?.lazy
|
|
1988
|
-
rewardEarly: options?.rewardEarly
|
|
1989
|
-
clearExternalErrorsOnChange: options?.clearExternalErrorsOnChange
|
|
2103
|
+
autoDirty: options?.autoDirty,
|
|
2104
|
+
lazy: options?.lazy,
|
|
2105
|
+
rewardEarly: options?.rewardEarly,
|
|
2106
|
+
clearExternalErrorsOnChange: options?.clearExternalErrorsOnChange
|
|
1990
2107
|
};
|
|
1991
2108
|
function useRegle2(state, rulesFactory, options2) {
|
|
1992
2109
|
const scopeRules = vue.isRef(rulesFactory) ? rulesFactory : vue.computed(typeof rulesFactory === "function" ? rulesFactory : () => rulesFactory);
|
|
@@ -1995,7 +2112,7 @@ function createUseRegleComposable(customRules, options, shortcuts) {
|
|
|
1995
2112
|
...options2
|
|
1996
2113
|
};
|
|
1997
2114
|
const processedState = vue.isRef(state) ? state : vue.ref(state);
|
|
1998
|
-
const initialState = { ...cloneDeep(processedState.value) };
|
|
2115
|
+
const initialState = vue.ref({ ...cloneDeep(processedState.value) });
|
|
1999
2116
|
const regle = useRootStorage({
|
|
2000
2117
|
scopeRules,
|
|
2001
2118
|
state: processedState,
|
package/dist/regle-core.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, MaybeRefOrGetter, ComputedRef } from 'vue';
|
|
1
|
+
import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, Raw, MaybeRefOrGetter, ComputedRef } from 'vue';
|
|
2
2
|
|
|
3
3
|
type Prettify<T> = T extends infer R ? {
|
|
4
4
|
[K in keyof R]: R[K];
|
|
@@ -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>>>;
|
|
@@ -528,7 +530,7 @@ interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends
|
|
|
528
530
|
*
|
|
529
531
|
* To see the list of properties: {@link https://www.reglejs.dev/core-concepts/validation-properties}
|
|
530
532
|
*/
|
|
531
|
-
r$: RegleRoot<TState, TRules, TValidationGroups, TShortcuts
|
|
533
|
+
r$: Raw<RegleRoot<TState, TRules, TValidationGroups, TShortcuts>>;
|
|
532
534
|
}
|
|
533
535
|
type isDeepExact<T, U> = {
|
|
534
536
|
[K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
|
|
@@ -592,7 +594,7 @@ declare function useRootStorage({ initialState, options, scopeRules, state, cust
|
|
|
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;
|
|
598
600
|
}): {
|
|
@@ -1481,6 +1483,8 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
1481
1483
|
readonly $invalid: boolean;
|
|
1482
1484
|
readonly $dirty: boolean;
|
|
1483
1485
|
readonly $anyDirty: boolean;
|
|
1486
|
+
readonly $edited: boolean;
|
|
1487
|
+
readonly $anyEdited: boolean;
|
|
1484
1488
|
/** Indicates if any async rule for the field is currently running. Always false for synchronous rules. */
|
|
1485
1489
|
readonly $pending: boolean;
|
|
1486
1490
|
/** Convenience flag to easily decide if a message should be displayed. Equivalent to $dirty && !$pending && $invalid. */
|
|
@@ -1497,7 +1501,11 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
1497
1501
|
$silentValue: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue>>;
|
|
1498
1502
|
/** Marks the field and all nested properties as $dirty. */
|
|
1499
1503
|
$touch(runCommit?: boolean, withConditions?: boolean): void;
|
|
1500
|
-
/**
|
|
1504
|
+
/**
|
|
1505
|
+
* - Restore the validation state to a pristine state while keeping the current state.
|
|
1506
|
+
* - Resets the `$dirty` state on all nested properties of a form.
|
|
1507
|
+
* - Rerun rules if `$lazy` is false
|
|
1508
|
+
*/
|
|
1501
1509
|
$reset(): void;
|
|
1502
1510
|
/** Will reset both your validation state and your form state to their initial values. */
|
|
1503
1511
|
$resetAll: () => void;
|
|
@@ -1516,6 +1524,7 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
1516
1524
|
readonly $type: string;
|
|
1517
1525
|
/** Returns the computed error message or messages for the current rule. */
|
|
1518
1526
|
readonly $message: string | string[];
|
|
1527
|
+
/** Stores the current rule tooltip or tooltips */
|
|
1519
1528
|
readonly $tooltip: string | string[];
|
|
1520
1529
|
/** Indicates whether or not the rule is enabled (for rules like requiredIf) */
|
|
1521
1530
|
readonly $active: boolean;
|
package/dist/regle-core.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, MaybeRefOrGetter, ComputedRef } from 'vue';
|
|
1
|
+
import { MaybeRef, Ref, UnwrapRef, UnwrapNestedRefs, Raw, MaybeRefOrGetter, ComputedRef } from 'vue';
|
|
2
2
|
|
|
3
3
|
type Prettify<T> = T extends infer R ? {
|
|
4
4
|
[K in keyof R]: R[K];
|
|
@@ -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>>>;
|
|
@@ -528,7 +530,7 @@ interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends
|
|
|
528
530
|
*
|
|
529
531
|
* To see the list of properties: {@link https://www.reglejs.dev/core-concepts/validation-properties}
|
|
530
532
|
*/
|
|
531
|
-
r$: RegleRoot<TState, TRules, TValidationGroups, TShortcuts
|
|
533
|
+
r$: Raw<RegleRoot<TState, TRules, TValidationGroups, TShortcuts>>;
|
|
532
534
|
}
|
|
533
535
|
type isDeepExact<T, U> = {
|
|
534
536
|
[K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
|
|
@@ -592,7 +594,7 @@ declare function useRootStorage({ initialState, options, scopeRules, state, cust
|
|
|
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;
|
|
598
600
|
}): {
|
|
@@ -1481,6 +1483,8 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
1481
1483
|
readonly $invalid: boolean;
|
|
1482
1484
|
readonly $dirty: boolean;
|
|
1483
1485
|
readonly $anyDirty: boolean;
|
|
1486
|
+
readonly $edited: boolean;
|
|
1487
|
+
readonly $anyEdited: boolean;
|
|
1484
1488
|
/** Indicates if any async rule for the field is currently running. Always false for synchronous rules. */
|
|
1485
1489
|
readonly $pending: boolean;
|
|
1486
1490
|
/** Convenience flag to easily decide if a message should be displayed. Equivalent to $dirty && !$pending && $invalid. */
|
|
@@ -1497,7 +1501,11 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
1497
1501
|
$silentValue: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue>>;
|
|
1498
1502
|
/** Marks the field and all nested properties as $dirty. */
|
|
1499
1503
|
$touch(runCommit?: boolean, withConditions?: boolean): void;
|
|
1500
|
-
/**
|
|
1504
|
+
/**
|
|
1505
|
+
* - Restore the validation state to a pristine state while keeping the current state.
|
|
1506
|
+
* - Resets the `$dirty` state on all nested properties of a form.
|
|
1507
|
+
* - Rerun rules if `$lazy` is false
|
|
1508
|
+
*/
|
|
1501
1509
|
$reset(): void;
|
|
1502
1510
|
/** Will reset both your validation state and your form state to their initial values. */
|
|
1503
1511
|
$resetAll: () => void;
|
|
@@ -1516,6 +1524,7 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
|
|
|
1516
1524
|
readonly $type: string;
|
|
1517
1525
|
/** Returns the computed error message or messages for the current rule. */
|
|
1518
1526
|
readonly $message: string | string[];
|
|
1527
|
+
/** Stores the current rule tooltip or tooltips */
|
|
1519
1528
|
readonly $tooltip: string | string[];
|
|
1520
1529
|
/** Indicates whether or not the rule is enabled (for rules like requiredIf) */
|
|
1521
1530
|
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 L(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 ot=Symbol("regle-rule");function Pt(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 H(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>H(n)))),r=="Map"&&(t=new Map([...e].map(n=>[H(n[0]),H(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,Pt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=H(e[n]);}return t}function K(e){return e instanceof Date||e instanceof File?!1:typeof e=="object"&&e!==null&&!Array.isArray(e)}function Me(e){if(L(e))return !1;try{let t=null;if(e instanceof Date)t=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}}function _e(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}var Ve=(r=>(r.Inline="__inline",r.Async="__async",r))(Ve||{});function ut(e,t){return e.some(r=>r[t])}function it(e,t){return e.reduce((r,n)=>{let l=n[t]||[];return r.concat(l)},[])}function J(e){try{return e.map(t=>vue.toValue(t))}catch{return []}}function st(e){return e.map(t=>t instanceof Function?vue.computed(t):vue.isRef(t)?t:vue.toRef(()=>t))}function ct(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 Ne(e,...t){let{validator:r,type:n}=e,l=n==="__async"||r.constructor.name==="AsyncFunction";return {...{validator(d,...m){return e.validator(d,...J(m.length?m:t))},message(d){return typeof e.message=="function"?e.message({...d,$params:J(d?.$params?.length?d.$params:t)}):e.message},active(d){return typeof e.active=="function"?e.active({...d,$params:J(d?.$params?.length?d.$params:t)}):e.active??!0},tooltip(d){return typeof e.tooltip=="function"?e.tooltip({...d,$params:J(d?.$params?.length?d.$params:t)}):e.tooltip??[]},exec(d){let m=e.validator(d,...J(t)),$;return m instanceof Promise?m.then(g=>($=g,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:st(t),_brand:ot}}function Ge(e){if(typeof e.validator=="function"){let r=Ne(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(ct(e.validator)>1){let l=function(...f){return Ne(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 We(){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 g(o,s){o&&s!=null&&f.value.delete(`${o}-${s}`);}function V(o,s){n.value.set(o,s);}function F(o){return n.value.get(o)??!1}function a(o,s){e.value.set(o,s);}function T(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),G=Object.keys(o);return G.length!==i.length||!G.every(W=>i.includes(W))?!1:G.every(W=>{let w=o[W],b=s[W];return !b||!w||typeof w=="function"||typeof b=="function"||typeof w=="number"||typeof w=="boolean"?!1:w._params?w._params?.every((q,y)=>{if(typeof b=="number"||typeof b=="boolean")return !0;{let I=J(b._params),k=J(w._params);return I?.[y]===k?.[y]}}):!0})}function N(o){let s=l.value.get(o);if(s)return s;{let i=vue.ref(!1),G=vue.ref(!0),z=vue.ref({}),W=vue.ref(!1);return l.value.set(o,{$pending:i,$valid:G,$metadata:z,$validating:W}),{$pending:i,$valid:G,$metadata:z,$validating:W}}}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:V,checkRuleDeclEntry:T,getDirtyState:F,trySetRuleStatusRef:N,getFieldsEntry:p,getCollectionsEntry:d,getArrayStatus:$,addArrayStatus:m,deleteArrayStatus:g,arrayStatusStorage:f}}function Te(e){return e.value instanceof Date||e.value instanceof File?!1:K(e.value)}function ke(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 Wt(){return Math.floor(Math.random()*Date.now()).toString()}function Ce(){return typeof window>"u"?Wt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function ft(e,t){return Te(e)||K(t.value)&&!L(t.value)&&!Object.entries(t.value).some(([r,n])=>$e(n)||typeof n=="function")}function Rt(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function pt(e){return !!e.value&&K(e.value)}function $e(e){return K(e)&&"_validator"in e}function ge(e){return typeof e.value!="function"}function dt(e){return K(e)&&"$fields"in e}function yt(e){return !!e&&"$rules"in e}function Ue({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 vt({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(),g={},V,F=vue.ref(!1),{$pending:a,$valid:T,$metadata:C,$validating:N}=p.trySetRuleStatusRef(`${f}.${n}`);function o(){$=vue.effectScope(),g=$.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:T.value,$invalid:!T.value,$pending:a.value},$params:D.value,...C.value})),q=vue.computed(()=>ge(r)?typeof r.value.active=="function"?r.value.active(b.value):!!r.value.active:!0);function y(u){let c="",S=t?t[n]?.[u]:void 0;if(S&&(typeof S=="function"?c=S(b.value):c=S),ge(r)){let R=`_${u}_patched`;S&&!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 L(u)&&(u="This field is not valid"),u}),k=vue.computed(()=>y("tooltip")),te=vue.computed(()=>ge(r)&&r.value.type?r.value.type:n),ae=vue.computed(()=>ge(r)?r.value.validator:r.value),D=vue.computed(()=>typeof r.value=="function"?[]:J(r.value._params??[])),P=vue.computed(()=>`${f}.${te.value}`);return {$active:q,$message:I,$type:te,$validator:ae,$params:D,$path:P,$tooltip:k}}),V=vue.watch(g?.$params,()=>{(m.$autoDirty.value||m.$rewardEarly.value&&e.$error.value)&&z();});}o();function s(){T.value=!0,e.$dirty.value&&(a.value=!0);}async function i(){let b=!1;try{let q=g.$validator.value,y=q(l.value,...g.$params.value),I=l.value;s();let k;if(y instanceof Promise?k=await y:k=y,l.value!==I)return !0;if(typeof k=="boolean")b=k;else {let{$valid:te,...ae}=k;b=te,C.value=ae;}}catch{b=!1;}finally{a.value=!1;}return b}let G=De(i,d??200);async function z(){try{N.value=!0;let b=!1;if($e(r.value)&&r.value._async)b=await G();else {let q=g.$validator.value,y=q(l.value,...g.$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,...k}=y;b=I,C.value=k;}}return T.value=b,b}catch{return !1}finally{N.value=!1;}}function W(){T.value=!0,C.value={},a.value=!1,N.value=!1,o();}function w(){V(),$.stop(),$=vue.effectScope();}return vue.reactive({...g,$pending:a,$valid:T,$metadata:C,$haveAsync:F,$validating:N,$validate:z,$unwatch:w,$watch:o,$reset:W})}function Ie({state:e,rulesDef:t,customMessages:r,path:n,fieldName:l,storage:f,options:p,externalErrors:d,onUnwatch:m,$isArray:$,initialState:g,shortcuts:V}){let F=vue.effectScope(),a,T=[],C,N,o,s,i=()=>{};function G(){let v=t.value,A=f.checkRuleDeclEntry(n,v);I.value=Object.fromEntries(Object.entries(v).filter(([M])=>M.startsWith("$"))),w(),y.value=Object.fromEntries(Object.entries(t.value).filter(([M])=>!M.startsWith("$")).map(([M,X])=>{if(X){let re=vue.toRef(()=>X);return [M,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:re,ruleKey:M,state:e,path:n,storage:f,$debounce:I.value.$debounce})]}return []}).filter(M=>!!M.length)),a.processShortcuts(),z(),A?.valid!=null&&(a.$dirty.value=f.getDirtyState(n),a.$dirty.value&&i()),f.addRuleDeclEntry(n,v);}function z(){i=a.$debounce.value?De(q,a.$debounce.value??a.$haveAnyAsyncRule?100:0):q;}function W(){y.value&&Object.entries(y.value).forEach(([v,A])=>{A.$unwatch();}),o(),a.$dirty.value&&f.setDirtyEntry(n,a.$dirty.value),C?.(),N?.(),F.stop(),F=vue.effectScope(),T.forEach(v=>v.stop()),T=[],m?.(),s?.();}function w(){y.value&&Object.entries(y.value).forEach(([v,A])=>{A.$watch();}),a=F.run(()=>{let v=vue.ref(!1),A=vue.ref(!1),M=vue.computed(()=>v.value),X=vue.computed(()=>I.value.$debounce),re=vue.computed(()=>I.value.$lazy!=null?I.value.$lazy:vue.unref(p.lazy)!=null?vue.unref(p.lazy):!1),h=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):!h.value),_=vue.computed(()=>Object.entries(y.value).some(([Z,le])=>le.$validating)),ve=vue.computed({get:()=>e.value,set(Z){C(),e.value=Z,b();}}),Ae=vue.computed(()=>fe.value&&!me.value&&v.value),Qe=vue.computed(()=>Ae.value?Ue({field:{$dirty:v.value,$externalErrors:d?.value,$rules:y.value}}):[]),je=vue.computed(()=>v.value?Me(g.value)&&Me(e.value)?_e(g.value).getDate()!==_e(e.value).getDate():g.value==null?!!e.value:Array.isArray(e.value)&&Array.isArray(g.value)?e.value.length!==g.value.length:g.value!==e.value:!1),Xe=vue.computed(()=>je.value),Ze=vue.computed(()=>vt({field:{$rules:y.value}})),Ke=vue.computed(()=>Ue({field:{$dirty:v.value,$externalErrors:d?.value,$rules:y.value},silent:!0})),et=vue.computed(()=>E.value?M.value&&!(fe.value||me.value):!(fe.value||me.value)),me=vue.computed(()=>A.value||!h.value?Object.entries(y.value).some(([Z,le])=>le.$pending):!1),fe=vue.computed(()=>d?.value?.length?!0:L(y.value)?!1:!h.value||h.value&&A.value?Object.entries(y.value).some(([Z,le])=>!le.$valid):!1),tt=vue.computed(()=>l),Fe=vue.computed(()=>!!L(y.value)),rt=vue.computed(()=>d?.value?.length||Fe.value?!1:v.value&&!L(e.value)&&!_.value?Object.values(y.value).every(Z=>Z.$valid&&Z.$active):!1),It=vue.computed(()=>Object.entries(y.value).some(([Z,le])=>le.$haveAsync));function wt(){V?.fields&&Object.entries(V.fields).forEach(([Z,le])=>{let at=vue.effectScope();nt[Z]=at.run(()=>{let lt=vue.ref();return vue.watchEffect(()=>{lt.value=le(vue.reactive({$dirty:v,$externalErrors:d?.value??[],$value:e,$silentValue:ve,$rules:y,$error:Ae,$pending:me,$invalid:fe,$valid:rt,$errors:Qe,$ready:et,$silentErrors:Ke,$anyDirty:M,$tooltips:Ze,$name:tt,$inactive:Fe,$edited:je,$anyEdited:Xe}));}),lt}),T.push(at);});}let nt={};return vue.watch(fe,Z=>{Z||(A.value=!1);}),{$error:Ae,$pending:me,$invalid:fe,$valid:rt,$debounce:X,$lazy:re,$errors:Qe,$ready:et,$silentErrors:Ke,$rewardEarly:h,$autoDirty:E,$clearExternalErrorsOnChange:O,$anyDirty:M,$edited:je,$anyEdited:Xe,$name:tt,$haveAnyAsyncRule:It,$shortcuts:nt,$validating:_,$tooltips:Ze,$dirty:v,triggerPunishment:A,processShortcuts:wt,$silentValue:ve,$inactive:Fe}}),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,z);}function b(){C=vue.watch(e,()=>{a.$autoDirty.value&&(a.$dirty.value||(a.$dirty.value=!0)),t.value instanceof Function&&G(),(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&i(),a.$rewardEarly.value!==!0&&a.$clearExternalErrorsOnChange.value&&u();},{deep:$?!0:xe?1:!0});}function q(){Object.values(y.value).forEach(v=>{v.$validate();});}let y=vue.ref({}),I=vue.ref({});G();function k(){u(),a.$dirty.value=!1,a.triggerPunishment.value=!1,f.setDirtyEntry(n,!1),g.value=K(e.value)?H(e.value):Array.isArray(e.value)?[...e.value]:e.value,Object.entries(y.value).forEach(([v,A])=>{A.$reset();}),!a.$lazy.value&&a.$autoDirty.value&&Object.values(y.value).forEach(v=>v.$validate());}function te(v=!0,A=!1){a.$dirty.value||(a.$dirty.value=!0),A&&v?(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&i():v&&i();}async function ae(){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 L(y.value)?{result:!0,data:v}:{result:(await Promise.allSettled(Object.entries(y.value).map(([X,re])=>re.$validate()))).every(X=>X.status==="fulfilled"?X.value===!0:!1),data:v}}catch{return {result:!1,data:e.value}}}function D(){W(),e.value=H(g),k();}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:S,$autoDirty:R,$rewardEarly:x,$clearExternalErrorsOnChange:B,$haveAnyAsyncRule:ee,$debounce:Q,$lazy:oe,...ce}=a;return vue.reactive({...ce,$externalErrors:d,$value:e,$rules:y,...c,$reset:k,$touch:te,$validate:ae,$unwatch:W,$watch:w,$resetAll:D,$extractDirtyFields:P,$clearExternalErrors:u})}function He({$id:e,path:t,index:r,options:n,storage:l,stateValue:f,customMessages:p,rules:d,externalErrors:m,initialState:$,shortcuts:g,fieldName:V}){let F=d.$key?d.$key:Ce(),a=`${t}.${String(F)}`;typeof f.value=="object"&&f.value!=null&&(f.value.$id?a=`${t}.${f.value.$id}`:Object.defineProperties(f.value,{$id:{value:F,enumerable:!1,configurable:!1,writable:!1}}));let T=be({state:f,rulesDef:vue.toRef(()=>d),customMessages:p,path:a,storage:l,options:n,externalErrors:vue.toRef(m?.value??[],r),initialState:$,shortcuts:g,fieldName:V});if(T){let C=f.value?.$id;T.$id=C??String(F),l.addArrayStatus(e,T.$id,T);}return T}function ht({state:e,rulesDef:t,customMessages:r,path:n,storage:l,options:f,externalErrors:p,initialState:d,shortcuts:m,fieldName:$}){let g=vue.effectScope(),V,F=vue.effectScope(),a,T=[];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=F.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)})),G(),w();function G(){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:S,unwrapped:R}=ke(t.value.$each,vue.toRef(()=>u),c);S&&T.push(S);let x=vue.toRef(d.value??[],c),B=He({$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:x,shortcuts:m,fieldName:$});return B||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 z(){if(Array.isArray(e.value)){let u=H(i.value);i.value=e.value.map((c,S)=>{let R=vue.toRef(()=>c);if(c.$id&&i.value.find(x=>x.$id===c.$id)){let x=l.getArrayStatus(C.value,c.$id);return x?(x.$value=R,x):null}else {let{scope:x,unwrapped:B}=ke(t.value.$each,R,S);if(x&&T.push(x),B){let ee=He({$id:C.value,path:n,customMessages:r,rules:B,stateValue:R,index:S,options:f,storage:l,externalErrors:vue.toRef(p?.value??{},"$each"),initialState:vue.toRef(d.value??[],S),shortcuts:m,fieldName:$});return ee||null}}}).filter(c=>!!c),u.filter(c=>!e.value.find(S=>c.$id===S.$id)).forEach((c,S)=>{l.deleteArrayStatus(C.value,S.toString());});}else i.value=[];}function W(){o=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?G():z();},{deep:xe?1:!0,flush:"pre"});}function w(){W(),g=vue.effectScope(),V=g.run(()=>{let u=vue.computed({get:()=>e.value,set(h){o(),e.value=h,W();}}),c=vue.computed(()=>s.value.$dirty&&!!i.value.length&&i.value.every(h=>h.$dirty)),S=vue.computed(()=>s.value.$anyDirty||i.value.some(h=>h.$anyDirty)),R=vue.computed(()=>s.value.$invalid||i.value.some(h=>h.$invalid)),x=vue.computed(()=>(L(s.value.$rules)?!0:s.value.$valid)&&i.value.every(h=>h.$valid)),B=vue.computed(()=>s.value.$error||i.value.some(h=>h.$error)),ee=vue.computed(()=>!(R.value||Q.value)),Q=vue.computed(()=>s.value.$pending||i.value.some(h=>h.$pending)),oe=vue.computed(()=>!!i.value.length&&i.value.every(h=>h.$edited)),ce=vue.computed(()=>s.value.$anyEdited||i.value.some(h=>h.$anyEdited)),v=vue.computed(()=>({$self:s.value.$errors,$each:i.value.map(h=>h.$errors)})),A=vue.computed(()=>({$self:s.value.$silentErrors,$each:i.value.map(h=>h.$silentErrors)})),M=vue.computed(()=>$);function X(){m?.collections&&Object.entries(m?.collections).forEach(([h,O])=>{let E=vue.effectScope();re[h]=E.run(()=>{let _=vue.ref();return vue.watchEffect(()=>{_.value=O(vue.reactive({$dirty:c,$error:B,$silentValue:u,$pending:Q,$invalid:R,$valid:x,$errors:v,$ready:ee,$silentErrors:A,$anyDirty:S,$name:M,$each:i,$field:s,$value:e,$edited:oe,$anyEdited:ce}));}),_}),T.push(E);});}let re={};return X(),{$dirty:c,$anyDirty:S,$invalid:R,$valid:x,$error:B,$pending:Q,$errors:v,$silentErrors:A,$ready:ee,$name:M,$shortcuts:re,$silentValue:u,$edited:oe,$anyEdited:ce}}),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();}),g.stop(),g=vue.effectScope(),F.stop(),F=vue.effectScope(!0),T.forEach(u=>u.stop()),T=[];}function q(u=!0,c=!1){s.value.$touch(u,c),i.value.forEach(S=>{S.$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 k(){s.value.$clearExternalErrors(),i.value.forEach(u=>{u.$clearExternalErrors();});}function te(u=!0){let c=i.value.map(S=>{if(dt(S))return S.$extractDirtyFields(u)});return u&&c.every(S=>L(S))&&(c=[]),c}function ae(){b(),e.value=H(d.value),y();}let{$shortcuts:D,...P}=V;return vue.reactive({$field:s,...P,...D,$each:i,$value:e,$validate:I,$unwatch:b,$watch:w,$touch:q,$reset:y,$resetAll:ae,$extractDirtyFields:te,$clearExternalErrors:k})}function Oe({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:l,validationGroups:f,initialState:p,fieldName:d,...m}){let $=vue.effectScope(),g,V=[],F=null,a=null,T=null;async function N(D=!0){let P=Object.entries(e.value),u=Object.fromEntries(P.filter(([R,x])=>!!x).map(([R,x])=>{if(x){let B=vue.toRef(t.value,R),ee=vue.toRef(()=>x),Q=vue.toRef(l?.value??{},R),oe=vue.toRef(p?.value??{},R);return [R,be({state:B,rulesDef:ee,path:r?`${r}.${R}`:R,externalErrors:Q,initialState:oe,fieldName:R,...m})]}return []})),c=Object.fromEntries(Object.entries(vue.unref(l)??{}).filter(([R,x])=>!(R in e.value)&&!!x).map(([R])=>{let x=vue.toRef(t.value,R),B=vue.toRef(p?.value??{},R);return [R,be({state:x,rulesDef:vue.computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:vue.toRef(l?.value??{},R),initialState:B,fieldName:R,...m})]})),S=Object.fromEntries(Object.entries(t.value).filter(([R])=>!(R in e.value)&&!(R in(c.value??{}))).map(([R])=>{let x=vue.toRef(t.value,R),B=vue.toRef(p?.value??{},R);return [R,be({state:x,rulesDef:vue.computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:vue.toRef(l?.value??{},R),initialState:B,fieldName:R,...m})]}));o.value={...u,...c,...S},D&&W();}let o=m.storage.getFieldsEntry(r);N();function s(){a?.(),Object.values(o.value).forEach(D=>{D.$reset();}),p.value={...H(t.value)},G();}function i(D=!0,P=!1){Object.values(o.value).forEach(u=>{u.$touch(D,P);});}function G(){l?.value&&(a=vue.watch(l,()=>{w(),N();},{deep:!0}));}function z(){T=vue.watch(t,()=>{w(),N(),i(!0,!0);},{flush:"sync"});}function W(){n&&(F?.(),F=vue.watch(n,()=>{w(),N();},{deep:!0,flush:"post"}),G()),z(),$=vue.effectScope(),g=$.run(()=>{let D=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)),S=vue.computed(()=>{let O=Object.entries(o.value).filter(([E,_])=>yt(_)?!_.$inactive:!0);return O.length?O.every(([E,_])=>_?.$valid):!1}),R=vue.computed(()=>u.value&&!Q.value&&c.value),x=vue.computed(()=>vue.unref(m.options.rewardEarly)!=null?vue.unref(m.options.rewardEarly):!1),B=vue.computed(()=>vue.unref(m.options.autoDirty)!=null?vue.unref(m.options.autoDirty):!x.value),ee=vue.computed(()=>B.value?u.value&&!(c.value||Q.value):!(c.value||Q.value)),Q=vue.computed(()=>Object.entries(o.value).some(([O,E])=>E?.$pending)),oe=vue.computed(()=>Object.fromEntries(Object.entries(o.value).map(([O,E])=>[O,E?.$errors]))),ce=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)),A=vue.computed(()=>Object.entries(o.value).some(([O,E])=>E?.$anyEdited)),M=vue.computed(()=>d);function X(){m.shortcuts?.nested&&Object.entries(m.shortcuts.nested).forEach(([O,E])=>{let _=vue.effectScope();h[O]=_.run(()=>{let ve=vue.ref();return vue.watchEffect(()=>{ve.value=E(vue.reactive({$dirty:P,$value:t,$silentValue:D,$error:R,$pending:Q,$invalid:c,$valid:S,$ready:ee,$anyDirty:u,$name:M,$silentErrors:ce,$errors:oe,$fields:o,$edited:v,$anyEdited:A}));}),ve}),V.push(_);});}let re=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(_=>[_,ut(E,_)])),...Object.fromEntries(["$errors","$silentErrors"].map(_=>[_,it(E,_)]))}]:[])):{},set(){}}),h={};return X(),{$dirty:P,$anyDirty:u,$invalid:c,$valid:S,$error:R,$pending:Q,$errors:oe,$silentErrors:ce,$ready:ee,$name:M,$shortcuts:h,$groups:re,$silentValue:D,$edited:v,$anyEdited:A}});}function w(){F?.(),a?.(),T?.(),V.forEach(D=>D.stop()),V=[],$.stop(),o.value&&Object.entries(o.value).forEach(([D,P])=>{P.$unwatch();});}function b(){Object.entries(o.value).forEach(([D,P])=>{P.$clearExternalErrors();});}async function q(){w(),t.value=H({...p.value??{}}),s(),N();}function y(D){return D.filter(([P,u])=>K(u)?!(u&&typeof u=="object"&&"_null"in u)&&!L(u):Array.isArray(u)?u.length:!0)}function I(D=!0){let P=Object.entries(o.value).map(([u,c])=>[u,c.$extractDirtyFields(D)]);return D&&(P=y(P)),Object.fromEntries(P)}async function k(){try{let D=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:D}}catch{return {result:!1,data:t.value}}}let{$shortcuts:te,...ae}=g;return vue.reactive({...ae,...te,$fields:o,$value:t,$resetAll:q,$reset:s,$touch:i,$validate:k,$unwatch:w,$watch:W,$clearExternalErrors:b,$extractDirtyFields:I})}function be({rulesDef:e,externalErrors:t,...r}){if(Rt(e,r.state))return ht({rulesDef:e,externalErrors:t,...r});if(ft(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(pt(e))return Ie({rulesDef:e,externalErrors:t,...r})}function ye({initialState:e,options:t,scopeRules:r,state:n,customRules:l,shortcuts:f}){let p=We(),d=vue.ref();return d.value=Oe({rootRules:r,rulesDef:r,state:n,customMessages:l?.(),storage:p,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 qe(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},g=vue.isRef(f)?f:vue.ref(f),V=vue.ref({...H(g.value)});return {r$:ye({scopeRules:m,state:g,options:$,initialState:V,customRules:e,shortcuts:r}).regle}}return l}var xt=qe();function Je(){function e(t,r){return r}return e}var Ye=Je();function Ct({rules:e,modifiers:t,shortcuts:r}){let n=qe(e,t,r),l=Je();return {useRegle:n,inferRules:l}}
|
|
2
|
+
exports.InternalRuleType=Ve;exports.createRule=Ge;exports.defineRegleConfig=Ct;exports.inferRules=Ye;exports.unwrapRuleParameters=J;exports.useRegle=xt;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 L(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 ot=Symbol("regle-rule");function Pt(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 H(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>H(n)))),r=="Map"&&(t=new Map([...e].map(n=>[H(n[0]),H(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,Pt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=H(e[n]);}return t}function K(e){return e instanceof Date||e instanceof File?!1:typeof e=="object"&&e!==null&&!Array.isArray(e)}function Me(e){if(L(e))return !1;try{let t=null;if(e instanceof Date)t=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}}function _e(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}var Ve=(r=>(r.Inline="__inline",r.Async="__async",r))(Ve||{});function ut(e,t){return e.some(r=>r[t])}function it(e,t){return e.reduce((r,n)=>{let l=n[t]||[];return r.concat(l)},[])}function J(e){try{return e.map(t=>toValue(t))}catch{return []}}function st(e){return e.map(t=>t instanceof Function?computed(t):isRef(t)?t:toRef(()=>t))}function ct(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 Ne(e,...t){let{validator:r,type:n}=e,l=n==="__async"||r.constructor.name==="AsyncFunction";return {...{validator(d,...m){return e.validator(d,...J(m.length?m:t))},message(d){return typeof e.message=="function"?e.message({...d,$params:J(d?.$params?.length?d.$params:t)}):e.message},active(d){return typeof e.active=="function"?e.active({...d,$params:J(d?.$params?.length?d.$params:t)}):e.active??!0},tooltip(d){return typeof e.tooltip=="function"?e.tooltip({...d,$params:J(d?.$params?.length?d.$params:t)}):e.tooltip??[]},exec(d){let m=e.validator(d,...J(t)),$;return m instanceof Promise?m.then(g=>($=g,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:st(t),_brand:ot}}function Ge(e){if(typeof e.validator=="function"){let r=Ne(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(ct(e.validator)>1){let l=function(...f){return Ne(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 We(){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 g(o,s){o&&s!=null&&f.value.delete(`${o}-${s}`);}function V(o,s){n.value.set(o,s);}function F(o){return n.value.get(o)??!1}function a(o,s){e.value.set(o,s);}function T(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),G=Object.keys(o);return G.length!==i.length||!G.every(W=>i.includes(W))?!1:G.every(W=>{let w=o[W],b=s[W];return !b||!w||typeof w=="function"||typeof b=="function"||typeof w=="number"||typeof w=="boolean"?!1:w._params?w._params?.every((q,y)=>{if(typeof b=="number"||typeof b=="boolean")return !0;{let I=J(b._params),k=J(w._params);return I?.[y]===k?.[y]}}):!0})}function N(o){let s=l.value.get(o);if(s)return s;{let i=ref(!1),G=ref(!0),z=ref({}),W=ref(!1);return l.value.set(o,{$pending:i,$valid:G,$metadata:z,$validating:W}),{$pending:i,$valid:G,$metadata:z,$validating:W}}}return getCurrentScope()&&onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),l.value.clear(),f.value.clear();}),{addRuleDeclEntry:a,setDirtyEntry:V,checkRuleDeclEntry:T,getDirtyState:F,trySetRuleStatusRef:N,getFieldsEntry:p,getCollectionsEntry:d,getArrayStatus:$,addArrayStatus:m,deleteArrayStatus:g,arrayStatusStorage:f}}function Te(e){return e.value instanceof Date||e.value instanceof File?!1:K(e.value)}function ke(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 Wt(){return Math.floor(Math.random()*Date.now()).toString()}function Ce(){return typeof window>"u"?Wt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function ft(e,t){return Te(e)||K(t.value)&&!L(t.value)&&!Object.entries(t.value).some(([r,n])=>$e(n)||typeof n=="function")}function Rt(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function pt(e){return !!e.value&&K(e.value)}function $e(e){return K(e)&&"_validator"in e}function ge(e){return typeof e.value!="function"}function dt(e){return K(e)&&"$fields"in e}function yt(e){return !!e&&"$rules"in e}function Ue({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 vt({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(),g={},V,F=ref(!1),{$pending:a,$valid:T,$metadata:C,$validating:N}=p.trySetRuleStatusRef(`${f}.${n}`);function o(){$=effectScope(),g=$.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:T.value,$invalid:!T.value,$pending:a.value},$params:D.value,...C.value})),q=computed(()=>ge(r)?typeof r.value.active=="function"?r.value.active(b.value):!!r.value.active:!0);function y(u){let c="",S=t?t[n]?.[u]:void 0;if(S&&(typeof S=="function"?c=S(b.value):c=S),ge(r)){let R=`_${u}_patched`;S&&!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 L(u)&&(u="This field is not valid"),u}),k=computed(()=>y("tooltip")),te=computed(()=>ge(r)&&r.value.type?r.value.type:n),ae=computed(()=>ge(r)?r.value.validator:r.value),D=computed(()=>typeof r.value=="function"?[]:J(r.value._params??[])),P=computed(()=>`${f}.${te.value}`);return {$active:q,$message:I,$type:te,$validator:ae,$params:D,$path:P,$tooltip:k}}),V=watch(g?.$params,()=>{(m.$autoDirty.value||m.$rewardEarly.value&&e.$error.value)&&z();});}o();function s(){T.value=!0,e.$dirty.value&&(a.value=!0);}async function i(){let b=!1;try{let q=g.$validator.value,y=q(l.value,...g.$params.value),I=l.value;s();let k;if(y instanceof Promise?k=await y:k=y,l.value!==I)return !0;if(typeof k=="boolean")b=k;else {let{$valid:te,...ae}=k;b=te,C.value=ae;}}catch{b=!1;}finally{a.value=!1;}return b}let G=De(i,d??200);async function z(){try{N.value=!0;let b=!1;if($e(r.value)&&r.value._async)b=await G();else {let q=g.$validator.value,y=q(l.value,...g.$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,...k}=y;b=I,C.value=k;}}return T.value=b,b}catch{return !1}finally{N.value=!1;}}function W(){T.value=!0,C.value={},a.value=!1,N.value=!1,o();}function w(){V(),$.stop(),$=effectScope();}return reactive({...g,$pending:a,$valid:T,$metadata:C,$haveAsync:F,$validating:N,$validate:z,$unwatch:w,$watch:o,$reset:W})}function Ie({state:e,rulesDef:t,customMessages:r,path:n,fieldName:l,storage:f,options:p,externalErrors:d,onUnwatch:m,$isArray:$,initialState:g,shortcuts:V}){let F=effectScope(),a,T=[],C,N,o,s,i=()=>{};function G(){let v=t.value,A=f.checkRuleDeclEntry(n,v);I.value=Object.fromEntries(Object.entries(v).filter(([M])=>M.startsWith("$"))),w(),y.value=Object.fromEntries(Object.entries(t.value).filter(([M])=>!M.startsWith("$")).map(([M,X])=>{if(X){let re=toRef(()=>X);return [M,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:re,ruleKey:M,state:e,path:n,storage:f,$debounce:I.value.$debounce})]}return []}).filter(M=>!!M.length)),a.processShortcuts(),z(),A?.valid!=null&&(a.$dirty.value=f.getDirtyState(n),a.$dirty.value&&i()),f.addRuleDeclEntry(n,v);}function z(){i=a.$debounce.value?De(q,a.$debounce.value??a.$haveAnyAsyncRule?100:0):q;}function W(){y.value&&Object.entries(y.value).forEach(([v,A])=>{A.$unwatch();}),o(),a.$dirty.value&&f.setDirtyEntry(n,a.$dirty.value),C?.(),N?.(),F.stop(),F=effectScope(),T.forEach(v=>v.stop()),T=[],m?.(),s?.();}function w(){y.value&&Object.entries(y.value).forEach(([v,A])=>{A.$watch();}),a=F.run(()=>{let v=ref(!1),A=ref(!1),M=computed(()=>v.value),X=computed(()=>I.value.$debounce),re=computed(()=>I.value.$lazy!=null?I.value.$lazy:unref(p.lazy)!=null?unref(p.lazy):!1),h=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):!h.value),_=computed(()=>Object.entries(y.value).some(([Z,le])=>le.$validating)),ve=computed({get:()=>e.value,set(Z){C(),e.value=Z,b();}}),Ae=computed(()=>fe.value&&!me.value&&v.value),Qe=computed(()=>Ae.value?Ue({field:{$dirty:v.value,$externalErrors:d?.value,$rules:y.value}}):[]),je=computed(()=>v.value?Me(g.value)&&Me(e.value)?_e(g.value).getDate()!==_e(e.value).getDate():g.value==null?!!e.value:Array.isArray(e.value)&&Array.isArray(g.value)?e.value.length!==g.value.length:g.value!==e.value:!1),Xe=computed(()=>je.value),Ze=computed(()=>vt({field:{$rules:y.value}})),Ke=computed(()=>Ue({field:{$dirty:v.value,$externalErrors:d?.value,$rules:y.value},silent:!0})),et=computed(()=>E.value?M.value&&!(fe.value||me.value):!(fe.value||me.value)),me=computed(()=>A.value||!h.value?Object.entries(y.value).some(([Z,le])=>le.$pending):!1),fe=computed(()=>d?.value?.length?!0:L(y.value)?!1:!h.value||h.value&&A.value?Object.entries(y.value).some(([Z,le])=>!le.$valid):!1),tt=computed(()=>l),Fe=computed(()=>!!L(y.value)),rt=computed(()=>d?.value?.length||Fe.value?!1:v.value&&!L(e.value)&&!_.value?Object.values(y.value).every(Z=>Z.$valid&&Z.$active):!1),It=computed(()=>Object.entries(y.value).some(([Z,le])=>le.$haveAsync));function wt(){V?.fields&&Object.entries(V.fields).forEach(([Z,le])=>{let at=effectScope();nt[Z]=at.run(()=>{let lt=ref();return watchEffect(()=>{lt.value=le(reactive({$dirty:v,$externalErrors:d?.value??[],$value:e,$silentValue:ve,$rules:y,$error:Ae,$pending:me,$invalid:fe,$valid:rt,$errors:Qe,$ready:et,$silentErrors:Ke,$anyDirty:M,$tooltips:Ze,$name:tt,$inactive:Fe,$edited:je,$anyEdited:Xe}));}),lt}),T.push(at);});}let nt={};return watch(fe,Z=>{Z||(A.value=!1);}),{$error:Ae,$pending:me,$invalid:fe,$valid:rt,$debounce:X,$lazy:re,$errors:Qe,$ready:et,$silentErrors:Ke,$rewardEarly:h,$autoDirty:E,$clearExternalErrorsOnChange:O,$anyDirty:M,$edited:je,$anyEdited:Xe,$name:tt,$haveAnyAsyncRule:It,$shortcuts:nt,$validating:_,$tooltips:Ze,$dirty:v,triggerPunishment:A,processShortcuts:wt,$silentValue:ve,$inactive:Fe}}),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,z);}function b(){C=watch(e,()=>{a.$autoDirty.value&&(a.$dirty.value||(a.$dirty.value=!0)),t.value instanceof Function&&G(),(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&i(),a.$rewardEarly.value!==!0&&a.$clearExternalErrorsOnChange.value&&u();},{deep:$?!0:xe?1:!0});}function q(){Object.values(y.value).forEach(v=>{v.$validate();});}let y=ref({}),I=ref({});G();function k(){u(),a.$dirty.value=!1,a.triggerPunishment.value=!1,f.setDirtyEntry(n,!1),g.value=K(e.value)?H(e.value):Array.isArray(e.value)?[...e.value]:e.value,Object.entries(y.value).forEach(([v,A])=>{A.$reset();}),!a.$lazy.value&&a.$autoDirty.value&&Object.values(y.value).forEach(v=>v.$validate());}function te(v=!0,A=!1){a.$dirty.value||(a.$dirty.value=!0),A&&v?(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&i():v&&i();}async function ae(){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 L(y.value)?{result:!0,data:v}:{result:(await Promise.allSettled(Object.entries(y.value).map(([X,re])=>re.$validate()))).every(X=>X.status==="fulfilled"?X.value===!0:!1),data:v}}catch{return {result:!1,data:e.value}}}function D(){W(),e.value=H(g),k();}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:S,$autoDirty:R,$rewardEarly:x,$clearExternalErrorsOnChange:B,$haveAnyAsyncRule:ee,$debounce:Q,$lazy:oe,...ce}=a;return reactive({...ce,$externalErrors:d,$value:e,$rules:y,...c,$reset:k,$touch:te,$validate:ae,$unwatch:W,$watch:w,$resetAll:D,$extractDirtyFields:P,$clearExternalErrors:u})}function He({$id:e,path:t,index:r,options:n,storage:l,stateValue:f,customMessages:p,rules:d,externalErrors:m,initialState:$,shortcuts:g,fieldName:V}){let F=d.$key?d.$key:Ce(),a=`${t}.${String(F)}`;typeof f.value=="object"&&f.value!=null&&(f.value.$id?a=`${t}.${f.value.$id}`:Object.defineProperties(f.value,{$id:{value:F,enumerable:!1,configurable:!1,writable:!1}}));let T=be({state:f,rulesDef:toRef(()=>d),customMessages:p,path:a,storage:l,options:n,externalErrors:toRef(m?.value??[],r),initialState:$,shortcuts:g,fieldName:V});if(T){let C=f.value?.$id;T.$id=C??String(F),l.addArrayStatus(e,T.$id,T);}return T}function ht({state:e,rulesDef:t,customMessages:r,path:n,storage:l,options:f,externalErrors:p,initialState:d,shortcuts:m,fieldName:$}){let g=effectScope(),V,F=effectScope(),a,T=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let C=ref(),N=ref(e.value),o,s=ref({}),i=l.getCollectionsEntry(n);a=F.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)})),G(),w();function G(){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:S,unwrapped:R}=ke(t.value.$each,toRef(()=>u),c);S&&T.push(S);let x=toRef(d.value??[],c),B=He({$id:C.value,path:n,customMessages:r,rules:R??{},stateValue:toRef(()=>u),index:c,options:f,storage:l,externalErrors:toRef(p?.value??{},"$each"),initialState:x,shortcuts:m,fieldName:$});return B||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 z(){if(Array.isArray(e.value)){let u=H(i.value);i.value=e.value.map((c,S)=>{let R=toRef(()=>c);if(c.$id&&i.value.find(x=>x.$id===c.$id)){let x=l.getArrayStatus(C.value,c.$id);return x?(x.$value=R,x):null}else {let{scope:x,unwrapped:B}=ke(t.value.$each,R,S);if(x&&T.push(x),B){let ee=He({$id:C.value,path:n,customMessages:r,rules:B,stateValue:R,index:S,options:f,storage:l,externalErrors:toRef(p?.value??{},"$each"),initialState:toRef(d.value??[],S),shortcuts:m,fieldName:$});return ee||null}}}).filter(c=>!!c),u.filter(c=>!e.value.find(S=>c.$id===S.$id)).forEach((c,S)=>{l.deleteArrayStatus(C.value,S.toString());});}else i.value=[];}function W(){o=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?G():z();},{deep:xe?1:!0,flush:"pre"});}function w(){W(),g=effectScope(),V=g.run(()=>{let u=computed({get:()=>e.value,set(h){o(),e.value=h,W();}}),c=computed(()=>s.value.$dirty&&!!i.value.length&&i.value.every(h=>h.$dirty)),S=computed(()=>s.value.$anyDirty||i.value.some(h=>h.$anyDirty)),R=computed(()=>s.value.$invalid||i.value.some(h=>h.$invalid)),x=computed(()=>(L(s.value.$rules)?!0:s.value.$valid)&&i.value.every(h=>h.$valid)),B=computed(()=>s.value.$error||i.value.some(h=>h.$error)),ee=computed(()=>!(R.value||Q.value)),Q=computed(()=>s.value.$pending||i.value.some(h=>h.$pending)),oe=computed(()=>!!i.value.length&&i.value.every(h=>h.$edited)),ce=computed(()=>s.value.$anyEdited||i.value.some(h=>h.$anyEdited)),v=computed(()=>({$self:s.value.$errors,$each:i.value.map(h=>h.$errors)})),A=computed(()=>({$self:s.value.$silentErrors,$each:i.value.map(h=>h.$silentErrors)})),M=computed(()=>$);function X(){m?.collections&&Object.entries(m?.collections).forEach(([h,O])=>{let E=effectScope();re[h]=E.run(()=>{let _=ref();return watchEffect(()=>{_.value=O(reactive({$dirty:c,$error:B,$silentValue:u,$pending:Q,$invalid:R,$valid:x,$errors:v,$ready:ee,$silentErrors:A,$anyDirty:S,$name:M,$each:i,$field:s,$value:e,$edited:oe,$anyEdited:ce}));}),_}),T.push(E);});}let re={};return X(),{$dirty:c,$anyDirty:S,$invalid:R,$valid:x,$error:B,$pending:Q,$errors:v,$silentErrors:A,$ready:ee,$name:M,$shortcuts:re,$silentValue:u,$edited:oe,$anyEdited:ce}}),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();}),g.stop(),g=effectScope(),F.stop(),F=effectScope(!0),T.forEach(u=>u.stop()),T=[];}function q(u=!0,c=!1){s.value.$touch(u,c),i.value.forEach(S=>{S.$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 k(){s.value.$clearExternalErrors(),i.value.forEach(u=>{u.$clearExternalErrors();});}function te(u=!0){let c=i.value.map(S=>{if(dt(S))return S.$extractDirtyFields(u)});return u&&c.every(S=>L(S))&&(c=[]),c}function ae(){b(),e.value=H(d.value),y();}let{$shortcuts:D,...P}=V;return reactive({$field:s,...P,...D,$each:i,$value:e,$validate:I,$unwatch:b,$watch:w,$touch:q,$reset:y,$resetAll:ae,$extractDirtyFields:te,$clearExternalErrors:k})}function Oe({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:l,validationGroups:f,initialState:p,fieldName:d,...m}){let $=effectScope(),g,V=[],F=null,a=null,T=null;async function N(D=!0){let P=Object.entries(e.value),u=Object.fromEntries(P.filter(([R,x])=>!!x).map(([R,x])=>{if(x){let B=toRef(t.value,R),ee=toRef(()=>x),Q=toRef(l?.value??{},R),oe=toRef(p?.value??{},R);return [R,be({state:B,rulesDef:ee,path:r?`${r}.${R}`:R,externalErrors:Q,initialState:oe,fieldName:R,...m})]}return []})),c=Object.fromEntries(Object.entries(unref(l)??{}).filter(([R,x])=>!(R in e.value)&&!!x).map(([R])=>{let x=toRef(t.value,R),B=toRef(p?.value??{},R);return [R,be({state:x,rulesDef:computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:toRef(l?.value??{},R),initialState:B,fieldName:R,...m})]})),S=Object.fromEntries(Object.entries(t.value).filter(([R])=>!(R in e.value)&&!(R in(c.value??{}))).map(([R])=>{let x=toRef(t.value,R),B=toRef(p?.value??{},R);return [R,be({state:x,rulesDef:computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:toRef(l?.value??{},R),initialState:B,fieldName:R,...m})]}));o.value={...u,...c,...S},D&&W();}let o=m.storage.getFieldsEntry(r);N();function s(){a?.(),Object.values(o.value).forEach(D=>{D.$reset();}),p.value={...H(t.value)},G();}function i(D=!0,P=!1){Object.values(o.value).forEach(u=>{u.$touch(D,P);});}function G(){l?.value&&(a=watch(l,()=>{w(),N();},{deep:!0}));}function z(){T=watch(t,()=>{w(),N(),i(!0,!0);},{flush:"sync"});}function W(){n&&(F?.(),F=watch(n,()=>{w(),N();},{deep:!0,flush:"post"}),G()),z(),$=effectScope(),g=$.run(()=>{let D=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)),S=computed(()=>{let O=Object.entries(o.value).filter(([E,_])=>yt(_)?!_.$inactive:!0);return O.length?O.every(([E,_])=>_?.$valid):!1}),R=computed(()=>u.value&&!Q.value&&c.value),x=computed(()=>unref(m.options.rewardEarly)!=null?unref(m.options.rewardEarly):!1),B=computed(()=>unref(m.options.autoDirty)!=null?unref(m.options.autoDirty):!x.value),ee=computed(()=>B.value?u.value&&!(c.value||Q.value):!(c.value||Q.value)),Q=computed(()=>Object.entries(o.value).some(([O,E])=>E?.$pending)),oe=computed(()=>Object.fromEntries(Object.entries(o.value).map(([O,E])=>[O,E?.$errors]))),ce=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)),A=computed(()=>Object.entries(o.value).some(([O,E])=>E?.$anyEdited)),M=computed(()=>d);function X(){m.shortcuts?.nested&&Object.entries(m.shortcuts.nested).forEach(([O,E])=>{let _=effectScope();h[O]=_.run(()=>{let ve=ref();return watchEffect(()=>{ve.value=E(reactive({$dirty:P,$value:t,$silentValue:D,$error:R,$pending:Q,$invalid:c,$valid:S,$ready:ee,$anyDirty:u,$name:M,$silentErrors:ce,$errors:oe,$fields:o,$edited:v,$anyEdited:A}));}),ve}),V.push(_);});}let re=computed({get:()=>f?Object.fromEntries(Object.entries(f?.(o.value)??{}).map(([O,E])=>E.length?[O,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(_=>[_,ut(E,_)])),...Object.fromEntries(["$errors","$silentErrors"].map(_=>[_,it(E,_)]))}]:[])):{},set(){}}),h={};return X(),{$dirty:P,$anyDirty:u,$invalid:c,$valid:S,$error:R,$pending:Q,$errors:oe,$silentErrors:ce,$ready:ee,$name:M,$shortcuts:h,$groups:re,$silentValue:D,$edited:v,$anyEdited:A}});}function w(){F?.(),a?.(),T?.(),V.forEach(D=>D.stop()),V=[],$.stop(),o.value&&Object.entries(o.value).forEach(([D,P])=>{P.$unwatch();});}function b(){Object.entries(o.value).forEach(([D,P])=>{P.$clearExternalErrors();});}async function q(){w(),t.value=H({...p.value??{}}),s(),N();}function y(D){return D.filter(([P,u])=>K(u)?!(u&&typeof u=="object"&&"_null"in u)&&!L(u):Array.isArray(u)?u.length:!0)}function I(D=!0){let P=Object.entries(o.value).map(([u,c])=>[u,c.$extractDirtyFields(D)]);return D&&(P=y(P)),Object.fromEntries(P)}async function k(){try{let D=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:D}}catch{return {result:!1,data:t.value}}}let{$shortcuts:te,...ae}=g;return reactive({...ae,...te,$fields:o,$value:t,$resetAll:q,$reset:s,$touch:i,$validate:k,$unwatch:w,$watch:W,$clearExternalErrors:b,$extractDirtyFields:I})}function be({rulesDef:e,externalErrors:t,...r}){if(Rt(e,r.state))return ht({rulesDef:e,externalErrors:t,...r});if(ft(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(pt(e))return Ie({rulesDef:e,externalErrors:t,...r})}function ye({initialState:e,options:t,scopeRules:r,state:n,customRules:l,shortcuts:f}){let p=We(),d=ref();return d.value=Oe({rootRules:r,rulesDef:r,state:n,customMessages:l?.(),storage:p,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:f,fieldName:"root",path:""}),getCurrentScope()&&onScopeDispose(()=>{d.value?.$unwatch();}),reactive({regle:d})}function qe(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},g=isRef(f)?f:ref(f),V=ref({...H(g.value)});return {r$:ye({scopeRules:m,state:g,options:$,initialState:V,customRules:e,shortcuts:r}).regle}}return l}var xt=qe();function Je(){function e(t,r){return r}return e}var Ye=Je();function Ct({rules:e,modifiers:t,shortcuts:r}){let n=qe(e,t,r),l=Je();return {useRegle:n,inferRules:l}}
|
|
2
|
+
export{Ve as InternalRuleType,Ge as createRule,Ct as defineRegleConfig,Ye as inferRules,J as unwrapRuleParameters,xt as useRegle,ye as useRootStorage};
|
package/dist/regle-core.mjs
CHANGED
|
@@ -66,6 +66,44 @@ 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 === "string") {
|
|
79
|
+
const date = new Date(value);
|
|
80
|
+
if (date.toString() === "Invalid Date") {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
possibleDate = date;
|
|
84
|
+
}
|
|
85
|
+
return !!possibleDate;
|
|
86
|
+
} catch (e) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// ../shared/utils/toDate.ts
|
|
92
|
+
function toDate(argument) {
|
|
93
|
+
const argStr = Object.prototype.toString.call(argument);
|
|
94
|
+
if (argument == null) {
|
|
95
|
+
return /* @__PURE__ */ new Date(NaN);
|
|
96
|
+
} else if (argument instanceof Date || typeof argument === "object" && argStr === "[object Date]") {
|
|
97
|
+
return new Date(argument.getTime());
|
|
98
|
+
} else if (typeof argument === "number" || argStr === "[object Number]") {
|
|
99
|
+
return new Date(argument);
|
|
100
|
+
} else if (typeof argument === "string" || argStr === "[object String]") {
|
|
101
|
+
return new Date(argument);
|
|
102
|
+
} else {
|
|
103
|
+
return /* @__PURE__ */ new Date(NaN);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
69
107
|
// src/types/rules/rule.internal.types.ts
|
|
70
108
|
var InternalRuleType = /* @__PURE__ */ ((InternalRuleType2) => {
|
|
71
109
|
InternalRuleType2["Inline"] = "__inline";
|
|
@@ -780,29 +818,36 @@ function createReactiveFieldStatus({
|
|
|
780
818
|
const $lazy2 = computed(() => {
|
|
781
819
|
if ($localOptions.value.$lazy != null) {
|
|
782
820
|
return $localOptions.value.$lazy;
|
|
821
|
+
} else if (unref(options.lazy) != null) {
|
|
822
|
+
return unref(options.lazy);
|
|
783
823
|
}
|
|
784
|
-
return
|
|
824
|
+
return false;
|
|
785
825
|
});
|
|
786
826
|
const $rewardEarly2 = computed(() => {
|
|
787
|
-
if ($autoDirty2.value === true) {
|
|
788
|
-
return false;
|
|
789
|
-
}
|
|
790
827
|
if ($localOptions.value.$rewardEarly != null) {
|
|
791
828
|
return $localOptions.value.$rewardEarly;
|
|
829
|
+
} else if (unref(options.rewardEarly) != null) {
|
|
830
|
+
return unref(options.rewardEarly);
|
|
792
831
|
}
|
|
793
|
-
return
|
|
832
|
+
return false;
|
|
794
833
|
});
|
|
795
834
|
const $clearExternalErrorsOnChange2 = computed(() => {
|
|
796
835
|
if ($localOptions.value.$clearExternalErrorsOnChange != null) {
|
|
797
836
|
return $localOptions.value.$clearExternalErrorsOnChange;
|
|
837
|
+
} else if (unref(options.clearExternalErrorsOnChange) != null) {
|
|
838
|
+
return unref(options.clearExternalErrorsOnChange);
|
|
798
839
|
}
|
|
799
|
-
return
|
|
840
|
+
return true;
|
|
800
841
|
});
|
|
801
842
|
const $autoDirty2 = computed(() => {
|
|
802
843
|
if ($localOptions.value.$autoDirty != null) {
|
|
803
844
|
return $localOptions.value.$autoDirty;
|
|
845
|
+
} else if (unref(options.autoDirty) != null) {
|
|
846
|
+
return unref(options.autoDirty);
|
|
847
|
+
} else if ($rewardEarly2.value) {
|
|
848
|
+
return false;
|
|
804
849
|
}
|
|
805
|
-
return
|
|
850
|
+
return true;
|
|
806
851
|
});
|
|
807
852
|
const $validating2 = computed(() => {
|
|
808
853
|
return Object.entries($rules.value).some(([key, ruleResult]) => {
|
|
@@ -832,6 +877,22 @@ function createReactiveFieldStatus({
|
|
|
832
877
|
}
|
|
833
878
|
return [];
|
|
834
879
|
});
|
|
880
|
+
const $edited = computed(() => {
|
|
881
|
+
if ($dirty.value) {
|
|
882
|
+
if (isDate(initialState.value) && isDate(state.value)) {
|
|
883
|
+
return toDate(initialState.value).getDate() !== toDate(state.value).getDate();
|
|
884
|
+
}
|
|
885
|
+
if (initialState.value == null) {
|
|
886
|
+
return !!state.value;
|
|
887
|
+
}
|
|
888
|
+
if (Array.isArray(state.value) && Array.isArray(initialState.value)) {
|
|
889
|
+
return state.value.length !== initialState.value.length;
|
|
890
|
+
}
|
|
891
|
+
return initialState.value !== state.value;
|
|
892
|
+
}
|
|
893
|
+
return false;
|
|
894
|
+
});
|
|
895
|
+
const $anyEdited = computed(() => $edited.value);
|
|
835
896
|
const $tooltips = computed(() => {
|
|
836
897
|
return extractRulesTooltips({
|
|
837
898
|
field: {
|
|
@@ -850,7 +911,10 @@ function createReactiveFieldStatus({
|
|
|
850
911
|
});
|
|
851
912
|
});
|
|
852
913
|
const $ready = computed(() => {
|
|
853
|
-
|
|
914
|
+
if (!$autoDirty2.value) {
|
|
915
|
+
return !($invalid.value || $pending.value);
|
|
916
|
+
}
|
|
917
|
+
return $anyDirty.value && !($invalid.value || $pending.value);
|
|
854
918
|
});
|
|
855
919
|
const $pending = computed(() => {
|
|
856
920
|
if (triggerPunishment.value || !$rewardEarly2.value) {
|
|
@@ -920,7 +984,9 @@ function createReactiveFieldStatus({
|
|
|
920
984
|
$anyDirty,
|
|
921
985
|
$tooltips,
|
|
922
986
|
$name,
|
|
923
|
-
$inactive
|
|
987
|
+
$inactive,
|
|
988
|
+
$edited,
|
|
989
|
+
$anyEdited
|
|
924
990
|
})
|
|
925
991
|
);
|
|
926
992
|
});
|
|
@@ -950,6 +1016,8 @@ function createReactiveFieldStatus({
|
|
|
950
1016
|
$autoDirty: $autoDirty2,
|
|
951
1017
|
$clearExternalErrorsOnChange: $clearExternalErrorsOnChange2,
|
|
952
1018
|
$anyDirty,
|
|
1019
|
+
$edited,
|
|
1020
|
+
$anyEdited,
|
|
953
1021
|
$name,
|
|
954
1022
|
$haveAnyAsyncRule: $haveAnyAsyncRule2,
|
|
955
1023
|
$shortcuts: $shortcuts2,
|
|
@@ -1006,8 +1074,10 @@ function createReactiveFieldStatus({
|
|
|
1006
1074
|
function $reset() {
|
|
1007
1075
|
$clearExternalErrors();
|
|
1008
1076
|
scopeState.$dirty.value = false;
|
|
1077
|
+
scopeState.triggerPunishment.value = false;
|
|
1009
1078
|
storage.setDirtyEntry(path, false);
|
|
1010
|
-
|
|
1079
|
+
initialState.value = isObject(state.value) ? cloneDeep(state.value) : Array.isArray(state.value) ? [...state.value] : state.value;
|
|
1080
|
+
Object.entries($rules.value).forEach(([_, rule]) => {
|
|
1011
1081
|
rule.$reset();
|
|
1012
1082
|
});
|
|
1013
1083
|
if (!scopeState.$lazy.value && scopeState.$autoDirty.value) {
|
|
@@ -1144,7 +1214,7 @@ function createCollectionElement({
|
|
|
1144
1214
|
storage,
|
|
1145
1215
|
options,
|
|
1146
1216
|
externalErrors: toRef(externalErrors?.value ?? [], index),
|
|
1147
|
-
initialState
|
|
1217
|
+
initialState,
|
|
1148
1218
|
shortcuts,
|
|
1149
1219
|
fieldName
|
|
1150
1220
|
});
|
|
@@ -1227,6 +1297,7 @@ function createReactiveCollectionStatus({
|
|
|
1227
1297
|
if (scope2) {
|
|
1228
1298
|
collectionScopes.push(scope2);
|
|
1229
1299
|
}
|
|
1300
|
+
const initialStateRef = toRef(initialState.value ?? [], index);
|
|
1230
1301
|
const element = createCollectionElement({
|
|
1231
1302
|
$id: $id.value,
|
|
1232
1303
|
path,
|
|
@@ -1237,7 +1308,7 @@ function createReactiveCollectionStatus({
|
|
|
1237
1308
|
options,
|
|
1238
1309
|
storage,
|
|
1239
1310
|
externalErrors: toRef(externalErrors?.value ?? {}, `$each`),
|
|
1240
|
-
initialState:
|
|
1311
|
+
initialState: initialStateRef,
|
|
1241
1312
|
shortcuts,
|
|
1242
1313
|
fieldName
|
|
1243
1314
|
});
|
|
@@ -1291,7 +1362,7 @@ function createReactiveCollectionStatus({
|
|
|
1291
1362
|
options,
|
|
1292
1363
|
storage,
|
|
1293
1364
|
externalErrors: toRef(externalErrors?.value ?? {}, `$each`),
|
|
1294
|
-
initialState: initialState
|
|
1365
|
+
initialState: toRef(initialState.value ?? [], index),
|
|
1295
1366
|
shortcuts,
|
|
1296
1367
|
fieldName
|
|
1297
1368
|
});
|
|
@@ -1335,7 +1406,7 @@ function createReactiveCollectionStatus({
|
|
|
1335
1406
|
}
|
|
1336
1407
|
});
|
|
1337
1408
|
const $dirty = computed(() => {
|
|
1338
|
-
return $fieldStatus.value.$dirty && $eachStatus.value.every((statusOrField) => {
|
|
1409
|
+
return $fieldStatus.value.$dirty && !!$eachStatus.value.length && $eachStatus.value.every((statusOrField) => {
|
|
1339
1410
|
return statusOrField.$dirty;
|
|
1340
1411
|
});
|
|
1341
1412
|
});
|
|
@@ -1367,6 +1438,16 @@ function createReactiveCollectionStatus({
|
|
|
1367
1438
|
return statusOrField.$pending;
|
|
1368
1439
|
});
|
|
1369
1440
|
});
|
|
1441
|
+
const $edited = computed(() => {
|
|
1442
|
+
return !!$eachStatus.value.length && $eachStatus.value.every((statusOrField) => {
|
|
1443
|
+
return statusOrField.$edited;
|
|
1444
|
+
});
|
|
1445
|
+
});
|
|
1446
|
+
const $anyEdited = computed(() => {
|
|
1447
|
+
return $fieldStatus.value.$anyEdited || $eachStatus.value.some((statusOrField) => {
|
|
1448
|
+
return statusOrField.$anyEdited;
|
|
1449
|
+
});
|
|
1450
|
+
});
|
|
1370
1451
|
const $errors = computed(() => {
|
|
1371
1452
|
return {
|
|
1372
1453
|
$self: $fieldStatus.value.$errors,
|
|
@@ -1402,7 +1483,9 @@ function createReactiveCollectionStatus({
|
|
|
1402
1483
|
$name,
|
|
1403
1484
|
$each: $eachStatus,
|
|
1404
1485
|
$field: $fieldStatus,
|
|
1405
|
-
$value: state
|
|
1486
|
+
$value: state,
|
|
1487
|
+
$edited,
|
|
1488
|
+
$anyEdited
|
|
1406
1489
|
})
|
|
1407
1490
|
);
|
|
1408
1491
|
});
|
|
@@ -1426,7 +1509,9 @@ function createReactiveCollectionStatus({
|
|
|
1426
1509
|
$ready,
|
|
1427
1510
|
$name,
|
|
1428
1511
|
$shortcuts: $shortcuts2,
|
|
1429
|
-
$silentValue
|
|
1512
|
+
$silentValue,
|
|
1513
|
+
$edited,
|
|
1514
|
+
$anyEdited
|
|
1430
1515
|
};
|
|
1431
1516
|
});
|
|
1432
1517
|
if (immediateScopeState.isPrimitiveArray.value) {
|
|
@@ -1513,7 +1598,7 @@ function createReactiveCollectionStatus({
|
|
|
1513
1598
|
}
|
|
1514
1599
|
function $resetAll() {
|
|
1515
1600
|
$unwatch();
|
|
1516
|
-
state.value = cloneDeep(initialState);
|
|
1601
|
+
state.value = cloneDeep(initialState.value);
|
|
1517
1602
|
$reset();
|
|
1518
1603
|
}
|
|
1519
1604
|
const { $shortcuts, ...restScopeState } = scopeState;
|
|
@@ -1560,6 +1645,7 @@ function createReactiveNestedStatus({
|
|
|
1560
1645
|
const stateRef = toRef(state.value, statePropKey);
|
|
1561
1646
|
const statePropRulesRef = toRef(() => statePropRules);
|
|
1562
1647
|
const $externalErrors = toRef(externalErrors?.value ?? {}, statePropKey);
|
|
1648
|
+
const initialStateRef = toRef(initialState?.value ?? {}, statePropKey);
|
|
1563
1649
|
return [
|
|
1564
1650
|
statePropKey,
|
|
1565
1651
|
createReactiveChildrenStatus({
|
|
@@ -1567,7 +1653,7 @@ function createReactiveNestedStatus({
|
|
|
1567
1653
|
rulesDef: statePropRulesRef,
|
|
1568
1654
|
path: path ? `${path}.${statePropKey}` : statePropKey,
|
|
1569
1655
|
externalErrors: $externalErrors,
|
|
1570
|
-
initialState:
|
|
1656
|
+
initialState: initialStateRef,
|
|
1571
1657
|
fieldName: statePropKey,
|
|
1572
1658
|
...commonArgs
|
|
1573
1659
|
})
|
|
@@ -1579,6 +1665,7 @@ function createReactiveNestedStatus({
|
|
|
1579
1665
|
const externalRulesStatus = Object.fromEntries(
|
|
1580
1666
|
Object.entries(unref(externalErrors) ?? {}).filter(([key, errors]) => !(key in rulesDef.value) && !!errors).map(([key]) => {
|
|
1581
1667
|
const stateRef = toRef(state.value, key);
|
|
1668
|
+
const initialStateRef = toRef(initialState?.value ?? {}, key);
|
|
1582
1669
|
return [
|
|
1583
1670
|
key,
|
|
1584
1671
|
createReactiveChildrenStatus({
|
|
@@ -1586,7 +1673,7 @@ function createReactiveNestedStatus({
|
|
|
1586
1673
|
rulesDef: computed(() => ({})),
|
|
1587
1674
|
path: path ? `${path}.${key}` : key,
|
|
1588
1675
|
externalErrors: toRef(externalErrors?.value ?? {}, key),
|
|
1589
|
-
initialState:
|
|
1676
|
+
initialState: initialStateRef,
|
|
1590
1677
|
fieldName: key,
|
|
1591
1678
|
...commonArgs
|
|
1592
1679
|
})
|
|
@@ -1596,6 +1683,7 @@ function createReactiveNestedStatus({
|
|
|
1596
1683
|
const statesWithNoRules = Object.fromEntries(
|
|
1597
1684
|
Object.entries(state.value).filter(([key]) => !(key in rulesDef.value) && !(key in (externalRulesStatus.value ?? {}))).map(([key]) => {
|
|
1598
1685
|
const stateRef = toRef(state.value, key);
|
|
1686
|
+
const initialStateRef = toRef(initialState?.value ?? {}, key);
|
|
1599
1687
|
return [
|
|
1600
1688
|
key,
|
|
1601
1689
|
createReactiveChildrenStatus({
|
|
@@ -1603,7 +1691,7 @@ function createReactiveNestedStatus({
|
|
|
1603
1691
|
rulesDef: computed(() => ({})),
|
|
1604
1692
|
path: path ? `${path}.${key}` : key,
|
|
1605
1693
|
externalErrors: toRef(externalErrors?.value ?? {}, key),
|
|
1606
|
-
initialState:
|
|
1694
|
+
initialState: initialStateRef,
|
|
1607
1695
|
fieldName: key,
|
|
1608
1696
|
...commonArgs
|
|
1609
1697
|
})
|
|
@@ -1626,6 +1714,7 @@ function createReactiveNestedStatus({
|
|
|
1626
1714
|
Object.values($fields.value).forEach((statusOrField) => {
|
|
1627
1715
|
statusOrField.$reset();
|
|
1628
1716
|
});
|
|
1717
|
+
initialState.value = { ...cloneDeep(state.value) };
|
|
1629
1718
|
define$WatchExternalErrors();
|
|
1630
1719
|
}
|
|
1631
1720
|
function $touch(runCommit = true, withConditions = false) {
|
|
@@ -1710,8 +1799,22 @@ function createReactiveNestedStatus({
|
|
|
1710
1799
|
return false;
|
|
1711
1800
|
});
|
|
1712
1801
|
const $error = computed(() => $anyDirty.value && !$pending.value && $invalid.value);
|
|
1802
|
+
const $rewardEarly = computed(() => {
|
|
1803
|
+
if (unref(commonArgs.options.rewardEarly) != null) {
|
|
1804
|
+
return unref(commonArgs.options.rewardEarly);
|
|
1805
|
+
}
|
|
1806
|
+
return false;
|
|
1807
|
+
});
|
|
1808
|
+
const $autoDirty = computed(() => {
|
|
1809
|
+
if (unref(commonArgs.options.autoDirty) != null) {
|
|
1810
|
+
return unref(commonArgs.options.autoDirty);
|
|
1811
|
+
} else if ($rewardEarly.value) {
|
|
1812
|
+
return false;
|
|
1813
|
+
}
|
|
1814
|
+
return true;
|
|
1815
|
+
});
|
|
1713
1816
|
const $ready = computed(() => {
|
|
1714
|
-
if (
|
|
1817
|
+
if (!$autoDirty.value) {
|
|
1715
1818
|
return !($invalid.value || $pending.value);
|
|
1716
1819
|
}
|
|
1717
1820
|
return $anyDirty.value && !($invalid.value || $pending.value);
|
|
@@ -1735,6 +1838,16 @@ function createReactiveNestedStatus({
|
|
|
1735
1838
|
})
|
|
1736
1839
|
);
|
|
1737
1840
|
});
|
|
1841
|
+
const $edited = computed(() => {
|
|
1842
|
+
return !!Object.entries($fields.value).length && Object.entries($fields.value).every(([_, statusOrField]) => {
|
|
1843
|
+
return statusOrField?.$edited;
|
|
1844
|
+
});
|
|
1845
|
+
});
|
|
1846
|
+
const $anyEdited = computed(() => {
|
|
1847
|
+
return Object.entries($fields.value).some(([_, statusOrField]) => {
|
|
1848
|
+
return statusOrField?.$anyEdited;
|
|
1849
|
+
});
|
|
1850
|
+
});
|
|
1738
1851
|
const $name = computed(() => fieldName);
|
|
1739
1852
|
function processShortcuts() {
|
|
1740
1853
|
if (commonArgs.shortcuts?.nested) {
|
|
@@ -1757,7 +1870,9 @@ function createReactiveNestedStatus({
|
|
|
1757
1870
|
$name,
|
|
1758
1871
|
$silentErrors,
|
|
1759
1872
|
$errors,
|
|
1760
|
-
$fields
|
|
1873
|
+
$fields,
|
|
1874
|
+
$edited,
|
|
1875
|
+
$anyEdited
|
|
1761
1876
|
})
|
|
1762
1877
|
);
|
|
1763
1878
|
});
|
|
@@ -1815,7 +1930,9 @@ function createReactiveNestedStatus({
|
|
|
1815
1930
|
$name,
|
|
1816
1931
|
$shortcuts: $shortcuts2,
|
|
1817
1932
|
$groups,
|
|
1818
|
-
$silentValue
|
|
1933
|
+
$silentValue,
|
|
1934
|
+
$edited,
|
|
1935
|
+
$anyEdited
|
|
1819
1936
|
};
|
|
1820
1937
|
});
|
|
1821
1938
|
}
|
|
@@ -1839,7 +1956,7 @@ function createReactiveNestedStatus({
|
|
|
1839
1956
|
}
|
|
1840
1957
|
async function $resetAll() {
|
|
1841
1958
|
$unwatch();
|
|
1842
|
-
state.value = cloneDeep({ ...initialState ?? {} });
|
|
1959
|
+
state.value = cloneDeep({ ...initialState.value ?? {} });
|
|
1843
1960
|
$reset();
|
|
1844
1961
|
createReactiveFieldsStatus();
|
|
1845
1962
|
}
|
|
@@ -1981,10 +2098,10 @@ function useRootStorage({
|
|
|
1981
2098
|
// src/core/useRegle/useRegle.ts
|
|
1982
2099
|
function createUseRegleComposable(customRules, options, shortcuts) {
|
|
1983
2100
|
const globalOptions = {
|
|
1984
|
-
autoDirty: options?.autoDirty
|
|
1985
|
-
lazy: options?.lazy
|
|
1986
|
-
rewardEarly: options?.rewardEarly
|
|
1987
|
-
clearExternalErrorsOnChange: options?.clearExternalErrorsOnChange
|
|
2101
|
+
autoDirty: options?.autoDirty,
|
|
2102
|
+
lazy: options?.lazy,
|
|
2103
|
+
rewardEarly: options?.rewardEarly,
|
|
2104
|
+
clearExternalErrorsOnChange: options?.clearExternalErrorsOnChange
|
|
1988
2105
|
};
|
|
1989
2106
|
function useRegle2(state, rulesFactory, options2) {
|
|
1990
2107
|
const scopeRules = isRef(rulesFactory) ? rulesFactory : computed(typeof rulesFactory === "function" ? rulesFactory : () => rulesFactory);
|
|
@@ -1993,7 +2110,7 @@ function createUseRegleComposable(customRules, options, shortcuts) {
|
|
|
1993
2110
|
...options2
|
|
1994
2111
|
};
|
|
1995
2112
|
const processedState = isRef(state) ? state : ref(state);
|
|
1996
|
-
const initialState = { ...cloneDeep(processedState.value) };
|
|
2113
|
+
const initialState = ref({ ...cloneDeep(processedState.value) });
|
|
1997
2114
|
const regle = useRootStorage({
|
|
1998
2115
|
scopeRules,
|
|
1999
2116
|
state: processedState,
|