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