@regle/core 0.7.2 → 0.7.4-beta.1

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.
@@ -3,7 +3,7 @@
3
3
  var vue = require('vue');
4
4
 
5
5
  // ../shared/utils/isEmpty.ts
6
- function isEmpty(value) {
6
+ function isEmpty(value, considerEmptyArrayInvalid = true) {
7
7
  if (value === undefined || value === null) {
8
8
  return true;
9
9
  }
@@ -11,6 +11,9 @@ function isEmpty(value) {
11
11
  return isNaN(value.getTime());
12
12
  }
13
13
  if (Array.isArray(value)) {
14
+ if (considerEmptyArrayInvalid) {
15
+ return value.length === 0;
16
+ }
14
17
  return false;
15
18
  }
16
19
  if (typeof value === "object" && value != null) {
@@ -2255,11 +2258,199 @@ function defineRegleConfig({
2255
2258
  const inferRules2 = createInferRuleHelper();
2256
2259
  return { useRegle: useRegle2, inferRules: inferRules2 };
2257
2260
  }
2261
+ function mergeRegles(regles, _nested) {
2262
+ const nested = _nested == null ? false : _nested;
2263
+ const $value = vue.computed({
2264
+ get: () => Object.fromEntries(Object.entries(regles).map(([key, r]) => [key, r.$value])),
2265
+ set: (value) => {
2266
+ if (typeof value === "object") {
2267
+ Object.entries(value).forEach(([key, newValue]) => regles[key].$value = newValue);
2268
+ }
2269
+ }
2270
+ });
2271
+ const $silentValue = vue.computed({
2272
+ get: () => Object.fromEntries(Object.entries(regles).map(([key, r]) => [key, r.$silentValue])),
2273
+ set: (value) => {
2274
+ if (typeof value === "object") {
2275
+ Object.entries(value).forEach(([key, newValue]) => regles[key].$silentValue = newValue);
2276
+ }
2277
+ }
2278
+ });
2279
+ const $dirty = vue.computed(() => {
2280
+ return Object.entries(regles).every(([_, regle]) => {
2281
+ return regle?.$dirty;
2282
+ });
2283
+ });
2284
+ const $anyDirty = vue.computed(() => {
2285
+ return Object.entries(regles).some(([_, regle]) => {
2286
+ return regle?.$anyDirty;
2287
+ });
2288
+ });
2289
+ const $invalid = vue.computed(() => {
2290
+ return Object.entries(regles).some(([_, regle]) => {
2291
+ return regle?.$invalid;
2292
+ });
2293
+ });
2294
+ const $valid = vue.computed(() => {
2295
+ return Object.entries(regles).every(([_, regle]) => {
2296
+ return regle?.$invalid;
2297
+ });
2298
+ });
2299
+ const $error = vue.computed(() => {
2300
+ return Object.entries(regles).some(([_, regle]) => {
2301
+ return regle?.$error;
2302
+ });
2303
+ });
2304
+ const $ready = vue.computed(() => {
2305
+ return Object.entries(regles).every(([_, regle]) => {
2306
+ return regle?.$ready;
2307
+ });
2308
+ });
2309
+ const $pending = vue.computed(() => {
2310
+ return Object.entries(regles).some(([_, regle]) => {
2311
+ return regle?.$pending;
2312
+ });
2313
+ });
2314
+ const $errors = vue.computed(() => {
2315
+ return Object.fromEntries(
2316
+ Object.entries(regles).map(([key, regle]) => {
2317
+ return [key, regle.$errors];
2318
+ })
2319
+ );
2320
+ });
2321
+ const $silentErrors = vue.computed(() => {
2322
+ return Object.fromEntries(
2323
+ Object.entries(regles).map(([key, regle]) => {
2324
+ return [key, regle.$silentErrors];
2325
+ })
2326
+ );
2327
+ });
2328
+ const $edited = vue.computed(() => {
2329
+ return Object.entries(regles).every(([_, regle]) => {
2330
+ return regle?.$edited;
2331
+ });
2332
+ });
2333
+ const $anyEdited = vue.computed(() => {
2334
+ return Object.entries(regles).some(([_, regle]) => {
2335
+ return regle?.$anyEdited;
2336
+ });
2337
+ });
2338
+ const $instances = vue.computed(() => {
2339
+ return regles;
2340
+ });
2341
+ function $reset() {
2342
+ Object.values(regles).forEach((regle) => {
2343
+ regle.$reset();
2344
+ });
2345
+ }
2346
+ function $touch() {
2347
+ Object.values(regles).forEach((regle) => {
2348
+ regle.$touch();
2349
+ });
2350
+ }
2351
+ function $resetAll() {
2352
+ Object.values(regles).forEach((regle) => {
2353
+ regle.$resetAll();
2354
+ });
2355
+ }
2356
+ function $extractDirtyFields(filterNullishValues = true) {
2357
+ return Object.values(regles).map((regle) => regle.$extractDirtyFields(filterNullishValues));
2358
+ }
2359
+ function $clearExternalErrors() {
2360
+ Object.values(regles).forEach((regle) => {
2361
+ regle.$clearExternalErrors();
2362
+ });
2363
+ }
2364
+ async function $validate() {
2365
+ try {
2366
+ const data = $value.value;
2367
+ const results = await Promise.allSettled(
2368
+ Object.values(regles).map((regle) => {
2369
+ return regle.$validate();
2370
+ })
2371
+ );
2372
+ const validationResults = results.every((value) => {
2373
+ if (value.status === "fulfilled") {
2374
+ return value.value.result === true;
2375
+ } else {
2376
+ return false;
2377
+ }
2378
+ });
2379
+ return { result: validationResults, data };
2380
+ } catch (e) {
2381
+ return { result: false, data: $value.value };
2382
+ }
2383
+ }
2384
+ return vue.reactive({
2385
+ ...!nested && {
2386
+ $instances,
2387
+ $value,
2388
+ $silentValue,
2389
+ $errors,
2390
+ $silentErrors
2391
+ },
2392
+ $dirty,
2393
+ $anyDirty,
2394
+ $invalid,
2395
+ $valid,
2396
+ $error,
2397
+ $pending,
2398
+ $ready,
2399
+ $edited,
2400
+ $anyEdited,
2401
+ $resetAll,
2402
+ $reset,
2403
+ $touch,
2404
+ $validate,
2405
+ $extractDirtyFields,
2406
+ $clearExternalErrors
2407
+ });
2408
+ }
2409
+ function createUseCollectNestedValidations(instances) {
2410
+ function useCollectNestedValidations() {
2411
+ const r$ = vue.ref(mergeRegles(instances.value, true));
2412
+ const regle = vue.reactive({ r$ });
2413
+ vue.watch(instances, (newInstances) => {
2414
+ r$.value = mergeRegles(newInstances, true);
2415
+ });
2416
+ return { r$: regle.r$ };
2417
+ }
2418
+ return { useCollectNestedValidations };
2419
+ }
2420
+ function createUseNestedRegleComposable(customUseRegle) {
2421
+ const scopedUseRegle = customUseRegle ?? useRegle;
2422
+ const instances = vue.ref({});
2423
+ const useNestedRegle = (state, rulesFactory, options) => {
2424
+ const $id = randomId();
2425
+ const { r$ } = scopedUseRegle(state, rulesFactory, options);
2426
+ instances.value[$id] = r$;
2427
+ vue.onScopeDispose(() => {
2428
+ delete instances.value[$id];
2429
+ });
2430
+ function $dispose() {
2431
+ delete instances.value[$id];
2432
+ }
2433
+ return { r$, $dispose };
2434
+ };
2435
+ return { useNestedRegle, instances };
2436
+ }
2437
+
2438
+ // src/core/createNestedUseRegle/createNestedUseRegle.ts
2439
+ function createNestedUseRegle(customUseRegle) {
2440
+ const { instances, useNestedRegle } = createUseNestedRegleComposable(customUseRegle);
2441
+ const { useCollectNestedValidations } = createUseCollectNestedValidations(instances);
2442
+ return {
2443
+ useNestedRegle,
2444
+ useCollectNestedValidations
2445
+ };
2446
+ }
2258
2447
 
2259
2448
  exports.InternalRuleType = InternalRuleType;
2449
+ exports.createNestedUseRegle = createNestedUseRegle;
2260
2450
  exports.createRule = createRule;
2261
2451
  exports.defineRegleConfig = defineRegleConfig;
2262
2452
  exports.inferRules = inferRules;
2453
+ exports.mergeRegles = mergeRegles;
2263
2454
  exports.unwrapRuleParameters = unwrapRuleParameters;
2264
2455
  exports.useRegle = useRegle;
2265
2456
  exports.useRootStorage = useRootStorage;
@@ -4,6 +4,7 @@ type Prettify<T> = T extends infer R ? {
4
4
  [K in keyof R]: R[K];
5
5
  } & {} : never;
6
6
  type Maybe<T = any> = T | null | undefined;
7
+ type PromiseReturn<T> = T extends Promise<infer U> ? U : T;
7
8
  type MaybeGetter<T, V = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V>, index: number) => T & TAdd);
8
9
  type Unwrap<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : UnwrapNestedRefs<T>;
9
10
  type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends ((value: Ref<any>, index: number) => infer U extends Record<string, any>) ? U : T;
@@ -536,14 +537,14 @@ type AddDollarToOptions<T extends Record<string, any>> = {
536
537
  [K in keyof T as `$${string & K}`]: T[K];
537
538
  };
538
539
 
539
- interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> = EmptyObject, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}, TShortcuts extends RegleShortcutDefinition = {}> {
540
+ type Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> = EmptyObject, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}, TShortcuts extends RegleShortcutDefinition = {}, TAdditionalReturnProperties extends Record<string, any> = {}> = {
540
541
  /**
541
542
  * r$ is a reactive object containing the values, errors, dirty state and all the necessary validations properties you'll need to display informations.
542
543
  *
543
544
  * To see the list of properties: {@link https://reglejs.dev/core-concepts/validation-properties}
544
545
  */
545
546
  r$: Raw<RegleRoot<TState, TRules, TValidationGroups, TShortcuts>>;
546
- }
547
+ } & TAdditionalReturnProperties;
547
548
  type isDeepExact<T, U> = {
548
549
  [K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
549
550
  }[keyof T] extends true ? true : false;
@@ -568,7 +569,7 @@ type IsPropertyOutputRequired<TState, TRule extends RegleFormPropertyType<any, a
568
569
  ] extends [TState] ? unknown : NonNullable<TState> extends Array<any> ? TRule extends RegleCollectionRuleDecl<any, any> ? ArrayHaveAtLeastOneRequiredField<NonNullable<TState>, TRule> extends false ? false : true : false : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? ObjectHaveAtLeastOneRequiredField<NonNullable<TState> extends Record<string, any> ? NonNullable<TState> : {}, TRule> extends false ? false : true : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends false ? false : true : false : false;
569
570
  type SafeFieldProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? Maybe<TState> : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? Maybe<TState> : Maybe<TState> : Maybe<TState> : Maybe<TState>;
570
571
 
571
- type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : MismatchInfo<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>>>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TValidationGroups, TShortcuts>;
572
+ type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never, TAdditionalReturnProperties extends Record<string, any> = {}> = <TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : MismatchInfo<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>>>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TValidationGroups, TShortcuts, TAdditionalReturnProperties>;
572
573
  /**
573
574
  * useRegle serves as the foundation for validation logic.
574
575
  *
@@ -588,7 +589,7 @@ type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts e
588
589
  * ```
589
590
  * Docs: {@link https://reglejs.dev/core-concepts/}
590
591
  */
591
- declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>, RegleShortcutDefinition<any>>;
592
+ declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>, RegleShortcutDefinition<any>, {}>;
592
593
 
593
594
  interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
594
595
  <TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : MismatchInfo<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>>>(state: MaybeRef<TState> | DeepReactiveState<TState> | undefined, rulesFactory: TRules): NoInferLegacy<TRules>;
@@ -1258,6 +1259,7 @@ type DefaultValidators = {
1258
1259
  required: RegleRuleDefinition<unknown, []>;
1259
1260
  sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown, otherName?: string], false, boolean>;
1260
1261
  startsWith: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
1262
+ exactValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
1261
1263
  url: RegleRuleDefinition<string, [], false, boolean, string>;
1262
1264
  };
1263
1265
 
@@ -1400,6 +1402,21 @@ type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules
1400
1402
  readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
1401
1403
  };
1402
1404
  });
1405
+ /** Supports both core Regle and schemas Regle for Zod/Valibot */
1406
+ type SuperCompatibleRegleRoot = SuperCompatibleRegleStatus & {
1407
+ $groups?: {
1408
+ [x: string]: RegleValidationGroupOutput;
1409
+ };
1410
+ };
1411
+ interface SuperCompatibleRegleStatus extends RegleCommonStatus {
1412
+ $fields: {
1413
+ [x: string]: unknown;
1414
+ };
1415
+ readonly $errors: Record<string, $InternalRegleErrors>;
1416
+ readonly $silentErrors: Record<string, $InternalRegleErrors>;
1417
+ $extractDirtyFields: (filterNullishValues?: boolean) => Record<string, any>;
1418
+ $validate: () => Promise<$InternalRegleResult>;
1419
+ }
1403
1420
  /**
1404
1421
  * @public
1405
1422
  */
@@ -1696,4 +1713,57 @@ declare function defineRegleConfig<TShortcuts extends RegleShortcutDefinition<TC
1696
1713
  inferRules: inferRulesFn<TCustomRules>;
1697
1714
  };
1698
1715
 
1699
- export { type $InternalRegleStatus, type AllRulesDeclarations, type DeepMaybeRef, type DeepReactiveState, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InlineRuleDeclaration, InternalRuleType, type JoinDiscriminatedUnions, type LocalRegleBehaviourOptions, type Maybe, type MismatchInfo, 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 };
1716
+ type MergedRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TValue = {
1717
+ [K in keyof TRegles]: TRegles[K]['$value'];
1718
+ }> = Omit<RegleCommonStatus, '$value' | '$silentValue' | '$errors' | '$silentErrors' | '$name' | '$unwatch' | '$watch'> & {
1719
+ /** Dictionnay of merged Regle instances and their properties */
1720
+ readonly $instances: {
1721
+ [K in keyof TRegles]: TRegles[K];
1722
+ };
1723
+ /** A reference to the original validated model. It can be used to bind your form with v-model.*/
1724
+ $value: TValue;
1725
+ /** $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. */
1726
+ $silentValue: TValue;
1727
+ /** Collection of all the error messages, collected for all children properties and nested forms.
1728
+ *
1729
+ * Only contains errors from properties where $dirty equals true. */
1730
+ readonly $errors: {
1731
+ [K in keyof TRegles]: TRegles[K]['$errors'];
1732
+ };
1733
+ /** Collection of all the error messages, collected for all children properties. */
1734
+ readonly $silentErrors: {
1735
+ [K in keyof TRegles]: TRegles[K]['$silentErrors'];
1736
+ };
1737
+ /** 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). */
1738
+ $extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TValue>;
1739
+ /** 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). */
1740
+ $validate: () => Promise<MergedReglesResult<TRegles>>;
1741
+ };
1742
+ type MergedNestedRegles<TValue extends Record<string, any> = Record<string, unknown>> = Omit<MergedRegles<Record<string, SuperCompatibleRegleRoot>, TValue>, '$instances' | '$errors' | '$silentErrors' | '$value' | '$silentValue'>;
1743
+ type MergedReglesResult<TRegles extends Record<string, SuperCompatibleRegleRoot>> = {
1744
+ result: false;
1745
+ data: {
1746
+ [K in keyof TRegles]: Extract<PromiseReturn<ReturnType<TRegles[K]['$validate']>>, {
1747
+ result: false;
1748
+ }>['data'];
1749
+ };
1750
+ } | {
1751
+ result: true;
1752
+ data: {
1753
+ [K in keyof TRegles]: Extract<PromiseReturn<ReturnType<TRegles[K]['$validate']>>, {
1754
+ result: true;
1755
+ }>['data'];
1756
+ };
1757
+ };
1758
+ declare function mergeRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TNested extends boolean = false>(regles: TRegles, _nested?: TNested): TNested extends false ? MergedRegles<TRegles> : MergedNestedRegles;
1759
+
1760
+ declare function createNestedUseRegle<TCustomRegle extends useRegleFn<any, any> = useRegleFn<Partial<AllRulesDeclarations>>, TReturnedRegle extends useRegleFn<any, any> = TCustomRegle extends useRegleFn<infer A, infer B> ? useRegleFn<A, B, {
1761
+ $dispose: () => void;
1762
+ }> : useRegleFn<Partial<AllRulesDeclarations>>>(customUseRegle?: TCustomRegle): {
1763
+ useNestedRegle: TReturnedRegle;
1764
+ useCollectNestedValidations<TValue extends Record<string, any> = Record<string, unknown>>(): {
1765
+ r$: MergedNestedRegles<TValue>;
1766
+ };
1767
+ };
1768
+
1769
+ export { type $InternalRegleStatus, type AllRulesDeclarations, type DeepMaybeRef, type DeepReactiveState, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InlineRuleDeclaration, InternalRuleType, type JoinDiscriminatedUnions, type LocalRegleBehaviourOptions, type Maybe, type MergedRegles, type MismatchInfo, 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, createNestedUseRegle, createRule, defineRegleConfig, inferRules, mergeRegles, unwrapRuleParameters, useRegle, useRootStorage };
@@ -4,6 +4,7 @@ type Prettify<T> = T extends infer R ? {
4
4
  [K in keyof R]: R[K];
5
5
  } & {} : never;
6
6
  type Maybe<T = any> = T | null | undefined;
7
+ type PromiseReturn<T> = T extends Promise<infer U> ? U : T;
7
8
  type MaybeGetter<T, V = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V>, index: number) => T & TAdd);
8
9
  type Unwrap<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : UnwrapNestedRefs<T>;
9
10
  type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends ((value: Ref<any>, index: number) => infer U extends Record<string, any>) ? U : T;
@@ -536,14 +537,14 @@ type AddDollarToOptions<T extends Record<string, any>> = {
536
537
  [K in keyof T as `$${string & K}`]: T[K];
537
538
  };
538
539
 
539
- interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> = EmptyObject, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}, TShortcuts extends RegleShortcutDefinition = {}> {
540
+ type Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialRuleTree<TState, CustomRulesDeclarationTree> = EmptyObject, TValidationGroups extends Record<string, RegleValidationGroupEntry[]> = {}, TShortcuts extends RegleShortcutDefinition = {}, TAdditionalReturnProperties extends Record<string, any> = {}> = {
540
541
  /**
541
542
  * r$ is a reactive object containing the values, errors, dirty state and all the necessary validations properties you'll need to display informations.
542
543
  *
543
544
  * To see the list of properties: {@link https://reglejs.dev/core-concepts/validation-properties}
544
545
  */
545
546
  r$: Raw<RegleRoot<TState, TRules, TValidationGroups, TShortcuts>>;
546
- }
547
+ } & TAdditionalReturnProperties;
547
548
  type isDeepExact<T, U> = {
548
549
  [K in keyof T]-?: CheckDeepExact<NonNullable<T[K]>, K extends keyof U ? NonNullable<U[K]> : never>;
549
550
  }[keyof T] extends true ? true : false;
@@ -568,7 +569,7 @@ type IsPropertyOutputRequired<TState, TRule extends RegleFormPropertyType<any, a
568
569
  ] extends [TState] ? unknown : NonNullable<TState> extends Array<any> ? TRule extends RegleCollectionRuleDecl<any, any> ? ArrayHaveAtLeastOneRequiredField<NonNullable<TState>, TRule> extends false ? false : true : false : TRule extends ReglePartialRuleTree<any, any> ? ExtendOnlyRealRecord<TState> extends true ? ObjectHaveAtLeastOneRequiredField<NonNullable<TState> extends Record<string, any> ? NonNullable<TState> : {}, TRule> extends false ? false : true : TRule extends RegleRuleDecl<any, any> ? FieldHaveRequiredRule<TRule> extends false ? false : true : false : false;
569
570
  type SafeFieldProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? Maybe<TState> : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params, any, any, any> ? Params extends never[] ? Maybe<TState> : Maybe<TState> : Maybe<TState> : Maybe<TState>;
570
571
 
571
- type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> = <TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : MismatchInfo<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>>>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TValidationGroups, TShortcuts>;
572
+ type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never, TAdditionalReturnProperties extends Record<string, any> = {}> = <TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : MismatchInfo<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>>>(state: MaybeRef<TState> | DeepReactiveState<TState>, rulesFactory: MaybeRefOrGetter<TRules>, options?: Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Unwrap<TState>, TRules, TValidationGroups>) => Regle<Unwrap<TState>, TRules, TValidationGroups, TShortcuts, TAdditionalReturnProperties>;
572
573
  /**
573
574
  * useRegle serves as the foundation for validation logic.
574
575
  *
@@ -588,7 +589,7 @@ type useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts e
588
589
  * ```
589
590
  * Docs: {@link https://reglejs.dev/core-concepts/}
590
591
  */
591
- declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>, RegleShortcutDefinition<any>>;
592
+ declare const useRegle: useRegleFn<Partial<AllRulesDeclarations>, RegleShortcutDefinition<any>, {}>;
592
593
 
593
594
  interface inferRulesFn<TCustomRules extends Partial<AllRulesDeclarations>> {
594
595
  <TState extends Record<string, any>, TRules extends ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules> & TValid, TValid = isDeepExact<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>> extends true ? {} : MismatchInfo<NoInferLegacy<TRules>, ReglePartialRuleTree<Unwrap<TState>, Partial<AllRulesDeclarations> & TCustomRules>>>(state: MaybeRef<TState> | DeepReactiveState<TState> | undefined, rulesFactory: TRules): NoInferLegacy<TRules>;
@@ -1258,6 +1259,7 @@ type DefaultValidators = {
1258
1259
  required: RegleRuleDefinition<unknown, []>;
1259
1260
  sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown, otherName?: string], false, boolean>;
1260
1261
  startsWith: RegleRuleWithParamsDefinition<string, [part: Maybe<string>], false, boolean>;
1262
+ exactValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
1261
1263
  url: RegleRuleDefinition<string, [], false, boolean, string>;
1262
1264
  };
1263
1265
 
@@ -1400,6 +1402,21 @@ type RegleRoot<TState extends Record<string, any> = Record<string, any>, TRules
1400
1402
  readonly [TKey in keyof TValidationGroups]: RegleValidationGroupOutput;
1401
1403
  };
1402
1404
  });
1405
+ /** Supports both core Regle and schemas Regle for Zod/Valibot */
1406
+ type SuperCompatibleRegleRoot = SuperCompatibleRegleStatus & {
1407
+ $groups?: {
1408
+ [x: string]: RegleValidationGroupOutput;
1409
+ };
1410
+ };
1411
+ interface SuperCompatibleRegleStatus extends RegleCommonStatus {
1412
+ $fields: {
1413
+ [x: string]: unknown;
1414
+ };
1415
+ readonly $errors: Record<string, $InternalRegleErrors>;
1416
+ readonly $silentErrors: Record<string, $InternalRegleErrors>;
1417
+ $extractDirtyFields: (filterNullishValues?: boolean) => Record<string, any>;
1418
+ $validate: () => Promise<$InternalRegleResult>;
1419
+ }
1403
1420
  /**
1404
1421
  * @public
1405
1422
  */
@@ -1696,4 +1713,57 @@ declare function defineRegleConfig<TShortcuts extends RegleShortcutDefinition<TC
1696
1713
  inferRules: inferRulesFn<TCustomRules>;
1697
1714
  };
1698
1715
 
1699
- export { type $InternalRegleStatus, type AllRulesDeclarations, type DeepMaybeRef, type DeepReactiveState, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InlineRuleDeclaration, InternalRuleType, type JoinDiscriminatedUnions, type LocalRegleBehaviourOptions, type Maybe, type MismatchInfo, 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 };
1716
+ type MergedRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TValue = {
1717
+ [K in keyof TRegles]: TRegles[K]['$value'];
1718
+ }> = Omit<RegleCommonStatus, '$value' | '$silentValue' | '$errors' | '$silentErrors' | '$name' | '$unwatch' | '$watch'> & {
1719
+ /** Dictionnay of merged Regle instances and their properties */
1720
+ readonly $instances: {
1721
+ [K in keyof TRegles]: TRegles[K];
1722
+ };
1723
+ /** A reference to the original validated model. It can be used to bind your form with v-model.*/
1724
+ $value: TValue;
1725
+ /** $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. */
1726
+ $silentValue: TValue;
1727
+ /** Collection of all the error messages, collected for all children properties and nested forms.
1728
+ *
1729
+ * Only contains errors from properties where $dirty equals true. */
1730
+ readonly $errors: {
1731
+ [K in keyof TRegles]: TRegles[K]['$errors'];
1732
+ };
1733
+ /** Collection of all the error messages, collected for all children properties. */
1734
+ readonly $silentErrors: {
1735
+ [K in keyof TRegles]: TRegles[K]['$silentErrors'];
1736
+ };
1737
+ /** 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). */
1738
+ $extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TValue>;
1739
+ /** 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). */
1740
+ $validate: () => Promise<MergedReglesResult<TRegles>>;
1741
+ };
1742
+ type MergedNestedRegles<TValue extends Record<string, any> = Record<string, unknown>> = Omit<MergedRegles<Record<string, SuperCompatibleRegleRoot>, TValue>, '$instances' | '$errors' | '$silentErrors' | '$value' | '$silentValue'>;
1743
+ type MergedReglesResult<TRegles extends Record<string, SuperCompatibleRegleRoot>> = {
1744
+ result: false;
1745
+ data: {
1746
+ [K in keyof TRegles]: Extract<PromiseReturn<ReturnType<TRegles[K]['$validate']>>, {
1747
+ result: false;
1748
+ }>['data'];
1749
+ };
1750
+ } | {
1751
+ result: true;
1752
+ data: {
1753
+ [K in keyof TRegles]: Extract<PromiseReturn<ReturnType<TRegles[K]['$validate']>>, {
1754
+ result: true;
1755
+ }>['data'];
1756
+ };
1757
+ };
1758
+ declare function mergeRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TNested extends boolean = false>(regles: TRegles, _nested?: TNested): TNested extends false ? MergedRegles<TRegles> : MergedNestedRegles;
1759
+
1760
+ declare function createNestedUseRegle<TCustomRegle extends useRegleFn<any, any> = useRegleFn<Partial<AllRulesDeclarations>>, TReturnedRegle extends useRegleFn<any, any> = TCustomRegle extends useRegleFn<infer A, infer B> ? useRegleFn<A, B, {
1761
+ $dispose: () => void;
1762
+ }> : useRegleFn<Partial<AllRulesDeclarations>>>(customUseRegle?: TCustomRegle): {
1763
+ useNestedRegle: TReturnedRegle;
1764
+ useCollectNestedValidations<TValue extends Record<string, any> = Record<string, unknown>>(): {
1765
+ r$: MergedNestedRegles<TValue>;
1766
+ };
1767
+ };
1768
+
1769
+ export { type $InternalRegleStatus, type AllRulesDeclarations, type DeepMaybeRef, type DeepReactiveState, type FormRuleDeclaration, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InlineRuleDeclaration, InternalRuleType, type JoinDiscriminatedUnions, type LocalRegleBehaviourOptions, type Maybe, type MergedRegles, type MismatchInfo, 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, createNestedUseRegle, createRule, defineRegleConfig, inferRules, mergeRegles, unwrapRuleParameters, useRegle, useRootStorage };
@@ -1,2 +1,2 @@
1
- 'use strict';var vue=require('vue');function Q(e){return e==null?true:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?false:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var Rt=Symbol("regle-rule");function jt(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 X(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>X(n)))),r=="Map"&&(t=new Map([...e].map(n=>[X(n[0]),X(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,jt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=X(e[n]);}return t}function re(e){return e instanceof Date||e instanceof File?false:typeof e=="object"&&e!==null&&!Array.isArray(e)}function We(e){if(Q(e))return false;try{let t=null;if(e instanceof Date)t=e;else if(typeof e=="string"){let r=new Date(e);if(r.toString()==="Invalid Date")return !1;t=r;}return !!t}catch{return false}}function Ue(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}var Be=(r=>(r.Inline="__inline",r.Async="__async",r))(Be||{});function dt(e,t){return e.some(r=>r[t])}function pt(e,t){return e.reduce((r,n)=>{let l=n[t]||[];return r.concat(l)},[])}function ee(e){try{return e.map(t=>vue.toValue(t))}catch{return []}}function vt(e){return e.map(t=>t instanceof Function?vue.computed(t):vue.isRef(t)?t:vue.toRef(()=>t))}function mt(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(p=>p.trim()).filter(p=>p.length>0).length:0}function ke(e,...t){let{validator:r,type:n}=e,l=n==="__async"||r.constructor.name==="AsyncFunction";return {...{validator(R,...h){return e.validator(R,...ee(h.length?h:t))},message(R){return typeof e.message=="function"?e.message({...R,$params:ee(R?.$params?.length?R.$params:t)}):e.message},active(R){return typeof e.active=="function"?e.active({...R,$params:ee(R?.$params?.length?R.$params:t)}):e.active??true},tooltip(R){return typeof e.tooltip=="function"?e.tooltip({...R,$params:ee(R?.$params?.length?R.$params:t)}):e.tooltip??[]},exec(R){let h=e.validator(R,...ee(t)),m;return h instanceof Promise?h.then(g=>(m=g,typeof m=="object"&&"$valid"in m?m.$valid:typeof m=="boolean"?m:false)):(m=h,typeof m=="object"&&"$valid"in m?m.$valid:typeof m=="boolean"?m:false)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:false,_tooltip_patched:false,_async:l,_params:vt(t),_brand:Rt}}function Le(e){if(typeof e.validator=="function"){let r=ke(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(mt(e.validator)>1){let l=function(...i){return ke(e,...i)};return l.validator=r.validator,l.message=r.message,l.active=r.active,l.tooltip=r.tooltip,l.type=r.type,l.exec=r.exec,l._validator=r.validator,l._message=r.message,l._active=r.active,l._tooltip=r.tooltip,l._type=e.type,l._message_pacthed=false,l._tooltip_pacthed=false,l._async=n,l}else return r}throw new Error("Validator must be a function")}function He(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),l=vue.shallowRef(new Map),i=vue.shallowRef(new Map);function p(v){let $=t.value.get(v);if($)return $;{let E=vue.ref({});return t.value.set(v,E),E}}function R(v){let $=r.value.get(v);if($)return $;{let E=vue.ref([]);return r.value.set(v,E),E}}function h(v,$,E){i.value.set(`${v}-${$}`,E);}function m(v,$){return i.value.get(`${v}-${$}`)}function g(v,$){v&&$!=null&&i.value.delete(`${v}-${$}`);}function q(v,$){n.value.set(v,$);}function D(v){return n.value.get(v)??false}function W(v,$){e.value.set(v,$);}function O(v,$){let E=e.value.get(v);return E?a($,E)?{valid:true}:{valid:false}:undefined}function a(v,$){let E=Object.keys($),o=Object.keys(v);return o.length!==E.length||!o.every(j=>E.includes(j))?false:o.every(j=>{let x=v[j],I=$[j];return !I||!x||typeof x=="function"||typeof I=="function"||typeof x=="number"||typeof x=="boolean"?false:x._params?x._params?.every((_,B)=>{if(typeof I=="number"||typeof I=="boolean")return true;{let V=ee(I._params),Y=ee(x._params);return V?.[B]===Y?.[B]}}):true})}function F(v){let $=l.value.get(v);if($)return $;{let E=vue.ref(false),o=vue.ref(true),y=vue.ref({}),j=vue.ref(false);return l.value.set(v,{$pending:E,$valid:o,$metadata:y,$validating:j}),{$pending:E,$valid:o,$metadata:y,$validating:j}}}return vue.getCurrentScope()&&vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),l.value.clear(),i.value.clear();}),{addRuleDeclEntry:W,setDirtyEntry:q,checkRuleDeclEntry:O,getDirtyState:D,trySetRuleStatusRef:F,getFieldsEntry:p,getCollectionsEntry:R,getArrayStatus:m,addArrayStatus:h,deleteArrayStatus:g,arrayStatusStorage:i}}function Ae(e){return e.value instanceof Date||e.value instanceof File?false:re(e.value)}function ze(e,t,r){let n=vue.effectScope(),l;return e instanceof Function?l=n.run(()=>e(t,r??0)):l=e,{scope:n,unwrapped:l}}function Me(e,t,r){let n,l=(...i)=>new Promise(p=>{clearTimeout(n),n=setTimeout(()=>{n=undefined,Promise.resolve(e.apply(this,[...i])).then(p);},t);});return l.cancel=()=>{clearTimeout(n),n=undefined;},l}function Lt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let l=0;l<Math.min(r.length,n.length);l++){let i=Number(r[l]),p=Number(n[l]);if(i>p)return 1;if(p>i)return -1;if(!isNaN(i)&&isNaN(p))return 1;if(isNaN(i)&&!isNaN(p))return -1}return 0}var Fe=Lt(vue.version,"3.5.0")!==-1;function Ht(){return Math.floor(Math.random()*Date.now()).toString()}function je(){return typeof window>"u"?Ht():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function yt(e,t){return Ae(e)||re(t.value)&&!Q(t.value)&&!Object.entries(t.value).some(([r,n])=>Ce(n)||typeof n=="function")}function $t(e,t){return !!e.value&&re(e.value)&&"$each"in e.value||Array.isArray(t.value)}function gt(e){return !!e.value&&re(e.value)}function Ce(e){return re(e)&&"_validator"in e}function Pe(e){return typeof e.value!="function"}function St(e){return re(e)&&"$fields"in e}function ht(e){return !!e&&"$rules"in e}function qe({field:e,silent:t=false}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$error&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$error?e.$externalErrors??[]:[]).concat(e.$error?e.$schemaErrors??[]:[])}function Et({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 bt({customMessages:e,rule:t,ruleKey:r,state:n,path:l,storage:i,$debounce:p,modifiers:R}){let h=vue.effectScope(),m={},g,q=vue.ref(false),{$pending:D,$valid:W,$metadata:O,$validating:a}=i.trySetRuleStatusRef(`${l}.${r}`);function F(){h=vue.effectScope(),m=h.run(()=>{let x=vue.ref(false),I=vue.ref(false),_=vue.ref(true),B=vue.ref(false),V=vue.ref(false),Y=vue.computed(()=>({$value:n.value,$error:I.value,$dirty:x.value,$pending:B.value,$valid:V.value,$invalid:_.value,$rule:{$valid:W.value,$invalid:!W.value,$pending:D.value},$params:s.value,...O.value})),T=vue.computed(()=>Pe(t)?typeof t.value.active=="function"?t.value.active(Y.value):!!t.value.active:true);function k(c){let S="",C=e?e[r]?.[c]:undefined;if(C&&(typeof C=="function"?S=C(Y.value):S=C),Pe(t)){let Z=`_${c}_patched`;C&&!t.value[Z]||(typeof t.value[c]=="function"?S=t.value[c](Y.value):S=t.value[c]??"");}return S}let se=vue.computed(()=>{let c=k("message");return Q(c)&&(c="This field is not valid"),c}),Re=vue.computed(()=>k("tooltip")),de=vue.computed(()=>Pe(t)&&t.value.type?t.value.type:r),pe=vue.computed(()=>Pe(t)?t.value.validator:t.value),s=vue.computed(()=>typeof t.value=="function"?[]:ee(t.value._params??[])),u=vue.computed(()=>`${l}.${de.value}`);return {$active:T,$message:se,$type:de,$validator:pe,$params:s,$path:u,$tooltip:Re,$fieldValid:V,$fieldError:I,$fieldDirty:x,$fieldPending:B,$fieldInvalid:_}}),g=vue.watch(m?.$params,()=>{(R.$autoDirty.value||R.$rewardEarly.value&&m.$fieldError.value)&&o();});}F();function v(){W.value=true,m.$fieldDirty.value&&(D.value=true);}async function $(){let x=false;try{let I=m.$validator.value,_=I(n.value,...m.$params.value),B=n.value;v();let V;if(_ instanceof Promise?V=await _:V=_,n.value!==B)return !0;if(typeof V=="boolean")x=V;else {let{$valid:Y,...T}=V;x=Y,O.value=T;}}catch{x=false;}finally{D.value=false;}return x}let E=Me($,p??200);async function o(){try{a.value=!0;let x=!1;if(Ce(t.value)&&t.value._async)x=await E();else {let I=m.$validator.value,_=I(n.value,...m.$params.value);if(_ 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(_!=null)if(typeof _=="boolean")x=_;else {let{$valid:B,...V}=_;x=B,O.value=V;}}return W.value=x,x}catch{return false}finally{a.value=false;}}function y(){W.value=true,O.value={},D.value=false,a.value=false,F();}function j(){g(),h.stop(),h=vue.effectScope();}return vue.reactive({...m,$pending:D,$valid:W,$metadata:O,$haveAsync:q,$validating:a,$validate:o,$unwatch:j,$watch:F,$reset:y})}function _e({state:e,rulesDef:t,customMessages:r,path:n,fieldName:l,storage:i,options:p,externalErrors:R,schemaErrors:h,schemaMode:m,onUnwatch:g,$isArray:q,initialState:D,shortcuts:W}){let O=vue.effectScope(),a,F=[],v,$,E,o,y,j=()=>{};function x(){let d=t.value,M=i.checkRuleDeclEntry(n,d);k.value=Object.fromEntries(Object.entries(d).filter(([U])=>U.startsWith("$"))),B(),T.value=Object.fromEntries(Object.entries(t.value).filter(([U])=>!U.startsWith("$")).map(([U,b])=>{if(b){let oe=vue.toRef(()=>b);return [U,bt({modifiers:{$autoDirty:a.$autoDirty,$rewardEarly:a.$rewardEarly},customMessages:r,rule:oe,ruleKey:U,state:e,path:n,storage:i,$debounce:k.value.$debounce})]}return []}).filter(U=>!!U.length)),a.processShortcuts(),I(),M?.valid!=null&&(a.$dirty.value=i.getDirtyState(n),a.$dirty.value&&j()),i.addRuleDeclEntry(n,d);}function I(){j=a.$debounce.value?Me(Y,a.$debounce.value??a.$haveAnyAsyncRule?100:0):Y;}function _(){T.value&&Object.entries(T.value).forEach(([d,M])=>{M.$unwatch();}),E(),y?.(),a.$dirty.value&&i.setDirtyEntry(n,a.$dirty.value),v?.(),$?.(),O.stop(),O=vue.effectScope(),F.forEach(d=>d.stop()),F=[],g?.(),o?.();}function B(){T.value&&Object.entries(T.value).forEach(([d,M])=>{M.$watch();}),a=O.run(()=>{let d=vue.ref(false),M=vue.ref(false),U=vue.computed(()=>d.value),b=vue.computed(()=>k.value.$debounce),oe=vue.computed(()=>k.value.$lazy!=null?k.value.$lazy:vue.unref(p.lazy)!=null?vue.unref(p.lazy):false),ae=vue.computed(()=>k.value.$rewardEarly!=null?k.value.$rewardEarly:vue.unref(p.rewardEarly)!=null?vue.unref(p.rewardEarly):false),ve=vue.computed(()=>k.value.$clearExternalErrorsOnChange!=null?k.value.$clearExternalErrorsOnChange:vue.unref(p.clearExternalErrorsOnChange)!=null?vue.unref(p.clearExternalErrorsOnChange):true),N=vue.computed(()=>k.value.$autoDirty!=null?k.value.$autoDirty:vue.unref(p.autoDirty)!=null?vue.unref(p.autoDirty):!ae.value),P=vue.computed(()=>Object.entries(T.value).some(([ne,ue])=>ue.$validating)),J=vue.computed({get:()=>e.value,set(ne){v(),e.value=ne,V();}}),me=vue.computed(()=>ye.value&&!Ie.value&&d.value),rt=vue.computed(()=>qe({field:{$error:me.value,$externalErrors:R?.value,$schemaErrors:h?.value,$rules:T.value}})),nt=vue.computed(()=>qe({field:{$error:true,$externalErrors:R?.value,$schemaErrors:h?.value,$rules:T.value},silent:true})),Ge=vue.computed(()=>d.value?We(D.value)&&We(e.value)?Ue(D.value).getDate()!==Ue(e.value).getDate():D.value==null?!!e.value:Array.isArray(e.value)&&Array.isArray(D.value)?e.value.length!==D.value.length:D.value!==e.value:false),at=vue.computed(()=>Ge.value),lt=vue.computed(()=>Et({field:{$rules:T.value}})),ot=vue.computed(()=>N.value?U.value&&!(ye.value||Ie.value):!(ye.value||Ie.value)),Ie=vue.computed(()=>M.value||!ae.value?Object.entries(T.value).some(([ne,ue])=>ue.$pending):false),ye=vue.computed(()=>R?.value?.length||h?.value?.length?true:Oe.value?false:!ae.value||ae.value&&M.value?Object.entries(T.value).some(([ne,ue])=>!ue.$valid):false),ut=vue.computed(()=>l),Oe=vue.computed(()=>!!(Q(T.value)&&!m)),st=vue.computed(()=>R?.value?.length||Oe.value?false:d.value&&!Q(e.value)&&!P.value?m?!h?.value?.length:Object.values(T.value).every(ne=>ne.$valid&&ne.$active):false),Mt=vue.computed(()=>Object.entries(T.value).some(([ne,ue])=>ue.$haveAsync));function Ft(){W?.fields&&Object.entries(W.fields).forEach(([ne,ue])=>{let ct=vue.effectScope();it[ne]=ct.run(()=>{let ft=vue.ref();return vue.watchEffect(()=>{ft.value=ue(vue.reactive({$dirty:d,$externalErrors:R?.value??[],$value:e,$silentValue:J,$rules:T,$error:me,$pending:Ie,$invalid:ye,$valid:st,$errors:rt,$ready:ot,$silentErrors:nt,$anyDirty:U,$tooltips:lt,$name:ut,$inactive:Oe,$edited:Ge,$anyEdited:at}));}),ft}),F.push(ct);});}let it={};return vue.watch(ye,ne=>{ne||(M.value=false);}),{$error:me,$pending:Ie,$invalid:ye,$valid:st,$debounce:b,$lazy:oe,$errors:rt,$ready:ot,$silentErrors:nt,$rewardEarly:ae,$autoDirty:N,$clearExternalErrorsOnChange:ve,$anyDirty:U,$edited:Ge,$anyEdited:at,$name:ut,$haveAnyAsyncRule:Mt,$shortcuts:it,$validating:P,$tooltips:lt,$dirty:d,triggerPunishment:M,processShortcuts:Ft,$silentValue:J,$inactive:Oe}}),V(),E=vue.watch(a.$dirty,d=>{i.setDirtyEntry(n,d),Object.values(T.value).forEach(M=>{M.$fieldDirty=d;});}),y=vue.watch([a.$error,a.$valid,a.$invalid,a.$pending],()=>{Object.values(T.value).forEach(d=>{d.$fieldError=a.$error.value,d.$fieldInvalid=a.$invalid.value,d.$fieldPending=a.$pending.value,d.$fieldValid=a.$valid.value;});}),$=vue.watch(a.$valid,d=>{a.$rewardEarly.value&&d&&(a.triggerPunishment.value=false);}),o=vue.watch(a.$haveAnyAsyncRule,I);}function V(){v=vue.watch(e,()=>{a.$autoDirty.value&&(a.$dirty.value||(a.$dirty.value=true)),t.value instanceof Function&&x(),(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&j(),a.$rewardEarly.value!==true&&a.$clearExternalErrorsOnChange.value&&u();},{deep:q?true:Fe?1:true,flush:"post"});}function Y(){Object.values(T.value).forEach(d=>{d.$validate();});}let T=vue.ref({}),k=vue.ref({});x();function se(){u(),a.$dirty.value=false,a.triggerPunishment.value=false,i.setDirtyEntry(n,false),D.value=re(e.value)?X(e.value):Array.isArray(e.value)?[...e.value]:e.value,Object.entries(T.value).forEach(([d,M])=>{M.$reset();}),!a.$lazy.value&&a.$autoDirty.value&&Object.values(T.value).forEach(d=>d.$validate());}function Re(d=true,M=false){a.$dirty.value||(a.$dirty.value=true),M&&d?(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&j():d&&j();}async function de(){try{let d=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:d};return m?{result:!h?.value?.length,data:d}:Q(T.value)?{result:!0,data:d}:{result:(await Promise.allSettled(Object.entries(T.value).map(([b,oe])=>oe.$validate()))).every(b=>b.status==="fulfilled"?b.value===!0:!1),data:d}}catch{return {result:false,data:e.value}}}function pe(){_(),e.value=X(D),se();}function s(d=true){return a.$dirty.value?e.value:d?{_null:true}:null}function u(){R?.value?.length&&(R.value=[]);}!a.$lazy.value&&!a.$dirty.value&&a.$autoDirty.value&&j();let{$shortcuts:c,$validating:S,$autoDirty:C,$rewardEarly:Z,$clearExternalErrorsOnChange:f,$haveAnyAsyncRule:w,$debounce:L,$lazy:K,triggerPunishment:H,...le}=a;return vue.reactive({...le,$externalErrors:R,$value:e,$rules:T,...c,$reset:se,$touch:Re,$validate:de,$unwatch:_,$watch:B,$resetAll:pe,$extractDirtyFields:s,$clearExternalErrors:u})}function Qe({$id:e,path:t,index:r,options:n,storage:l,stateValue:i,customMessages:p,rules:R,externalErrors:h,schemaErrors:m,initialState:g,shortcuts:q,fieldName:D,schemaMode:W}){let O=R.$key?R.$key:je(),a=`${t}.${String(O)}`;typeof i.value=="object"&&i.value!=null&&(i.value.$id?a=`${t}.${i.value.$id}`:Object.defineProperties(i.value,{$id:{value:O,enumerable:false,configurable:false,writable:false}}));let F=vue.toRef(h?.value??[],r),v=vue.computed(()=>m?.value?.[r]),$=Ee({state:i,rulesDef:vue.toRef(()=>R),customMessages:p,path:a,storage:l,options:n,externalErrors:F,schemaErrors:v,initialState:g,shortcuts:q,fieldName:D,schemaMode:W});if($){let E=i.value?.$id;$.$id=E??String(O),l.addArrayStatus(e,$.$id,$);}return $}function It({state:e,rulesDef:t,customMessages:r,path:n,storage:l,options:i,externalErrors:p,schemaErrors:R,schemaMode:h,initialState:m,shortcuts:g,fieldName:q}){let D=vue.effectScope(),W,O=vue.effectScope(),a,F=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let v=vue.ref(),$=vue.ref(e.value),E,o=vue.ref({}),y=l.getCollectionsEntry(n);a=O.run(()=>({isPrimitiveArray:vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.every(u=>typeof u!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(u=>Ce(u)||typeof u=="function"):false)})),j(),_();function j(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(v.value=je(),Object.defineProperties(e.value,{$id:{value:v.value,enumerable:false,configurable:false,writable:false}})):e.value?.$id&&(v.value=e.value.$id)),$.value=o.value.$value,Array.isArray(e.value)&&!a.isPrimitiveArray.value?y.value=e.value.filter(s=>typeof s=="object").map((s,u)=>{let{scope:c,unwrapped:S}=ze(t.value.$each,vue.toRef(()=>s),u);c&&F.push(c);let C=vue.toRef(m.value??[],u),Z=vue.toRef(p?.value??{},"$each"),f=vue.computed(()=>R?.value?.$each),w=Qe({$id:v.value,path:n,customMessages:r,rules:S??{},stateValue:vue.toRef(()=>s),index:u,options:i,storage:l,externalErrors:Z,schemaErrors:f,initialState:C,shortcuts:g,fieldName:q,schemaMode:h});return w||null}).filter(s=>!!s):y.value=[],o.value=_e({state:e,rulesDef:t,customMessages:r,path:n,storage:l,options:i,externalErrors:vue.toRef(p?.value??{},"$self"),schemaErrors:vue.computed(()=>R?.value?.$self),$isArray:true,initialState:m,shortcuts:g,fieldName:q,schemaMode:h});}function x(){if(Array.isArray(e.value)&&!a.isPrimitiveArray.value){let s=X(y.value);y.value=e.value.filter(u=>typeof u=="object").map((u,c)=>{let S=vue.toRef(()=>u);if(u.$id&&y.value.find(C=>C.$id===u.$id)){let C=l.getArrayStatus(v.value,u.$id);return C?(C.$value=S,C):null}else {let{scope:C,unwrapped:Z}=ze(t.value.$each,S,c);C&&F.push(C);let f=vue.toRef(p?.value??{},"$each"),w=vue.computed(()=>R?.value?.$each??[]),L=Qe({$id:v.value,path:n,customMessages:r,rules:Z??{},stateValue:S,index:c,options:i,storage:l,externalErrors:f,schemaErrors:w,initialState:vue.toRef(m.value??[],c),shortcuts:g,fieldName:q,schemaMode:h});return L||null}}).filter(u=>!!u),s.filter(u=>!e.value?.find(c=>u.$id===c.$id)).forEach((u,c)=>{l.deleteArrayStatus(v.value,c.toString());});}else y.value=[];}function I(){E=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?j():x();},{deep:Fe?1:true,flush:"pre"});}function _(){I(),D=vue.effectScope(),W=D.run(()=>{let s=vue.computed({get:()=>e.value,set(b){E(),e.value=b,I();}}),u=vue.computed(()=>o.value.$dirty&&(!y.value.length||y.value.every(b=>b.$dirty))),c=vue.computed(()=>o.value.$anyDirty||y.value.some(b=>b.$anyDirty)),S=vue.computed(()=>o.value.$invalid||y.value.some(b=>b.$invalid)),C=vue.computed(()=>(Q(o.value.$rules)?true:o.value.$valid)&&(!y.value.length||y.value.every(b=>b.$valid))),Z=vue.computed(()=>o.value.$error||y.value.some(b=>b.$error)),f=vue.computed(()=>!(S.value||w.value)),w=vue.computed(()=>o.value.$pending||y.value.some(b=>b.$pending)),L=vue.computed(()=>!!y.value.length&&y.value.every(b=>b.$edited)),K=vue.computed(()=>o.value.$anyEdited||y.value.some(b=>b.$anyEdited)),H=vue.computed(()=>({$self:o.value.$errors,$each:y.value.map(b=>b.$errors)})),le=vue.computed(()=>({$self:o.value.$silentErrors,$each:y.value.map(b=>b.$silentErrors)})),d=vue.computed(()=>q);function M(){g?.collections&&Object.entries(g?.collections).forEach(([b,oe])=>{let ae=vue.effectScope();U[b]=ae.run(()=>{let ve=vue.ref();return vue.watchEffect(()=>{ve.value=oe(vue.reactive({$dirty:u,$error:Z,$silentValue:s,$pending:w,$invalid:S,$valid:C,$errors:H,$ready:f,$silentErrors:le,$anyDirty:c,$name:d,$each:y,$self:o,$value:e,$edited:L,$anyEdited:K}));}),ve}),F.push(ae);});}let U={};return M(),{$dirty:u,$anyDirty:c,$invalid:S,$valid:C,$error:Z,$pending:w,$errors:H,$silentErrors:le,$ready:f,$name:d,$shortcuts:U,$silentValue:s,$edited:L,$anyEdited:K}}),a.isPrimitiveArray.value&&t.value.$each&&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`);}function B(){E&&E(),o.value&&o.value.$unwatch(),y.value&&y.value.forEach(s=>{"$dirty"in s&&s.$unwatch();}),D.stop(),D=vue.effectScope(),O.stop(),O=vue.effectScope(true),F.forEach(s=>s.stop()),F=[];}function V(s=true,u=false){o.value.$touch(s,u),y.value.forEach(c=>{c.$touch(s,u);});}function Y(){o.value.$reset(),y.value.forEach(s=>{s.$reset();});}async function T(){let s=e.value;try{return {result:(await Promise.allSettled([o.value.$validate(),...y.value.map(S=>S.$validate())])).every(S=>S.status==="fulfilled"?S.value.result===!0:!1),data:s}}catch{return {result:false,data:s}}}function k(){o.value.$clearExternalErrors(),y.value.forEach(s=>{s.$clearExternalErrors();});}function se(s=true){let u=y.value.map(c=>{if(St(c))return c.$extractDirtyFields(s)});return s&&u.every(c=>Q(c))&&(u=[]),u}function Re(){B(),e.value=X(m.value),Y();}let{$shortcuts:de,...pe}=W;return vue.reactive({$self:o,...pe,...de,$each:y,$value:e,$validate:T,$unwatch:B,$watch:_,$touch:V,$reset:Y,$resetAll:Re,$extractDirtyFields:se,$clearExternalErrors:k})}function Ne({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:l,schemaErrors:i,rootSchemaErrors:p,validationGroups:R,initialState:h,fieldName:m,...g}){let q=vue.effectScope(),D,W=[],O=null,a=null,F=null,v=null;async function E(s=true){let u=Object.entries(e.value),c=Object.fromEntries(u.filter(([f,w])=>!!w).map(([f,w])=>{if(w){let L=vue.toRef(t.value??{},f),K=vue.toRef(()=>w),H=vue.toRef(l?.value??{},f),le=vue.computed(()=>i?.value?.[f]),d=vue.toRef(h?.value??{},f);return [f,Ee({state:L,rulesDef:K,path:r?`${r}.${f}`:f,externalErrors:H,schemaErrors:le,initialState:d,fieldName:f,...g})]}return []})),S=Object.fromEntries(Object.entries(vue.unref(l)??{}).filter(([f,w])=>!(f in e.value)&&!!w).map(([f])=>{let w=vue.toRef(t.value??{},f),L=vue.toRef(l?.value??{},f),K=vue.computed(()=>i?.value?.[f]),H=vue.toRef(h?.value??{},f);return [f,Ee({state:w,rulesDef:vue.computed(()=>({})),path:r?`${r}.${f}`:f,externalErrors:L,schemaErrors:K,initialState:H,fieldName:f,...g})]})),C=Object.fromEntries(Object.entries(vue.unref(i)??{}).map(([f])=>{let w=vue.toRef(t.value??{},f),L=vue.toRef(l?.value??{},f),K=vue.computed(()=>i?.value?.[f]),H=vue.toRef(h?.value??{},f);return [f,Ee({state:w,rulesDef:vue.computed(()=>({})),path:r?`${r}.${f}`:f,externalErrors:L,schemaErrors:K,initialState:H,fieldName:f,...g})]})),Z=Object.fromEntries(Object.entries(t.value??{}).filter(([f])=>!(f in e.value)&&!(f in(S??{}))&&!(f in(C??{}))).map(([f])=>{let w=vue.toRef(t.value??{},f),L=vue.toRef(l?.value??{},f),K=vue.computed(()=>i?.value?.[f]),H=vue.toRef(h?.value??{},f);return [f,Ee({state:w,rulesDef:vue.computed(()=>({})),path:r?`${r}.${f}`:f,externalErrors:L,schemaErrors:K,initialState:H,fieldName:f,...g})]}));o.value={...c,...S,...C,...Z},s&&x();}let o=g.storage.getFieldsEntry(r);E();function y(){l&&(F=vue.watch(l,()=>{I(),E();},{deep:true}));}function j(){v=vue.watch(t,()=>{I(),E(),V(true,true);},{flush:"sync"});}function x(){n&&(O?.(),O=vue.watch(n,()=>{I(),E();},{deep:true,flush:"post"}),y()),p&&(a?.(),a=vue.watch(p,()=>{I(),E();},{deep:true,flush:"post"})),j(),D=q.run(()=>{let s=vue.computed({get:()=>t.value,set(N){I(),t.value=N,E();}}),u=vue.computed(()=>!!Object.entries(o.value).length&&Object.entries(o.value).every(([N,P])=>P?.$dirty)),c=vue.computed(()=>Object.entries(o.value).some(([N,P])=>P?.$anyDirty)),S=vue.computed(()=>Object.entries(o.value).some(([N,P])=>P?.$invalid)),C=vue.computed(()=>{let N=Object.entries(o.value).filter(([P,J])=>ht(J)?!J.$inactive:true);return N.length?N.every(([P,J])=>J?.$valid):false}),Z=vue.computed(()=>c.value&&!H.value&&S.value),f=vue.computed(()=>vue.unref(g.options.rewardEarly)!=null?vue.unref(g.options.rewardEarly):false),w=vue.computed(()=>vue.unref(g.options.autoDirty)!=null?vue.unref(g.options.autoDirty):!f.value),L=vue.computed(()=>w.value?c.value&&!(S.value||H.value):!(S.value||H.value)),K=vue.ref(false),H=vue.computed(()=>K.value||Object.entries(o.value).some(([N,P])=>P?.$pending)),le=vue.computed(()=>Object.fromEntries(Object.entries(o.value).map(([N,P])=>[N,P?.$errors]))),d=vue.computed(()=>Object.fromEntries(Object.entries(o.value).map(([N,P])=>[N,P?.$silentErrors]))),M=vue.computed(()=>!!Object.entries(o.value).length&&Object.entries(o.value).every(([N,P])=>P?.$edited)),U=vue.computed(()=>Object.entries(o.value).some(([N,P])=>P?.$anyEdited)),b=vue.computed(()=>m);function oe(){g.shortcuts?.nested&&Object.entries(g.shortcuts.nested).forEach(([N,P])=>{let J=vue.effectScope();ve[N]=J.run(()=>{let me=vue.ref();return vue.watchEffect(()=>{me.value=P(vue.reactive({$dirty:u,$value:t,$silentValue:s,$error:Z,$pending:H,$invalid:S,$valid:C,$ready:L,$anyDirty:c,$name:b,$silentErrors:d,$errors:le,$fields:o,$edited:M,$anyEdited:U}));}),me}),W.push(J);});}let ae=vue.computed({get:()=>R?Object.fromEntries(Object.entries(R?.(o.value)??{}).map(([N,P])=>P.length?[N,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(J=>[J,dt(P,J)])),...Object.fromEntries(["$errors","$silentErrors"].map(J=>[J,pt(P,J)]))}]:[])):{},set(){}}),ve={};return oe(),{$dirty:u,$anyDirty:c,$invalid:S,$valid:C,$error:Z,$pending:H,$errors:le,$silentErrors:d,$ready:L,$name:b,$shortcuts:ve,$groups:ae,$silentValue:s,$edited:M,$anyEdited:U,$localPending:K}});}function I(){O?.(),F?.(),v?.(),a?.(),W=[],D={},o.value&&Object.entries(o.value).forEach(([s,u])=>{u.$unwatch();});}function _(){Object.entries(o.value).forEach(([s,u])=>{u.$clearExternalErrors();});}function B(){F?.(),Object.values(o.value).forEach(s=>{s.$reset();}),h.value={...X(t.value)},y();}function V(s=true,u=false){Object.values(o.value).forEach(c=>{c.$touch(s,u);});}async function Y(){I(),t.value=X({...h.value??{}}),B(),E();}function T(s){return s.filter(([u,c])=>re(c)?!(c&&typeof c=="object"&&"_null"in c)&&!Q(c):Array.isArray(c)?c.length:true)}function k(s=true){let u=Object.entries(o.value).map(([c,S])=>[c,S.$extractDirtyFields(s)]);return s&&(u=T(u)),Object.fromEntries(u)}async function se(){try{if(g.schemaMode)return g.onValidate?(V(!1),D.$localPending.value=!0,g.onValidate()):{result:!1,data:t.value};{let s=t.value;return {result:(await Promise.allSettled(Object.values(o.value).map(S=>S.$validate()))).every(S=>S.status==="fulfilled"?S.value.result===!0:!1),data:s}}}catch{return {result:false,data:t.value}}finally{D.$localPending.value=false;}}let{$shortcuts:Re,$localPending:de,...pe}=D;return vue.reactive({...pe,...Re,$fields:o,$value:t,$resetAll:Y,$reset:B,$touch:V,$validate:se,$unwatch:I,$watch:x,$clearExternalErrors:_,$extractDirtyFields:k})}function Ee({rulesDef:e,...t}){if($t(e,t.state))return It({rulesDef:e,...t});if(yt(t.state,e)){if(Ae(t.state))return Ne({rulesDef:e,...t});{let n=vue.effectScope().run(()=>{let p=vue.toRef(t.state.value?t.state:vue.ref({}));return vue.watch(()=>t.state.value,R=>{p.value=R;},{deep:true}),vue.watch(p,R=>{t.state.value=R;},{deep:true}),{fakeState:p}}),{state:l,...i}=t;return Ne({rulesDef:e,...i,state:n.fakeState})}}else if(gt(e))return _e({rulesDef:e,...t})}function xe({initialState:e,options:t,scopeRules:r,state:n,customRules:l,shortcuts:i,schemaErrors:p,schemaMode:R=false,onValidate:h}){let m=He(),g=vue.ref();return g.value=Ne({rootRules:r,rulesDef:r,state:n,customMessages:l?.(),storage:m,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:i,fieldName:"root",path:"",schemaErrors:p,rootSchemaErrors:p,schemaMode:R,onValidate:h}),vue.getCurrentScope()&&vue.onScopeDispose(()=>{g.value?.$unwatch();}),vue.reactive({regle:g})}function Ke(e,t,r){let n={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function l(i,p,R){let h=vue.isRef(p)?p:vue.computed(typeof p=="function"?p:()=>p),m={...n,...R},g=vue.isRef(i)?i:vue.ref(i),q=vue.ref({...X(g.value)});return {r$:xe({scopeRules:h,state:g,options:m,initialState:q,customRules:e,shortcuts:r}).regle}}return l}var Ot=Ke();function et(){function e(t,r){return r}return e}var tt=et();function At({rules:e,modifiers:t,shortcuts:r}){let n=Ke(e,t,r),l=et();return {useRegle:n,inferRules:l}}
2
- exports.InternalRuleType=Be;exports.createRule=Le;exports.defineRegleConfig=At;exports.inferRules=tt;exports.unwrapRuleParameters=ee;exports.useRegle=Ot;exports.useRootStorage=xe;
1
+ 'use strict';var vue=require('vue');function Y(e,t=true){return e==null?true:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?t?e.length===0:false:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var gt=Symbol("regle-rule");function Ut(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,Ut(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=Q(e[n]);}return t}function ne(e){return e instanceof Date||e instanceof File?false:typeof e=="object"&&e!==null&&!Array.isArray(e)}function Be(e){if(Y(e))return false;try{let t=null;if(e instanceof Date)t=e;else if(typeof e=="string"){let r=new Date(e);if(r.toString()==="Invalid Date")return !1;t=r;}return !!t}catch{return false}}function Le(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}var He=(r=>(r.Inline="__inline",r.Async="__async",r))(He||{});function $t(e,t){return e.some(r=>r[t])}function yt(e,t){return e.reduce((r,n)=>{let l=n[t]||[];return r.concat(l)},[])}function ee(e){try{return e.map(t=>vue.toValue(t))}catch{return []}}function vt(e){return e.map(t=>t instanceof Function?vue.computed(t):vue.isRef(t)?t:vue.toRef(()=>t))}function St(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(m=>m.trim()).filter(m=>m.length>0).length:0}function ze(e,...t){let{validator:r,type:n}=e,l=n==="__async"||r.constructor.name==="AsyncFunction";return {...{validator(f,...S){return e.validator(f,...ee(S.length?S:t))},message(f){return typeof e.message=="function"?e.message({...f,$params:ee(f?.$params?.length?f.$params:t)}):e.message},active(f){return typeof e.active=="function"?e.active({...f,$params:ee(f?.$params?.length?f.$params:t)}):e.active??true},tooltip(f){return typeof e.tooltip=="function"?e.tooltip({...f,$params:ee(f?.$params?.length?f.$params:t)}):e.tooltip??[]},exec(f){let S=e.validator(f,...ee(t)),y;return S instanceof Promise?S.then(b=>(y=b,typeof y=="object"&&"$valid"in y?y.$valid:typeof y=="boolean"?y:false)):(y=S,typeof y=="object"&&"$valid"in y?y.$valid:typeof y=="boolean"?y:false)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:false,_tooltip_patched:false,_async:l,_params:vt(t),_brand:gt}}function qe(e){if(typeof e.validator=="function"){let r=ze(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(St(e.validator)>1){let l=function(...i){return ze(e,...i)};return l.validator=r.validator,l.message=r.message,l.active=r.active,l.tooltip=r.tooltip,l.type=r.type,l.exec=r.exec,l._validator=r.validator,l._message=r.message,l._active=r.active,l._tooltip=r.tooltip,l._type=e.type,l._message_pacthed=false,l._tooltip_pacthed=false,l._async=n,l}else return r}throw new Error("Validator must be a function")}function Ke(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),l=vue.shallowRef(new Map),i=vue.shallowRef(new Map);function m($){let h=t.value.get($);if(h)return h;{let E=vue.ref({});return t.value.set($,E),E}}function f($){let h=r.value.get($);if(h)return h;{let E=vue.ref([]);return r.value.set($,E),E}}function S($,h,E){i.value.set(`${$}-${h}`,E);}function y($,h){return i.value.get(`${$}-${h}`)}function b($,h){$&&h!=null&&i.value.delete(`${$}-${h}`);}function B($,h){n.value.set($,h);}function D($){return n.value.get($)??false}function N($,h){e.value.set($,h);}function w($,h){let E=e.value.get($);return E?a(h,E)?{valid:true}:{valid:false}:undefined}function a($,h){let E=Object.keys(h),u=Object.keys($);return u.length!==E.length||!u.every(M=>E.includes(M))?false:u.every(M=>{let o=$[M],s=h[M];return !s||!o||typeof o=="function"||typeof s=="function"||typeof o=="number"||typeof o=="boolean"?false:o._params?o._params?.every((I,V)=>{if(typeof s=="number"||typeof s=="boolean")return true;{let G=ee(s._params),J=ee(o._params);return G?.[V]===J?.[V]}}):true})}function j($){let h=l.value.get($);if(h)return h;{let E=vue.ref(false),u=vue.ref(true),v=vue.ref({}),M=vue.ref(false);return l.value.set($,{$pending:E,$valid:u,$metadata:v,$validating:M}),{$pending:E,$valid:u,$metadata:v,$validating:M}}}return vue.getCurrentScope()&&vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),l.value.clear(),i.value.clear();}),{addRuleDeclEntry:N,setDirtyEntry:B,checkRuleDeclEntry:w,getDirtyState:D,trySetRuleStatusRef:j,getFieldsEntry:m,getCollectionsEntry:f,getArrayStatus:y,addArrayStatus:S,deleteArrayStatus:b,arrayStatusStorage:i}}function Ve(e){return e.value instanceof Date||e.value instanceof File?false:ne(e.value)}function Je(e,t,r){let n=vue.effectScope(),l;return e instanceof Function?l=n.run(()=>e(t,r??0)):l=e,{scope:n,unwrapped:l}}function Fe(e,t,r){let n,l=(...i)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=undefined,Promise.resolve(e.apply(this,[...i])).then(m);},t);});return l.cancel=()=>{clearTimeout(n),n=undefined;},l}function Jt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let l=0;l<Math.min(r.length,n.length);l++){let i=Number(r[l]),m=Number(n[l]);if(i>m)return 1;if(m>i)return -1;if(!isNaN(i)&&isNaN(m))return 1;if(isNaN(i)&&!isNaN(m))return -1}return 0}var _e=Jt(vue.version,"3.5.0")!==-1;function Yt(){return Math.floor(Math.random()*Date.now()).toString()}function he(){return typeof window>"u"?Yt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function ht(e,t){return Ve(e)||ne(t.value)&&!Y(t.value)&&!Object.entries(t.value).some(([r,n])=>Oe(n)||typeof n=="function")}function bt(e,t){return !!e.value&&ne(e.value)&&"$each"in e.value||Array.isArray(t.value)}function Et(e){return !!e.value&&ne(e.value)}function Oe(e){return ne(e)&&"_validator"in e}function we(e){return typeof e.value!="function"}function Tt(e){return ne(e)&&"$fields"in e}function xt(e){return !!e&&"$rules"in e}function Ye({field:e,silent:t=false}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$error&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$error?e.$externalErrors??[]:[]).concat(e.$error?e.$schemaErrors??[]:[])}function Dt({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 Ct({customMessages:e,rule:t,ruleKey:r,state:n,path:l,storage:i,$debounce:m,modifiers:f}){let S=vue.effectScope(),y={},b,B=vue.ref(false),{$pending:D,$valid:N,$metadata:w,$validating:a}=i.trySetRuleStatusRef(`${l}.${r}`);function j(){S=vue.effectScope(),y=S.run(()=>{let o=vue.ref(false),s=vue.ref(false),I=vue.ref(true),V=vue.ref(false),G=vue.ref(false),J=vue.computed(()=>({$value:n.value,$error:s.value,$dirty:o.value,$pending:V.value,$valid:G.value,$invalid:I.value,$rule:{$valid:N.value,$invalid:!N.value,$pending:D.value},$params:R.value,...w.value})),C=vue.computed(()=>we(t)?typeof t.value.active=="function"?t.value.active(J.value):!!t.value.active:true);function L(d){let T="",P=e?e[r]?.[d]:undefined;if(P&&(typeof P=="function"?T=P(J.value):T=P),we(t)){let X=`_${d}_patched`;P&&!t.value[X]||(typeof t.value[d]=="function"?T=t.value[d](J.value):T=t.value[d]??"");}return T}let ie=vue.computed(()=>{let d=L("message");return Y(d)&&(d="This field is not valid"),d}),de=vue.computed(()=>L("tooltip")),pe=vue.computed(()=>we(t)&&t.value.type?t.value.type:r),me=vue.computed(()=>we(t)?t.value.validator:t.value),R=vue.computed(()=>typeof t.value=="function"?[]:ee(t.value._params??[])),c=vue.computed(()=>`${l}.${pe.value}`);return {$active:C,$message:ie,$type:pe,$validator:me,$params:R,$path:c,$tooltip:de,$fieldValid:G,$fieldError:s,$fieldDirty:o,$fieldPending:V,$fieldInvalid:I}}),b=vue.watch(y?.$params,()=>{(f.$autoDirty.value||f.$rewardEarly.value&&y.$fieldError.value)&&u();});}j();function $(){N.value=true,y.$fieldDirty.value&&(D.value=true);}async function h(){let o=false;try{let s=y.$validator.value,I=s(n.value,...y.$params.value),V=n.value;$();let G;if(I instanceof Promise?G=await I:G=I,n.value!==V)return !0;if(typeof G=="boolean")o=G;else {let{$valid:J,...C}=G;o=J,w.value=C;}}catch{o=false;}finally{D.value=false;}return o}let E=Fe(h,m??200);async function u(){try{a.value=!0;let o=!1;if(Oe(t.value)&&t.value._async)o=await E();else {let s=y.$validator.value,I=s(n.value,...y.$params.value);if(I 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(I!=null)if(typeof I=="boolean")o=I;else {let{$valid:V,...G}=I;o=V,w.value=G;}}return N.value=o,o}catch{return false}finally{a.value=false;}}function v(){N.value=true,w.value={},D.value=false,a.value=false,j();}function M(){b(),S.stop(),S=vue.effectScope();}return vue.reactive({...y,$pending:D,$valid:N,$metadata:w,$haveAsync:B,$validating:a,$validate:u,$unwatch:M,$watch:j,$reset:v})}function Ne({state:e,rulesDef:t,customMessages:r,path:n,fieldName:l,storage:i,options:m,externalErrors:f,schemaErrors:S,schemaMode:y,onUnwatch:b,$isArray:B,initialState:D,shortcuts:N}){let w=vue.effectScope(),a,j=[],$,h,E,u,v,M=()=>{};function o(){let g=t.value,_=i.checkRuleDeclEntry(n,g);L.value=Object.fromEntries(Object.entries(g).filter(([W])=>W.startsWith("$"))),V(),C.value=Object.fromEntries(Object.entries(t.value).filter(([W])=>!W.startsWith("$")).map(([W,x])=>{if(x){let se=vue.toRef(()=>x);return [W,Ct({modifiers:{$autoDirty:a.$autoDirty,$rewardEarly:a.$rewardEarly},customMessages:r,rule:se,ruleKey:W,state:e,path:n,storage:i,$debounce:L.value.$debounce})]}return []}).filter(W=>!!W.length)),a.processShortcuts(),s(),_?.valid!=null&&(a.$dirty.value=i.getDirtyState(n),a.$dirty.value&&M()),i.addRuleDeclEntry(n,g);}function s(){M=a.$debounce.value?Fe(J,a.$debounce.value??a.$haveAnyAsyncRule?100:0):J;}function I(){C.value&&Object.entries(C.value).forEach(([g,_])=>{_.$unwatch();}),E(),v?.(),a.$dirty.value&&i.setDirtyEntry(n,a.$dirty.value),$?.(),h?.(),w.stop(),w=vue.effectScope(),j.forEach(g=>g.stop()),j=[],b?.(),u?.();}function V(){C.value&&Object.entries(C.value).forEach(([g,_])=>{_.$watch();}),a=w.run(()=>{let g=vue.ref(false),_=vue.ref(false),W=vue.computed(()=>g.value),x=vue.computed(()=>L.value.$debounce),se=vue.computed(()=>L.value.$lazy!=null?L.value.$lazy:vue.unref(m.lazy)!=null?vue.unref(m.lazy):false),le=vue.computed(()=>L.value.$rewardEarly!=null?L.value.$rewardEarly:vue.unref(m.rewardEarly)!=null?vue.unref(m.rewardEarly):false),ge=vue.computed(()=>L.value.$clearExternalErrorsOnChange!=null?L.value.$clearExternalErrorsOnChange:vue.unref(m.clearExternalErrorsOnChange)!=null?vue.unref(m.clearExternalErrorsOnChange):true),U=vue.computed(()=>L.value.$autoDirty!=null?L.value.$autoDirty:vue.unref(m.autoDirty)!=null?vue.unref(m.autoDirty):!le.value),O=vue.computed(()=>Object.entries(C.value).some(([ae,ue])=>ue.$validating)),K=vue.computed({get:()=>e.value,set(ae){$(),e.value=ae,G();}}),$e=vue.computed(()=>ye.value&&!Pe.value&&g.value),ot=vue.computed(()=>Ye({field:{$error:$e.value,$externalErrors:f?.value,$schemaErrors:S?.value,$rules:C.value}})),st=vue.computed(()=>Ye({field:{$error:true,$externalErrors:f?.value,$schemaErrors:S?.value,$rules:C.value},silent:true})),We=vue.computed(()=>g.value?Be(D.value)&&Be(e.value)?Le(D.value).getDate()!==Le(e.value).getDate():D.value==null?!!e.value:Array.isArray(e.value)&&Array.isArray(D.value)?e.value.length!==D.value.length:D.value!==e.value:false),ut=vue.computed(()=>We.value),it=vue.computed(()=>Dt({field:{$rules:C.value}})),ct=vue.computed(()=>U.value?W.value&&!(ye.value||Pe.value):!(ye.value||Pe.value)),Pe=vue.computed(()=>_.value||!le.value?Object.entries(C.value).some(([ae,ue])=>ue.$pending):false),ye=vue.computed(()=>f?.value?.length||S?.value?.length?true:Me.value?false:!le.value||le.value&&_.value?Object.entries(C.value).some(([ae,ue])=>!ue.$valid):false),ft=vue.computed(()=>l),Me=vue.computed(()=>!!(Y(C.value)&&!y)),Rt=vue.computed(()=>f?.value?.length||Me.value?false:g.value&&!Y(e.value)&&!O.value?y?!S?.value?.length:Object.values(C.value).every(ae=>ae.$valid&&ae.$active):false),Nt=vue.computed(()=>Object.entries(C.value).some(([ae,ue])=>ue.$haveAsync));function Gt(){N?.fields&&Object.entries(N.fields).forEach(([ae,ue])=>{let pt=vue.effectScope();dt[ae]=pt.run(()=>{let mt=vue.ref();return vue.watchEffect(()=>{mt.value=ue(vue.reactive({$dirty:g,$externalErrors:f?.value??[],$value:e,$silentValue:K,$rules:C,$error:$e,$pending:Pe,$invalid:ye,$valid:Rt,$errors:ot,$ready:ct,$silentErrors:st,$anyDirty:W,$tooltips:it,$name:ft,$inactive:Me,$edited:We,$anyEdited:ut}));}),mt}),j.push(pt);});}let dt={};return vue.watch(ye,ae=>{ae||(_.value=false);}),{$error:$e,$pending:Pe,$invalid:ye,$valid:Rt,$debounce:x,$lazy:se,$errors:ot,$ready:ct,$silentErrors:st,$rewardEarly:le,$autoDirty:U,$clearExternalErrorsOnChange:ge,$anyDirty:W,$edited:We,$anyEdited:ut,$name:ft,$haveAnyAsyncRule:Nt,$shortcuts:dt,$validating:O,$tooltips:it,$dirty:g,triggerPunishment:_,processShortcuts:Gt,$silentValue:K,$inactive:Me}}),G(),E=vue.watch(a.$dirty,g=>{i.setDirtyEntry(n,g),Object.values(C.value).forEach(_=>{_.$fieldDirty=g;});}),v=vue.watch([a.$error,a.$valid,a.$invalid,a.$pending],()=>{Object.values(C.value).forEach(g=>{g.$fieldError=a.$error.value,g.$fieldInvalid=a.$invalid.value,g.$fieldPending=a.$pending.value,g.$fieldValid=a.$valid.value;});}),h=vue.watch(a.$valid,g=>{a.$rewardEarly.value&&g&&(a.triggerPunishment.value=false);}),u=vue.watch(a.$haveAnyAsyncRule,s);}function G(){$=vue.watch(e,()=>{a.$autoDirty.value&&(a.$dirty.value||(a.$dirty.value=true)),t.value instanceof Function&&o(),(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&M(),a.$rewardEarly.value!==true&&a.$clearExternalErrorsOnChange.value&&c();},{deep:B?true:_e?1:true,flush:"post"});}function J(){Object.values(C.value).forEach(g=>{g.$validate();});}let C=vue.ref({}),L=vue.ref({});o();function ie(){c(),a.$dirty.value=false,a.triggerPunishment.value=false,i.setDirtyEntry(n,false),D.value=ne(e.value)?Q(e.value):Array.isArray(e.value)?[...e.value]:e.value,Object.entries(C.value).forEach(([g,_])=>{_.$reset();}),!a.$lazy.value&&a.$autoDirty.value&&Object.values(C.value).forEach(g=>g.$validate());}function de(g=true,_=false){a.$dirty.value||(a.$dirty.value=true),_&&g?(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&M():g&&M();}async function pe(){try{let g=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:g};return y?{result:!S?.value?.length,data:g}:Y(C.value)?{result:!0,data:g}:{result:(await Promise.allSettled(Object.entries(C.value).map(([x,se])=>se.$validate()))).every(x=>x.status==="fulfilled"?x.value===!0:!1),data:g}}catch{return {result:false,data:e.value}}}function me(){I(),e.value=Q(D),ie();}function R(g=true){return a.$dirty.value?e.value:g?{_null:true}:null}function c(){f?.value?.length&&(f.value=[]);}!a.$lazy.value&&!a.$dirty.value&&a.$autoDirty.value&&M();let{$shortcuts:d,$validating:T,$autoDirty:P,$rewardEarly:X,$clearExternalErrorsOnChange:p,$haveAnyAsyncRule:A,$debounce:H,$lazy:Z,triggerPunishment:z,...oe}=a;return vue.reactive({...oe,$externalErrors:f,$value:e,$rules:C,...d,$reset:ie,$touch:de,$validate:pe,$unwatch:I,$watch:V,$resetAll:me,$extractDirtyFields:R,$clearExternalErrors:c})}function Ze({$id:e,path:t,index:r,options:n,storage:l,stateValue:i,customMessages:m,rules:f,externalErrors:S,schemaErrors:y,initialState:b,shortcuts:B,fieldName:D,schemaMode:N}){let w=f.$key?f.$key:he(),a=`${t}.${String(w)}`;typeof i.value=="object"&&i.value!=null&&(i.value.$id?a=`${t}.${i.value.$id}`:Object.defineProperties(i.value,{$id:{value:w,enumerable:false,configurable:false,writable:false}}));let j=vue.toRef(S?.value??[],r),$=vue.computed(()=>y?.value?.[r]),h=Te({state:i,rulesDef:vue.toRef(()=>f),customMessages:m,path:a,storage:l,options:n,externalErrors:j,schemaErrors:$,initialState:b,shortcuts:B,fieldName:D,schemaMode:N});if(h){let E=i.value?.$id;h.$id=E??String(w),l.addArrayStatus(e,h.$id,h);}return h}function wt({state:e,rulesDef:t,customMessages:r,path:n,storage:l,options:i,externalErrors:m,schemaErrors:f,schemaMode:S,initialState:y,shortcuts:b,fieldName:B}){let D=vue.effectScope(),N,w=vue.effectScope(),a,j=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let $=vue.ref(),h=vue.ref(e.value),E,u=vue.ref({}),v=l.getCollectionsEntry(n);a=w.run(()=>({isPrimitiveArray:vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.every(c=>typeof c!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(c=>Oe(c)||typeof c=="function"):false)})),M(),I();function M(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?($.value=he(),Object.defineProperties(e.value,{$id:{value:$.value,enumerable:false,configurable:false,writable:false}})):e.value?.$id&&($.value=e.value.$id)),h.value=u.value.$value,Array.isArray(e.value)&&!a.isPrimitiveArray.value?v.value=e.value.filter(R=>typeof R=="object").map((R,c)=>{let{scope:d,unwrapped:T}=Je(t.value.$each,vue.toRef(()=>R),c);d&&j.push(d);let P=vue.toRef(y.value??[],c),X=vue.toRef(m?.value??{},"$each"),p=vue.computed(()=>f?.value?.$each),A=Ze({$id:$.value,path:n,customMessages:r,rules:T??{},stateValue:vue.toRef(()=>R),index:c,options:i,storage:l,externalErrors:X,schemaErrors:p,initialState:P,shortcuts:b,fieldName:B,schemaMode:S});return A||null}).filter(R=>!!R):v.value=[],u.value=Ne({state:e,rulesDef:t,customMessages:r,path:n,storage:l,options:i,externalErrors:vue.toRef(m?.value??{},"$self"),schemaErrors:vue.computed(()=>f?.value?.$self),$isArray:true,initialState:y,shortcuts:b,fieldName:B,schemaMode:S});}function o(){if(Array.isArray(e.value)&&!a.isPrimitiveArray.value){let R=Q(v.value);v.value=e.value.filter(c=>typeof c=="object").map((c,d)=>{let T=vue.toRef(()=>c);if(c.$id&&v.value.find(P=>P.$id===c.$id)){let P=l.getArrayStatus($.value,c.$id);return P?(P.$value=T,P):null}else {let{scope:P,unwrapped:X}=Je(t.value.$each,T,d);P&&j.push(P);let p=vue.toRef(m?.value??{},"$each"),A=vue.computed(()=>f?.value?.$each??[]),H=Ze({$id:$.value,path:n,customMessages:r,rules:X??{},stateValue:T,index:d,options:i,storage:l,externalErrors:p,schemaErrors:A,initialState:vue.toRef(y.value??[],d),shortcuts:b,fieldName:B,schemaMode:S});return H||null}}).filter(c=>!!c),R.filter(c=>!e.value?.find(d=>c.$id===d.$id)).forEach((c,d)=>{l.deleteArrayStatus($.value,d.toString());});}else v.value=[];}function s(){E=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?M():o();},{deep:_e?1:true,flush:"pre"});}function I(){s(),D=vue.effectScope(),N=D.run(()=>{let R=vue.computed({get:()=>e.value,set(x){E(),e.value=x,s();}}),c=vue.computed(()=>u.value.$dirty&&(!v.value.length||v.value.every(x=>x.$dirty))),d=vue.computed(()=>u.value.$anyDirty||v.value.some(x=>x.$anyDirty)),T=vue.computed(()=>u.value.$invalid||v.value.some(x=>x.$invalid)),P=vue.computed(()=>(Y(u.value.$rules)?true:u.value.$valid)&&(!v.value.length||v.value.every(x=>x.$valid))),X=vue.computed(()=>u.value.$error||v.value.some(x=>x.$error)),p=vue.computed(()=>!(T.value||A.value)),A=vue.computed(()=>u.value.$pending||v.value.some(x=>x.$pending)),H=vue.computed(()=>!!v.value.length&&v.value.every(x=>x.$edited)),Z=vue.computed(()=>u.value.$anyEdited||v.value.some(x=>x.$anyEdited)),z=vue.computed(()=>({$self:u.value.$errors,$each:v.value.map(x=>x.$errors)})),oe=vue.computed(()=>({$self:u.value.$silentErrors,$each:v.value.map(x=>x.$silentErrors)})),g=vue.computed(()=>B);function _(){b?.collections&&Object.entries(b?.collections).forEach(([x,se])=>{let le=vue.effectScope();W[x]=le.run(()=>{let ge=vue.ref();return vue.watchEffect(()=>{ge.value=se(vue.reactive({$dirty:c,$error:X,$silentValue:R,$pending:A,$invalid:T,$valid:P,$errors:z,$ready:p,$silentErrors:oe,$anyDirty:d,$name:g,$each:v,$self:u,$value:e,$edited:H,$anyEdited:Z}));}),ge}),j.push(le);});}let W={};return _(),{$dirty:c,$anyDirty:d,$invalid:T,$valid:P,$error:X,$pending:A,$errors:z,$silentErrors:oe,$ready:p,$name:g,$shortcuts:W,$silentValue:R,$edited:H,$anyEdited:Z}}),a.isPrimitiveArray.value&&t.value.$each&&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`);}function V(){E&&E(),u.value&&u.value.$unwatch(),v.value&&v.value.forEach(R=>{"$dirty"in R&&R.$unwatch();}),D.stop(),D=vue.effectScope(),w.stop(),w=vue.effectScope(true),j.forEach(R=>R.stop()),j=[];}function G(R=true,c=false){u.value.$touch(R,c),v.value.forEach(d=>{d.$touch(R,c);});}function J(){u.value.$reset(),v.value.forEach(R=>{R.$reset();});}async function C(){let R=e.value;try{return {result:(await Promise.allSettled([u.value.$validate(),...v.value.map(T=>T.$validate())])).every(T=>T.status==="fulfilled"?T.value.result===!0:!1),data:R}}catch{return {result:false,data:R}}}function L(){u.value.$clearExternalErrors(),v.value.forEach(R=>{R.$clearExternalErrors();});}function ie(R=true){let c=v.value.map(d=>{if(Tt(d))return d.$extractDirtyFields(R)});return R&&c.every(d=>Y(d))&&(c=[]),c}function de(){V(),e.value=Q(y.value),J();}let{$shortcuts:pe,...me}=N;return vue.reactive({$self:u,...me,...pe,$each:v,$value:e,$validate:C,$unwatch:V,$watch:I,$touch:G,$reset:J,$resetAll:de,$extractDirtyFields:ie,$clearExternalErrors:L})}function Ue({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:l,schemaErrors:i,rootSchemaErrors:m,validationGroups:f,initialState:S,fieldName:y,...b}){let B=vue.effectScope(),D,N=[],w=null,a=null,j=null,$=null;async function E(R=true){let c=Object.entries(e.value),d=Object.fromEntries(c.filter(([p,A])=>!!A).map(([p,A])=>{if(A){let H=vue.toRef(t.value??{},p),Z=vue.toRef(()=>A),z=vue.toRef(l?.value??{},p),oe=vue.computed(()=>i?.value?.[p]),g=vue.toRef(S?.value??{},p);return [p,Te({state:H,rulesDef:Z,path:r?`${r}.${p}`:p,externalErrors:z,schemaErrors:oe,initialState:g,fieldName:p,...b})]}return []})),T=Object.fromEntries(Object.entries(vue.unref(l)??{}).filter(([p,A])=>!(p in e.value)&&!!A).map(([p])=>{let A=vue.toRef(t.value??{},p),H=vue.toRef(l?.value??{},p),Z=vue.computed(()=>i?.value?.[p]),z=vue.toRef(S?.value??{},p);return [p,Te({state:A,rulesDef:vue.computed(()=>({})),path:r?`${r}.${p}`:p,externalErrors:H,schemaErrors:Z,initialState:z,fieldName:p,...b})]})),P=Object.fromEntries(Object.entries(vue.unref(i)??{}).map(([p])=>{let A=vue.toRef(t.value??{},p),H=vue.toRef(l?.value??{},p),Z=vue.computed(()=>i?.value?.[p]),z=vue.toRef(S?.value??{},p);return [p,Te({state:A,rulesDef:vue.computed(()=>({})),path:r?`${r}.${p}`:p,externalErrors:H,schemaErrors:Z,initialState:z,fieldName:p,...b})]})),X=Object.fromEntries(Object.entries(t.value??{}).filter(([p])=>!(p in e.value)&&!(p in(T??{}))&&!(p in(P??{}))).map(([p])=>{let A=vue.toRef(t.value??{},p),H=vue.toRef(l?.value??{},p),Z=vue.computed(()=>i?.value?.[p]),z=vue.toRef(S?.value??{},p);return [p,Te({state:A,rulesDef:vue.computed(()=>({})),path:r?`${r}.${p}`:p,externalErrors:H,schemaErrors:Z,initialState:z,fieldName:p,...b})]}));u.value={...d,...T,...P,...X},R&&o();}let u=b.storage.getFieldsEntry(r);E();function v(){l&&(j=vue.watch(l,()=>{s(),E();},{deep:true}));}function M(){$=vue.watch(t,()=>{s(),E(),G(true,true);},{flush:"sync"});}function o(){n&&(w?.(),w=vue.watch(n,()=>{s(),E();},{deep:true,flush:"post"}),v()),m&&(a?.(),a=vue.watch(m,()=>{s(),E();},{deep:true,flush:"post"})),M(),D=B.run(()=>{let R=vue.computed({get:()=>t.value,set(U){s(),t.value=U,E();}}),c=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([U,O])=>O?.$dirty)),d=vue.computed(()=>Object.entries(u.value).some(([U,O])=>O?.$anyDirty)),T=vue.computed(()=>Object.entries(u.value).some(([U,O])=>O?.$invalid)),P=vue.computed(()=>{let U=Object.entries(u.value).filter(([O,K])=>xt(K)?!K.$inactive:true);return U.length?U.every(([O,K])=>K?.$valid):false}),X=vue.computed(()=>d.value&&!z.value&&T.value),p=vue.computed(()=>vue.unref(b.options.rewardEarly)!=null?vue.unref(b.options.rewardEarly):false),A=vue.computed(()=>vue.unref(b.options.autoDirty)!=null?vue.unref(b.options.autoDirty):!p.value),H=vue.computed(()=>A.value?d.value&&!(T.value||z.value):!(T.value||z.value)),Z=vue.ref(false),z=vue.computed(()=>Z.value||Object.entries(u.value).some(([U,O])=>O?.$pending)),oe=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([U,O])=>[U,O?.$errors]))),g=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([U,O])=>[U,O?.$silentErrors]))),_=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([U,O])=>O?.$edited)),W=vue.computed(()=>Object.entries(u.value).some(([U,O])=>O?.$anyEdited)),x=vue.computed(()=>y);function se(){b.shortcuts?.nested&&Object.entries(b.shortcuts.nested).forEach(([U,O])=>{let K=vue.effectScope();ge[U]=K.run(()=>{let $e=vue.ref();return vue.watchEffect(()=>{$e.value=O(vue.reactive({$dirty:c,$value:t,$silentValue:R,$error:X,$pending:z,$invalid:T,$valid:P,$ready:H,$anyDirty:d,$name:x,$silentErrors:g,$errors:oe,$fields:u,$edited:_,$anyEdited:W}));}),$e}),N.push(K);});}let le=vue.computed({get:()=>f?Object.fromEntries(Object.entries(f?.(u.value)??{}).map(([U,O])=>O.length?[U,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(K=>[K,$t(O,K)])),...Object.fromEntries(["$errors","$silentErrors"].map(K=>[K,yt(O,K)]))}]:[])):{},set(){}}),ge={};return se(),{$dirty:c,$anyDirty:d,$invalid:T,$valid:P,$error:X,$pending:z,$errors:oe,$silentErrors:g,$ready:H,$name:x,$shortcuts:ge,$groups:le,$silentValue:R,$edited:_,$anyEdited:W,$localPending:Z}});}function s(){w?.(),j?.(),$?.(),a?.(),N=[],D={},u.value&&Object.entries(u.value).forEach(([R,c])=>{c.$unwatch();});}function I(){Object.entries(u.value).forEach(([R,c])=>{c.$clearExternalErrors();});}function V(){j?.(),Object.values(u.value).forEach(R=>{R.$reset();}),S.value={...Q(t.value)},v();}function G(R=true,c=false){Object.values(u.value).forEach(d=>{d.$touch(R,c);});}async function J(){s(),t.value=Q({...S.value??{}}),V(),E();}function C(R){return R.filter(([c,d])=>ne(d)?!(d&&typeof d=="object"&&"_null"in d)&&!Y(d):Array.isArray(d)?d.length:true)}function L(R=true){let c=Object.entries(u.value).map(([d,T])=>[d,T.$extractDirtyFields(R)]);return R&&(c=C(c)),Object.fromEntries(c)}async function ie(){try{if(b.schemaMode)return b.onValidate?(G(!1),D.$localPending.value=!0,b.onValidate()):{result:!1,data:t.value};{let R=t.value;return {result:(await Promise.allSettled(Object.values(u.value).map(T=>T.$validate()))).every(T=>T.status==="fulfilled"?T.value.result===!0:!1),data:R}}}catch{return {result:false,data:t.value}}finally{D.$localPending.value=false;}}let{$shortcuts:de,$localPending:pe,...me}=D;return vue.reactive({...me,...de,$fields:u,$value:t,$resetAll:J,$reset:V,$touch:G,$validate:ie,$unwatch:s,$watch:o,$clearExternalErrors:I,$extractDirtyFields:L})}function Te({rulesDef:e,...t}){if(bt(e,t.state))return wt({rulesDef:e,...t});if(ht(t.state,e)){if(Ve(t.state))return Ue({rulesDef:e,...t});{let n=vue.effectScope().run(()=>{let m=vue.toRef(t.state.value?t.state:vue.ref({}));return vue.watch(()=>t.state.value,f=>{m.value=f;},{deep:true}),vue.watch(m,f=>{t.state.value=f;},{deep:true}),{fakeState:m}}),{state:l,...i}=t;return Ue({rulesDef:e,...i,state:n.fakeState})}}else if(Et(e))return Ne({rulesDef:e,...t})}function Ie({initialState:e,options:t,scopeRules:r,state:n,customRules:l,shortcuts:i,schemaErrors:m,schemaMode:f=false,onValidate:S}){let y=Ke(),b=vue.ref();return b.value=Ue({rootRules:r,rulesDef:r,state:n,customMessages:l?.(),storage:y,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:i,fieldName:"root",path:"",schemaErrors:m,rootSchemaErrors:m,schemaMode:f,onValidate:S}),vue.getCurrentScope()&&vue.onScopeDispose(()=>{b.value?.$unwatch();}),vue.reactive({regle:b})}function rt(e,t,r){let n={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function l(i,m,f){let S=vue.isRef(m)?m:vue.computed(typeof m=="function"?m:()=>m),y={...n,...f},b=vue.isRef(i)?i:vue.ref(i),B=vue.ref({...Q(b.value)});return {r$:Ie({scopeRules:S,state:b,options:y,initialState:B,customRules:e,shortcuts:r}).regle}}return l}var ke=rt();function nt(){function e(t,r){return r}return e}var at=nt();function Vt({rules:e,modifiers:t,shortcuts:r}){let n=rt(e,t,r),l=nt();return {useRegle:n,inferRules:l}}function je(e,t){let r=t??false,n=vue.computed({get:()=>Object.fromEntries(Object.entries(e).map(([o,s])=>[o,s.$value])),set:o=>{typeof o=="object"&&Object.entries(o).forEach(([s,I])=>e[s].$value=I);}}),l=vue.computed({get:()=>Object.fromEntries(Object.entries(e).map(([o,s])=>[o,s.$silentValue])),set:o=>{typeof o=="object"&&Object.entries(o).forEach(([s,I])=>e[s].$silentValue=I);}}),i=vue.computed(()=>Object.entries(e).every(([o,s])=>s?.$dirty)),m=vue.computed(()=>Object.entries(e).some(([o,s])=>s?.$anyDirty)),f=vue.computed(()=>Object.entries(e).some(([o,s])=>s?.$invalid)),S=vue.computed(()=>Object.entries(e).every(([o,s])=>s?.$invalid)),y=vue.computed(()=>Object.entries(e).some(([o,s])=>s?.$error)),b=vue.computed(()=>Object.entries(e).every(([o,s])=>s?.$ready)),B=vue.computed(()=>Object.entries(e).some(([o,s])=>s?.$pending)),D=vue.computed(()=>Object.fromEntries(Object.entries(e).map(([o,s])=>[o,s.$errors]))),N=vue.computed(()=>Object.fromEntries(Object.entries(e).map(([o,s])=>[o,s.$silentErrors]))),w=vue.computed(()=>Object.entries(e).every(([o,s])=>s?.$edited)),a=vue.computed(()=>Object.entries(e).some(([o,s])=>s?.$anyEdited)),j=vue.computed(()=>e);function $(){Object.values(e).forEach(o=>{o.$reset();});}function h(){Object.values(e).forEach(o=>{o.$touch();});}function E(){Object.values(e).forEach(o=>{o.$resetAll();});}function u(o=true){return Object.values(e).map(s=>s.$extractDirtyFields(o))}function v(){Object.values(e).forEach(o=>{o.$clearExternalErrors();});}async function M(){try{let o=n.value;return {result:(await Promise.allSettled(Object.values(e).map(V=>V.$validate()))).every(V=>V.status==="fulfilled"?V.value.result===!0:!1),data:o}}catch{return {result:false,data:n.value}}}return vue.reactive({...!r&&{$instances:j,$value:n,$silentValue:l,$errors:D,$silentErrors:N},$dirty:i,$anyDirty:m,$invalid:f,$valid:S,$error:y,$pending:B,$ready:b,$edited:w,$anyEdited:a,$resetAll:E,$reset:$,$touch:h,$validate:M,$extractDirtyFields:u,$clearExternalErrors:v})}function Ft(e){function t(){let r=vue.ref(je(e.value,true)),n=vue.reactive({r$:r});return vue.watch(e,l=>{r.value=je(l,true);}),{r$:n.r$}}return {useCollectNestedValidations:t}}function _t(e){let t=e??ke,r=vue.ref({});return {useNestedRegle:(l,i,m)=>{let f=he(),{r$:S}=t(l,i,m);r.value[f]=S,vue.onScopeDispose(()=>{delete r.value[f];});function y(){delete r.value[f];}return {r$:S,$dispose:y}},instances:r}}function lt(e){let{instances:t,useNestedRegle:r}=_t(e),{useCollectNestedValidations:n}=Ft(t);return {useNestedRegle:r,useCollectNestedValidations:n}}
2
+ exports.InternalRuleType=He;exports.createNestedUseRegle=lt;exports.createRule=qe;exports.defineRegleConfig=Vt;exports.inferRules=at;exports.mergeRegles=je;exports.unwrapRuleParameters=ee;exports.useRegle=ke;exports.useRootStorage=Ie;
@@ -1,2 +1,2 @@
1
- import {toValue,version,ref,getCurrentScope,onScopeDispose,reactive,shallowRef,effectScope,computed,isRef,toRef,unref,watch,watchEffect}from'vue';function Q(e){return e==null?true:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?false:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var Rt=Symbol("regle-rule");function jt(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 X(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>X(n)))),r=="Map"&&(t=new Map([...e].map(n=>[X(n[0]),X(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,jt(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=X(e[n]);}return t}function re(e){return e instanceof Date||e instanceof File?false:typeof e=="object"&&e!==null&&!Array.isArray(e)}function We(e){if(Q(e))return false;try{let t=null;if(e instanceof Date)t=e;else if(typeof e=="string"){let r=new Date(e);if(r.toString()==="Invalid Date")return !1;t=r;}return !!t}catch{return false}}function Ue(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}var Be=(r=>(r.Inline="__inline",r.Async="__async",r))(Be||{});function dt(e,t){return e.some(r=>r[t])}function pt(e,t){return e.reduce((r,n)=>{let l=n[t]||[];return r.concat(l)},[])}function ee(e){try{return e.map(t=>toValue(t))}catch{return []}}function vt(e){return e.map(t=>t instanceof Function?computed(t):isRef(t)?t:toRef(()=>t))}function mt(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(p=>p.trim()).filter(p=>p.length>0).length:0}function ke(e,...t){let{validator:r,type:n}=e,l=n==="__async"||r.constructor.name==="AsyncFunction";return {...{validator(R,...h){return e.validator(R,...ee(h.length?h:t))},message(R){return typeof e.message=="function"?e.message({...R,$params:ee(R?.$params?.length?R.$params:t)}):e.message},active(R){return typeof e.active=="function"?e.active({...R,$params:ee(R?.$params?.length?R.$params:t)}):e.active??true},tooltip(R){return typeof e.tooltip=="function"?e.tooltip({...R,$params:ee(R?.$params?.length?R.$params:t)}):e.tooltip??[]},exec(R){let h=e.validator(R,...ee(t)),m;return h instanceof Promise?h.then(g=>(m=g,typeof m=="object"&&"$valid"in m?m.$valid:typeof m=="boolean"?m:false)):(m=h,typeof m=="object"&&"$valid"in m?m.$valid:typeof m=="boolean"?m:false)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:false,_tooltip_patched:false,_async:l,_params:vt(t),_brand:Rt}}function Le(e){if(typeof e.validator=="function"){let r=ke(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(mt(e.validator)>1){let l=function(...i){return ke(e,...i)};return l.validator=r.validator,l.message=r.message,l.active=r.active,l.tooltip=r.tooltip,l.type=r.type,l.exec=r.exec,l._validator=r.validator,l._message=r.message,l._active=r.active,l._tooltip=r.tooltip,l._type=e.type,l._message_pacthed=false,l._tooltip_pacthed=false,l._async=n,l}else return r}throw new Error("Validator must be a function")}function He(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),l=shallowRef(new Map),i=shallowRef(new Map);function p(v){let $=t.value.get(v);if($)return $;{let E=ref({});return t.value.set(v,E),E}}function R(v){let $=r.value.get(v);if($)return $;{let E=ref([]);return r.value.set(v,E),E}}function h(v,$,E){i.value.set(`${v}-${$}`,E);}function m(v,$){return i.value.get(`${v}-${$}`)}function g(v,$){v&&$!=null&&i.value.delete(`${v}-${$}`);}function q(v,$){n.value.set(v,$);}function D(v){return n.value.get(v)??false}function W(v,$){e.value.set(v,$);}function O(v,$){let E=e.value.get(v);return E?a($,E)?{valid:true}:{valid:false}:undefined}function a(v,$){let E=Object.keys($),o=Object.keys(v);return o.length!==E.length||!o.every(j=>E.includes(j))?false:o.every(j=>{let x=v[j],I=$[j];return !I||!x||typeof x=="function"||typeof I=="function"||typeof x=="number"||typeof x=="boolean"?false:x._params?x._params?.every((_,B)=>{if(typeof I=="number"||typeof I=="boolean")return true;{let V=ee(I._params),Y=ee(x._params);return V?.[B]===Y?.[B]}}):true})}function F(v){let $=l.value.get(v);if($)return $;{let E=ref(false),o=ref(true),y=ref({}),j=ref(false);return l.value.set(v,{$pending:E,$valid:o,$metadata:y,$validating:j}),{$pending:E,$valid:o,$metadata:y,$validating:j}}}return getCurrentScope()&&onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),l.value.clear(),i.value.clear();}),{addRuleDeclEntry:W,setDirtyEntry:q,checkRuleDeclEntry:O,getDirtyState:D,trySetRuleStatusRef:F,getFieldsEntry:p,getCollectionsEntry:R,getArrayStatus:m,addArrayStatus:h,deleteArrayStatus:g,arrayStatusStorage:i}}function Ae(e){return e.value instanceof Date||e.value instanceof File?false:re(e.value)}function ze(e,t,r){let n=effectScope(),l;return e instanceof Function?l=n.run(()=>e(t,r??0)):l=e,{scope:n,unwrapped:l}}function Me(e,t,r){let n,l=(...i)=>new Promise(p=>{clearTimeout(n),n=setTimeout(()=>{n=undefined,Promise.resolve(e.apply(this,[...i])).then(p);},t);});return l.cancel=()=>{clearTimeout(n),n=undefined;},l}function Lt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let l=0;l<Math.min(r.length,n.length);l++){let i=Number(r[l]),p=Number(n[l]);if(i>p)return 1;if(p>i)return -1;if(!isNaN(i)&&isNaN(p))return 1;if(isNaN(i)&&!isNaN(p))return -1}return 0}var Fe=Lt(version,"3.5.0")!==-1;function Ht(){return Math.floor(Math.random()*Date.now()).toString()}function je(){return typeof window>"u"?Ht():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function yt(e,t){return Ae(e)||re(t.value)&&!Q(t.value)&&!Object.entries(t.value).some(([r,n])=>Ce(n)||typeof n=="function")}function $t(e,t){return !!e.value&&re(e.value)&&"$each"in e.value||Array.isArray(t.value)}function gt(e){return !!e.value&&re(e.value)}function Ce(e){return re(e)&&"_validator"in e}function Pe(e){return typeof e.value!="function"}function St(e){return re(e)&&"$fields"in e}function ht(e){return !!e&&"$rules"in e}function qe({field:e,silent:t=false}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$error&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$error?e.$externalErrors??[]:[]).concat(e.$error?e.$schemaErrors??[]:[])}function Et({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 bt({customMessages:e,rule:t,ruleKey:r,state:n,path:l,storage:i,$debounce:p,modifiers:R}){let h=effectScope(),m={},g,q=ref(false),{$pending:D,$valid:W,$metadata:O,$validating:a}=i.trySetRuleStatusRef(`${l}.${r}`);function F(){h=effectScope(),m=h.run(()=>{let x=ref(false),I=ref(false),_=ref(true),B=ref(false),V=ref(false),Y=computed(()=>({$value:n.value,$error:I.value,$dirty:x.value,$pending:B.value,$valid:V.value,$invalid:_.value,$rule:{$valid:W.value,$invalid:!W.value,$pending:D.value},$params:s.value,...O.value})),T=computed(()=>Pe(t)?typeof t.value.active=="function"?t.value.active(Y.value):!!t.value.active:true);function k(c){let S="",C=e?e[r]?.[c]:undefined;if(C&&(typeof C=="function"?S=C(Y.value):S=C),Pe(t)){let Z=`_${c}_patched`;C&&!t.value[Z]||(typeof t.value[c]=="function"?S=t.value[c](Y.value):S=t.value[c]??"");}return S}let se=computed(()=>{let c=k("message");return Q(c)&&(c="This field is not valid"),c}),Re=computed(()=>k("tooltip")),de=computed(()=>Pe(t)&&t.value.type?t.value.type:r),pe=computed(()=>Pe(t)?t.value.validator:t.value),s=computed(()=>typeof t.value=="function"?[]:ee(t.value._params??[])),u=computed(()=>`${l}.${de.value}`);return {$active:T,$message:se,$type:de,$validator:pe,$params:s,$path:u,$tooltip:Re,$fieldValid:V,$fieldError:I,$fieldDirty:x,$fieldPending:B,$fieldInvalid:_}}),g=watch(m?.$params,()=>{(R.$autoDirty.value||R.$rewardEarly.value&&m.$fieldError.value)&&o();});}F();function v(){W.value=true,m.$fieldDirty.value&&(D.value=true);}async function $(){let x=false;try{let I=m.$validator.value,_=I(n.value,...m.$params.value),B=n.value;v();let V;if(_ instanceof Promise?V=await _:V=_,n.value!==B)return !0;if(typeof V=="boolean")x=V;else {let{$valid:Y,...T}=V;x=Y,O.value=T;}}catch{x=false;}finally{D.value=false;}return x}let E=Me($,p??200);async function o(){try{a.value=!0;let x=!1;if(Ce(t.value)&&t.value._async)x=await E();else {let I=m.$validator.value,_=I(n.value,...m.$params.value);if(_ 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(_!=null)if(typeof _=="boolean")x=_;else {let{$valid:B,...V}=_;x=B,O.value=V;}}return W.value=x,x}catch{return false}finally{a.value=false;}}function y(){W.value=true,O.value={},D.value=false,a.value=false,F();}function j(){g(),h.stop(),h=effectScope();}return reactive({...m,$pending:D,$valid:W,$metadata:O,$haveAsync:q,$validating:a,$validate:o,$unwatch:j,$watch:F,$reset:y})}function _e({state:e,rulesDef:t,customMessages:r,path:n,fieldName:l,storage:i,options:p,externalErrors:R,schemaErrors:h,schemaMode:m,onUnwatch:g,$isArray:q,initialState:D,shortcuts:W}){let O=effectScope(),a,F=[],v,$,E,o,y,j=()=>{};function x(){let d=t.value,M=i.checkRuleDeclEntry(n,d);k.value=Object.fromEntries(Object.entries(d).filter(([U])=>U.startsWith("$"))),B(),T.value=Object.fromEntries(Object.entries(t.value).filter(([U])=>!U.startsWith("$")).map(([U,b])=>{if(b){let oe=toRef(()=>b);return [U,bt({modifiers:{$autoDirty:a.$autoDirty,$rewardEarly:a.$rewardEarly},customMessages:r,rule:oe,ruleKey:U,state:e,path:n,storage:i,$debounce:k.value.$debounce})]}return []}).filter(U=>!!U.length)),a.processShortcuts(),I(),M?.valid!=null&&(a.$dirty.value=i.getDirtyState(n),a.$dirty.value&&j()),i.addRuleDeclEntry(n,d);}function I(){j=a.$debounce.value?Me(Y,a.$debounce.value??a.$haveAnyAsyncRule?100:0):Y;}function _(){T.value&&Object.entries(T.value).forEach(([d,M])=>{M.$unwatch();}),E(),y?.(),a.$dirty.value&&i.setDirtyEntry(n,a.$dirty.value),v?.(),$?.(),O.stop(),O=effectScope(),F.forEach(d=>d.stop()),F=[],g?.(),o?.();}function B(){T.value&&Object.entries(T.value).forEach(([d,M])=>{M.$watch();}),a=O.run(()=>{let d=ref(false),M=ref(false),U=computed(()=>d.value),b=computed(()=>k.value.$debounce),oe=computed(()=>k.value.$lazy!=null?k.value.$lazy:unref(p.lazy)!=null?unref(p.lazy):false),ae=computed(()=>k.value.$rewardEarly!=null?k.value.$rewardEarly:unref(p.rewardEarly)!=null?unref(p.rewardEarly):false),ve=computed(()=>k.value.$clearExternalErrorsOnChange!=null?k.value.$clearExternalErrorsOnChange:unref(p.clearExternalErrorsOnChange)!=null?unref(p.clearExternalErrorsOnChange):true),N=computed(()=>k.value.$autoDirty!=null?k.value.$autoDirty:unref(p.autoDirty)!=null?unref(p.autoDirty):!ae.value),P=computed(()=>Object.entries(T.value).some(([ne,ue])=>ue.$validating)),J=computed({get:()=>e.value,set(ne){v(),e.value=ne,V();}}),me=computed(()=>ye.value&&!Ie.value&&d.value),rt=computed(()=>qe({field:{$error:me.value,$externalErrors:R?.value,$schemaErrors:h?.value,$rules:T.value}})),nt=computed(()=>qe({field:{$error:true,$externalErrors:R?.value,$schemaErrors:h?.value,$rules:T.value},silent:true})),Ge=computed(()=>d.value?We(D.value)&&We(e.value)?Ue(D.value).getDate()!==Ue(e.value).getDate():D.value==null?!!e.value:Array.isArray(e.value)&&Array.isArray(D.value)?e.value.length!==D.value.length:D.value!==e.value:false),at=computed(()=>Ge.value),lt=computed(()=>Et({field:{$rules:T.value}})),ot=computed(()=>N.value?U.value&&!(ye.value||Ie.value):!(ye.value||Ie.value)),Ie=computed(()=>M.value||!ae.value?Object.entries(T.value).some(([ne,ue])=>ue.$pending):false),ye=computed(()=>R?.value?.length||h?.value?.length?true:Oe.value?false:!ae.value||ae.value&&M.value?Object.entries(T.value).some(([ne,ue])=>!ue.$valid):false),ut=computed(()=>l),Oe=computed(()=>!!(Q(T.value)&&!m)),st=computed(()=>R?.value?.length||Oe.value?false:d.value&&!Q(e.value)&&!P.value?m?!h?.value?.length:Object.values(T.value).every(ne=>ne.$valid&&ne.$active):false),Mt=computed(()=>Object.entries(T.value).some(([ne,ue])=>ue.$haveAsync));function Ft(){W?.fields&&Object.entries(W.fields).forEach(([ne,ue])=>{let ct=effectScope();it[ne]=ct.run(()=>{let ft=ref();return watchEffect(()=>{ft.value=ue(reactive({$dirty:d,$externalErrors:R?.value??[],$value:e,$silentValue:J,$rules:T,$error:me,$pending:Ie,$invalid:ye,$valid:st,$errors:rt,$ready:ot,$silentErrors:nt,$anyDirty:U,$tooltips:lt,$name:ut,$inactive:Oe,$edited:Ge,$anyEdited:at}));}),ft}),F.push(ct);});}let it={};return watch(ye,ne=>{ne||(M.value=false);}),{$error:me,$pending:Ie,$invalid:ye,$valid:st,$debounce:b,$lazy:oe,$errors:rt,$ready:ot,$silentErrors:nt,$rewardEarly:ae,$autoDirty:N,$clearExternalErrorsOnChange:ve,$anyDirty:U,$edited:Ge,$anyEdited:at,$name:ut,$haveAnyAsyncRule:Mt,$shortcuts:it,$validating:P,$tooltips:lt,$dirty:d,triggerPunishment:M,processShortcuts:Ft,$silentValue:J,$inactive:Oe}}),V(),E=watch(a.$dirty,d=>{i.setDirtyEntry(n,d),Object.values(T.value).forEach(M=>{M.$fieldDirty=d;});}),y=watch([a.$error,a.$valid,a.$invalid,a.$pending],()=>{Object.values(T.value).forEach(d=>{d.$fieldError=a.$error.value,d.$fieldInvalid=a.$invalid.value,d.$fieldPending=a.$pending.value,d.$fieldValid=a.$valid.value;});}),$=watch(a.$valid,d=>{a.$rewardEarly.value&&d&&(a.triggerPunishment.value=false);}),o=watch(a.$haveAnyAsyncRule,I);}function V(){v=watch(e,()=>{a.$autoDirty.value&&(a.$dirty.value||(a.$dirty.value=true)),t.value instanceof Function&&x(),(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&j(),a.$rewardEarly.value!==true&&a.$clearExternalErrorsOnChange.value&&u();},{deep:q?true:Fe?1:true,flush:"post"});}function Y(){Object.values(T.value).forEach(d=>{d.$validate();});}let T=ref({}),k=ref({});x();function se(){u(),a.$dirty.value=false,a.triggerPunishment.value=false,i.setDirtyEntry(n,false),D.value=re(e.value)?X(e.value):Array.isArray(e.value)?[...e.value]:e.value,Object.entries(T.value).forEach(([d,M])=>{M.$reset();}),!a.$lazy.value&&a.$autoDirty.value&&Object.values(T.value).forEach(d=>d.$validate());}function Re(d=true,M=false){a.$dirty.value||(a.$dirty.value=true),M&&d?(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&j():d&&j();}async function de(){try{let d=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:d};return m?{result:!h?.value?.length,data:d}:Q(T.value)?{result:!0,data:d}:{result:(await Promise.allSettled(Object.entries(T.value).map(([b,oe])=>oe.$validate()))).every(b=>b.status==="fulfilled"?b.value===!0:!1),data:d}}catch{return {result:false,data:e.value}}}function pe(){_(),e.value=X(D),se();}function s(d=true){return a.$dirty.value?e.value:d?{_null:true}:null}function u(){R?.value?.length&&(R.value=[]);}!a.$lazy.value&&!a.$dirty.value&&a.$autoDirty.value&&j();let{$shortcuts:c,$validating:S,$autoDirty:C,$rewardEarly:Z,$clearExternalErrorsOnChange:f,$haveAnyAsyncRule:w,$debounce:L,$lazy:K,triggerPunishment:H,...le}=a;return reactive({...le,$externalErrors:R,$value:e,$rules:T,...c,$reset:se,$touch:Re,$validate:de,$unwatch:_,$watch:B,$resetAll:pe,$extractDirtyFields:s,$clearExternalErrors:u})}function Qe({$id:e,path:t,index:r,options:n,storage:l,stateValue:i,customMessages:p,rules:R,externalErrors:h,schemaErrors:m,initialState:g,shortcuts:q,fieldName:D,schemaMode:W}){let O=R.$key?R.$key:je(),a=`${t}.${String(O)}`;typeof i.value=="object"&&i.value!=null&&(i.value.$id?a=`${t}.${i.value.$id}`:Object.defineProperties(i.value,{$id:{value:O,enumerable:false,configurable:false,writable:false}}));let F=toRef(h?.value??[],r),v=computed(()=>m?.value?.[r]),$=Ee({state:i,rulesDef:toRef(()=>R),customMessages:p,path:a,storage:l,options:n,externalErrors:F,schemaErrors:v,initialState:g,shortcuts:q,fieldName:D,schemaMode:W});if($){let E=i.value?.$id;$.$id=E??String(O),l.addArrayStatus(e,$.$id,$);}return $}function It({state:e,rulesDef:t,customMessages:r,path:n,storage:l,options:i,externalErrors:p,schemaErrors:R,schemaMode:h,initialState:m,shortcuts:g,fieldName:q}){let D=effectScope(),W,O=effectScope(),a,F=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let v=ref(),$=ref(e.value),E,o=ref({}),y=l.getCollectionsEntry(n);a=O.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.every(u=>typeof u!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(u=>Ce(u)||typeof u=="function"):false)})),j(),_();function j(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(v.value=je(),Object.defineProperties(e.value,{$id:{value:v.value,enumerable:false,configurable:false,writable:false}})):e.value?.$id&&(v.value=e.value.$id)),$.value=o.value.$value,Array.isArray(e.value)&&!a.isPrimitiveArray.value?y.value=e.value.filter(s=>typeof s=="object").map((s,u)=>{let{scope:c,unwrapped:S}=ze(t.value.$each,toRef(()=>s),u);c&&F.push(c);let C=toRef(m.value??[],u),Z=toRef(p?.value??{},"$each"),f=computed(()=>R?.value?.$each),w=Qe({$id:v.value,path:n,customMessages:r,rules:S??{},stateValue:toRef(()=>s),index:u,options:i,storage:l,externalErrors:Z,schemaErrors:f,initialState:C,shortcuts:g,fieldName:q,schemaMode:h});return w||null}).filter(s=>!!s):y.value=[],o.value=_e({state:e,rulesDef:t,customMessages:r,path:n,storage:l,options:i,externalErrors:toRef(p?.value??{},"$self"),schemaErrors:computed(()=>R?.value?.$self),$isArray:true,initialState:m,shortcuts:g,fieldName:q,schemaMode:h});}function x(){if(Array.isArray(e.value)&&!a.isPrimitiveArray.value){let s=X(y.value);y.value=e.value.filter(u=>typeof u=="object").map((u,c)=>{let S=toRef(()=>u);if(u.$id&&y.value.find(C=>C.$id===u.$id)){let C=l.getArrayStatus(v.value,u.$id);return C?(C.$value=S,C):null}else {let{scope:C,unwrapped:Z}=ze(t.value.$each,S,c);C&&F.push(C);let f=toRef(p?.value??{},"$each"),w=computed(()=>R?.value?.$each??[]),L=Qe({$id:v.value,path:n,customMessages:r,rules:Z??{},stateValue:S,index:c,options:i,storage:l,externalErrors:f,schemaErrors:w,initialState:toRef(m.value??[],c),shortcuts:g,fieldName:q,schemaMode:h});return L||null}}).filter(u=>!!u),s.filter(u=>!e.value?.find(c=>u.$id===c.$id)).forEach((u,c)=>{l.deleteArrayStatus(v.value,c.toString());});}else y.value=[];}function I(){E=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?j():x();},{deep:Fe?1:true,flush:"pre"});}function _(){I(),D=effectScope(),W=D.run(()=>{let s=computed({get:()=>e.value,set(b){E(),e.value=b,I();}}),u=computed(()=>o.value.$dirty&&(!y.value.length||y.value.every(b=>b.$dirty))),c=computed(()=>o.value.$anyDirty||y.value.some(b=>b.$anyDirty)),S=computed(()=>o.value.$invalid||y.value.some(b=>b.$invalid)),C=computed(()=>(Q(o.value.$rules)?true:o.value.$valid)&&(!y.value.length||y.value.every(b=>b.$valid))),Z=computed(()=>o.value.$error||y.value.some(b=>b.$error)),f=computed(()=>!(S.value||w.value)),w=computed(()=>o.value.$pending||y.value.some(b=>b.$pending)),L=computed(()=>!!y.value.length&&y.value.every(b=>b.$edited)),K=computed(()=>o.value.$anyEdited||y.value.some(b=>b.$anyEdited)),H=computed(()=>({$self:o.value.$errors,$each:y.value.map(b=>b.$errors)})),le=computed(()=>({$self:o.value.$silentErrors,$each:y.value.map(b=>b.$silentErrors)})),d=computed(()=>q);function M(){g?.collections&&Object.entries(g?.collections).forEach(([b,oe])=>{let ae=effectScope();U[b]=ae.run(()=>{let ve=ref();return watchEffect(()=>{ve.value=oe(reactive({$dirty:u,$error:Z,$silentValue:s,$pending:w,$invalid:S,$valid:C,$errors:H,$ready:f,$silentErrors:le,$anyDirty:c,$name:d,$each:y,$self:o,$value:e,$edited:L,$anyEdited:K}));}),ve}),F.push(ae);});}let U={};return M(),{$dirty:u,$anyDirty:c,$invalid:S,$valid:C,$error:Z,$pending:w,$errors:H,$silentErrors:le,$ready:f,$name:d,$shortcuts:U,$silentValue:s,$edited:L,$anyEdited:K}}),a.isPrimitiveArray.value&&t.value.$each&&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`);}function B(){E&&E(),o.value&&o.value.$unwatch(),y.value&&y.value.forEach(s=>{"$dirty"in s&&s.$unwatch();}),D.stop(),D=effectScope(),O.stop(),O=effectScope(true),F.forEach(s=>s.stop()),F=[];}function V(s=true,u=false){o.value.$touch(s,u),y.value.forEach(c=>{c.$touch(s,u);});}function Y(){o.value.$reset(),y.value.forEach(s=>{s.$reset();});}async function T(){let s=e.value;try{return {result:(await Promise.allSettled([o.value.$validate(),...y.value.map(S=>S.$validate())])).every(S=>S.status==="fulfilled"?S.value.result===!0:!1),data:s}}catch{return {result:false,data:s}}}function k(){o.value.$clearExternalErrors(),y.value.forEach(s=>{s.$clearExternalErrors();});}function se(s=true){let u=y.value.map(c=>{if(St(c))return c.$extractDirtyFields(s)});return s&&u.every(c=>Q(c))&&(u=[]),u}function Re(){B(),e.value=X(m.value),Y();}let{$shortcuts:de,...pe}=W;return reactive({$self:o,...pe,...de,$each:y,$value:e,$validate:T,$unwatch:B,$watch:_,$touch:V,$reset:Y,$resetAll:Re,$extractDirtyFields:se,$clearExternalErrors:k})}function Ne({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:l,schemaErrors:i,rootSchemaErrors:p,validationGroups:R,initialState:h,fieldName:m,...g}){let q=effectScope(),D,W=[],O=null,a=null,F=null,v=null;async function E(s=true){let u=Object.entries(e.value),c=Object.fromEntries(u.filter(([f,w])=>!!w).map(([f,w])=>{if(w){let L=toRef(t.value??{},f),K=toRef(()=>w),H=toRef(l?.value??{},f),le=computed(()=>i?.value?.[f]),d=toRef(h?.value??{},f);return [f,Ee({state:L,rulesDef:K,path:r?`${r}.${f}`:f,externalErrors:H,schemaErrors:le,initialState:d,fieldName:f,...g})]}return []})),S=Object.fromEntries(Object.entries(unref(l)??{}).filter(([f,w])=>!(f in e.value)&&!!w).map(([f])=>{let w=toRef(t.value??{},f),L=toRef(l?.value??{},f),K=computed(()=>i?.value?.[f]),H=toRef(h?.value??{},f);return [f,Ee({state:w,rulesDef:computed(()=>({})),path:r?`${r}.${f}`:f,externalErrors:L,schemaErrors:K,initialState:H,fieldName:f,...g})]})),C=Object.fromEntries(Object.entries(unref(i)??{}).map(([f])=>{let w=toRef(t.value??{},f),L=toRef(l?.value??{},f),K=computed(()=>i?.value?.[f]),H=toRef(h?.value??{},f);return [f,Ee({state:w,rulesDef:computed(()=>({})),path:r?`${r}.${f}`:f,externalErrors:L,schemaErrors:K,initialState:H,fieldName:f,...g})]})),Z=Object.fromEntries(Object.entries(t.value??{}).filter(([f])=>!(f in e.value)&&!(f in(S??{}))&&!(f in(C??{}))).map(([f])=>{let w=toRef(t.value??{},f),L=toRef(l?.value??{},f),K=computed(()=>i?.value?.[f]),H=toRef(h?.value??{},f);return [f,Ee({state:w,rulesDef:computed(()=>({})),path:r?`${r}.${f}`:f,externalErrors:L,schemaErrors:K,initialState:H,fieldName:f,...g})]}));o.value={...c,...S,...C,...Z},s&&x();}let o=g.storage.getFieldsEntry(r);E();function y(){l&&(F=watch(l,()=>{I(),E();},{deep:true}));}function j(){v=watch(t,()=>{I(),E(),V(true,true);},{flush:"sync"});}function x(){n&&(O?.(),O=watch(n,()=>{I(),E();},{deep:true,flush:"post"}),y()),p&&(a?.(),a=watch(p,()=>{I(),E();},{deep:true,flush:"post"})),j(),D=q.run(()=>{let s=computed({get:()=>t.value,set(N){I(),t.value=N,E();}}),u=computed(()=>!!Object.entries(o.value).length&&Object.entries(o.value).every(([N,P])=>P?.$dirty)),c=computed(()=>Object.entries(o.value).some(([N,P])=>P?.$anyDirty)),S=computed(()=>Object.entries(o.value).some(([N,P])=>P?.$invalid)),C=computed(()=>{let N=Object.entries(o.value).filter(([P,J])=>ht(J)?!J.$inactive:true);return N.length?N.every(([P,J])=>J?.$valid):false}),Z=computed(()=>c.value&&!H.value&&S.value),f=computed(()=>unref(g.options.rewardEarly)!=null?unref(g.options.rewardEarly):false),w=computed(()=>unref(g.options.autoDirty)!=null?unref(g.options.autoDirty):!f.value),L=computed(()=>w.value?c.value&&!(S.value||H.value):!(S.value||H.value)),K=ref(false),H=computed(()=>K.value||Object.entries(o.value).some(([N,P])=>P?.$pending)),le=computed(()=>Object.fromEntries(Object.entries(o.value).map(([N,P])=>[N,P?.$errors]))),d=computed(()=>Object.fromEntries(Object.entries(o.value).map(([N,P])=>[N,P?.$silentErrors]))),M=computed(()=>!!Object.entries(o.value).length&&Object.entries(o.value).every(([N,P])=>P?.$edited)),U=computed(()=>Object.entries(o.value).some(([N,P])=>P?.$anyEdited)),b=computed(()=>m);function oe(){g.shortcuts?.nested&&Object.entries(g.shortcuts.nested).forEach(([N,P])=>{let J=effectScope();ve[N]=J.run(()=>{let me=ref();return watchEffect(()=>{me.value=P(reactive({$dirty:u,$value:t,$silentValue:s,$error:Z,$pending:H,$invalid:S,$valid:C,$ready:L,$anyDirty:c,$name:b,$silentErrors:d,$errors:le,$fields:o,$edited:M,$anyEdited:U}));}),me}),W.push(J);});}let ae=computed({get:()=>R?Object.fromEntries(Object.entries(R?.(o.value)??{}).map(([N,P])=>P.length?[N,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(J=>[J,dt(P,J)])),...Object.fromEntries(["$errors","$silentErrors"].map(J=>[J,pt(P,J)]))}]:[])):{},set(){}}),ve={};return oe(),{$dirty:u,$anyDirty:c,$invalid:S,$valid:C,$error:Z,$pending:H,$errors:le,$silentErrors:d,$ready:L,$name:b,$shortcuts:ve,$groups:ae,$silentValue:s,$edited:M,$anyEdited:U,$localPending:K}});}function I(){O?.(),F?.(),v?.(),a?.(),W=[],D={},o.value&&Object.entries(o.value).forEach(([s,u])=>{u.$unwatch();});}function _(){Object.entries(o.value).forEach(([s,u])=>{u.$clearExternalErrors();});}function B(){F?.(),Object.values(o.value).forEach(s=>{s.$reset();}),h.value={...X(t.value)},y();}function V(s=true,u=false){Object.values(o.value).forEach(c=>{c.$touch(s,u);});}async function Y(){I(),t.value=X({...h.value??{}}),B(),E();}function T(s){return s.filter(([u,c])=>re(c)?!(c&&typeof c=="object"&&"_null"in c)&&!Q(c):Array.isArray(c)?c.length:true)}function k(s=true){let u=Object.entries(o.value).map(([c,S])=>[c,S.$extractDirtyFields(s)]);return s&&(u=T(u)),Object.fromEntries(u)}async function se(){try{if(g.schemaMode)return g.onValidate?(V(!1),D.$localPending.value=!0,g.onValidate()):{result:!1,data:t.value};{let s=t.value;return {result:(await Promise.allSettled(Object.values(o.value).map(S=>S.$validate()))).every(S=>S.status==="fulfilled"?S.value.result===!0:!1),data:s}}}catch{return {result:false,data:t.value}}finally{D.$localPending.value=false;}}let{$shortcuts:Re,$localPending:de,...pe}=D;return reactive({...pe,...Re,$fields:o,$value:t,$resetAll:Y,$reset:B,$touch:V,$validate:se,$unwatch:I,$watch:x,$clearExternalErrors:_,$extractDirtyFields:k})}function Ee({rulesDef:e,...t}){if($t(e,t.state))return It({rulesDef:e,...t});if(yt(t.state,e)){if(Ae(t.state))return Ne({rulesDef:e,...t});{let n=effectScope().run(()=>{let p=toRef(t.state.value?t.state:ref({}));return watch(()=>t.state.value,R=>{p.value=R;},{deep:true}),watch(p,R=>{t.state.value=R;},{deep:true}),{fakeState:p}}),{state:l,...i}=t;return Ne({rulesDef:e,...i,state:n.fakeState})}}else if(gt(e))return _e({rulesDef:e,...t})}function xe({initialState:e,options:t,scopeRules:r,state:n,customRules:l,shortcuts:i,schemaErrors:p,schemaMode:R=false,onValidate:h}){let m=He(),g=ref();return g.value=Ne({rootRules:r,rulesDef:r,state:n,customMessages:l?.(),storage:m,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:i,fieldName:"root",path:"",schemaErrors:p,rootSchemaErrors:p,schemaMode:R,onValidate:h}),getCurrentScope()&&onScopeDispose(()=>{g.value?.$unwatch();}),reactive({regle:g})}function Ke(e,t,r){let n={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function l(i,p,R){let h=isRef(p)?p:computed(typeof p=="function"?p:()=>p),m={...n,...R},g=isRef(i)?i:ref(i),q=ref({...X(g.value)});return {r$:xe({scopeRules:h,state:g,options:m,initialState:q,customRules:e,shortcuts:r}).regle}}return l}var Ot=Ke();function et(){function e(t,r){return r}return e}var tt=et();function At({rules:e,modifiers:t,shortcuts:r}){let n=Ke(e,t,r),l=et();return {useRegle:n,inferRules:l}}
2
- export{Be as InternalRuleType,Le as createRule,At as defineRegleConfig,tt as inferRules,ee as unwrapRuleParameters,Ot as useRegle,xe as useRootStorage};
1
+ import {toValue,version,ref,getCurrentScope,onScopeDispose,reactive,computed,shallowRef,effectScope,isRef,toRef,unref,watch,watchEffect}from'vue';function Y(e,t=true){return e==null?true:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?t?e.length===0:false:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var gt=Symbol("regle-rule");function Ut(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,Ut(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=Q(e[n]);}return t}function ne(e){return e instanceof Date||e instanceof File?false:typeof e=="object"&&e!==null&&!Array.isArray(e)}function Be(e){if(Y(e))return false;try{let t=null;if(e instanceof Date)t=e;else if(typeof e=="string"){let r=new Date(e);if(r.toString()==="Invalid Date")return !1;t=r;}return !!t}catch{return false}}function Le(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}var He=(r=>(r.Inline="__inline",r.Async="__async",r))(He||{});function $t(e,t){return e.some(r=>r[t])}function yt(e,t){return e.reduce((r,n)=>{let l=n[t]||[];return r.concat(l)},[])}function ee(e){try{return e.map(t=>toValue(t))}catch{return []}}function vt(e){return e.map(t=>t instanceof Function?computed(t):isRef(t)?t:toRef(()=>t))}function St(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(m=>m.trim()).filter(m=>m.length>0).length:0}function ze(e,...t){let{validator:r,type:n}=e,l=n==="__async"||r.constructor.name==="AsyncFunction";return {...{validator(f,...S){return e.validator(f,...ee(S.length?S:t))},message(f){return typeof e.message=="function"?e.message({...f,$params:ee(f?.$params?.length?f.$params:t)}):e.message},active(f){return typeof e.active=="function"?e.active({...f,$params:ee(f?.$params?.length?f.$params:t)}):e.active??true},tooltip(f){return typeof e.tooltip=="function"?e.tooltip({...f,$params:ee(f?.$params?.length?f.$params:t)}):e.tooltip??[]},exec(f){let S=e.validator(f,...ee(t)),y;return S instanceof Promise?S.then(b=>(y=b,typeof y=="object"&&"$valid"in y?y.$valid:typeof y=="boolean"?y:false)):(y=S,typeof y=="object"&&"$valid"in y?y.$valid:typeof y=="boolean"?y:false)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:false,_tooltip_patched:false,_async:l,_params:vt(t),_brand:gt}}function qe(e){if(typeof e.validator=="function"){let r=ze(e,...[]),n=e.async??e.validator.constructor.name==="AsyncFunction";if(St(e.validator)>1){let l=function(...i){return ze(e,...i)};return l.validator=r.validator,l.message=r.message,l.active=r.active,l.tooltip=r.tooltip,l.type=r.type,l.exec=r.exec,l._validator=r.validator,l._message=r.message,l._active=r.active,l._tooltip=r.tooltip,l._type=e.type,l._message_pacthed=false,l._tooltip_pacthed=false,l._async=n,l}else return r}throw new Error("Validator must be a function")}function Ke(){let e=shallowRef(new Map),t=shallowRef(new Map),r=shallowRef(new Map),n=shallowRef(new Map),l=shallowRef(new Map),i=shallowRef(new Map);function m($){let h=t.value.get($);if(h)return h;{let E=ref({});return t.value.set($,E),E}}function f($){let h=r.value.get($);if(h)return h;{let E=ref([]);return r.value.set($,E),E}}function S($,h,E){i.value.set(`${$}-${h}`,E);}function y($,h){return i.value.get(`${$}-${h}`)}function b($,h){$&&h!=null&&i.value.delete(`${$}-${h}`);}function B($,h){n.value.set($,h);}function D($){return n.value.get($)??false}function N($,h){e.value.set($,h);}function w($,h){let E=e.value.get($);return E?a(h,E)?{valid:true}:{valid:false}:undefined}function a($,h){let E=Object.keys(h),u=Object.keys($);return u.length!==E.length||!u.every(M=>E.includes(M))?false:u.every(M=>{let o=$[M],s=h[M];return !s||!o||typeof o=="function"||typeof s=="function"||typeof o=="number"||typeof o=="boolean"?false:o._params?o._params?.every((I,V)=>{if(typeof s=="number"||typeof s=="boolean")return true;{let G=ee(s._params),J=ee(o._params);return G?.[V]===J?.[V]}}):true})}function j($){let h=l.value.get($);if(h)return h;{let E=ref(false),u=ref(true),v=ref({}),M=ref(false);return l.value.set($,{$pending:E,$valid:u,$metadata:v,$validating:M}),{$pending:E,$valid:u,$metadata:v,$validating:M}}}return getCurrentScope()&&onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),l.value.clear(),i.value.clear();}),{addRuleDeclEntry:N,setDirtyEntry:B,checkRuleDeclEntry:w,getDirtyState:D,trySetRuleStatusRef:j,getFieldsEntry:m,getCollectionsEntry:f,getArrayStatus:y,addArrayStatus:S,deleteArrayStatus:b,arrayStatusStorage:i}}function Ve(e){return e.value instanceof Date||e.value instanceof File?false:ne(e.value)}function Je(e,t,r){let n=effectScope(),l;return e instanceof Function?l=n.run(()=>e(t,r??0)):l=e,{scope:n,unwrapped:l}}function Fe(e,t,r){let n,l=(...i)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=undefined,Promise.resolve(e.apply(this,[...i])).then(m);},t);});return l.cancel=()=>{clearTimeout(n),n=undefined;},l}function Jt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let l=0;l<Math.min(r.length,n.length);l++){let i=Number(r[l]),m=Number(n[l]);if(i>m)return 1;if(m>i)return -1;if(!isNaN(i)&&isNaN(m))return 1;if(isNaN(i)&&!isNaN(m))return -1}return 0}var _e=Jt(version,"3.5.0")!==-1;function Yt(){return Math.floor(Math.random()*Date.now()).toString()}function he(){return typeof window>"u"?Yt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function ht(e,t){return Ve(e)||ne(t.value)&&!Y(t.value)&&!Object.entries(t.value).some(([r,n])=>Oe(n)||typeof n=="function")}function bt(e,t){return !!e.value&&ne(e.value)&&"$each"in e.value||Array.isArray(t.value)}function Et(e){return !!e.value&&ne(e.value)}function Oe(e){return ne(e)&&"_validator"in e}function we(e){return typeof e.value!="function"}function Tt(e){return ne(e)&&"$fields"in e}function xt(e){return !!e&&"$rules"in e}function Ye({field:e,silent:t=false}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$error&&!n.$validating?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$error?e.$externalErrors??[]:[]).concat(e.$error?e.$schemaErrors??[]:[])}function Dt({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 Ct({customMessages:e,rule:t,ruleKey:r,state:n,path:l,storage:i,$debounce:m,modifiers:f}){let S=effectScope(),y={},b,B=ref(false),{$pending:D,$valid:N,$metadata:w,$validating:a}=i.trySetRuleStatusRef(`${l}.${r}`);function j(){S=effectScope(),y=S.run(()=>{let o=ref(false),s=ref(false),I=ref(true),V=ref(false),G=ref(false),J=computed(()=>({$value:n.value,$error:s.value,$dirty:o.value,$pending:V.value,$valid:G.value,$invalid:I.value,$rule:{$valid:N.value,$invalid:!N.value,$pending:D.value},$params:R.value,...w.value})),C=computed(()=>we(t)?typeof t.value.active=="function"?t.value.active(J.value):!!t.value.active:true);function L(d){let T="",P=e?e[r]?.[d]:undefined;if(P&&(typeof P=="function"?T=P(J.value):T=P),we(t)){let X=`_${d}_patched`;P&&!t.value[X]||(typeof t.value[d]=="function"?T=t.value[d](J.value):T=t.value[d]??"");}return T}let ie=computed(()=>{let d=L("message");return Y(d)&&(d="This field is not valid"),d}),de=computed(()=>L("tooltip")),pe=computed(()=>we(t)&&t.value.type?t.value.type:r),me=computed(()=>we(t)?t.value.validator:t.value),R=computed(()=>typeof t.value=="function"?[]:ee(t.value._params??[])),c=computed(()=>`${l}.${pe.value}`);return {$active:C,$message:ie,$type:pe,$validator:me,$params:R,$path:c,$tooltip:de,$fieldValid:G,$fieldError:s,$fieldDirty:o,$fieldPending:V,$fieldInvalid:I}}),b=watch(y?.$params,()=>{(f.$autoDirty.value||f.$rewardEarly.value&&y.$fieldError.value)&&u();});}j();function $(){N.value=true,y.$fieldDirty.value&&(D.value=true);}async function h(){let o=false;try{let s=y.$validator.value,I=s(n.value,...y.$params.value),V=n.value;$();let G;if(I instanceof Promise?G=await I:G=I,n.value!==V)return !0;if(typeof G=="boolean")o=G;else {let{$valid:J,...C}=G;o=J,w.value=C;}}catch{o=false;}finally{D.value=false;}return o}let E=Fe(h,m??200);async function u(){try{a.value=!0;let o=!1;if(Oe(t.value)&&t.value._async)o=await E();else {let s=y.$validator.value,I=s(n.value,...y.$params.value);if(I 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(I!=null)if(typeof I=="boolean")o=I;else {let{$valid:V,...G}=I;o=V,w.value=G;}}return N.value=o,o}catch{return false}finally{a.value=false;}}function v(){N.value=true,w.value={},D.value=false,a.value=false,j();}function M(){b(),S.stop(),S=effectScope();}return reactive({...y,$pending:D,$valid:N,$metadata:w,$haveAsync:B,$validating:a,$validate:u,$unwatch:M,$watch:j,$reset:v})}function Ne({state:e,rulesDef:t,customMessages:r,path:n,fieldName:l,storage:i,options:m,externalErrors:f,schemaErrors:S,schemaMode:y,onUnwatch:b,$isArray:B,initialState:D,shortcuts:N}){let w=effectScope(),a,j=[],$,h,E,u,v,M=()=>{};function o(){let g=t.value,_=i.checkRuleDeclEntry(n,g);L.value=Object.fromEntries(Object.entries(g).filter(([W])=>W.startsWith("$"))),V(),C.value=Object.fromEntries(Object.entries(t.value).filter(([W])=>!W.startsWith("$")).map(([W,x])=>{if(x){let se=toRef(()=>x);return [W,Ct({modifiers:{$autoDirty:a.$autoDirty,$rewardEarly:a.$rewardEarly},customMessages:r,rule:se,ruleKey:W,state:e,path:n,storage:i,$debounce:L.value.$debounce})]}return []}).filter(W=>!!W.length)),a.processShortcuts(),s(),_?.valid!=null&&(a.$dirty.value=i.getDirtyState(n),a.$dirty.value&&M()),i.addRuleDeclEntry(n,g);}function s(){M=a.$debounce.value?Fe(J,a.$debounce.value??a.$haveAnyAsyncRule?100:0):J;}function I(){C.value&&Object.entries(C.value).forEach(([g,_])=>{_.$unwatch();}),E(),v?.(),a.$dirty.value&&i.setDirtyEntry(n,a.$dirty.value),$?.(),h?.(),w.stop(),w=effectScope(),j.forEach(g=>g.stop()),j=[],b?.(),u?.();}function V(){C.value&&Object.entries(C.value).forEach(([g,_])=>{_.$watch();}),a=w.run(()=>{let g=ref(false),_=ref(false),W=computed(()=>g.value),x=computed(()=>L.value.$debounce),se=computed(()=>L.value.$lazy!=null?L.value.$lazy:unref(m.lazy)!=null?unref(m.lazy):false),le=computed(()=>L.value.$rewardEarly!=null?L.value.$rewardEarly:unref(m.rewardEarly)!=null?unref(m.rewardEarly):false),ge=computed(()=>L.value.$clearExternalErrorsOnChange!=null?L.value.$clearExternalErrorsOnChange:unref(m.clearExternalErrorsOnChange)!=null?unref(m.clearExternalErrorsOnChange):true),U=computed(()=>L.value.$autoDirty!=null?L.value.$autoDirty:unref(m.autoDirty)!=null?unref(m.autoDirty):!le.value),O=computed(()=>Object.entries(C.value).some(([ae,ue])=>ue.$validating)),K=computed({get:()=>e.value,set(ae){$(),e.value=ae,G();}}),$e=computed(()=>ye.value&&!Pe.value&&g.value),ot=computed(()=>Ye({field:{$error:$e.value,$externalErrors:f?.value,$schemaErrors:S?.value,$rules:C.value}})),st=computed(()=>Ye({field:{$error:true,$externalErrors:f?.value,$schemaErrors:S?.value,$rules:C.value},silent:true})),We=computed(()=>g.value?Be(D.value)&&Be(e.value)?Le(D.value).getDate()!==Le(e.value).getDate():D.value==null?!!e.value:Array.isArray(e.value)&&Array.isArray(D.value)?e.value.length!==D.value.length:D.value!==e.value:false),ut=computed(()=>We.value),it=computed(()=>Dt({field:{$rules:C.value}})),ct=computed(()=>U.value?W.value&&!(ye.value||Pe.value):!(ye.value||Pe.value)),Pe=computed(()=>_.value||!le.value?Object.entries(C.value).some(([ae,ue])=>ue.$pending):false),ye=computed(()=>f?.value?.length||S?.value?.length?true:Me.value?false:!le.value||le.value&&_.value?Object.entries(C.value).some(([ae,ue])=>!ue.$valid):false),ft=computed(()=>l),Me=computed(()=>!!(Y(C.value)&&!y)),Rt=computed(()=>f?.value?.length||Me.value?false:g.value&&!Y(e.value)&&!O.value?y?!S?.value?.length:Object.values(C.value).every(ae=>ae.$valid&&ae.$active):false),Nt=computed(()=>Object.entries(C.value).some(([ae,ue])=>ue.$haveAsync));function Gt(){N?.fields&&Object.entries(N.fields).forEach(([ae,ue])=>{let pt=effectScope();dt[ae]=pt.run(()=>{let mt=ref();return watchEffect(()=>{mt.value=ue(reactive({$dirty:g,$externalErrors:f?.value??[],$value:e,$silentValue:K,$rules:C,$error:$e,$pending:Pe,$invalid:ye,$valid:Rt,$errors:ot,$ready:ct,$silentErrors:st,$anyDirty:W,$tooltips:it,$name:ft,$inactive:Me,$edited:We,$anyEdited:ut}));}),mt}),j.push(pt);});}let dt={};return watch(ye,ae=>{ae||(_.value=false);}),{$error:$e,$pending:Pe,$invalid:ye,$valid:Rt,$debounce:x,$lazy:se,$errors:ot,$ready:ct,$silentErrors:st,$rewardEarly:le,$autoDirty:U,$clearExternalErrorsOnChange:ge,$anyDirty:W,$edited:We,$anyEdited:ut,$name:ft,$haveAnyAsyncRule:Nt,$shortcuts:dt,$validating:O,$tooltips:it,$dirty:g,triggerPunishment:_,processShortcuts:Gt,$silentValue:K,$inactive:Me}}),G(),E=watch(a.$dirty,g=>{i.setDirtyEntry(n,g),Object.values(C.value).forEach(_=>{_.$fieldDirty=g;});}),v=watch([a.$error,a.$valid,a.$invalid,a.$pending],()=>{Object.values(C.value).forEach(g=>{g.$fieldError=a.$error.value,g.$fieldInvalid=a.$invalid.value,g.$fieldPending=a.$pending.value,g.$fieldValid=a.$valid.value;});}),h=watch(a.$valid,g=>{a.$rewardEarly.value&&g&&(a.triggerPunishment.value=false);}),u=watch(a.$haveAnyAsyncRule,s);}function G(){$=watch(e,()=>{a.$autoDirty.value&&(a.$dirty.value||(a.$dirty.value=true)),t.value instanceof Function&&o(),(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&M(),a.$rewardEarly.value!==true&&a.$clearExternalErrorsOnChange.value&&c();},{deep:B?true:_e?1:true,flush:"post"});}function J(){Object.values(C.value).forEach(g=>{g.$validate();});}let C=ref({}),L=ref({});o();function ie(){c(),a.$dirty.value=false,a.triggerPunishment.value=false,i.setDirtyEntry(n,false),D.value=ne(e.value)?Q(e.value):Array.isArray(e.value)?[...e.value]:e.value,Object.entries(C.value).forEach(([g,_])=>{_.$reset();}),!a.$lazy.value&&a.$autoDirty.value&&Object.values(C.value).forEach(g=>g.$validate());}function de(g=true,_=false){a.$dirty.value||(a.$dirty.value=true),_&&g?(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&M():g&&M();}async function pe(){try{let g=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:g};return y?{result:!S?.value?.length,data:g}:Y(C.value)?{result:!0,data:g}:{result:(await Promise.allSettled(Object.entries(C.value).map(([x,se])=>se.$validate()))).every(x=>x.status==="fulfilled"?x.value===!0:!1),data:g}}catch{return {result:false,data:e.value}}}function me(){I(),e.value=Q(D),ie();}function R(g=true){return a.$dirty.value?e.value:g?{_null:true}:null}function c(){f?.value?.length&&(f.value=[]);}!a.$lazy.value&&!a.$dirty.value&&a.$autoDirty.value&&M();let{$shortcuts:d,$validating:T,$autoDirty:P,$rewardEarly:X,$clearExternalErrorsOnChange:p,$haveAnyAsyncRule:A,$debounce:H,$lazy:Z,triggerPunishment:z,...oe}=a;return reactive({...oe,$externalErrors:f,$value:e,$rules:C,...d,$reset:ie,$touch:de,$validate:pe,$unwatch:I,$watch:V,$resetAll:me,$extractDirtyFields:R,$clearExternalErrors:c})}function Ze({$id:e,path:t,index:r,options:n,storage:l,stateValue:i,customMessages:m,rules:f,externalErrors:S,schemaErrors:y,initialState:b,shortcuts:B,fieldName:D,schemaMode:N}){let w=f.$key?f.$key:he(),a=`${t}.${String(w)}`;typeof i.value=="object"&&i.value!=null&&(i.value.$id?a=`${t}.${i.value.$id}`:Object.defineProperties(i.value,{$id:{value:w,enumerable:false,configurable:false,writable:false}}));let j=toRef(S?.value??[],r),$=computed(()=>y?.value?.[r]),h=Te({state:i,rulesDef:toRef(()=>f),customMessages:m,path:a,storage:l,options:n,externalErrors:j,schemaErrors:$,initialState:b,shortcuts:B,fieldName:D,schemaMode:N});if(h){let E=i.value?.$id;h.$id=E??String(w),l.addArrayStatus(e,h.$id,h);}return h}function wt({state:e,rulesDef:t,customMessages:r,path:n,storage:l,options:i,externalErrors:m,schemaErrors:f,schemaMode:S,initialState:y,shortcuts:b,fieldName:B}){let D=effectScope(),N,w=effectScope(),a,j=[];if(!Array.isArray(e.value)&&!t.value.$each)return;let $=ref(),h=ref(e.value),E,u=ref({}),v=l.getCollectionsEntry(n);a=w.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.every(c=>typeof c!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(c=>Oe(c)||typeof c=="function"):false)})),M(),I();function M(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?($.value=he(),Object.defineProperties(e.value,{$id:{value:$.value,enumerable:false,configurable:false,writable:false}})):e.value?.$id&&($.value=e.value.$id)),h.value=u.value.$value,Array.isArray(e.value)&&!a.isPrimitiveArray.value?v.value=e.value.filter(R=>typeof R=="object").map((R,c)=>{let{scope:d,unwrapped:T}=Je(t.value.$each,toRef(()=>R),c);d&&j.push(d);let P=toRef(y.value??[],c),X=toRef(m?.value??{},"$each"),p=computed(()=>f?.value?.$each),A=Ze({$id:$.value,path:n,customMessages:r,rules:T??{},stateValue:toRef(()=>R),index:c,options:i,storage:l,externalErrors:X,schemaErrors:p,initialState:P,shortcuts:b,fieldName:B,schemaMode:S});return A||null}).filter(R=>!!R):v.value=[],u.value=Ne({state:e,rulesDef:t,customMessages:r,path:n,storage:l,options:i,externalErrors:toRef(m?.value??{},"$self"),schemaErrors:computed(()=>f?.value?.$self),$isArray:true,initialState:y,shortcuts:b,fieldName:B,schemaMode:S});}function o(){if(Array.isArray(e.value)&&!a.isPrimitiveArray.value){let R=Q(v.value);v.value=e.value.filter(c=>typeof c=="object").map((c,d)=>{let T=toRef(()=>c);if(c.$id&&v.value.find(P=>P.$id===c.$id)){let P=l.getArrayStatus($.value,c.$id);return P?(P.$value=T,P):null}else {let{scope:P,unwrapped:X}=Je(t.value.$each,T,d);P&&j.push(P);let p=toRef(m?.value??{},"$each"),A=computed(()=>f?.value?.$each??[]),H=Ze({$id:$.value,path:n,customMessages:r,rules:X??{},stateValue:T,index:d,options:i,storage:l,externalErrors:p,schemaErrors:A,initialState:toRef(y.value??[],d),shortcuts:b,fieldName:B,schemaMode:S});return H||null}}).filter(c=>!!c),R.filter(c=>!e.value?.find(d=>c.$id===d.$id)).forEach((c,d)=>{l.deleteArrayStatus($.value,d.toString());});}else v.value=[];}function s(){E=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?M():o();},{deep:_e?1:true,flush:"pre"});}function I(){s(),D=effectScope(),N=D.run(()=>{let R=computed({get:()=>e.value,set(x){E(),e.value=x,s();}}),c=computed(()=>u.value.$dirty&&(!v.value.length||v.value.every(x=>x.$dirty))),d=computed(()=>u.value.$anyDirty||v.value.some(x=>x.$anyDirty)),T=computed(()=>u.value.$invalid||v.value.some(x=>x.$invalid)),P=computed(()=>(Y(u.value.$rules)?true:u.value.$valid)&&(!v.value.length||v.value.every(x=>x.$valid))),X=computed(()=>u.value.$error||v.value.some(x=>x.$error)),p=computed(()=>!(T.value||A.value)),A=computed(()=>u.value.$pending||v.value.some(x=>x.$pending)),H=computed(()=>!!v.value.length&&v.value.every(x=>x.$edited)),Z=computed(()=>u.value.$anyEdited||v.value.some(x=>x.$anyEdited)),z=computed(()=>({$self:u.value.$errors,$each:v.value.map(x=>x.$errors)})),oe=computed(()=>({$self:u.value.$silentErrors,$each:v.value.map(x=>x.$silentErrors)})),g=computed(()=>B);function _(){b?.collections&&Object.entries(b?.collections).forEach(([x,se])=>{let le=effectScope();W[x]=le.run(()=>{let ge=ref();return watchEffect(()=>{ge.value=se(reactive({$dirty:c,$error:X,$silentValue:R,$pending:A,$invalid:T,$valid:P,$errors:z,$ready:p,$silentErrors:oe,$anyDirty:d,$name:g,$each:v,$self:u,$value:e,$edited:H,$anyEdited:Z}));}),ge}),j.push(le);});}let W={};return _(),{$dirty:c,$anyDirty:d,$invalid:T,$valid:P,$error:X,$pending:A,$errors:z,$silentErrors:oe,$ready:p,$name:g,$shortcuts:W,$silentValue:R,$edited:H,$anyEdited:Z}}),a.isPrimitiveArray.value&&t.value.$each&&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`);}function V(){E&&E(),u.value&&u.value.$unwatch(),v.value&&v.value.forEach(R=>{"$dirty"in R&&R.$unwatch();}),D.stop(),D=effectScope(),w.stop(),w=effectScope(true),j.forEach(R=>R.stop()),j=[];}function G(R=true,c=false){u.value.$touch(R,c),v.value.forEach(d=>{d.$touch(R,c);});}function J(){u.value.$reset(),v.value.forEach(R=>{R.$reset();});}async function C(){let R=e.value;try{return {result:(await Promise.allSettled([u.value.$validate(),...v.value.map(T=>T.$validate())])).every(T=>T.status==="fulfilled"?T.value.result===!0:!1),data:R}}catch{return {result:false,data:R}}}function L(){u.value.$clearExternalErrors(),v.value.forEach(R=>{R.$clearExternalErrors();});}function ie(R=true){let c=v.value.map(d=>{if(Tt(d))return d.$extractDirtyFields(R)});return R&&c.every(d=>Y(d))&&(c=[]),c}function de(){V(),e.value=Q(y.value),J();}let{$shortcuts:pe,...me}=N;return reactive({$self:u,...me,...pe,$each:v,$value:e,$validate:C,$unwatch:V,$watch:I,$touch:G,$reset:J,$resetAll:de,$extractDirtyFields:ie,$clearExternalErrors:L})}function Ue({rulesDef:e,state:t,path:r="",rootRules:n,externalErrors:l,schemaErrors:i,rootSchemaErrors:m,validationGroups:f,initialState:S,fieldName:y,...b}){let B=effectScope(),D,N=[],w=null,a=null,j=null,$=null;async function E(R=true){let c=Object.entries(e.value),d=Object.fromEntries(c.filter(([p,A])=>!!A).map(([p,A])=>{if(A){let H=toRef(t.value??{},p),Z=toRef(()=>A),z=toRef(l?.value??{},p),oe=computed(()=>i?.value?.[p]),g=toRef(S?.value??{},p);return [p,Te({state:H,rulesDef:Z,path:r?`${r}.${p}`:p,externalErrors:z,schemaErrors:oe,initialState:g,fieldName:p,...b})]}return []})),T=Object.fromEntries(Object.entries(unref(l)??{}).filter(([p,A])=>!(p in e.value)&&!!A).map(([p])=>{let A=toRef(t.value??{},p),H=toRef(l?.value??{},p),Z=computed(()=>i?.value?.[p]),z=toRef(S?.value??{},p);return [p,Te({state:A,rulesDef:computed(()=>({})),path:r?`${r}.${p}`:p,externalErrors:H,schemaErrors:Z,initialState:z,fieldName:p,...b})]})),P=Object.fromEntries(Object.entries(unref(i)??{}).map(([p])=>{let A=toRef(t.value??{},p),H=toRef(l?.value??{},p),Z=computed(()=>i?.value?.[p]),z=toRef(S?.value??{},p);return [p,Te({state:A,rulesDef:computed(()=>({})),path:r?`${r}.${p}`:p,externalErrors:H,schemaErrors:Z,initialState:z,fieldName:p,...b})]})),X=Object.fromEntries(Object.entries(t.value??{}).filter(([p])=>!(p in e.value)&&!(p in(T??{}))&&!(p in(P??{}))).map(([p])=>{let A=toRef(t.value??{},p),H=toRef(l?.value??{},p),Z=computed(()=>i?.value?.[p]),z=toRef(S?.value??{},p);return [p,Te({state:A,rulesDef:computed(()=>({})),path:r?`${r}.${p}`:p,externalErrors:H,schemaErrors:Z,initialState:z,fieldName:p,...b})]}));u.value={...d,...T,...P,...X},R&&o();}let u=b.storage.getFieldsEntry(r);E();function v(){l&&(j=watch(l,()=>{s(),E();},{deep:true}));}function M(){$=watch(t,()=>{s(),E(),G(true,true);},{flush:"sync"});}function o(){n&&(w?.(),w=watch(n,()=>{s(),E();},{deep:true,flush:"post"}),v()),m&&(a?.(),a=watch(m,()=>{s(),E();},{deep:true,flush:"post"})),M(),D=B.run(()=>{let R=computed({get:()=>t.value,set(U){s(),t.value=U,E();}}),c=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([U,O])=>O?.$dirty)),d=computed(()=>Object.entries(u.value).some(([U,O])=>O?.$anyDirty)),T=computed(()=>Object.entries(u.value).some(([U,O])=>O?.$invalid)),P=computed(()=>{let U=Object.entries(u.value).filter(([O,K])=>xt(K)?!K.$inactive:true);return U.length?U.every(([O,K])=>K?.$valid):false}),X=computed(()=>d.value&&!z.value&&T.value),p=computed(()=>unref(b.options.rewardEarly)!=null?unref(b.options.rewardEarly):false),A=computed(()=>unref(b.options.autoDirty)!=null?unref(b.options.autoDirty):!p.value),H=computed(()=>A.value?d.value&&!(T.value||z.value):!(T.value||z.value)),Z=ref(false),z=computed(()=>Z.value||Object.entries(u.value).some(([U,O])=>O?.$pending)),oe=computed(()=>Object.fromEntries(Object.entries(u.value).map(([U,O])=>[U,O?.$errors]))),g=computed(()=>Object.fromEntries(Object.entries(u.value).map(([U,O])=>[U,O?.$silentErrors]))),_=computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([U,O])=>O?.$edited)),W=computed(()=>Object.entries(u.value).some(([U,O])=>O?.$anyEdited)),x=computed(()=>y);function se(){b.shortcuts?.nested&&Object.entries(b.shortcuts.nested).forEach(([U,O])=>{let K=effectScope();ge[U]=K.run(()=>{let $e=ref();return watchEffect(()=>{$e.value=O(reactive({$dirty:c,$value:t,$silentValue:R,$error:X,$pending:z,$invalid:T,$valid:P,$ready:H,$anyDirty:d,$name:x,$silentErrors:g,$errors:oe,$fields:u,$edited:_,$anyEdited:W}));}),$e}),N.push(K);});}let le=computed({get:()=>f?Object.fromEntries(Object.entries(f?.(u.value)??{}).map(([U,O])=>O.length?[U,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(K=>[K,$t(O,K)])),...Object.fromEntries(["$errors","$silentErrors"].map(K=>[K,yt(O,K)]))}]:[])):{},set(){}}),ge={};return se(),{$dirty:c,$anyDirty:d,$invalid:T,$valid:P,$error:X,$pending:z,$errors:oe,$silentErrors:g,$ready:H,$name:x,$shortcuts:ge,$groups:le,$silentValue:R,$edited:_,$anyEdited:W,$localPending:Z}});}function s(){w?.(),j?.(),$?.(),a?.(),N=[],D={},u.value&&Object.entries(u.value).forEach(([R,c])=>{c.$unwatch();});}function I(){Object.entries(u.value).forEach(([R,c])=>{c.$clearExternalErrors();});}function V(){j?.(),Object.values(u.value).forEach(R=>{R.$reset();}),S.value={...Q(t.value)},v();}function G(R=true,c=false){Object.values(u.value).forEach(d=>{d.$touch(R,c);});}async function J(){s(),t.value=Q({...S.value??{}}),V(),E();}function C(R){return R.filter(([c,d])=>ne(d)?!(d&&typeof d=="object"&&"_null"in d)&&!Y(d):Array.isArray(d)?d.length:true)}function L(R=true){let c=Object.entries(u.value).map(([d,T])=>[d,T.$extractDirtyFields(R)]);return R&&(c=C(c)),Object.fromEntries(c)}async function ie(){try{if(b.schemaMode)return b.onValidate?(G(!1),D.$localPending.value=!0,b.onValidate()):{result:!1,data:t.value};{let R=t.value;return {result:(await Promise.allSettled(Object.values(u.value).map(T=>T.$validate()))).every(T=>T.status==="fulfilled"?T.value.result===!0:!1),data:R}}}catch{return {result:false,data:t.value}}finally{D.$localPending.value=false;}}let{$shortcuts:de,$localPending:pe,...me}=D;return reactive({...me,...de,$fields:u,$value:t,$resetAll:J,$reset:V,$touch:G,$validate:ie,$unwatch:s,$watch:o,$clearExternalErrors:I,$extractDirtyFields:L})}function Te({rulesDef:e,...t}){if(bt(e,t.state))return wt({rulesDef:e,...t});if(ht(t.state,e)){if(Ve(t.state))return Ue({rulesDef:e,...t});{let n=effectScope().run(()=>{let m=toRef(t.state.value?t.state:ref({}));return watch(()=>t.state.value,f=>{m.value=f;},{deep:true}),watch(m,f=>{t.state.value=f;},{deep:true}),{fakeState:m}}),{state:l,...i}=t;return Ue({rulesDef:e,...i,state:n.fakeState})}}else if(Et(e))return Ne({rulesDef:e,...t})}function Ie({initialState:e,options:t,scopeRules:r,state:n,customRules:l,shortcuts:i,schemaErrors:m,schemaMode:f=false,onValidate:S}){let y=Ke(),b=ref();return b.value=Ue({rootRules:r,rulesDef:r,state:n,customMessages:l?.(),storage:y,options:t,externalErrors:t.externalErrors,validationGroups:t.validationGroups,initialState:e,shortcuts:i,fieldName:"root",path:"",schemaErrors:m,rootSchemaErrors:m,schemaMode:f,onValidate:S}),getCurrentScope()&&onScopeDispose(()=>{b.value?.$unwatch();}),reactive({regle:b})}function rt(e,t,r){let n={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function l(i,m,f){let S=isRef(m)?m:computed(typeof m=="function"?m:()=>m),y={...n,...f},b=isRef(i)?i:ref(i),B=ref({...Q(b.value)});return {r$:Ie({scopeRules:S,state:b,options:y,initialState:B,customRules:e,shortcuts:r}).regle}}return l}var ke=rt();function nt(){function e(t,r){return r}return e}var at=nt();function Vt({rules:e,modifiers:t,shortcuts:r}){let n=rt(e,t,r),l=nt();return {useRegle:n,inferRules:l}}function je(e,t){let r=t??false,n=computed({get:()=>Object.fromEntries(Object.entries(e).map(([o,s])=>[o,s.$value])),set:o=>{typeof o=="object"&&Object.entries(o).forEach(([s,I])=>e[s].$value=I);}}),l=computed({get:()=>Object.fromEntries(Object.entries(e).map(([o,s])=>[o,s.$silentValue])),set:o=>{typeof o=="object"&&Object.entries(o).forEach(([s,I])=>e[s].$silentValue=I);}}),i=computed(()=>Object.entries(e).every(([o,s])=>s?.$dirty)),m=computed(()=>Object.entries(e).some(([o,s])=>s?.$anyDirty)),f=computed(()=>Object.entries(e).some(([o,s])=>s?.$invalid)),S=computed(()=>Object.entries(e).every(([o,s])=>s?.$invalid)),y=computed(()=>Object.entries(e).some(([o,s])=>s?.$error)),b=computed(()=>Object.entries(e).every(([o,s])=>s?.$ready)),B=computed(()=>Object.entries(e).some(([o,s])=>s?.$pending)),D=computed(()=>Object.fromEntries(Object.entries(e).map(([o,s])=>[o,s.$errors]))),N=computed(()=>Object.fromEntries(Object.entries(e).map(([o,s])=>[o,s.$silentErrors]))),w=computed(()=>Object.entries(e).every(([o,s])=>s?.$edited)),a=computed(()=>Object.entries(e).some(([o,s])=>s?.$anyEdited)),j=computed(()=>e);function $(){Object.values(e).forEach(o=>{o.$reset();});}function h(){Object.values(e).forEach(o=>{o.$touch();});}function E(){Object.values(e).forEach(o=>{o.$resetAll();});}function u(o=true){return Object.values(e).map(s=>s.$extractDirtyFields(o))}function v(){Object.values(e).forEach(o=>{o.$clearExternalErrors();});}async function M(){try{let o=n.value;return {result:(await Promise.allSettled(Object.values(e).map(V=>V.$validate()))).every(V=>V.status==="fulfilled"?V.value.result===!0:!1),data:o}}catch{return {result:false,data:n.value}}}return reactive({...!r&&{$instances:j,$value:n,$silentValue:l,$errors:D,$silentErrors:N},$dirty:i,$anyDirty:m,$invalid:f,$valid:S,$error:y,$pending:B,$ready:b,$edited:w,$anyEdited:a,$resetAll:E,$reset:$,$touch:h,$validate:M,$extractDirtyFields:u,$clearExternalErrors:v})}function Ft(e){function t(){let r=ref(je(e.value,true)),n=reactive({r$:r});return watch(e,l=>{r.value=je(l,true);}),{r$:n.r$}}return {useCollectNestedValidations:t}}function _t(e){let t=e??ke,r=ref({});return {useNestedRegle:(l,i,m)=>{let f=he(),{r$:S}=t(l,i,m);r.value[f]=S,onScopeDispose(()=>{delete r.value[f];});function y(){delete r.value[f];}return {r$:S,$dispose:y}},instances:r}}function lt(e){let{instances:t,useNestedRegle:r}=_t(e),{useCollectNestedValidations:n}=Ft(t);return {useNestedRegle:r,useCollectNestedValidations:n}}
2
+ export{He as InternalRuleType,lt as createNestedUseRegle,qe as createRule,Vt as defineRegleConfig,at as inferRules,je as mergeRegles,ee as unwrapRuleParameters,ke as useRegle,Ie as useRootStorage};
@@ -1,7 +1,7 @@
1
- import { toValue, version, ref, getCurrentScope, onScopeDispose, reactive, shallowRef, effectScope, computed, isRef, toRef, unref, watch, watchEffect } from 'vue';
1
+ import { toValue, version, ref, getCurrentScope, onScopeDispose, reactive, computed, shallowRef, effectScope, isRef, toRef, unref, watch, watchEffect } from 'vue';
2
2
 
3
3
  // ../shared/utils/isEmpty.ts
4
- function isEmpty(value) {
4
+ function isEmpty(value, considerEmptyArrayInvalid = true) {
5
5
  if (value === undefined || value === null) {
6
6
  return true;
7
7
  }
@@ -9,6 +9,9 @@ function isEmpty(value) {
9
9
  return isNaN(value.getTime());
10
10
  }
11
11
  if (Array.isArray(value)) {
12
+ if (considerEmptyArrayInvalid) {
13
+ return value.length === 0;
14
+ }
12
15
  return false;
13
16
  }
14
17
  if (typeof value === "object" && value != null) {
@@ -2253,5 +2256,191 @@ function defineRegleConfig({
2253
2256
  const inferRules2 = createInferRuleHelper();
2254
2257
  return { useRegle: useRegle2, inferRules: inferRules2 };
2255
2258
  }
2259
+ function mergeRegles(regles, _nested) {
2260
+ const nested = _nested == null ? false : _nested;
2261
+ const $value = computed({
2262
+ get: () => Object.fromEntries(Object.entries(regles).map(([key, r]) => [key, r.$value])),
2263
+ set: (value) => {
2264
+ if (typeof value === "object") {
2265
+ Object.entries(value).forEach(([key, newValue]) => regles[key].$value = newValue);
2266
+ }
2267
+ }
2268
+ });
2269
+ const $silentValue = computed({
2270
+ get: () => Object.fromEntries(Object.entries(regles).map(([key, r]) => [key, r.$silentValue])),
2271
+ set: (value) => {
2272
+ if (typeof value === "object") {
2273
+ Object.entries(value).forEach(([key, newValue]) => regles[key].$silentValue = newValue);
2274
+ }
2275
+ }
2276
+ });
2277
+ const $dirty = computed(() => {
2278
+ return Object.entries(regles).every(([_, regle]) => {
2279
+ return regle?.$dirty;
2280
+ });
2281
+ });
2282
+ const $anyDirty = computed(() => {
2283
+ return Object.entries(regles).some(([_, regle]) => {
2284
+ return regle?.$anyDirty;
2285
+ });
2286
+ });
2287
+ const $invalid = computed(() => {
2288
+ return Object.entries(regles).some(([_, regle]) => {
2289
+ return regle?.$invalid;
2290
+ });
2291
+ });
2292
+ const $valid = computed(() => {
2293
+ return Object.entries(regles).every(([_, regle]) => {
2294
+ return regle?.$invalid;
2295
+ });
2296
+ });
2297
+ const $error = computed(() => {
2298
+ return Object.entries(regles).some(([_, regle]) => {
2299
+ return regle?.$error;
2300
+ });
2301
+ });
2302
+ const $ready = computed(() => {
2303
+ return Object.entries(regles).every(([_, regle]) => {
2304
+ return regle?.$ready;
2305
+ });
2306
+ });
2307
+ const $pending = computed(() => {
2308
+ return Object.entries(regles).some(([_, regle]) => {
2309
+ return regle?.$pending;
2310
+ });
2311
+ });
2312
+ const $errors = computed(() => {
2313
+ return Object.fromEntries(
2314
+ Object.entries(regles).map(([key, regle]) => {
2315
+ return [key, regle.$errors];
2316
+ })
2317
+ );
2318
+ });
2319
+ const $silentErrors = computed(() => {
2320
+ return Object.fromEntries(
2321
+ Object.entries(regles).map(([key, regle]) => {
2322
+ return [key, regle.$silentErrors];
2323
+ })
2324
+ );
2325
+ });
2326
+ const $edited = computed(() => {
2327
+ return Object.entries(regles).every(([_, regle]) => {
2328
+ return regle?.$edited;
2329
+ });
2330
+ });
2331
+ const $anyEdited = computed(() => {
2332
+ return Object.entries(regles).some(([_, regle]) => {
2333
+ return regle?.$anyEdited;
2334
+ });
2335
+ });
2336
+ const $instances = computed(() => {
2337
+ return regles;
2338
+ });
2339
+ function $reset() {
2340
+ Object.values(regles).forEach((regle) => {
2341
+ regle.$reset();
2342
+ });
2343
+ }
2344
+ function $touch() {
2345
+ Object.values(regles).forEach((regle) => {
2346
+ regle.$touch();
2347
+ });
2348
+ }
2349
+ function $resetAll() {
2350
+ Object.values(regles).forEach((regle) => {
2351
+ regle.$resetAll();
2352
+ });
2353
+ }
2354
+ function $extractDirtyFields(filterNullishValues = true) {
2355
+ return Object.values(regles).map((regle) => regle.$extractDirtyFields(filterNullishValues));
2356
+ }
2357
+ function $clearExternalErrors() {
2358
+ Object.values(regles).forEach((regle) => {
2359
+ regle.$clearExternalErrors();
2360
+ });
2361
+ }
2362
+ async function $validate() {
2363
+ try {
2364
+ const data = $value.value;
2365
+ const results = await Promise.allSettled(
2366
+ Object.values(regles).map((regle) => {
2367
+ return regle.$validate();
2368
+ })
2369
+ );
2370
+ const validationResults = results.every((value) => {
2371
+ if (value.status === "fulfilled") {
2372
+ return value.value.result === true;
2373
+ } else {
2374
+ return false;
2375
+ }
2376
+ });
2377
+ return { result: validationResults, data };
2378
+ } catch (e) {
2379
+ return { result: false, data: $value.value };
2380
+ }
2381
+ }
2382
+ return reactive({
2383
+ ...!nested && {
2384
+ $instances,
2385
+ $value,
2386
+ $silentValue,
2387
+ $errors,
2388
+ $silentErrors
2389
+ },
2390
+ $dirty,
2391
+ $anyDirty,
2392
+ $invalid,
2393
+ $valid,
2394
+ $error,
2395
+ $pending,
2396
+ $ready,
2397
+ $edited,
2398
+ $anyEdited,
2399
+ $resetAll,
2400
+ $reset,
2401
+ $touch,
2402
+ $validate,
2403
+ $extractDirtyFields,
2404
+ $clearExternalErrors
2405
+ });
2406
+ }
2407
+ function createUseCollectNestedValidations(instances) {
2408
+ function useCollectNestedValidations() {
2409
+ const r$ = ref(mergeRegles(instances.value, true));
2410
+ const regle = reactive({ r$ });
2411
+ watch(instances, (newInstances) => {
2412
+ r$.value = mergeRegles(newInstances, true);
2413
+ });
2414
+ return { r$: regle.r$ };
2415
+ }
2416
+ return { useCollectNestedValidations };
2417
+ }
2418
+ function createUseNestedRegleComposable(customUseRegle) {
2419
+ const scopedUseRegle = customUseRegle ?? useRegle;
2420
+ const instances = ref({});
2421
+ const useNestedRegle = (state, rulesFactory, options) => {
2422
+ const $id = randomId();
2423
+ const { r$ } = scopedUseRegle(state, rulesFactory, options);
2424
+ instances.value[$id] = r$;
2425
+ onScopeDispose(() => {
2426
+ delete instances.value[$id];
2427
+ });
2428
+ function $dispose() {
2429
+ delete instances.value[$id];
2430
+ }
2431
+ return { r$, $dispose };
2432
+ };
2433
+ return { useNestedRegle, instances };
2434
+ }
2435
+
2436
+ // src/core/createNestedUseRegle/createNestedUseRegle.ts
2437
+ function createNestedUseRegle(customUseRegle) {
2438
+ const { instances, useNestedRegle } = createUseNestedRegleComposable(customUseRegle);
2439
+ const { useCollectNestedValidations } = createUseCollectNestedValidations(instances);
2440
+ return {
2441
+ useNestedRegle,
2442
+ useCollectNestedValidations
2443
+ };
2444
+ }
2256
2445
 
2257
- export { InternalRuleType, createRule, defineRegleConfig, inferRules, unwrapRuleParameters, useRegle, useRootStorage };
2446
+ export { InternalRuleType, createNestedUseRegle, createRule, defineRegleConfig, inferRules, mergeRegles, unwrapRuleParameters, useRegle, useRootStorage };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regle/core",
3
- "version": "0.7.2",
3
+ "version": "0.7.4-beta.1",
4
4
  "description": "Type safe form validation library for Vue 3",
5
5
  "peerDependencies": {
6
6
  "vue": ">=3.3.0",