@regle/core 0.5.9 → 0.5.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/regle-core.cjs +68 -27
- package/dist/regle-core.d.cts +150 -16
- package/dist/regle-core.d.ts +150 -16
- package/dist/regle-core.min.cjs +2 -2
- package/dist/regle-core.min.mjs +2 -2
- package/dist/regle-core.mjs +68 -27
- package/package.json +6 -6
package/dist/regle-core.cjs
CHANGED
|
@@ -60,6 +60,14 @@ function cloneDeep(obj) {
|
|
|
60
60
|
return result;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
// ../shared/utils/object.utils.ts
|
|
64
|
+
function isObject(obj) {
|
|
65
|
+
if (obj instanceof Date || obj instanceof File) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
return typeof obj === "object" && obj !== null && !Array.isArray(obj);
|
|
69
|
+
}
|
|
70
|
+
|
|
63
71
|
// src/types/rules/rule.internal.types.ts
|
|
64
72
|
var InternalRuleType = /* @__PURE__ */ ((InternalRuleType2) => {
|
|
65
73
|
InternalRuleType2["Inline"] = "__inline";
|
|
@@ -336,12 +344,6 @@ function useStorage() {
|
|
|
336
344
|
arrayStatusStorage
|
|
337
345
|
};
|
|
338
346
|
}
|
|
339
|
-
function isObject(obj) {
|
|
340
|
-
if (obj instanceof Date || obj instanceof File) {
|
|
341
|
-
return false;
|
|
342
|
-
}
|
|
343
|
-
return typeof obj === "object" && obj !== null && !Array.isArray(obj);
|
|
344
|
-
}
|
|
345
347
|
function isRefObject(obj) {
|
|
346
348
|
if (obj.value instanceof Date || obj.value instanceof File) {
|
|
347
349
|
return false;
|
|
@@ -407,7 +409,7 @@ function randomId() {
|
|
|
407
409
|
|
|
408
410
|
// src/core/useRegle/guards/ruleDef.guards.ts
|
|
409
411
|
function isNestedRulesDef(state, rules) {
|
|
410
|
-
return isObject(
|
|
412
|
+
return isRefObject(state) || isObject(rules.value) && !isEmpty(rules.value) && !Object.entries(rules.value).some(([key, rule]) => isRuleDef(rule) || typeof rule === "function");
|
|
411
413
|
}
|
|
412
414
|
function isCollectionRulesDef(rules, state) {
|
|
413
415
|
return !!rules.value && "$each" in rules.value || Array.isArray(state.value);
|
|
@@ -426,6 +428,9 @@ function isFormRuleDefinition(rule) {
|
|
|
426
428
|
function isNestedRulesStatus(rule) {
|
|
427
429
|
return isObject(rule) && "$fields" in rule;
|
|
428
430
|
}
|
|
431
|
+
function isFieldStatus(rule) {
|
|
432
|
+
return !!rule && "$rules" in rule;
|
|
433
|
+
}
|
|
429
434
|
|
|
430
435
|
// src/core/useRegle/useErrors.ts
|
|
431
436
|
function extractRulesErrors({
|
|
@@ -870,10 +875,16 @@ function createReactiveFieldStatus({
|
|
|
870
875
|
return false;
|
|
871
876
|
});
|
|
872
877
|
const $name = vue.computed(() => fieldName);
|
|
878
|
+
const $inactive = vue.computed(() => {
|
|
879
|
+
if (isEmpty($rules.value)) {
|
|
880
|
+
return true;
|
|
881
|
+
}
|
|
882
|
+
return false;
|
|
883
|
+
});
|
|
873
884
|
const $valid = vue.computed(() => {
|
|
874
885
|
if (externalErrors?.value?.length) {
|
|
875
886
|
return false;
|
|
876
|
-
} else if (
|
|
887
|
+
} else if ($inactive.value) {
|
|
877
888
|
return false;
|
|
878
889
|
} else if ($dirty.value && !isEmpty(state.value) && !$validating2.value) {
|
|
879
890
|
return Object.values($rules.value).every((ruleResult) => {
|
|
@@ -910,7 +921,8 @@ function createReactiveFieldStatus({
|
|
|
910
921
|
$silentErrors,
|
|
911
922
|
$anyDirty,
|
|
912
923
|
$tooltips,
|
|
913
|
-
$name
|
|
924
|
+
$name,
|
|
925
|
+
$inactive
|
|
914
926
|
})
|
|
915
927
|
);
|
|
916
928
|
});
|
|
@@ -921,8 +933,8 @@ function createReactiveFieldStatus({
|
|
|
921
933
|
}
|
|
922
934
|
}
|
|
923
935
|
const $shortcuts2 = {};
|
|
924
|
-
vue.watch($
|
|
925
|
-
if (value) {
|
|
936
|
+
vue.watch($invalid, (value) => {
|
|
937
|
+
if (!value) {
|
|
926
938
|
triggerPunishment.value = false;
|
|
927
939
|
}
|
|
928
940
|
});
|
|
@@ -948,7 +960,8 @@ function createReactiveFieldStatus({
|
|
|
948
960
|
$dirty,
|
|
949
961
|
triggerPunishment,
|
|
950
962
|
processShortcuts,
|
|
951
|
-
$silentValue
|
|
963
|
+
$silentValue,
|
|
964
|
+
$inactive
|
|
952
965
|
};
|
|
953
966
|
});
|
|
954
967
|
define$watchState();
|
|
@@ -1164,7 +1177,7 @@ function createReactiveCollectionStatus({
|
|
|
1164
1177
|
let immediateScopeState;
|
|
1165
1178
|
let collectionScopes = [];
|
|
1166
1179
|
if (!Array.isArray(state.value) && !rulesDef.value.$each) {
|
|
1167
|
-
return
|
|
1180
|
+
return void 0;
|
|
1168
1181
|
}
|
|
1169
1182
|
const $id = vue.ref();
|
|
1170
1183
|
const $value = vue.ref(state.value);
|
|
@@ -1541,7 +1554,7 @@ function createReactiveNestedStatus({
|
|
|
1541
1554
|
let $unwatchRules = null;
|
|
1542
1555
|
let $unwatchExternalErrors = null;
|
|
1543
1556
|
let $unwatchState = null;
|
|
1544
|
-
async function createReactiveFieldsStatus(
|
|
1557
|
+
async function createReactiveFieldsStatus(watchSources = true) {
|
|
1545
1558
|
const mapOfRulesDef = Object.entries(rulesDef.value);
|
|
1546
1559
|
const scopedRulesStatus = Object.fromEntries(
|
|
1547
1560
|
mapOfRulesDef.filter(([_, rule]) => !!rule).map(([statePropKey, statePropRules]) => {
|
|
@@ -1604,7 +1617,7 @@ function createReactiveNestedStatus({
|
|
|
1604
1617
|
...externalRulesStatus,
|
|
1605
1618
|
...statesWithNoRules
|
|
1606
1619
|
};
|
|
1607
|
-
if (
|
|
1620
|
+
if (watchSources) {
|
|
1608
1621
|
$watch();
|
|
1609
1622
|
}
|
|
1610
1623
|
}
|
|
@@ -1670,24 +1683,33 @@ function createReactiveNestedStatus({
|
|
|
1670
1683
|
}
|
|
1671
1684
|
});
|
|
1672
1685
|
const $dirty = vue.computed(() => {
|
|
1673
|
-
return !!Object.entries($fields.value).length && Object.entries($fields.value).every(([
|
|
1686
|
+
return !!Object.entries($fields.value).length && Object.entries($fields.value).every(([_, statusOrField]) => {
|
|
1674
1687
|
return statusOrField?.$dirty;
|
|
1675
1688
|
});
|
|
1676
1689
|
});
|
|
1677
1690
|
const $anyDirty = vue.computed(() => {
|
|
1678
|
-
return Object.entries($fields.value).some(([
|
|
1691
|
+
return Object.entries($fields.value).some(([_, statusOrField]) => {
|
|
1679
1692
|
return statusOrField?.$anyDirty;
|
|
1680
1693
|
});
|
|
1681
1694
|
});
|
|
1682
1695
|
const $invalid = vue.computed(() => {
|
|
1683
|
-
return Object.entries($fields.value).some(([
|
|
1696
|
+
return Object.entries($fields.value).some(([_, statusOrField]) => {
|
|
1684
1697
|
return statusOrField?.$invalid;
|
|
1685
1698
|
});
|
|
1686
1699
|
});
|
|
1687
1700
|
const $valid = vue.computed(() => {
|
|
1688
|
-
|
|
1689
|
-
|
|
1701
|
+
const fields = Object.entries($fields.value).filter(([_, statusOrField]) => {
|
|
1702
|
+
if (isFieldStatus(statusOrField)) {
|
|
1703
|
+
return !statusOrField.$inactive;
|
|
1704
|
+
}
|
|
1705
|
+
return true;
|
|
1690
1706
|
});
|
|
1707
|
+
if (fields.length) {
|
|
1708
|
+
return fields.every(([_, statusOrField]) => {
|
|
1709
|
+
return statusOrField?.$valid;
|
|
1710
|
+
});
|
|
1711
|
+
}
|
|
1712
|
+
return false;
|
|
1691
1713
|
});
|
|
1692
1714
|
const $error = vue.computed(() => $anyDirty.value && !$pending.value && $invalid.value);
|
|
1693
1715
|
const $ready = vue.computed(() => {
|
|
@@ -1890,12 +1912,31 @@ function createReactiveChildrenStatus({
|
|
|
1890
1912
|
externalErrors,
|
|
1891
1913
|
...properties
|
|
1892
1914
|
});
|
|
1893
|
-
} else if (isNestedRulesDef(properties.state, rulesDef)
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1915
|
+
} else if (isNestedRulesDef(properties.state, rulesDef)) {
|
|
1916
|
+
if (isRefObject(properties.state)) {
|
|
1917
|
+
return createReactiveNestedStatus({
|
|
1918
|
+
rulesDef,
|
|
1919
|
+
externalErrors,
|
|
1920
|
+
...properties
|
|
1921
|
+
});
|
|
1922
|
+
} else {
|
|
1923
|
+
const fakeState = vue.ref({});
|
|
1924
|
+
const unwatchState = vue.watch(
|
|
1925
|
+
fakeState,
|
|
1926
|
+
(value) => {
|
|
1927
|
+
unwatchState();
|
|
1928
|
+
properties.state.value = value;
|
|
1929
|
+
},
|
|
1930
|
+
{ deep: true }
|
|
1931
|
+
);
|
|
1932
|
+
const { state, ...restProperties } = properties;
|
|
1933
|
+
return createReactiveNestedStatus({
|
|
1934
|
+
rulesDef,
|
|
1935
|
+
externalErrors,
|
|
1936
|
+
...restProperties,
|
|
1937
|
+
state: fakeState
|
|
1938
|
+
});
|
|
1939
|
+
}
|
|
1899
1940
|
} else if (isValidatorRulesDef(rulesDef)) {
|
|
1900
1941
|
return createReactiveFieldStatus({
|
|
1901
1942
|
rulesDef,
|
|
@@ -1903,7 +1944,7 @@ function createReactiveChildrenStatus({
|
|
|
1903
1944
|
...properties
|
|
1904
1945
|
});
|
|
1905
1946
|
}
|
|
1906
|
-
return
|
|
1947
|
+
return void 0;
|
|
1907
1948
|
}
|
|
1908
1949
|
|
|
1909
1950
|
// src/core/useRegle/root/useRootStorage.ts
|
package/dist/regle-core.d.cts
CHANGED
|
@@ -18,6 +18,7 @@ type ExcludeByType<T, U> = {
|
|
|
18
18
|
[K in keyof T as T[K] extends U ? never : K]: T[K] extends U ? never : T[K];
|
|
19
19
|
};
|
|
20
20
|
type PrimitiveTypes = string | number | boolean | bigint | Date | File;
|
|
21
|
+
type isRecordLiteral<T extends unknown> = NonNullable<T> extends Date | File ? false : NonNullable<T> extends Record<string, any> ? true : false;
|
|
21
22
|
type NoInferLegacy<A extends any> = [A][A extends any ? 0 : never];
|
|
22
23
|
|
|
23
24
|
type ArrayElement<T> = T extends Array<infer U> ? U : never;
|
|
@@ -73,6 +74,49 @@ Unfortunately, `Record<string, never>`, `Record<keyof any, never>` and `Record<n
|
|
|
73
74
|
*/
|
|
74
75
|
type EmptyObject = {[emptyObjectSymbol]?: never};
|
|
75
76
|
|
|
77
|
+
/**
|
|
78
|
+
Returns a boolean for whether the given type is `never`.
|
|
79
|
+
|
|
80
|
+
@link https://github.com/microsoft/TypeScript/issues/31751#issuecomment-498526919
|
|
81
|
+
@link https://stackoverflow.com/a/53984913/10292952
|
|
82
|
+
@link https://www.zhenghao.io/posts/ts-never
|
|
83
|
+
|
|
84
|
+
Useful in type utilities, such as checking if something does not occur.
|
|
85
|
+
|
|
86
|
+
@example
|
|
87
|
+
```
|
|
88
|
+
import type {IsNever, And} from 'type-fest';
|
|
89
|
+
|
|
90
|
+
// https://github.com/andnp/SimplyTyped/blob/master/src/types/strings.ts
|
|
91
|
+
type AreStringsEqual<A extends string, B extends string> =
|
|
92
|
+
And<
|
|
93
|
+
IsNever<Exclude<A, B>> extends true ? true : false,
|
|
94
|
+
IsNever<Exclude<B, A>> extends true ? true : false
|
|
95
|
+
>;
|
|
96
|
+
|
|
97
|
+
type EndIfEqual<I extends string, O extends string> =
|
|
98
|
+
AreStringsEqual<I, O> extends true
|
|
99
|
+
? never
|
|
100
|
+
: void;
|
|
101
|
+
|
|
102
|
+
function endIfEqual<I extends string, O extends string>(input: I, output: O): EndIfEqual<I, O> {
|
|
103
|
+
if (input === output) {
|
|
104
|
+
process.exit(0);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
endIfEqual('abc', 'abc');
|
|
109
|
+
//=> never
|
|
110
|
+
|
|
111
|
+
endIfEqual('abc', '123');
|
|
112
|
+
//=> void
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
@category Type Guard
|
|
116
|
+
@category Utilities
|
|
117
|
+
*/
|
|
118
|
+
type IsNever$1<T> = [T] extends [never] ? true : false;
|
|
119
|
+
|
|
76
120
|
/**
|
|
77
121
|
Matches any primitive, `void`, `Date`, or `RegExp` value.
|
|
78
122
|
*/
|
|
@@ -96,7 +140,7 @@ type HasMultipleCallSignatures<T extends (...arguments_: any[]) => unknown> =
|
|
|
96
140
|
: false;
|
|
97
141
|
|
|
98
142
|
/**
|
|
99
|
-
@see PartialDeep
|
|
143
|
+
@see {@link PartialDeep}
|
|
100
144
|
*/
|
|
101
145
|
type PartialDeepOptions = {
|
|
102
146
|
/**
|
|
@@ -105,6 +149,32 @@ type PartialDeepOptions = {
|
|
|
105
149
|
@default false
|
|
106
150
|
*/
|
|
107
151
|
readonly recurseIntoArrays?: boolean;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
Allows `undefined` values in non-tuple arrays.
|
|
155
|
+
|
|
156
|
+
- When set to `true`, elements of non-tuple arrays can be `undefined`.
|
|
157
|
+
- When set to `false`, only explicitly defined elements are allowed in non-tuple arrays, ensuring stricter type checking.
|
|
158
|
+
|
|
159
|
+
@default true
|
|
160
|
+
|
|
161
|
+
@example
|
|
162
|
+
You can prevent `undefined` values in non-tuple arrays by passing `{recurseIntoArrays: true; allowUndefinedInNonTupleArrays: false}` as the second type argument:
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
import type {PartialDeep} from 'type-fest';
|
|
166
|
+
|
|
167
|
+
type Settings = {
|
|
168
|
+
languages: string[];
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
declare const partialSettings: PartialDeep<Settings, {recurseIntoArrays: true; allowUndefinedInNonTupleArrays: false}>;
|
|
172
|
+
|
|
173
|
+
partialSettings.languages = [undefined]; // Error
|
|
174
|
+
partialSettings.languages = []; // Ok
|
|
175
|
+
```
|
|
176
|
+
*/
|
|
177
|
+
readonly allowUndefinedInNonTupleArrays?: boolean;
|
|
108
178
|
};
|
|
109
179
|
|
|
110
180
|
/**
|
|
@@ -120,12 +190,12 @@ import type {PartialDeep} from 'type-fest';
|
|
|
120
190
|
|
|
121
191
|
const settings: Settings = {
|
|
122
192
|
textEditor: {
|
|
123
|
-
fontSize: 14
|
|
124
|
-
fontColor: '#000000'
|
|
125
|
-
fontWeight: 400
|
|
126
|
-
}
|
|
127
|
-
autocomplete: false
|
|
128
|
-
autosave: true
|
|
193
|
+
fontSize: 14,
|
|
194
|
+
fontColor: '#000000',
|
|
195
|
+
fontWeight: 400
|
|
196
|
+
},
|
|
197
|
+
autocomplete: false,
|
|
198
|
+
autosave: true
|
|
129
199
|
};
|
|
130
200
|
|
|
131
201
|
const applySavedSettings = (savedSettings: PartialDeep<Settings>) => {
|
|
@@ -140,7 +210,7 @@ By default, this does not affect elements in array and tuple types. You can chan
|
|
|
140
210
|
```
|
|
141
211
|
import type {PartialDeep} from 'type-fest';
|
|
142
212
|
|
|
143
|
-
|
|
213
|
+
type Settings = {
|
|
144
214
|
languages: string[];
|
|
145
215
|
}
|
|
146
216
|
|
|
@@ -149,6 +219,8 @@ const partialSettings: PartialDeep<Settings, {recurseIntoArrays: true}> = {
|
|
|
149
219
|
};
|
|
150
220
|
```
|
|
151
221
|
|
|
222
|
+
@see {@link PartialDeepOptions}
|
|
223
|
+
|
|
152
224
|
@category Object
|
|
153
225
|
@category Array
|
|
154
226
|
@category Set
|
|
@@ -169,8 +241,8 @@ type PartialDeep<T, Options extends PartialDeepOptions = {}> = T extends BuiltIn
|
|
|
169
241
|
? Options['recurseIntoArrays'] extends true
|
|
170
242
|
? ItemType[] extends T // Test for arrays (non-tuples) specifically
|
|
171
243
|
? readonly ItemType[] extends T // Differentiate readonly and mutable arrays
|
|
172
|
-
? ReadonlyArray<PartialDeep<ItemType | undefined, Options>>
|
|
173
|
-
: Array<PartialDeep<ItemType | undefined, Options>>
|
|
244
|
+
? ReadonlyArray<PartialDeep<Options['allowUndefinedInNonTupleArrays'] extends false ? ItemType : ItemType | undefined, Options>>
|
|
245
|
+
: Array<PartialDeep<Options['allowUndefinedInNonTupleArrays'] extends false ? ItemType : ItemType | undefined, Options>>
|
|
174
246
|
: PartialObjectDeep<T, Options> // Tuples behave properly
|
|
175
247
|
: T // If they don't opt into array testing, just use the original type
|
|
176
248
|
: PartialObjectDeep<T, Options>
|
|
@@ -342,6 +414,60 @@ type UnionToIntersection$1<Union> = (
|
|
|
342
414
|
? Intersection & Union
|
|
343
415
|
: never;
|
|
344
416
|
|
|
417
|
+
/**
|
|
418
|
+
Returns the last element of a union type.
|
|
419
|
+
|
|
420
|
+
@example
|
|
421
|
+
```
|
|
422
|
+
type Last = LastOfUnion<1 | 2 | 3>;
|
|
423
|
+
//=> 3
|
|
424
|
+
```
|
|
425
|
+
*/
|
|
426
|
+
type LastOfUnion<T> =
|
|
427
|
+
UnionToIntersection$1<T extends any ? () => T : never> extends () => (infer R)
|
|
428
|
+
? R
|
|
429
|
+
: never;
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
Convert a union type into an unordered tuple type of its elements.
|
|
433
|
+
|
|
434
|
+
"Unordered" means the elements of the tuple are not guaranteed to be in the same order as in the union type. The arrangement can appear random and may change at any time.
|
|
435
|
+
|
|
436
|
+
This can be useful when you have objects with a finite set of keys and want a type defining only the allowed keys, but do not want to repeat yourself.
|
|
437
|
+
|
|
438
|
+
@example
|
|
439
|
+
```
|
|
440
|
+
import type {UnionToTuple} from 'type-fest';
|
|
441
|
+
|
|
442
|
+
type Numbers = 1 | 2 | 3;
|
|
443
|
+
type NumbersTuple = UnionToTuple<Numbers>;
|
|
444
|
+
//=> [1, 2, 3]
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
@example
|
|
448
|
+
```
|
|
449
|
+
import type {UnionToTuple} from 'type-fest';
|
|
450
|
+
|
|
451
|
+
const pets = {
|
|
452
|
+
dog: '🐶',
|
|
453
|
+
cat: '🐱',
|
|
454
|
+
snake: '🐍',
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
type Pet = keyof typeof pets;
|
|
458
|
+
//=> 'dog' | 'cat' | 'snake'
|
|
459
|
+
|
|
460
|
+
const petList = Object.keys(pets) as UnionToTuple<Pet>;
|
|
461
|
+
//=> ['dog', 'cat', 'snake']
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
@category Array
|
|
465
|
+
*/
|
|
466
|
+
type UnionToTuple$1<T, L = LastOfUnion<T>> =
|
|
467
|
+
IsNever$1<T> extends false
|
|
468
|
+
? [...UnionToTuple$1<Exclude<T, L>>, L]
|
|
469
|
+
: [];
|
|
470
|
+
|
|
345
471
|
interface RegleBehaviourOptions {
|
|
346
472
|
/**
|
|
347
473
|
* Only display error when calling `r$.$validate()`
|
|
@@ -928,6 +1054,9 @@ type MismatchInfo<Actual, Expected> = And<[Extends<PrintType<Actual>, '...'>, No
|
|
|
928
1054
|
[K in UsefulKeys<Actual> | UsefulKeys<Expected>]: MismatchInfo<K extends keyof Actual ? Actual[K] : never, K extends keyof Expected ? Expected[K] : never>;
|
|
929
1055
|
} : StrictEqualUsingBranding<Actual, Expected> extends true ? Actual : `[Regle error] The parent property does not match the form schema`;
|
|
930
1056
|
|
|
1057
|
+
type RemoveCommonKey<T extends readonly any[], K extends PropertyKey> = T extends [infer F, ...infer R] ? [Prettify<Omit<F, K>>, ...RemoveCommonKey<R, K>] : [];
|
|
1058
|
+
type JoinDiscriminatedUnions<TUnion extends unknown> = isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection$1<RemoveCommonKey<UnionToTuple$1<TUnion>, keyof NonNullable<TUnion>>[number]>> & Pick<NonNullable<TUnion>, keyof NonNullable<TUnion>>> : TUnion;
|
|
1059
|
+
|
|
931
1060
|
type CreateFn<T extends any[]> = (...args: T) => any;
|
|
932
1061
|
/**
|
|
933
1062
|
* Transform normal parameters tuple declaration to a rich tuple declaration
|
|
@@ -1193,10 +1322,10 @@ type InlineRuleDeclaration<TValue extends any = any, TParams extends any[] = any
|
|
|
1193
1322
|
type FormRuleDeclaration<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition> = RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn, TAsync extends boolean = boolean> = InlineRuleDeclaration<TValue, TParams, TReturn> | RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
|
|
1194
1323
|
|
|
1195
1324
|
type RegleErrorTree<TState = MaybeRef<Record<string, any> | any[]>> = {
|
|
1196
|
-
readonly [K in keyof UnwrapNestedRefs<TState
|
|
1325
|
+
readonly [K in keyof JoinDiscriminatedUnions<UnwrapNestedRefs<TState>>]: RegleValidationErrors<JoinDiscriminatedUnions<UnwrapNestedRefs<TState>>[K]>;
|
|
1197
1326
|
};
|
|
1198
1327
|
type RegleExternalErrorTree<TState = MaybeRef<Record<string, any> | any[]>> = {
|
|
1199
|
-
readonly [K in keyof UnwrapNestedRefs<TState
|
|
1328
|
+
readonly [K in keyof JoinDiscriminatedUnions<UnwrapNestedRefs<TState>>]?: RegleValidationErrors<JoinDiscriminatedUnions<UnwrapNestedRefs<TState>>[K], true>;
|
|
1200
1329
|
};
|
|
1201
1330
|
type RegleValidationErrors<TState extends Record<string, any> | any[] | unknown = never, TExternal extends boolean = false> = NonNullable<TState> extends Array<infer U extends Record<string, any>> ? TExternal extends false ? RegleCollectionErrors<U> : RegleExternalCollectionErrors<U> : NonNullable<TState> extends Date | File ? string[] : NonNullable<TState> extends Record<string, any> ? TExternal extends false ? RegleErrorTree<TState> : RegleExternalErrorTree<TState> : string[];
|
|
1202
1331
|
type RegleCollectionErrors<TState extends Record<string, any>> = {
|
|
@@ -1255,7 +1384,7 @@ type RegleStatus<TState extends Record<string, any> | undefined = Record<string,
|
|
|
1255
1384
|
readonly $fields: {
|
|
1256
1385
|
readonly [TKey in keyof TState]: InferRegleStatusType<NonNullable<TRules[TKey]>, NonNullable<TState>, TKey, TShortcuts>;
|
|
1257
1386
|
} & {
|
|
1258
|
-
readonly [TKey in keyof TState as TRules[TKey] extends NonNullable<TRules[TKey]> ? TKey : never]-?: InferRegleStatusType<NonNullable<TRules[TKey]>, NonNullable<TState>, TKey, TShortcuts>;
|
|
1387
|
+
readonly [TKey in keyof TState as TRules[TKey] extends NonNullable<TRules[TKey]> ? NonNullable<TRules[TKey]> extends RegleRuleDecl ? TKey : never : never]-?: InferRegleStatusType<NonNullable<TRules[TKey]>, NonNullable<TState>, TKey, TShortcuts>;
|
|
1259
1388
|
};
|
|
1260
1389
|
/** Collection of all the error messages, collected for all children properties and nested forms.
|
|
1261
1390
|
*
|
|
@@ -1306,8 +1435,12 @@ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormProperty
|
|
|
1306
1435
|
readonly $errors: string[];
|
|
1307
1436
|
/** Collection of all the error messages, collected for all children properties and nested forms. */
|
|
1308
1437
|
readonly $silentErrors: string[];
|
|
1438
|
+
/** Stores external errors of the current field */
|
|
1309
1439
|
readonly $externalErrors: string[];
|
|
1440
|
+
/** Stores active tooltips messages of the current field */
|
|
1310
1441
|
readonly $tooltips: string[];
|
|
1442
|
+
/** Represents the inactive status. Is true when this state have empty rules */
|
|
1443
|
+
readonly $inactive: boolean;
|
|
1311
1444
|
/** Will return a copy of your state with only the fields that are dirty. By default it will filter out nullish values or objects, but you can override it with the first parameter $extractDirtyFields(false). */
|
|
1312
1445
|
$extractDirtyFields: (filterNullishValues?: boolean) => Maybe<TState>;
|
|
1313
1446
|
/** Sets all properties as dirty, triggering all rules. It returns a promise that will either resolve to false or a type safe copy of your form state. Values that had the required rule will be transformed into a non-nullable value (type only). */
|
|
@@ -1329,6 +1462,7 @@ interface $InternalRegleFieldStatus extends RegleCommonStatus {
|
|
|
1329
1462
|
readonly $rules: Record<string, $InternalRegleRuleStatus>;
|
|
1330
1463
|
readonly $externalErrors?: string[];
|
|
1331
1464
|
readonly $errors: string[];
|
|
1465
|
+
readonly $inactive: boolean;
|
|
1332
1466
|
readonly $silentErrors: string[];
|
|
1333
1467
|
$extractDirtyFields: (filterNullishValues?: boolean) => any;
|
|
1334
1468
|
$validate: () => Promise<$InternalRegleResult>;
|
|
@@ -1352,9 +1486,9 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
1352
1486
|
/** Id used to track collections items */
|
|
1353
1487
|
$id?: string;
|
|
1354
1488
|
/** A reference to the original validated model. It can be used to bind your form with v-model.*/
|
|
1355
|
-
$value: UnwrapNestedRefs<TValue
|
|
1489
|
+
$value: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue>>;
|
|
1356
1490
|
/** $value variant that will not "touch" the field and update the value silently, running only the rules, so you can easily swap values without impacting user interaction. */
|
|
1357
|
-
$silentValue: UnwrapNestedRefs<TValue
|
|
1491
|
+
$silentValue: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue>>;
|
|
1358
1492
|
/** Marks the field and all nested properties as $dirty. */
|
|
1359
1493
|
$touch(runCommit?: boolean, withConditions?: boolean): void;
|
|
1360
1494
|
/** Resets the $dirty state on all nested properties of a form. */
|
|
@@ -1526,4 +1660,4 @@ declare function defineRegleConfig<TShortcuts extends RegleShortcutDefinition<TC
|
|
|
1526
1660
|
inferRules: inferRulesFn<TCustomRules>;
|
|
1527
1661
|
};
|
|
1528
1662
|
|
|
1529
|
-
export { type $InternalRegleStatus, type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type NoInferLegacy, type PrimitiveTypes, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialRuleTree, type RegleResult, type RegleRoot, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleMetadataExtended, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleTypeReturn, type RegleRuleWithParamsDefinition, type RegleShortcutDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleRuleTree as RegleValidationTree, type ResolvedRegleBehaviourOptions, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle, useRootStorage };
|
|
1663
|
+
export { type $InternalRegleStatus, type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InlineRuleDeclaration, InternalRuleType, type JoinDiscriminatedUnions, type LocalRegleBehaviourOptions, type Maybe, type NoInferLegacy, type PrimitiveTypes, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialRuleTree, type RegleResult, type RegleRoot, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleMetadataExtended, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleTypeReturn, type RegleRuleWithParamsDefinition, type RegleShortcutDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleRuleTree as RegleValidationTree, type ResolvedRegleBehaviourOptions, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle, useRootStorage };
|
package/dist/regle-core.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ type ExcludeByType<T, U> = {
|
|
|
18
18
|
[K in keyof T as T[K] extends U ? never : K]: T[K] extends U ? never : T[K];
|
|
19
19
|
};
|
|
20
20
|
type PrimitiveTypes = string | number | boolean | bigint | Date | File;
|
|
21
|
+
type isRecordLiteral<T extends unknown> = NonNullable<T> extends Date | File ? false : NonNullable<T> extends Record<string, any> ? true : false;
|
|
21
22
|
type NoInferLegacy<A extends any> = [A][A extends any ? 0 : never];
|
|
22
23
|
|
|
23
24
|
type ArrayElement<T> = T extends Array<infer U> ? U : never;
|
|
@@ -73,6 +74,49 @@ Unfortunately, `Record<string, never>`, `Record<keyof any, never>` and `Record<n
|
|
|
73
74
|
*/
|
|
74
75
|
type EmptyObject = {[emptyObjectSymbol]?: never};
|
|
75
76
|
|
|
77
|
+
/**
|
|
78
|
+
Returns a boolean for whether the given type is `never`.
|
|
79
|
+
|
|
80
|
+
@link https://github.com/microsoft/TypeScript/issues/31751#issuecomment-498526919
|
|
81
|
+
@link https://stackoverflow.com/a/53984913/10292952
|
|
82
|
+
@link https://www.zhenghao.io/posts/ts-never
|
|
83
|
+
|
|
84
|
+
Useful in type utilities, such as checking if something does not occur.
|
|
85
|
+
|
|
86
|
+
@example
|
|
87
|
+
```
|
|
88
|
+
import type {IsNever, And} from 'type-fest';
|
|
89
|
+
|
|
90
|
+
// https://github.com/andnp/SimplyTyped/blob/master/src/types/strings.ts
|
|
91
|
+
type AreStringsEqual<A extends string, B extends string> =
|
|
92
|
+
And<
|
|
93
|
+
IsNever<Exclude<A, B>> extends true ? true : false,
|
|
94
|
+
IsNever<Exclude<B, A>> extends true ? true : false
|
|
95
|
+
>;
|
|
96
|
+
|
|
97
|
+
type EndIfEqual<I extends string, O extends string> =
|
|
98
|
+
AreStringsEqual<I, O> extends true
|
|
99
|
+
? never
|
|
100
|
+
: void;
|
|
101
|
+
|
|
102
|
+
function endIfEqual<I extends string, O extends string>(input: I, output: O): EndIfEqual<I, O> {
|
|
103
|
+
if (input === output) {
|
|
104
|
+
process.exit(0);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
endIfEqual('abc', 'abc');
|
|
109
|
+
//=> never
|
|
110
|
+
|
|
111
|
+
endIfEqual('abc', '123');
|
|
112
|
+
//=> void
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
@category Type Guard
|
|
116
|
+
@category Utilities
|
|
117
|
+
*/
|
|
118
|
+
type IsNever$1<T> = [T] extends [never] ? true : false;
|
|
119
|
+
|
|
76
120
|
/**
|
|
77
121
|
Matches any primitive, `void`, `Date`, or `RegExp` value.
|
|
78
122
|
*/
|
|
@@ -96,7 +140,7 @@ type HasMultipleCallSignatures<T extends (...arguments_: any[]) => unknown> =
|
|
|
96
140
|
: false;
|
|
97
141
|
|
|
98
142
|
/**
|
|
99
|
-
@see PartialDeep
|
|
143
|
+
@see {@link PartialDeep}
|
|
100
144
|
*/
|
|
101
145
|
type PartialDeepOptions = {
|
|
102
146
|
/**
|
|
@@ -105,6 +149,32 @@ type PartialDeepOptions = {
|
|
|
105
149
|
@default false
|
|
106
150
|
*/
|
|
107
151
|
readonly recurseIntoArrays?: boolean;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
Allows `undefined` values in non-tuple arrays.
|
|
155
|
+
|
|
156
|
+
- When set to `true`, elements of non-tuple arrays can be `undefined`.
|
|
157
|
+
- When set to `false`, only explicitly defined elements are allowed in non-tuple arrays, ensuring stricter type checking.
|
|
158
|
+
|
|
159
|
+
@default true
|
|
160
|
+
|
|
161
|
+
@example
|
|
162
|
+
You can prevent `undefined` values in non-tuple arrays by passing `{recurseIntoArrays: true; allowUndefinedInNonTupleArrays: false}` as the second type argument:
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
import type {PartialDeep} from 'type-fest';
|
|
166
|
+
|
|
167
|
+
type Settings = {
|
|
168
|
+
languages: string[];
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
declare const partialSettings: PartialDeep<Settings, {recurseIntoArrays: true; allowUndefinedInNonTupleArrays: false}>;
|
|
172
|
+
|
|
173
|
+
partialSettings.languages = [undefined]; // Error
|
|
174
|
+
partialSettings.languages = []; // Ok
|
|
175
|
+
```
|
|
176
|
+
*/
|
|
177
|
+
readonly allowUndefinedInNonTupleArrays?: boolean;
|
|
108
178
|
};
|
|
109
179
|
|
|
110
180
|
/**
|
|
@@ -120,12 +190,12 @@ import type {PartialDeep} from 'type-fest';
|
|
|
120
190
|
|
|
121
191
|
const settings: Settings = {
|
|
122
192
|
textEditor: {
|
|
123
|
-
fontSize: 14
|
|
124
|
-
fontColor: '#000000'
|
|
125
|
-
fontWeight: 400
|
|
126
|
-
}
|
|
127
|
-
autocomplete: false
|
|
128
|
-
autosave: true
|
|
193
|
+
fontSize: 14,
|
|
194
|
+
fontColor: '#000000',
|
|
195
|
+
fontWeight: 400
|
|
196
|
+
},
|
|
197
|
+
autocomplete: false,
|
|
198
|
+
autosave: true
|
|
129
199
|
};
|
|
130
200
|
|
|
131
201
|
const applySavedSettings = (savedSettings: PartialDeep<Settings>) => {
|
|
@@ -140,7 +210,7 @@ By default, this does not affect elements in array and tuple types. You can chan
|
|
|
140
210
|
```
|
|
141
211
|
import type {PartialDeep} from 'type-fest';
|
|
142
212
|
|
|
143
|
-
|
|
213
|
+
type Settings = {
|
|
144
214
|
languages: string[];
|
|
145
215
|
}
|
|
146
216
|
|
|
@@ -149,6 +219,8 @@ const partialSettings: PartialDeep<Settings, {recurseIntoArrays: true}> = {
|
|
|
149
219
|
};
|
|
150
220
|
```
|
|
151
221
|
|
|
222
|
+
@see {@link PartialDeepOptions}
|
|
223
|
+
|
|
152
224
|
@category Object
|
|
153
225
|
@category Array
|
|
154
226
|
@category Set
|
|
@@ -169,8 +241,8 @@ type PartialDeep<T, Options extends PartialDeepOptions = {}> = T extends BuiltIn
|
|
|
169
241
|
? Options['recurseIntoArrays'] extends true
|
|
170
242
|
? ItemType[] extends T // Test for arrays (non-tuples) specifically
|
|
171
243
|
? readonly ItemType[] extends T // Differentiate readonly and mutable arrays
|
|
172
|
-
? ReadonlyArray<PartialDeep<ItemType | undefined, Options>>
|
|
173
|
-
: Array<PartialDeep<ItemType | undefined, Options>>
|
|
244
|
+
? ReadonlyArray<PartialDeep<Options['allowUndefinedInNonTupleArrays'] extends false ? ItemType : ItemType | undefined, Options>>
|
|
245
|
+
: Array<PartialDeep<Options['allowUndefinedInNonTupleArrays'] extends false ? ItemType : ItemType | undefined, Options>>
|
|
174
246
|
: PartialObjectDeep<T, Options> // Tuples behave properly
|
|
175
247
|
: T // If they don't opt into array testing, just use the original type
|
|
176
248
|
: PartialObjectDeep<T, Options>
|
|
@@ -342,6 +414,60 @@ type UnionToIntersection$1<Union> = (
|
|
|
342
414
|
? Intersection & Union
|
|
343
415
|
: never;
|
|
344
416
|
|
|
417
|
+
/**
|
|
418
|
+
Returns the last element of a union type.
|
|
419
|
+
|
|
420
|
+
@example
|
|
421
|
+
```
|
|
422
|
+
type Last = LastOfUnion<1 | 2 | 3>;
|
|
423
|
+
//=> 3
|
|
424
|
+
```
|
|
425
|
+
*/
|
|
426
|
+
type LastOfUnion<T> =
|
|
427
|
+
UnionToIntersection$1<T extends any ? () => T : never> extends () => (infer R)
|
|
428
|
+
? R
|
|
429
|
+
: never;
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
Convert a union type into an unordered tuple type of its elements.
|
|
433
|
+
|
|
434
|
+
"Unordered" means the elements of the tuple are not guaranteed to be in the same order as in the union type. The arrangement can appear random and may change at any time.
|
|
435
|
+
|
|
436
|
+
This can be useful when you have objects with a finite set of keys and want a type defining only the allowed keys, but do not want to repeat yourself.
|
|
437
|
+
|
|
438
|
+
@example
|
|
439
|
+
```
|
|
440
|
+
import type {UnionToTuple} from 'type-fest';
|
|
441
|
+
|
|
442
|
+
type Numbers = 1 | 2 | 3;
|
|
443
|
+
type NumbersTuple = UnionToTuple<Numbers>;
|
|
444
|
+
//=> [1, 2, 3]
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
@example
|
|
448
|
+
```
|
|
449
|
+
import type {UnionToTuple} from 'type-fest';
|
|
450
|
+
|
|
451
|
+
const pets = {
|
|
452
|
+
dog: '🐶',
|
|
453
|
+
cat: '🐱',
|
|
454
|
+
snake: '🐍',
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
type Pet = keyof typeof pets;
|
|
458
|
+
//=> 'dog' | 'cat' | 'snake'
|
|
459
|
+
|
|
460
|
+
const petList = Object.keys(pets) as UnionToTuple<Pet>;
|
|
461
|
+
//=> ['dog', 'cat', 'snake']
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
@category Array
|
|
465
|
+
*/
|
|
466
|
+
type UnionToTuple$1<T, L = LastOfUnion<T>> =
|
|
467
|
+
IsNever$1<T> extends false
|
|
468
|
+
? [...UnionToTuple$1<Exclude<T, L>>, L]
|
|
469
|
+
: [];
|
|
470
|
+
|
|
345
471
|
interface RegleBehaviourOptions {
|
|
346
472
|
/**
|
|
347
473
|
* Only display error when calling `r$.$validate()`
|
|
@@ -928,6 +1054,9 @@ type MismatchInfo<Actual, Expected> = And<[Extends<PrintType<Actual>, '...'>, No
|
|
|
928
1054
|
[K in UsefulKeys<Actual> | UsefulKeys<Expected>]: MismatchInfo<K extends keyof Actual ? Actual[K] : never, K extends keyof Expected ? Expected[K] : never>;
|
|
929
1055
|
} : StrictEqualUsingBranding<Actual, Expected> extends true ? Actual : `[Regle error] The parent property does not match the form schema`;
|
|
930
1056
|
|
|
1057
|
+
type RemoveCommonKey<T extends readonly any[], K extends PropertyKey> = T extends [infer F, ...infer R] ? [Prettify<Omit<F, K>>, ...RemoveCommonKey<R, K>] : [];
|
|
1058
|
+
type JoinDiscriminatedUnions<TUnion extends unknown> = isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection$1<RemoveCommonKey<UnionToTuple$1<TUnion>, keyof NonNullable<TUnion>>[number]>> & Pick<NonNullable<TUnion>, keyof NonNullable<TUnion>>> : TUnion;
|
|
1059
|
+
|
|
931
1060
|
type CreateFn<T extends any[]> = (...args: T) => any;
|
|
932
1061
|
/**
|
|
933
1062
|
* Transform normal parameters tuple declaration to a rich tuple declaration
|
|
@@ -1193,10 +1322,10 @@ type InlineRuleDeclaration<TValue extends any = any, TParams extends any[] = any
|
|
|
1193
1322
|
type FormRuleDeclaration<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition> = RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn, TAsync extends boolean = boolean> = InlineRuleDeclaration<TValue, TParams, TReturn> | RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
|
|
1194
1323
|
|
|
1195
1324
|
type RegleErrorTree<TState = MaybeRef<Record<string, any> | any[]>> = {
|
|
1196
|
-
readonly [K in keyof UnwrapNestedRefs<TState
|
|
1325
|
+
readonly [K in keyof JoinDiscriminatedUnions<UnwrapNestedRefs<TState>>]: RegleValidationErrors<JoinDiscriminatedUnions<UnwrapNestedRefs<TState>>[K]>;
|
|
1197
1326
|
};
|
|
1198
1327
|
type RegleExternalErrorTree<TState = MaybeRef<Record<string, any> | any[]>> = {
|
|
1199
|
-
readonly [K in keyof UnwrapNestedRefs<TState
|
|
1328
|
+
readonly [K in keyof JoinDiscriminatedUnions<UnwrapNestedRefs<TState>>]?: RegleValidationErrors<JoinDiscriminatedUnions<UnwrapNestedRefs<TState>>[K], true>;
|
|
1200
1329
|
};
|
|
1201
1330
|
type RegleValidationErrors<TState extends Record<string, any> | any[] | unknown = never, TExternal extends boolean = false> = NonNullable<TState> extends Array<infer U extends Record<string, any>> ? TExternal extends false ? RegleCollectionErrors<U> : RegleExternalCollectionErrors<U> : NonNullable<TState> extends Date | File ? string[] : NonNullable<TState> extends Record<string, any> ? TExternal extends false ? RegleErrorTree<TState> : RegleExternalErrorTree<TState> : string[];
|
|
1202
1331
|
type RegleCollectionErrors<TState extends Record<string, any>> = {
|
|
@@ -1255,7 +1384,7 @@ type RegleStatus<TState extends Record<string, any> | undefined = Record<string,
|
|
|
1255
1384
|
readonly $fields: {
|
|
1256
1385
|
readonly [TKey in keyof TState]: InferRegleStatusType<NonNullable<TRules[TKey]>, NonNullable<TState>, TKey, TShortcuts>;
|
|
1257
1386
|
} & {
|
|
1258
|
-
readonly [TKey in keyof TState as TRules[TKey] extends NonNullable<TRules[TKey]> ? TKey : never]-?: InferRegleStatusType<NonNullable<TRules[TKey]>, NonNullable<TState>, TKey, TShortcuts>;
|
|
1387
|
+
readonly [TKey in keyof TState as TRules[TKey] extends NonNullable<TRules[TKey]> ? NonNullable<TRules[TKey]> extends RegleRuleDecl ? TKey : never : never]-?: InferRegleStatusType<NonNullable<TRules[TKey]>, NonNullable<TState>, TKey, TShortcuts>;
|
|
1259
1388
|
};
|
|
1260
1389
|
/** Collection of all the error messages, collected for all children properties and nested forms.
|
|
1261
1390
|
*
|
|
@@ -1306,8 +1435,12 @@ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormProperty
|
|
|
1306
1435
|
readonly $errors: string[];
|
|
1307
1436
|
/** Collection of all the error messages, collected for all children properties and nested forms. */
|
|
1308
1437
|
readonly $silentErrors: string[];
|
|
1438
|
+
/** Stores external errors of the current field */
|
|
1309
1439
|
readonly $externalErrors: string[];
|
|
1440
|
+
/** Stores active tooltips messages of the current field */
|
|
1310
1441
|
readonly $tooltips: string[];
|
|
1442
|
+
/** Represents the inactive status. Is true when this state have empty rules */
|
|
1443
|
+
readonly $inactive: boolean;
|
|
1311
1444
|
/** Will return a copy of your state with only the fields that are dirty. By default it will filter out nullish values or objects, but you can override it with the first parameter $extractDirtyFields(false). */
|
|
1312
1445
|
$extractDirtyFields: (filterNullishValues?: boolean) => Maybe<TState>;
|
|
1313
1446
|
/** Sets all properties as dirty, triggering all rules. It returns a promise that will either resolve to false or a type safe copy of your form state. Values that had the required rule will be transformed into a non-nullable value (type only). */
|
|
@@ -1329,6 +1462,7 @@ interface $InternalRegleFieldStatus extends RegleCommonStatus {
|
|
|
1329
1462
|
readonly $rules: Record<string, $InternalRegleRuleStatus>;
|
|
1330
1463
|
readonly $externalErrors?: string[];
|
|
1331
1464
|
readonly $errors: string[];
|
|
1465
|
+
readonly $inactive: boolean;
|
|
1332
1466
|
readonly $silentErrors: string[];
|
|
1333
1467
|
$extractDirtyFields: (filterNullishValues?: boolean) => any;
|
|
1334
1468
|
$validate: () => Promise<$InternalRegleResult>;
|
|
@@ -1352,9 +1486,9 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
1352
1486
|
/** Id used to track collections items */
|
|
1353
1487
|
$id?: string;
|
|
1354
1488
|
/** A reference to the original validated model. It can be used to bind your form with v-model.*/
|
|
1355
|
-
$value: UnwrapNestedRefs<TValue
|
|
1489
|
+
$value: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue>>;
|
|
1356
1490
|
/** $value variant that will not "touch" the field and update the value silently, running only the rules, so you can easily swap values without impacting user interaction. */
|
|
1357
|
-
$silentValue: UnwrapNestedRefs<TValue
|
|
1491
|
+
$silentValue: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue>>;
|
|
1358
1492
|
/** Marks the field and all nested properties as $dirty. */
|
|
1359
1493
|
$touch(runCommit?: boolean, withConditions?: boolean): void;
|
|
1360
1494
|
/** Resets the $dirty state on all nested properties of a form. */
|
|
@@ -1526,4 +1660,4 @@ declare function defineRegleConfig<TShortcuts extends RegleShortcutDefinition<TC
|
|
|
1526
1660
|
inferRules: inferRulesFn<TCustomRules>;
|
|
1527
1661
|
};
|
|
1528
1662
|
|
|
1529
|
-
export { type $InternalRegleStatus, type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type NoInferLegacy, type PrimitiveTypes, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialRuleTree, type RegleResult, type RegleRoot, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleMetadataExtended, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleTypeReturn, type RegleRuleWithParamsDefinition, type RegleShortcutDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleRuleTree as RegleValidationTree, type ResolvedRegleBehaviourOptions, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle, useRootStorage };
|
|
1663
|
+
export { type $InternalRegleStatus, type AllRulesDeclarations, type DeepMaybeRef, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InlineRuleDeclaration, InternalRuleType, type JoinDiscriminatedUnions, type LocalRegleBehaviourOptions, type Maybe, type NoInferLegacy, type PrimitiveTypes, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialRuleTree, type RegleResult, type RegleRoot, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleMetadataExtended, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleTypeReturn, type RegleRuleWithParamsDefinition, type RegleShortcutDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleRuleTree as RegleValidationTree, type ResolvedRegleBehaviourOptions, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle, useRootStorage };
|
package/dist/regle-core.min.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var vue=require('vue');function z(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 Ke=Symbol("regle-rule");function bt(e){if(typeof e.source.flags=="string")return e.source.flags;{let r=[];return e.global&&r.push("g"),e.ignoreCase&&r.push("i"),e.multiline&&r.push("m"),e.sticky&&r.push("y"),e.unicode&&r.push("u"),r.join("")}}function H(e){let r=e,t={}.toString.call(e).slice(8,-1);if(t=="Set"&&(r=new Set([...e].map(n=>H(n)))),t=="Map"&&(r=new Map([...e].map(n=>[H(n[0]),H(n[1])]))),t=="Date"&&(r=new Date(e.getTime())),t=="RegExp"&&(r=RegExp(e.source,bt(e))),t=="Array"||t=="Object"){r=Array.isArray(e)?[]:{};for(let n in e)r[n]=H(e[n]);}return r}var Ce=(t=>(t.Inline="__inline",t.Async="__async",t))(Ce||{});function et(e,r){return e.some(t=>t[r])}function tt(e,r){return e.reduce((t,n)=>{let l=n[r]||[];return t.concat(l)},[])}function B(e){try{return e.map(r=>vue.toValue(r))}catch{return []}}function rt(e){return e.map(r=>r instanceof Function?vue.computed(r):vue.isRef(r)?r:vue.toRef(()=>r))}function nt(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 Ie(e,...r){let{validator:t,type:n}=e,l=n==="__async"||t.constructor.name==="AsyncFunction";return {...{validator(d,...S){return e.validator(d,...B(S.length?S:r))},message(d){return typeof e.message=="function"?e.message({...d,$params:B(d?.$params?.length?d.$params:r)}):e.message},active(d){return typeof e.active=="function"?e.active({...d,$params:B(d?.$params?.length?d.$params:r)}):e.active??!0},tooltip(d){return typeof e.tooltip=="function"?e.tooltip({...d,$params:B(d?.$params?.length?d.$params:r)}):e.tooltip??[]},exec(d){let S=e.validator(d,...B(r)),$;return S instanceof Promise?S.then(D=>($=D,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)):($=S,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:rt(r),_brand:Ke}}function Pe(e){if(typeof e.validator=="function"){let t=Ie(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(nt(e.validator)>1){let l=function(...R){return Ie(e,...R)};return l.validator=t.validator,l.message=t.message,l.active=t.active,l.tooltip=t.tooltip,l.type=t.type,l.exec=t.exec,l._validator=t.validator,l._message=t.message,l._active=t.active,l._tooltip=t.tooltip,l._type=e.type,l._message_pacthed=!1,l._tooltip_pacthed=!1,l._async=n,l}else return t}throw new Error("Validator must be a function")}function we(){let e=vue.shallowRef(new Map),r=vue.shallowRef(new Map),t=vue.shallowRef(new Map),n=vue.shallowRef(new Map),l=vue.shallowRef(new Map),R=vue.shallowRef(new Map);function y(u){let i=r.value.get(u);if(i)return i;{let c=vue.ref({});return r.value.set(u,c),c}}function d(u){let i=t.value.get(u);if(i)return i;{let c=vue.ref([]);return t.value.set(u,c),c}}function S(u,i,c){R.value.set(`${u}-${i}`,c);}function $(u,i){return R.value.get(`${u}-${i}`)}function D(u,i){u&&i!=null&&R.value.delete(`${u}-${i}`);}function F(u,i){n.value.set(u,i);}function O(u){return n.value.get(u)??!1}function a(u,i){e.value.set(u,i);}function E(u,i){let c=e.value.get(u);return c?C(i,c)?{valid:!0}:{valid:!1}:void 0}function C(u,i){let c=Object.keys(i),j=Object.keys(u);return j.length!==c.length||!j.every(_=>c.includes(_))?!1:j.every(_=>{let P=u[_],b=i[_];return !b||!P||typeof P=="function"||typeof b=="function"||typeof P=="number"||typeof P=="boolean"?!1:P._params?P._params?.every((W,m)=>{if(typeof b=="number"||typeof b=="boolean")return !0;{let I=B(b._params),V=B(P._params);return I?.[m]===V?.[m]}}):!0})}function M(u){let i=l.value.get(u);if(i)return i;{let c=vue.ref(!1),j=vue.ref(!0),k=vue.ref({}),_=vue.ref(!1);return l.value.set(u,{$pending:c,$valid:j,$metadata:k,$validating:_}),{$pending:c,$valid:j,$metadata:k,$validating:_}}}return vue.getCurrentScope()&&vue.onScopeDispose(()=>{e.value.clear(),r.value.clear(),t.value.clear(),n.value.clear(),l.value.clear(),R.value.clear();}),{addRuleDeclEntry:a,setDirtyEntry:F,checkRuleDeclEntry:E,getDirtyState:O,trySetRuleStatusRef:M,getFieldsEntry:y,getCollectionsEntry:d,getArrayStatus:$,addArrayStatus:S,deleteArrayStatus:D,arrayStatusStorage:R}}function Z(e){return e instanceof Date||e instanceof File?!1:typeof e=="object"&&e!==null&&!Array.isArray(e)}function at(e){return e.value instanceof Date||e.value instanceof File?!1:Z(e.value)}function Oe(e,r,t){let n=vue.effectScope(),l;return e instanceof Function?l=n.run(()=>e(r,t??0)):l=e,{scope:n,unwrapped:l}}function ge(e,r,t){let n,l=(...R)=>new Promise(y=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...R])).then(y);},r);});return l.cancel=()=>{clearTimeout(n),n=void 0;},l}function Ot(e,r){let t=String(e).split("."),n=String(r).split(".");for(let l=0;l<Math.min(t.length,n.length);l++){let R=Number(t[l]),y=Number(n[l]);if(R>y)return 1;if(y>R)return -1;if(!isNaN(R)&&isNaN(y))return 1;if(isNaN(R)&&!isNaN(y))return -1}return 0}var Se=Ot(vue.version,"3.5.0")!==-1;function At(){return Math.floor(Math.random()*Date.now()).toString()}function he(){return typeof window>"u"?At():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function lt(e,r){return Z(e.value)&&Z(r.value)&&!Object.entries(r.value).some(t=>fe(t))}function ot(e,r){return !!e.value&&"$each"in e.value||Array.isArray(r.value)}function ut(e){return !!e.value&&Z(e.value)}function fe(e){return Z(e)&&"_validator"in e}function Re(e){return typeof e.value!="function"}function st(e){return Z(e)&&"$fields"in e}function Ae({field:e,silent:r=!1}){return Object.entries(e.$rules??{}).map(([t,n])=>r||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(t=>!!t).reduce((t,n)=>typeof n=="string"?t?.concat([n]):t?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function it({field:e}){return Object.entries(e.$rules??{}).map(([r,t])=>t.$tooltip).filter(r=>!!r).reduce((r,t)=>typeof t=="string"?r?.concat([t]):r?.concat(t),[])}function ct({fieldProperties:e,customMessages:r,rule:t,ruleKey:n,state:l,path:R,storage:y,$debounce:d,modifiers:S}){let $=vue.effectScope(),D={},F,O=vue.ref(!1),{$pending:a,$valid:E,$metadata:C,$validating:M}=y.trySetRuleStatusRef(`${R}.${n}`);function u(){$=vue.effectScope(),D=$.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:E.value,$invalid:!E.value,$pending:a.value},$params:x.value,...C.value})),W=vue.computed(()=>Re(t)?typeof t.value.active=="function"?t.value.active(b.value):!!t.value.active:!0);function m(o){let s="",g=r?r[n]?.[o]:void 0;if(g&&(typeof g=="function"?s=g(b.value):s=g),Re(t)){let f=`_${o}_patched`;g&&!t.value[f]||(typeof t.value[o]=="function"?s=t.value[o](b.value):s=t.value[o]??"");}return s}let I=vue.computed(()=>{let o=m("message");return z(o)&&(o="This field is not valid"),o}),V=vue.computed(()=>m("tooltip")),Q=vue.computed(()=>Re(t)&&t.value.type?t.value.type:n),K=vue.computed(()=>Re(t)?t.value.validator:t.value),x=vue.computed(()=>typeof t.value=="function"?[]:B(t.value._params??[])),w=vue.computed(()=>`${R}.${Q.value}`);return {$active:W,$message:I,$type:Q,$validator:K,$params:x,$path:w,$tooltip:V}}),F=vue.watch(D?.$params,()=>{(S.$autoDirty.value||S.$rewardEarly.value&&e.$error.value)&&k();});}u();function i(){E.value=!0,e.$dirty.value&&(a.value=!0);}async function c(){let b=!1;try{let W=D.$validator.value,m=W(l.value,...D.$params.value),I=l.value;i();let V;if(m instanceof Promise?V=await m:V=m,l.value!==I)return !0;if(typeof V=="boolean")b=V;else {let{$valid:Q,...K}=V;b=Q,C.value=K;}}catch{b=!1;}finally{a.value=!1;}return b}let j=ge(c,d??200);async function k(){try{M.value=!0;let b=!1;if(fe(t.value)&&t.value._async)b=await j();else {let W=D.$validator.value,m=W(l.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,...V}=m;b=I,C.value=V;}}return E.value=b,b}catch{return !1}finally{M.value=!1;}}function _(){E.value=!0,C.value={},a.value=!1,M.value=!1,u();}function P(){F(),$.stop(),$=vue.effectScope();}return vue.reactive({...D,$pending:a,$valid:E,$metadata:C,$haveAsync:O,$validating:M,$validate:k,$unwatch:P,$watch:u,$reset:_})}function Te({state:e,rulesDef:r,customMessages:t,path:n,fieldName:l,storage:R,options:y,externalErrors:d,onUnwatch:S,$isArray:$,initialState:D,shortcuts:F}){let O=vue.effectScope(),a,E=[],C,M,u,i,c=()=>{};function j(){let v=r.value,A=R.checkRuleDeclEntry(n,v);I.value=Object.fromEntries(Object.entries(v).filter(([h])=>h.startsWith("$"))),P(),m.value=Object.fromEntries(Object.entries(r.value).filter(([h])=>!h.startsWith("$")).map(([h,p])=>{if(p){let N=vue.toRef(()=>p);return [h,ct({fieldProperties:{$dirty:a.$dirty,$error:a.$error,$invalid:a.$invalid,$pending:a.$pending,$valid:a.$valid},modifiers:{$autoDirty:a.$autoDirty,$rewardEarly:a.$rewardEarly},customMessages:t,rule:N,ruleKey:h,state:e,path:n,storage:R,$debounce:I.value.$debounce})]}return []}).filter(h=>!!h.length)),a.processShortcuts(),k(),A?.valid!=null&&(a.$dirty.value=R.getDirtyState(n),a.$dirty.value&&c()),R.addRuleDeclEntry(n,v);}function k(){c=a.$debounce.value?ge(W,a.$debounce.value??a.$haveAnyAsyncRule?100:0):W;}function _(){m.value&&Object.entries(m.value).forEach(([v,A])=>{A.$unwatch();}),u(),a.$dirty.value&&R.setDirtyEntry(n,a.$dirty.value),C?.(),M?.(),O.stop(),O=vue.effectScope(),E.forEach(v=>v.stop()),E=[],S?.(),i?.();}function P(){m.value&&Object.entries(m.value).forEach(([v,A])=>{A.$watch();}),a=O.run(()=>{let v=vue.ref(!1),A=vue.ref(!1),h=vue.computed(()=>v.value),p=vue.computed(()=>I.value.$debounce),N=vue.computed(()=>I.value.$lazy!=null?I.value.$lazy:vue.unref(y.lazy)),X=vue.computed(()=>Ue.value===!0?!1:I.value.$rewardEarly!=null?I.value.$rewardEarly:vue.unref(y.rewardEarly)),ye=vue.computed(()=>I.value.$clearExternalErrorsOnChange!=null?I.value.$clearExternalErrorsOnChange:vue.unref(y.clearExternalErrorsOnChange)),Ue=vue.computed(()=>I.value.$autoDirty!=null?I.value.$autoDirty:vue.unref(y.autoDirty)),Be=vue.computed(()=>Object.entries(m.value).some(([q,te])=>te.$validating)),Le=vue.computed({get:()=>e.value,set(q){C(),e.value=q,b();}}),xe=vue.computed(()=>$e.value&&!ve.value&&v.value),He=vue.computed(()=>xe.value?Ae({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value}}):[]),qe=vue.computed(()=>it({field:{$rules:m.value}})),ze=vue.computed(()=>Ae({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value},silent:!0})),Je=vue.computed(()=>!($e.value||ve.value)),ve=vue.computed(()=>A.value||!X.value?Object.entries(m.value).some(([q,te])=>te.$pending):!1),$e=vue.computed(()=>d?.value?.length?!0:z(m.value)?!1:!X.value||X.value&&A.value?Object.entries(m.value).some(([q,te])=>!te.$valid):!1),Ye=vue.computed(()=>l),De=vue.computed(()=>d?.value?.length||z(m.value)?!1:v.value&&!z(e.value)&&!Be.value?Object.values(m.value).every(q=>q.$valid&&q.$active):!1),St=vue.computed(()=>Object.entries(m.value).some(([q,te])=>te.$haveAsync));function ht(){F?.fields&&Object.entries(F.fields).forEach(([q,te])=>{let Xe=vue.effectScope();Qe[q]=Xe.run(()=>{let Ze=vue.ref();return vue.watchEffect(()=>{Ze.value=te(vue.reactive({$dirty:v,$externalErrors:d?.value??[],$value:e,$silentValue:Le,$rules:m,$error:xe,$pending:ve,$invalid:$e,$valid:De,$errors:He,$ready:Je,$silentErrors:ze,$anyDirty:h,$tooltips:qe,$name:Ye}));}),Ze}),E.push(Xe);});}let Qe={};return vue.watch(De,q=>{q&&(A.value=!1);}),{$error:xe,$pending:ve,$invalid:$e,$valid:De,$debounce:p,$lazy:N,$errors:He,$ready:Je,$silentErrors:ze,$rewardEarly:X,$autoDirty:Ue,$clearExternalErrorsOnChange:ye,$anyDirty:h,$name:Ye,$haveAnyAsyncRule:St,$shortcuts:Qe,$validating:Be,$tooltips:qe,$dirty:v,triggerPunishment:A,processShortcuts:ht,$silentValue:Le}}),b(),u=vue.watch(a.$dirty,()=>{R.setDirtyEntry(n,a.$dirty.value);}),M=vue.watch(a.$valid,v=>{a.$rewardEarly.value&&v&&(a.triggerPunishment.value=!1);}),i=vue.watch(a.$haveAnyAsyncRule,k);}function b(){C=vue.watch(e,()=>{a.$autoDirty.value&&(a.$dirty.value||(a.$dirty.value=!0)),r.value instanceof Function&&j(),(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&c(),a.$rewardEarly.value!==!0&&a.$clearExternalErrorsOnChange.value&&o();},{deep:$?!0:Se?1:!0});}function W(){Object.values(m.value).forEach(v=>{v.$validate();});}let m=vue.ref({}),I=vue.ref({});j();function V(){o(),a.$dirty.value=!1,R.setDirtyEntry(n,!1),Object.entries(m.value).forEach(([v,A])=>{A.$reset();}),!a.$lazy.value&&a.$autoDirty.value&&Object.values(m.value).forEach(v=>v.$validate());}function Q(v=!0,A=!1){a.$dirty.value||(a.$dirty.value=!0),A&&v?(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&c():v&&c();}async function K(){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 z(m.value)?{result:!0,data:v}:{result:(await Promise.allSettled(Object.entries(m.value).map(([p,N])=>N.$validate()))).every(p=>p.status==="fulfilled"?p.value===!0:!1),data:v}}catch{return {result:!1,data:e.value}}}function x(){_(),e.value=H(D),V();}function w(v=!0){return a.$dirty.value?e.value:v?{_null:!0}:null}function o(){d?.value?.length&&(d.value=[]);}!a.$lazy.value&&!a.$dirty.value&&a.$autoDirty.value&&c();let{$shortcuts:s,$validating:g,$autoDirty:f,$rewardEarly:T,$clearExternalErrorsOnChange:U,$haveAnyAsyncRule:Y,$debounce:ee,$lazy:ae,...le}=a;return vue.reactive({...le,$externalErrors:d,$value:e,$rules:m,...s,$reset:V,$touch:Q,$validate:K,$unwatch:_,$watch:P,$resetAll:x,$extractDirtyFields:w,$clearExternalErrors:o})}function je({$id:e,path:r,index:t,options:n,storage:l,stateValue:R,customMessages:y,rules:d,externalErrors:S,initialState:$,shortcuts:D,fieldName:F}){let O=d.$key?d.$key:he(),a=`${r}.${String(O)}`;typeof R.value=="object"&&R.value!=null&&(R.value.$id?a=`${r}.${R.value.$id}`:Object.defineProperties(R.value,{$id:{value:O,enumerable:!1,configurable:!1,writable:!1}}));let E=me({state:R,rulesDef:vue.toRef(()=>d),customMessages:y,path:a,storage:l,options:n,externalErrors:vue.toRef(S?.value??[],t),initialState:$?.[t],shortcuts:D,fieldName:F});if(E){let C=R.value?.$id;E.$id=C??String(O),l.addArrayStatus(e,E.$id,E);}return E}function dt({state:e,rulesDef:r,customMessages:t,path:n,storage:l,options:R,externalErrors:y,initialState:d,shortcuts:S,fieldName:$}){let D=vue.effectScope(),F,O=vue.effectScope(),a,E=[];if(!Array.isArray(e.value)&&!r.value.$each)return null;let C=vue.ref(),M=vue.ref(e.value),u,i=vue.ref({}),c=l.getCollectionsEntry(n);a=O.run(()=>({isPrimitiveArray:vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(s=>typeof s!="object"):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(s=>fe(s)):!1)})),j(),P();function j(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(C.value=he(),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&&(M.value=i.value.$value,Array.isArray(e.value)?c.value=e.value.map((o,s)=>{let{scope:g,unwrapped:f}=Oe(r.value.$each,vue.toRef(()=>o),s);g&&E.push(g);let T=je({$id:C.value,path:n,customMessages:t,rules:f??{},stateValue:vue.toRef(()=>o),index:s,options:R,storage:l,externalErrors:vue.toRef(y?.value??{},"$each"),initialState:d?.[s],shortcuts:S,fieldName:$});return T||null}).filter(o=>!!o):c.value=[],i.value=Te({state:e,rulesDef:r,customMessages:t,path:n,storage:l,options:R,externalErrors:vue.toRef(y?.value??{},"$self"),$isArray:!0,initialState:d,shortcuts:S,fieldName:$}));}function k(){if(Array.isArray(e.value)){let o=H(c.value);c.value=e.value.map((s,g)=>{let f=vue.toRef(()=>s);if(s.$id&&c.value.find(T=>T.$id===s.$id)){let T=l.getArrayStatus(C.value,s.$id);return T?(T.$value=f,T):null}else {let{scope:T,unwrapped:U}=Oe(r.value.$each,f,g);if(T&&E.push(T),U){let Y=je({$id:C.value,path:n,customMessages:t,rules:U,stateValue:f,index:g,options:R,storage:l,externalErrors:vue.toRef(y?.value??{},"$each"),initialState:d?.[g],shortcuts:S,fieldName:$});return Y||null}}}).filter(s=>!!s),o.filter(s=>!e.value.find(g=>s.$id===g.$id)).forEach((s,g)=>{l.deleteArrayStatus(C.value,g.toString());});}else c.value=[];}function _(){u=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?j():k();},{deep:Se?1:!0,flush:"pre"});}function P(){_(),D=vue.effectScope(),F=D.run(()=>{let o=vue.computed({get:()=>e.value,set(p){u(),e.value=p,_();}}),s=vue.computed(()=>i.value.$dirty&&c.value.every(p=>p.$dirty)),g=vue.computed(()=>i.value.$anyDirty||c.value.some(p=>p.$anyDirty)),f=vue.computed(()=>i.value.$invalid||c.value.some(p=>p.$invalid)),T=vue.computed(()=>(z(i.value.$rules)?!0:i.value.$valid)&&c.value.every(p=>p.$valid)),U=vue.computed(()=>i.value.$error||c.value.some(p=>p.$error)),Y=vue.computed(()=>!(f.value||ee.value)),ee=vue.computed(()=>i.value.$pending||c.value.some(p=>p.$pending)),ae=vue.computed(()=>({$self:i.value.$errors,$each:c.value.map(p=>p.$errors)})),le=vue.computed(()=>({$self:i.value.$silentErrors,$each:c.value.map(p=>p.$silentErrors)})),v=vue.computed(()=>$);function A(){S?.collections&&Object.entries(S?.collections).forEach(([p,N])=>{let X=vue.effectScope();h[p]=X.run(()=>{let ye=vue.ref();return vue.watchEffect(()=>{ye.value=N(vue.reactive({$dirty:s,$error:U,$silentValue:o,$pending:ee,$invalid:f,$valid:T,$errors:ae,$ready:Y,$silentErrors:le,$anyDirty:g,$name:v,$each:c,$field:i,$value:e}));}),ye}),E.push(X);});}let h={};return A(),{$dirty:s,$anyDirty:g,$invalid:f,$valid:T,$error:U,$pending:ee,$errors:ae,$silentErrors:le,$ready:Y,$name:v,$shortcuts:h,$silentValue:o}}),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`),u());}function b(){u&&u(),i.value&&i.value.$unwatch(),c.value&&c.value.forEach(o=>{"$dirty"in o&&o.$unwatch();}),D.stop(),D=vue.effectScope(),O.stop(),O=vue.effectScope(!0),E.forEach(o=>o.stop()),E=[];}function W(o=!0,s=!1){i.value.$touch(o,s),c.value.forEach(g=>{g.$touch(o,s);});}function m(){i.value.$reset(),c.value.forEach(o=>{o.$reset();});}async function I(){let o=e.value;try{return {result:(await Promise.allSettled([i.value.$validate(),...c.value.map(f=>f.$validate())])).every(f=>f.status==="fulfilled"?f.value.result===!0:!1),data:o}}catch{return {result:!1,data:o}}}function V(){i.value.$clearExternalErrors(),c.value.forEach(o=>{o.$clearExternalErrors();});}function Q(o=!0){let s=c.value.map(g=>{if(st(g))return g.$extractDirtyFields(o)});return o&&s.every(g=>z(g))&&(s=[]),s}function K(){b(),e.value=H(d),m();}let{$shortcuts:x,...w}=F;return vue.reactive({$field:i,...w,...x,$each:c,$value:e,$validate:I,$unwatch:b,$watch:P,$touch:W,$reset:m,$resetAll:K,$extractDirtyFields:Q,$clearExternalErrors:V})}function Ge({rulesDef:e,state:r,path:t="",rootRules:n,externalErrors:l,validationGroups:R,initialState:y,fieldName:d,...S}){let $=vue.effectScope(),D,F=[],O=null,a=null,E=null;async function M(x=!0){let w=Object.entries(e.value),o=Object.fromEntries(w.filter(([f,T])=>!!T).map(([f,T])=>{if(T){let U=vue.toRef(r.value,f),Y=vue.toRef(()=>T),ee=vue.toRef(l?.value??{},f);return [f,me({state:U,rulesDef:Y,path:t?`${t}.${f}`:f,externalErrors:ee,initialState:y?.[f],fieldName:f,...S})]}return []})),s=Object.fromEntries(Object.entries(vue.unref(l)??{}).filter(([f,T])=>!(f in e.value)&&!!T).map(([f])=>{let T=vue.toRef(r.value,f);return [f,me({state:T,rulesDef:vue.computed(()=>({})),path:t?`${t}.${f}`:f,externalErrors:vue.toRef(l?.value??{},f),initialState:y?.[f],fieldName:f,...S})]})),g=Object.fromEntries(Object.entries(r.value).filter(([f])=>!(f in e.value)&&!(f in(s.value??{}))).map(([f])=>{let T=vue.toRef(r.value,f);return [f,me({state:T,rulesDef:vue.computed(()=>({})),path:t?`${t}.${f}`:f,externalErrors:vue.toRef(l?.value??{},f),initialState:y?.[f],fieldName:f,...S})]}));u.value={...o,...s,...g},x&&_();}let u=S.storage.getFieldsEntry(t);M();function i(){a?.(),Object.values(u.value).forEach(x=>{x.$reset();}),j();}function c(x=!0,w=!1){Object.values(u.value).forEach(o=>{o.$touch(x,w);});}function j(){l?.value&&(a=vue.watch(l,()=>{P(),M();},{deep:!0}));}function k(){E=vue.watch(r,()=>{P(),M(),c(!0,!0);},{flush:"sync"});}function _(){n&&(O?.(),O=vue.watch(n,()=>{P(),M();},{deep:!0,flush:"post"}),j()),k(),$=vue.effectScope(),D=$.run(()=>{let x=vue.computed({get:()=>r.value,set(h){P(),r.value=h,M();}}),w=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([h,p])=>p?.$dirty)),o=vue.computed(()=>Object.entries(u.value).some(([h,p])=>p?.$anyDirty)),s=vue.computed(()=>Object.entries(u.value).some(([h,p])=>p?.$invalid)),g=vue.computed(()=>Object.entries(u.value).every(([h,p])=>p?.$valid)),f=vue.computed(()=>o.value&&!U.value&&s.value),T=vue.computed(()=>vue.unref(S.options.autoDirty)?o.value&&!(s.value||U.value):!(s.value||U.value)),U=vue.computed(()=>Object.entries(u.value).some(([h,p])=>p?.$pending)),Y=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([h,p])=>[h,p?.$errors]))),ee=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([h,p])=>[h,p?.$silentErrors]))),ae=vue.computed(()=>d);function le(){S.shortcuts?.nested&&Object.entries(S.shortcuts.nested).forEach(([h,p])=>{let N=vue.effectScope();A[h]=N.run(()=>{let X=vue.ref();return vue.watchEffect(()=>{X.value=p(vue.reactive({$dirty:w,$value:r,$silentValue:x,$error:f,$pending:U,$invalid:s,$valid:g,$ready:T,$anyDirty:o,$name:ae,$silentErrors:ee,$errors:Y,$fields:u}));}),X}),F.push(N);});}let v=vue.computed({get:()=>R?Object.fromEntries(Object.entries(R?.(u.value)??{}).map(([h,p])=>p.length?[h,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(N=>[N,et(p,N)])),...Object.fromEntries(["$errors","$silentErrors"].map(N=>[N,tt(p,N)]))}]:[])):{},set(){}}),A={};return le(),{$dirty:w,$anyDirty:o,$invalid:s,$valid:g,$error:f,$pending:U,$errors:Y,$silentErrors:ee,$ready:T,$name:ae,$shortcuts:A,$groups:v,$silentValue:x}});}function P(){O?.(),a?.(),E?.(),F.forEach(x=>x.stop()),F=[],$.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 W(){P(),r.value=H({...y??{}}),i(),M();}function m(x){return x.filter(([w,o])=>Z(o)?!(o&&typeof o=="object"&&"_null"in o)&&!z(o):Array.isArray(o)?o.length:!0)}function I(x=!0){let w=Object.entries(u.value).map(([o,s])=>[o,s.$extractDirtyFields(x)]);return x&&(w=m(w)),Object.fromEntries(w)}async function V(){try{let x=r.value;return {result:(await Promise.allSettled(Object.values(u.value).map(s=>s.$validate()))).every(s=>s.status==="fulfilled"?s.value.result===!0:!1),data:x}}catch{return {result:!1,data:r.value}}}let{$shortcuts:Q,...K}=D;return vue.reactive({...K,...Q,$fields:u,$value:r,$resetAll:W,$reset:i,$touch:c,$validate:V,$unwatch:P,$watch:_,$clearExternalErrors:b,$extractDirtyFields:I})}function me({rulesDef:e,externalErrors:r,...t}){return ot(e,t.state)?dt({rulesDef:e,externalErrors:r,...t}):lt(t.state,e)&&at(t.state)?Ge({rulesDef:e,externalErrors:r,...t}):ut(e)?Te({rulesDef:e,externalErrors:r,...t}):null}function ce({initialState:e,options:r,scopeRules:t,state:n,customRules:l,shortcuts:R}){let y=we(),d=vue.ref();return d.value=Ge({rootRules:t,rulesDef:t,state:n,customMessages:l?.(),storage:y,options:r,externalErrors:r.externalErrors,validationGroups:r.validationGroups,initialState:e,shortcuts:R,fieldName:"root",path:""}),vue.getCurrentScope()&&vue.onScopeDispose(()=>{d.value?.$unwatch();}),vue.reactive({regle:d})}function Ne(e,r,t){let n={autoDirty:r?.autoDirty??!0,lazy:r?.lazy??!1,rewardEarly:r?.rewardEarly??!1,clearExternalErrorsOnChange:r?.clearExternalErrorsOnChange??!0};function l(R,y,d){let S=vue.isRef(y)?y:vue.computed(typeof y=="function"?y:()=>y),$={...n,...d},D=vue.isRef(R)?R:vue.ref(R),F={...H(D.value)};return {r$:ce({scopeRules:S,state:D,options:$,initialState:F,customRules:e,shortcuts:t}).regle}}return l}var $t=Ne();function ke(){function e(r,t){return t}return e}var We=ke();function gt({rules:e,modifiers:r,shortcuts:t}){let n=Ne(e,r,t),l=ke();return {useRegle:n,inferRules:l}}
|
|
2
|
-
exports.InternalRuleType=
|
|
1
|
+
'use strict';var vue=require('vue');function B(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var tt=Symbol("regle-rule");function xt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function q(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>q(n)))),r=="Map"&&(t=new Map([...e].map(n=>[q(n[0]),q(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,xt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=q(e[n]);}return t}function Z(e){return e instanceof Date||e instanceof File?!1:typeof e=="object"&&e!==null&&!Array.isArray(e)}var we=(r=>(r.Inline="__inline",r.Async="__async",r))(we||{});function rt(e,t){return e.some(r=>r[t])}function nt(e,t){return e.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[])}function L(e){try{return e.map(t=>vue.toValue(t))}catch{return []}}function at(e){return e.map(t=>t instanceof Function?vue.computed(t):vue.isRef(t)?t:vue.toRef(()=>t))}function lt(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(y=>y.trim()).filter(y=>y.length>0).length:0}function Oe(e,...t){let{validator:r,type:n}=e,a=n==="__async"||r.constructor.name==="AsyncFunction";return {...{validator(d,...h){return e.validator(d,...L(h.length?h:t))},message(d){return typeof e.message=="function"?e.message({...d,$params:L(d?.$params?.length?d.$params:t)}):e.message},active(d){return typeof e.active=="function"?e.active({...d,$params:L(d?.$params?.length?d.$params:t)}):e.active??!0},tooltip(d){return typeof e.tooltip=="function"?e.tooltip({...d,$params:L(d?.$params?.length?d.$params:t)}):e.tooltip??[]},exec(d){let h=e.validator(d,...L(t)),$;return h instanceof Promise?h.then(D=>($=D,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)):($=h,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:a,_params:at(t),_brand:tt}}function Ae(e){if(typeof e.validator=="function"){let r=Oe(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(lt(e.validator)>1){let a=function(...f){return Oe(e,...f)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.tooltip=r.tooltip,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._tooltip=r.tooltip,a._type=e.type,a._message_pacthed=!1,a._tooltip_pacthed=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function Fe(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),a=vue.shallowRef(new Map),f=vue.shallowRef(new Map);function y(u){let s=t.value.get(u);if(s)return s;{let c=vue.ref({});return t.value.set(u,c),c}}function d(u){let s=r.value.get(u);if(s)return s;{let c=vue.ref([]);return r.value.set(u,c),c}}function h(u,s,c){f.value.set(`${u}-${s}`,c);}function $(u,s){return f.value.get(`${u}-${s}`)}function D(u,s){u&&s!=null&&f.value.delete(`${u}-${s}`);}function j(u,s){n.value.set(u,s);}function A(u){return n.value.get(u)??!1}function l(u,s){e.value.set(u,s);}function E(u,s){let c=e.value.get(u);return c?C(s,c)?{valid:!0}:{valid:!1}:void 0}function C(u,s){let c=Object.keys(s),V=Object.keys(u);return V.length!==c.length||!V.every(G=>c.includes(G))?!1:V.every(G=>{let P=u[G],b=s[G];return !b||!P||typeof P=="function"||typeof b=="function"||typeof P=="number"||typeof P=="boolean"?!1:P._params?P._params?.every((k,m)=>{if(typeof b=="number"||typeof b=="boolean")return !0;{let I=L(b._params),N=L(P._params);return I?.[m]===N?.[m]}}):!0})}function _(u){let s=a.value.get(u);if(s)return s;{let c=vue.ref(!1),V=vue.ref(!0),W=vue.ref({}),G=vue.ref(!1);return a.value.set(u,{$pending:c,$valid:V,$metadata:W,$validating:G}),{$pending:c,$valid:V,$metadata:W,$validating:G}}}return vue.getCurrentScope()&&vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),f.value.clear();}),{addRuleDeclEntry:l,setDirtyEntry:j,checkRuleDeclEntry:E,getDirtyState:A,trySetRuleStatusRef:_,getFieldsEntry:y,getCollectionsEntry:d,getArrayStatus:$,addArrayStatus:h,deleteArrayStatus:D,arrayStatusStorage:f}}function ge(e){return e.value instanceof Date||e.value instanceof File?!1:Z(e.value)}function Me(e,t,r){let n=vue.effectScope(),a;return e instanceof Function?a=n.run(()=>e(t,r??0)):a=e,{scope:n,unwrapped:a}}function Se(e,t,r){let n,a=(...f)=>new Promise(y=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...f])).then(y);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a}function Mt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let f=Number(r[a]),y=Number(n[a]);if(f>y)return 1;if(y>f)return -1;if(!isNaN(f)&&isNaN(y))return 1;if(isNaN(f)&&!isNaN(y))return -1}return 0}var he=Mt(vue.version,"3.5.0")!==-1;function jt(){return Math.floor(Math.random()*Date.now()).toString()}function be(){return typeof window>"u"?jt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function ot(e,t){return ge(e)||Z(t.value)&&!B(t.value)&&!Object.entries(t.value).some(([r,n])=>Re(n)||typeof n=="function")}function ut(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function it(e){return !!e.value&&Z(e.value)}function Re(e){return Z(e)&&"_validator"in e}function pe(e){return typeof e.value!="function"}function st(e){return Z(e)&&"$fields"in e}function ct(e){return !!e&&"$rules"in e}function je({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function ft({field:e}){return Object.entries(e.$rules??{}).map(([t,r])=>r.$tooltip).filter(t=>!!t).reduce((t,r)=>typeof r=="string"?t?.concat([r]):t?.concat(r),[])}function Rt({fieldProperties:e,customMessages:t,rule:r,ruleKey:n,state:a,path:f,storage:y,$debounce:d,modifiers:h}){let $=vue.effectScope(),D={},j,A=vue.ref(!1),{$pending:l,$valid:E,$metadata:C,$validating:_}=y.trySetRuleStatusRef(`${f}.${n}`);function u(){$=vue.effectScope(),D=$.run(()=>{let b=vue.computed(()=>({$value:a.value,$error:e.$error.value,$dirty:e.$dirty.value,$pending:e.$pending.value,$valid:e.$valid.value,$invalid:e.$invalid.value,$rule:{$valid:E.value,$invalid:!E.value,$pending:l.value},$params:x.value,...C.value})),k=vue.computed(()=>pe(r)?typeof r.value.active=="function"?r.value.active(b.value):!!r.value.active:!0);function m(o){let i="",g=t?t[n]?.[o]:void 0;if(g&&(typeof g=="function"?i=g(b.value):i=g),pe(r)){let R=`_${o}_patched`;g&&!r.value[R]||(typeof r.value[o]=="function"?i=r.value[o](b.value):i=r.value[o]??"");}return i}let I=vue.computed(()=>{let o=m("message");return B(o)&&(o="This field is not valid"),o}),N=vue.computed(()=>m("tooltip")),Q=vue.computed(()=>pe(r)&&r.value.type?r.value.type:n),K=vue.computed(()=>pe(r)?r.value.validator:r.value),x=vue.computed(()=>typeof r.value=="function"?[]:L(r.value._params??[])),w=vue.computed(()=>`${f}.${Q.value}`);return {$active:k,$message:I,$type:Q,$validator:K,$params:x,$path:w,$tooltip:N}}),j=vue.watch(D?.$params,()=>{(h.$autoDirty.value||h.$rewardEarly.value&&e.$error.value)&&W();});}u();function s(){E.value=!0,e.$dirty.value&&(l.value=!0);}async function c(){let b=!1;try{let k=D.$validator.value,m=k(a.value,...D.$params.value),I=a.value;s();let N;if(m instanceof Promise?N=await m:N=m,a.value!==I)return !0;if(typeof N=="boolean")b=N;else {let{$valid:Q,...K}=N;b=Q,C.value=K;}}catch{b=!1;}finally{l.value=!1;}return b}let V=Se(c,d??200);async function W(){try{_.value=!0;let b=!1;if(Re(r.value)&&r.value._async)b=await V();else {let k=D.$validator.value,m=k(a.value,...D.$params.value);if(m instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(m!=null)if(typeof m=="boolean")b=m;else {let{$valid:I,...N}=m;b=I,C.value=N;}}return E.value=b,b}catch{return !1}finally{_.value=!1;}}function G(){E.value=!0,C.value={},l.value=!1,_.value=!1,u();}function P(){j(),$.stop(),$=vue.effectScope();}return vue.reactive({...D,$pending:l,$valid:E,$metadata:C,$haveAsync:A,$validating:_,$validate:W,$unwatch:P,$watch:u,$reset:G})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:f,options:y,externalErrors:d,onUnwatch:h,$isArray:$,initialState:D,shortcuts:j}){let A=vue.effectScope(),l,E=[],C,_,u,s,c=()=>{};function V(){let v=t.value,F=f.checkRuleDeclEntry(n,v);I.value=Object.fromEntries(Object.entries(v).filter(([S])=>S.startsWith("$"))),P(),m.value=Object.fromEntries(Object.entries(t.value).filter(([S])=>!S.startsWith("$")).map(([S,p])=>{if(p){let O=vue.toRef(()=>p);return [S,Rt({fieldProperties:{$dirty:l.$dirty,$error:l.$error,$invalid:l.$invalid,$pending:l.$pending,$valid:l.$valid},modifiers:{$autoDirty:l.$autoDirty,$rewardEarly:l.$rewardEarly},customMessages:r,rule:O,ruleKey:S,state:e,path:n,storage:f,$debounce:I.value.$debounce})]}return []}).filter(S=>!!S.length)),l.processShortcuts(),W(),F?.valid!=null&&(l.$dirty.value=f.getDirtyState(n),l.$dirty.value&&c()),f.addRuleDeclEntry(n,v);}function W(){c=l.$debounce.value?Se(k,l.$debounce.value??l.$haveAnyAsyncRule?100:0):k;}function G(){m.value&&Object.entries(m.value).forEach(([v,F])=>{F.$unwatch();}),u(),l.$dirty.value&&f.setDirtyEntry(n,l.$dirty.value),C?.(),_?.(),A.stop(),A=vue.effectScope(),E.forEach(v=>v.stop()),E=[],h?.(),s?.();}function P(){m.value&&Object.entries(m.value).forEach(([v,F])=>{F.$watch();}),l=A.run(()=>{let v=vue.ref(!1),F=vue.ref(!1),S=vue.computed(()=>v.value),p=vue.computed(()=>I.value.$debounce),O=vue.computed(()=>I.value.$lazy!=null?I.value.$lazy:vue.unref(y.lazy)),X=vue.computed(()=>Be.value===!0?!1:I.value.$rewardEarly!=null?I.value.$rewardEarly:vue.unref(y.rewardEarly)),ve=vue.computed(()=>I.value.$clearExternalErrorsOnChange!=null?I.value.$clearExternalErrorsOnChange:vue.unref(y.clearExternalErrorsOnChange)),Be=vue.computed(()=>I.value.$autoDirty!=null?I.value.$autoDirty:vue.unref(y.autoDirty)),Le=vue.computed(()=>Object.entries(m.value).some(([z,te])=>te.$validating)),He=vue.computed({get:()=>e.value,set(z){C(),e.value=z,b();}}),Ie=vue.computed(()=>fe.value&&!$e.value&&v.value),qe=vue.computed(()=>Ie.value?je({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value}}):[]),ze=vue.computed(()=>ft({field:{$rules:m.value}})),Je=vue.computed(()=>je({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value},silent:!0})),Ye=vue.computed(()=>!(fe.value||$e.value)),$e=vue.computed(()=>F.value||!X.value?Object.entries(m.value).some(([z,te])=>te.$pending):!1),fe=vue.computed(()=>d?.value?.length?!0:B(m.value)?!1:!X.value||X.value&&F.value?Object.entries(m.value).some(([z,te])=>!te.$valid):!1),Qe=vue.computed(()=>a),Pe=vue.computed(()=>!!B(m.value)),Xe=vue.computed(()=>d?.value?.length||Pe.value?!1:v.value&&!B(e.value)&&!Le.value?Object.values(m.value).every(z=>z.$valid&&z.$active):!1),Tt=vue.computed(()=>Object.entries(m.value).some(([z,te])=>te.$haveAsync));function Et(){j?.fields&&Object.entries(j.fields).forEach(([z,te])=>{let Ke=vue.effectScope();Ze[z]=Ke.run(()=>{let et=vue.ref();return vue.watchEffect(()=>{et.value=te(vue.reactive({$dirty:v,$externalErrors:d?.value??[],$value:e,$silentValue:He,$rules:m,$error:Ie,$pending:$e,$invalid:fe,$valid:Xe,$errors:qe,$ready:Ye,$silentErrors:Je,$anyDirty:S,$tooltips:ze,$name:Qe,$inactive:Pe}));}),et}),E.push(Ke);});}let Ze={};return vue.watch(fe,z=>{z||(F.value=!1);}),{$error:Ie,$pending:$e,$invalid:fe,$valid:Xe,$debounce:p,$lazy:O,$errors:qe,$ready:Ye,$silentErrors:Je,$rewardEarly:X,$autoDirty:Be,$clearExternalErrorsOnChange:ve,$anyDirty:S,$name:Qe,$haveAnyAsyncRule:Tt,$shortcuts:Ze,$validating:Le,$tooltips:ze,$dirty:v,triggerPunishment:F,processShortcuts:Et,$silentValue:He,$inactive:Pe}}),b(),u=vue.watch(l.$dirty,()=>{f.setDirtyEntry(n,l.$dirty.value);}),_=vue.watch(l.$valid,v=>{l.$rewardEarly.value&&v&&(l.triggerPunishment.value=!1);}),s=vue.watch(l.$haveAnyAsyncRule,W);}function b(){C=vue.watch(e,()=>{l.$autoDirty.value&&(l.$dirty.value||(l.$dirty.value=!0)),t.value instanceof Function&&V(),(l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&c(),l.$rewardEarly.value!==!0&&l.$clearExternalErrorsOnChange.value&&o();},{deep:$?!0:he?1:!0});}function k(){Object.values(m.value).forEach(v=>{v.$validate();});}let m=vue.ref({}),I=vue.ref({});V();function N(){o(),l.$dirty.value=!1,f.setDirtyEntry(n,!1),Object.entries(m.value).forEach(([v,F])=>{F.$reset();}),!l.$lazy.value&&l.$autoDirty.value&&Object.values(m.value).forEach(v=>v.$validate());}function Q(v=!0,F=!1){l.$dirty.value||(l.$dirty.value=!0),F&&v?(l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&c():v&&c();}async function K(){try{let v=e.value;if(l.triggerPunishment.value=!0,!l.$dirty.value)l.$dirty.value=!0;else if(l.$autoDirty.value&&l.$dirty.value&&!l.$pending.value)return {result:!l.$error.value,data:v};return B(m.value)?{result:!0,data:v}:{result:(await Promise.allSettled(Object.entries(m.value).map(([p,O])=>O.$validate()))).every(p=>p.status==="fulfilled"?p.value===!0:!1),data:v}}catch{return {result:!1,data:e.value}}}function x(){G(),e.value=q(D),N();}function w(v=!0){return l.$dirty.value?e.value:v?{_null:!0}:null}function o(){d?.value?.length&&(d.value=[]);}!l.$lazy.value&&!l.$dirty.value&&l.$autoDirty.value&&c();let{$shortcuts:i,$validating:g,$autoDirty:R,$rewardEarly:T,$clearExternalErrorsOnChange:U,$haveAnyAsyncRule:Y,$debounce:ee,$lazy:ae,...le}=l;return vue.reactive({...le,$externalErrors:d,$value:e,$rules:m,...i,$reset:N,$touch:Q,$validate:K,$unwatch:G,$watch:P,$resetAll:x,$extractDirtyFields:w,$clearExternalErrors:o})}function Ge({$id:e,path:t,index:r,options:n,storage:a,stateValue:f,customMessages:y,rules:d,externalErrors:h,initialState:$,shortcuts:D,fieldName:j}){let A=d.$key?d.$key:be(),l=`${t}.${String(A)}`;typeof f.value=="object"&&f.value!=null&&(f.value.$id?l=`${t}.${f.value.$id}`:Object.defineProperties(f.value,{$id:{value:A,enumerable:!1,configurable:!1,writable:!1}}));let E=ye({state:f,rulesDef:vue.toRef(()=>d),customMessages:y,path:l,storage:a,options:n,externalErrors:vue.toRef(h?.value??[],r),initialState:$?.[r],shortcuts:D,fieldName:j});if(E){let C=f.value?.$id;E.$id=C??String(A),a.addArrayStatus(e,E.$id,E);}return E}function yt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:f,externalErrors:y,initialState:d,shortcuts:h,fieldName:$}){let D=vue.effectScope(),j,A=vue.effectScope(),l,E=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let C=vue.ref(),_=vue.ref(e.value),u,s=vue.ref({}),c=a.getCollectionsEntry(n);l=A.run(()=>({isPrimitiveArray:vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(i=>typeof i!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(i=>Re(i)):!1)})),V(),P();function V(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(C.value=be(),Object.defineProperties(e.value,{$id:{value:C.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(C.value=e.value.$id)),!l.isPrimitiveArray.value&&(_.value=s.value.$value,Array.isArray(e.value)?c.value=e.value.map((o,i)=>{let{scope:g,unwrapped:R}=Me(t.value.$each,vue.toRef(()=>o),i);g&&E.push(g);let T=Ge({$id:C.value,path:n,customMessages:r,rules:R??{},stateValue:vue.toRef(()=>o),index:i,options:f,storage:a,externalErrors:vue.toRef(y?.value??{},"$each"),initialState:d?.[i],shortcuts:h,fieldName:$});return T||null}).filter(o=>!!o):c.value=[],s.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:f,externalErrors:vue.toRef(y?.value??{},"$self"),$isArray:!0,initialState:d,shortcuts:h,fieldName:$}));}function W(){if(Array.isArray(e.value)){let o=q(c.value);c.value=e.value.map((i,g)=>{let R=vue.toRef(()=>i);if(i.$id&&c.value.find(T=>T.$id===i.$id)){let T=a.getArrayStatus(C.value,i.$id);return T?(T.$value=R,T):null}else {let{scope:T,unwrapped:U}=Me(t.value.$each,R,g);if(T&&E.push(T),U){let Y=Ge({$id:C.value,path:n,customMessages:r,rules:U,stateValue:R,index:g,options:f,storage:a,externalErrors:vue.toRef(y?.value??{},"$each"),initialState:d?.[g],shortcuts:h,fieldName:$});return Y||null}}}).filter(i=>!!i),o.filter(i=>!e.value.find(g=>i.$id===g.$id)).forEach((i,g)=>{a.deleteArrayStatus(C.value,g.toString());});}else c.value=[];}function G(){u=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?V():W();},{deep:he?1:!0,flush:"pre"});}function P(){G(),D=vue.effectScope(),j=D.run(()=>{let o=vue.computed({get:()=>e.value,set(p){u(),e.value=p,G();}}),i=vue.computed(()=>s.value.$dirty&&c.value.every(p=>p.$dirty)),g=vue.computed(()=>s.value.$anyDirty||c.value.some(p=>p.$anyDirty)),R=vue.computed(()=>s.value.$invalid||c.value.some(p=>p.$invalid)),T=vue.computed(()=>(B(s.value.$rules)?!0:s.value.$valid)&&c.value.every(p=>p.$valid)),U=vue.computed(()=>s.value.$error||c.value.some(p=>p.$error)),Y=vue.computed(()=>!(R.value||ee.value)),ee=vue.computed(()=>s.value.$pending||c.value.some(p=>p.$pending)),ae=vue.computed(()=>({$self:s.value.$errors,$each:c.value.map(p=>p.$errors)})),le=vue.computed(()=>({$self:s.value.$silentErrors,$each:c.value.map(p=>p.$silentErrors)})),v=vue.computed(()=>$);function F(){h?.collections&&Object.entries(h?.collections).forEach(([p,O])=>{let X=vue.effectScope();S[p]=X.run(()=>{let ve=vue.ref();return vue.watchEffect(()=>{ve.value=O(vue.reactive({$dirty:i,$error:U,$silentValue:o,$pending:ee,$invalid:R,$valid:T,$errors:ae,$ready:Y,$silentErrors:le,$anyDirty:g,$name:v,$each:c,$field:s,$value:e}));}),ve}),E.push(X);});}let S={};return F(),{$dirty:i,$anyDirty:g,$invalid:R,$valid:T,$error:U,$pending:ee,$errors:ae,$silentErrors:le,$ready:Y,$name:v,$shortcuts:S,$silentValue:o}}),l.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),u());}function b(){u&&u(),s.value&&s.value.$unwatch(),c.value&&c.value.forEach(o=>{"$dirty"in o&&o.$unwatch();}),D.stop(),D=vue.effectScope(),A.stop(),A=vue.effectScope(!0),E.forEach(o=>o.stop()),E=[];}function k(o=!0,i=!1){s.value.$touch(o,i),c.value.forEach(g=>{g.$touch(o,i);});}function m(){s.value.$reset(),c.value.forEach(o=>{o.$reset();});}async function I(){let o=e.value;try{return {result:(await Promise.allSettled([s.value.$validate(),...c.value.map(R=>R.$validate())])).every(R=>R.status==="fulfilled"?R.value.result===!0:!1),data:o}}catch{return {result:!1,data:o}}}function N(){s.value.$clearExternalErrors(),c.value.forEach(o=>{o.$clearExternalErrors();});}function Q(o=!0){let i=c.value.map(g=>{if(st(g))return g.$extractDirtyFields(o)});return o&&i.every(g=>B(g))&&(i=[]),i}function K(){b(),e.value=q(d),m();}let{$shortcuts:x,...w}=j;return vue.reactive({$field:s,...w,...x,$each:c,$value:e,$validate:I,$unwatch:b,$watch:P,$touch:k,$reset:m,$resetAll:K,$extractDirtyFields:Q,$clearExternalErrors:N})}function Ce({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:a,validationGroups:f,initialState:y,fieldName:d,...h}){let $=vue.effectScope(),D,j=[],A=null,l=null,E=null;async function _(x=!0){let w=Object.entries(e.value),o=Object.fromEntries(w.filter(([R,T])=>!!T).map(([R,T])=>{if(T){let U=vue.toRef(t.value,R),Y=vue.toRef(()=>T),ee=vue.toRef(a?.value??{},R);return [R,ye({state:U,rulesDef:Y,path:r?`${r}.${R}`:R,externalErrors:ee,initialState:y?.[R],fieldName:R,...h})]}return []})),i=Object.fromEntries(Object.entries(vue.unref(a)??{}).filter(([R,T])=>!(R in e.value)&&!!T).map(([R])=>{let T=vue.toRef(t.value,R);return [R,ye({state:T,rulesDef:vue.computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:vue.toRef(a?.value??{},R),initialState:y?.[R],fieldName:R,...h})]})),g=Object.fromEntries(Object.entries(t.value).filter(([R])=>!(R in e.value)&&!(R in(i.value??{}))).map(([R])=>{let T=vue.toRef(t.value,R);return [R,ye({state:T,rulesDef:vue.computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:vue.toRef(a?.value??{},R),initialState:y?.[R],fieldName:R,...h})]}));u.value={...o,...i,...g},x&&G();}let u=h.storage.getFieldsEntry(r);_();function s(){l?.(),Object.values(u.value).forEach(x=>{x.$reset();}),V();}function c(x=!0,w=!1){Object.values(u.value).forEach(o=>{o.$touch(x,w);});}function V(){a?.value&&(l=vue.watch(a,()=>{P(),_();},{deep:!0}));}function W(){E=vue.watch(t,()=>{P(),_(),c(!0,!0);},{flush:"sync"});}function G(){n&&(A?.(),A=vue.watch(n,()=>{P(),_();},{deep:!0,flush:"post"}),V()),W(),$=vue.effectScope(),D=$.run(()=>{let x=vue.computed({get:()=>t.value,set(S){P(),t.value=S,_();}}),w=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([S,p])=>p?.$dirty)),o=vue.computed(()=>Object.entries(u.value).some(([S,p])=>p?.$anyDirty)),i=vue.computed(()=>Object.entries(u.value).some(([S,p])=>p?.$invalid)),g=vue.computed(()=>{let S=Object.entries(u.value).filter(([p,O])=>ct(O)?!O.$inactive:!0);return S.length?S.every(([p,O])=>O?.$valid):!1}),R=vue.computed(()=>o.value&&!U.value&&i.value),T=vue.computed(()=>vue.unref(h.options.autoDirty)?o.value&&!(i.value||U.value):!(i.value||U.value)),U=vue.computed(()=>Object.entries(u.value).some(([S,p])=>p?.$pending)),Y=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([S,p])=>[S,p?.$errors]))),ee=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([S,p])=>[S,p?.$silentErrors]))),ae=vue.computed(()=>d);function le(){h.shortcuts?.nested&&Object.entries(h.shortcuts.nested).forEach(([S,p])=>{let O=vue.effectScope();F[S]=O.run(()=>{let X=vue.ref();return vue.watchEffect(()=>{X.value=p(vue.reactive({$dirty:w,$value:t,$silentValue:x,$error:R,$pending:U,$invalid:i,$valid:g,$ready:T,$anyDirty:o,$name:ae,$silentErrors:ee,$errors:Y,$fields:u}));}),X}),j.push(O);});}let v=vue.computed({get:()=>f?Object.fromEntries(Object.entries(f?.(u.value)??{}).map(([S,p])=>p.length?[S,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(O=>[O,rt(p,O)])),...Object.fromEntries(["$errors","$silentErrors"].map(O=>[O,nt(p,O)]))}]:[])):{},set(){}}),F={};return le(),{$dirty:w,$anyDirty:o,$invalid:i,$valid:g,$error:R,$pending:U,$errors:Y,$silentErrors:ee,$ready:T,$name:ae,$shortcuts:F,$groups:v,$silentValue:x}});}function P(){A?.(),l?.(),E?.(),j.forEach(x=>x.stop()),j=[],$.stop(),u.value&&Object.entries(u.value).forEach(([x,w])=>{w.$unwatch();});}function b(){Object.entries(u.value).forEach(([x,w])=>{w.$clearExternalErrors();});}async function k(){P(),t.value=q({...y??{}}),s(),_();}function m(x){return x.filter(([w,o])=>Z(o)?!(o&&typeof o=="object"&&"_null"in o)&&!B(o):Array.isArray(o)?o.length:!0)}function I(x=!0){let w=Object.entries(u.value).map(([o,i])=>[o,i.$extractDirtyFields(x)]);return x&&(w=m(w)),Object.fromEntries(w)}async function N(){try{let x=t.value;return {result:(await Promise.allSettled(Object.values(u.value).map(i=>i.$validate()))).every(i=>i.status==="fulfilled"?i.value.result===!0:!1),data:x}}catch{return {result:!1,data:t.value}}}let{$shortcuts:Q,...K}=D;return vue.reactive({...K,...Q,$fields:u,$value:t,$resetAll:k,$reset:s,$touch:c,$validate:N,$unwatch:P,$watch:G,$clearExternalErrors:b,$extractDirtyFields:I})}function ye({rulesDef:e,externalErrors:t,...r}){if(ut(e,r.state))return yt({rulesDef:e,externalErrors:t,...r});if(ot(r.state,e)){if(ge(r.state))return Ce({rulesDef:e,externalErrors:t,...r});{let n=vue.ref({}),a=vue.watch(n,d=>{a(),r.state.value=d;},{deep:!0}),{state:f,...y}=r;return Ce({rulesDef:e,externalErrors:t,...y,state:n})}}else if(it(e))return Ee({rulesDef:e,externalErrors:t,...r})}function ce({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:f}){let y=Fe(),d=vue.ref();return d.value=Ce({rootRules:r,rulesDef:r,state:n,customMessages:a?.(),storage:y,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:f,fieldName:"root",path:""}),vue.getCurrentScope()&&vue.onScopeDispose(()=>{d.value?.$unwatch();}),vue.reactive({regle:d})}function We(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange??!0};function a(f,y,d){let h=vue.isRef(y)?y:vue.computed(typeof y=="function"?y:()=>y),$={...n,...d},D=vue.isRef(f)?f:vue.ref(f),j={...q(D.value)};return {r$:ce({scopeRules:h,state:D,options:$,initialState:j,customRules:e,shortcuts:r}).regle}}return a}var ht=We();function ke(){function e(t,r){return r}return e}var Ue=ke();function bt({rules:e,modifiers:t,shortcuts:r}){let n=We(e,t,r),a=ke();return {useRegle:n,inferRules:a}}
|
|
2
|
+
exports.InternalRuleType=we;exports.createRule=Ae;exports.defineRegleConfig=bt;exports.inferRules=Ue;exports.unwrapRuleParameters=L;exports.useRegle=ht;exports.useRootStorage=ce;
|
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 z(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 Ke=Symbol("regle-rule");function bt(e){if(typeof e.source.flags=="string")return e.source.flags;{let r=[];return e.global&&r.push("g"),e.ignoreCase&&r.push("i"),e.multiline&&r.push("m"),e.sticky&&r.push("y"),e.unicode&&r.push("u"),r.join("")}}function H(e){let r=e,t={}.toString.call(e).slice(8,-1);if(t=="Set"&&(r=new Set([...e].map(n=>H(n)))),t=="Map"&&(r=new Map([...e].map(n=>[H(n[0]),H(n[1])]))),t=="Date"&&(r=new Date(e.getTime())),t=="RegExp"&&(r=RegExp(e.source,bt(e))),t=="Array"||t=="Object"){r=Array.isArray(e)?[]:{};for(let n in e)r[n]=H(e[n]);}return r}var Ce=(t=>(t.Inline="__inline",t.Async="__async",t))(Ce||{});function et(e,r){return e.some(t=>t[r])}function tt(e,r){return e.reduce((t,n)=>{let l=n[r]||[];return t.concat(l)},[])}function B(e){try{return e.map(r=>toValue(r))}catch{return []}}function rt(e){return e.map(r=>r instanceof Function?computed(r):isRef(r)?r:toRef(()=>r))}function nt(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 Ie(e,...r){let{validator:t,type:n}=e,l=n==="__async"||t.constructor.name==="AsyncFunction";return {...{validator(d,...S){return e.validator(d,...B(S.length?S:r))},message(d){return typeof e.message=="function"?e.message({...d,$params:B(d?.$params?.length?d.$params:r)}):e.message},active(d){return typeof e.active=="function"?e.active({...d,$params:B(d?.$params?.length?d.$params:r)}):e.active??!0},tooltip(d){return typeof e.tooltip=="function"?e.tooltip({...d,$params:B(d?.$params?.length?d.$params:r)}):e.tooltip??[]},exec(d){let S=e.validator(d,...B(r)),$;return S instanceof Promise?S.then(D=>($=D,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)):($=S,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:rt(r),_brand:Ke}}function Pe(e){if(typeof e.validator=="function"){let t=Ie(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(nt(e.validator)>1){let l=function(...R){return Ie(e,...R)};return l.validator=t.validator,l.message=t.message,l.active=t.active,l.tooltip=t.tooltip,l.type=t.type,l.exec=t.exec,l._validator=t.validator,l._message=t.message,l._active=t.active,l._tooltip=t.tooltip,l._type=e.type,l._message_pacthed=!1,l._tooltip_pacthed=!1,l._async=n,l}else return t}throw new Error("Validator must be a function")}function we(){let e=shallowRef(new Map),r=shallowRef(new Map),t=shallowRef(new Map),n=shallowRef(new Map),l=shallowRef(new Map),R=shallowRef(new Map);function y(u){let i=r.value.get(u);if(i)return i;{let c=ref({});return r.value.set(u,c),c}}function d(u){let i=t.value.get(u);if(i)return i;{let c=ref([]);return t.value.set(u,c),c}}function S(u,i,c){R.value.set(`${u}-${i}`,c);}function $(u,i){return R.value.get(`${u}-${i}`)}function D(u,i){u&&i!=null&&R.value.delete(`${u}-${i}`);}function F(u,i){n.value.set(u,i);}function O(u){return n.value.get(u)??!1}function a(u,i){e.value.set(u,i);}function E(u,i){let c=e.value.get(u);return c?C(i,c)?{valid:!0}:{valid:!1}:void 0}function C(u,i){let c=Object.keys(i),j=Object.keys(u);return j.length!==c.length||!j.every(_=>c.includes(_))?!1:j.every(_=>{let P=u[_],b=i[_];return !b||!P||typeof P=="function"||typeof b=="function"||typeof P=="number"||typeof P=="boolean"?!1:P._params?P._params?.every((W,m)=>{if(typeof b=="number"||typeof b=="boolean")return !0;{let I=B(b._params),V=B(P._params);return I?.[m]===V?.[m]}}):!0})}function M(u){let i=l.value.get(u);if(i)return i;{let c=ref(!1),j=ref(!0),k=ref({}),_=ref(!1);return l.value.set(u,{$pending:c,$valid:j,$metadata:k,$validating:_}),{$pending:c,$valid:j,$metadata:k,$validating:_}}}return getCurrentScope()&&onScopeDispose(()=>{e.value.clear(),r.value.clear(),t.value.clear(),n.value.clear(),l.value.clear(),R.value.clear();}),{addRuleDeclEntry:a,setDirtyEntry:F,checkRuleDeclEntry:E,getDirtyState:O,trySetRuleStatusRef:M,getFieldsEntry:y,getCollectionsEntry:d,getArrayStatus:$,addArrayStatus:S,deleteArrayStatus:D,arrayStatusStorage:R}}function Z(e){return e instanceof Date||e instanceof File?!1:typeof e=="object"&&e!==null&&!Array.isArray(e)}function at(e){return e.value instanceof Date||e.value instanceof File?!1:Z(e.value)}function Oe(e,r,t){let n=effectScope(),l;return e instanceof Function?l=n.run(()=>e(r,t??0)):l=e,{scope:n,unwrapped:l}}function ge(e,r,t){let n,l=(...R)=>new Promise(y=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...R])).then(y);},r);});return l.cancel=()=>{clearTimeout(n),n=void 0;},l}function Ot(e,r){let t=String(e).split("."),n=String(r).split(".");for(let l=0;l<Math.min(t.length,n.length);l++){let R=Number(t[l]),y=Number(n[l]);if(R>y)return 1;if(y>R)return -1;if(!isNaN(R)&&isNaN(y))return 1;if(isNaN(R)&&!isNaN(y))return -1}return 0}var Se=Ot(version,"3.5.0")!==-1;function At(){return Math.floor(Math.random()*Date.now()).toString()}function he(){return typeof window>"u"?At():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function lt(e,r){return Z(e.value)&&Z(r.value)&&!Object.entries(r.value).some(t=>fe(t))}function ot(e,r){return !!e.value&&"$each"in e.value||Array.isArray(r.value)}function ut(e){return !!e.value&&Z(e.value)}function fe(e){return Z(e)&&"_validator"in e}function Re(e){return typeof e.value!="function"}function st(e){return Z(e)&&"$fields"in e}function Ae({field:e,silent:r=!1}){return Object.entries(e.$rules??{}).map(([t,n])=>r||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(t=>!!t).reduce((t,n)=>typeof n=="string"?t?.concat([n]):t?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function it({field:e}){return Object.entries(e.$rules??{}).map(([r,t])=>t.$tooltip).filter(r=>!!r).reduce((r,t)=>typeof t=="string"?r?.concat([t]):r?.concat(t),[])}function ct({fieldProperties:e,customMessages:r,rule:t,ruleKey:n,state:l,path:R,storage:y,$debounce:d,modifiers:S}){let $=effectScope(),D={},F,O=ref(!1),{$pending:a,$valid:E,$metadata:C,$validating:M}=y.trySetRuleStatusRef(`${R}.${n}`);function u(){$=effectScope(),D=$.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:E.value,$invalid:!E.value,$pending:a.value},$params:x.value,...C.value})),W=computed(()=>Re(t)?typeof t.value.active=="function"?t.value.active(b.value):!!t.value.active:!0);function m(o){let s="",g=r?r[n]?.[o]:void 0;if(g&&(typeof g=="function"?s=g(b.value):s=g),Re(t)){let f=`_${o}_patched`;g&&!t.value[f]||(typeof t.value[o]=="function"?s=t.value[o](b.value):s=t.value[o]??"");}return s}let I=computed(()=>{let o=m("message");return z(o)&&(o="This field is not valid"),o}),V=computed(()=>m("tooltip")),Q=computed(()=>Re(t)&&t.value.type?t.value.type:n),K=computed(()=>Re(t)?t.value.validator:t.value),x=computed(()=>typeof t.value=="function"?[]:B(t.value._params??[])),w=computed(()=>`${R}.${Q.value}`);return {$active:W,$message:I,$type:Q,$validator:K,$params:x,$path:w,$tooltip:V}}),F=watch(D?.$params,()=>{(S.$autoDirty.value||S.$rewardEarly.value&&e.$error.value)&&k();});}u();function i(){E.value=!0,e.$dirty.value&&(a.value=!0);}async function c(){let b=!1;try{let W=D.$validator.value,m=W(l.value,...D.$params.value),I=l.value;i();let V;if(m instanceof Promise?V=await m:V=m,l.value!==I)return !0;if(typeof V=="boolean")b=V;else {let{$valid:Q,...K}=V;b=Q,C.value=K;}}catch{b=!1;}finally{a.value=!1;}return b}let j=ge(c,d??200);async function k(){try{M.value=!0;let b=!1;if(fe(t.value)&&t.value._async)b=await j();else {let W=D.$validator.value,m=W(l.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,...V}=m;b=I,C.value=V;}}return E.value=b,b}catch{return !1}finally{M.value=!1;}}function _(){E.value=!0,C.value={},a.value=!1,M.value=!1,u();}function P(){F(),$.stop(),$=effectScope();}return reactive({...D,$pending:a,$valid:E,$metadata:C,$haveAsync:O,$validating:M,$validate:k,$unwatch:P,$watch:u,$reset:_})}function Te({state:e,rulesDef:r,customMessages:t,path:n,fieldName:l,storage:R,options:y,externalErrors:d,onUnwatch:S,$isArray:$,initialState:D,shortcuts:F}){let O=effectScope(),a,E=[],C,M,u,i,c=()=>{};function j(){let v=r.value,A=R.checkRuleDeclEntry(n,v);I.value=Object.fromEntries(Object.entries(v).filter(([h])=>h.startsWith("$"))),P(),m.value=Object.fromEntries(Object.entries(r.value).filter(([h])=>!h.startsWith("$")).map(([h,p])=>{if(p){let N=toRef(()=>p);return [h,ct({fieldProperties:{$dirty:a.$dirty,$error:a.$error,$invalid:a.$invalid,$pending:a.$pending,$valid:a.$valid},modifiers:{$autoDirty:a.$autoDirty,$rewardEarly:a.$rewardEarly},customMessages:t,rule:N,ruleKey:h,state:e,path:n,storage:R,$debounce:I.value.$debounce})]}return []}).filter(h=>!!h.length)),a.processShortcuts(),k(),A?.valid!=null&&(a.$dirty.value=R.getDirtyState(n),a.$dirty.value&&c()),R.addRuleDeclEntry(n,v);}function k(){c=a.$debounce.value?ge(W,a.$debounce.value??a.$haveAnyAsyncRule?100:0):W;}function _(){m.value&&Object.entries(m.value).forEach(([v,A])=>{A.$unwatch();}),u(),a.$dirty.value&&R.setDirtyEntry(n,a.$dirty.value),C?.(),M?.(),O.stop(),O=effectScope(),E.forEach(v=>v.stop()),E=[],S?.(),i?.();}function P(){m.value&&Object.entries(m.value).forEach(([v,A])=>{A.$watch();}),a=O.run(()=>{let v=ref(!1),A=ref(!1),h=computed(()=>v.value),p=computed(()=>I.value.$debounce),N=computed(()=>I.value.$lazy!=null?I.value.$lazy:unref(y.lazy)),X=computed(()=>Ue.value===!0?!1:I.value.$rewardEarly!=null?I.value.$rewardEarly:unref(y.rewardEarly)),ye=computed(()=>I.value.$clearExternalErrorsOnChange!=null?I.value.$clearExternalErrorsOnChange:unref(y.clearExternalErrorsOnChange)),Ue=computed(()=>I.value.$autoDirty!=null?I.value.$autoDirty:unref(y.autoDirty)),Be=computed(()=>Object.entries(m.value).some(([q,te])=>te.$validating)),Le=computed({get:()=>e.value,set(q){C(),e.value=q,b();}}),xe=computed(()=>$e.value&&!ve.value&&v.value),He=computed(()=>xe.value?Ae({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value}}):[]),qe=computed(()=>it({field:{$rules:m.value}})),ze=computed(()=>Ae({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value},silent:!0})),Je=computed(()=>!($e.value||ve.value)),ve=computed(()=>A.value||!X.value?Object.entries(m.value).some(([q,te])=>te.$pending):!1),$e=computed(()=>d?.value?.length?!0:z(m.value)?!1:!X.value||X.value&&A.value?Object.entries(m.value).some(([q,te])=>!te.$valid):!1),Ye=computed(()=>l),De=computed(()=>d?.value?.length||z(m.value)?!1:v.value&&!z(e.value)&&!Be.value?Object.values(m.value).every(q=>q.$valid&&q.$active):!1),St=computed(()=>Object.entries(m.value).some(([q,te])=>te.$haveAsync));function ht(){F?.fields&&Object.entries(F.fields).forEach(([q,te])=>{let Xe=effectScope();Qe[q]=Xe.run(()=>{let Ze=ref();return watchEffect(()=>{Ze.value=te(reactive({$dirty:v,$externalErrors:d?.value??[],$value:e,$silentValue:Le,$rules:m,$error:xe,$pending:ve,$invalid:$e,$valid:De,$errors:He,$ready:Je,$silentErrors:ze,$anyDirty:h,$tooltips:qe,$name:Ye}));}),Ze}),E.push(Xe);});}let Qe={};return watch(De,q=>{q&&(A.value=!1);}),{$error:xe,$pending:ve,$invalid:$e,$valid:De,$debounce:p,$lazy:N,$errors:He,$ready:Je,$silentErrors:ze,$rewardEarly:X,$autoDirty:Ue,$clearExternalErrorsOnChange:ye,$anyDirty:h,$name:Ye,$haveAnyAsyncRule:St,$shortcuts:Qe,$validating:Be,$tooltips:qe,$dirty:v,triggerPunishment:A,processShortcuts:ht,$silentValue:Le}}),b(),u=watch(a.$dirty,()=>{R.setDirtyEntry(n,a.$dirty.value);}),M=watch(a.$valid,v=>{a.$rewardEarly.value&&v&&(a.triggerPunishment.value=!1);}),i=watch(a.$haveAnyAsyncRule,k);}function b(){C=watch(e,()=>{a.$autoDirty.value&&(a.$dirty.value||(a.$dirty.value=!0)),r.value instanceof Function&&j(),(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&c(),a.$rewardEarly.value!==!0&&a.$clearExternalErrorsOnChange.value&&o();},{deep:$?!0:Se?1:!0});}function W(){Object.values(m.value).forEach(v=>{v.$validate();});}let m=ref({}),I=ref({});j();function V(){o(),a.$dirty.value=!1,R.setDirtyEntry(n,!1),Object.entries(m.value).forEach(([v,A])=>{A.$reset();}),!a.$lazy.value&&a.$autoDirty.value&&Object.values(m.value).forEach(v=>v.$validate());}function Q(v=!0,A=!1){a.$dirty.value||(a.$dirty.value=!0),A&&v?(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&c():v&&c();}async function K(){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 z(m.value)?{result:!0,data:v}:{result:(await Promise.allSettled(Object.entries(m.value).map(([p,N])=>N.$validate()))).every(p=>p.status==="fulfilled"?p.value===!0:!1),data:v}}catch{return {result:!1,data:e.value}}}function x(){_(),e.value=H(D),V();}function w(v=!0){return a.$dirty.value?e.value:v?{_null:!0}:null}function o(){d?.value?.length&&(d.value=[]);}!a.$lazy.value&&!a.$dirty.value&&a.$autoDirty.value&&c();let{$shortcuts:s,$validating:g,$autoDirty:f,$rewardEarly:T,$clearExternalErrorsOnChange:U,$haveAnyAsyncRule:Y,$debounce:ee,$lazy:ae,...le}=a;return reactive({...le,$externalErrors:d,$value:e,$rules:m,...s,$reset:V,$touch:Q,$validate:K,$unwatch:_,$watch:P,$resetAll:x,$extractDirtyFields:w,$clearExternalErrors:o})}function je({$id:e,path:r,index:t,options:n,storage:l,stateValue:R,customMessages:y,rules:d,externalErrors:S,initialState:$,shortcuts:D,fieldName:F}){let O=d.$key?d.$key:he(),a=`${r}.${String(O)}`;typeof R.value=="object"&&R.value!=null&&(R.value.$id?a=`${r}.${R.value.$id}`:Object.defineProperties(R.value,{$id:{value:O,enumerable:!1,configurable:!1,writable:!1}}));let E=me({state:R,rulesDef:toRef(()=>d),customMessages:y,path:a,storage:l,options:n,externalErrors:toRef(S?.value??[],t),initialState:$?.[t],shortcuts:D,fieldName:F});if(E){let C=R.value?.$id;E.$id=C??String(O),l.addArrayStatus(e,E.$id,E);}return E}function dt({state:e,rulesDef:r,customMessages:t,path:n,storage:l,options:R,externalErrors:y,initialState:d,shortcuts:S,fieldName:$}){let D=effectScope(),F,O=effectScope(),a,E=[];if(!Array.isArray(e.value)&&!r.value.$each)return null;let C=ref(),M=ref(e.value),u,i=ref({}),c=l.getCollectionsEntry(n);a=O.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(s=>typeof s!="object"):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(s=>fe(s)):!1)})),j(),P();function j(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(C.value=he(),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&&(M.value=i.value.$value,Array.isArray(e.value)?c.value=e.value.map((o,s)=>{let{scope:g,unwrapped:f}=Oe(r.value.$each,toRef(()=>o),s);g&&E.push(g);let T=je({$id:C.value,path:n,customMessages:t,rules:f??{},stateValue:toRef(()=>o),index:s,options:R,storage:l,externalErrors:toRef(y?.value??{},"$each"),initialState:d?.[s],shortcuts:S,fieldName:$});return T||null}).filter(o=>!!o):c.value=[],i.value=Te({state:e,rulesDef:r,customMessages:t,path:n,storage:l,options:R,externalErrors:toRef(y?.value??{},"$self"),$isArray:!0,initialState:d,shortcuts:S,fieldName:$}));}function k(){if(Array.isArray(e.value)){let o=H(c.value);c.value=e.value.map((s,g)=>{let f=toRef(()=>s);if(s.$id&&c.value.find(T=>T.$id===s.$id)){let T=l.getArrayStatus(C.value,s.$id);return T?(T.$value=f,T):null}else {let{scope:T,unwrapped:U}=Oe(r.value.$each,f,g);if(T&&E.push(T),U){let Y=je({$id:C.value,path:n,customMessages:t,rules:U,stateValue:f,index:g,options:R,storage:l,externalErrors:toRef(y?.value??{},"$each"),initialState:d?.[g],shortcuts:S,fieldName:$});return Y||null}}}).filter(s=>!!s),o.filter(s=>!e.value.find(g=>s.$id===g.$id)).forEach((s,g)=>{l.deleteArrayStatus(C.value,g.toString());});}else c.value=[];}function _(){u=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?j():k();},{deep:Se?1:!0,flush:"pre"});}function P(){_(),D=effectScope(),F=D.run(()=>{let o=computed({get:()=>e.value,set(p){u(),e.value=p,_();}}),s=computed(()=>i.value.$dirty&&c.value.every(p=>p.$dirty)),g=computed(()=>i.value.$anyDirty||c.value.some(p=>p.$anyDirty)),f=computed(()=>i.value.$invalid||c.value.some(p=>p.$invalid)),T=computed(()=>(z(i.value.$rules)?!0:i.value.$valid)&&c.value.every(p=>p.$valid)),U=computed(()=>i.value.$error||c.value.some(p=>p.$error)),Y=computed(()=>!(f.value||ee.value)),ee=computed(()=>i.value.$pending||c.value.some(p=>p.$pending)),ae=computed(()=>({$self:i.value.$errors,$each:c.value.map(p=>p.$errors)})),le=computed(()=>({$self:i.value.$silentErrors,$each:c.value.map(p=>p.$silentErrors)})),v=computed(()=>$);function A(){S?.collections&&Object.entries(S?.collections).forEach(([p,N])=>{let X=effectScope();h[p]=X.run(()=>{let ye=ref();return watchEffect(()=>{ye.value=N(reactive({$dirty:s,$error:U,$silentValue:o,$pending:ee,$invalid:f,$valid:T,$errors:ae,$ready:Y,$silentErrors:le,$anyDirty:g,$name:v,$each:c,$field:i,$value:e}));}),ye}),E.push(X);});}let h={};return A(),{$dirty:s,$anyDirty:g,$invalid:f,$valid:T,$error:U,$pending:ee,$errors:ae,$silentErrors:le,$ready:Y,$name:v,$shortcuts:h,$silentValue:o}}),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`),u());}function b(){u&&u(),i.value&&i.value.$unwatch(),c.value&&c.value.forEach(o=>{"$dirty"in o&&o.$unwatch();}),D.stop(),D=effectScope(),O.stop(),O=effectScope(!0),E.forEach(o=>o.stop()),E=[];}function W(o=!0,s=!1){i.value.$touch(o,s),c.value.forEach(g=>{g.$touch(o,s);});}function m(){i.value.$reset(),c.value.forEach(o=>{o.$reset();});}async function I(){let o=e.value;try{return {result:(await Promise.allSettled([i.value.$validate(),...c.value.map(f=>f.$validate())])).every(f=>f.status==="fulfilled"?f.value.result===!0:!1),data:o}}catch{return {result:!1,data:o}}}function V(){i.value.$clearExternalErrors(),c.value.forEach(o=>{o.$clearExternalErrors();});}function Q(o=!0){let s=c.value.map(g=>{if(st(g))return g.$extractDirtyFields(o)});return o&&s.every(g=>z(g))&&(s=[]),s}function K(){b(),e.value=H(d),m();}let{$shortcuts:x,...w}=F;return reactive({$field:i,...w,...x,$each:c,$value:e,$validate:I,$unwatch:b,$watch:P,$touch:W,$reset:m,$resetAll:K,$extractDirtyFields:Q,$clearExternalErrors:V})}function Ge({rulesDef:e,state:r,path:t="",rootRules:n,externalErrors:l,validationGroups:R,initialState:y,fieldName:d,...S}){let $=effectScope(),D,F=[],O=null,a=null,E=null;async function M(x=!0){let w=Object.entries(e.value),o=Object.fromEntries(w.filter(([f,T])=>!!T).map(([f,T])=>{if(T){let U=toRef(r.value,f),Y=toRef(()=>T),ee=toRef(l?.value??{},f);return [f,me({state:U,rulesDef:Y,path:t?`${t}.${f}`:f,externalErrors:ee,initialState:y?.[f],fieldName:f,...S})]}return []})),s=Object.fromEntries(Object.entries(unref(l)??{}).filter(([f,T])=>!(f in e.value)&&!!T).map(([f])=>{let T=toRef(r.value,f);return [f,me({state:T,rulesDef:computed(()=>({})),path:t?`${t}.${f}`:f,externalErrors:toRef(l?.value??{},f),initialState:y?.[f],fieldName:f,...S})]})),g=Object.fromEntries(Object.entries(r.value).filter(([f])=>!(f in e.value)&&!(f in(s.value??{}))).map(([f])=>{let T=toRef(r.value,f);return [f,me({state:T,rulesDef:computed(()=>({})),path:t?`${t}.${f}`:f,externalErrors:toRef(l?.value??{},f),initialState:y?.[f],fieldName:f,...S})]}));u.value={...o,...s,...g},x&&_();}let u=S.storage.getFieldsEntry(t);M();function i(){a?.(),Object.values(u.value).forEach(x=>{x.$reset();}),j();}function c(x=!0,w=!1){Object.values(u.value).forEach(o=>{o.$touch(x,w);});}function j(){l?.value&&(a=watch(l,()=>{P(),M();},{deep:!0}));}function k(){E=watch(r,()=>{P(),M(),c(!0,!0);},{flush:"sync"});}function _(){n&&(O?.(),O=watch(n,()=>{P(),M();},{deep:!0,flush:"post"}),j()),k(),$=effectScope(),D=$.run(()=>{let x=computed({get:()=>r.value,set(h){P(),r.value=h,M();}}),w=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([h,p])=>p?.$dirty)),o=computed(()=>Object.entries(u.value).some(([h,p])=>p?.$anyDirty)),s=computed(()=>Object.entries(u.value).some(([h,p])=>p?.$invalid)),g=computed(()=>Object.entries(u.value).every(([h,p])=>p?.$valid)),f=computed(()=>o.value&&!U.value&&s.value),T=computed(()=>unref(S.options.autoDirty)?o.value&&!(s.value||U.value):!(s.value||U.value)),U=computed(()=>Object.entries(u.value).some(([h,p])=>p?.$pending)),Y=computed(()=>Object.fromEntries(Object.entries(u.value).map(([h,p])=>[h,p?.$errors]))),ee=computed(()=>Object.fromEntries(Object.entries(u.value).map(([h,p])=>[h,p?.$silentErrors]))),ae=computed(()=>d);function le(){S.shortcuts?.nested&&Object.entries(S.shortcuts.nested).forEach(([h,p])=>{let N=effectScope();A[h]=N.run(()=>{let X=ref();return watchEffect(()=>{X.value=p(reactive({$dirty:w,$value:r,$silentValue:x,$error:f,$pending:U,$invalid:s,$valid:g,$ready:T,$anyDirty:o,$name:ae,$silentErrors:ee,$errors:Y,$fields:u}));}),X}),F.push(N);});}let v=computed({get:()=>R?Object.fromEntries(Object.entries(R?.(u.value)??{}).map(([h,p])=>p.length?[h,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(N=>[N,et(p,N)])),...Object.fromEntries(["$errors","$silentErrors"].map(N=>[N,tt(p,N)]))}]:[])):{},set(){}}),A={};return le(),{$dirty:w,$anyDirty:o,$invalid:s,$valid:g,$error:f,$pending:U,$errors:Y,$silentErrors:ee,$ready:T,$name:ae,$shortcuts:A,$groups:v,$silentValue:x}});}function P(){O?.(),a?.(),E?.(),F.forEach(x=>x.stop()),F=[],$.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 W(){P(),r.value=H({...y??{}}),i(),M();}function m(x){return x.filter(([w,o])=>Z(o)?!(o&&typeof o=="object"&&"_null"in o)&&!z(o):Array.isArray(o)?o.length:!0)}function I(x=!0){let w=Object.entries(u.value).map(([o,s])=>[o,s.$extractDirtyFields(x)]);return x&&(w=m(w)),Object.fromEntries(w)}async function V(){try{let x=r.value;return {result:(await Promise.allSettled(Object.values(u.value).map(s=>s.$validate()))).every(s=>s.status==="fulfilled"?s.value.result===!0:!1),data:x}}catch{return {result:!1,data:r.value}}}let{$shortcuts:Q,...K}=D;return reactive({...K,...Q,$fields:u,$value:r,$resetAll:W,$reset:i,$touch:c,$validate:V,$unwatch:P,$watch:_,$clearExternalErrors:b,$extractDirtyFields:I})}function me({rulesDef:e,externalErrors:r,...t}){return ot(e,t.state)?dt({rulesDef:e,externalErrors:r,...t}):lt(t.state,e)&&at(t.state)?Ge({rulesDef:e,externalErrors:r,...t}):ut(e)?Te({rulesDef:e,externalErrors:r,...t}):null}function ce({initialState:e,options:r,scopeRules:t,state:n,customRules:l,shortcuts:R}){let y=we(),d=ref();return d.value=Ge({rootRules:t,rulesDef:t,state:n,customMessages:l?.(),storage:y,options:r,externalErrors:r.externalErrors,validationGroups:r.validationGroups,initialState:e,shortcuts:R,fieldName:"root",path:""}),getCurrentScope()&&onScopeDispose(()=>{d.value?.$unwatch();}),reactive({regle:d})}function Ne(e,r,t){let n={autoDirty:r?.autoDirty??!0,lazy:r?.lazy??!1,rewardEarly:r?.rewardEarly??!1,clearExternalErrorsOnChange:r?.clearExternalErrorsOnChange??!0};function l(R,y,d){let S=isRef(y)?y:computed(typeof y=="function"?y:()=>y),$={...n,...d},D=isRef(R)?R:ref(R),F={...H(D.value)};return {r$:ce({scopeRules:S,state:D,options:$,initialState:F,customRules:e,shortcuts:t}).regle}}return l}var $t=Ne();function ke(){function e(r,t){return t}return e}var We=ke();function gt({rules:e,modifiers:r,shortcuts:t}){let n=Ne(e,r,t),l=ke();return {useRegle:n,inferRules:l}}
|
|
2
|
-
export{
|
|
1
|
+
import {toValue,version,ref,getCurrentScope,onScopeDispose,reactive,shallowRef,effectScope,computed,isRef,toRef,unref,watch,watchEffect}from'vue';function B(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var tt=Symbol("regle-rule");function xt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function q(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>q(n)))),r=="Map"&&(t=new Map([...e].map(n=>[q(n[0]),q(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,xt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=q(e[n]);}return t}function Z(e){return e instanceof Date||e instanceof File?!1:typeof e=="object"&&e!==null&&!Array.isArray(e)}var we=(r=>(r.Inline="__inline",r.Async="__async",r))(we||{});function rt(e,t){return e.some(r=>r[t])}function nt(e,t){return e.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[])}function L(e){try{return e.map(t=>toValue(t))}catch{return []}}function at(e){return e.map(t=>t instanceof Function?computed(t):isRef(t)?t:toRef(()=>t))}function lt(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(y=>y.trim()).filter(y=>y.length>0).length:0}function Oe(e,...t){let{validator:r,type:n}=e,a=n==="__async"||r.constructor.name==="AsyncFunction";return {...{validator(d,...h){return e.validator(d,...L(h.length?h:t))},message(d){return typeof e.message=="function"?e.message({...d,$params:L(d?.$params?.length?d.$params:t)}):e.message},active(d){return typeof e.active=="function"?e.active({...d,$params:L(d?.$params?.length?d.$params:t)}):e.active??!0},tooltip(d){return typeof e.tooltip=="function"?e.tooltip({...d,$params:L(d?.$params?.length?d.$params:t)}):e.tooltip??[]},exec(d){let h=e.validator(d,...L(t)),$;return h instanceof Promise?h.then(D=>($=D,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)):($=h,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:a,_params:at(t),_brand:tt}}function Ae(e){if(typeof e.validator=="function"){let r=Oe(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(lt(e.validator)>1){let a=function(...f){return Oe(e,...f)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.tooltip=r.tooltip,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._tooltip=r.tooltip,a._type=e.type,a._message_pacthed=!1,a._tooltip_pacthed=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function Fe(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),a=shallowRef(new Map),f=shallowRef(new Map);function y(u){let s=t.value.get(u);if(s)return s;{let c=ref({});return t.value.set(u,c),c}}function d(u){let s=r.value.get(u);if(s)return s;{let c=ref([]);return r.value.set(u,c),c}}function h(u,s,c){f.value.set(`${u}-${s}`,c);}function $(u,s){return f.value.get(`${u}-${s}`)}function D(u,s){u&&s!=null&&f.value.delete(`${u}-${s}`);}function j(u,s){n.value.set(u,s);}function A(u){return n.value.get(u)??!1}function l(u,s){e.value.set(u,s);}function E(u,s){let c=e.value.get(u);return c?C(s,c)?{valid:!0}:{valid:!1}:void 0}function C(u,s){let c=Object.keys(s),V=Object.keys(u);return V.length!==c.length||!V.every(G=>c.includes(G))?!1:V.every(G=>{let P=u[G],b=s[G];return !b||!P||typeof P=="function"||typeof b=="function"||typeof P=="number"||typeof P=="boolean"?!1:P._params?P._params?.every((k,m)=>{if(typeof b=="number"||typeof b=="boolean")return !0;{let I=L(b._params),N=L(P._params);return I?.[m]===N?.[m]}}):!0})}function _(u){let s=a.value.get(u);if(s)return s;{let c=ref(!1),V=ref(!0),W=ref({}),G=ref(!1);return a.value.set(u,{$pending:c,$valid:V,$metadata:W,$validating:G}),{$pending:c,$valid:V,$metadata:W,$validating:G}}}return getCurrentScope()&&onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),f.value.clear();}),{addRuleDeclEntry:l,setDirtyEntry:j,checkRuleDeclEntry:E,getDirtyState:A,trySetRuleStatusRef:_,getFieldsEntry:y,getCollectionsEntry:d,getArrayStatus:$,addArrayStatus:h,deleteArrayStatus:D,arrayStatusStorage:f}}function ge(e){return e.value instanceof Date||e.value instanceof File?!1:Z(e.value)}function Me(e,t,r){let n=effectScope(),a;return e instanceof Function?a=n.run(()=>e(t,r??0)):a=e,{scope:n,unwrapped:a}}function Se(e,t,r){let n,a=(...f)=>new Promise(y=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...f])).then(y);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a}function Mt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let f=Number(r[a]),y=Number(n[a]);if(f>y)return 1;if(y>f)return -1;if(!isNaN(f)&&isNaN(y))return 1;if(isNaN(f)&&!isNaN(y))return -1}return 0}var he=Mt(version,"3.5.0")!==-1;function jt(){return Math.floor(Math.random()*Date.now()).toString()}function be(){return typeof window>"u"?jt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function ot(e,t){return ge(e)||Z(t.value)&&!B(t.value)&&!Object.entries(t.value).some(([r,n])=>Re(n)||typeof n=="function")}function ut(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function it(e){return !!e.value&&Z(e.value)}function Re(e){return Z(e)&&"_validator"in e}function pe(e){return typeof e.value!="function"}function st(e){return Z(e)&&"$fields"in e}function ct(e){return !!e&&"$rules"in e}function je({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function ft({field:e}){return Object.entries(e.$rules??{}).map(([t,r])=>r.$tooltip).filter(t=>!!t).reduce((t,r)=>typeof r=="string"?t?.concat([r]):t?.concat(r),[])}function Rt({fieldProperties:e,customMessages:t,rule:r,ruleKey:n,state:a,path:f,storage:y,$debounce:d,modifiers:h}){let $=effectScope(),D={},j,A=ref(!1),{$pending:l,$valid:E,$metadata:C,$validating:_}=y.trySetRuleStatusRef(`${f}.${n}`);function u(){$=effectScope(),D=$.run(()=>{let b=computed(()=>({$value:a.value,$error:e.$error.value,$dirty:e.$dirty.value,$pending:e.$pending.value,$valid:e.$valid.value,$invalid:e.$invalid.value,$rule:{$valid:E.value,$invalid:!E.value,$pending:l.value},$params:x.value,...C.value})),k=computed(()=>pe(r)?typeof r.value.active=="function"?r.value.active(b.value):!!r.value.active:!0);function m(o){let i="",g=t?t[n]?.[o]:void 0;if(g&&(typeof g=="function"?i=g(b.value):i=g),pe(r)){let R=`_${o}_patched`;g&&!r.value[R]||(typeof r.value[o]=="function"?i=r.value[o](b.value):i=r.value[o]??"");}return i}let I=computed(()=>{let o=m("message");return B(o)&&(o="This field is not valid"),o}),N=computed(()=>m("tooltip")),Q=computed(()=>pe(r)&&r.value.type?r.value.type:n),K=computed(()=>pe(r)?r.value.validator:r.value),x=computed(()=>typeof r.value=="function"?[]:L(r.value._params??[])),w=computed(()=>`${f}.${Q.value}`);return {$active:k,$message:I,$type:Q,$validator:K,$params:x,$path:w,$tooltip:N}}),j=watch(D?.$params,()=>{(h.$autoDirty.value||h.$rewardEarly.value&&e.$error.value)&&W();});}u();function s(){E.value=!0,e.$dirty.value&&(l.value=!0);}async function c(){let b=!1;try{let k=D.$validator.value,m=k(a.value,...D.$params.value),I=a.value;s();let N;if(m instanceof Promise?N=await m:N=m,a.value!==I)return !0;if(typeof N=="boolean")b=N;else {let{$valid:Q,...K}=N;b=Q,C.value=K;}}catch{b=!1;}finally{l.value=!1;}return b}let V=Se(c,d??200);async function W(){try{_.value=!0;let b=!1;if(Re(r.value)&&r.value._async)b=await V();else {let k=D.$validator.value,m=k(a.value,...D.$params.value);if(m instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(m!=null)if(typeof m=="boolean")b=m;else {let{$valid:I,...N}=m;b=I,C.value=N;}}return E.value=b,b}catch{return !1}finally{_.value=!1;}}function G(){E.value=!0,C.value={},l.value=!1,_.value=!1,u();}function P(){j(),$.stop(),$=effectScope();}return reactive({...D,$pending:l,$valid:E,$metadata:C,$haveAsync:A,$validating:_,$validate:W,$unwatch:P,$watch:u,$reset:G})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:f,options:y,externalErrors:d,onUnwatch:h,$isArray:$,initialState:D,shortcuts:j}){let A=effectScope(),l,E=[],C,_,u,s,c=()=>{};function V(){let v=t.value,F=f.checkRuleDeclEntry(n,v);I.value=Object.fromEntries(Object.entries(v).filter(([S])=>S.startsWith("$"))),P(),m.value=Object.fromEntries(Object.entries(t.value).filter(([S])=>!S.startsWith("$")).map(([S,p])=>{if(p){let O=toRef(()=>p);return [S,Rt({fieldProperties:{$dirty:l.$dirty,$error:l.$error,$invalid:l.$invalid,$pending:l.$pending,$valid:l.$valid},modifiers:{$autoDirty:l.$autoDirty,$rewardEarly:l.$rewardEarly},customMessages:r,rule:O,ruleKey:S,state:e,path:n,storage:f,$debounce:I.value.$debounce})]}return []}).filter(S=>!!S.length)),l.processShortcuts(),W(),F?.valid!=null&&(l.$dirty.value=f.getDirtyState(n),l.$dirty.value&&c()),f.addRuleDeclEntry(n,v);}function W(){c=l.$debounce.value?Se(k,l.$debounce.value??l.$haveAnyAsyncRule?100:0):k;}function G(){m.value&&Object.entries(m.value).forEach(([v,F])=>{F.$unwatch();}),u(),l.$dirty.value&&f.setDirtyEntry(n,l.$dirty.value),C?.(),_?.(),A.stop(),A=effectScope(),E.forEach(v=>v.stop()),E=[],h?.(),s?.();}function P(){m.value&&Object.entries(m.value).forEach(([v,F])=>{F.$watch();}),l=A.run(()=>{let v=ref(!1),F=ref(!1),S=computed(()=>v.value),p=computed(()=>I.value.$debounce),O=computed(()=>I.value.$lazy!=null?I.value.$lazy:unref(y.lazy)),X=computed(()=>Be.value===!0?!1:I.value.$rewardEarly!=null?I.value.$rewardEarly:unref(y.rewardEarly)),ve=computed(()=>I.value.$clearExternalErrorsOnChange!=null?I.value.$clearExternalErrorsOnChange:unref(y.clearExternalErrorsOnChange)),Be=computed(()=>I.value.$autoDirty!=null?I.value.$autoDirty:unref(y.autoDirty)),Le=computed(()=>Object.entries(m.value).some(([z,te])=>te.$validating)),He=computed({get:()=>e.value,set(z){C(),e.value=z,b();}}),Ie=computed(()=>fe.value&&!$e.value&&v.value),qe=computed(()=>Ie.value?je({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value}}):[]),ze=computed(()=>ft({field:{$rules:m.value}})),Je=computed(()=>je({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value},silent:!0})),Ye=computed(()=>!(fe.value||$e.value)),$e=computed(()=>F.value||!X.value?Object.entries(m.value).some(([z,te])=>te.$pending):!1),fe=computed(()=>d?.value?.length?!0:B(m.value)?!1:!X.value||X.value&&F.value?Object.entries(m.value).some(([z,te])=>!te.$valid):!1),Qe=computed(()=>a),Pe=computed(()=>!!B(m.value)),Xe=computed(()=>d?.value?.length||Pe.value?!1:v.value&&!B(e.value)&&!Le.value?Object.values(m.value).every(z=>z.$valid&&z.$active):!1),Tt=computed(()=>Object.entries(m.value).some(([z,te])=>te.$haveAsync));function Et(){j?.fields&&Object.entries(j.fields).forEach(([z,te])=>{let Ke=effectScope();Ze[z]=Ke.run(()=>{let et=ref();return watchEffect(()=>{et.value=te(reactive({$dirty:v,$externalErrors:d?.value??[],$value:e,$silentValue:He,$rules:m,$error:Ie,$pending:$e,$invalid:fe,$valid:Xe,$errors:qe,$ready:Ye,$silentErrors:Je,$anyDirty:S,$tooltips:ze,$name:Qe,$inactive:Pe}));}),et}),E.push(Ke);});}let Ze={};return watch(fe,z=>{z||(F.value=!1);}),{$error:Ie,$pending:$e,$invalid:fe,$valid:Xe,$debounce:p,$lazy:O,$errors:qe,$ready:Ye,$silentErrors:Je,$rewardEarly:X,$autoDirty:Be,$clearExternalErrorsOnChange:ve,$anyDirty:S,$name:Qe,$haveAnyAsyncRule:Tt,$shortcuts:Ze,$validating:Le,$tooltips:ze,$dirty:v,triggerPunishment:F,processShortcuts:Et,$silentValue:He,$inactive:Pe}}),b(),u=watch(l.$dirty,()=>{f.setDirtyEntry(n,l.$dirty.value);}),_=watch(l.$valid,v=>{l.$rewardEarly.value&&v&&(l.triggerPunishment.value=!1);}),s=watch(l.$haveAnyAsyncRule,W);}function b(){C=watch(e,()=>{l.$autoDirty.value&&(l.$dirty.value||(l.$dirty.value=!0)),t.value instanceof Function&&V(),(l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&c(),l.$rewardEarly.value!==!0&&l.$clearExternalErrorsOnChange.value&&o();},{deep:$?!0:he?1:!0});}function k(){Object.values(m.value).forEach(v=>{v.$validate();});}let m=ref({}),I=ref({});V();function N(){o(),l.$dirty.value=!1,f.setDirtyEntry(n,!1),Object.entries(m.value).forEach(([v,F])=>{F.$reset();}),!l.$lazy.value&&l.$autoDirty.value&&Object.values(m.value).forEach(v=>v.$validate());}function Q(v=!0,F=!1){l.$dirty.value||(l.$dirty.value=!0),F&&v?(l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&c():v&&c();}async function K(){try{let v=e.value;if(l.triggerPunishment.value=!0,!l.$dirty.value)l.$dirty.value=!0;else if(l.$autoDirty.value&&l.$dirty.value&&!l.$pending.value)return {result:!l.$error.value,data:v};return B(m.value)?{result:!0,data:v}:{result:(await Promise.allSettled(Object.entries(m.value).map(([p,O])=>O.$validate()))).every(p=>p.status==="fulfilled"?p.value===!0:!1),data:v}}catch{return {result:!1,data:e.value}}}function x(){G(),e.value=q(D),N();}function w(v=!0){return l.$dirty.value?e.value:v?{_null:!0}:null}function o(){d?.value?.length&&(d.value=[]);}!l.$lazy.value&&!l.$dirty.value&&l.$autoDirty.value&&c();let{$shortcuts:i,$validating:g,$autoDirty:R,$rewardEarly:T,$clearExternalErrorsOnChange:U,$haveAnyAsyncRule:Y,$debounce:ee,$lazy:ae,...le}=l;return reactive({...le,$externalErrors:d,$value:e,$rules:m,...i,$reset:N,$touch:Q,$validate:K,$unwatch:G,$watch:P,$resetAll:x,$extractDirtyFields:w,$clearExternalErrors:o})}function Ge({$id:e,path:t,index:r,options:n,storage:a,stateValue:f,customMessages:y,rules:d,externalErrors:h,initialState:$,shortcuts:D,fieldName:j}){let A=d.$key?d.$key:be(),l=`${t}.${String(A)}`;typeof f.value=="object"&&f.value!=null&&(f.value.$id?l=`${t}.${f.value.$id}`:Object.defineProperties(f.value,{$id:{value:A,enumerable:!1,configurable:!1,writable:!1}}));let E=ye({state:f,rulesDef:toRef(()=>d),customMessages:y,path:l,storage:a,options:n,externalErrors:toRef(h?.value??[],r),initialState:$?.[r],shortcuts:D,fieldName:j});if(E){let C=f.value?.$id;E.$id=C??String(A),a.addArrayStatus(e,E.$id,E);}return E}function yt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:f,externalErrors:y,initialState:d,shortcuts:h,fieldName:$}){let D=effectScope(),j,A=effectScope(),l,E=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let C=ref(),_=ref(e.value),u,s=ref({}),c=a.getCollectionsEntry(n);l=A.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(i=>typeof i!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(i=>Re(i)):!1)})),V(),P();function V(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(C.value=be(),Object.defineProperties(e.value,{$id:{value:C.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(C.value=e.value.$id)),!l.isPrimitiveArray.value&&(_.value=s.value.$value,Array.isArray(e.value)?c.value=e.value.map((o,i)=>{let{scope:g,unwrapped:R}=Me(t.value.$each,toRef(()=>o),i);g&&E.push(g);let T=Ge({$id:C.value,path:n,customMessages:r,rules:R??{},stateValue:toRef(()=>o),index:i,options:f,storage:a,externalErrors:toRef(y?.value??{},"$each"),initialState:d?.[i],shortcuts:h,fieldName:$});return T||null}).filter(o=>!!o):c.value=[],s.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:f,externalErrors:toRef(y?.value??{},"$self"),$isArray:!0,initialState:d,shortcuts:h,fieldName:$}));}function W(){if(Array.isArray(e.value)){let o=q(c.value);c.value=e.value.map((i,g)=>{let R=toRef(()=>i);if(i.$id&&c.value.find(T=>T.$id===i.$id)){let T=a.getArrayStatus(C.value,i.$id);return T?(T.$value=R,T):null}else {let{scope:T,unwrapped:U}=Me(t.value.$each,R,g);if(T&&E.push(T),U){let Y=Ge({$id:C.value,path:n,customMessages:r,rules:U,stateValue:R,index:g,options:f,storage:a,externalErrors:toRef(y?.value??{},"$each"),initialState:d?.[g],shortcuts:h,fieldName:$});return Y||null}}}).filter(i=>!!i),o.filter(i=>!e.value.find(g=>i.$id===g.$id)).forEach((i,g)=>{a.deleteArrayStatus(C.value,g.toString());});}else c.value=[];}function G(){u=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?V():W();},{deep:he?1:!0,flush:"pre"});}function P(){G(),D=effectScope(),j=D.run(()=>{let o=computed({get:()=>e.value,set(p){u(),e.value=p,G();}}),i=computed(()=>s.value.$dirty&&c.value.every(p=>p.$dirty)),g=computed(()=>s.value.$anyDirty||c.value.some(p=>p.$anyDirty)),R=computed(()=>s.value.$invalid||c.value.some(p=>p.$invalid)),T=computed(()=>(B(s.value.$rules)?!0:s.value.$valid)&&c.value.every(p=>p.$valid)),U=computed(()=>s.value.$error||c.value.some(p=>p.$error)),Y=computed(()=>!(R.value||ee.value)),ee=computed(()=>s.value.$pending||c.value.some(p=>p.$pending)),ae=computed(()=>({$self:s.value.$errors,$each:c.value.map(p=>p.$errors)})),le=computed(()=>({$self:s.value.$silentErrors,$each:c.value.map(p=>p.$silentErrors)})),v=computed(()=>$);function F(){h?.collections&&Object.entries(h?.collections).forEach(([p,O])=>{let X=effectScope();S[p]=X.run(()=>{let ve=ref();return watchEffect(()=>{ve.value=O(reactive({$dirty:i,$error:U,$silentValue:o,$pending:ee,$invalid:R,$valid:T,$errors:ae,$ready:Y,$silentErrors:le,$anyDirty:g,$name:v,$each:c,$field:s,$value:e}));}),ve}),E.push(X);});}let S={};return F(),{$dirty:i,$anyDirty:g,$invalid:R,$valid:T,$error:U,$pending:ee,$errors:ae,$silentErrors:le,$ready:Y,$name:v,$shortcuts:S,$silentValue:o}}),l.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),u());}function b(){u&&u(),s.value&&s.value.$unwatch(),c.value&&c.value.forEach(o=>{"$dirty"in o&&o.$unwatch();}),D.stop(),D=effectScope(),A.stop(),A=effectScope(!0),E.forEach(o=>o.stop()),E=[];}function k(o=!0,i=!1){s.value.$touch(o,i),c.value.forEach(g=>{g.$touch(o,i);});}function m(){s.value.$reset(),c.value.forEach(o=>{o.$reset();});}async function I(){let o=e.value;try{return {result:(await Promise.allSettled([s.value.$validate(),...c.value.map(R=>R.$validate())])).every(R=>R.status==="fulfilled"?R.value.result===!0:!1),data:o}}catch{return {result:!1,data:o}}}function N(){s.value.$clearExternalErrors(),c.value.forEach(o=>{o.$clearExternalErrors();});}function Q(o=!0){let i=c.value.map(g=>{if(st(g))return g.$extractDirtyFields(o)});return o&&i.every(g=>B(g))&&(i=[]),i}function K(){b(),e.value=q(d),m();}let{$shortcuts:x,...w}=j;return reactive({$field:s,...w,...x,$each:c,$value:e,$validate:I,$unwatch:b,$watch:P,$touch:k,$reset:m,$resetAll:K,$extractDirtyFields:Q,$clearExternalErrors:N})}function Ce({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:a,validationGroups:f,initialState:y,fieldName:d,...h}){let $=effectScope(),D,j=[],A=null,l=null,E=null;async function _(x=!0){let w=Object.entries(e.value),o=Object.fromEntries(w.filter(([R,T])=>!!T).map(([R,T])=>{if(T){let U=toRef(t.value,R),Y=toRef(()=>T),ee=toRef(a?.value??{},R);return [R,ye({state:U,rulesDef:Y,path:r?`${r}.${R}`:R,externalErrors:ee,initialState:y?.[R],fieldName:R,...h})]}return []})),i=Object.fromEntries(Object.entries(unref(a)??{}).filter(([R,T])=>!(R in e.value)&&!!T).map(([R])=>{let T=toRef(t.value,R);return [R,ye({state:T,rulesDef:computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:toRef(a?.value??{},R),initialState:y?.[R],fieldName:R,...h})]})),g=Object.fromEntries(Object.entries(t.value).filter(([R])=>!(R in e.value)&&!(R in(i.value??{}))).map(([R])=>{let T=toRef(t.value,R);return [R,ye({state:T,rulesDef:computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:toRef(a?.value??{},R),initialState:y?.[R],fieldName:R,...h})]}));u.value={...o,...i,...g},x&&G();}let u=h.storage.getFieldsEntry(r);_();function s(){l?.(),Object.values(u.value).forEach(x=>{x.$reset();}),V();}function c(x=!0,w=!1){Object.values(u.value).forEach(o=>{o.$touch(x,w);});}function V(){a?.value&&(l=watch(a,()=>{P(),_();},{deep:!0}));}function W(){E=watch(t,()=>{P(),_(),c(!0,!0);},{flush:"sync"});}function G(){n&&(A?.(),A=watch(n,()=>{P(),_();},{deep:!0,flush:"post"}),V()),W(),$=effectScope(),D=$.run(()=>{let x=computed({get:()=>t.value,set(S){P(),t.value=S,_();}}),w=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([S,p])=>p?.$dirty)),o=computed(()=>Object.entries(u.value).some(([S,p])=>p?.$anyDirty)),i=computed(()=>Object.entries(u.value).some(([S,p])=>p?.$invalid)),g=computed(()=>{let S=Object.entries(u.value).filter(([p,O])=>ct(O)?!O.$inactive:!0);return S.length?S.every(([p,O])=>O?.$valid):!1}),R=computed(()=>o.value&&!U.value&&i.value),T=computed(()=>unref(h.options.autoDirty)?o.value&&!(i.value||U.value):!(i.value||U.value)),U=computed(()=>Object.entries(u.value).some(([S,p])=>p?.$pending)),Y=computed(()=>Object.fromEntries(Object.entries(u.value).map(([S,p])=>[S,p?.$errors]))),ee=computed(()=>Object.fromEntries(Object.entries(u.value).map(([S,p])=>[S,p?.$silentErrors]))),ae=computed(()=>d);function le(){h.shortcuts?.nested&&Object.entries(h.shortcuts.nested).forEach(([S,p])=>{let O=effectScope();F[S]=O.run(()=>{let X=ref();return watchEffect(()=>{X.value=p(reactive({$dirty:w,$value:t,$silentValue:x,$error:R,$pending:U,$invalid:i,$valid:g,$ready:T,$anyDirty:o,$name:ae,$silentErrors:ee,$errors:Y,$fields:u}));}),X}),j.push(O);});}let v=computed({get:()=>f?Object.fromEntries(Object.entries(f?.(u.value)??{}).map(([S,p])=>p.length?[S,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(O=>[O,rt(p,O)])),...Object.fromEntries(["$errors","$silentErrors"].map(O=>[O,nt(p,O)]))}]:[])):{},set(){}}),F={};return le(),{$dirty:w,$anyDirty:o,$invalid:i,$valid:g,$error:R,$pending:U,$errors:Y,$silentErrors:ee,$ready:T,$name:ae,$shortcuts:F,$groups:v,$silentValue:x}});}function P(){A?.(),l?.(),E?.(),j.forEach(x=>x.stop()),j=[],$.stop(),u.value&&Object.entries(u.value).forEach(([x,w])=>{w.$unwatch();});}function b(){Object.entries(u.value).forEach(([x,w])=>{w.$clearExternalErrors();});}async function k(){P(),t.value=q({...y??{}}),s(),_();}function m(x){return x.filter(([w,o])=>Z(o)?!(o&&typeof o=="object"&&"_null"in o)&&!B(o):Array.isArray(o)?o.length:!0)}function I(x=!0){let w=Object.entries(u.value).map(([o,i])=>[o,i.$extractDirtyFields(x)]);return x&&(w=m(w)),Object.fromEntries(w)}async function N(){try{let x=t.value;return {result:(await Promise.allSettled(Object.values(u.value).map(i=>i.$validate()))).every(i=>i.status==="fulfilled"?i.value.result===!0:!1),data:x}}catch{return {result:!1,data:t.value}}}let{$shortcuts:Q,...K}=D;return reactive({...K,...Q,$fields:u,$value:t,$resetAll:k,$reset:s,$touch:c,$validate:N,$unwatch:P,$watch:G,$clearExternalErrors:b,$extractDirtyFields:I})}function ye({rulesDef:e,externalErrors:t,...r}){if(ut(e,r.state))return yt({rulesDef:e,externalErrors:t,...r});if(ot(r.state,e)){if(ge(r.state))return Ce({rulesDef:e,externalErrors:t,...r});{let n=ref({}),a=watch(n,d=>{a(),r.state.value=d;},{deep:!0}),{state:f,...y}=r;return Ce({rulesDef:e,externalErrors:t,...y,state:n})}}else if(it(e))return Ee({rulesDef:e,externalErrors:t,...r})}function ce({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:f}){let y=Fe(),d=ref();return d.value=Ce({rootRules:r,rulesDef:r,state:n,customMessages:a?.(),storage:y,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:f,fieldName:"root",path:""}),getCurrentScope()&&onScopeDispose(()=>{d.value?.$unwatch();}),reactive({regle:d})}function We(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange??!0};function a(f,y,d){let h=isRef(y)?y:computed(typeof y=="function"?y:()=>y),$={...n,...d},D=isRef(f)?f:ref(f),j={...q(D.value)};return {r$:ce({scopeRules:h,state:D,options:$,initialState:j,customRules:e,shortcuts:r}).regle}}return a}var ht=We();function ke(){function e(t,r){return r}return e}var Ue=ke();function bt({rules:e,modifiers:t,shortcuts:r}){let n=We(e,t,r),a=ke();return {useRegle:n,inferRules:a}}
|
|
2
|
+
export{we as InternalRuleType,Ae as createRule,bt as defineRegleConfig,Ue as inferRules,L as unwrapRuleParameters,ht as useRegle,ce as useRootStorage};
|
package/dist/regle-core.mjs
CHANGED
|
@@ -58,6 +58,14 @@ function cloneDeep(obj) {
|
|
|
58
58
|
return result;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
// ../shared/utils/object.utils.ts
|
|
62
|
+
function isObject(obj) {
|
|
63
|
+
if (obj instanceof Date || obj instanceof File) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
return typeof obj === "object" && obj !== null && !Array.isArray(obj);
|
|
67
|
+
}
|
|
68
|
+
|
|
61
69
|
// src/types/rules/rule.internal.types.ts
|
|
62
70
|
var InternalRuleType = /* @__PURE__ */ ((InternalRuleType2) => {
|
|
63
71
|
InternalRuleType2["Inline"] = "__inline";
|
|
@@ -334,12 +342,6 @@ function useStorage() {
|
|
|
334
342
|
arrayStatusStorage
|
|
335
343
|
};
|
|
336
344
|
}
|
|
337
|
-
function isObject(obj) {
|
|
338
|
-
if (obj instanceof Date || obj instanceof File) {
|
|
339
|
-
return false;
|
|
340
|
-
}
|
|
341
|
-
return typeof obj === "object" && obj !== null && !Array.isArray(obj);
|
|
342
|
-
}
|
|
343
345
|
function isRefObject(obj) {
|
|
344
346
|
if (obj.value instanceof Date || obj.value instanceof File) {
|
|
345
347
|
return false;
|
|
@@ -405,7 +407,7 @@ function randomId() {
|
|
|
405
407
|
|
|
406
408
|
// src/core/useRegle/guards/ruleDef.guards.ts
|
|
407
409
|
function isNestedRulesDef(state, rules) {
|
|
408
|
-
return isObject(
|
|
410
|
+
return isRefObject(state) || isObject(rules.value) && !isEmpty(rules.value) && !Object.entries(rules.value).some(([key, rule]) => isRuleDef(rule) || typeof rule === "function");
|
|
409
411
|
}
|
|
410
412
|
function isCollectionRulesDef(rules, state) {
|
|
411
413
|
return !!rules.value && "$each" in rules.value || Array.isArray(state.value);
|
|
@@ -424,6 +426,9 @@ function isFormRuleDefinition(rule) {
|
|
|
424
426
|
function isNestedRulesStatus(rule) {
|
|
425
427
|
return isObject(rule) && "$fields" in rule;
|
|
426
428
|
}
|
|
429
|
+
function isFieldStatus(rule) {
|
|
430
|
+
return !!rule && "$rules" in rule;
|
|
431
|
+
}
|
|
427
432
|
|
|
428
433
|
// src/core/useRegle/useErrors.ts
|
|
429
434
|
function extractRulesErrors({
|
|
@@ -868,10 +873,16 @@ function createReactiveFieldStatus({
|
|
|
868
873
|
return false;
|
|
869
874
|
});
|
|
870
875
|
const $name = computed(() => fieldName);
|
|
876
|
+
const $inactive = computed(() => {
|
|
877
|
+
if (isEmpty($rules.value)) {
|
|
878
|
+
return true;
|
|
879
|
+
}
|
|
880
|
+
return false;
|
|
881
|
+
});
|
|
871
882
|
const $valid = computed(() => {
|
|
872
883
|
if (externalErrors?.value?.length) {
|
|
873
884
|
return false;
|
|
874
|
-
} else if (
|
|
885
|
+
} else if ($inactive.value) {
|
|
875
886
|
return false;
|
|
876
887
|
} else if ($dirty.value && !isEmpty(state.value) && !$validating2.value) {
|
|
877
888
|
return Object.values($rules.value).every((ruleResult) => {
|
|
@@ -908,7 +919,8 @@ function createReactiveFieldStatus({
|
|
|
908
919
|
$silentErrors,
|
|
909
920
|
$anyDirty,
|
|
910
921
|
$tooltips,
|
|
911
|
-
$name
|
|
922
|
+
$name,
|
|
923
|
+
$inactive
|
|
912
924
|
})
|
|
913
925
|
);
|
|
914
926
|
});
|
|
@@ -919,8 +931,8 @@ function createReactiveFieldStatus({
|
|
|
919
931
|
}
|
|
920
932
|
}
|
|
921
933
|
const $shortcuts2 = {};
|
|
922
|
-
watch($
|
|
923
|
-
if (value) {
|
|
934
|
+
watch($invalid, (value) => {
|
|
935
|
+
if (!value) {
|
|
924
936
|
triggerPunishment.value = false;
|
|
925
937
|
}
|
|
926
938
|
});
|
|
@@ -946,7 +958,8 @@ function createReactiveFieldStatus({
|
|
|
946
958
|
$dirty,
|
|
947
959
|
triggerPunishment,
|
|
948
960
|
processShortcuts,
|
|
949
|
-
$silentValue
|
|
961
|
+
$silentValue,
|
|
962
|
+
$inactive
|
|
950
963
|
};
|
|
951
964
|
});
|
|
952
965
|
define$watchState();
|
|
@@ -1162,7 +1175,7 @@ function createReactiveCollectionStatus({
|
|
|
1162
1175
|
let immediateScopeState;
|
|
1163
1176
|
let collectionScopes = [];
|
|
1164
1177
|
if (!Array.isArray(state.value) && !rulesDef.value.$each) {
|
|
1165
|
-
return
|
|
1178
|
+
return void 0;
|
|
1166
1179
|
}
|
|
1167
1180
|
const $id = ref();
|
|
1168
1181
|
const $value = ref(state.value);
|
|
@@ -1539,7 +1552,7 @@ function createReactiveNestedStatus({
|
|
|
1539
1552
|
let $unwatchRules = null;
|
|
1540
1553
|
let $unwatchExternalErrors = null;
|
|
1541
1554
|
let $unwatchState = null;
|
|
1542
|
-
async function createReactiveFieldsStatus(
|
|
1555
|
+
async function createReactiveFieldsStatus(watchSources = true) {
|
|
1543
1556
|
const mapOfRulesDef = Object.entries(rulesDef.value);
|
|
1544
1557
|
const scopedRulesStatus = Object.fromEntries(
|
|
1545
1558
|
mapOfRulesDef.filter(([_, rule]) => !!rule).map(([statePropKey, statePropRules]) => {
|
|
@@ -1602,7 +1615,7 @@ function createReactiveNestedStatus({
|
|
|
1602
1615
|
...externalRulesStatus,
|
|
1603
1616
|
...statesWithNoRules
|
|
1604
1617
|
};
|
|
1605
|
-
if (
|
|
1618
|
+
if (watchSources) {
|
|
1606
1619
|
$watch();
|
|
1607
1620
|
}
|
|
1608
1621
|
}
|
|
@@ -1668,24 +1681,33 @@ function createReactiveNestedStatus({
|
|
|
1668
1681
|
}
|
|
1669
1682
|
});
|
|
1670
1683
|
const $dirty = computed(() => {
|
|
1671
|
-
return !!Object.entries($fields.value).length && Object.entries($fields.value).every(([
|
|
1684
|
+
return !!Object.entries($fields.value).length && Object.entries($fields.value).every(([_, statusOrField]) => {
|
|
1672
1685
|
return statusOrField?.$dirty;
|
|
1673
1686
|
});
|
|
1674
1687
|
});
|
|
1675
1688
|
const $anyDirty = computed(() => {
|
|
1676
|
-
return Object.entries($fields.value).some(([
|
|
1689
|
+
return Object.entries($fields.value).some(([_, statusOrField]) => {
|
|
1677
1690
|
return statusOrField?.$anyDirty;
|
|
1678
1691
|
});
|
|
1679
1692
|
});
|
|
1680
1693
|
const $invalid = computed(() => {
|
|
1681
|
-
return Object.entries($fields.value).some(([
|
|
1694
|
+
return Object.entries($fields.value).some(([_, statusOrField]) => {
|
|
1682
1695
|
return statusOrField?.$invalid;
|
|
1683
1696
|
});
|
|
1684
1697
|
});
|
|
1685
1698
|
const $valid = computed(() => {
|
|
1686
|
-
|
|
1687
|
-
|
|
1699
|
+
const fields = Object.entries($fields.value).filter(([_, statusOrField]) => {
|
|
1700
|
+
if (isFieldStatus(statusOrField)) {
|
|
1701
|
+
return !statusOrField.$inactive;
|
|
1702
|
+
}
|
|
1703
|
+
return true;
|
|
1688
1704
|
});
|
|
1705
|
+
if (fields.length) {
|
|
1706
|
+
return fields.every(([_, statusOrField]) => {
|
|
1707
|
+
return statusOrField?.$valid;
|
|
1708
|
+
});
|
|
1709
|
+
}
|
|
1710
|
+
return false;
|
|
1689
1711
|
});
|
|
1690
1712
|
const $error = computed(() => $anyDirty.value && !$pending.value && $invalid.value);
|
|
1691
1713
|
const $ready = computed(() => {
|
|
@@ -1888,12 +1910,31 @@ function createReactiveChildrenStatus({
|
|
|
1888
1910
|
externalErrors,
|
|
1889
1911
|
...properties
|
|
1890
1912
|
});
|
|
1891
|
-
} else if (isNestedRulesDef(properties.state, rulesDef)
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1913
|
+
} else if (isNestedRulesDef(properties.state, rulesDef)) {
|
|
1914
|
+
if (isRefObject(properties.state)) {
|
|
1915
|
+
return createReactiveNestedStatus({
|
|
1916
|
+
rulesDef,
|
|
1917
|
+
externalErrors,
|
|
1918
|
+
...properties
|
|
1919
|
+
});
|
|
1920
|
+
} else {
|
|
1921
|
+
const fakeState = ref({});
|
|
1922
|
+
const unwatchState = watch(
|
|
1923
|
+
fakeState,
|
|
1924
|
+
(value) => {
|
|
1925
|
+
unwatchState();
|
|
1926
|
+
properties.state.value = value;
|
|
1927
|
+
},
|
|
1928
|
+
{ deep: true }
|
|
1929
|
+
);
|
|
1930
|
+
const { state, ...restProperties } = properties;
|
|
1931
|
+
return createReactiveNestedStatus({
|
|
1932
|
+
rulesDef,
|
|
1933
|
+
externalErrors,
|
|
1934
|
+
...restProperties,
|
|
1935
|
+
state: fakeState
|
|
1936
|
+
});
|
|
1937
|
+
}
|
|
1897
1938
|
} else if (isValidatorRulesDef(rulesDef)) {
|
|
1898
1939
|
return createReactiveFieldStatus({
|
|
1899
1940
|
rulesDef,
|
|
@@ -1901,7 +1942,7 @@ function createReactiveChildrenStatus({
|
|
|
1901
1942
|
...properties
|
|
1902
1943
|
});
|
|
1903
1944
|
}
|
|
1904
|
-
return
|
|
1945
|
+
return void 0;
|
|
1905
1946
|
}
|
|
1906
1947
|
|
|
1907
1948
|
// src/core/useRegle/root/useRootStorage.ts
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@regle/core",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.10",
|
|
4
4
|
"description": "Type safe form validation library for Vue 3",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"vue": "^3.3.0"
|
|
7
7
|
},
|
|
8
8
|
"devDependencies": {
|
|
9
9
|
"@total-typescript/ts-reset": "0.6.1",
|
|
10
|
-
"@types/node": "22.10.
|
|
11
|
-
"@typescript-eslint/eslint-plugin": "8.19.
|
|
12
|
-
"@typescript-eslint/parser": "8.19.
|
|
10
|
+
"@types/node": "22.10.5",
|
|
11
|
+
"@typescript-eslint/eslint-plugin": "8.19.1",
|
|
12
|
+
"@typescript-eslint/parser": "8.19.1",
|
|
13
13
|
"@vue/test-utils": "2.4.6",
|
|
14
|
-
"bumpp": "9.
|
|
14
|
+
"bumpp": "9.10.0",
|
|
15
15
|
"changelogithub": "0.13.11",
|
|
16
16
|
"cross-env": "7.0.3",
|
|
17
17
|
"eslint": "9.15.0",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"expect-type": "1.1.0",
|
|
21
21
|
"prettier": "3.3.3",
|
|
22
22
|
"tsup": "8.3.5",
|
|
23
|
-
"type-fest": "4.
|
|
23
|
+
"type-fest": "4.32.0",
|
|
24
24
|
"typescript": "5.6.3",
|
|
25
25
|
"vitest": "2.1.8",
|
|
26
26
|
"vue": "3.5.13",
|