@regle/core 1.11.0 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/regle-core.d.ts +156 -88
- package/dist/regle-core.js +153 -38
- package/dist/regle-core.min.js +1 -1
- package/package.json +3 -3
package/dist/regle-core.d.ts
CHANGED
|
@@ -1,27 +1,7 @@
|
|
|
1
1
|
import * as vue0 from "vue";
|
|
2
2
|
import { MaybeRef, MaybeRefOrGetter, Plugin, Raw, Ref, UnwrapNestedRefs, UnwrapRef } from "vue";
|
|
3
|
-
import { EmptyObject, IsAny, IsEmptyObject, IsUnion, IsUnknown, Merge, Or, PartialDeep, RequireOneOrNone, RequiredDeep, UnionToIntersection, UnionToTuple } from "type-fest";
|
|
3
|
+
import { EmptyObject, IsAny, IsEmptyObject, IsUnion, IsUnknown, Merge, Or, PartialDeep, RequireAtLeastOne, RequireOneOrNone, RequiredDeep, UnionToIntersection, UnionToTuple } from "type-fest";
|
|
4
4
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
5
|
-
type Prettify<T> = T extends infer R ? { [K in keyof R]: R[K] } & {} : never;
|
|
6
|
-
type Maybe<T = any> = T | null | undefined;
|
|
7
|
-
type MaybeInput<T = any> = T | null | undefined;
|
|
8
|
-
type MaybeOutput<T = any> = T | undefined;
|
|
9
|
-
type MaybeReadonly<T> = T | Readonly<T>;
|
|
10
|
-
type NonUndefined<T> = Exclude<T, undefined>;
|
|
11
|
-
type PromiseReturn<T> = T extends Promise<infer U> ? U : T;
|
|
12
|
-
type MaybeGetter<T, V$1 = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V$1>, index: number) => T & TAdd);
|
|
13
|
-
type Unwrap<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : UnwrapNestedRefs<T>;
|
|
14
|
-
type UnwrapSimple<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : T extends ((...args: any[]) => infer U) ? U : T;
|
|
15
|
-
type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends ((value: Ref<any>, index: number) => infer U extends Record<string, any>) ? U : T;
|
|
16
|
-
type ExtendOnlyRealRecord<T extends unknown> = NonNullable<T> extends File | Date ? false : NonNullable<T> extends Record<string, any> ? true : false;
|
|
17
|
-
type OmitByType<T extends Record<string, any>, U$1> = { [K in keyof T as T[K] extends U$1 ? never : K]: T[K] };
|
|
18
|
-
type DeepMaybeRef<T extends Record<string, any>> = { [K in keyof T]: MaybeRef<T[K]> };
|
|
19
|
-
type ExcludeByType<T, U$1> = { [K in keyof T as T[K] extends U$1 ? never : K]: T[K] extends U$1 ? never : T[K] };
|
|
20
|
-
type PrimitiveTypes = string | number | boolean | bigint | Date | File;
|
|
21
|
-
type isRecordLiteral<T extends unknown> = NonNullable<T> extends Date | File ? false : NonNullable<T> extends Record<string, any> ? true : false;
|
|
22
|
-
type NoInferLegacy<A$1 extends any> = [A$1][A$1 extends any ? 0 : never];
|
|
23
|
-
type ArrayElement<T> = T extends Array<infer U> ? U : never;
|
|
24
|
-
type NonEmptyTuple<T> = [T, ...T[]] | T[];
|
|
25
5
|
interface RegleBehaviourOptions {
|
|
26
6
|
/**
|
|
27
7
|
* Only display error when calling `r$.$validate()`
|
|
@@ -215,10 +195,26 @@ type RegleResult<Data extends Record<string, any> | any[] | unknown, TRules$1 ex
|
|
|
215
195
|
data: IsUnknown<Data> extends true ? unknown : IsAny<Data> extends true ? unknown : HasNamedKeys<Data> extends true ? Data extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, TRules$1>[] : Data extends Date | File ? SafeFieldProperty<Data, TRules$1> : Data extends Record<string, any> ? DeepSafeFormState<Data, TRules$1> : SafeFieldProperty<Data, TRules$1> : unknown;
|
|
216
196
|
};
|
|
217
197
|
type RegleNestedResult<Data extends Record<string, any> | unknown, TRules$1 extends ReglePartialRuleTree<any> | RegleFormPropertyType<any>> = RegleResult<Data, TRules$1> & ({
|
|
198
|
+
/**
|
|
199
|
+
* The form contains validation errors, so the issues and errors will be populated.
|
|
200
|
+
*/
|
|
218
201
|
valid: false;
|
|
202
|
+
/**
|
|
203
|
+
* Collection of all the error messages, collected for all children properties and nested forms.
|
|
204
|
+
*
|
|
205
|
+
* Only contains errors from properties where $dirty equals true.
|
|
206
|
+
* */
|
|
219
207
|
issues: RegleIssuesTree<Data>;
|
|
208
|
+
/**
|
|
209
|
+
* Collection of all the issues, collected for all children properties and nested forms.
|
|
210
|
+
*
|
|
211
|
+
* Only contains issues from properties where $dirty equals true.
|
|
212
|
+
*/
|
|
220
213
|
errors: RegleErrorTree<Data>;
|
|
221
214
|
} | {
|
|
215
|
+
/**
|
|
216
|
+
* The result is valid, so the issues and errors will be empty.
|
|
217
|
+
*/
|
|
222
218
|
valid: true;
|
|
223
219
|
issues: EmptyObject;
|
|
224
220
|
errors: EmptyObject;
|
|
@@ -232,10 +228,15 @@ type RegleCollectionResult<Data extends any[], TRules$1 extends ReglePartialRule
|
|
|
232
228
|
issues: EmptyObject;
|
|
233
229
|
errors: EmptyObject;
|
|
234
230
|
});
|
|
235
|
-
type RegleFieldResult<Data extends any, TRules$1 extends ReglePartialRuleTree<any> | RegleFormPropertyType<any>> = RegleResult<Data, TRules$1> & {
|
|
231
|
+
type RegleFieldResult<Data extends any, TRules$1 extends ReglePartialRuleTree<any> | RegleFormPropertyType<any>> = RegleResult<Data, TRules$1> & ({
|
|
232
|
+
valid: false;
|
|
236
233
|
issues: RegleFieldIssue<TRules$1>[];
|
|
237
234
|
errors: string[];
|
|
238
|
-
}
|
|
235
|
+
} | {
|
|
236
|
+
valid: true;
|
|
237
|
+
issues: [];
|
|
238
|
+
errors: [];
|
|
239
|
+
});
|
|
239
240
|
/**
|
|
240
241
|
* Infer safe output from any `r$` instance
|
|
241
242
|
*
|
|
@@ -243,7 +244,7 @@ type RegleFieldResult<Data extends any, TRules$1 extends ReglePartialRuleTree<an
|
|
|
243
244
|
* type FormRequest = InferSafeOutput<typeof r$>;
|
|
244
245
|
* ```
|
|
245
246
|
*/
|
|
246
|
-
type InferSafeOutput<TRegle extends MaybeRef<
|
|
247
|
+
type InferSafeOutput<TRegle extends MaybeRef<SuperCompatibleRegleRoot | SuperCompatibleRegleFieldStatus>> = UnwrapRef<TRegle> extends Raw<RegleRoot<infer TState extends Record<string, any>, infer TRules, any, any>> ? DeepSafeFormState<JoinDiscriminatedUnions<TState>, TRules> : UnwrapRef<TRegle> extends RegleFieldStatus<infer TState, infer TRules> ? SafeFieldProperty<TState, TRules> : UnwrapRef<TRegle> extends RegleLike<infer TState extends Record<string, any>> ? TState : never;
|
|
247
248
|
type $InternalRegleResult = {
|
|
248
249
|
valid: boolean;
|
|
249
250
|
data: any;
|
|
@@ -265,11 +266,18 @@ type NarrowVariant<TRoot extends {
|
|
|
265
266
|
$fields: {
|
|
266
267
|
[x: string]: unknown;
|
|
267
268
|
};
|
|
269
|
+
$value: unknown;
|
|
268
270
|
}, TKey$1 extends keyof TRoot, TValue$1 extends (LazyJoinDiscriminatedUnions<Exclude<TRoot[TKey$1], RegleCollectionStatus<any, any, any> | RegleStatus<any, any, any> | NarrowVariantExtracts[keyof NarrowVariantExtracts]>> extends {
|
|
269
271
|
$value: infer V;
|
|
270
272
|
} ? V : unknown)> = Extract<TRoot, { [K in TKey$1]: RegleFieldStatus<TValue$1, any, any> | RegleFieldStatus<MaybeInput<TValue$1>, any, any> | (IsEmptyObject<NarrowVariantFieldExtracts<TValue$1>> extends true ? EmptyObject : NarrowVariantFieldExtracts<TValue$1>[keyof NarrowVariantFieldExtracts<TValue$1>]) }> & {
|
|
271
|
-
$fields: Extract<TRoot['$fields'], { [K in TKey$1]: RegleFieldStatus<TValue$1, any, any> | RegleFieldStatus<MaybeInput<TValue$1>, any, any> | (IsEmptyObject<NarrowVariantFieldExtracts<TValue$1>> extends true ? EmptyObject : NarrowVariantFieldExtracts<TValue$1>[keyof NarrowVariantFieldExtracts<TValue$1>]) }
|
|
272
|
-
|
|
273
|
+
$fields: Extract<TRoot['$fields'], { [K in TKey$1]: RegleFieldStatus<TValue$1, any, any> | RegleFieldStatus<MaybeInput<TValue$1>, any, any> | (IsEmptyObject<NarrowVariantFieldExtracts<TValue$1>> extends true ? EmptyObject : NarrowVariantFieldExtracts<TValue$1>[keyof NarrowVariantFieldExtracts<TValue$1>]) }> & { [K in TKey$1]: TRoot[K] & {
|
|
274
|
+
$value: TValue$1;
|
|
275
|
+
} };
|
|
276
|
+
} & {
|
|
277
|
+
$value: Omit<TRoot['$value'], TKey$1> & { [K in TKey$1]: TValue$1 };
|
|
278
|
+
} & { [K in TKey$1]: TRoot[K] & {
|
|
279
|
+
$value: TValue$1;
|
|
280
|
+
} };
|
|
273
281
|
type MaybeVariantStatus<TState$1 extends Record<string, any> | undefined = Record<string, any>, TRules$1 extends ReglePartialRuleTree<NonNullable<TState$1>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = {}> = IsUnion<NonNullable<TState$1>> extends true ? Omit<RegleStatus<TState$1, TRules$1, TShortcuts>, '$fields'> & {
|
|
274
282
|
$fields: ProcessChildrenFields<TState$1, TRules$1, TShortcuts>[keyof ProcessChildrenFields<TState$1, TRules$1, TShortcuts>];
|
|
275
283
|
} & (HasNamedKeys<TState$1> extends true ? ProcessChildrenFields<TState$1, TRules$1, TShortcuts>[keyof ProcessChildrenFields<TState$1, TRules$1, TShortcuts>] : {}) : RegleStatus<TState$1, TRules$1, TShortcuts>;
|
|
@@ -284,6 +292,74 @@ type PossibleLiteralTypes<T extends Record<string, any>, TKey$1 extends keyof T>
|
|
|
284
292
|
} } };
|
|
285
293
|
type RequiredForm<T extends Record<string, any>, TKey$1 extends keyof T> = Omit<ReglePartialRuleTree<T>, TKey$1> & PossibleLiteralTypes<T, TKey$1>[keyof PossibleLiteralTypes<T, TKey$1>];
|
|
286
294
|
type VariantTuple<T extends Record<string, any>, TKey$1 extends keyof T> = [RequiredForm<T, TKey$1>, ...RequiredForm<T, TKey$1>[]];
|
|
295
|
+
type RemoveCommonKey<T extends readonly any[], K$1 extends PropertyKey> = T extends [infer F, ...infer R] ? [Prettify<Omit<F, K$1>>, ...RemoveCommonKey<R, K$1>] : [];
|
|
296
|
+
/**
|
|
297
|
+
* Restore the optional properties (with ?) of a generated mapped object type
|
|
298
|
+
*/
|
|
299
|
+
|
|
300
|
+
type MergePropsIntoRequiredBooleans<TObject extends Record<string, any>> = { [K in keyof TObject]-?: TObject[K] extends NonNullable<TObject[K]> ? true : false }[keyof TObject];
|
|
301
|
+
/**
|
|
302
|
+
* Ensure that if at least one prop is required, the "prop" object will be required too
|
|
303
|
+
*/
|
|
304
|
+
type HaveAnyRequiredProps<TObject extends Record<string, any>> = [TObject] extends [never] ? false : TObject extends Record<string, any> ? MergePropsIntoRequiredBooleans<TObject> extends false ? false : true : false;
|
|
305
|
+
/**
|
|
306
|
+
* Get item value from object, otherwise fallback to undefined. Avoid TS to not be able to infer keys not present on all unions
|
|
307
|
+
*/
|
|
308
|
+
type GetMaybeObjectValue<O extends Record<string, any>, K$1 extends string> = K$1 extends keyof O ? O[K$1] : undefined;
|
|
309
|
+
/**
|
|
310
|
+
* Combine all union values to be able to get even the normally "never" values, act as an intersection type
|
|
311
|
+
*/
|
|
312
|
+
type RetrieveUnionUnknownValues<T extends readonly any[], TKeys extends string> = T extends [infer F extends Record<string, any>, ...infer R] ? [{ [K in TKeys as GetMaybeObjectValue<F, K> extends NonUndefined<GetMaybeObjectValue<F, K>> ? never : K]?: GetMaybeObjectValue<F, K> } & { [K in TKeys as GetMaybeObjectValue<F, K> extends NonUndefined<GetMaybeObjectValue<F, K>> ? K : never]: GetMaybeObjectValue<F, K> }, ...RetrieveUnionUnknownValues<R, TKeys>] : [];
|
|
313
|
+
/**
|
|
314
|
+
* Get all possible keys from a union, even the ones present only on one union
|
|
315
|
+
*/
|
|
316
|
+
type RetrieveUnionUnknownKeysOf<T extends readonly any[]> = T extends [infer F, ...infer R] ? [keyof F, ...RetrieveUnionUnknownKeysOf<R>] : [];
|
|
317
|
+
/**
|
|
318
|
+
* Transforms a union and apply undefined values to non-present keys to support intersection
|
|
319
|
+
*/
|
|
320
|
+
type NormalizeUnion<TUnion> = RetrieveUnionUnknownValues<NonNullable<UnionToTuple<TUnion>>, RetrieveUnionUnknownKeysOf<NonNullable<UnionToTuple<TUnion>>>[number]>[number];
|
|
321
|
+
/**
|
|
322
|
+
* Combine all members of a union type, merging types for each key, and keeping loose types
|
|
323
|
+
*/
|
|
324
|
+
type JoinDiscriminatedUnions<TUnion extends unknown> = HasNamedKeys<TUnion> extends true ? isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection<RemoveCommonKey<UnionToTuple<NonNullable<TUnion>>, keyof NormalizeUnion<NonNullable<TUnion>>>[number]>> & Pick<NormalizeUnion<NonNullable<TUnion>>, keyof NormalizeUnion<NonNullable<TUnion>>>> : TUnion : TUnion;
|
|
325
|
+
type LazyJoinDiscriminatedUnions<TUnion extends unknown> = isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection<RemoveCommonKey<UnionToTuple<TUnion>, keyof NonNullable<TUnion>>[number]>> & Pick<NonNullable<TUnion>, keyof NonNullable<TUnion>>> : TUnion;
|
|
326
|
+
type EnumLike = {
|
|
327
|
+
[k: string]: string | number;
|
|
328
|
+
[nu: number]: string;
|
|
329
|
+
};
|
|
330
|
+
type enumType<T extends Record<string, unknown>> = T[keyof T];
|
|
331
|
+
type UnwrapMaybeRef<T extends MaybeRef<any> | DeepReactiveState<any>> = T extends Ref<any> ? UnwrapRef<T> : UnwrapNestedRefs<T>;
|
|
332
|
+
type UnwrapStatic<T> = IsUnknown<T> extends true ? any : T extends RegleStatic<infer U> ? Raw<U> : UnwrapStaticSimple<T>;
|
|
333
|
+
type UnwrapStaticSimple<T> = T extends Array<infer U> ? Array<UnwrapStatic<U>> : isRecordLiteral<T> extends true ? { [K in keyof T]: UnwrapStatic<T[K]> } : T;
|
|
334
|
+
type TupleToPlainObj<T> = { [I in keyof T & `${number}`]: T[I] };
|
|
335
|
+
type HasNamedKeys<T> = IsUnion<T> extends true ? ProcessHasNamedKeys<LazyJoinDiscriminatedUnions<T>> : ProcessHasNamedKeys<T>;
|
|
336
|
+
type ProcessHasNamedKeys<T> = { [K in keyof NonNullable<T>]: K extends string ? (string extends K ? never : K) : never }[keyof NonNullable<T>] extends never ? false : true;
|
|
337
|
+
declare const RegleStaticSymbol: unique symbol;
|
|
338
|
+
type RegleStatic<T> = T extends (new (...args: infer Args) => infer U) ? RegleStaticImpl<new (...args: Args) => RegleStaticImpl<U>> : RegleStaticImpl<T>;
|
|
339
|
+
type RegleStaticImpl<T> = Raw<T & {
|
|
340
|
+
[RegleStaticSymbol]: true;
|
|
341
|
+
}>;
|
|
342
|
+
type IsRegleStatic<T> = T extends RegleStaticImpl<T> ? true : false;
|
|
343
|
+
type Prettify<T> = T extends infer R ? { [K in keyof R]: R[K] } & {} : never;
|
|
344
|
+
type Maybe<T = any> = T | null | undefined;
|
|
345
|
+
type MaybeInput<T = any> = T | null | undefined;
|
|
346
|
+
type MaybeOutput<T = any> = T | undefined;
|
|
347
|
+
type MaybeReadonly<T> = T | Readonly<T>;
|
|
348
|
+
type NonUndefined<T> = Exclude<T, undefined>;
|
|
349
|
+
type PromiseReturn<T> = T extends Promise<infer U> ? U : T;
|
|
350
|
+
type MaybeGetter<T, V$1 = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V$1>, index: number) => T & TAdd);
|
|
351
|
+
type Unwrap<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : UnwrapNestedRefs<T>;
|
|
352
|
+
type UnwrapSimple<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : T extends ((...args: any[]) => infer U) ? U : T;
|
|
353
|
+
type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends ((value: Ref<any>, index: number) => infer U extends Record<string, any>) ? U : T;
|
|
354
|
+
type ExtendOnlyRealRecord<T extends unknown> = NonNullable<T> extends File | Date | RegleStatic<unknown> ? false : NonNullable<T> extends Record<string, any> ? true : false;
|
|
355
|
+
type OmitByType<T extends Record<string, any>, U$1> = { [K in keyof T as T[K] extends U$1 ? never : K]: T[K] };
|
|
356
|
+
type DeepMaybeRef<T extends Record<string, any>> = { [K in keyof T]: MaybeRef<T[K]> };
|
|
357
|
+
type ExcludeByType<T, U$1> = { [K in keyof T as T[K] extends U$1 ? never : K]: T[K] extends U$1 ? never : T[K] };
|
|
358
|
+
type PrimitiveTypes = string | number | boolean | bigint | Date | File;
|
|
359
|
+
type isRecordLiteral<T extends unknown> = NonNullable<T> extends Date | File ? false : NonNullable<T> extends Record<string, any> ? true : false;
|
|
360
|
+
type NoInferLegacy<A$1 extends any> = [A$1][A$1 extends any ? 0 : never];
|
|
361
|
+
type ArrayElement<T> = T extends Array<infer U> ? U : never;
|
|
362
|
+
type NonEmptyTuple<T> = [T, ...T[]] | T[];
|
|
287
363
|
type useRegleFnOptions<TState$1 extends Record<string, any> | MaybeInput<PrimitiveTypes>, TRules$1 extends DeepExact<TRules$1, ReglePartialRuleTree<Unwrap<TState$1 extends Record<string, any> ? TState$1 : {}>, Partial<AllRulesDeclarations>>>, TAdditionalOptions extends Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>> = TState$1 extends MaybeInput<PrimitiveTypes> ? Partial<DeepMaybeRef<RegleBehaviourOptions>> & TAdditionalOptions : Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<JoinDiscriminatedUnions<TState$1 extends Record<string, any> ? Unwrap<TState$1> : {}>, TState$1 extends Record<string, any> ? (TRules$1 extends Record<string, any> ? TRules$1 : {}) : {}, TValidationGroups> & TAdditionalOptions;
|
|
288
364
|
interface useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never, TAdditionalReturnProperties extends Record<string, any> = {}, TAdditionalOptions extends Record<string, any> = {}> {
|
|
289
365
|
<TState$1 extends Record<string, any> | MaybeInput<PrimitiveTypes>, TRules$1 extends DeepExact<TRules$1, ReglePartialRuleTree<Unwrap<TState$1 extends Record<string, any> ? TState$1 : {}>, Partial<AllRulesDeclarations> & TCustomRules>>, TDecl extends RegleRuleDecl<NonNullable<TState$1>, Partial<AllRulesDeclarations> & TCustomRules>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>>(...params: [state: Maybe<MaybeRef<TState$1> | DeepReactiveState<TState$1>>, rulesFactory: TState$1 extends MaybeInput<PrimitiveTypes> ? MaybeRefOrGetter<TDecl> : TState$1 extends Record<string, any> ? MaybeRef<TRules$1> | ((...args: any[]) => TRules$1) : {}, ...(HaveAnyRequiredProps<useRegleFnOptions<TState$1, TRules$1, TAdditionalOptions, TValidationGroups>> extends true ? [options: useRegleFnOptions<TState$1, TRules$1, TAdditionalOptions, TValidationGroups>] : [options?: useRegleFnOptions<TState$1, TRules$1, TAdditionalOptions, TValidationGroups>])]): NonNullable<TState$1> extends PrimitiveTypes ? RegleSingleField<NonNullable<TState$1>, TDecl, TShortcuts, TAdditionalReturnProperties> : Regle<TState$1 extends Record<string, any> ? Unwrap<TState$1> : {}, TRules$1 extends Record<string, any> ? TRules$1 : {}, TValidationGroups, TShortcuts, TAdditionalReturnProperties>;
|
|
@@ -387,6 +463,17 @@ interface useRulesFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortc
|
|
|
387
463
|
* ```
|
|
388
464
|
*/
|
|
389
465
|
declare const useRules: useRulesFn<Partial<AllRulesDeclarations>, RegleShortcutDefinition<any>>;
|
|
466
|
+
/**
|
|
467
|
+
* Marks a value as static and treats the constructor as a regular raw Field.
|
|
468
|
+
* @param value - The value to mark as static.
|
|
469
|
+
* @returns The marked value.
|
|
470
|
+
* @example
|
|
471
|
+
* ```ts
|
|
472
|
+
* const StaticDecimal = markStatic(Decimal);
|
|
473
|
+
* const StaticBigWrapper = markStatic(BigWrapper);
|
|
474
|
+
* ```
|
|
475
|
+
*/
|
|
476
|
+
declare function markStatic<T extends object>(value: T): RegleStatic<T>;
|
|
390
477
|
/**
|
|
391
478
|
* Infer type of the `r$` of any function returning a regle instance
|
|
392
479
|
*/
|
|
@@ -425,46 +512,6 @@ type TypeError<Msg> = {
|
|
|
425
512
|
[' TypeError']: Msg;
|
|
426
513
|
};
|
|
427
514
|
type Coerce<T> = `${T & string}`;
|
|
428
|
-
type RemoveCommonKey<T extends readonly any[], K$1 extends PropertyKey> = T extends [infer F, ...infer R] ? [Prettify<Omit<F, K$1>>, ...RemoveCommonKey<R, K$1>] : [];
|
|
429
|
-
/**
|
|
430
|
-
* Restore the optional properties (with ?) of a generated mapped object type
|
|
431
|
-
*/
|
|
432
|
-
|
|
433
|
-
type MergePropsIntoRequiredBooleans<TObject extends Record<string, any>> = { [K in keyof TObject]-?: TObject[K] extends NonNullable<TObject[K]> ? true : false }[keyof TObject];
|
|
434
|
-
/**
|
|
435
|
-
* Ensure that if at least one prop is required, the "prop" object will be required too
|
|
436
|
-
*/
|
|
437
|
-
type HaveAnyRequiredProps<TObject extends Record<string, any>> = [TObject] extends [never] ? false : TObject extends Record<string, any> ? MergePropsIntoRequiredBooleans<TObject> extends false ? false : true : false;
|
|
438
|
-
/**
|
|
439
|
-
* Get item value from object, otherwise fallback to undefined. Avoid TS to not be able to infer keys not present on all unions
|
|
440
|
-
*/
|
|
441
|
-
type GetMaybeObjectValue<O extends Record<string, any>, K$1 extends string> = K$1 extends keyof O ? O[K$1] : undefined;
|
|
442
|
-
/**
|
|
443
|
-
* Combine all union values to be able to get even the normally "never" values, act as an intersection type
|
|
444
|
-
*/
|
|
445
|
-
type RetrieveUnionUnknownValues<T extends readonly any[], TKeys extends string> = T extends [infer F extends Record<string, any>, ...infer R] ? [{ [K in TKeys as GetMaybeObjectValue<F, K> extends NonUndefined<GetMaybeObjectValue<F, K>> ? never : K]?: GetMaybeObjectValue<F, K> } & { [K in TKeys as GetMaybeObjectValue<F, K> extends NonUndefined<GetMaybeObjectValue<F, K>> ? K : never]: GetMaybeObjectValue<F, K> }, ...RetrieveUnionUnknownValues<R, TKeys>] : [];
|
|
446
|
-
/**
|
|
447
|
-
* Get all possible keys from a union, even the ones present only on one union
|
|
448
|
-
*/
|
|
449
|
-
type RetrieveUnionUnknownKeysOf<T extends readonly any[]> = T extends [infer F, ...infer R] ? [keyof F, ...RetrieveUnionUnknownKeysOf<R>] : [];
|
|
450
|
-
/**
|
|
451
|
-
* Transforms a union and apply undefined values to non-present keys to support intersection
|
|
452
|
-
*/
|
|
453
|
-
type NormalizeUnion<TUnion> = RetrieveUnionUnknownValues<NonNullable<UnionToTuple<TUnion>>, RetrieveUnionUnknownKeysOf<NonNullable<UnionToTuple<TUnion>>>[number]>[number];
|
|
454
|
-
/**
|
|
455
|
-
* Combine all members of a union type, merging types for each key, and keeping loose types
|
|
456
|
-
*/
|
|
457
|
-
type JoinDiscriminatedUnions<TUnion extends unknown> = HasNamedKeys<TUnion> extends true ? isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection<RemoveCommonKey<UnionToTuple<NonNullable<TUnion>>, keyof NormalizeUnion<NonNullable<TUnion>>>[number]>> & Pick<NormalizeUnion<NonNullable<TUnion>>, keyof NormalizeUnion<NonNullable<TUnion>>>> : TUnion : TUnion;
|
|
458
|
-
type LazyJoinDiscriminatedUnions<TUnion extends unknown> = isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection<RemoveCommonKey<UnionToTuple<TUnion>, keyof NonNullable<TUnion>>[number]>> & Pick<NonNullable<TUnion>, keyof NonNullable<TUnion>>> : TUnion;
|
|
459
|
-
type EnumLike = {
|
|
460
|
-
[k: string]: string | number;
|
|
461
|
-
[nu: number]: string;
|
|
462
|
-
};
|
|
463
|
-
type enumType<T extends Record<string, unknown>> = T[keyof T];
|
|
464
|
-
type UnwrapMaybeRef<T extends MaybeRef<any> | DeepReactiveState<any>> = T extends Ref<any> ? UnwrapRef<T> : UnwrapNestedRefs<T>;
|
|
465
|
-
type TupleToPlainObj<T> = { [I in keyof T & `${number}`]: T[I] };
|
|
466
|
-
type HasNamedKeys<T> = IsUnion<T> extends true ? ProcessHasNamedKeys<LazyJoinDiscriminatedUnions<T>> : ProcessHasNamedKeys<T>;
|
|
467
|
-
type ProcessHasNamedKeys<T> = { [K in keyof NonNullable<T>]: K extends string ? (string extends K ? never : K) : never }[keyof NonNullable<T>] extends never ? false : true;
|
|
468
515
|
type InferInput<TRules$1 extends MaybeRef<ReglePartialRuleTree<Record<string, any>, any>> | ((state: any) => ReglePartialRuleTree<Record<string, any>, any>) | MaybeRef<StandardSchemaV1<any>>, TMarkMaybe extends boolean = true> = TRules$1 extends MaybeRef<StandardSchemaV1<infer State>> ? State : IsUnion<UnwrapSimple<TRules$1>> extends true ? InferTupleUnionInput<UnionToTuple<UnwrapSimple<TRules$1>>>[number] : TMarkMaybe extends true ? Prettify<{ [K in keyof UnwrapSimple<TRules$1> as UnwrapSimple<TRules$1>[K] extends MaybeRef<RegleRuleDecl<any, any>> ? K : never]?: ProcessInputChildren<UnwrapSimple<TRules$1>[K], TMarkMaybe> } & { [K in keyof UnwrapSimple<TRules$1> as UnwrapSimple<TRules$1>[K] extends MaybeRef<RegleRuleDecl<any, any>> ? never : K]: ProcessInputChildren<UnwrapSimple<TRules$1>[K], TMarkMaybe> }> : Prettify<{ [K in keyof UnwrapSimple<TRules$1>]: ProcessInputChildren<UnwrapSimple<TRules$1>[K], TMarkMaybe> }>;
|
|
469
516
|
type ProcessInputChildren<TRule extends unknown, TMarkMaybe extends boolean> = TRule extends {
|
|
470
517
|
$each: RegleCollectionEachRules<any, any>;
|
|
@@ -706,7 +753,7 @@ type $InternalReglePartialRuleTree = {
|
|
|
706
753
|
/**
|
|
707
754
|
* @public
|
|
708
755
|
*/
|
|
709
|
-
type RegleFormPropertyType<TValue$1 = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue$1>] extends [never] ? MaybeRef<RegleRuleDecl<TValue$1, TCustomRules>> : NonNullable<TValue$1> extends Array<any> ? RegleCollectionRuleDecl<TValue$1, TCustomRules> : NonNullable<TValue$1> extends Date ? MaybeRef<RegleRuleDecl<NonNullable<TValue$1>, TCustomRules>> : NonNullable<TValue$1> extends File ? MaybeRef<RegleRuleDecl<NonNullable<TValue$1>, TCustomRules>> : NonNullable<TValue$1> extends Ref<infer V> ? RegleFormPropertyType<V, TCustomRules> : NonNullable<TValue$1> extends Record<string, any> ? ReglePartialRuleTree<NonNullable<TValue$1>, TCustomRules> : MaybeRef<RegleRuleDecl<NonNullable<TValue$1>, TCustomRules>>;
|
|
756
|
+
type RegleFormPropertyType<TValue$1 = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue$1>] extends [never] ? MaybeRef<RegleRuleDecl<TValue$1, TCustomRules>> : NonNullable<TValue$1> extends Array<any> ? RegleCollectionRuleDecl<TValue$1, TCustomRules> : NonNullable<TValue$1> extends Date ? MaybeRef<RegleRuleDecl<NonNullable<TValue$1>, TCustomRules>> : NonNullable<TValue$1> extends File ? MaybeRef<RegleRuleDecl<NonNullable<TValue$1>, TCustomRules>> : NonNullable<TValue$1> extends Ref<infer V> ? RegleFormPropertyType<V, TCustomRules> : NonNullable<TValue$1> extends Record<string, any> ? NonNullable<TValue$1> extends RegleStatic<infer U> ? MaybeRef<RegleRuleDecl<Raw<U>, TCustomRules>> : ReglePartialRuleTree<NonNullable<TValue$1>, TCustomRules> : MaybeRef<RegleRuleDecl<NonNullable<TValue$1>, TCustomRules>>;
|
|
710
757
|
/**
|
|
711
758
|
* @internal
|
|
712
759
|
* @reference {@link RegleFormPropertyType}
|
|
@@ -803,17 +850,18 @@ interface $InternalRegleStatus extends $InternalRegleCommonStatus {
|
|
|
803
850
|
readonly '~modifiers'?: RegleBehaviourOptions;
|
|
804
851
|
$extractDirtyFields: (filterNullishValues?: boolean) => Record<string, any>;
|
|
805
852
|
$validate: (forceValues?: any) => Promise<$InternalRegleResult>;
|
|
853
|
+
$id?: string;
|
|
806
854
|
}
|
|
807
855
|
/**
|
|
808
856
|
* @public
|
|
809
857
|
*/
|
|
810
|
-
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialRuleTree<any>, TState$1 extends Record<PropertyKey, any> = any, TKey$1 extends PropertyKey = string, TShortcuts extends RegleShortcutDefinition = {}> = HasNamedKeys<TState$1> extends true ? [TState$1[TKey$1]] extends [undefined | null] ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Array<infer U extends Record<string, any>> ? ExtendOnlyRealRecord<U> extends true ? TRule extends RegleCollectionRuleDefinition<any, any> ? ExtractFromGetter<TRule['$each']> extends ReglePartialRuleTree<any> ? RegleCollectionStatus<TState$1[TKey$1], ExtractFromGetter<TRule['$each']>, TRule, TShortcuts> : RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : RegleCollectionStatus<TState$1[TKey$1], {}, TRule, TShortcuts> : RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : TRule extends ReglePartialRuleTree<any> ? NonNullable<TState$1[TKey$1]> extends Array<any> ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Date | File ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : unknown extends TState$1[TKey$1] ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Record<PropertyKey, any> ? MaybeVariantStatus<TState$1[TKey$1], TRule, TShortcuts> : RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Date | File ? RegleFieldStatus<TState$1[TKey$1]
|
|
858
|
+
type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialRuleTree<any>, TState$1 extends Record<PropertyKey, any> = any, TKey$1 extends PropertyKey = string, TShortcuts extends RegleShortcutDefinition = {}> = HasNamedKeys<TState$1> extends true ? [TState$1[TKey$1]] extends [undefined | null] ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Array<infer U extends Record<string, any>> ? ExtendOnlyRealRecord<U> extends true ? TRule extends RegleCollectionRuleDefinition<any, any> ? ExtractFromGetter<TRule['$each']> extends ReglePartialRuleTree<any> ? RegleCollectionStatus<TState$1[TKey$1], ExtractFromGetter<TRule['$each']>, TRule, TShortcuts> : RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : RegleCollectionStatus<TState$1[TKey$1], {}, TRule, TShortcuts> : RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : TRule extends ReglePartialRuleTree<any> ? NonNullable<TState$1[TKey$1]> extends Array<any> ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Date | File ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : unknown extends TState$1[TKey$1] ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Record<PropertyKey, any> ? NonNullable<TState$1[TKey$1]> extends RegleStaticImpl<infer U> ? RegleFieldStatus<Raw<U>, TRule, TShortcuts> : MaybeVariantStatus<TState$1[TKey$1], TRule, TShortcuts> : RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Date | File ? RegleFieldStatus<Raw<NonNullable<TState$1[TKey$1]>>, TRule, TShortcuts> : unknown extends TState$1[TKey$1] ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Record<PropertyKey, any> ? NonNullable<TState$1[TKey$1]> extends RegleStaticImpl<infer U> ? RegleFieldStatus<Raw<U>, TRule, TShortcuts> : MaybeVariantStatus<TState$1[TKey$1], ReglePartialRuleTree<TState$1[TKey$1]>, TShortcuts> : RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : RegleCommonStatus<unknown>;
|
|
811
859
|
/**
|
|
812
860
|
* @internal
|
|
813
861
|
* @reference {@link InferRegleStatusType}
|
|
814
862
|
*/
|
|
815
863
|
type $InternalRegleStatusType = $InternalRegleCollectionStatus | $InternalRegleStatus | $InternalRegleFieldStatus;
|
|
816
|
-
type RegleFieldIssue<TRules$1 extends RegleFormPropertyType<
|
|
864
|
+
type RegleFieldIssue<TRules$1 extends RegleFormPropertyType<unknown, Partial<AllRulesDeclarations>> = EmptyObject> = {
|
|
817
865
|
readonly $property: string;
|
|
818
866
|
readonly $type?: string;
|
|
819
867
|
readonly $message: string;
|
|
@@ -830,17 +878,26 @@ type RegleFieldIssue<TRules$1 extends RegleFormPropertyType<any, Partial<AllRule
|
|
|
830
878
|
} : {
|
|
831
879
|
readonly $rule: string;
|
|
832
880
|
} }[keyof ComputeFieldRules<any, TRules$1>]);
|
|
833
|
-
type ComputeFieldRules<TState$1 extends any, TRules$1 extends RegleFormPropertyType<
|
|
881
|
+
type ComputeFieldRules<TState$1 extends any, TRules$1 extends MaybeRef<RegleFormPropertyType<unknown, Partial<AllRulesDeclarations>>>> = IsEmptyObject<UnwrapRef<TRules$1>> extends true ? {
|
|
834
882
|
readonly [x: string]: RegleRuleStatus<TState$1, any[], any>;
|
|
835
|
-
} : { readonly [TRuleKey in keyof Omit<TRules$1
|
|
883
|
+
} : { readonly [TRuleKey in keyof Omit<UnwrapRef<TRules$1>, '$each' | keyof FieldRegleBehaviourOptions>]: RegleRuleStatus<TState$1, UnwrapRef<TRules$1>[TRuleKey] extends RegleRuleDefinition<any, infer TParams, any> ? TParams : [], UnwrapRef<TRules$1>[TRuleKey] extends RegleRuleDefinition<any, any, any, infer TMetadata> ? TMetadata : UnwrapRef<TRules$1>[TRuleKey] extends InlineRuleDeclaration<any, any[], infer TMetadata> ? TMetadata extends Promise<infer P> ? P : TMetadata : boolean> };
|
|
836
884
|
/**
|
|
837
885
|
* @public
|
|
838
886
|
*/
|
|
839
|
-
type RegleFieldStatus<TState$1 extends any = any, TRules$1 extends RegleFormPropertyType<
|
|
887
|
+
type RegleFieldStatus<TState$1 extends any = any, TRules$1 extends RegleFormPropertyType<unknown, Partial<AllRulesDeclarations>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = never> = Omit<RegleCommonStatus<TState$1>, '$value' | '$silentValue' | '$initialValue' | '$originalValue'> & {
|
|
840
888
|
/** A reference to the original validated model. It can be used to bind your form with v-model.*/
|
|
841
889
|
$value: MaybeOutput<UnwrapNestedRefs<TState$1>>;
|
|
842
890
|
/** $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. */
|
|
843
891
|
$silentValue: MaybeOutput<UnwrapNestedRefs<TState$1>>;
|
|
892
|
+
/**
|
|
893
|
+
* This value reflect the current initial value of the field.
|
|
894
|
+
* The initial value is different than the original value as the initial value can be mutated when using `$reset`.
|
|
895
|
+
*/
|
|
896
|
+
readonly $initialValue: MaybeOutput<UnwrapNestedRefs<TState$1>>;
|
|
897
|
+
/**
|
|
898
|
+
* This value reflect the original value of the field at original call. This can't be mutated
|
|
899
|
+
*/
|
|
900
|
+
readonly $originalValue: MaybeOutput<UnwrapNestedRefs<TState$1>>;
|
|
844
901
|
/** Collection of all the error messages, collected for all children properties and nested forms.
|
|
845
902
|
*
|
|
846
903
|
* Only contains errors from properties where $dirty equals true. */
|
|
@@ -926,20 +983,20 @@ interface RegleCommonStatus<TValue$1 = any> extends StandardSchemaV1<TValue$1> {
|
|
|
926
983
|
/** Id used to track collections items */
|
|
927
984
|
$id?: string;
|
|
928
985
|
/** A reference to the original validated model. It can be used to bind your form with v-model.*/
|
|
929
|
-
$value: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1
|
|
986
|
+
$value: UnwrapStatic<JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1>>>;
|
|
930
987
|
/**
|
|
931
988
|
* This value reflect the current initial value of the field.
|
|
932
989
|
* The initial value is different than the original value as the initial value can be mutated when using `$reset`.
|
|
933
990
|
*/
|
|
934
|
-
readonly $initialValue: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1
|
|
991
|
+
readonly $initialValue: UnwrapStatic<JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1>>>;
|
|
935
992
|
/**
|
|
936
993
|
* This value reflect the original value of the field at original call. This can't be mutated
|
|
937
994
|
*/
|
|
938
|
-
readonly $originalValue: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1
|
|
995
|
+
readonly $originalValue: UnwrapStatic<JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1>>>;
|
|
939
996
|
/**
|
|
940
997
|
* `$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.
|
|
941
998
|
* */
|
|
942
|
-
$silentValue: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1
|
|
999
|
+
$silentValue: UnwrapStatic<JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1>>>;
|
|
943
1000
|
/** Marks the field and all nested properties as $dirty. */
|
|
944
1001
|
$touch(): void;
|
|
945
1002
|
/**
|
|
@@ -1068,7 +1125,7 @@ type RegleIssuesTree<TState$1 = MaybeRef<Record<string, any> | any[]>> = { reado
|
|
|
1068
1125
|
type RegleExternalErrorTree<TState$1 = MaybeRef<Record<string, any> | any[]>> = { readonly [K in keyof JoinDiscriminatedUnions<UnwrapMaybeRef<TState$1>>]?: RegleValidationErrors<JoinDiscriminatedUnions<UnwrapMaybeRef<TState$1>>[K], true> };
|
|
1069
1126
|
type RegleExternalSchemaErrorTree<TState$1 = MaybeRef<Record<string, any> | any[]>> = { readonly [K in keyof JoinDiscriminatedUnions<UnwrapMaybeRef<TState$1>>]?: RegleValidationErrors<JoinDiscriminatedUnions<UnwrapMaybeRef<TState$1>>[K], true, true> };
|
|
1070
1127
|
type ErrorMessageOrIssue<TIssue extends boolean> = TIssue extends true ? RegleFieldIssue[] : string[];
|
|
1071
|
-
type RegleValidationErrors<TState$1 extends Record<string, any> | any[] | unknown = never, TExternal extends boolean = false, TIssue extends boolean = false> = HasNamedKeys<TState$1> extends true ? IsAny<TState$1> extends true ? any : NonNullable<TState$1> extends Array<infer U> ? U extends Record<string, any> ? TExternal extends false ? ExtendOnlyRealRecord<U> extends true ? RegleCollectionErrors<U, TIssue> : ErrorMessageOrIssue<TIssue> : RegleExternalCollectionErrors<U, TIssue> : ErrorMessageOrIssue<TIssue> : NonNullable<TState$1> extends Date | File ? ErrorMessageOrIssue<TIssue> : NonNullable<TState$1> extends Record<string, any> ? TExternal extends false ? RegleErrorTree<TState$1, TIssue> : RegleExternalErrorTree<TState$1> : ErrorMessageOrIssue<TIssue> : any;
|
|
1128
|
+
type RegleValidationErrors<TState$1 extends Record<string, any> | any[] | unknown = never, TExternal extends boolean = false, TIssue extends boolean = false> = HasNamedKeys<TState$1> extends true ? IsAny<TState$1> extends true ? any : NonNullable<TState$1> extends Array<infer U> ? U extends Record<string, any> ? TExternal extends false ? ExtendOnlyRealRecord<U> extends true ? RegleCollectionErrors<U, TIssue> : ErrorMessageOrIssue<TIssue> : RegleExternalCollectionErrors<U, TIssue> : ErrorMessageOrIssue<TIssue> : NonNullable<TState$1> extends Date | File ? ErrorMessageOrIssue<TIssue> : NonNullable<TState$1> extends Record<string, any> ? IsRegleStatic<NonNullable<TState$1>> extends true ? ErrorMessageOrIssue<TIssue> : TExternal extends false ? RegleErrorTree<TState$1, TIssue> : RegleExternalErrorTree<TState$1> : ErrorMessageOrIssue<TIssue> : any;
|
|
1072
1129
|
type RegleCollectionErrors<TState$1 extends Record<string, any>, TIssue extends boolean = false> = {
|
|
1073
1130
|
readonly $self: TIssue extends true ? RegleFieldIssue[] : string[];
|
|
1074
1131
|
readonly $each: RegleValidationErrors<TState$1, false, TIssue>[];
|
|
@@ -1094,6 +1151,10 @@ type $InternalRegleCollectionIssues = {
|
|
|
1094
1151
|
readonly $self?: RegleFieldIssue[];
|
|
1095
1152
|
readonly $each?: $InternalRegleIssues[];
|
|
1096
1153
|
};
|
|
1154
|
+
type RegleLike<TState$1 extends Record<string, any>> = {
|
|
1155
|
+
$value: TState$1;
|
|
1156
|
+
$validate: (...args: any[]) => Promise<SuperCompatibleRegleResult>;
|
|
1157
|
+
};
|
|
1097
1158
|
interface SuperCompatibleRegle {
|
|
1098
1159
|
r$: SuperCompatibleRegleRoot;
|
|
1099
1160
|
}
|
|
@@ -1229,7 +1290,7 @@ declare function extendRegleConfig<TRootCustomRules extends Partial<AllRulesDecl
|
|
|
1229
1290
|
useRegle: useRegleFn<Merge<TRootCustomRules, TCustomRules>, TRootShortcuts & TShortcuts>;
|
|
1230
1291
|
inferRules: inferRulesFn<Merge<TRootCustomRules, TCustomRules>>;
|
|
1231
1292
|
};
|
|
1232
|
-
type MergedRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TValue$1 = { [K in keyof TRegles]: TRegles[K]['$value'] }> = Omit<RegleCommonStatus, '$value' | '$silentValue' | '$errors' | '$silentErrors' | '$name' | '$unwatch' | '$watch'> & {
|
|
1293
|
+
type MergedRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TValue$1 = { [K in keyof TRegles]: TRegles[K]['$value'] }> = Omit<RegleCommonStatus, '$value' | '$silentValue' | '$errors' | '$silentErrors' | '$name' | '$unwatch' | '$watch' | '$extractDirtyFields'> & {
|
|
1233
1294
|
/** Map of merged Regle instances and their properties */
|
|
1234
1295
|
readonly $instances: { [K in keyof TRegles]: TRegles[K] };
|
|
1235
1296
|
/** A reference to the original validated model. It can be used to bind your form with v-model.*/
|
|
@@ -1245,11 +1306,11 @@ type MergedRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TVal
|
|
|
1245
1306
|
readonly $issues: { [K in keyof TRegles]: TRegles[K]['$issues'] };
|
|
1246
1307
|
readonly $silentIssues: { [K in keyof TRegles]: TRegles[K]['$silentIssues'] };
|
|
1247
1308
|
/** 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). */
|
|
1248
|
-
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TValue$1
|
|
1309
|
+
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TValue$1>[];
|
|
1249
1310
|
/** 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). */
|
|
1250
1311
|
$validate: (forceValues?: TRegles['$value']) => Promise<MergedReglesResult<TRegles>>;
|
|
1251
|
-
};
|
|
1252
|
-
type MergedScopedRegles<TValue$1 extends Record<string, unknown>[] = Record<string, unknown>[]> = Omit<MergedRegles<Record<string, SuperCompatibleRegleRoot>, TValue$1>, '$instances' | '$errors' | '$silentErrors' | '$value' | '$silentValue' | '$validate'> & {
|
|
1312
|
+
} & { [K in keyof TRegles]: TRegles[K] };
|
|
1313
|
+
type MergedScopedRegles<TValue$1 extends Record<string, unknown>[] = Record<string, unknown>[]> = Omit<MergedRegles<Record<string, SuperCompatibleRegleRoot>, TValue$1>, '$instances' | '$errors' | '$silentErrors' | '$value' | '$silentValue' | '$validate' | '$extractDirtyFields'> & {
|
|
1253
1314
|
/** Array of scoped Regles instances */
|
|
1254
1315
|
readonly $instances: SuperCompatibleRegleRoot[];
|
|
1255
1316
|
/** Collection of all registered Regles instances values */
|
|
@@ -1262,6 +1323,8 @@ type MergedScopedRegles<TValue$1 extends Record<string, unknown>[] = Record<stri
|
|
|
1262
1323
|
readonly $issues: RegleValidationErrors<Record<string, unknown>, false, true>[];
|
|
1263
1324
|
/** Collection of all registered Regles instances silent issues */
|
|
1264
1325
|
readonly $silentIssues: RegleValidationErrors<Record<string, unknown>, false, true>[];
|
|
1326
|
+
/** 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). */
|
|
1327
|
+
$extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TValue$1>;
|
|
1265
1328
|
/** 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). */
|
|
1266
1329
|
$validate: (forceValues?: TValue$1) => Promise<{
|
|
1267
1330
|
valid: boolean;
|
|
@@ -1286,16 +1349,20 @@ type MergedReglesResult<TRegles extends Record<string, SuperCompatibleRegleRoot>
|
|
|
1286
1349
|
issues: EmptyObject;
|
|
1287
1350
|
};
|
|
1288
1351
|
declare function mergeRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TScoped extends boolean = false>(regles: TRegles, _scoped?: TScoped): TScoped extends false ? MergedRegles<TRegles> : MergedScopedRegles;
|
|
1289
|
-
type useCollectScopeFn<TNamedScoped extends boolean = false> = TNamedScoped extends true ? <const TValue$1 extends Record<string, Record<string, any>>>(namespace?: MaybeRefOrGetter<string>) => {
|
|
1352
|
+
type useCollectScopeFn<TNamedScoped extends boolean = false> = TNamedScoped extends true ? <const TValue$1 extends Record<string, Record<string, any>>>(namespace?: MaybeRefOrGetter<string | string[]>) => {
|
|
1290
1353
|
r$: MergedRegles<{ [K in keyof TValue$1]: RegleRoot<TValue$1[K]> & SuperCompatibleRegleRoot }>;
|
|
1291
|
-
} : <TValue$1 extends Record<string, unknown>[] = Record<string, unknown>[]>(namespace?: MaybeRefOrGetter<string>) => {
|
|
1354
|
+
} : <TValue$1 extends Record<string, unknown>[] = Record<string, unknown>[]>(namespace?: MaybeRefOrGetter<string | string[]>) => {
|
|
1292
1355
|
r$: MergedScopedRegles<TValue$1>;
|
|
1293
1356
|
};
|
|
1294
1357
|
type UseScopedRegleOptions<TAsRecord extends boolean> = {
|
|
1295
1358
|
namespace?: MaybeRefOrGetter<string>;
|
|
1296
|
-
} & (TAsRecord extends true ? {
|
|
1359
|
+
} & (TAsRecord extends true ? RequireAtLeastOne<{
|
|
1360
|
+
id: string;
|
|
1361
|
+
/**
|
|
1362
|
+
* @deprecated Use `id` instead
|
|
1363
|
+
*/
|
|
1297
1364
|
scopeKey: string;
|
|
1298
|
-
} : {});
|
|
1365
|
+
}, 'id' | 'scopeKey'> : {});
|
|
1299
1366
|
type CreateScopedUseRegleOptions<TCustomRegle extends useRegleFn<any, any>, TAsRecord extends boolean> = {
|
|
1300
1367
|
/**
|
|
1301
1368
|
* Inject a global configuration to the exported composables to keep your translations and typings
|
|
@@ -1308,7 +1375,7 @@ type CreateScopedUseRegleOptions<TCustomRegle extends useRegleFn<any, any>, TAsR
|
|
|
1308
1375
|
/**
|
|
1309
1376
|
* Collect instances in a Record instead of an array
|
|
1310
1377
|
*
|
|
1311
|
-
* ⚠️ Each nested `useScopedRegle` must provide a parameter `
|
|
1378
|
+
* ⚠️ Each nested `useScopedRegle` must provide a parameter `id` to be collected.
|
|
1312
1379
|
*/
|
|
1313
1380
|
asRecord?: TAsRecord;
|
|
1314
1381
|
};
|
|
@@ -1322,7 +1389,7 @@ declare function createScopedUseRegle<TCustomRegle extends useRegleFn<any, any>
|
|
|
1322
1389
|
useScopedRegle: TReturnedRegle;
|
|
1323
1390
|
useCollectScope: useCollectScopeFn<TAsRecord>;
|
|
1324
1391
|
};
|
|
1325
|
-
declare const useCollectScope: <TValue$1 extends Record<string, unknown>[] = Record<string, unknown>[]>(namespace?: vue0.MaybeRefOrGetter<string>) => {
|
|
1392
|
+
declare const useCollectScope: <TValue$1 extends Record<string, unknown>[] = Record<string, unknown>[]>(namespace?: vue0.MaybeRefOrGetter<string | string[]>) => {
|
|
1326
1393
|
r$: MergedScopedRegles<TValue$1>;
|
|
1327
1394
|
}, useScopedRegle: useRegleFn<Partial<AllRulesDeclarations>, never, {
|
|
1328
1395
|
dispose: () => void;
|
|
@@ -1365,6 +1432,7 @@ declare function narrowVariant<TRoot extends {
|
|
|
1365
1432
|
$fields: {
|
|
1366
1433
|
[x: string]: unknown;
|
|
1367
1434
|
};
|
|
1435
|
+
$value: unknown;
|
|
1368
1436
|
}, const TKey$1 extends keyof TRoot, const TValue$1 extends (LazyJoinDiscriminatedUnions<Exclude<TRoot[TKey$1], RegleCollectionStatus<any, any, any> | RegleStatus<any, any, any> | NarrowVariantExtracts[keyof NarrowVariantExtracts]>> extends {
|
|
1369
1437
|
$value: infer V;
|
|
1370
1438
|
} ? V : unknown)>(root: TRoot | undefined, discriminantKey: TKey$1, discriminantValue: TValue$1): root is NarrowVariant<TRoot, TKey$1, TValue$1>;
|
|
@@ -1415,4 +1483,4 @@ declare function defineRules<TRules$1 extends RegleUnknownRulesTree>(rules: TRul
|
|
|
1415
1483
|
*/
|
|
1416
1484
|
declare function refineRules<TRules$1 extends RegleUnknownRulesTree, TRefinement extends ReglePartialRuleTree<InferInput<TRules$1>> & RegleUnknownRulesTree>(rules: TRules$1, refinement: (state: Ref<InferInput<TRules$1>>) => TRefinement): (state: Ref<InferInput<TRules$1>>) => Merge<TRules$1, TRefinement>;
|
|
1417
1485
|
declare const RegleVuePlugin: Plugin;
|
|
1418
|
-
export { type $InternalRegleStatus, type AllRulesDeclarations, type ArrayElement, type CommonAlphaOptions, type CommonComparisonOptions, type CreateScopedUseRegleOptions, type DeepMaybeRef, type DeepReactiveState, type DefaultValidatorsTree, type FormRuleDeclaration, type HasNamedKeys, type HaveAnyRequiredProps, type InferInput, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InferSafeOutput, type InlineRuleDeclaration, InternalRuleType, type JoinDiscriminatedUnions, type LocalRegleBehaviourOptions, type Maybe, type MaybeInput, type MaybeOutput, type MaybeReadonly, type MaybeVariantStatus, type MergedRegles, type MergedScopedRegles, type NarrowVariant, type NarrowVariantExtracts, type NarrowVariantFieldExtracts, type NoInferLegacy, type NonEmptyTuple, type PrimitiveTypes, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleCustomFieldStatus, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalSchemaErrorTree, type RegleFieldIssue, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type RegleIssuesTree, 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 RegleSingleField, type RegleStatus, type RegleUniversalParams, type RegleUnknownRulesTree, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleRuleTree as RegleValidationTree, RegleVuePlugin, type ResolvedRegleBehaviourOptions, type ScopedInstancesRecord, type ScopedInstancesRecordLike, type SuperCompatibleRegle, type SuperCompatibleRegleCollectionErrors, type SuperCompatibleRegleCollectionStatus, type SuperCompatibleRegleFieldStatus, type SuperCompatibleRegleResult, type SuperCompatibleRegleRoot, type SuperCompatibleRegleRuleStatus, type SuperCompatibleRegleStatus, type TupleToPlainObj, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, type UseScopedRegleOptions, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, type inferRulesFn, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, type useCollectScopeFn, useRegle, type useRegleFn, useRootStorage, useRules, type useRulesFn, useScopedRegle, variantToRef };
|
|
1486
|
+
export { type $InternalRegleStatus, type AllRulesDeclarations, type ArrayElement, type CommonAlphaOptions, type CommonComparisonOptions, type CreateScopedUseRegleOptions, type DeepMaybeRef, type DeepReactiveState, type DefaultValidatorsTree, type FormRuleDeclaration, type HasNamedKeys, type HaveAnyRequiredProps, type InferInput, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InferSafeOutput, type InlineRuleDeclaration, InternalRuleType, type IsRegleStatic, type JoinDiscriminatedUnions, type LocalRegleBehaviourOptions, type Maybe, type MaybeInput, type MaybeOutput, type MaybeReadonly, type MaybeVariantStatus, type MergedRegles, type MergedScopedRegles, type NarrowVariant, type NarrowVariantExtracts, type NarrowVariantFieldExtracts, type NoInferLegacy, type NonEmptyTuple, type PrimitiveTypes, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleCustomFieldStatus, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalSchemaErrorTree, type RegleFieldIssue, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type RegleIssuesTree, 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 RegleSingleField, type RegleStatic, type RegleStaticImpl, type RegleStatus, type RegleUniversalParams, type RegleUnknownRulesTree, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleRuleTree as RegleValidationTree, RegleVuePlugin, type ResolvedRegleBehaviourOptions, type ScopedInstancesRecord, type ScopedInstancesRecordLike, type SuperCompatibleRegle, type SuperCompatibleRegleCollectionErrors, type SuperCompatibleRegleCollectionStatus, type SuperCompatibleRegleFieldStatus, type SuperCompatibleRegleResult, type SuperCompatibleRegleRoot, type SuperCompatibleRegleRuleStatus, type SuperCompatibleRegleStatus, type TupleToPlainObj, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, type UnwrapStatic, type UseScopedRegleOptions, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, type inferRulesFn, markStatic, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, type useCollectScopeFn, useRegle, type useRegleFn, useRootStorage, useRules, type useRulesFn, useScopedRegle, variantToRef };
|
package/dist/regle-core.js
CHANGED
|
@@ -137,6 +137,20 @@ function dotPathObjectToNested(obj) {
|
|
|
137
137
|
}
|
|
138
138
|
return result;
|
|
139
139
|
}
|
|
140
|
+
function hasOwn(val, key) {
|
|
141
|
+
return Object.prototype.hasOwnProperty.call(val, key);
|
|
142
|
+
}
|
|
143
|
+
function def(obj, key, value, writable = false) {
|
|
144
|
+
Object.defineProperty(obj, key, {
|
|
145
|
+
configurable: true,
|
|
146
|
+
enumerable: false,
|
|
147
|
+
writable,
|
|
148
|
+
value
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
function isConstructor(value) {
|
|
152
|
+
return typeof value === "function" && !!value.prototype && "constructor" in value.prototype && value.prototype.constructor === value;
|
|
153
|
+
}
|
|
140
154
|
|
|
141
155
|
/**
|
|
142
156
|
* This utility will coerce any string, number or Date value into a Date using the Date constructor.
|
|
@@ -644,8 +658,11 @@ function useStorage() {
|
|
|
644
658
|
};
|
|
645
659
|
}
|
|
646
660
|
|
|
661
|
+
const regleSymbol = Symbol("regle");
|
|
662
|
+
const REGLE_FLAGS = { REGLE_STATIC: "__regle_static" };
|
|
663
|
+
|
|
647
664
|
function isNestedRulesDef(state, rules) {
|
|
648
|
-
return isRefObject(state) || isObject(rules.value) && !isEmpty(rules.value) && !Object.entries(rules.value).some(([_, rule]) => isRuleDef(rule) || typeof rule === "function");
|
|
665
|
+
return !isStatic(state.value) && (isRefObject(state) || isObject(rules.value) && !isEmpty(rules.value) && !Object.entries(rules.value).some(([_, rule]) => isRuleDef(rule) || typeof rule === "function"));
|
|
649
666
|
}
|
|
650
667
|
function isCollectionRulesDef(rules, state, schemaMode = false) {
|
|
651
668
|
return !!rules.value && isObject(rules.value) && "$each" in rules.value || schemaMode && Array.isArray(state.value) && state.value.some(isObject) || Array.isArray(state.value) && state.value.some(isObject);
|
|
@@ -663,6 +680,9 @@ function isFormRuleDefinition(rule) {
|
|
|
663
680
|
}
|
|
664
681
|
return true;
|
|
665
682
|
}
|
|
683
|
+
function isStatic(value) {
|
|
684
|
+
return isObject(value) && hasOwn(value, REGLE_FLAGS.REGLE_STATIC) && value[REGLE_FLAGS.REGLE_STATIC] === true;
|
|
685
|
+
}
|
|
666
686
|
|
|
667
687
|
function isNestedRulesStatus(rule) {
|
|
668
688
|
return isObject(rule) && "$fields" in rule;
|
|
@@ -1024,6 +1044,9 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
|
|
|
1024
1044
|
const $dirty = ref(false);
|
|
1025
1045
|
const triggerPunishment = ref(false);
|
|
1026
1046
|
const $anyDirty = computed(() => $dirty.value);
|
|
1047
|
+
const $isArrayOrRegleStatic = computed(() => {
|
|
1048
|
+
return $isArray || isStatic(state.value);
|
|
1049
|
+
});
|
|
1027
1050
|
const $debounce$1 = computed(() => {
|
|
1028
1051
|
if ($localOptions.value.$debounce != null) return $localOptions.value.$debounce;
|
|
1029
1052
|
if (scopeState.$haveAnyAsyncRule.value) return DEFAULT_DEBOUNCE_TIME;
|
|
@@ -1082,7 +1105,7 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
|
|
|
1082
1105
|
$error: $error.value,
|
|
1083
1106
|
$externalErrors: externalErrors?.value,
|
|
1084
1107
|
$schemaErrors: schemaErrors?.value,
|
|
1085
|
-
fieldName
|
|
1108
|
+
fieldName: $name.value
|
|
1086
1109
|
} });
|
|
1087
1110
|
});
|
|
1088
1111
|
const $silentIssues = computed(() => {
|
|
@@ -1092,7 +1115,7 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
|
|
|
1092
1115
|
$error: $error.value,
|
|
1093
1116
|
$externalErrors: externalErrors?.value,
|
|
1094
1117
|
$schemaErrors: schemaErrors?.value,
|
|
1095
|
-
fieldName
|
|
1118
|
+
fieldName: $name.value
|
|
1096
1119
|
},
|
|
1097
1120
|
silent: true
|
|
1098
1121
|
});
|
|
@@ -1132,7 +1155,7 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
|
|
|
1132
1155
|
else if ($inactive.value) return false;
|
|
1133
1156
|
else return Object.values($rules.value).some((ruleResult) => !ruleResult.$valid || ruleResult.$maybePending);
|
|
1134
1157
|
});
|
|
1135
|
-
const $name = computed(() => fieldName);
|
|
1158
|
+
const $name = computed(() => fieldName ?? options.id ?? "root");
|
|
1136
1159
|
const $inactive = computed(() => {
|
|
1137
1160
|
return !schemaMode && !Object.keys(rulesDef.value).some((key) => !key.startsWith("$"));
|
|
1138
1161
|
});
|
|
@@ -1225,7 +1248,8 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
|
|
|
1225
1248
|
processShortcuts,
|
|
1226
1249
|
$silentValue,
|
|
1227
1250
|
$inactive,
|
|
1228
|
-
$modifiers
|
|
1251
|
+
$modifiers,
|
|
1252
|
+
$isArrayOrRegleStatic
|
|
1229
1253
|
};
|
|
1230
1254
|
});
|
|
1231
1255
|
define$watchState();
|
|
@@ -1258,7 +1282,7 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
|
|
|
1258
1282
|
if (rulesDef.value instanceof Function) createReactiveRulesResult();
|
|
1259
1283
|
if (!scopeState.$silent.value || scopeState.$rewardEarly.value && scopeState.$error.value) $commit();
|
|
1260
1284
|
if (scopeState.$clearExternalErrorsOnChange.value) $clearExternalErrors();
|
|
1261
|
-
}, { deep:
|
|
1285
|
+
}, { deep: scopeState.$isArrayOrRegleStatic.value ? true : isVueSuperiorOrEqualTo3dotFive ? 1 : true });
|
|
1262
1286
|
}
|
|
1263
1287
|
async function $commitHandler() {
|
|
1264
1288
|
try {
|
|
@@ -1668,7 +1692,7 @@ function createReactiveCollectionStatus({ state, rulesDef, customMessages, path,
|
|
|
1668
1692
|
else if (unref(options.autoDirty) != null) return unref(options.autoDirty);
|
|
1669
1693
|
return true;
|
|
1670
1694
|
});
|
|
1671
|
-
const $name = computed(() => fieldName);
|
|
1695
|
+
const $name = computed(() => fieldName ?? options.id ?? "root");
|
|
1672
1696
|
const $modifiers = computed(() => {
|
|
1673
1697
|
return {
|
|
1674
1698
|
$deepCompare: $localOptions.value.$deepCompare ?? false,
|
|
@@ -2092,7 +2116,7 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", cachePath, roo
|
|
|
2092
2116
|
for (const key in $fields.value) if ($fields.value[key]?.$anyEdited) return true;
|
|
2093
2117
|
return false;
|
|
2094
2118
|
});
|
|
2095
|
-
const $name = computed(() => fieldName);
|
|
2119
|
+
const $name = computed(() => fieldName ?? commonArgs.options.id ?? "root");
|
|
2096
2120
|
const $modifiers = computed(() => {
|
|
2097
2121
|
return {
|
|
2098
2122
|
autoDirty: $autoDirty.value,
|
|
@@ -2419,8 +2443,6 @@ const INSPECTOR_IDS = {
|
|
|
2419
2443
|
TIMELINE: "regle-timeline"
|
|
2420
2444
|
};
|
|
2421
2445
|
|
|
2422
|
-
const regleSymbol = Symbol("regle");
|
|
2423
|
-
|
|
2424
2446
|
function useRegleDevtoolsRegistry() {
|
|
2425
2447
|
const loggedWarning = ref(false);
|
|
2426
2448
|
const devtoolsApi = shallowRef();
|
|
@@ -2442,7 +2464,7 @@ function useRegleDevtoolsRegistry() {
|
|
|
2442
2464
|
id,
|
|
2443
2465
|
name,
|
|
2444
2466
|
r$,
|
|
2445
|
-
componentName: options?.componentName
|
|
2467
|
+
componentName: options?.componentName,
|
|
2446
2468
|
filePath: options?.filePath
|
|
2447
2469
|
});
|
|
2448
2470
|
const stopHandle = watch(() => r$, () => notifyDevtools(), {
|
|
@@ -2577,7 +2599,9 @@ function buildFieldState(fieldStatus) {
|
|
|
2577
2599
|
const remainingProperties = getRemainingProperties(fieldStatus, [
|
|
2578
2600
|
...PRIORITY_KEYS.FIELD,
|
|
2579
2601
|
"$rules",
|
|
2580
|
-
"$fields"
|
|
2602
|
+
"$fields",
|
|
2603
|
+
"$modifiers",
|
|
2604
|
+
"$deepCompare"
|
|
2581
2605
|
]);
|
|
2582
2606
|
if (remainingProperties.length > 0) state["Other Properties"] = remainingProperties;
|
|
2583
2607
|
if (fieldStatus["~modifiers"]) state["Modifiers"] = Object.entries(fieldStatus["~modifiers"]).map(([key, value]) => ({
|
|
@@ -2624,8 +2648,7 @@ function buildRuleState(ruleStatus) {
|
|
|
2624
2648
|
"$fieldPending",
|
|
2625
2649
|
"$fieldCorrect",
|
|
2626
2650
|
"$fieldError",
|
|
2627
|
-
"$maybePending"
|
|
2628
|
-
"$externalErrors"
|
|
2651
|
+
"$maybePending"
|
|
2629
2652
|
]);
|
|
2630
2653
|
if (remainingProperties.length > 0) state["Other Properties"] = remainingProperties;
|
|
2631
2654
|
return state;
|
|
@@ -2634,7 +2657,12 @@ function buildRootState(r$) {
|
|
|
2634
2657
|
const state = {};
|
|
2635
2658
|
const priorityProperties = getPriorityProperties(r$, PRIORITY_KEYS.ROOT);
|
|
2636
2659
|
if (priorityProperties.length > 0) state["State"] = priorityProperties;
|
|
2637
|
-
const remainingProperties = getRemainingProperties(r$, [
|
|
2660
|
+
const remainingProperties = getRemainingProperties(r$, [
|
|
2661
|
+
...PRIORITY_KEYS.ROOT,
|
|
2662
|
+
"$fields",
|
|
2663
|
+
"$modifiers",
|
|
2664
|
+
"$path"
|
|
2665
|
+
]);
|
|
2638
2666
|
if (remainingProperties.length > 0) state["Other Properties"] = remainingProperties;
|
|
2639
2667
|
if (r$["~modifiers"]) state["Modifiers"] = Object.entries(r$["~modifiers"]).map(([key, value]) => ({
|
|
2640
2668
|
key,
|
|
@@ -2686,7 +2714,7 @@ function buildInspectorState(nodeId, getInstance) {
|
|
|
2686
2714
|
return buildRootState(instance.r$);
|
|
2687
2715
|
}
|
|
2688
2716
|
|
|
2689
|
-
function handleValidateAction(nodeId
|
|
2717
|
+
function handleValidateAction(nodeId) {
|
|
2690
2718
|
if (nodeId.includes(":rule:")) return;
|
|
2691
2719
|
const fieldInfo = parseFieldNodeId(nodeId);
|
|
2692
2720
|
if (fieldInfo) {
|
|
@@ -2700,9 +2728,9 @@ function handleValidateAction(nodeId, api) {
|
|
|
2700
2728
|
const instance = regleDevtoolsRegistry.get(nodeId);
|
|
2701
2729
|
if (instance && typeof instance.r$.$validate === "function") instance.r$.$validate();
|
|
2702
2730
|
}
|
|
2703
|
-
|
|
2731
|
+
regleDevtoolsRegistry.notifyDevtools();
|
|
2704
2732
|
}
|
|
2705
|
-
|
|
2733
|
+
function handleResetAction(nodeId, resetState = false) {
|
|
2706
2734
|
const fieldInfo = parseFieldNodeId(nodeId);
|
|
2707
2735
|
if (fieldInfo) {
|
|
2708
2736
|
const { instanceId, fieldName } = fieldInfo;
|
|
@@ -2715,6 +2743,23 @@ async function handleResetAction(nodeId, api, resetState = false) {
|
|
|
2715
2743
|
const instance = regleDevtoolsRegistry.get(nodeId);
|
|
2716
2744
|
if (instance && typeof instance.r$.$reset === "function") instance.r$.$reset({ toOriginalState: resetState });
|
|
2717
2745
|
}
|
|
2746
|
+
regleDevtoolsRegistry.notifyDevtools();
|
|
2747
|
+
}
|
|
2748
|
+
function handleTouchAction(nodeId) {
|
|
2749
|
+
if (nodeId.includes(":rule:")) return;
|
|
2750
|
+
const fieldInfo = parseFieldNodeId(nodeId);
|
|
2751
|
+
if (fieldInfo) {
|
|
2752
|
+
const { instanceId, fieldName } = fieldInfo;
|
|
2753
|
+
const instance = regleDevtoolsRegistry.get(instanceId);
|
|
2754
|
+
if (instance && instance.r$.$fields) {
|
|
2755
|
+
const fieldStatus = resolveFieldByPath(instance.r$.$fields, fieldName);
|
|
2756
|
+
if (fieldStatus && typeof fieldStatus.$touch === "function") fieldStatus.$touch();
|
|
2757
|
+
}
|
|
2758
|
+
} else {
|
|
2759
|
+
const instance = regleDevtoolsRegistry.get(nodeId);
|
|
2760
|
+
if (instance && typeof instance.r$.$touch === "function") instance.r$.$touch();
|
|
2761
|
+
}
|
|
2762
|
+
regleDevtoolsRegistry.notifyDevtools();
|
|
2718
2763
|
}
|
|
2719
2764
|
function handleEditInspectorState(payload) {
|
|
2720
2765
|
const { nodeId, path, state } = payload;
|
|
@@ -2734,7 +2779,7 @@ async function emitInspectorState(api) {
|
|
|
2734
2779
|
|
|
2735
2780
|
function buildNodeTags(fieldOrR$, componentName) {
|
|
2736
2781
|
const tags = [];
|
|
2737
|
-
const isOptional = isFieldStatus(fieldOrR$) ? "required" in fieldOrR$.$rules && !fieldOrR$.$rules.required.$active : false;
|
|
2782
|
+
const isOptional = isFieldStatus(fieldOrR$) ? "required" in fieldOrR$.$rules && !fieldOrR$.$rules.required.$active || isEmpty(fieldOrR$.$rules) : false;
|
|
2738
2783
|
const isNestedOrCollection = isNestedRulesStatus(fieldOrR$) || isCollectionRulesStatus(fieldOrR$);
|
|
2739
2784
|
if (fieldOrR$.$error) tags.push({
|
|
2740
2785
|
label: "error",
|
|
@@ -2761,7 +2806,7 @@ function buildNodeTags(fieldOrR$, componentName) {
|
|
|
2761
2806
|
backgroundColor: COLORS.OPTIONAL.bg,
|
|
2762
2807
|
tooltip: TOOLTIP_LABELS_FIELDS.OPTIONAL
|
|
2763
2808
|
});
|
|
2764
|
-
if (!fieldOrR$.$invalid) tags.push({
|
|
2809
|
+
if (!fieldOrR$.$invalid && fieldOrR$.$dirty) tags.push({
|
|
2765
2810
|
label: "valid",
|
|
2766
2811
|
textColor: COLORS.VALID.text,
|
|
2767
2812
|
backgroundColor: COLORS.VALID.bg,
|
|
@@ -2774,14 +2819,14 @@ function buildNodeTags(fieldOrR$, componentName) {
|
|
|
2774
2819
|
backgroundColor: COLORS.DIRTY.bg,
|
|
2775
2820
|
tooltip: isNestedOrCollection ? TOOLTIP_LABELS_NESTED.DIRTY : TOOLTIP_LABELS_FIELDS.DIRTY
|
|
2776
2821
|
});
|
|
2777
|
-
else if (
|
|
2822
|
+
else if (!isOptional) tags.push({
|
|
2778
2823
|
label: "pristine",
|
|
2779
2824
|
textColor: COLORS.PRISTINE.text,
|
|
2780
2825
|
backgroundColor: COLORS.PRISTINE.bg,
|
|
2781
2826
|
tooltip: TOOLTIP_LABELS_FIELDS.PRISTINE
|
|
2782
2827
|
});
|
|
2783
2828
|
if (componentName) tags.push({
|
|
2784
|
-
label: componentName
|
|
2829
|
+
label: `<${componentName}.vue>`,
|
|
2785
2830
|
textColor: COLORS.COMPONENT.text,
|
|
2786
2831
|
backgroundColor: COLORS.COMPONENT.bg
|
|
2787
2832
|
});
|
|
@@ -2890,7 +2935,7 @@ function buildNestedFieldNodes(fields, instanceId, parentPath) {
|
|
|
2890
2935
|
function buildRootChildrenNodes(r$, instanceId) {
|
|
2891
2936
|
const children = [];
|
|
2892
2937
|
if (isFieldStatus(r$)) return buildRuleNodes(r$, instanceId, "root");
|
|
2893
|
-
if (!
|
|
2938
|
+
if (!("$fields" in r$) || typeof r$.$fields !== "object") return children;
|
|
2894
2939
|
Object.entries(r$.$fields).forEach(([fieldName, fieldStatus]) => {
|
|
2895
2940
|
if (fieldStatus && typeof fieldStatus === "object") {
|
|
2896
2941
|
const fieldTags = buildNodeTags(fieldStatus);
|
|
@@ -2939,6 +2984,8 @@ function filterInspectorTree(nodes, filter) {
|
|
|
2939
2984
|
return filtered;
|
|
2940
2985
|
}
|
|
2941
2986
|
|
|
2987
|
+
var version$1 = "1.12.0";
|
|
2988
|
+
|
|
2942
2989
|
function createDevtools(app) {
|
|
2943
2990
|
setupDevtoolsPlugin({
|
|
2944
2991
|
id: "regle-devtools",
|
|
@@ -2957,26 +3004,40 @@ function createDevtools(app) {
|
|
|
2957
3004
|
icon: "rule",
|
|
2958
3005
|
treeFilterPlaceholder: "Filter state",
|
|
2959
3006
|
stateFilterPlaceholder: "Filter validation status",
|
|
3007
|
+
actions: [{
|
|
3008
|
+
icon: "confirmation_number",
|
|
3009
|
+
tooltip: "Log Regle version",
|
|
3010
|
+
action: () => {
|
|
3011
|
+
console.info("Regle version", version$1);
|
|
3012
|
+
}
|
|
3013
|
+
}],
|
|
2960
3014
|
nodeActions: [
|
|
2961
3015
|
{
|
|
2962
|
-
icon: "
|
|
3016
|
+
icon: "check",
|
|
2963
3017
|
tooltip: "Validate",
|
|
2964
3018
|
action: (nodeId) => {
|
|
2965
|
-
handleValidateAction(nodeId
|
|
3019
|
+
handleValidateAction(nodeId);
|
|
2966
3020
|
}
|
|
2967
3021
|
},
|
|
3022
|
+
{
|
|
3023
|
+
icon: "touch_app",
|
|
3024
|
+
action: (nodeId) => {
|
|
3025
|
+
handleTouchAction(nodeId);
|
|
3026
|
+
},
|
|
3027
|
+
tooltip: "Touch the instance with $touch"
|
|
3028
|
+
},
|
|
2968
3029
|
{
|
|
2969
3030
|
icon: "refresh",
|
|
2970
3031
|
tooltip: "Reset validation state",
|
|
2971
3032
|
action: (nodeId) => {
|
|
2972
|
-
handleResetAction(nodeId
|
|
3033
|
+
handleResetAction(nodeId);
|
|
2973
3034
|
}
|
|
2974
3035
|
},
|
|
2975
3036
|
{
|
|
2976
3037
|
icon: "restore",
|
|
2977
3038
|
tooltip: "Restore to original state",
|
|
2978
3039
|
action: (nodeId) => {
|
|
2979
|
-
handleResetAction(nodeId,
|
|
3040
|
+
handleResetAction(nodeId, true);
|
|
2980
3041
|
}
|
|
2981
3042
|
}
|
|
2982
3043
|
]
|
|
@@ -3043,7 +3104,7 @@ function useRootStorage({ initialState, originalState, options, scopeRules, stat
|
|
|
3043
3104
|
initialState,
|
|
3044
3105
|
originalState,
|
|
3045
3106
|
shortcuts,
|
|
3046
|
-
fieldName:
|
|
3107
|
+
fieldName: void 0,
|
|
3047
3108
|
path: "",
|
|
3048
3109
|
cachePath: "",
|
|
3049
3110
|
schemaErrors,
|
|
@@ -3061,7 +3122,7 @@ function useRootStorage({ initialState, originalState, options, scopeRules, stat
|
|
|
3061
3122
|
initialState,
|
|
3062
3123
|
originalState,
|
|
3063
3124
|
shortcuts,
|
|
3064
|
-
fieldName:
|
|
3125
|
+
fieldName: void 0,
|
|
3065
3126
|
path: "",
|
|
3066
3127
|
cachePath: "",
|
|
3067
3128
|
schemaMode,
|
|
@@ -3212,6 +3273,35 @@ email: { required }
|
|
|
3212
3273
|
*/
|
|
3213
3274
|
const useRules = createUseRulesComposable();
|
|
3214
3275
|
|
|
3276
|
+
/**
|
|
3277
|
+
* Marks a value as static and treats the constructor as a regular raw Field.
|
|
3278
|
+
* @param value - The value to mark as static.
|
|
3279
|
+
* @returns The marked value.
|
|
3280
|
+
* @example
|
|
3281
|
+
* ```ts
|
|
3282
|
+
* const StaticDecimal = markStatic(Decimal);
|
|
3283
|
+
* const StaticBigWrapper = markStatic(BigWrapper);
|
|
3284
|
+
* ```
|
|
3285
|
+
*/
|
|
3286
|
+
function markStatic(value) {
|
|
3287
|
+
if (isConstructor(value)) {
|
|
3288
|
+
const OriginalConstructor = value;
|
|
3289
|
+
const StaticConstructor = class extends OriginalConstructor {
|
|
3290
|
+
constructor(...args) {
|
|
3291
|
+
super(...args);
|
|
3292
|
+
return applyMarkStatic(this);
|
|
3293
|
+
}
|
|
3294
|
+
};
|
|
3295
|
+
Object.defineProperty(StaticConstructor, "name", { value: OriginalConstructor.name });
|
|
3296
|
+
return applyMarkStatic(StaticConstructor);
|
|
3297
|
+
}
|
|
3298
|
+
return applyMarkStatic(value);
|
|
3299
|
+
}
|
|
3300
|
+
function applyMarkStatic(value) {
|
|
3301
|
+
if (!hasOwn(value, REGLE_FLAGS.REGLE_STATIC) && Object.isExtensible(value)) def(value, REGLE_FLAGS.REGLE_STATIC, true);
|
|
3302
|
+
return value;
|
|
3303
|
+
}
|
|
3304
|
+
|
|
3215
3305
|
/**
|
|
3216
3306
|
* Define a global regle configuration, where you can:
|
|
3217
3307
|
* - Customize built-in rules messages
|
|
@@ -3417,7 +3507,7 @@ function mergeRegles(regles, _scoped) {
|
|
|
3417
3507
|
};
|
|
3418
3508
|
}
|
|
3419
3509
|
}
|
|
3420
|
-
|
|
3510
|
+
const fullStatus = reactive({
|
|
3421
3511
|
...!scoped && { $silentValue },
|
|
3422
3512
|
$errors,
|
|
3423
3513
|
$issues,
|
|
@@ -3440,23 +3530,46 @@ function mergeRegles(regles, _scoped) {
|
|
|
3440
3530
|
$extractDirtyFields,
|
|
3441
3531
|
$clearExternalErrors
|
|
3442
3532
|
});
|
|
3533
|
+
watchEffect(() => {
|
|
3534
|
+
if (scoped) return;
|
|
3535
|
+
for (const key of Object.keys(fullStatus).filter((key$1) => !key$1.startsWith("$") && !key$1.startsWith("~"))) delete fullStatus[key];
|
|
3536
|
+
for (const [key, field] of Object.entries($instances.value)) Object.assign(fullStatus, { [key]: field });
|
|
3537
|
+
});
|
|
3538
|
+
return fullStatus;
|
|
3443
3539
|
}
|
|
3444
3540
|
|
|
3445
3541
|
function createUseCollectScope(instances, options) {
|
|
3446
3542
|
function useCollectScope$1(namespace) {
|
|
3447
3543
|
const computedNamespace = computed(() => toValue(namespace));
|
|
3544
|
+
const namespaceInstances = reactive({});
|
|
3448
3545
|
setEmptyNamespace();
|
|
3449
3546
|
const r$ = ref(collectRegles(instances.value));
|
|
3450
3547
|
const regle = reactive({ r$ });
|
|
3451
3548
|
function setEmptyNamespace() {
|
|
3452
|
-
if (computedNamespace.value
|
|
3549
|
+
if (computedNamespace.value) {
|
|
3550
|
+
if (typeof computedNamespace.value === "string" && !instances.value[computedNamespace.value]) instances.value[computedNamespace.value] = {};
|
|
3551
|
+
else if (Array.isArray(computedNamespace.value)) computedNamespace.value.forEach((namespace$1) => {
|
|
3552
|
+
if (!instances.value[namespace$1]) instances.value[namespace$1] = {};
|
|
3553
|
+
});
|
|
3554
|
+
}
|
|
3453
3555
|
}
|
|
3454
3556
|
watch(computedNamespace, setEmptyNamespace);
|
|
3455
3557
|
watch(instances, (newInstances) => {
|
|
3456
3558
|
r$.value = collectRegles(newInstances);
|
|
3457
3559
|
}, { deep: true });
|
|
3458
3560
|
function collectRegles(r$Instances) {
|
|
3459
|
-
if (computedNamespace.value) return mergeRegles(r$Instances[computedNamespace.value] ?? {}, !options.asRecord);
|
|
3561
|
+
if (computedNamespace.value) if (typeof computedNamespace.value === "string") return mergeRegles(r$Instances[computedNamespace.value] ?? {}, !options.asRecord);
|
|
3562
|
+
else {
|
|
3563
|
+
Object.keys(namespaceInstances).forEach((key) => {
|
|
3564
|
+
delete namespaceInstances[key];
|
|
3565
|
+
});
|
|
3566
|
+
computedNamespace.value.forEach((namespace$1) => {
|
|
3567
|
+
Object.entries(r$Instances[namespace$1]).forEach(([key, regle$1]) => {
|
|
3568
|
+
Object.assign(namespaceInstances, { [key]: regle$1 });
|
|
3569
|
+
});
|
|
3570
|
+
});
|
|
3571
|
+
return mergeRegles(namespaceInstances, !options.asRecord);
|
|
3572
|
+
}
|
|
3460
3573
|
else return mergeRegles(r$Instances["~~global"] ?? {}, !options.asRecord);
|
|
3461
3574
|
}
|
|
3462
3575
|
return { r$: regle.r$ };
|
|
@@ -3467,14 +3580,18 @@ function createUseCollectScope(instances, options) {
|
|
|
3467
3580
|
function createUseScopedRegleComposable(instances, customUseRegle) {
|
|
3468
3581
|
const scopedUseRegle = customUseRegle ?? useRegle;
|
|
3469
3582
|
const useScopedRegle$1 = ((state, rulesFactory, options) => {
|
|
3470
|
-
const { namespace, scopeKey
|
|
3583
|
+
const { namespace, scopeKey, id, ...restOptions } = options ?? {};
|
|
3471
3584
|
scopedUseRegle.__config ??= {};
|
|
3585
|
+
const computedScopeId = computed(() => id ?? scopeKey);
|
|
3472
3586
|
const computedNamespace = computed(() => toValue(namespace));
|
|
3473
3587
|
const $id = ref(`${Object.keys(instances.value).length + 1}-${randomId()}`);
|
|
3474
3588
|
const instanceName = computed(() => {
|
|
3475
|
-
return
|
|
3589
|
+
return computedScopeId.value ?? `instance-${$id.value}`;
|
|
3590
|
+
});
|
|
3591
|
+
const { r$ } = scopedUseRegle(state, rulesFactory, {
|
|
3592
|
+
...restOptions,
|
|
3593
|
+
id: computedScopeId.value
|
|
3476
3594
|
});
|
|
3477
|
-
const { r$ } = scopedUseRegle(state, rulesFactory, restOptions);
|
|
3478
3595
|
register();
|
|
3479
3596
|
tryOnScopeDispose(dispose);
|
|
3480
3597
|
watch(computedNamespace, (newName, oldName) => {
|
|
@@ -3624,11 +3741,9 @@ function refineRules(rules, refinement) {
|
|
|
3624
3741
|
return (state) => merge({ ...rules }, refinement(state));
|
|
3625
3742
|
}
|
|
3626
3743
|
|
|
3627
|
-
var version$1 = "1.11.0";
|
|
3628
|
-
|
|
3629
3744
|
const RegleVuePlugin = { install(app) {
|
|
3630
3745
|
app.provide(regleSymbol, version$1);
|
|
3631
3746
|
if (typeof window !== "undefined" && true) createDevtools(app);
|
|
3632
3747
|
} };
|
|
3633
3748
|
|
|
3634
|
-
export { InternalRuleType, RegleVuePlugin, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, useRegle, useRootStorage, useRules, useScopedRegle, variantToRef };
|
|
3749
|
+
export { InternalRuleType, RegleVuePlugin, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, markStatic, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, useRegle, useRootStorage, useRules, useScopedRegle, variantToRef };
|
package/dist/regle-core.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{computed as e,effectScope as t,getCurrentInstance as n,getCurrentScope as r,isRef as i,markRaw as a,nextTick as o,onMounted as s,onScopeDispose as c,reactive as l,ref as u,shallowRef as d,toRef as f,toValue as p,triggerRef as m,unref as h,version as g,watch as _,watchEffect as v}from"vue";function y(e){return e?.constructor?.name==`File`||e?.constructor?.name==`FileList`}function b(e,t=!0){return e==null?!0:e instanceof Date?isNaN(e.getTime()):y(e)?e.size<=0:Array.isArray(e)?t?e.length===0:!1:typeof e==`object`&&e?Object.keys(e).length===0:!String(e).length}const x=Symbol(`regle-rule`);function S(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 C(e,t=0){if(t>20)return e;let n=e,r={}.toString.call(e).slice(8,-1);if(r==`Set`&&(n=new Set([...e].map(e=>C(e,t++)))),r==`Map`&&(n=new Map([...e].map(e=>[C(e[0]),C(e[1])]))),r==`Date`&&(n=new Date(e.getTime())),r==`RegExp`&&(n=RegExp(e.source,S(e))),r==`Array`||r==`Object`)for(let r in n=Array.isArray(e)?[]:{},e)n[r]=C(e[r],t++);return n}function w(e){return e&&(e instanceof Date||e.constructor.name==`File`||e.constructor.name==`FileList`)?!1:typeof e==`object`&&!!e&&!Array.isArray(e)}function T(e,...t){for(var n=[].slice.call(arguments),r,i=n.length;r=n[i-1],i--;)if(!r||typeof r!=`object`&&typeof r!=`function`)throw Error(`expected object, got `+r);for(var a=n[0],o=n.slice(1),s=o.length,i=0;i<s;i++){var c=o[i];for(var l in c)a[l]=c[l]}return a}function E(e){let t={};for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n],i=n.split(`.`),a=t;for(let e=0;e<i.length;e++){let t=i[e],n=e===i.length-1,o=t.match(/^\d+$/)?Number(t):null;if(o!==null){if(Array.isArray(a))if(n)a[o]=r;else{if(typeof a[o]!=`object`||a[o]===null){let t=i[e+1];a[o]=t&&t.match(/^\d+$/)?{$each:[],$self:[]}:{}}a=`$each`in a[o]?a[o].$each:a[o]}}else if(n)if(Array.isArray(a[t])){let e=a[t].slice();a[t]={},a[t].$self=e}else typeof a[t]==`object`&&a[t]!==null&&`$each`in a[t]?a[t].$self=r:a[t]=r;else{let n=i[e+1];if(Array.isArray(a[t])){let e=a[t].slice();a[t]={$each:[]},a[t].$self=e}(typeof a[t]!=`object`||a[t]===null||Array.isArray(a[t])&&!n.match(/^\d+$/))&&(n&&n.match(/^\d+$/)?a[t]={$each:[],$self:[]}:a[t]={}),a=`$each`in a[t]?a[t].$each:a[t]}}}return t}function D(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]`||typeof e==`string`||t===`[object String]`?new Date(e):new Date(NaN)}function O(e,t,{immediate:n=!1,trackDebounceRef:r}={}){let i,a=(...a)=>{r&&(r.value=!0);function o(){r&&(r.value=!1)}return new Promise((r,s)=>{function c(e){r(e),o()}if(clearTimeout(i),i=setTimeout(()=>{if(o(),i=void 0,!n)try{Promise.resolve(e.apply(this,[...a])).then(c).catch(e=>s(e)).finally(o)}catch(e){s(e)}},t),n){o();try{Promise.resolve(e.apply(this,[...a])).then(c).catch(e=>s(e)).finally(o)}catch(e){s(e)}}})};return a.cancel=()=>{clearTimeout(i),i=void 0,r&&(r.value=!1)},a}function k(e,t,n=!1,r=!0){if(e===t)return!0;if(e&&t&&typeof e==`object`&&typeof t==`object`){if(e.constructor!==t.constructor)return!1;var i,a,o;if(Array.isArray(e)&&Array.isArray(t)){if(i=e.length,i!=t.length)return!1;if(r||!r&&n){for(a=i;a--!==0;)if(!k(e[a],t[a],n,!1))return!1}return!0}if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if(o=Object.keys(e),i=o.length,i!==Object.keys(t).length)return!1;for(a=i;a--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[a]))return!1;for(a=i;a--!==0;){var s=o[a];if(w(e)&&w(t)&&s&&(r||!r&&n)&&!k(e[s],t[s],n,!1))return!1}return!0}return e!==e&&t!==t}var A=class extends Error{constructor(e=`Promise was aborted`){super(e),this.name=`AbortError`}};function j(e){let t=new AbortController,{signal:n}=t,r=new Promise((t,r)=>{if(n.aborted){r(new A);return}function i(){r(new A)}n.addEventListener(`abort`,i),e.then(e=>{n.removeEventListener(`abort`,i),n.aborted?r(new A):t(e)}).catch(e=>{n.removeEventListener(`abort`,i),n.aborted?r(new A):r(e)})});function i(e){t.abort(e)}return{promise:r,abort:i,signal:n}}const M={Inline:`__inline`,Async:`__async`};function N(e,t){return e.some(e=>t?e?.[t]:!1)}function P(e,t){return t?e.reduce((e,n)=>{let r=n?.[t]||[];return e.concat(r)},[]):[]}function F(e){try{return e.map(e=>p(e))}catch{return[]}}function I(t){return t.map(t=>t instanceof Function?e(t):i(t)?t:f(()=>t))}function L(e){let t=e.toString().replace(/\/\/.*$/gm,``).replace(/\/\*[\s\S]*?\*\//g,``).match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return t?(t[0]||t[1]||t[2]||t[3]||t[4]||``).split(`,`).map(e=>e.trim()).filter(e=>e.length>0).length:0}function R(e,...t){let{validator:n,type:r,async:i}=e,o=i||r===M.Async||n.constructor.name===`AsyncFunction`;return a({validator(n,...r){return e.validator(n,...F(r.length?r:t))},message(n){return typeof e.message==`function`?e.message({...n,$params:F(n?.$params?.length?n.$params:t)}):e.message},active(n){return typeof e.active==`function`?e.active({...n,$params:F(n?.$params?.length?n.$params:t)}):e.active??!0},tooltip(n){return typeof e.tooltip==`function`?e.tooltip({...n,$params:F(n?.$params?.length?n.$params:t)}):e.tooltip??[]},exec(n){let r=e.validator(n,...F(t)),i;return r instanceof Promise?r.then(e=>(i=e,typeof i==`object`&&`$valid`in i?i.$valid:typeof i==`boolean`?i:!1)):(i=r,typeof i==`object`&&`$valid`in i?i.$valid:typeof i==`boolean`?i:!1)},type:r,_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:o,_params:I(t),_brand:x})}function z(e){if(typeof e.validator==`function`){let t=[],n=e.async??e.validator.constructor.name===`AsyncFunction`,r=R({...e,async:n},...t);if(L(e.validator)>1){let t=function(...t){return R(e,...t)};return t.validator=r.validator,t.message=r.message,t.active=r.active,t.tooltip=r.tooltip,t.type=r.type,t.exec=r.exec,t._validator=r.validator,t._message=r.message,t._active=r.active,t._tooltip=r.tooltip,t._type=e.type,t._message_pacthed=!1,t._tooltip_pacthed=!1,t._async=n,t}else return r}throw Error(`[createRule] validator must be a function`)}function B(e){return w(e.value)}function V(e,n,r){let i=t(),a;return a=e instanceof Function?i.run(()=>e(n,r??0)):e,{scope:i,unwrapped:a}}const H={LessThan:-1,EqualTo:0,GreaterThan:1};function U(e,t){let n=String(e).split(`.`),r=String(t).split(`.`);for(let e=0;e<Math.min(n.length,r.length);e++){let t=Number(n[e]),i=Number(r[e]);if(t>i)return H.GreaterThan;if(i>t)return H.LessThan;if(!isNaN(t)&&isNaN(i))return H.GreaterThan;if(isNaN(t)&&!isNaN(i))return H.LessThan}return H.EqualTo}const W=U(g,`3.5.0`)!==-1;function G(){return Math.floor(Math.random()*Date.now()).toString()}function K(){return typeof window>`u`?G():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function q(e){return r()?(c(e),!0):!1}function J(e){let n=!1,r,i=t(!0);return((...t)=>(n||=(r=i.run(()=>e(...t)),!0),r))}function Y(){let e=d(new Map),t=d(new Map),n=d(new Map),i=d(new Map),a=d(new Map),o=d(new Map);function s(e){let n=t.value.get(e);if(n)return n;{let n=u({});return t.value.set(e,n),n}}function l(e){let t=n.value.get(e);if(t)return t;{let t=u([]);return n.value.set(e,t),t}}function f(e,t,n){o.value.set(`${e}-${t}`,n)}function p(e,t){return o.value.get(`${e}-${t}`)}function m(e,t){e&&t!=null&&o.value.delete(`${e}-${t}`)}function h(e,t){i.value.set(e,t)}function g(e){return i.value.get(e)??!1}function _(t,n){e.value.set(t,n)}function v(t,n){let r=e.value.get(t);if(r)return y(n,r)?{valid:!0}:{valid:!1}}function y(e,t){let n=Object.keys(t),r=Object.keys(e);return r.length!==n.length||!r.every(e=>n.includes(e))?!1:r.every(n=>{let r=e[n],i=t[n];return!i||!r||typeof r==`function`||typeof i==`function`||typeof r==`number`||typeof r==`boolean`||typeof r==`string`?!1:r._params?r._params?.every((e,t)=>{if(typeof i==`number`||typeof i==`boolean`||typeof i==`string`)return!0;{let e=F(i._params),n=F(r._params);return e?.[t]===n?.[t]}}):!0})}function b(e){let t=a.value.get(e);if(t)return t;{let t=u(!1),n=u(!0),r=u({}),i=u(!1);return a.value.set(e,{$pending:t,$valid:n,$metadata:r,$validating:i}),{$pending:t,$valid:n,$metadata:r,$validating:i}}}return r()&&c(()=>{e.value.clear(),t.value.clear(),n.value.clear(),i.value.clear(),a.value.clear(),o.value.clear()}),{addRuleDeclEntry:_,setDirtyEntry:h,checkRuleDeclEntry:v,getDirtyState:g,trySetRuleStatusRef:b,getFieldsEntry:s,getCollectionsEntry:l,getArrayStatus:p,addArrayStatus:f,deleteArrayStatus:m,arrayStatusStorage:o}}function X(e,t){return B(e)||w(t.value)&&!b(t.value)&&!Object.entries(t.value).some(([e,t])=>Q(t)||typeof t==`function`)}function ee(e,t,n=!1){return!!e.value&&w(e.value)&&`$each`in e.value||n&&Array.isArray(t.value)&&t.value.some(w)||Array.isArray(t.value)&&t.value.some(w)}function Z(e){return!!e.value&&(w(e.value)||B(e.value))}function Q(e){return w(e)&&`_validator`in e}function $(e){return typeof e.value==`function`?`_validator`in e.value:!0}function te(e){return w(e)&&`$fields`in e}function ne(e){return!!e&&`$rules`in e}function re({field:e,silent:t=!1}){let n=Object.entries(e.$rules??{}).map(([n,r])=>{let i=``;if(t&&!r.$valid)i=r.$message;else if(!r.$valid&&e.$error&&!r.$validating)i=r.$message;else return null;return{$message:i,$property:e.fieldName,$rule:n,$type:r.$type,...typeof r.$metadata==`object`?r.$metadata:{}}}).filter(e=>!!e).reduce((e,t)=>(typeof t.$message==`string`?e.push(t):e.push(...t.$message.map(e=>({...t,$message:e}))),e),[]),r=e.$error&&e.$externalErrors?e.$externalErrors.map(t=>({$message:t,$property:e.fieldName,$rule:`external`,$type:void 0})):[],i=[];return e.$schemaErrors&&e.$error&&(i=!Array.isArray(e.$schemaErrors)&&`$self`in e.$schemaErrors?e.$schemaErrors.$self??[]:e.$schemaErrors??[]),[...n,...r,...i]}function ie({field:e}){let t=[];for(let n of Object.values(e.$rules??{})){let e=n.$tooltip;e&&(typeof e==`string`?t.push(e):t.push(...e))}return t}function ae(e){return w(e)&&`$each`in e}function oe(e,t){let{includePath:n=!1}=t??{};if(Array.isArray(e)&&e.every(e=>!w(e)))return e;if(ae(e)){let t=n?e.$self?.map(e=>({message:e,path:[]}))??[]:e.$self??[],r=e.$each?.map(e=>se(e,n))??[];return t?.concat(r.flat())}else return Object.entries(e).map(([e,t])=>se(t,n,[e])).flat()}function se(e,t=!1,n){let r=t&&!n?[]:n;if(Array.isArray(e)&&e.every(e=>!w(e)))return t?e.map(e=>({message:e,path:r??[]})):e;if(ae(e)){let n=r?.length?e.$self?.map(e=>({message:e,path:r??[]}))??[]:e.$self??[],i=e.$each?.map((e,n)=>se(e,t,r?.concat(n)))??[];return n?.concat(i.flat())}else return Object.entries(e).map(([e,n])=>se(n,t,r?.concat(e))).flat()}function ce({customMessages:n,rule:r,ruleKey:i,state:a,path:o,cachePath:s,storage:c,modifiers:d}){let f=t(),p={},m,h=e(()=>Q(r.value)&&r.value._async),g=u(!1),{$pending:v,$valid:y,$metadata:x,$validating:S}=c.trySetRuleStatusRef(`${s}.${i}`);function C(){f=t(),p=f.run(()=>{let t=u(!1),s=u(!1),c=u(!0),l=u(!1),d=u(!1),f=e(()=>({$value:a.value,$error:s.value,$dirty:t.value,$pending:l.value,$correct:d.value,$invalid:c.value,$rule:{$valid:y.value,$invalid:!y.value,$pending:v.value},$params:C.value,...x.value})),p=e(()=>{try{return $(r)?typeof r.value.active==`function`?r.value.active(f.value):!!r.value.active:!0}catch(e){return console.error(`Error in "active" function for "${o}.${i}" rule`,{cause:e}),!0}});function m(e){try{let t=``,a=n?n[i]?.[e]:void 0;if(a&&(t=typeof a==`function`?a(f.value):a),$(r)){let n=`_${e}_patched`;a&&!r.value[n]||(t=typeof r.value[e]==`function`?r.value[e](f.value):r.value[e]??``)}return t}catch(t){return console.error(`Error in "${e}" function for "${o}.${i}" rule`,{cause:t}),``}}let h=e(()=>{let e=m(`message`);return b(e)&&(e=`This field is not valid`),e}),g=e(()=>m(`tooltip`)),_=e(()=>$(r)&&r.value.type?r.value.type:i),S=e(()=>$(r)?r.value.validator:r.value),C=e(()=>typeof r.value==`function`?[]:F(r.value._params??[]));return{$active:p,$message:h,$type:_,$validator:S,$params:C,$path:e(()=>`${o}.${_.value}`),$tooltip:g,$fieldCorrect:d,$fieldError:s,$fieldDirty:t,$fieldPending:l,$fieldInvalid:c}}),m=_(p?.$params,()=>{(!d.$silent.value||d.$rewardEarly.value&&p.$fieldError.value)&&E()})}C();function w(){y.value=!0,p.$fieldDirty.value&&(v.value=!0)}async function T(){let e=!1;try{let t=p.$validator.value;if(typeof t!=`function`)return console.error(`${o}: Incorrect rule format, it needs to be either a function or created with "createRule".`),!1;let n=t(a.value,...p.$params.value),r=a.value;w();let i;if(i=n instanceof Promise?await n:n,a.value!==r)return!0;if(typeof i==`boolean`)e=i;else{let{$valid:t,...n}=i;e=t,x.value=n}}catch{e=!1}finally{v.value=!1}return e}async function E(){try{S.value=!0;let e=!1;if(g.value=!0,Q(r.value)&&r.value._async)e=await T();else{let t=p.$validator.value,n=t(a.value,...p.$params.value);if(n 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(n!=null)if(typeof n==`boolean`)e=n;else{let{$valid:t,...r}=n;e=t,x.value=r}}return y.value=e,e}catch{return!1}finally{S.value=!1,g.value=!1}}function D(){y.value=!0,x.value={},v.value=!1,S.value=!1,C()}function O(){m(),f.stop(),f=t()}return l({...p,$pending:v,$valid:y,$metadata:x,$haveAsync:h,$maybePending:g,$validating:S,$parse:E,$unwatch:O,$watch:C,$reset:D})}function le(e){return{"~standard":{version:1,vendor:`regle`,validate:async t=>{let{valid:n,data:r,errors:i}=await e(t);return n?{value:r,issues:[]}:{issues:oe(i,{includePath:!0})}}}}}function ue({state:n,rulesDef:r,customMessages:i,path:a,cachePath:o,fieldName:s,storage:c,options:d,externalErrors:p,schemaErrors:m,schemaMode:g,onUnwatch:y,$isArray:x,initialState:S,originalState:T,shortcuts:E,onValidate:A}){let M=t(),N,P=[],F,I,L,R,z=()=>{},B,V=u(!1);function H(){let e=r.value,t=c.checkRuleDeclEntry(o,e),s={};for(let t in e)t.startsWith(`$`)&&(s[t]=e[t]);X.value=s,K();let l=r.value,u=[];for(let e in l){if(e.startsWith(`$`)||e.startsWith(`~`))continue;let t=l[e];if(!t)continue;let r=f(()=>t);u.push([e,ce({modifiers:{$silent:N.$silent,$rewardEarly:N.$rewardEarly},customMessages:i,rule:r,ruleKey:e,state:n,path:a,cachePath:o,storage:c,$debounce:X.value.$debounce})])}Y.value=Object.fromEntries(u),N.processShortcuts(),U(),t?.valid!=null&&(N.$dirty.value=c.getDirtyState(o),(N.$dirty.value&&!N.$silent.value||N.$rewardEarly.value&&N.$error.value)&&z()),c.addRuleDeclEntry(o,e)}function U(){z=N.$debounce.value>0?O(J,N.$debounce.value,{trackDebounceRef:V}):J}function G(){if(Y.value)for(let e of Object.values(Y.value))e.$unwatch();I(),R?.(),N.$dirty.value&&c.setDirtyEntry(o,N.$dirty.value),F?.(),M.stop(),M=t();for(let e of P)e.stop();P=[],y?.(),L?.()}function K(){if(Y.value)for(let e of Object.values(Y.value))e.$watch();N=M.run(()=>{let i=u(!1),a=u(!1),o=e(()=>i.value),c=e(()=>X.value.$debounce==null?N.$haveAnyAsyncRule.value?200:0:X.value.$debounce),f=e(()=>X.value.$deepCompare==null?!1:X.value.$deepCompare),_=e(()=>X.value.$lazy==null?h(d.lazy)==null?!1:h(d.lazy):X.value.$lazy),y=e(()=>X.value.$rewardEarly==null?h(d.rewardEarly)==null?!1:h(d.rewardEarly):X.value.$rewardEarly),x=e(()=>X.value.$clearExternalErrorsOnChange==null?h(d.clearExternalErrorsOnChange)==null?!C.value:h(d.clearExternalErrorsOnChange):X.value.$clearExternalErrorsOnChange),C=e(()=>y.value?!0:X.value.$silent==null?h(d.silent)==null?!1:h(d.silent):X.value.$silent),w=e(()=>X.value.$autoDirty==null?h(d.autoDirty)==null?!0:h(d.autoDirty):X.value.$autoDirty),T=e(()=>{for(let e of Object.values(Y.value))if(e.$validating)return!0;return!1}),O=e({get:()=>n.value,set(e){F(),n.value=e,q()}}),A=e(()=>V.value?W.value&&i.value:W.value&&!U.value&&i.value),j=e(()=>re({field:{$rules:Y.value,$error:A.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:s}})),M=e(()=>re({field:{$rules:Y.value,$error:A.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:s},silent:!0})),I=e(()=>j.value.map(e=>e.$message)),L=e(()=>M.value.map(e=>e.$message)),R=e(()=>i.value?S.value instanceof Date&&n.value instanceof Date?D(S.value).getDate()!==D(n.value).getDate():S.value==null?!!n.value:Array.isArray(n.value)&&Array.isArray(S.value)?!k(n.value,S.value,X.value.$deepCompare):S.value!==n.value:!1),z=e(()=>R.value),B=e(()=>ie({field:{$rules:Y.value}})),H=e(()=>(C.value||o.value)&&!(W.value||U.value)),U=e(()=>a.value||!y.value?Object.entries(Y.value).some(([e,t])=>t.$pending):!1),W=e(()=>m?.value&&!Array.isArray(m?.value)&&`$self`in m.value?m?.value.$self?.length>0:p?.value?.length||m?.value?.length?!0:K.value?!1:Object.values(Y.value).some(e=>!e.$valid||e.$maybePending)),G=e(()=>s),K=e(()=>!g&&!Object.keys(r.value).some(e=>!e.startsWith(`$`))),J=e(()=>{if(p?.value?.length||K.value||V.value)return!1;if(i.value&&!b(n.value)&&!T.value&&!U.value){if(g)return!m?.value?.length;{let e=Object.values(Y.value);for(let t of e)if(t.$active&&!t.$valid)return!1;return e.some(e=>e.$active)}}return!1}),ee=e(()=>Object.values(Y.value).some(e=>e.$haveAsync)),Z=e(()=>({$debounce:c.value,$lazy:_.value,$rewardEarly:y.value,$autoDirty:w.value,$silent:C.value,$clearExternalErrorsOnChange:x.value}));function Q(){E?.fields&&Object.entries(E.fields).forEach(([e,r])=>{let a=t();$[e]=a.run(()=>{let e=u();return v(()=>{e.value=r(l({$dirty:i,$externalErrors:p?.value??[],$value:n,$silentValue:O,$rules:Y,$error:A,$pending:U,$invalid:W,$correct:J,$errors:I,$ready:H,$silentErrors:L,$anyDirty:o,$tooltips:B,$name:G,$inactive:K,$edited:R,$anyEdited:z}))}),e}),P.push(a)})}let $={};return{$error:A,$pending:U,$invalid:W,$correct:J,$debounce:c,$deepCompare:f,$lazy:_,$ready:H,$issues:j,$silentIssues:M,$errors:I,$silentErrors:L,$rewardEarly:y,$autoDirty:w,$silent:C,$clearExternalErrorsOnChange:x,$anyDirty:o,$edited:R,$anyEdited:z,$name:G,$haveAnyAsyncRule:ee,$shortcuts:$,$validating:T,$tooltips:B,$dirty:i,processShortcuts:Q,$silentValue:O,$inactive:K,$modifiers:Z}}),q(),I=_(N.$dirty,e=>{c.setDirtyEntry(o,e),Object.values(Y.value).forEach(t=>{t.$fieldDirty=e})}),R=_([N.$error,N.$correct,N.$invalid,N.$pending],()=>{Object.values(Y.value).forEach(e=>{e.$fieldError=N.$error.value,e.$fieldInvalid=N.$invalid.value,e.$fieldPending=N.$pending.value,e.$fieldCorrect=N.$correct.value})}),L=_(N.$haveAnyAsyncRule,U)}function q(){F=_(n,()=>{N.$autoDirty.value&&!N.$silent.value&&(N.$dirty.value||(N.$dirty.value=!0)),r.value instanceof Function&&H(),(!N.$silent.value||N.$rewardEarly.value&&N.$error.value)&&z(),N.$clearExternalErrorsOnChange.value&&oe()},{deep:x?!0:W?1:!0})}async function J(){try{let{promise:e}=Q(Promise.allSettled(Object.values(Y.value).map(e=>e.$parse())));await e}catch{}}let Y=u({}),X=u({});H();function ee(e,t){if(Z(),oe(),N.$dirty.value=!1,c.setDirtyEntry(o,!1),!t)if(e?.toOriginalState)n.value=C(T),S.value=C(T);else if(e?.toInitialState)n.value=C(S.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,S.value=C(t),n.value=C(t)}else S.value=w(n.value)?C(n.value):Array.isArray(n.value)?[...n.value]:n.value;if(e?.clearExternalErrors&&oe(),!t&&!e?.keepValidationState)for(let e of Object.values(Y.value))e.$reset();if(!N.$lazy.value&&!N.$silent.value&&!t)for(let e of Object.values(Y.value))e.$parse()}function Z(){`cancel`in z&&z.cancel()}function Q(e){return B&&B.abort(),B=j(e),B}function $(){Z(),B&&B.abort()}function te(e=!0,t=!1){N.$dirty.value||(N.$dirty.value=!0),t&&e?(!N.$silent.value||N.$rewardEarly.value&&N.$error.value)&&(Z(),z()):e&&(Z(),z())}async function ne(e){try{if(e&&(n.value=e),g)return A?(te(!1),A()):{valid:!1,data:n.value,errors:N.$errors.value,issues:N.$issues.value};let t=n.value;if(!N.$dirty.value)N.$dirty.value=!0;else if(!N.$silent.value&&N.$dirty.value&&!N.$pending.value&&!V.value&&!N.$haveAnyAsyncRule.value)return{valid:!N.$error.value,data:t,errors:N.$errors.value,issues:N.$issues.value};if(g)return{valid:!m?.value?.length,data:t,errors:N.$errors.value,issues:N.$issues.value};if(b(Y.value))return{valid:!0,data:t,errors:N.$errors.value,issues:N.$issues.value};$();let{promise:r}=Q(Promise.allSettled(Object.values(Y.value).map(e=>e.$parse())));return{valid:(await r).every(e=>e.status===`fulfilled`&&e.value===!0),data:t,errors:N.$errors.value,issues:N.$issues.value}}catch{return{valid:!1,data:n.value,errors:N.$errors.value,issues:N.$issues.value}}}function ae(e=!0){return N.$dirty.value?n.value:e?{_null:!0}:null}function oe(){p?.value?.length&&(p.value=[])}!N.$lazy.value&&!N.$dirty.value&&!N.$silent.value&&J();let{$shortcuts:se,$validating:ue,$autoDirty:de,$rewardEarly:fe,$clearExternalErrorsOnChange:pe,$haveAnyAsyncRule:me,$debounce:he,$lazy:ge,..._e}=N;return l({..._e,$externalErrors:p,$value:n,$initialValue:S,$originalValue:T,$rules:Y,...se,$path:a,$isDebouncing:V,$reset:ee,$touch:te,$validate:ne,$unwatch:G,$watch:K,$extractDirtyFields:ae,$clearExternalErrors:oe,$abort:$,"~modifiers":N.$modifiers,...le(ne)})}function de({$id:t,path:n,cachePath:r,index:i,options:a,storage:o,stateValue:s,customMessages:c,rules:l,externalErrors:u,schemaErrors:d,initialState:p,originalState:m,shortcuts:h,fieldName:g,schemaMode:_}){let v=s.value?.$id??l.$key??K(),y=`${r}.${String(v)}`,b=`${n}.${i}`;typeof s.value==`object`&&s.value!=null&&(s.value.$id||Object.defineProperties(s.value,{$id:{value:v,enumerable:!1,configurable:!1,writable:!1}}));let x=f(u?.value??[],i),S=e(()=>d?.value?.[i]),C=me({index:i,state:s,rulesDef:f(()=>l),customMessages:c,path:b,cachePath:y,storage:o,options:a,externalErrors:x,schemaErrors:S,initialState:p,originalState:m,shortcuts:h,fieldName:g,schemaMode:_});return C&&(C.$id=s.value?.$id??String(v),o.addArrayStatus(t,C.$id,C)),C}function fe({state:n,rulesDef:r,customMessages:i,path:a,cachePath:o,storage:s,options:c,externalErrors:d,schemaErrors:p,schemaMode:m,initialState:g,originalState:y,shortcuts:x,fieldName:S}){let w=t(),T,E=t(),D,O=[];if(!Array.isArray(n.value)&&!r.value.$each)return;let k=u(),A=u(n.value),j=u({}),M,N,P=u({}),F=s.getCollectionsEntry(a);D=E.run(()=>({isPrimitiveArray:e(()=>n.value?.length?Array.isArray(n.value)&&n.value.length?n.value.every(e=>typeof e!=`object`):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(e=>Q(e)||typeof e==`function`):!1:!1)})),I(),B();function I(){j.value=Object.fromEntries(Object.entries(r.value).filter(([e])=>e.startsWith(`$`))),typeof n.value==`object`&&(n.value!=null&&!n.value?.$id&&n.value!==null?(k.value=K(),Object.defineProperties(n.value,{$id:{value:k.value,enumerable:!1,configurable:!1,writable:!1}})):n.value?.$id&&(k.value=n.value.$id)),A.value=P.value.$value,Array.isArray(n.value)&&!D.isPrimitiveArray.value?F.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let{scope:l,unwrapped:u}=V(r.value.$each,f(()=>t),n);l&&O.push(l);let h=f(g.value??[],n),_=f(d?.value??{},`$each`),v=e(()=>p?.value?.$each);return de({$id:k.value,path:a,cachePath:o,customMessages:i,rules:u??{},stateValue:f(()=>t),index:n,options:c,storage:s,externalErrors:_,schemaErrors:v,initialState:h,originalState:y,shortcuts:x,fieldName:S,schemaMode:m})||null}).filter(e=>!!e):F.value=[],P.value=ue({state:n,rulesDef:r,customMessages:i,path:a,cachePath:a,storage:s,options:c,externalErrors:f(d?.value??{},`$self`),schemaErrors:e(()=>p?.value?.$self),$isArray:!0,initialState:g,originalState:y,shortcuts:x,fieldName:S,schemaMode:m})}function L(){if(Array.isArray(n.value)&&!D.isPrimitiveArray.value){let t=C(F.value);F.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let o=f(()=>t);if(t.$id&&F.value.find(e=>e.$id===t.$id)){let e=s.getArrayStatus(k.value,t.$id);return e?(e.$value=o,e):null}else{let{scope:t,unwrapped:l}=V(r.value.$each,o,n);t&&O.push(t);let u=f(d?.value??{},`$each`),h=e(()=>p?.value?.$each??[]);return de({$id:k.value,path:a,cachePath:a,customMessages:i,rules:l??{},stateValue:o,index:n,options:c,storage:s,externalErrors:u,schemaErrors:h,initialState:f(g.value??[],n),originalState:y,shortcuts:x,fieldName:S,schemaMode:m})||null}}).filter(e=>!!e),t.filter(e=>!n.value?.find(t=>e.$id===t.$id)).forEach((e,t)=>{s.deleteArrayStatus(k.value,t.toString())})}else F.value=[]}function R(){M=_(n,()=>{N?.(),n.value!=null&&!Object.hasOwn(n.value,`$id`)&&!k.value?I():L(),z()},{deep:W?1:!0,flush:`pre`}),z()}function z(){N=_(n,()=>{T.$autoDirty.value&&!T.$silent.value&&P.value.$touch(!1,!0)},{flush:`post`})}function B(){R(),w=t(),T=w.run(()=>{let r=e({get:()=>n.value,set(e){M?.(),N?.(),n.value=e,R()}}),i=e(()=>P.value.$dirty&&(!F.value.length||F.value.every(e=>e.$dirty))),o=e(()=>P.value.$anyDirty||F.value.some(e=>e.$anyDirty)),s=e(()=>P.value.$invalid||F.value.some(e=>e.$invalid)),d=e(()=>(b(P.value.$rules)?!0:P.value.$correct)&&(!F.value.length||F.value.every(e=>e.$correct||e.$anyDirty&&!e.$invalid))),f=e(()=>P.value.$error||F.value.some(e=>e.$error)),p=e(()=>!(s.value||m.value)),m=e(()=>P.value.$pending||F.value.some(e=>e.$pending)),_=e(()=>!!F.value.length&&F.value.every(e=>e.$edited)),C=e(()=>P.value.$anyEdited||F.value.some(e=>e.$anyEdited)),w=e(()=>({$self:P.value.$issues,$each:F.value.map(e=>e.$issues)})),T=e(()=>({$self:P.value.$errors,$each:F.value.map(e=>e.$errors)})),E=e(()=>({$self:P.value.$silentErrors,$each:F.value.map(e=>e.$silentErrors)})),D=e(()=>j.value.$rewardEarly==null?h(c.rewardEarly)==null?!1:h(c.rewardEarly):j.value.$rewardEarly),k=e(()=>D.value?!0:j.value.$silent==null?h(c.silent)==null?!1:h(c.silent):j.value.$silent),A=e(()=>j.value.$autoDirty==null?h(c.autoDirty)==null?!0:h(c.autoDirty):j.value.$autoDirty),I=e(()=>S),L=e(()=>({$deepCompare:j.value.$deepCompare??!1,$lazy:j.value.$lazy??!1,$rewardEarly:D.value,$autoDirty:A.value,$silent:k.value,$clearExternalErrorsOnChange:j.value.$clearExternalErrorsOnChange??!1}));function z(){x?.collections&&Object.entries(x?.collections).forEach(([e,c])=>{let h=t();B[e]=h.run(()=>{let e=u();return v(()=>{e.value=c(l({$dirty:i,$error:f,$path:a,$silentValue:r,$pending:m,$invalid:s,$correct:d,$errors:T,$silentErrors:E,$initialValue:g,$originalValue:y,$ready:p,$anyDirty:o,$name:I,$each:F,$self:P,$value:n,$edited:_,$anyEdited:C,$issues:w}))}),e}),O.push(h)})}let B={};return z(),{$dirty:i,$anyDirty:o,$invalid:s,$correct:d,$error:f,$pending:m,$errors:T,$silentErrors:E,$ready:p,$name:I,$shortcuts:B,$silentValue:r,$edited:_,$anyEdited:C,$rewardEarly:D,$silent:k,$autoDirty:A,$issues:w,$modifiers:L}}),D.isPrimitiveArray.value&&r.value.$each&&console.warn(`${a} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`)}function H(){M?.(),P.value&&P.value.$unwatch(),F.value&&F.value.forEach(e=>{`$dirty`in e&&e.$unwatch()}),w.stop(),w=t(),E.stop(),E=t(!0),O.forEach(e=>e.stop()),O=[]}function U(e=!0,t=!1){P.value.$touch(e,t),F.value.forEach(n=>{n.$touch(e,t)})}function G(e,t){if(H(),!t)if(e?.toOriginalState)n.value=C(y),g.value=C(y);else if(e?.toInitialState)n.value=C(g.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,g.value=C(t),n.value=C(t)}else g.value=C(n.value);e?.clearExternalErrors&&Y(),e?.keepValidationState||(P.value.$reset(e,t),F.value.forEach(t=>{t.$reset(e,!0)})),t||I()}function q(){P.value.$abort(),F.value.forEach(e=>{e.$abort()})}async function J(e){e&&(n.value=e);let t=n.value;try{return q(),{valid:(await Promise.allSettled([P.value.$validate(e),...F.value.map(e=>e.$validate())])).every(e=>e.status===`fulfilled`?e.value.valid===!0:!1),data:t,errors:T.$errors.value,issues:T.$issues.value}}catch{return{valid:!1,data:t,errors:T.$errors.value,issues:T.$issues.value}}}function Y(){P.value.$clearExternalErrors(),F.value.forEach(e=>{e.$clearExternalErrors()})}function X(e=!0){let t=F.value.map(t=>{if(te(t))return t.$extractDirtyFields(e)});return e&&t.every(e=>b(e))&&(t=[]),t}let{$shortcuts:ee,...Z}=T;return l({$self:P,...Z,...ee,$path:a,$each:F,$value:n,$initialValue:g,$originalValue:y,$validate:J,$unwatch:H,$watch:B,$touch:U,$reset:G,$abort:q,$extractDirtyFields:X,$clearExternalErrors:Y,"~modifiers":T.$modifiers,...le(J)})}function pe({rulesDef:n,state:r,path:i=``,cachePath:a,rootRules:o,externalErrors:s,schemaErrors:c,rootSchemaErrors:d,validationGroups:p,initialState:m,originalState:g,fieldName:y,...x}){let S=t(),T,E=[],D=null,O=null,k=null,A=null;async function j(t=!0){let o=Object.entries(n.value),l=Object.fromEntries(o.reduce((t,[n,o])=>{if(!o)return t;let l=f(r.value??{},n),u=f(()=>o),d=f(s?.value??{},n),p=e(()=>c?.value?.[n]),h=f(m?.value??{},n);return t.push([n,me({state:l,rulesDef:u,path:i?`${i}.${n}`:n,cachePath:a?`${a}.${n}`:n,externalErrors:d,schemaErrors:p,initialState:h,originalState:g?.[n],fieldName:n,...x})]),t},[])),u=Object.fromEntries(Object.entries(h(s)??{}).filter(([e,t])=>!(e in n.value)&&!!t).map(([t])=>{let n=f(r.value??{},t),o=f(s?.value??{},t),l=e(()=>c?.value?.[t]),u=f(m?.value??{},t),d=i?`${i}.${t}`:t,p=a?`${a}.${t}`:t;return[t,me({state:n,rulesDef:e(()=>({})),path:d,cachePath:p,externalErrors:o,schemaErrors:l,initialState:u,originalState:g?.[t],fieldName:t,...x})]})),d=Object.fromEntries(Object.entries(h(c)??{}).map(([t])=>{let n=i?`${i}.${t}`:t,o=a?`${a}.${t}`:t,l=f(r.value??{},t),u=f(s?.value??{},t),d=e(()=>c?.value?.[t]),p=f(m?.value??{},t);return[t,me({state:l,rulesDef:e(()=>({})),path:n,cachePath:o,externalErrors:u,schemaErrors:d,initialState:p,originalState:g?.[t],fieldName:t,...x})]})),p=Object.fromEntries(Object.entries(r.value??{}).filter(([e])=>!(e in n.value)&&!(e in(u??{}))&&!(e in(d??{}))).map(([t])=>{let n=f(r.value??{},t),o=f(s?.value??{},t),l=e(()=>c?.value?.[t]),u=f(m?.value??{},t);return[t,me({state:n,rulesDef:e(()=>({})),path:i?`${i}.${t}`:t,cachePath:a?`${a}.${t}`:t,externalErrors:o,schemaErrors:l,initialState:u,originalState:g?.[t],fieldName:t,...x})]}));M.value={...l,...u,...d,...p},t&&L()}let M=x.storage.getFieldsEntry(a);j();function F(){s&&(k=_(s,()=>{R(),j()},{deep:!0}))}function I(){A=_(r,()=>{R(),j(),T.$autoDirty.value&&!T.$silent.value&&V(!1,!0)},{flush:`post`})}function L(){o&&(D?.(),D=_(o,()=>{R(),j()},{deep:!0,flush:`pre`}),F()),d&&(O?.(),O=_(d,()=>{R(),j()},{deep:!0,flush:`post`})),I(),T=S.run(()=>{let n=e({get:()=>r.value,set(e){R(),r.value=e,j(),T.$autoDirty.value&&!T.$silent.value&&V(!1,!0)}}),a=e({get:()=>r.value,set(e){R(),r.value=e,j()}}),o=e(()=>{let e=M.value,t=Object.keys(e);if(!t.length)return!1;for(let n of t)if(!e[n]?.$dirty)return!1;return!0}),s=e(()=>{let e=M.value;for(let t in e)if(e[t]?.$anyDirty)return!0;return!1}),c=e(()=>{let e=M.value,t=Object.entries(e);if(!t.length)return!1;for(let[e,n]of t)if(n?.$invalid)return!0;return!1}),d=e(()=>{let e=Object.entries(M.value).reduce((e,[t,n])=>((!ne(n)||!n.$inactive)&&e.push([t,n]),e),[]);return e.length?x.schemaMode?e.every(([e,t])=>t.$correct):e.every(([e,t])=>ne(t)?`required`in t.$rules&&t.$rules.required.$active?t.$correct:!t.$invalid&&!t.$pending&&!t.$isDebouncing:t?.$correct):!1}),f=e(()=>{let e=M.value;if(!Object.keys(e).length)return!1;for(let t in e)if(e[t]?.$error)return!0;return!1}),_=e(()=>h(x.options.rewardEarly)==null?!1:h(x.options.rewardEarly)),b=e(()=>h(x.options.silent)==null?!!_.value:h(x.options.silent)),S=e(()=>h(x.options.autoDirty)==null?!0:h(x.options.autoDirty)),C=e(()=>(b.value||s.value)&&!(c.value||D.value)),w=u(!1),D=e(()=>{if(w.value)return!0;let e=M.value;for(let t in e)if(e[t]?.$pending)return!0;return!1}),O=e(()=>{let e={};for(let t in M.value)e[t]=M.value[t]?.$issues;return e}),k=e(()=>{let e={};for(let t in M.value)e[t]=M.value[t]?.$errors;return e}),A=e(()=>{let e={};for(let t in M.value)e[t]=M.value[t]?.$silentErrors;return e}),F=e(()=>{if(!Object.keys(M.value).length)return!1;for(let e in M.value)if(!M.value[e]?.$edited)return!1;return!0}),I=e(()=>{for(let e in M.value)if(M.value[e]?.$anyEdited)return!0;return!1}),L=e(()=>y),z=e(()=>({autoDirty:S.value,lazy:h(x.options.lazy)??!1,rewardEarly:_.value,silent:b.value,clearExternalErrorsOnChange:h(x.options.clearExternalErrorsOnChange)??!1,id:h(x.options.id)}));function B(){x.shortcuts?.nested&&Object.entries(x.shortcuts.nested).forEach(([e,n])=>{let p=t();U[e]=p.run(()=>{let e=u();return v(()=>{e.value=n(l({$dirty:o,$path:i,$value:r,$silentValue:a,$error:f,$originalValue:g,$pending:D,$invalid:c,$correct:d,$ready:C,$anyDirty:s,$name:L,$silentErrors:A,$initialValue:m,$errors:k,$fields:M,$edited:F,$anyEdited:I,$issues:O,"~modifiers":h(x.options)}))}),e}),E.push(p)})}let H=e({get:()=>p?Object.fromEntries(Object.entries(p?.(M.value)??{}).map(([e,t])=>t.length?[e,{...Object.fromEntries([`$invalid`,`$error`,`$pending`,`$dirty`,`$correct`].map(e=>[e,N(t,e)])),...Object.fromEntries([`$errors`,`$silentErrors`].map(e=>[e,P(t,e)]))}]:[])):{},set(){}}),U={};return B(),{$dirty:o,$anyDirty:s,$invalid:c,$correct:d,$error:f,$pending:D,$issues:O,$errors:k,$silentErrors:A,$ready:C,$name:L,$shortcuts:U,$groups:H,$silentValue:a,$edited:F,$anyEdited:I,$localPending:w,$autoDirty:S,$silent:b,$value:n,$modifiers:z}})}function R(){if(D?.(),k?.(),A?.(),O?.(),E=[],T={},M.value)for(let e of Object.values(M.value))e?.$unwatch()}function z(){let e=M.value;for(let t of Object.values(e))t.$clearExternalErrors()}function B(e,t){if(k?.(),R(),!t)if(e?.toOriginalState)r.value=C({...g}),m.value=C({...g});else if(e?.toInitialState)r.value=C({...m.value});else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,m.value=C(t),r.value=C(t)}else m.value=C(r.value);if(!e?.keepValidationState)for(let t of Object.values(M.value))t?.$reset(e,!0);e?.clearExternalErrors&&z(),F(),t||j()}function V(e=!0,t=!1){for(let n of Object.values(M.value))n?.$touch(e,t)}function H(e){return e.filter(([e,t])=>w(t)?!(t&&typeof t==`object`&&`_null`in t)&&!b(t):Array.isArray(t)?t.length:!0)}function U(e=!0){let t=Object.entries(M.value).map(([t,n])=>[t,n.$extractDirtyFields(e)]);return e&&(t=H(t)),Object.fromEntries(t)}function W(){for(let e of Object.values(M.value))e.$abort()}async function G(e){try{if(e&&(r.value=e),x.schemaMode)return x.onValidate?(V(!1),T.$localPending.value=!0,x.onValidate()):{valid:!1,data:r.value,errors:T.$errors.value,issues:T.$issues.value};{let e=r.value;return W(),{valid:(await Promise.allSettled(Object.values(M.value).map(e=>e.$validate()))).every(e=>e.status===`fulfilled`&&e?.value.valid===!0),data:e,errors:T.$errors.value,issues:T.$issues.value}}}catch{return{valid:!1,data:r.value,errors:T.$errors.value,issues:T.$issues.value}}finally{T.$localPending.value=!1}}let{$shortcuts:K,$localPending:q,...J}=T,Y=l({...J,...K,$path:i,$initialValue:m,$originalValue:g,$fields:M,$reset:B,$touch:V,$validate:G,$unwatch:R,$watch:L,$clearExternalErrors:z,$extractDirtyFields:U,$abort:W,...o?{"~modifiers":T.$modifiers}:{},...le(G)});return v(()=>{for(let e of Object.keys(Y).filter(e=>!e.startsWith(`$`)&&!e.startsWith(`~`)))delete Y[e];for(let e of Object.values(M.value))e?.$name&&Object.assign(Y,{[e.$name]:e})}),Y}function me({rulesDef:e,...n}){if(ee(e,n.state,n.schemaMode))return fe({rulesDef:e,...n});if(X(n.state,e)){if(B(n.state))return pe({rulesDef:e,...n});{let r=t().run(()=>{let e=f(n.state.value?n.state:u({}));return _(()=>n.state.value,t=>{e.value=t},{deep:!0}),_(e,e=>{n.state.value=e},{deep:!0}),{fakeState:e}}),{state:i,...a}=n;return pe({rulesDef:e,...a,state:r.fakeState})}}else if(Z(e))return ue({rulesDef:i(e.value)?e.value:e,...n})}const he=Symbol(`regle`);function ge({initialState:e,originalState:t,options:n,scopeRules:i,state:a,customRules:o,shortcuts:s,schemaErrors:d,schemaMode:f=!1,onValidate:p}){let m=Y(),h=u(),g=u(),v,y;function b(){v=_(()=>n.externalErrors?.value,()=>{y?.(),n.externalErrors?.value&&Object.keys(n.externalErrors.value).some(e=>e.includes(`.`))?g.value=E(n.externalErrors.value):g.value=n.externalErrors?.value,x()},{immediate:!0,deep:!0})}function x(){y=_(()=>g.value,()=>{v?.(),n.externalErrors?.value&&(n.externalErrors.value=g.value),b()},{deep:!0})}return b(),X(a,i)?h.value=pe({rootRules:i,rulesDef:i,state:a,customMessages:o?.(),storage:m,options:n,externalErrors:g,validationGroups:n.validationGroups,initialState:e,originalState:t,shortcuts:s,fieldName:`root`,path:``,cachePath:``,schemaErrors:d,rootSchemaErrors:d,schemaMode:f,onValidate:p}):Z(i)&&(h.value=ue({rulesDef:i,state:a,customMessages:o?.(),storage:m,options:n,externalErrors:g,initialState:e,originalState:t,shortcuts:s,fieldName:`root`,path:``,cachePath:``,schemaMode:f,schemaErrors:d,onValidate:p})),r()&&c(()=>{h.value?.$unwatch(),y?.(),v?.()}),l({regle:h})}function _e({state:t,rulesFactory:n,options:r,globalOptions:a,customRules:o,shortcuts:s}){let c=i(n)?n:typeof n==`function`?void 0:e(()=>n),l={...a,...r},f,p=d(c??{});typeof n==`function`&&(f=v(()=>{p.value=n(t),m(p)}));let h=u(w(t.value)?{...C(t.value)}:C(t.value)),g=w(t.value)?{...C(t.value)}:C(t.value);return q(()=>{f?.()}),ge({scopeRules:p,state:t,options:l,initialState:h,originalState:g,customRules:o,shortcuts:s})}function ve(e,t,n){let r={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,silent:t?.silent,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function a(t,a,o){return{r$:_e({state:i(t)?t:u(t),rulesFactory:a,options:o,globalOptions:r,customRules:e,shortcuts:n}).regle}}return a}const ye=ve();function be(){function e(e,t){return t}return e}const xe=be();function Se(e){let t={};if(Object.entries(e).some(([e,t])=>Q(t)||typeof t==`function`))return null;for(let n in e){let r=e[n];r&&w(r)&&`$each`in r&&r.$each&&w(r.$each)?t[n]=[Se(r.$each)]:w(r)&&!b(r)&&!Object.entries(r).some(([e,t])=>Q(t)||typeof t==`function`)?t[n]=Se(r):t[n]=null}return t}function Ce(t,n,r){let a={autoDirty:n?.autoDirty,lazy:n?.lazy,rewardEarly:n?.rewardEarly,silent:n?.silent,clearExternalErrorsOnChange:n?.clearExternalErrorsOnChange};function o(n,o){let s=i(n)?n:typeof n==`function`?void 0:e(()=>n);return _e({state:u(Se(s?.value)),rulesFactory:s,options:o,globalOptions:a,customRules:t,shortcuts:r}).regle}return o}const we=Ce();function Te({rules:e,modifiers:t,shortcuts:n}){let r=ve(e,t,n),i=Ce(e,t,n);return r.__config={rules:e,modifiers:t,shortcuts:n},i.__config={rules:e,modifiers:t,shortcuts:n},{useRegle:r,inferRules:be(),useRules:i}}function Ee(e,{rules:t,modifiers:n,shortcuts:r}){let i=e.__config??{},a=()=>({...i.rules?.(),...t?.()}),o=i.modifiers&&n?T(i.modifiers,n):i.modifiers??n,s=i.shortcuts&&r?T(i.shortcuts,r):i.shortcuts??r,c=ve(a,o,s);return c.__config={rules:a,modifiers:o,shortcuts:s},{useRegle:c,inferRules:be()}}function De(t,n){let r=n??!1,i=e({get:()=>r?Object.values(t).map(e=>e.$value):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$value])),set:e=>{r||typeof e==`object`&&Object.entries(e).forEach(([e,n])=>t[e].$value=n)}}),a=e({get:()=>Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentValue])),set:e=>{typeof e==`object`&&Object.entries(e).forEach(([e,n])=>t[e].$silentValue=n)}}),o=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$dirty)}),s=e(()=>Object.entries(t).some(([e,t])=>t?.$anyDirty)),c=e(()=>Object.entries(t).some(([e,t])=>t?.$invalid)),u=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$correct||t.$anyDirty&&!t.$invalid)}),d=e(()=>Object.entries(t).some(([e,t])=>t?.$error)),f=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$ready)}),p=e(()=>Object.entries(t).some(([e,t])=>t?.$pending)),m=e(()=>r?Object.entries(t).map(([e,t])=>t.$issues):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$issues]))),h=e(()=>r?Object.entries(t).map(([e,t])=>t.$silentIssues):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentIssues]))),g=e(()=>r?Object.entries(t).map(([e,t])=>t.$errors):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$errors]))),_=e(()=>r?Object.entries(t).map(([e,t])=>t.$silentErrors):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentErrors]))),v=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$edited)}),y=e(()=>Object.entries(t).some(([e,t])=>t?.$anyEdited)),b=e(()=>r?Object.values(t):t);function x(e){Object.values(t).forEach(t=>{t.$reset(e)})}function S(){Object.values(t).forEach(e=>{e.$touch()})}function C(e=!0){return Object.values(t).map(t=>t.$extractDirtyFields(e))}function w(){Object.values(t).forEach(e=>{e.$clearExternalErrors()})}async function T(e){try{e&&(i.value=e);let n=i.value;return{valid:(await Promise.allSettled(Object.values(t).map(e=>e.$validate()))).every(e=>e.status===`fulfilled`?e.value.valid===!0:!1),data:n,errors:g.value,issues:m.value}}catch{return{valid:!1,data:i.value,errors:g.value,issues:m.value}}}return l({...!r&&{$silentValue:a},$errors:g,$issues:m,$silentIssues:h,$silentErrors:_,$instances:b,$value:i,$dirty:o,$anyDirty:s,$invalid:c,$correct:u,$error:d,$pending:p,$ready:f,$edited:v,$anyEdited:y,$reset:x,$touch:S,$validate:T,$extractDirtyFields:C,$clearExternalErrors:w})}function Oe(t,n){function r(r){let i=e(()=>p(r));s();let a=u(c(t.value)),o=l({r$:a});function s(){i.value&&!t.value[i.value]&&(t.value[i.value]={})}_(i,s),_(t,e=>{a.value=c(e)},{deep:!0});function c(e){return i.value?De(e[i.value]??{},!n.asRecord):De(e[`~~global`]??{},!n.asRecord)}return{r$:o.r$}}return{useCollectScope:r}}function ke(t,r){let i=r??ye;return{useScopedRegle:((r,a,o)=>{let{namespace:c,scopeKey:l,...d}=o??{};i.__config??={};let f=e(()=>p(c)),m=u(`${Object.keys(t.value).length+1}-${K()}`),h=e(()=>o?.scopeKey??`instance-${m.value}`),{r$:g}=i(r,a,d);y(),q(v),_(f,(e,t)=>{v(t),y()}),n()&&s(()=>{let e=n();typeof window<`u`&&e?.proxy?.$el?.parentElement&&document.documentElement&&!document.documentElement.contains(e?.proxy?.$el?.parentElement)&&v()});function v(e){let n=e??f.value;n?t.value[n]&&delete t.value[n][h.value]:t.value[`~~global`][h.value]&&delete t.value[`~~global`][h.value]}function y(){f.value?(t.value[f.value]||(t.value[f.value]={}),t.value[f.value][h.value]=g):(t.value[`~~global`]||(t.value[`~~global`]={}),t.value[`~~global`][h.value]=g)}return{r$:g,dispose:v,register:y}})}}function Ae(e){let t=(e?.customStore?()=>(e.customStore&&(e.customStore?.value[`~~global`]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value[`~~global`]={}),e.customStore):J(()=>u({"~~global":{}})))(),{useScopedRegle:n}=ke(t,e?.customUseRegle),{useCollectScope:r}=Oe(t,{asRecord:e?.asRecord});return{useScopedRegle:n,useCollectScope:r}}const{useCollectScope:je,useScopedRegle:Me}=Ae();function Ne(t,n,r){let i=e(()=>p(t)[n]);return e(()=>r.find(e=>{if(e[n]&&`literal`in e[n]){let t=e[n].literal;if(Q(t))return h(t._params?.[0])===i.value}})||r.find(e=>w(e[n])&&!Object.keys(e[n]).some(e=>e===`literal`))||{})}function Pe(e,t,n){return!!e&&w(e[t])&&`$value`in e[t]&&e[t]?.$value===n}function Fe(e,t,n,r){let a=i(e)?f(e.value,`$fields`):f(e,`$fields`),s=u();return _(a,async()=>{await o(),Pe(a.value,t,n)?s.value=f(e).value:s.value=void 0},{immediate:!0,flush:`pre`}),s}function Ie(e){return e}function Le(e,t){return n=>T({...e},t(n))}var Re=`1.11.0`;const ze={install(e){e.provide(he,Re)}};export{M as InternalRuleType,ze as RegleVuePlugin,z as createRule,Ae as createScopedUseRegle,Ne as createVariant,Te as defineRegleConfig,Ie as defineRules,Ee as extendRegleConfig,oe as flatErrors,xe as inferRules,De as mergeRegles,Pe as narrowVariant,Le as refineRules,F as unwrapRuleParameters,je as useCollectScope,ye as useRegle,ge as useRootStorage,we as useRules,Me as useScopedRegle,Fe as variantToRef};
|
|
1
|
+
import{computed as e,effectScope as t,getCurrentInstance as n,getCurrentScope as r,isRef as i,markRaw as a,nextTick as o,onMounted as s,onScopeDispose as c,reactive as l,ref as u,shallowRef as d,toRef as f,toValue as p,triggerRef as m,unref as h,version as g,watch as _,watchEffect as v}from"vue";function y(e){return e?.constructor?.name==`File`||e?.constructor?.name==`FileList`}function b(e,t=!0){return e==null?!0:e instanceof Date?isNaN(e.getTime()):y(e)?e.size<=0:Array.isArray(e)?t?e.length===0:!1:typeof e==`object`&&e?Object.keys(e).length===0:!String(e).length}const x=Symbol(`regle-rule`);function S(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 C(e,t=0){if(t>20)return e;let n=e,r={}.toString.call(e).slice(8,-1);if(r==`Set`&&(n=new Set([...e].map(e=>C(e,t++)))),r==`Map`&&(n=new Map([...e].map(e=>[C(e[0]),C(e[1])]))),r==`Date`&&(n=new Date(e.getTime())),r==`RegExp`&&(n=RegExp(e.source,S(e))),r==`Array`||r==`Object`)for(let r in n=Array.isArray(e)?[]:{},e)n[r]=C(e[r],t++);return n}function w(e){return e&&(e instanceof Date||e.constructor.name==`File`||e.constructor.name==`FileList`)?!1:typeof e==`object`&&!!e&&!Array.isArray(e)}function T(e,...t){for(var n=[].slice.call(arguments),r,i=n.length;r=n[i-1],i--;)if(!r||typeof r!=`object`&&typeof r!=`function`)throw Error(`expected object, got `+r);for(var a=n[0],o=n.slice(1),s=o.length,i=0;i<s;i++){var c=o[i];for(var l in c)a[l]=c[l]}return a}function E(e){let t={};for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n],i=n.split(`.`),a=t;for(let e=0;e<i.length;e++){let t=i[e],n=e===i.length-1,o=t.match(/^\d+$/)?Number(t):null;if(o!==null){if(Array.isArray(a))if(n)a[o]=r;else{if(typeof a[o]!=`object`||a[o]===null){let t=i[e+1];a[o]=t&&t.match(/^\d+$/)?{$each:[],$self:[]}:{}}a=`$each`in a[o]?a[o].$each:a[o]}}else if(n)if(Array.isArray(a[t])){let e=a[t].slice();a[t]={},a[t].$self=e}else typeof a[t]==`object`&&a[t]!==null&&`$each`in a[t]?a[t].$self=r:a[t]=r;else{let n=i[e+1];if(Array.isArray(a[t])){let e=a[t].slice();a[t]={$each:[]},a[t].$self=e}(typeof a[t]!=`object`||a[t]===null||Array.isArray(a[t])&&!n.match(/^\d+$/))&&(n&&n.match(/^\d+$/)?a[t]={$each:[],$self:[]}:a[t]={}),a=`$each`in a[t]?a[t].$each:a[t]}}}return t}function D(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function O(e,t,n,r=!1){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})}function k(e){return typeof e==`function`&&!!e.prototype&&`constructor`in e.prototype&&e.prototype.constructor===e}function A(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]`||typeof e==`string`||t===`[object String]`?new Date(e):new Date(NaN)}function j(e,t,{immediate:n=!1,trackDebounceRef:r}={}){let i,a=(...a)=>{r&&(r.value=!0);function o(){r&&(r.value=!1)}return new Promise((r,s)=>{function c(e){r(e),o()}if(clearTimeout(i),i=setTimeout(()=>{if(o(),i=void 0,!n)try{Promise.resolve(e.apply(this,[...a])).then(c).catch(e=>s(e)).finally(o)}catch(e){s(e)}},t),n){o();try{Promise.resolve(e.apply(this,[...a])).then(c).catch(e=>s(e)).finally(o)}catch(e){s(e)}}})};return a.cancel=()=>{clearTimeout(i),i=void 0,r&&(r.value=!1)},a}function M(e,t,n=!1,r=!0){if(e===t)return!0;if(e&&t&&typeof e==`object`&&typeof t==`object`){if(e.constructor!==t.constructor)return!1;var i,a,o;if(Array.isArray(e)&&Array.isArray(t)){if(i=e.length,i!=t.length)return!1;if(r||!r&&n){for(a=i;a--!==0;)if(!M(e[a],t[a],n,!1))return!1}return!0}if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if(o=Object.keys(e),i=o.length,i!==Object.keys(t).length)return!1;for(a=i;a--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[a]))return!1;for(a=i;a--!==0;){var s=o[a];if(w(e)&&w(t)&&s&&(r||!r&&n)&&!M(e[s],t[s],n,!1))return!1}return!0}return e!==e&&t!==t}var N=class extends Error{constructor(e=`Promise was aborted`){super(e),this.name=`AbortError`}};function P(e){let t=new AbortController,{signal:n}=t,r=new Promise((t,r)=>{if(n.aborted){r(new N);return}function i(){r(new N)}n.addEventListener(`abort`,i),e.then(e=>{n.removeEventListener(`abort`,i),n.aborted?r(new N):t(e)}).catch(e=>{n.removeEventListener(`abort`,i),n.aborted?r(new N):r(e)})});function i(e){t.abort(e)}return{promise:r,abort:i,signal:n}}const F={Inline:`__inline`,Async:`__async`};function I(e,t){return e.some(e=>t?e?.[t]:!1)}function L(e,t){return t?e.reduce((e,n)=>{let r=n?.[t]||[];return e.concat(r)},[]):[]}function R(e){try{return e.map(e=>p(e))}catch{return[]}}function z(t){return t.map(t=>t instanceof Function?e(t):i(t)?t:f(()=>t))}function B(e){let t=e.toString().replace(/\/\/.*$/gm,``).replace(/\/\*[\s\S]*?\*\//g,``).match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return t?(t[0]||t[1]||t[2]||t[3]||t[4]||``).split(`,`).map(e=>e.trim()).filter(e=>e.length>0).length:0}function V(e,...t){let{validator:n,type:r,async:i}=e,o=i||r===F.Async||n.constructor.name===`AsyncFunction`;return a({validator(n,...r){return e.validator(n,...R(r.length?r:t))},message(n){return typeof e.message==`function`?e.message({...n,$params:R(n?.$params?.length?n.$params:t)}):e.message},active(n){return typeof e.active==`function`?e.active({...n,$params:R(n?.$params?.length?n.$params:t)}):e.active??!0},tooltip(n){return typeof e.tooltip==`function`?e.tooltip({...n,$params:R(n?.$params?.length?n.$params:t)}):e.tooltip??[]},exec(n){let r=e.validator(n,...R(t)),i;return r instanceof Promise?r.then(e=>(i=e,typeof i==`object`&&`$valid`in i?i.$valid:typeof i==`boolean`?i:!1)):(i=r,typeof i==`object`&&`$valid`in i?i.$valid:typeof i==`boolean`?i:!1)},type:r,_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:o,_params:z(t),_brand:x})}function H(e){if(typeof e.validator==`function`){let t=[],n=e.async??e.validator.constructor.name===`AsyncFunction`,r=V({...e,async:n},...t);if(B(e.validator)>1){let t=function(...t){return V(e,...t)};return t.validator=r.validator,t.message=r.message,t.active=r.active,t.tooltip=r.tooltip,t.type=r.type,t.exec=r.exec,t._validator=r.validator,t._message=r.message,t._active=r.active,t._tooltip=r.tooltip,t._type=e.type,t._message_pacthed=!1,t._tooltip_pacthed=!1,t._async=n,t}else return r}throw Error(`[createRule] validator must be a function`)}function U(e){return w(e.value)}function W(e,n,r){let i=t(),a;return a=e instanceof Function?i.run(()=>e(n,r??0)):e,{scope:i,unwrapped:a}}const G={LessThan:-1,EqualTo:0,GreaterThan:1};function ee(e,t){let n=String(e).split(`.`),r=String(t).split(`.`);for(let e=0;e<Math.min(n.length,r.length);e++){let t=Number(n[e]),i=Number(r[e]);if(t>i)return G.GreaterThan;if(i>t)return G.LessThan;if(!isNaN(t)&&isNaN(i))return G.GreaterThan;if(isNaN(t)&&!isNaN(i))return G.LessThan}return G.EqualTo}const K=ee(g,`3.5.0`)!==-1;function q(){return Math.floor(Math.random()*Date.now()).toString()}function J(){return typeof window>`u`?q():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Y(e){return r()?(c(e),!0):!1}function X(e){let n=!1,r,i=t(!0);return((...t)=>(n||=(r=i.run(()=>e(...t)),!0),r))}function Z(){let e=d(new Map),t=d(new Map),n=d(new Map),i=d(new Map),a=d(new Map),o=d(new Map);function s(e){let n=t.value.get(e);if(n)return n;{let n=u({});return t.value.set(e,n),n}}function l(e){let t=n.value.get(e);if(t)return t;{let t=u([]);return n.value.set(e,t),t}}function f(e,t,n){o.value.set(`${e}-${t}`,n)}function p(e,t){return o.value.get(`${e}-${t}`)}function m(e,t){e&&t!=null&&o.value.delete(`${e}-${t}`)}function h(e,t){i.value.set(e,t)}function g(e){return i.value.get(e)??!1}function _(t,n){e.value.set(t,n)}function v(t,n){let r=e.value.get(t);if(r)return y(n,r)?{valid:!0}:{valid:!1}}function y(e,t){let n=Object.keys(t),r=Object.keys(e);return r.length!==n.length||!r.every(e=>n.includes(e))?!1:r.every(n=>{let r=e[n],i=t[n];return!i||!r||typeof r==`function`||typeof i==`function`||typeof r==`number`||typeof r==`boolean`||typeof r==`string`?!1:r._params?r._params?.every((e,t)=>{if(typeof i==`number`||typeof i==`boolean`||typeof i==`string`)return!0;{let e=R(i._params),n=R(r._params);return e?.[t]===n?.[t]}}):!0})}function b(e){let t=a.value.get(e);if(t)return t;{let t=u(!1),n=u(!0),r=u({}),i=u(!1);return a.value.set(e,{$pending:t,$valid:n,$metadata:r,$validating:i}),{$pending:t,$valid:n,$metadata:r,$validating:i}}}return r()&&c(()=>{e.value.clear(),t.value.clear(),n.value.clear(),i.value.clear(),a.value.clear(),o.value.clear()}),{addRuleDeclEntry:_,setDirtyEntry:h,checkRuleDeclEntry:v,getDirtyState:g,trySetRuleStatusRef:b,getFieldsEntry:s,getCollectionsEntry:l,getArrayStatus:p,addArrayStatus:f,deleteArrayStatus:m,arrayStatusStorage:o}}const te=Symbol(`regle`),Q={REGLE_STATIC:`__regle_static`};function ne(e,t){return!oe(e.value)&&(U(e)||w(t.value)&&!b(t.value)&&!Object.entries(t.value).some(([e,t])=>$(t)||typeof t==`function`))}function re(e,t,n=!1){return!!e.value&&w(e.value)&&`$each`in e.value||n&&Array.isArray(t.value)&&t.value.some(w)||Array.isArray(t.value)&&t.value.some(w)}function ie(e){return!!e.value&&(w(e.value)||U(e.value))}function $(e){return w(e)&&`_validator`in e}function ae(e){return typeof e.value==`function`?`_validator`in e.value:!0}function oe(e){return w(e)&&D(e,Q.REGLE_STATIC)&&e[Q.REGLE_STATIC]===!0}function se(e){return w(e)&&`$fields`in e}function ce(e){return!!e&&`$rules`in e}function le({field:e,silent:t=!1}){let n=Object.entries(e.$rules??{}).map(([n,r])=>{let i=``;if(t&&!r.$valid)i=r.$message;else if(!r.$valid&&e.$error&&!r.$validating)i=r.$message;else return null;return{$message:i,$property:e.fieldName,$rule:n,$type:r.$type,...typeof r.$metadata==`object`?r.$metadata:{}}}).filter(e=>!!e).reduce((e,t)=>(typeof t.$message==`string`?e.push(t):e.push(...t.$message.map(e=>({...t,$message:e}))),e),[]),r=e.$error&&e.$externalErrors?e.$externalErrors.map(t=>({$message:t,$property:e.fieldName,$rule:`external`,$type:void 0})):[],i=[];return e.$schemaErrors&&e.$error&&(i=!Array.isArray(e.$schemaErrors)&&`$self`in e.$schemaErrors?e.$schemaErrors.$self??[]:e.$schemaErrors??[]),[...n,...r,...i]}function ue({field:e}){let t=[];for(let n of Object.values(e.$rules??{})){let e=n.$tooltip;e&&(typeof e==`string`?t.push(e):t.push(...e))}return t}function de(e){return w(e)&&`$each`in e}function fe(e,t){let{includePath:n=!1}=t??{};if(Array.isArray(e)&&e.every(e=>!w(e)))return e;if(de(e)){let t=n?e.$self?.map(e=>({message:e,path:[]}))??[]:e.$self??[],r=e.$each?.map(e=>pe(e,n))??[];return t?.concat(r.flat())}else return Object.entries(e).map(([e,t])=>pe(t,n,[e])).flat()}function pe(e,t=!1,n){let r=t&&!n?[]:n;if(Array.isArray(e)&&e.every(e=>!w(e)))return t?e.map(e=>({message:e,path:r??[]})):e;if(de(e)){let n=r?.length?e.$self?.map(e=>({message:e,path:r??[]}))??[]:e.$self??[],i=e.$each?.map((e,n)=>pe(e,t,r?.concat(n)))??[];return n?.concat(i.flat())}else return Object.entries(e).map(([e,n])=>pe(n,t,r?.concat(e))).flat()}function me({customMessages:n,rule:r,ruleKey:i,state:a,path:o,cachePath:s,storage:c,modifiers:d}){let f=t(),p={},m,h=e(()=>$(r.value)&&r.value._async),g=u(!1),{$pending:v,$valid:y,$metadata:x,$validating:S}=c.trySetRuleStatusRef(`${s}.${i}`);function C(){f=t(),p=f.run(()=>{let t=u(!1),s=u(!1),c=u(!0),l=u(!1),d=u(!1),f=e(()=>({$value:a.value,$error:s.value,$dirty:t.value,$pending:l.value,$correct:d.value,$invalid:c.value,$rule:{$valid:y.value,$invalid:!y.value,$pending:v.value},$params:C.value,...x.value})),p=e(()=>{try{return ae(r)?typeof r.value.active==`function`?r.value.active(f.value):!!r.value.active:!0}catch(e){return console.error(`Error in "active" function for "${o}.${i}" rule`,{cause:e}),!0}});function m(e){try{let t=``,a=n?n[i]?.[e]:void 0;if(a&&(t=typeof a==`function`?a(f.value):a),ae(r)){let n=`_${e}_patched`;a&&!r.value[n]||(t=typeof r.value[e]==`function`?r.value[e](f.value):r.value[e]??``)}return t}catch(t){return console.error(`Error in "${e}" function for "${o}.${i}" rule`,{cause:t}),``}}let h=e(()=>{let e=m(`message`);return b(e)&&(e=`This field is not valid`),e}),g=e(()=>m(`tooltip`)),_=e(()=>ae(r)&&r.value.type?r.value.type:i),S=e(()=>ae(r)?r.value.validator:r.value),C=e(()=>typeof r.value==`function`?[]:R(r.value._params??[]));return{$active:p,$message:h,$type:_,$validator:S,$params:C,$path:e(()=>`${o}.${_.value}`),$tooltip:g,$fieldCorrect:d,$fieldError:s,$fieldDirty:t,$fieldPending:l,$fieldInvalid:c}}),m=_(p?.$params,()=>{(!d.$silent.value||d.$rewardEarly.value&&p.$fieldError.value)&&E()})}C();function w(){y.value=!0,p.$fieldDirty.value&&(v.value=!0)}async function T(){let e=!1;try{let t=p.$validator.value;if(typeof t!=`function`)return console.error(`${o}: Incorrect rule format, it needs to be either a function or created with "createRule".`),!1;let n=t(a.value,...p.$params.value),r=a.value;w();let i;if(i=n instanceof Promise?await n:n,a.value!==r)return!0;if(typeof i==`boolean`)e=i;else{let{$valid:t,...n}=i;e=t,x.value=n}}catch{e=!1}finally{v.value=!1}return e}async function E(){try{S.value=!0;let e=!1;if(g.value=!0,$(r.value)&&r.value._async)e=await T();else{let t=p.$validator.value,n=t(a.value,...p.$params.value);if(n 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(n!=null)if(typeof n==`boolean`)e=n;else{let{$valid:t,...r}=n;e=t,x.value=r}}return y.value=e,e}catch{return!1}finally{S.value=!1,g.value=!1}}function D(){y.value=!0,x.value={},v.value=!1,S.value=!1,C()}function O(){m(),f.stop(),f=t()}return l({...p,$pending:v,$valid:y,$metadata:x,$haveAsync:h,$maybePending:g,$validating:S,$parse:E,$unwatch:O,$watch:C,$reset:D})}function he(e){return{"~standard":{version:1,vendor:`regle`,validate:async t=>{let{valid:n,data:r,errors:i}=await e(t);return n?{value:r,issues:[]}:{issues:fe(i,{includePath:!0})}}}}}function ge({state:n,rulesDef:r,customMessages:i,path:a,cachePath:o,fieldName:s,storage:c,options:d,externalErrors:p,schemaErrors:m,schemaMode:g,onUnwatch:y,$isArray:x,initialState:S,originalState:T,shortcuts:E,onValidate:D}){let O=t(),k,N=[],F,I,L,R,z=()=>{},B,V=u(!1);function H(){let e=r.value,t=c.checkRuleDeclEntry(o,e),s={};for(let t in e)t.startsWith(`$`)&&(s[t]=e[t]);Y.value=s,G();let l=r.value,u=[];for(let e in l){if(e.startsWith(`$`)||e.startsWith(`~`))continue;let t=l[e];if(!t)continue;let r=f(()=>t);u.push([e,me({modifiers:{$silent:k.$silent,$rewardEarly:k.$rewardEarly},customMessages:i,rule:r,ruleKey:e,state:n,path:a,cachePath:o,storage:c,$debounce:Y.value.$debounce})])}J.value=Object.fromEntries(u),k.processShortcuts(),U(),t?.valid!=null&&(k.$dirty.value=c.getDirtyState(o),(k.$dirty.value&&!k.$silent.value||k.$rewardEarly.value&&k.$error.value)&&z()),c.addRuleDeclEntry(o,e)}function U(){z=k.$debounce.value>0?j(q,k.$debounce.value,{trackDebounceRef:V}):q}function W(){if(J.value)for(let e of Object.values(J.value))e.$unwatch();I(),R?.(),k.$dirty.value&&c.setDirtyEntry(o,k.$dirty.value),F?.(),O.stop(),O=t();for(let e of N)e.stop();N=[],y?.(),L?.()}function G(){if(J.value)for(let e of Object.values(J.value))e.$watch();k=O.run(()=>{let i=u(!1),a=u(!1),o=e(()=>i.value),c=e(()=>x||oe(n.value)),f=e(()=>Y.value.$debounce==null?k.$haveAnyAsyncRule.value?200:0:Y.value.$debounce),_=e(()=>Y.value.$deepCompare==null?!1:Y.value.$deepCompare),y=e(()=>Y.value.$lazy==null?h(d.lazy)==null?!1:h(d.lazy):Y.value.$lazy),C=e(()=>Y.value.$rewardEarly==null?h(d.rewardEarly)==null?!1:h(d.rewardEarly):Y.value.$rewardEarly),w=e(()=>Y.value.$clearExternalErrorsOnChange==null?h(d.clearExternalErrorsOnChange)==null?!T.value:h(d.clearExternalErrorsOnChange):Y.value.$clearExternalErrorsOnChange),T=e(()=>C.value?!0:Y.value.$silent==null?h(d.silent)==null?!1:h(d.silent):Y.value.$silent),D=e(()=>Y.value.$autoDirty==null?h(d.autoDirty)==null?!0:h(d.autoDirty):Y.value.$autoDirty),O=e(()=>{for(let e of Object.values(J.value))if(e.$validating)return!0;return!1}),j=e({get:()=>n.value,set(e){F(),n.value=e,ee()}}),P=e(()=>V.value?K.value&&i.value:K.value&&!G.value&&i.value),I=e(()=>le({field:{$rules:J.value,$error:P.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:q.value}})),L=e(()=>le({field:{$rules:J.value,$error:P.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:q.value},silent:!0})),R=e(()=>I.value.map(e=>e.$message)),z=e(()=>L.value.map(e=>e.$message)),B=e(()=>i.value?S.value instanceof Date&&n.value instanceof Date?A(S.value).getDate()!==A(n.value).getDate():S.value==null?!!n.value:Array.isArray(n.value)&&Array.isArray(S.value)?!M(n.value,S.value,Y.value.$deepCompare):S.value!==n.value:!1),H=e(()=>B.value),U=e(()=>ue({field:{$rules:J.value}})),W=e(()=>(T.value||o.value)&&!(K.value||G.value)),G=e(()=>a.value||!C.value?Object.entries(J.value).some(([e,t])=>t.$pending):!1),K=e(()=>m?.value&&!Array.isArray(m?.value)&&`$self`in m.value?m?.value.$self?.length>0:p?.value?.length||m?.value?.length?!0:X.value?!1:Object.values(J.value).some(e=>!e.$valid||e.$maybePending)),q=e(()=>s??d.id??`root`),X=e(()=>!g&&!Object.keys(r.value).some(e=>!e.startsWith(`$`))),Z=e(()=>{if(p?.value?.length||X.value||V.value)return!1;if(i.value&&!b(n.value)&&!O.value&&!G.value){if(g)return!m?.value?.length;{let e=Object.values(J.value);for(let t of e)if(t.$active&&!t.$valid)return!1;return e.some(e=>e.$active)}}return!1}),te=e(()=>Object.values(J.value).some(e=>e.$haveAsync)),Q=e(()=>({$debounce:f.value,$lazy:y.value,$rewardEarly:C.value,$autoDirty:D.value,$silent:T.value,$clearExternalErrorsOnChange:w.value}));function ne(){E?.fields&&Object.entries(E.fields).forEach(([e,r])=>{let a=t();re[e]=a.run(()=>{let e=u();return v(()=>{e.value=r(l({$dirty:i,$externalErrors:p?.value??[],$value:n,$silentValue:j,$rules:J,$error:P,$pending:G,$invalid:K,$correct:Z,$errors:R,$ready:W,$silentErrors:z,$anyDirty:o,$tooltips:U,$name:q,$inactive:X,$edited:B,$anyEdited:H}))}),e}),N.push(a)})}let re={};return{$error:P,$pending:G,$invalid:K,$correct:Z,$debounce:f,$deepCompare:_,$lazy:y,$ready:W,$issues:I,$silentIssues:L,$errors:R,$silentErrors:z,$rewardEarly:C,$autoDirty:D,$silent:T,$clearExternalErrorsOnChange:w,$anyDirty:o,$edited:B,$anyEdited:H,$name:q,$haveAnyAsyncRule:te,$shortcuts:re,$validating:O,$tooltips:U,$dirty:i,processShortcuts:ne,$silentValue:j,$inactive:X,$modifiers:Q,$isArrayOrRegleStatic:c}}),ee(),I=_(k.$dirty,e=>{c.setDirtyEntry(o,e),Object.values(J.value).forEach(t=>{t.$fieldDirty=e})}),R=_([k.$error,k.$correct,k.$invalid,k.$pending],()=>{Object.values(J.value).forEach(e=>{e.$fieldError=k.$error.value,e.$fieldInvalid=k.$invalid.value,e.$fieldPending=k.$pending.value,e.$fieldCorrect=k.$correct.value})}),L=_(k.$haveAnyAsyncRule,U)}function ee(){F=_(n,()=>{k.$autoDirty.value&&!k.$silent.value&&(k.$dirty.value||(k.$dirty.value=!0)),r.value instanceof Function&&H(),(!k.$silent.value||k.$rewardEarly.value&&k.$error.value)&&z(),k.$clearExternalErrorsOnChange.value&&$()},{deep:k.$isArrayOrRegleStatic.value?!0:K?1:!0})}async function q(){try{let{promise:e}=te(Promise.allSettled(Object.values(J.value).map(e=>e.$parse())));await e}catch{}}let J=u({}),Y=u({});H();function X(e,t){if(Z(),$(),k.$dirty.value=!1,c.setDirtyEntry(o,!1),!t)if(e?.toOriginalState)n.value=C(T),S.value=C(T);else if(e?.toInitialState)n.value=C(S.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,S.value=C(t),n.value=C(t)}else S.value=w(n.value)?C(n.value):Array.isArray(n.value)?[...n.value]:n.value;if(e?.clearExternalErrors&&$(),!t&&!e?.keepValidationState)for(let e of Object.values(J.value))e.$reset();if(!k.$lazy.value&&!k.$silent.value&&!t)for(let e of Object.values(J.value))e.$parse()}function Z(){`cancel`in z&&z.cancel()}function te(e){return B&&B.abort(),B=P(e),B}function Q(){Z(),B&&B.abort()}function ne(e=!0,t=!1){k.$dirty.value||(k.$dirty.value=!0),t&&e?(!k.$silent.value||k.$rewardEarly.value&&k.$error.value)&&(Z(),z()):e&&(Z(),z())}async function re(e){try{if(e&&(n.value=e),g)return D?(ne(!1),D()):{valid:!1,data:n.value,errors:k.$errors.value,issues:k.$issues.value};let t=n.value;if(!k.$dirty.value)k.$dirty.value=!0;else if(!k.$silent.value&&k.$dirty.value&&!k.$pending.value&&!V.value&&!k.$haveAnyAsyncRule.value)return{valid:!k.$error.value,data:t,errors:k.$errors.value,issues:k.$issues.value};if(g)return{valid:!m?.value?.length,data:t,errors:k.$errors.value,issues:k.$issues.value};if(b(J.value))return{valid:!0,data:t,errors:k.$errors.value,issues:k.$issues.value};Q();let{promise:r}=te(Promise.allSettled(Object.values(J.value).map(e=>e.$parse())));return{valid:(await r).every(e=>e.status===`fulfilled`&&e.value===!0),data:t,errors:k.$errors.value,issues:k.$issues.value}}catch{return{valid:!1,data:n.value,errors:k.$errors.value,issues:k.$issues.value}}}function ie(e=!0){return k.$dirty.value?n.value:e?{_null:!0}:null}function $(){p?.value?.length&&(p.value=[])}!k.$lazy.value&&!k.$dirty.value&&!k.$silent.value&&q();let{$shortcuts:ae,$validating:se,$autoDirty:ce,$rewardEarly:de,$clearExternalErrorsOnChange:fe,$haveAnyAsyncRule:pe,$debounce:ge,$lazy:_e,...ve}=k;return l({...ve,$externalErrors:p,$value:n,$initialValue:S,$originalValue:T,$rules:J,...ae,$path:a,$isDebouncing:V,$reset:X,$touch:ne,$validate:re,$unwatch:W,$watch:G,$extractDirtyFields:ie,$clearExternalErrors:$,$abort:Q,"~modifiers":k.$modifiers,...he(re)})}function _e({$id:t,path:n,cachePath:r,index:i,options:a,storage:o,stateValue:s,customMessages:c,rules:l,externalErrors:u,schemaErrors:d,initialState:p,originalState:m,shortcuts:h,fieldName:g,schemaMode:_}){let v=s.value?.$id??l.$key??J(),y=`${r}.${String(v)}`,b=`${n}.${i}`;typeof s.value==`object`&&s.value!=null&&(s.value.$id||Object.defineProperties(s.value,{$id:{value:v,enumerable:!1,configurable:!1,writable:!1}}));let x=f(u?.value??[],i),S=e(()=>d?.value?.[i]),C=be({index:i,state:s,rulesDef:f(()=>l),customMessages:c,path:b,cachePath:y,storage:o,options:a,externalErrors:x,schemaErrors:S,initialState:p,originalState:m,shortcuts:h,fieldName:g,schemaMode:_});return C&&(C.$id=s.value?.$id??String(v),o.addArrayStatus(t,C.$id,C)),C}function ve({state:n,rulesDef:r,customMessages:i,path:a,cachePath:o,storage:s,options:c,externalErrors:d,schemaErrors:p,schemaMode:m,initialState:g,originalState:y,shortcuts:x,fieldName:S}){let w=t(),T,E=t(),D,O=[];if(!Array.isArray(n.value)&&!r.value.$each)return;let k=u(),A=u(n.value),j=u({}),M,N,P=u({}),F=s.getCollectionsEntry(a);D=E.run(()=>({isPrimitiveArray:e(()=>n.value?.length?Array.isArray(n.value)&&n.value.length?n.value.every(e=>typeof e!=`object`):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(e=>$(e)||typeof e==`function`):!1:!1)})),I(),B();function I(){j.value=Object.fromEntries(Object.entries(r.value).filter(([e])=>e.startsWith(`$`))),typeof n.value==`object`&&(n.value!=null&&!n.value?.$id&&n.value!==null?(k.value=J(),Object.defineProperties(n.value,{$id:{value:k.value,enumerable:!1,configurable:!1,writable:!1}})):n.value?.$id&&(k.value=n.value.$id)),A.value=P.value.$value,Array.isArray(n.value)&&!D.isPrimitiveArray.value?F.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let{scope:l,unwrapped:u}=W(r.value.$each,f(()=>t),n);l&&O.push(l);let h=f(g.value??[],n),_=f(d?.value??{},`$each`),v=e(()=>p?.value?.$each);return _e({$id:k.value,path:a,cachePath:o,customMessages:i,rules:u??{},stateValue:f(()=>t),index:n,options:c,storage:s,externalErrors:_,schemaErrors:v,initialState:h,originalState:y,shortcuts:x,fieldName:S,schemaMode:m})||null}).filter(e=>!!e):F.value=[],P.value=ge({state:n,rulesDef:r,customMessages:i,path:a,cachePath:a,storage:s,options:c,externalErrors:f(d?.value??{},`$self`),schemaErrors:e(()=>p?.value?.$self),$isArray:!0,initialState:g,originalState:y,shortcuts:x,fieldName:S,schemaMode:m})}function L(){if(Array.isArray(n.value)&&!D.isPrimitiveArray.value){let t=C(F.value);F.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let o=f(()=>t);if(t.$id&&F.value.find(e=>e.$id===t.$id)){let e=s.getArrayStatus(k.value,t.$id);return e?(e.$value=o,e):null}else{let{scope:t,unwrapped:l}=W(r.value.$each,o,n);t&&O.push(t);let u=f(d?.value??{},`$each`),h=e(()=>p?.value?.$each??[]);return _e({$id:k.value,path:a,cachePath:a,customMessages:i,rules:l??{},stateValue:o,index:n,options:c,storage:s,externalErrors:u,schemaErrors:h,initialState:f(g.value??[],n),originalState:y,shortcuts:x,fieldName:S,schemaMode:m})||null}}).filter(e=>!!e),t.filter(e=>!n.value?.find(t=>e.$id===t.$id)).forEach((e,t)=>{s.deleteArrayStatus(k.value,t.toString())})}else F.value=[]}function R(){M=_(n,()=>{N?.(),n.value!=null&&!Object.hasOwn(n.value,`$id`)&&!k.value?I():L(),z()},{deep:K?1:!0,flush:`pre`}),z()}function z(){N=_(n,()=>{T.$autoDirty.value&&!T.$silent.value&&P.value.$touch(!1,!0)},{flush:`post`})}function B(){R(),w=t(),T=w.run(()=>{let r=e({get:()=>n.value,set(e){M?.(),N?.(),n.value=e,R()}}),i=e(()=>P.value.$dirty&&(!F.value.length||F.value.every(e=>e.$dirty))),o=e(()=>P.value.$anyDirty||F.value.some(e=>e.$anyDirty)),s=e(()=>P.value.$invalid||F.value.some(e=>e.$invalid)),d=e(()=>(b(P.value.$rules)?!0:P.value.$correct)&&(!F.value.length||F.value.every(e=>e.$correct||e.$anyDirty&&!e.$invalid))),f=e(()=>P.value.$error||F.value.some(e=>e.$error)),p=e(()=>!(s.value||m.value)),m=e(()=>P.value.$pending||F.value.some(e=>e.$pending)),_=e(()=>!!F.value.length&&F.value.every(e=>e.$edited)),C=e(()=>P.value.$anyEdited||F.value.some(e=>e.$anyEdited)),w=e(()=>({$self:P.value.$issues,$each:F.value.map(e=>e.$issues)})),T=e(()=>({$self:P.value.$errors,$each:F.value.map(e=>e.$errors)})),E=e(()=>({$self:P.value.$silentErrors,$each:F.value.map(e=>e.$silentErrors)})),D=e(()=>j.value.$rewardEarly==null?h(c.rewardEarly)==null?!1:h(c.rewardEarly):j.value.$rewardEarly),k=e(()=>D.value?!0:j.value.$silent==null?h(c.silent)==null?!1:h(c.silent):j.value.$silent),A=e(()=>j.value.$autoDirty==null?h(c.autoDirty)==null?!0:h(c.autoDirty):j.value.$autoDirty),I=e(()=>S??c.id??`root`),L=e(()=>({$deepCompare:j.value.$deepCompare??!1,$lazy:j.value.$lazy??!1,$rewardEarly:D.value,$autoDirty:A.value,$silent:k.value,$clearExternalErrorsOnChange:j.value.$clearExternalErrorsOnChange??!1}));function z(){x?.collections&&Object.entries(x?.collections).forEach(([e,c])=>{let h=t();B[e]=h.run(()=>{let e=u();return v(()=>{e.value=c(l({$dirty:i,$error:f,$path:a,$silentValue:r,$pending:m,$invalid:s,$correct:d,$errors:T,$silentErrors:E,$initialValue:g,$originalValue:y,$ready:p,$anyDirty:o,$name:I,$each:F,$self:P,$value:n,$edited:_,$anyEdited:C,$issues:w}))}),e}),O.push(h)})}let B={};return z(),{$dirty:i,$anyDirty:o,$invalid:s,$correct:d,$error:f,$pending:m,$errors:T,$silentErrors:E,$ready:p,$name:I,$shortcuts:B,$silentValue:r,$edited:_,$anyEdited:C,$rewardEarly:D,$silent:k,$autoDirty:A,$issues:w,$modifiers:L}}),D.isPrimitiveArray.value&&r.value.$each&&console.warn(`${a} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`)}function V(){M?.(),P.value&&P.value.$unwatch(),F.value&&F.value.forEach(e=>{`$dirty`in e&&e.$unwatch()}),w.stop(),w=t(),E.stop(),E=t(!0),O.forEach(e=>e.stop()),O=[]}function H(e=!0,t=!1){P.value.$touch(e,t),F.value.forEach(n=>{n.$touch(e,t)})}function U(e,t){if(V(),!t)if(e?.toOriginalState)n.value=C(y),g.value=C(y);else if(e?.toInitialState)n.value=C(g.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,g.value=C(t),n.value=C(t)}else g.value=C(n.value);e?.clearExternalErrors&&q(),e?.keepValidationState||(P.value.$reset(e,t),F.value.forEach(t=>{t.$reset(e,!0)})),t||I()}function G(){P.value.$abort(),F.value.forEach(e=>{e.$abort()})}async function ee(e){e&&(n.value=e);let t=n.value;try{return G(),{valid:(await Promise.allSettled([P.value.$validate(e),...F.value.map(e=>e.$validate())])).every(e=>e.status===`fulfilled`?e.value.valid===!0:!1),data:t,errors:T.$errors.value,issues:T.$issues.value}}catch{return{valid:!1,data:t,errors:T.$errors.value,issues:T.$issues.value}}}function q(){P.value.$clearExternalErrors(),F.value.forEach(e=>{e.$clearExternalErrors()})}function Y(e=!0){let t=F.value.map(t=>{if(se(t))return t.$extractDirtyFields(e)});return e&&t.every(e=>b(e))&&(t=[]),t}let{$shortcuts:X,...Z}=T;return l({$self:P,...Z,...X,$path:a,$each:F,$value:n,$initialValue:g,$originalValue:y,$validate:ee,$unwatch:V,$watch:B,$touch:H,$reset:U,$abort:G,$extractDirtyFields:Y,$clearExternalErrors:q,"~modifiers":T.$modifiers,...he(ee)})}function ye({rulesDef:n,state:r,path:i=``,cachePath:a,rootRules:o,externalErrors:s,schemaErrors:c,rootSchemaErrors:d,validationGroups:p,initialState:m,originalState:g,fieldName:y,...x}){let S=t(),T,E=[],D=null,O=null,k=null,A=null;async function j(t=!0){let o=Object.entries(n.value),l=Object.fromEntries(o.reduce((t,[n,o])=>{if(!o)return t;let l=f(r.value??{},n),u=f(()=>o),d=f(s?.value??{},n),p=e(()=>c?.value?.[n]),h=f(m?.value??{},n);return t.push([n,be({state:l,rulesDef:u,path:i?`${i}.${n}`:n,cachePath:a?`${a}.${n}`:n,externalErrors:d,schemaErrors:p,initialState:h,originalState:g?.[n],fieldName:n,...x})]),t},[])),u=Object.fromEntries(Object.entries(h(s)??{}).filter(([e,t])=>!(e in n.value)&&!!t).map(([t])=>{let n=f(r.value??{},t),o=f(s?.value??{},t),l=e(()=>c?.value?.[t]),u=f(m?.value??{},t),d=i?`${i}.${t}`:t,p=a?`${a}.${t}`:t;return[t,be({state:n,rulesDef:e(()=>({})),path:d,cachePath:p,externalErrors:o,schemaErrors:l,initialState:u,originalState:g?.[t],fieldName:t,...x})]})),d=Object.fromEntries(Object.entries(h(c)??{}).map(([t])=>{let n=i?`${i}.${t}`:t,o=a?`${a}.${t}`:t,l=f(r.value??{},t),u=f(s?.value??{},t),d=e(()=>c?.value?.[t]),p=f(m?.value??{},t);return[t,be({state:l,rulesDef:e(()=>({})),path:n,cachePath:o,externalErrors:u,schemaErrors:d,initialState:p,originalState:g?.[t],fieldName:t,...x})]})),p=Object.fromEntries(Object.entries(r.value??{}).filter(([e])=>!(e in n.value)&&!(e in(u??{}))&&!(e in(d??{}))).map(([t])=>{let n=f(r.value??{},t),o=f(s?.value??{},t),l=e(()=>c?.value?.[t]),u=f(m?.value??{},t);return[t,be({state:n,rulesDef:e(()=>({})),path:i?`${i}.${t}`:t,cachePath:a?`${a}.${t}`:t,externalErrors:o,schemaErrors:l,initialState:u,originalState:g?.[t],fieldName:t,...x})]}));M.value={...l,...u,...d,...p},t&&F()}let M=x.storage.getFieldsEntry(a);j();function N(){s&&(k=_(s,()=>{R(),j()},{deep:!0}))}function P(){A=_(r,()=>{R(),j(),T.$autoDirty.value&&!T.$silent.value&&V(!1,!0)},{flush:`post`})}function F(){o&&(D?.(),D=_(o,()=>{R(),j()},{deep:!0,flush:`pre`}),N()),d&&(O?.(),O=_(d,()=>{R(),j()},{deep:!0,flush:`post`})),P(),T=S.run(()=>{let n=e({get:()=>r.value,set(e){R(),r.value=e,j(),T.$autoDirty.value&&!T.$silent.value&&V(!1,!0)}}),a=e({get:()=>r.value,set(e){R(),r.value=e,j()}}),o=e(()=>{let e=M.value,t=Object.keys(e);if(!t.length)return!1;for(let n of t)if(!e[n]?.$dirty)return!1;return!0}),s=e(()=>{let e=M.value;for(let t in e)if(e[t]?.$anyDirty)return!0;return!1}),c=e(()=>{let e=M.value,t=Object.entries(e);if(!t.length)return!1;for(let[e,n]of t)if(n?.$invalid)return!0;return!1}),d=e(()=>{let e=Object.entries(M.value).reduce((e,[t,n])=>((!ce(n)||!n.$inactive)&&e.push([t,n]),e),[]);return e.length?x.schemaMode?e.every(([e,t])=>t.$correct):e.every(([e,t])=>ce(t)?`required`in t.$rules&&t.$rules.required.$active?t.$correct:!t.$invalid&&!t.$pending&&!t.$isDebouncing:t?.$correct):!1}),f=e(()=>{let e=M.value;if(!Object.keys(e).length)return!1;for(let t in e)if(e[t]?.$error)return!0;return!1}),_=e(()=>h(x.options.rewardEarly)==null?!1:h(x.options.rewardEarly)),b=e(()=>h(x.options.silent)==null?!!_.value:h(x.options.silent)),S=e(()=>h(x.options.autoDirty)==null?!0:h(x.options.autoDirty)),C=e(()=>(b.value||s.value)&&!(c.value||D.value)),w=u(!1),D=e(()=>{if(w.value)return!0;let e=M.value;for(let t in e)if(e[t]?.$pending)return!0;return!1}),O=e(()=>{let e={};for(let t in M.value)e[t]=M.value[t]?.$issues;return e}),k=e(()=>{let e={};for(let t in M.value)e[t]=M.value[t]?.$errors;return e}),A=e(()=>{let e={};for(let t in M.value)e[t]=M.value[t]?.$silentErrors;return e}),N=e(()=>{if(!Object.keys(M.value).length)return!1;for(let e in M.value)if(!M.value[e]?.$edited)return!1;return!0}),P=e(()=>{for(let e in M.value)if(M.value[e]?.$anyEdited)return!0;return!1}),F=e(()=>y??x.options.id??`root`),z=e(()=>({autoDirty:S.value,lazy:h(x.options.lazy)??!1,rewardEarly:_.value,silent:b.value,clearExternalErrorsOnChange:h(x.options.clearExternalErrorsOnChange)??!1,id:h(x.options.id)}));function B(){x.shortcuts?.nested&&Object.entries(x.shortcuts.nested).forEach(([e,n])=>{let p=t();U[e]=p.run(()=>{let e=u();return v(()=>{e.value=n(l({$dirty:o,$path:i,$value:r,$silentValue:a,$error:f,$originalValue:g,$pending:D,$invalid:c,$correct:d,$ready:C,$anyDirty:s,$name:F,$silentErrors:A,$initialValue:m,$errors:k,$fields:M,$edited:N,$anyEdited:P,$issues:O,"~modifiers":h(x.options)}))}),e}),E.push(p)})}let H=e({get:()=>p?Object.fromEntries(Object.entries(p?.(M.value)??{}).map(([e,t])=>t.length?[e,{...Object.fromEntries([`$invalid`,`$error`,`$pending`,`$dirty`,`$correct`].map(e=>[e,I(t,e)])),...Object.fromEntries([`$errors`,`$silentErrors`].map(e=>[e,L(t,e)]))}]:[])):{},set(){}}),U={};return B(),{$dirty:o,$anyDirty:s,$invalid:c,$correct:d,$error:f,$pending:D,$issues:O,$errors:k,$silentErrors:A,$ready:C,$name:F,$shortcuts:U,$groups:H,$silentValue:a,$edited:N,$anyEdited:P,$localPending:w,$autoDirty:S,$silent:b,$value:n,$modifiers:z}})}function R(){if(D?.(),k?.(),A?.(),O?.(),E=[],T={},M.value)for(let e of Object.values(M.value))e?.$unwatch()}function z(){let e=M.value;for(let t of Object.values(e))t.$clearExternalErrors()}function B(e,t){if(k?.(),R(),!t)if(e?.toOriginalState)r.value=C({...g}),m.value=C({...g});else if(e?.toInitialState)r.value=C({...m.value});else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,m.value=C(t),r.value=C(t)}else m.value=C(r.value);if(!e?.keepValidationState)for(let t of Object.values(M.value))t?.$reset(e,!0);e?.clearExternalErrors&&z(),N(),t||j()}function V(e=!0,t=!1){for(let n of Object.values(M.value))n?.$touch(e,t)}function H(e){return e.filter(([e,t])=>w(t)?!(t&&typeof t==`object`&&`_null`in t)&&!b(t):Array.isArray(t)?t.length:!0)}function U(e=!0){let t=Object.entries(M.value).map(([t,n])=>[t,n.$extractDirtyFields(e)]);return e&&(t=H(t)),Object.fromEntries(t)}function W(){for(let e of Object.values(M.value))e.$abort()}async function G(e){try{if(e&&(r.value=e),x.schemaMode)return x.onValidate?(V(!1),T.$localPending.value=!0,x.onValidate()):{valid:!1,data:r.value,errors:T.$errors.value,issues:T.$issues.value};{let e=r.value;return W(),{valid:(await Promise.allSettled(Object.values(M.value).map(e=>e.$validate()))).every(e=>e.status===`fulfilled`&&e?.value.valid===!0),data:e,errors:T.$errors.value,issues:T.$issues.value}}}catch{return{valid:!1,data:r.value,errors:T.$errors.value,issues:T.$issues.value}}finally{T.$localPending.value=!1}}let{$shortcuts:ee,$localPending:K,...q}=T,J=l({...q,...ee,$path:i,$initialValue:m,$originalValue:g,$fields:M,$reset:B,$touch:V,$validate:G,$unwatch:R,$watch:F,$clearExternalErrors:z,$extractDirtyFields:U,$abort:W,...o?{"~modifiers":T.$modifiers}:{},...he(G)});return v(()=>{for(let e of Object.keys(J).filter(e=>!e.startsWith(`$`)&&!e.startsWith(`~`)))delete J[e];for(let e of Object.values(M.value))e?.$name&&Object.assign(J,{[e.$name]:e})}),J}function be({rulesDef:e,...n}){if(re(e,n.state,n.schemaMode))return ve({rulesDef:e,...n});if(ne(n.state,e)){if(U(n.state))return ye({rulesDef:e,...n});{let r=t().run(()=>{let e=f(n.state.value?n.state:u({}));return _(()=>n.state.value,t=>{e.value=t},{deep:!0}),_(e,e=>{n.state.value=e},{deep:!0}),{fakeState:e}}),{state:i,...a}=n;return ye({rulesDef:e,...a,state:r.fakeState})}}else if(ie(e))return ge({rulesDef:i(e.value)?e.value:e,...n})}var xe=`1.12.0`;function Se({initialState:e,originalState:t,options:n,scopeRules:i,state:a,customRules:o,shortcuts:s,schemaErrors:d,schemaMode:f=!1,onValidate:p}){let m=Z(),h=u(),g=u(),v,y;function b(){v=_(()=>n.externalErrors?.value,()=>{y?.(),n.externalErrors?.value&&Object.keys(n.externalErrors.value).some(e=>e.includes(`.`))?g.value=E(n.externalErrors.value):g.value=n.externalErrors?.value,x()},{immediate:!0,deep:!0})}function x(){y=_(()=>g.value,()=>{v?.(),n.externalErrors?.value&&(n.externalErrors.value=g.value),b()},{deep:!0})}return b(),ne(a,i)?h.value=ye({rootRules:i,rulesDef:i,state:a,customMessages:o?.(),storage:m,options:n,externalErrors:g,validationGroups:n.validationGroups,initialState:e,originalState:t,shortcuts:s,fieldName:void 0,path:``,cachePath:``,schemaErrors:d,rootSchemaErrors:d,schemaMode:f,onValidate:p}):ie(i)&&(h.value=ge({rulesDef:i,state:a,customMessages:o?.(),storage:m,options:n,externalErrors:g,initialState:e,originalState:t,shortcuts:s,fieldName:void 0,path:``,cachePath:``,schemaMode:f,schemaErrors:d,onValidate:p})),r()&&c(()=>{h.value?.$unwatch(),y?.(),v?.()}),l({regle:h})}function Ce({state:t,rulesFactory:n,options:r,globalOptions:a,customRules:o,shortcuts:s}){let c=i(n)?n:typeof n==`function`?void 0:e(()=>n),l={...a,...r},f,p=d(c??{});typeof n==`function`&&(f=v(()=>{p.value=n(t),m(p)}));let h=u(w(t.value)?{...C(t.value)}:C(t.value)),g=w(t.value)?{...C(t.value)}:C(t.value);return Y(()=>{f?.()}),Se({scopeRules:p,state:t,options:l,initialState:h,originalState:g,customRules:o,shortcuts:s})}function we(e,t,n){let r={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,silent:t?.silent,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function a(t,a,o){return{r$:Ce({state:i(t)?t:u(t),rulesFactory:a,options:o,globalOptions:r,customRules:e,shortcuts:n}).regle}}return a}const Te=we();function Ee(){function e(e,t){return t}return e}const De=Ee();function Oe(e){let t={};if(Object.entries(e).some(([e,t])=>$(t)||typeof t==`function`))return null;for(let n in e){let r=e[n];r&&w(r)&&`$each`in r&&r.$each&&w(r.$each)?t[n]=[Oe(r.$each)]:w(r)&&!b(r)&&!Object.entries(r).some(([e,t])=>$(t)||typeof t==`function`)?t[n]=Oe(r):t[n]=null}return t}function ke(t,n,r){let a={autoDirty:n?.autoDirty,lazy:n?.lazy,rewardEarly:n?.rewardEarly,silent:n?.silent,clearExternalErrorsOnChange:n?.clearExternalErrorsOnChange};function o(n,o){let s=i(n)?n:typeof n==`function`?void 0:e(()=>n);return Ce({state:u(Oe(s?.value)),rulesFactory:s,options:o,globalOptions:a,customRules:t,shortcuts:r}).regle}return o}const Ae=ke();function je(e){if(k(e)){let t=e,n=class extends t{constructor(...e){return super(...e),Me(this)}};return Object.defineProperty(n,`name`,{value:t.name}),Me(n)}return Me(e)}function Me(e){return!D(e,Q.REGLE_STATIC)&&Object.isExtensible(e)&&O(e,Q.REGLE_STATIC,!0),e}function Ne({rules:e,modifiers:t,shortcuts:n}){let r=we(e,t,n),i=ke(e,t,n);return r.__config={rules:e,modifiers:t,shortcuts:n},i.__config={rules:e,modifiers:t,shortcuts:n},{useRegle:r,inferRules:Ee(),useRules:i}}function Pe(e,{rules:t,modifiers:n,shortcuts:r}){let i=e.__config??{},a=()=>({...i.rules?.(),...t?.()}),o=i.modifiers&&n?T(i.modifiers,n):i.modifiers??n,s=i.shortcuts&&r?T(i.shortcuts,r):i.shortcuts??r,c=we(a,o,s);return c.__config={rules:a,modifiers:o,shortcuts:s},{useRegle:c,inferRules:Ee()}}function Fe(t,n){let r=n??!1,i=e({get:()=>r?Object.values(t).map(e=>e.$value):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$value])),set:e=>{r||typeof e==`object`&&Object.entries(e).forEach(([e,n])=>t[e].$value=n)}}),a=e({get:()=>Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentValue])),set:e=>{typeof e==`object`&&Object.entries(e).forEach(([e,n])=>t[e].$silentValue=n)}}),o=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$dirty)}),s=e(()=>Object.entries(t).some(([e,t])=>t?.$anyDirty)),c=e(()=>Object.entries(t).some(([e,t])=>t?.$invalid)),u=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$correct||t.$anyDirty&&!t.$invalid)}),d=e(()=>Object.entries(t).some(([e,t])=>t?.$error)),f=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$ready)}),p=e(()=>Object.entries(t).some(([e,t])=>t?.$pending)),m=e(()=>r?Object.entries(t).map(([e,t])=>t.$issues):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$issues]))),h=e(()=>r?Object.entries(t).map(([e,t])=>t.$silentIssues):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentIssues]))),g=e(()=>r?Object.entries(t).map(([e,t])=>t.$errors):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$errors]))),_=e(()=>r?Object.entries(t).map(([e,t])=>t.$silentErrors):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentErrors]))),y=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$edited)}),b=e(()=>Object.entries(t).some(([e,t])=>t?.$anyEdited)),x=e(()=>r?Object.values(t):t);function S(e){Object.values(t).forEach(t=>{t.$reset(e)})}function C(){Object.values(t).forEach(e=>{e.$touch()})}function w(e=!0){return Object.values(t).map(t=>t.$extractDirtyFields(e))}function T(){Object.values(t).forEach(e=>{e.$clearExternalErrors()})}async function E(e){try{e&&(i.value=e);let n=i.value;return{valid:(await Promise.allSettled(Object.values(t).map(e=>e.$validate()))).every(e=>e.status===`fulfilled`?e.value.valid===!0:!1),data:n,errors:g.value,issues:m.value}}catch{return{valid:!1,data:i.value,errors:g.value,issues:m.value}}}let D=l({...!r&&{$silentValue:a},$errors:g,$issues:m,$silentIssues:h,$silentErrors:_,$instances:x,$value:i,$dirty:o,$anyDirty:s,$invalid:c,$correct:u,$error:d,$pending:p,$ready:f,$edited:y,$anyEdited:b,$reset:S,$touch:C,$validate:E,$extractDirtyFields:w,$clearExternalErrors:T});return v(()=>{if(!r){for(let e of Object.keys(D).filter(e=>!e.startsWith(`$`)&&!e.startsWith(`~`)))delete D[e];for(let[e,t]of Object.entries(x.value))Object.assign(D,{[e]:t})}}),D}function Ie(t,n){function r(r){let i=e(()=>p(r)),a=l({});c();let o=u(d(t.value)),s=l({r$:o});function c(){i.value&&(typeof i.value==`string`&&!t.value[i.value]?t.value[i.value]={}:Array.isArray(i.value)&&i.value.forEach(e=>{t.value[e]||(t.value[e]={})}))}_(i,c),_(t,e=>{o.value=d(e)},{deep:!0});function d(e){return i.value?typeof i.value==`string`?Fe(e[i.value]??{},!n.asRecord):(Object.keys(a).forEach(e=>{delete a[e]}),i.value.forEach(t=>{Object.entries(e[t]).forEach(([e,t])=>{Object.assign(a,{[e]:t})})}),Fe(a,!n.asRecord)):Fe(e[`~~global`]??{},!n.asRecord)}return{r$:s.r$}}return{useCollectScope:r}}function Le(t,r){let i=r??Te;return{useScopedRegle:((r,a,o)=>{let{namespace:c,scopeKey:l,id:d,...f}=o??{};i.__config??={};let m=e(()=>d??l),h=e(()=>p(c)),g=u(`${Object.keys(t.value).length+1}-${J()}`),v=e(()=>m.value??`instance-${g.value}`),{r$:y}=i(r,a,{...f,id:m.value});x(),Y(b),_(h,(e,t)=>{b(t),x()}),n()&&s(()=>{let e=n();typeof window<`u`&&e?.proxy?.$el?.parentElement&&document.documentElement&&!document.documentElement.contains(e?.proxy?.$el?.parentElement)&&b()});function b(e){let n=e??h.value;n?t.value[n]&&delete t.value[n][v.value]:t.value[`~~global`][v.value]&&delete t.value[`~~global`][v.value]}function x(){h.value?(t.value[h.value]||(t.value[h.value]={}),t.value[h.value][v.value]=y):(t.value[`~~global`]||(t.value[`~~global`]={}),t.value[`~~global`][v.value]=y)}return{r$:y,dispose:b,register:x}})}}function Re(e){let t=(e?.customStore?()=>(e.customStore&&(e.customStore?.value[`~~global`]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value[`~~global`]={}),e.customStore):X(()=>u({"~~global":{}})))(),{useScopedRegle:n}=Le(t,e?.customUseRegle),{useCollectScope:r}=Ie(t,{asRecord:e?.asRecord});return{useScopedRegle:n,useCollectScope:r}}const{useCollectScope:ze,useScopedRegle:Be}=Re();function Ve(t,n,r){let i=e(()=>p(t)[n]);return e(()=>r.find(e=>{if(e[n]&&`literal`in e[n]){let t=e[n].literal;if($(t))return h(t._params?.[0])===i.value}})||r.find(e=>w(e[n])&&!Object.keys(e[n]).some(e=>e===`literal`))||{})}function He(e,t,n){return!!e&&w(e[t])&&`$value`in e[t]&&e[t]?.$value===n}function Ue(e,t,n,r){let a=i(e)?f(e.value,`$fields`):f(e,`$fields`),s=u();return _(a,async()=>{await o(),He(a.value,t,n)?s.value=f(e).value:s.value=void 0},{immediate:!0,flush:`pre`}),s}function We(e){return e}function Ge(e,t){return n=>T({...e},t(n))}const Ke={install(e){e.provide(te,xe)}};export{F as InternalRuleType,Ke as RegleVuePlugin,H as createRule,Re as createScopedUseRegle,Ve as createVariant,Ne as defineRegleConfig,We as defineRules,Pe as extendRegleConfig,fe as flatErrors,De as inferRules,je as markStatic,Fe as mergeRegles,He as narrowVariant,Ge as refineRules,R as unwrapRuleParameters,ze as useCollectScope,Te as useRegle,Se as useRootStorage,Ae as useRules,Be as useScopedRegle,Ue as variantToRef};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@regle/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"description": "Headless form validation library for Vue",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"pinia": ">=2.2.5",
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"@types/node": "22.19.1",
|
|
22
22
|
"@vue/devtools-kit": "7.7.9",
|
|
23
23
|
"@vue/test-utils": "2.4.6",
|
|
24
|
-
"prettier": "3.
|
|
25
|
-
"tsdown": "0.16.
|
|
24
|
+
"prettier": "3.7.3",
|
|
25
|
+
"tsdown": "0.16.8",
|
|
26
26
|
"typescript": "5.9.3",
|
|
27
27
|
"vitest": "4.0.13",
|
|
28
28
|
"vue": "3.5.25",
|