@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.
@@ -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(state.value) && isObject(rules.value) && !Object.entries(rules.value).some((rule) => isRuleDef(rule));
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 (isEmpty($rules.value)) {
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($valid, (value) => {
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 null;
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(watch5 = true) {
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 (watch5) {
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(([key, statusOrField]) => {
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(([key, statusOrField]) => {
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(([key, statusOrField]) => {
1696
+ return Object.entries($fields.value).some(([_, statusOrField]) => {
1684
1697
  return statusOrField?.$invalid;
1685
1698
  });
1686
1699
  });
1687
1700
  const $valid = vue.computed(() => {
1688
- return Object.entries($fields.value).every(([key, statusOrField]) => {
1689
- return statusOrField?.$valid;
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) && isRefObject(properties.state)) {
1894
- return createReactiveNestedStatus({
1895
- rulesDef,
1896
- externalErrors,
1897
- ...properties
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 null;
1947
+ return void 0;
1907
1948
  }
1908
1949
 
1909
1950
  // src/core/useRegle/root/useRootStorage.ts
@@ -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
- interface Settings {
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>]: RegleValidationErrors<UnwrapNestedRefs<TState>[K]>;
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>]?: RegleValidationErrors<UnwrapNestedRefs<TState>[K], true>;
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 };
@@ -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
- interface Settings {
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>]: RegleValidationErrors<UnwrapNestedRefs<TState>[K]>;
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>]?: RegleValidationErrors<UnwrapNestedRefs<TState>[K], true>;
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 };
@@ -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=Ce;exports.createRule=Pe;exports.defineRegleConfig=gt;exports.inferRules=We;exports.unwrapRuleParameters=B;exports.useRegle=$t;exports.useRootStorage=ce;
1
+ 'use strict';var vue=require('vue');function B(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var tt=Symbol("regle-rule");function xt(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function q(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>q(n)))),r=="Map"&&(t=new Map([...e].map(n=>[q(n[0]),q(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,xt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=q(e[n]);}return t}function Z(e){return e instanceof Date||e instanceof File?!1:typeof e=="object"&&e!==null&&!Array.isArray(e)}var we=(r=>(r.Inline="__inline",r.Async="__async",r))(we||{});function rt(e,t){return e.some(r=>r[t])}function nt(e,t){return e.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[])}function L(e){try{return e.map(t=>vue.toValue(t))}catch{return []}}function at(e){return e.map(t=>t instanceof Function?vue.computed(t):vue.isRef(t)?t:vue.toRef(()=>t))}function lt(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(y=>y.trim()).filter(y=>y.length>0).length:0}function Oe(e,...t){let{validator:r,type:n}=e,a=n==="__async"||r.constructor.name==="AsyncFunction";return {...{validator(d,...h){return e.validator(d,...L(h.length?h:t))},message(d){return typeof e.message=="function"?e.message({...d,$params:L(d?.$params?.length?d.$params:t)}):e.message},active(d){return typeof e.active=="function"?e.active({...d,$params:L(d?.$params?.length?d.$params:t)}):e.active??!0},tooltip(d){return typeof e.tooltip=="function"?e.tooltip({...d,$params:L(d?.$params?.length?d.$params:t)}):e.tooltip??[]},exec(d){let h=e.validator(d,...L(t)),$;return h instanceof Promise?h.then(D=>($=D,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)):($=h,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:a,_params:at(t),_brand:tt}}function Ae(e){if(typeof e.validator=="function"){let r=Oe(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(lt(e.validator)>1){let a=function(...f){return Oe(e,...f)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.tooltip=r.tooltip,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._tooltip=r.tooltip,a._type=e.type,a._message_pacthed=!1,a._tooltip_pacthed=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function Fe(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),a=vue.shallowRef(new Map),f=vue.shallowRef(new Map);function y(u){let s=t.value.get(u);if(s)return s;{let c=vue.ref({});return t.value.set(u,c),c}}function d(u){let s=r.value.get(u);if(s)return s;{let c=vue.ref([]);return r.value.set(u,c),c}}function h(u,s,c){f.value.set(`${u}-${s}`,c);}function $(u,s){return f.value.get(`${u}-${s}`)}function D(u,s){u&&s!=null&&f.value.delete(`${u}-${s}`);}function j(u,s){n.value.set(u,s);}function A(u){return n.value.get(u)??!1}function l(u,s){e.value.set(u,s);}function E(u,s){let c=e.value.get(u);return c?C(s,c)?{valid:!0}:{valid:!1}:void 0}function C(u,s){let c=Object.keys(s),V=Object.keys(u);return V.length!==c.length||!V.every(G=>c.includes(G))?!1:V.every(G=>{let P=u[G],b=s[G];return !b||!P||typeof P=="function"||typeof b=="function"||typeof P=="number"||typeof P=="boolean"?!1:P._params?P._params?.every((k,m)=>{if(typeof b=="number"||typeof b=="boolean")return !0;{let I=L(b._params),N=L(P._params);return I?.[m]===N?.[m]}}):!0})}function _(u){let s=a.value.get(u);if(s)return s;{let c=vue.ref(!1),V=vue.ref(!0),W=vue.ref({}),G=vue.ref(!1);return a.value.set(u,{$pending:c,$valid:V,$metadata:W,$validating:G}),{$pending:c,$valid:V,$metadata:W,$validating:G}}}return vue.getCurrentScope()&&vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),f.value.clear();}),{addRuleDeclEntry:l,setDirtyEntry:j,checkRuleDeclEntry:E,getDirtyState:A,trySetRuleStatusRef:_,getFieldsEntry:y,getCollectionsEntry:d,getArrayStatus:$,addArrayStatus:h,deleteArrayStatus:D,arrayStatusStorage:f}}function ge(e){return e.value instanceof Date||e.value instanceof File?!1:Z(e.value)}function Me(e,t,r){let n=vue.effectScope(),a;return e instanceof Function?a=n.run(()=>e(t,r??0)):a=e,{scope:n,unwrapped:a}}function Se(e,t,r){let n,a=(...f)=>new Promise(y=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...f])).then(y);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a}function Mt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let f=Number(r[a]),y=Number(n[a]);if(f>y)return 1;if(y>f)return -1;if(!isNaN(f)&&isNaN(y))return 1;if(isNaN(f)&&!isNaN(y))return -1}return 0}var he=Mt(vue.version,"3.5.0")!==-1;function jt(){return Math.floor(Math.random()*Date.now()).toString()}function be(){return typeof window>"u"?jt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function ot(e,t){return ge(e)||Z(t.value)&&!B(t.value)&&!Object.entries(t.value).some(([r,n])=>Re(n)||typeof n=="function")}function ut(e,t){return !!e.value&&"$each"in e.value||Array.isArray(t.value)}function it(e){return !!e.value&&Z(e.value)}function Re(e){return Z(e)&&"_validator"in e}function pe(e){return typeof e.value!="function"}function st(e){return Z(e)&&"$fields"in e}function ct(e){return !!e&&"$rules"in e}function je({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function ft({field:e}){return Object.entries(e.$rules??{}).map(([t,r])=>r.$tooltip).filter(t=>!!t).reduce((t,r)=>typeof r=="string"?t?.concat([r]):t?.concat(r),[])}function Rt({fieldProperties:e,customMessages:t,rule:r,ruleKey:n,state:a,path:f,storage:y,$debounce:d,modifiers:h}){let $=vue.effectScope(),D={},j,A=vue.ref(!1),{$pending:l,$valid:E,$metadata:C,$validating:_}=y.trySetRuleStatusRef(`${f}.${n}`);function u(){$=vue.effectScope(),D=$.run(()=>{let b=vue.computed(()=>({$value:a.value,$error:e.$error.value,$dirty:e.$dirty.value,$pending:e.$pending.value,$valid:e.$valid.value,$invalid:e.$invalid.value,$rule:{$valid:E.value,$invalid:!E.value,$pending:l.value},$params:x.value,...C.value})),k=vue.computed(()=>pe(r)?typeof r.value.active=="function"?r.value.active(b.value):!!r.value.active:!0);function m(o){let i="",g=t?t[n]?.[o]:void 0;if(g&&(typeof g=="function"?i=g(b.value):i=g),pe(r)){let R=`_${o}_patched`;g&&!r.value[R]||(typeof r.value[o]=="function"?i=r.value[o](b.value):i=r.value[o]??"");}return i}let I=vue.computed(()=>{let o=m("message");return B(o)&&(o="This field is not valid"),o}),N=vue.computed(()=>m("tooltip")),Q=vue.computed(()=>pe(r)&&r.value.type?r.value.type:n),K=vue.computed(()=>pe(r)?r.value.validator:r.value),x=vue.computed(()=>typeof r.value=="function"?[]:L(r.value._params??[])),w=vue.computed(()=>`${f}.${Q.value}`);return {$active:k,$message:I,$type:Q,$validator:K,$params:x,$path:w,$tooltip:N}}),j=vue.watch(D?.$params,()=>{(h.$autoDirty.value||h.$rewardEarly.value&&e.$error.value)&&W();});}u();function s(){E.value=!0,e.$dirty.value&&(l.value=!0);}async function c(){let b=!1;try{let k=D.$validator.value,m=k(a.value,...D.$params.value),I=a.value;s();let N;if(m instanceof Promise?N=await m:N=m,a.value!==I)return !0;if(typeof N=="boolean")b=N;else {let{$valid:Q,...K}=N;b=Q,C.value=K;}}catch{b=!1;}finally{l.value=!1;}return b}let V=Se(c,d??200);async function W(){try{_.value=!0;let b=!1;if(Re(r.value)&&r.value._async)b=await V();else {let k=D.$validator.value,m=k(a.value,...D.$params.value);if(m instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(m!=null)if(typeof m=="boolean")b=m;else {let{$valid:I,...N}=m;b=I,C.value=N;}}return E.value=b,b}catch{return !1}finally{_.value=!1;}}function G(){E.value=!0,C.value={},l.value=!1,_.value=!1,u();}function P(){j(),$.stop(),$=vue.effectScope();}return vue.reactive({...D,$pending:l,$valid:E,$metadata:C,$haveAsync:A,$validating:_,$validate:W,$unwatch:P,$watch:u,$reset:G})}function Ee({state:e,rulesDef:t,customMessages:r,path:n,fieldName:a,storage:f,options:y,externalErrors:d,onUnwatch:h,$isArray:$,initialState:D,shortcuts:j}){let A=vue.effectScope(),l,E=[],C,_,u,s,c=()=>{};function V(){let v=t.value,F=f.checkRuleDeclEntry(n,v);I.value=Object.fromEntries(Object.entries(v).filter(([S])=>S.startsWith("$"))),P(),m.value=Object.fromEntries(Object.entries(t.value).filter(([S])=>!S.startsWith("$")).map(([S,p])=>{if(p){let O=vue.toRef(()=>p);return [S,Rt({fieldProperties:{$dirty:l.$dirty,$error:l.$error,$invalid:l.$invalid,$pending:l.$pending,$valid:l.$valid},modifiers:{$autoDirty:l.$autoDirty,$rewardEarly:l.$rewardEarly},customMessages:r,rule:O,ruleKey:S,state:e,path:n,storage:f,$debounce:I.value.$debounce})]}return []}).filter(S=>!!S.length)),l.processShortcuts(),W(),F?.valid!=null&&(l.$dirty.value=f.getDirtyState(n),l.$dirty.value&&c()),f.addRuleDeclEntry(n,v);}function W(){c=l.$debounce.value?Se(k,l.$debounce.value??l.$haveAnyAsyncRule?100:0):k;}function G(){m.value&&Object.entries(m.value).forEach(([v,F])=>{F.$unwatch();}),u(),l.$dirty.value&&f.setDirtyEntry(n,l.$dirty.value),C?.(),_?.(),A.stop(),A=vue.effectScope(),E.forEach(v=>v.stop()),E=[],h?.(),s?.();}function P(){m.value&&Object.entries(m.value).forEach(([v,F])=>{F.$watch();}),l=A.run(()=>{let v=vue.ref(!1),F=vue.ref(!1),S=vue.computed(()=>v.value),p=vue.computed(()=>I.value.$debounce),O=vue.computed(()=>I.value.$lazy!=null?I.value.$lazy:vue.unref(y.lazy)),X=vue.computed(()=>Be.value===!0?!1:I.value.$rewardEarly!=null?I.value.$rewardEarly:vue.unref(y.rewardEarly)),ve=vue.computed(()=>I.value.$clearExternalErrorsOnChange!=null?I.value.$clearExternalErrorsOnChange:vue.unref(y.clearExternalErrorsOnChange)),Be=vue.computed(()=>I.value.$autoDirty!=null?I.value.$autoDirty:vue.unref(y.autoDirty)),Le=vue.computed(()=>Object.entries(m.value).some(([z,te])=>te.$validating)),He=vue.computed({get:()=>e.value,set(z){C(),e.value=z,b();}}),Ie=vue.computed(()=>fe.value&&!$e.value&&v.value),qe=vue.computed(()=>Ie.value?je({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value}}):[]),ze=vue.computed(()=>ft({field:{$rules:m.value}})),Je=vue.computed(()=>je({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value},silent:!0})),Ye=vue.computed(()=>!(fe.value||$e.value)),$e=vue.computed(()=>F.value||!X.value?Object.entries(m.value).some(([z,te])=>te.$pending):!1),fe=vue.computed(()=>d?.value?.length?!0:B(m.value)?!1:!X.value||X.value&&F.value?Object.entries(m.value).some(([z,te])=>!te.$valid):!1),Qe=vue.computed(()=>a),Pe=vue.computed(()=>!!B(m.value)),Xe=vue.computed(()=>d?.value?.length||Pe.value?!1:v.value&&!B(e.value)&&!Le.value?Object.values(m.value).every(z=>z.$valid&&z.$active):!1),Tt=vue.computed(()=>Object.entries(m.value).some(([z,te])=>te.$haveAsync));function Et(){j?.fields&&Object.entries(j.fields).forEach(([z,te])=>{let Ke=vue.effectScope();Ze[z]=Ke.run(()=>{let et=vue.ref();return vue.watchEffect(()=>{et.value=te(vue.reactive({$dirty:v,$externalErrors:d?.value??[],$value:e,$silentValue:He,$rules:m,$error:Ie,$pending:$e,$invalid:fe,$valid:Xe,$errors:qe,$ready:Ye,$silentErrors:Je,$anyDirty:S,$tooltips:ze,$name:Qe,$inactive:Pe}));}),et}),E.push(Ke);});}let Ze={};return vue.watch(fe,z=>{z||(F.value=!1);}),{$error:Ie,$pending:$e,$invalid:fe,$valid:Xe,$debounce:p,$lazy:O,$errors:qe,$ready:Ye,$silentErrors:Je,$rewardEarly:X,$autoDirty:Be,$clearExternalErrorsOnChange:ve,$anyDirty:S,$name:Qe,$haveAnyAsyncRule:Tt,$shortcuts:Ze,$validating:Le,$tooltips:ze,$dirty:v,triggerPunishment:F,processShortcuts:Et,$silentValue:He,$inactive:Pe}}),b(),u=vue.watch(l.$dirty,()=>{f.setDirtyEntry(n,l.$dirty.value);}),_=vue.watch(l.$valid,v=>{l.$rewardEarly.value&&v&&(l.triggerPunishment.value=!1);}),s=vue.watch(l.$haveAnyAsyncRule,W);}function b(){C=vue.watch(e,()=>{l.$autoDirty.value&&(l.$dirty.value||(l.$dirty.value=!0)),t.value instanceof Function&&V(),(l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&c(),l.$rewardEarly.value!==!0&&l.$clearExternalErrorsOnChange.value&&o();},{deep:$?!0:he?1:!0});}function k(){Object.values(m.value).forEach(v=>{v.$validate();});}let m=vue.ref({}),I=vue.ref({});V();function N(){o(),l.$dirty.value=!1,f.setDirtyEntry(n,!1),Object.entries(m.value).forEach(([v,F])=>{F.$reset();}),!l.$lazy.value&&l.$autoDirty.value&&Object.values(m.value).forEach(v=>v.$validate());}function Q(v=!0,F=!1){l.$dirty.value||(l.$dirty.value=!0),F&&v?(l.$autoDirty.value||l.$rewardEarly.value&&l.$error.value)&&c():v&&c();}async function K(){try{let v=e.value;if(l.triggerPunishment.value=!0,!l.$dirty.value)l.$dirty.value=!0;else if(l.$autoDirty.value&&l.$dirty.value&&!l.$pending.value)return {result:!l.$error.value,data:v};return B(m.value)?{result:!0,data:v}:{result:(await Promise.allSettled(Object.entries(m.value).map(([p,O])=>O.$validate()))).every(p=>p.status==="fulfilled"?p.value===!0:!1),data:v}}catch{return {result:!1,data:e.value}}}function x(){G(),e.value=q(D),N();}function w(v=!0){return l.$dirty.value?e.value:v?{_null:!0}:null}function o(){d?.value?.length&&(d.value=[]);}!l.$lazy.value&&!l.$dirty.value&&l.$autoDirty.value&&c();let{$shortcuts:i,$validating:g,$autoDirty:R,$rewardEarly:T,$clearExternalErrorsOnChange:U,$haveAnyAsyncRule:Y,$debounce:ee,$lazy:ae,...le}=l;return vue.reactive({...le,$externalErrors:d,$value:e,$rules:m,...i,$reset:N,$touch:Q,$validate:K,$unwatch:G,$watch:P,$resetAll:x,$extractDirtyFields:w,$clearExternalErrors:o})}function Ge({$id:e,path:t,index:r,options:n,storage:a,stateValue:f,customMessages:y,rules:d,externalErrors:h,initialState:$,shortcuts:D,fieldName:j}){let A=d.$key?d.$key:be(),l=`${t}.${String(A)}`;typeof f.value=="object"&&f.value!=null&&(f.value.$id?l=`${t}.${f.value.$id}`:Object.defineProperties(f.value,{$id:{value:A,enumerable:!1,configurable:!1,writable:!1}}));let E=ye({state:f,rulesDef:vue.toRef(()=>d),customMessages:y,path:l,storage:a,options:n,externalErrors:vue.toRef(h?.value??[],r),initialState:$?.[r],shortcuts:D,fieldName:j});if(E){let C=f.value?.$id;E.$id=C??String(A),a.addArrayStatus(e,E.$id,E);}return E}function yt({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:f,externalErrors:y,initialState:d,shortcuts:h,fieldName:$}){let D=vue.effectScope(),j,A=vue.effectScope(),l,E=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let C=vue.ref(),_=vue.ref(e.value),u,s=vue.ref({}),c=a.getCollectionsEntry(n);l=A.run(()=>({isPrimitiveArray:vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(i=>typeof i!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(i=>Re(i)):!1)})),V(),P();function V(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(C.value=be(),Object.defineProperties(e.value,{$id:{value:C.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(C.value=e.value.$id)),!l.isPrimitiveArray.value&&(_.value=s.value.$value,Array.isArray(e.value)?c.value=e.value.map((o,i)=>{let{scope:g,unwrapped:R}=Me(t.value.$each,vue.toRef(()=>o),i);g&&E.push(g);let T=Ge({$id:C.value,path:n,customMessages:r,rules:R??{},stateValue:vue.toRef(()=>o),index:i,options:f,storage:a,externalErrors:vue.toRef(y?.value??{},"$each"),initialState:d?.[i],shortcuts:h,fieldName:$});return T||null}).filter(o=>!!o):c.value=[],s.value=Ee({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:f,externalErrors:vue.toRef(y?.value??{},"$self"),$isArray:!0,initialState:d,shortcuts:h,fieldName:$}));}function W(){if(Array.isArray(e.value)){let o=q(c.value);c.value=e.value.map((i,g)=>{let R=vue.toRef(()=>i);if(i.$id&&c.value.find(T=>T.$id===i.$id)){let T=a.getArrayStatus(C.value,i.$id);return T?(T.$value=R,T):null}else {let{scope:T,unwrapped:U}=Me(t.value.$each,R,g);if(T&&E.push(T),U){let Y=Ge({$id:C.value,path:n,customMessages:r,rules:U,stateValue:R,index:g,options:f,storage:a,externalErrors:vue.toRef(y?.value??{},"$each"),initialState:d?.[g],shortcuts:h,fieldName:$});return Y||null}}}).filter(i=>!!i),o.filter(i=>!e.value.find(g=>i.$id===g.$id)).forEach((i,g)=>{a.deleteArrayStatus(C.value,g.toString());});}else c.value=[];}function G(){u=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?V():W();},{deep:he?1:!0,flush:"pre"});}function P(){G(),D=vue.effectScope(),j=D.run(()=>{let o=vue.computed({get:()=>e.value,set(p){u(),e.value=p,G();}}),i=vue.computed(()=>s.value.$dirty&&c.value.every(p=>p.$dirty)),g=vue.computed(()=>s.value.$anyDirty||c.value.some(p=>p.$anyDirty)),R=vue.computed(()=>s.value.$invalid||c.value.some(p=>p.$invalid)),T=vue.computed(()=>(B(s.value.$rules)?!0:s.value.$valid)&&c.value.every(p=>p.$valid)),U=vue.computed(()=>s.value.$error||c.value.some(p=>p.$error)),Y=vue.computed(()=>!(R.value||ee.value)),ee=vue.computed(()=>s.value.$pending||c.value.some(p=>p.$pending)),ae=vue.computed(()=>({$self:s.value.$errors,$each:c.value.map(p=>p.$errors)})),le=vue.computed(()=>({$self:s.value.$silentErrors,$each:c.value.map(p=>p.$silentErrors)})),v=vue.computed(()=>$);function F(){h?.collections&&Object.entries(h?.collections).forEach(([p,O])=>{let X=vue.effectScope();S[p]=X.run(()=>{let ve=vue.ref();return vue.watchEffect(()=>{ve.value=O(vue.reactive({$dirty:i,$error:U,$silentValue:o,$pending:ee,$invalid:R,$valid:T,$errors:ae,$ready:Y,$silentErrors:le,$anyDirty:g,$name:v,$each:c,$field:s,$value:e}));}),ve}),E.push(X);});}let S={};return F(),{$dirty:i,$anyDirty:g,$invalid:R,$valid:T,$error:U,$pending:ee,$errors:ae,$silentErrors:le,$ready:Y,$name:v,$shortcuts:S,$silentValue:o}}),l.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),u());}function b(){u&&u(),s.value&&s.value.$unwatch(),c.value&&c.value.forEach(o=>{"$dirty"in o&&o.$unwatch();}),D.stop(),D=vue.effectScope(),A.stop(),A=vue.effectScope(!0),E.forEach(o=>o.stop()),E=[];}function k(o=!0,i=!1){s.value.$touch(o,i),c.value.forEach(g=>{g.$touch(o,i);});}function m(){s.value.$reset(),c.value.forEach(o=>{o.$reset();});}async function I(){let o=e.value;try{return {result:(await Promise.allSettled([s.value.$validate(),...c.value.map(R=>R.$validate())])).every(R=>R.status==="fulfilled"?R.value.result===!0:!1),data:o}}catch{return {result:!1,data:o}}}function N(){s.value.$clearExternalErrors(),c.value.forEach(o=>{o.$clearExternalErrors();});}function Q(o=!0){let i=c.value.map(g=>{if(st(g))return g.$extractDirtyFields(o)});return o&&i.every(g=>B(g))&&(i=[]),i}function K(){b(),e.value=q(d),m();}let{$shortcuts:x,...w}=j;return vue.reactive({$field:s,...w,...x,$each:c,$value:e,$validate:I,$unwatch:b,$watch:P,$touch:k,$reset:m,$resetAll:K,$extractDirtyFields:Q,$clearExternalErrors:N})}function Ce({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:a,validationGroups:f,initialState:y,fieldName:d,...h}){let $=vue.effectScope(),D,j=[],A=null,l=null,E=null;async function _(x=!0){let w=Object.entries(e.value),o=Object.fromEntries(w.filter(([R,T])=>!!T).map(([R,T])=>{if(T){let U=vue.toRef(t.value,R),Y=vue.toRef(()=>T),ee=vue.toRef(a?.value??{},R);return [R,ye({state:U,rulesDef:Y,path:r?`${r}.${R}`:R,externalErrors:ee,initialState:y?.[R],fieldName:R,...h})]}return []})),i=Object.fromEntries(Object.entries(vue.unref(a)??{}).filter(([R,T])=>!(R in e.value)&&!!T).map(([R])=>{let T=vue.toRef(t.value,R);return [R,ye({state:T,rulesDef:vue.computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:vue.toRef(a?.value??{},R),initialState:y?.[R],fieldName:R,...h})]})),g=Object.fromEntries(Object.entries(t.value).filter(([R])=>!(R in e.value)&&!(R in(i.value??{}))).map(([R])=>{let T=vue.toRef(t.value,R);return [R,ye({state:T,rulesDef:vue.computed(()=>({})),path:r?`${r}.${R}`:R,externalErrors:vue.toRef(a?.value??{},R),initialState:y?.[R],fieldName:R,...h})]}));u.value={...o,...i,...g},x&&G();}let u=h.storage.getFieldsEntry(r);_();function s(){l?.(),Object.values(u.value).forEach(x=>{x.$reset();}),V();}function c(x=!0,w=!1){Object.values(u.value).forEach(o=>{o.$touch(x,w);});}function V(){a?.value&&(l=vue.watch(a,()=>{P(),_();},{deep:!0}));}function W(){E=vue.watch(t,()=>{P(),_(),c(!0,!0);},{flush:"sync"});}function G(){n&&(A?.(),A=vue.watch(n,()=>{P(),_();},{deep:!0,flush:"post"}),V()),W(),$=vue.effectScope(),D=$.run(()=>{let x=vue.computed({get:()=>t.value,set(S){P(),t.value=S,_();}}),w=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([S,p])=>p?.$dirty)),o=vue.computed(()=>Object.entries(u.value).some(([S,p])=>p?.$anyDirty)),i=vue.computed(()=>Object.entries(u.value).some(([S,p])=>p?.$invalid)),g=vue.computed(()=>{let S=Object.entries(u.value).filter(([p,O])=>ct(O)?!O.$inactive:!0);return S.length?S.every(([p,O])=>O?.$valid):!1}),R=vue.computed(()=>o.value&&!U.value&&i.value),T=vue.computed(()=>vue.unref(h.options.autoDirty)?o.value&&!(i.value||U.value):!(i.value||U.value)),U=vue.computed(()=>Object.entries(u.value).some(([S,p])=>p?.$pending)),Y=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([S,p])=>[S,p?.$errors]))),ee=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([S,p])=>[S,p?.$silentErrors]))),ae=vue.computed(()=>d);function le(){h.shortcuts?.nested&&Object.entries(h.shortcuts.nested).forEach(([S,p])=>{let O=vue.effectScope();F[S]=O.run(()=>{let X=vue.ref();return vue.watchEffect(()=>{X.value=p(vue.reactive({$dirty:w,$value:t,$silentValue:x,$error:R,$pending:U,$invalid:i,$valid:g,$ready:T,$anyDirty:o,$name:ae,$silentErrors:ee,$errors:Y,$fields:u}));}),X}),j.push(O);});}let v=vue.computed({get:()=>f?Object.fromEntries(Object.entries(f?.(u.value)??{}).map(([S,p])=>p.length?[S,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(O=>[O,rt(p,O)])),...Object.fromEntries(["$errors","$silentErrors"].map(O=>[O,nt(p,O)]))}]:[])):{},set(){}}),F={};return le(),{$dirty:w,$anyDirty:o,$invalid:i,$valid:g,$error:R,$pending:U,$errors:Y,$silentErrors:ee,$ready:T,$name:ae,$shortcuts:F,$groups:v,$silentValue:x}});}function P(){A?.(),l?.(),E?.(),j.forEach(x=>x.stop()),j=[],$.stop(),u.value&&Object.entries(u.value).forEach(([x,w])=>{w.$unwatch();});}function b(){Object.entries(u.value).forEach(([x,w])=>{w.$clearExternalErrors();});}async function k(){P(),t.value=q({...y??{}}),s(),_();}function m(x){return x.filter(([w,o])=>Z(o)?!(o&&typeof o=="object"&&"_null"in o)&&!B(o):Array.isArray(o)?o.length:!0)}function I(x=!0){let w=Object.entries(u.value).map(([o,i])=>[o,i.$extractDirtyFields(x)]);return x&&(w=m(w)),Object.fromEntries(w)}async function N(){try{let x=t.value;return {result:(await Promise.allSettled(Object.values(u.value).map(i=>i.$validate()))).every(i=>i.status==="fulfilled"?i.value.result===!0:!1),data:x}}catch{return {result:!1,data:t.value}}}let{$shortcuts:Q,...K}=D;return vue.reactive({...K,...Q,$fields:u,$value:t,$resetAll:k,$reset:s,$touch:c,$validate:N,$unwatch:P,$watch:G,$clearExternalErrors:b,$extractDirtyFields:I})}function ye({rulesDef:e,externalErrors:t,...r}){if(ut(e,r.state))return yt({rulesDef:e,externalErrors:t,...r});if(ot(r.state,e)){if(ge(r.state))return Ce({rulesDef:e,externalErrors:t,...r});{let n=vue.ref({}),a=vue.watch(n,d=>{a(),r.state.value=d;},{deep:!0}),{state:f,...y}=r;return Ce({rulesDef:e,externalErrors:t,...y,state:n})}}else if(it(e))return Ee({rulesDef:e,externalErrors:t,...r})}function ce({initialState:e,options:t,scopeRules:r,state:n,customRules:a,shortcuts:f}){let y=Fe(),d=vue.ref();return d.value=Ce({rootRules:r,rulesDef:r,state:n,customMessages:a?.(),storage:y,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:f,fieldName:"root",path:""}),vue.getCurrentScope()&&vue.onScopeDispose(()=>{d.value?.$unwatch();}),vue.reactive({regle:d})}function We(e,t,r){let n={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange??!0};function a(f,y,d){let h=vue.isRef(y)?y:vue.computed(typeof y=="function"?y:()=>y),$={...n,...d},D=vue.isRef(f)?f:vue.ref(f),j={...q(D.value)};return {r$:ce({scopeRules:h,state:D,options:$,initialState:j,customRules:e,shortcuts:r}).regle}}return a}var ht=We();function ke(){function e(t,r){return r}return e}var Ue=ke();function bt({rules:e,modifiers:t,shortcuts:r}){let n=We(e,t,r),a=ke();return {useRegle:n,inferRules:a}}
2
+ exports.InternalRuleType=we;exports.createRule=Ae;exports.defineRegleConfig=bt;exports.inferRules=Ue;exports.unwrapRuleParameters=L;exports.useRegle=ht;exports.useRootStorage=ce;
@@ -1,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{Ce as InternalRuleType,Pe as createRule,gt as defineRegleConfig,We as inferRules,B as unwrapRuleParameters,$t as useRegle,ce as useRootStorage};
1
+ import {toValue,version,ref,getCurrentScope,onScopeDispose,reactive,shallowRef,effectScope,computed,isRef,toRef,unref,watch,watchEffect}from'vue';function B(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var 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};
@@ -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(state.value) && isObject(rules.value) && !Object.entries(rules.value).some((rule) => isRuleDef(rule));
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 (isEmpty($rules.value)) {
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($valid, (value) => {
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 null;
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(watch5 = true) {
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 (watch5) {
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(([key, statusOrField]) => {
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(([key, statusOrField]) => {
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(([key, statusOrField]) => {
1694
+ return Object.entries($fields.value).some(([_, statusOrField]) => {
1682
1695
  return statusOrField?.$invalid;
1683
1696
  });
1684
1697
  });
1685
1698
  const $valid = computed(() => {
1686
- return Object.entries($fields.value).every(([key, statusOrField]) => {
1687
- return statusOrField?.$valid;
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) && isRefObject(properties.state)) {
1892
- return createReactiveNestedStatus({
1893
- rulesDef,
1894
- externalErrors,
1895
- ...properties
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 null;
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.9",
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.2",
11
- "@typescript-eslint/eslint-plugin": "8.19.0",
12
- "@typescript-eslint/parser": "8.19.0",
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.9.2",
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.31.0",
23
+ "type-fest": "4.32.0",
24
24
  "typescript": "5.6.3",
25
25
  "vitest": "2.1.8",
26
26
  "vue": "3.5.13",