@regle/core 0.0.7 → 0.0.8
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/index.cjs +66 -50
- package/dist/index.d.cts +21 -19
- package/dist/index.d.ts +21 -19
- package/dist/index.js +66 -50
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -233,8 +233,9 @@ function useStorage() {
|
|
|
233
233
|
const $pending = (0, import_vue2.ref)(false);
|
|
234
234
|
const $valid = (0, import_vue2.ref)(true);
|
|
235
235
|
const $metadata = (0, import_vue2.ref)({});
|
|
236
|
-
|
|
237
|
-
|
|
236
|
+
const $validating = (0, import_vue2.ref)(false);
|
|
237
|
+
ruleStatusStorage.value.set(path, { $pending, $valid, $metadata, $validating });
|
|
238
|
+
return { $pending, $valid, $metadata, $validating };
|
|
238
239
|
}
|
|
239
240
|
}
|
|
240
241
|
(0, import_vue2.onScopeDispose)(() => {
|
|
@@ -336,7 +337,13 @@ function extractRulesErrors(rules, externalErrors) {
|
|
|
336
337
|
return rule.$message;
|
|
337
338
|
}
|
|
338
339
|
return null;
|
|
339
|
-
}).filter((msg) => !!msg).
|
|
340
|
+
}).filter((msg) => !!msg).reduce((acc, value) => {
|
|
341
|
+
if (typeof value === "string") {
|
|
342
|
+
return acc?.concat([value]);
|
|
343
|
+
} else {
|
|
344
|
+
return acc?.concat(value);
|
|
345
|
+
}
|
|
346
|
+
}, []).concat(externalErrors ?? []);
|
|
340
347
|
}
|
|
341
348
|
function processFieldErrors(fieldStatus) {
|
|
342
349
|
if (isNestedRulesStatus(fieldStatus)) {
|
|
@@ -427,7 +434,9 @@ function createReactiveRuleStatus({
|
|
|
427
434
|
}) {
|
|
428
435
|
let scope = (0, import_vue5.effectScope)();
|
|
429
436
|
let scopeState;
|
|
430
|
-
const { $pending, $valid, $metadata } = storage.trySetRuleStatusRef(
|
|
437
|
+
const { $pending, $valid, $metadata, $validating } = storage.trySetRuleStatusRef(
|
|
438
|
+
`${path}.${ruleKey}`
|
|
439
|
+
);
|
|
431
440
|
function $watch() {
|
|
432
441
|
scopeState = scope.run(() => {
|
|
433
442
|
const $defaultMetadata = (0, import_vue5.computed)(() => ({
|
|
@@ -448,26 +457,28 @@ function createReactiveRuleStatus({
|
|
|
448
457
|
});
|
|
449
458
|
const $message = (0, import_vue5.computed)(() => {
|
|
450
459
|
let message = "";
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
if (
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
message = customMessageRule;
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
if (isFormRuleDefinition(rule)) {
|
|
460
|
-
if (!(customMessageRule && !rule.value._patched)) {
|
|
461
|
-
if (typeof rule.value.message === "function") {
|
|
462
|
-
message = rule.value.message(state.value, $defaultMetadata.value);
|
|
460
|
+
if ($dirty.value && !$validating.value) {
|
|
461
|
+
const customMessageRule = customMessages ? customMessages[ruleKey]?.message : void 0;
|
|
462
|
+
if (customMessageRule) {
|
|
463
|
+
if (typeof customMessageRule === "function") {
|
|
464
|
+
message = customMessageRule(state.value, $defaultMetadata.value);
|
|
463
465
|
} else {
|
|
464
|
-
message =
|
|
466
|
+
message = customMessageRule;
|
|
465
467
|
}
|
|
466
468
|
}
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
469
|
+
if (isFormRuleDefinition(rule)) {
|
|
470
|
+
if (!(customMessageRule && !rule.value._patched)) {
|
|
471
|
+
if (typeof rule.value.message === "function") {
|
|
472
|
+
message = rule.value.message(state.value, $defaultMetadata.value);
|
|
473
|
+
} else {
|
|
474
|
+
message = rule.value.message;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
if (isEmpty(message)) {
|
|
479
|
+
message = "Error";
|
|
480
|
+
console.warn(`No error message defined for ${ruleKey}`);
|
|
481
|
+
}
|
|
471
482
|
}
|
|
472
483
|
return message;
|
|
473
484
|
});
|
|
@@ -507,43 +518,48 @@ function createReactiveRuleStatus({
|
|
|
507
518
|
deep: true
|
|
508
519
|
});
|
|
509
520
|
async function $validate() {
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
+
try {
|
|
522
|
+
$validating.value = true;
|
|
523
|
+
const validator = scopeState.$validator.value;
|
|
524
|
+
let ruleResult = false;
|
|
525
|
+
const resultOrPromise = validator(state.value, ...scopeState.$params.value);
|
|
526
|
+
if (resultOrPromise instanceof Promise) {
|
|
527
|
+
if ($dirty.value && !$pending.value) {
|
|
528
|
+
try {
|
|
529
|
+
$valid.value = true;
|
|
530
|
+
$pending.value = true;
|
|
531
|
+
const promiseResult = await resultOrPromise;
|
|
532
|
+
if (typeof promiseResult === "boolean") {
|
|
533
|
+
ruleResult = promiseResult;
|
|
534
|
+
} else {
|
|
535
|
+
const { $valid: $valid2, ...rest } = promiseResult;
|
|
536
|
+
ruleResult = $valid2;
|
|
537
|
+
$metadata.value = rest;
|
|
538
|
+
}
|
|
539
|
+
} catch (e) {
|
|
540
|
+
ruleResult = false;
|
|
541
|
+
} finally {
|
|
542
|
+
$pending.value = false;
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
} else {
|
|
546
|
+
if (resultOrPromise != null) {
|
|
547
|
+
if (typeof resultOrPromise === "boolean") {
|
|
548
|
+
ruleResult = resultOrPromise;
|
|
521
549
|
} else {
|
|
522
|
-
const { $valid: $valid2, ...rest } =
|
|
550
|
+
const { $valid: $valid2, ...rest } = resultOrPromise;
|
|
523
551
|
ruleResult = $valid2;
|
|
524
552
|
$metadata.value = rest;
|
|
525
553
|
}
|
|
526
|
-
} catch (e) {
|
|
527
|
-
ruleResult = false;
|
|
528
|
-
} finally {
|
|
529
|
-
$pending.value = false;
|
|
530
554
|
}
|
|
531
555
|
}
|
|
532
|
-
|
|
533
|
-
if (
|
|
534
|
-
if (typeof resultOrPromise === "boolean") {
|
|
535
|
-
ruleResult = resultOrPromise;
|
|
536
|
-
} else {
|
|
537
|
-
const { $valid: $valid2, ...rest } = resultOrPromise;
|
|
538
|
-
ruleResult = $valid2;
|
|
539
|
-
$metadata.value = rest;
|
|
540
|
-
}
|
|
556
|
+
$valid.value = ruleResult;
|
|
557
|
+
if (options.$externalErrors) {
|
|
541
558
|
}
|
|
559
|
+
return ruleResult;
|
|
560
|
+
} finally {
|
|
561
|
+
$validating.value = false;
|
|
542
562
|
}
|
|
543
|
-
$valid.value = ruleResult;
|
|
544
|
-
if (options.$externalErrors) {
|
|
545
|
-
}
|
|
546
|
-
return ruleResult;
|
|
547
563
|
}
|
|
548
564
|
function $unwatch() {
|
|
549
565
|
$unwatchState();
|
package/dist/index.d.cts
CHANGED
|
@@ -38,7 +38,7 @@ type UnwrapRegleUniversalParams<T extends ParamDecl[] = [], F = CreateFn<T>> = [
|
|
|
38
38
|
*/
|
|
39
39
|
interface RegleInternalRuleDefs<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> {
|
|
40
40
|
_validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
|
|
41
|
-
_message: string | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string);
|
|
41
|
+
_message: string | string[] | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string | string[]);
|
|
42
42
|
_active?: boolean | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => boolean);
|
|
43
43
|
_type?: string;
|
|
44
44
|
_patched: boolean;
|
|
@@ -55,7 +55,7 @@ declare enum InternalRuleType {
|
|
|
55
55
|
* */
|
|
56
56
|
interface RegleRuleDefinition<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetaData extends RegleRuleMetadataDefinition = boolean> extends RegleInternalRuleDefs<TValue, TParams, TAsync, TMetaData> {
|
|
57
57
|
validator: RegleRuleDefinitionProcessor<TValue, TParams, TAsync extends false ? TMetaData : Promise<TMetaData>>;
|
|
58
|
-
message: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetaData>, string>;
|
|
58
|
+
message: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetaData>, string | string[]>;
|
|
59
59
|
active: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetaData>, boolean>;
|
|
60
60
|
type?: string;
|
|
61
61
|
exec: (value: Maybe<TValue>) => TAsync extends false ? TMetaData : Promise<TMetaData>;
|
|
@@ -108,7 +108,7 @@ type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync e
|
|
|
108
108
|
*/
|
|
109
109
|
type InferRegleRule<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetaData extends RegleRuleMetadataDefinition = boolean> = [TParams] extends [[]] ? RegleRuleDefinition<TValue, TParams, TAsync, TMetaData> : RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetaData>;
|
|
110
110
|
type RegleRuleDefinitionProcessor<TValue extends any = any, TParams extends any[] = [], TReturn = any> = (value: Maybe<TValue>, ...params: TParams) => TReturn;
|
|
111
|
-
type RegleRuleDefinitionWithMetadataProcessor<TValue extends any, TMetadata extends RegleRuleMetadataConsumer<any, any>, TReturn = any> = (value: Maybe<TValue>, metadata: TMetadata) => TReturn;
|
|
111
|
+
type RegleRuleDefinitionWithMetadataProcessor<TValue extends any, TMetadata extends RegleRuleMetadataConsumer<any, any>, TReturn = any> = ((value: Maybe<TValue>, metadata: TMetadata) => TReturn) | TReturn;
|
|
112
112
|
type RegleCollectionRuleDefinition<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = (RegleRuleDecl<NonNullable<TValue>, TCustomRules> & {
|
|
113
113
|
$each: RegleFormPropertyType<ArrayElement<TValue>, TCustomRules>;
|
|
114
114
|
}) | {
|
|
@@ -125,7 +125,7 @@ interface RegleRuleInit<TValue extends any, TParams extends any[], TReturn exten
|
|
|
125
125
|
params: TParams;
|
|
126
126
|
};
|
|
127
127
|
validator: (value: Maybe<TValue>, ...args: TParams) => TReturn;
|
|
128
|
-
message: string | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string);
|
|
128
|
+
message: string | string[] | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string | string[]);
|
|
129
129
|
active?: boolean | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => boolean);
|
|
130
130
|
}
|
|
131
131
|
/**
|
|
@@ -134,7 +134,7 @@ interface RegleRuleInit<TValue extends any, TParams extends any[], TReturn exten
|
|
|
134
134
|
*/
|
|
135
135
|
interface RegleRuleCore<TValue extends any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> {
|
|
136
136
|
validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
|
|
137
|
-
message: string | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string);
|
|
137
|
+
message: string | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string | string[]);
|
|
138
138
|
active?: boolean | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => boolean);
|
|
139
139
|
type?: string;
|
|
140
140
|
}
|
|
@@ -144,7 +144,7 @@ interface RegleRuleCore<TValue extends any, TParams extends any[] = [], TAsync e
|
|
|
144
144
|
*/
|
|
145
145
|
interface $InternalRegleRuleInit {
|
|
146
146
|
validator: (value: any, ...args: any[]) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>;
|
|
147
|
-
message: string | ((value: any, metadata: $InternalRegleRuleMetadataConsumer) => string);
|
|
147
|
+
message: string | ((value: any, metadata: $InternalRegleRuleMetadataConsumer) => string | string[]);
|
|
148
148
|
active?: boolean | ((value: any, metadata: $InternalRegleRuleMetadataConsumer) => boolean);
|
|
149
149
|
type?: string;
|
|
150
150
|
}
|
|
@@ -186,6 +186,12 @@ type AllRulesDeclarations = CustomRulesDeclarationTree & DefaultValidators;
|
|
|
186
186
|
type ReglePartialValidationTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
187
187
|
[TKey in keyof TForm]?: RegleFormPropertyType<TForm[TKey], TCustomRules>;
|
|
188
188
|
};
|
|
189
|
+
/**
|
|
190
|
+
* @public
|
|
191
|
+
*/
|
|
192
|
+
type RegleValidationTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
193
|
+
[TKey in keyof TForm]: RegleFormPropertyType<TForm[TKey], TCustomRules>;
|
|
194
|
+
};
|
|
189
195
|
/**
|
|
190
196
|
* @internal
|
|
191
197
|
* @reference {@link ReglePartialValidationTree}
|
|
@@ -196,7 +202,7 @@ type $InternalReglePartialValidationTree = {
|
|
|
196
202
|
/**
|
|
197
203
|
* @public
|
|
198
204
|
*/
|
|
199
|
-
type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue>] extends [never] ? RegleRuleDecl<
|
|
205
|
+
type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue>] extends [never] ? RegleRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Array<any> ? RegleCollectionRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Date ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends File ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends Record<string, any> ? ReglePartialValidationTree<NonNullable<TValue>, TCustomRules> : RegleRuleDecl<NonNullable<TValue>, TCustomRules>;
|
|
200
206
|
/**
|
|
201
207
|
* @internal
|
|
202
208
|
* @reference {@link RegleFormPropertyType}
|
|
@@ -207,13 +213,13 @@ type $InternalFormPropertyTypes = $InternalRegleRuleDecl | $InternalRegleCollect
|
|
|
207
213
|
* Rule tree for a form property
|
|
208
214
|
*/
|
|
209
215
|
type RegleRuleDecl<TValue extends any = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
210
|
-
[TKey in keyof TCustomRules]?: TCustomRules[TKey] extends RegleRuleWithParamsDefinition<any, infer TParams> ? RegleRuleDefinition<TValue, TParams> : FormRuleDeclaration<TValue, any>;
|
|
216
|
+
[TKey in keyof TCustomRules]?: TCustomRules[TKey] extends RegleRuleWithParamsDefinition<any, infer TParams> ? RegleRuleDefinition<TValue, TParams> : FormRuleDeclaration<TValue, any, any, any>;
|
|
211
217
|
};
|
|
212
218
|
/**
|
|
213
219
|
* @internal
|
|
214
220
|
* @reference {@link RegleRuleDecl}
|
|
215
221
|
*/
|
|
216
|
-
type $InternalRegleRuleDecl = Record<string, FormRuleDeclaration<any, any>>;
|
|
222
|
+
type $InternalRegleRuleDecl = Record<string, FormRuleDeclaration<any, any, any, any>>;
|
|
217
223
|
/**
|
|
218
224
|
* @public
|
|
219
225
|
*/
|
|
@@ -233,16 +239,12 @@ type $InternalRegleCollectionRuleDecl = $InternalRegleRuleDecl & {
|
|
|
233
239
|
/**
|
|
234
240
|
* @public
|
|
235
241
|
*/
|
|
236
|
-
type InlineRuleDeclaration<TValue extends any
|
|
237
|
-
/**
|
|
238
|
-
* @public
|
|
239
|
-
*/
|
|
240
|
-
type InlinePromiseRuleDeclaration<TValue extends any = any, TMetadata extends RegleRuleMetadataDefinition = boolean> = (value: Maybe<TValue>, ...args: any[]) => Promise<TMetadata>;
|
|
242
|
+
type InlineRuleDeclaration<TValue extends any, TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition, TAsync extends boolean = TReturn extends Promise<any> ? true : false> = (value: Maybe<TValue>, ...args: any[]) => TReturn;
|
|
241
243
|
/**
|
|
242
244
|
* @public
|
|
243
245
|
* Regroup inline and registered rules
|
|
244
246
|
* */
|
|
245
|
-
type FormRuleDeclaration<TValue extends any, TParams extends any[]
|
|
247
|
+
type FormRuleDeclaration<TValue extends any, TParams extends any[], TMetadata extends RegleRuleMetadataDefinition, TReturn extends TMetadata | Promise<TMetadata>, TAsync extends boolean = TReturn extends Promise<any> ? true : false> = InlineRuleDeclaration<TValue, TReturn, TMetadata, TAsync> | RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
|
|
246
248
|
|
|
247
249
|
type RegleErrorTree<TRules extends ReglePartialValidationTree<any, any>> = {
|
|
248
250
|
readonly [K in keyof TRules]: RegleValidationErrors<TRules[K]>;
|
|
@@ -338,7 +340,7 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
338
340
|
*/
|
|
339
341
|
type RegleRuleStatus<TValue = any, TParams extends any[] = any[]> = {
|
|
340
342
|
readonly $type: string;
|
|
341
|
-
readonly $message: string;
|
|
343
|
+
readonly $message: string | string[];
|
|
342
344
|
readonly $active: boolean;
|
|
343
345
|
readonly $valid: boolean;
|
|
344
346
|
readonly $pending: boolean;
|
|
@@ -354,7 +356,7 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[]> = {
|
|
|
354
356
|
*/
|
|
355
357
|
interface $InternalRegleRuleStatus {
|
|
356
358
|
$type: string;
|
|
357
|
-
$message: string;
|
|
359
|
+
$message: string | string[];
|
|
358
360
|
$active: boolean;
|
|
359
361
|
$valid: boolean;
|
|
360
362
|
$pending: boolean;
|
|
@@ -690,7 +692,7 @@ type ResolvedRegleBehaviourOptions = DeepMaybeRef$1<RequiredDeep<RegleBehaviourO
|
|
|
690
692
|
* })
|
|
691
693
|
* ```
|
|
692
694
|
*/
|
|
693
|
-
declare function createRule<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>,
|
|
695
|
+
declare function createRule<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn, TAsync extends boolean = TReturn extends Promise<any> ? true : false>(definition: RegleRuleInit<TValue, TParams, TReturn, TMetadata, TAsync>): InferRegleRule<TValue, TParams, TAsync, TMetadata>;
|
|
694
696
|
declare function defineType<TValue extends any = unknown, TParams extends any[] = []>(ruleName: string): {
|
|
695
697
|
value: TValue;
|
|
696
698
|
params: TParams;
|
|
@@ -716,4 +718,4 @@ declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarat
|
|
|
716
718
|
options?: RegleBehaviourOptions;
|
|
717
719
|
}): <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<TState, Partial<AllRulesDeclarations> & TCustomRules>>(state: vue.Ref<TState> | DeepReactiveState<TState>, rulesFactory: vue.ComputedRef<TRules> | (() => TRules), options?: (Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<TState>) | undefined) => Regle<TState, TRules>;
|
|
718
720
|
|
|
719
|
-
export { type $InternalExternalRegleErrors, type $InternalFormPropertyTypes, type $InternalRegleCollectionRuleDecl, type $InternalRegleCollectionStatus, type $InternalRegleErrors, type $InternalRegleFieldStatus, type $InternalReglePartialValidationTree, type $InternalRegleRuleDecl, type $InternalRegleRuleDefinition, type $InternalRegleRuleInit, type $InternalRegleRuleMetadataConsumer, type $InternalRegleRuleStatus, type $InternalRegleStatus, type $InternalRegleStatusType, type AllRulesDeclarations, type ArrayElement, type CustomRulesDeclarationTree, type DataType, type DeepMaybeRef, type ExcludeByType, type ExcludeFromTuple, type FormRuleDeclaration, type InferRegleRule, type InferRegleStatusType, type
|
|
721
|
+
export { type $InternalExternalRegleErrors, type $InternalFormPropertyTypes, type $InternalRegleCollectionRuleDecl, type $InternalRegleCollectionStatus, type $InternalRegleErrors, type $InternalRegleFieldStatus, type $InternalReglePartialValidationTree, type $InternalRegleRuleDecl, type $InternalRegleRuleDefinition, type $InternalRegleRuleInit, type $InternalRegleRuleMetadataConsumer, type $InternalRegleRuleStatus, type $InternalRegleStatus, type $InternalRegleStatusType, type AllRulesDeclarations, type ArrayElement, type CustomRulesDeclarationTree, type DataType, type DeepMaybeRef, type ExcludeByType, type ExcludeFromTuple, type FormRuleDeclaration, type InferRegleRule, type InferRegleStatusType, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type MaybeNull, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationTree, type ResolvedRegleBehaviourOptions, type UnrefTuple, type UnwrapRegleUniversalParams, createRule, defineRegleConfig, defineType, unwrapRuleParameters, useRegle };
|
package/dist/index.d.ts
CHANGED
|
@@ -38,7 +38,7 @@ type UnwrapRegleUniversalParams<T extends ParamDecl[] = [], F = CreateFn<T>> = [
|
|
|
38
38
|
*/
|
|
39
39
|
interface RegleInternalRuleDefs<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> {
|
|
40
40
|
_validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
|
|
41
|
-
_message: string | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string);
|
|
41
|
+
_message: string | string[] | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string | string[]);
|
|
42
42
|
_active?: boolean | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => boolean);
|
|
43
43
|
_type?: string;
|
|
44
44
|
_patched: boolean;
|
|
@@ -55,7 +55,7 @@ declare enum InternalRuleType {
|
|
|
55
55
|
* */
|
|
56
56
|
interface RegleRuleDefinition<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetaData extends RegleRuleMetadataDefinition = boolean> extends RegleInternalRuleDefs<TValue, TParams, TAsync, TMetaData> {
|
|
57
57
|
validator: RegleRuleDefinitionProcessor<TValue, TParams, TAsync extends false ? TMetaData : Promise<TMetaData>>;
|
|
58
|
-
message: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetaData>, string>;
|
|
58
|
+
message: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetaData>, string | string[]>;
|
|
59
59
|
active: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetaData>, boolean>;
|
|
60
60
|
type?: string;
|
|
61
61
|
exec: (value: Maybe<TValue>) => TAsync extends false ? TMetaData : Promise<TMetaData>;
|
|
@@ -108,7 +108,7 @@ type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync e
|
|
|
108
108
|
*/
|
|
109
109
|
type InferRegleRule<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetaData extends RegleRuleMetadataDefinition = boolean> = [TParams] extends [[]] ? RegleRuleDefinition<TValue, TParams, TAsync, TMetaData> : RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetaData>;
|
|
110
110
|
type RegleRuleDefinitionProcessor<TValue extends any = any, TParams extends any[] = [], TReturn = any> = (value: Maybe<TValue>, ...params: TParams) => TReturn;
|
|
111
|
-
type RegleRuleDefinitionWithMetadataProcessor<TValue extends any, TMetadata extends RegleRuleMetadataConsumer<any, any>, TReturn = any> = (value: Maybe<TValue>, metadata: TMetadata) => TReturn;
|
|
111
|
+
type RegleRuleDefinitionWithMetadataProcessor<TValue extends any, TMetadata extends RegleRuleMetadataConsumer<any, any>, TReturn = any> = ((value: Maybe<TValue>, metadata: TMetadata) => TReturn) | TReturn;
|
|
112
112
|
type RegleCollectionRuleDefinition<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = (RegleRuleDecl<NonNullable<TValue>, TCustomRules> & {
|
|
113
113
|
$each: RegleFormPropertyType<ArrayElement<TValue>, TCustomRules>;
|
|
114
114
|
}) | {
|
|
@@ -125,7 +125,7 @@ interface RegleRuleInit<TValue extends any, TParams extends any[], TReturn exten
|
|
|
125
125
|
params: TParams;
|
|
126
126
|
};
|
|
127
127
|
validator: (value: Maybe<TValue>, ...args: TParams) => TReturn;
|
|
128
|
-
message: string | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string);
|
|
128
|
+
message: string | string[] | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string | string[]);
|
|
129
129
|
active?: boolean | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => boolean);
|
|
130
130
|
}
|
|
131
131
|
/**
|
|
@@ -134,7 +134,7 @@ interface RegleRuleInit<TValue extends any, TParams extends any[], TReturn exten
|
|
|
134
134
|
*/
|
|
135
135
|
interface RegleRuleCore<TValue extends any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> {
|
|
136
136
|
validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
|
|
137
|
-
message: string | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string);
|
|
137
|
+
message: string | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string | string[]);
|
|
138
138
|
active?: boolean | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => boolean);
|
|
139
139
|
type?: string;
|
|
140
140
|
}
|
|
@@ -144,7 +144,7 @@ interface RegleRuleCore<TValue extends any, TParams extends any[] = [], TAsync e
|
|
|
144
144
|
*/
|
|
145
145
|
interface $InternalRegleRuleInit {
|
|
146
146
|
validator: (value: any, ...args: any[]) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>;
|
|
147
|
-
message: string | ((value: any, metadata: $InternalRegleRuleMetadataConsumer) => string);
|
|
147
|
+
message: string | ((value: any, metadata: $InternalRegleRuleMetadataConsumer) => string | string[]);
|
|
148
148
|
active?: boolean | ((value: any, metadata: $InternalRegleRuleMetadataConsumer) => boolean);
|
|
149
149
|
type?: string;
|
|
150
150
|
}
|
|
@@ -186,6 +186,12 @@ type AllRulesDeclarations = CustomRulesDeclarationTree & DefaultValidators;
|
|
|
186
186
|
type ReglePartialValidationTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
187
187
|
[TKey in keyof TForm]?: RegleFormPropertyType<TForm[TKey], TCustomRules>;
|
|
188
188
|
};
|
|
189
|
+
/**
|
|
190
|
+
* @public
|
|
191
|
+
*/
|
|
192
|
+
type RegleValidationTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
193
|
+
[TKey in keyof TForm]: RegleFormPropertyType<TForm[TKey], TCustomRules>;
|
|
194
|
+
};
|
|
189
195
|
/**
|
|
190
196
|
* @internal
|
|
191
197
|
* @reference {@link ReglePartialValidationTree}
|
|
@@ -196,7 +202,7 @@ type $InternalReglePartialValidationTree = {
|
|
|
196
202
|
/**
|
|
197
203
|
* @public
|
|
198
204
|
*/
|
|
199
|
-
type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue>] extends [never] ? RegleRuleDecl<
|
|
205
|
+
type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue>] extends [never] ? RegleRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Array<any> ? RegleCollectionRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Date ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends File ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends Record<string, any> ? ReglePartialValidationTree<NonNullable<TValue>, TCustomRules> : RegleRuleDecl<NonNullable<TValue>, TCustomRules>;
|
|
200
206
|
/**
|
|
201
207
|
* @internal
|
|
202
208
|
* @reference {@link RegleFormPropertyType}
|
|
@@ -207,13 +213,13 @@ type $InternalFormPropertyTypes = $InternalRegleRuleDecl | $InternalRegleCollect
|
|
|
207
213
|
* Rule tree for a form property
|
|
208
214
|
*/
|
|
209
215
|
type RegleRuleDecl<TValue extends any = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
|
|
210
|
-
[TKey in keyof TCustomRules]?: TCustomRules[TKey] extends RegleRuleWithParamsDefinition<any, infer TParams> ? RegleRuleDefinition<TValue, TParams> : FormRuleDeclaration<TValue, any>;
|
|
216
|
+
[TKey in keyof TCustomRules]?: TCustomRules[TKey] extends RegleRuleWithParamsDefinition<any, infer TParams> ? RegleRuleDefinition<TValue, TParams> : FormRuleDeclaration<TValue, any, any, any>;
|
|
211
217
|
};
|
|
212
218
|
/**
|
|
213
219
|
* @internal
|
|
214
220
|
* @reference {@link RegleRuleDecl}
|
|
215
221
|
*/
|
|
216
|
-
type $InternalRegleRuleDecl = Record<string, FormRuleDeclaration<any, any>>;
|
|
222
|
+
type $InternalRegleRuleDecl = Record<string, FormRuleDeclaration<any, any, any, any>>;
|
|
217
223
|
/**
|
|
218
224
|
* @public
|
|
219
225
|
*/
|
|
@@ -233,16 +239,12 @@ type $InternalRegleCollectionRuleDecl = $InternalRegleRuleDecl & {
|
|
|
233
239
|
/**
|
|
234
240
|
* @public
|
|
235
241
|
*/
|
|
236
|
-
type InlineRuleDeclaration<TValue extends any
|
|
237
|
-
/**
|
|
238
|
-
* @public
|
|
239
|
-
*/
|
|
240
|
-
type InlinePromiseRuleDeclaration<TValue extends any = any, TMetadata extends RegleRuleMetadataDefinition = boolean> = (value: Maybe<TValue>, ...args: any[]) => Promise<TMetadata>;
|
|
242
|
+
type InlineRuleDeclaration<TValue extends any, TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition, TAsync extends boolean = TReturn extends Promise<any> ? true : false> = (value: Maybe<TValue>, ...args: any[]) => TReturn;
|
|
241
243
|
/**
|
|
242
244
|
* @public
|
|
243
245
|
* Regroup inline and registered rules
|
|
244
246
|
* */
|
|
245
|
-
type FormRuleDeclaration<TValue extends any, TParams extends any[]
|
|
247
|
+
type FormRuleDeclaration<TValue extends any, TParams extends any[], TMetadata extends RegleRuleMetadataDefinition, TReturn extends TMetadata | Promise<TMetadata>, TAsync extends boolean = TReturn extends Promise<any> ? true : false> = InlineRuleDeclaration<TValue, TReturn, TMetadata, TAsync> | RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
|
|
246
248
|
|
|
247
249
|
type RegleErrorTree<TRules extends ReglePartialValidationTree<any, any>> = {
|
|
248
250
|
readonly [K in keyof TRules]: RegleValidationErrors<TRules[K]>;
|
|
@@ -338,7 +340,7 @@ interface RegleCommonStatus<TValue = any> {
|
|
|
338
340
|
*/
|
|
339
341
|
type RegleRuleStatus<TValue = any, TParams extends any[] = any[]> = {
|
|
340
342
|
readonly $type: string;
|
|
341
|
-
readonly $message: string;
|
|
343
|
+
readonly $message: string | string[];
|
|
342
344
|
readonly $active: boolean;
|
|
343
345
|
readonly $valid: boolean;
|
|
344
346
|
readonly $pending: boolean;
|
|
@@ -354,7 +356,7 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[]> = {
|
|
|
354
356
|
*/
|
|
355
357
|
interface $InternalRegleRuleStatus {
|
|
356
358
|
$type: string;
|
|
357
|
-
$message: string;
|
|
359
|
+
$message: string | string[];
|
|
358
360
|
$active: boolean;
|
|
359
361
|
$valid: boolean;
|
|
360
362
|
$pending: boolean;
|
|
@@ -690,7 +692,7 @@ type ResolvedRegleBehaviourOptions = DeepMaybeRef$1<RequiredDeep<RegleBehaviourO
|
|
|
690
692
|
* })
|
|
691
693
|
* ```
|
|
692
694
|
*/
|
|
693
|
-
declare function createRule<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>,
|
|
695
|
+
declare function createRule<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn, TAsync extends boolean = TReturn extends Promise<any> ? true : false>(definition: RegleRuleInit<TValue, TParams, TReturn, TMetadata, TAsync>): InferRegleRule<TValue, TParams, TAsync, TMetadata>;
|
|
694
696
|
declare function defineType<TValue extends any = unknown, TParams extends any[] = []>(ruleName: string): {
|
|
695
697
|
value: TValue;
|
|
696
698
|
params: TParams;
|
|
@@ -716,4 +718,4 @@ declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarat
|
|
|
716
718
|
options?: RegleBehaviourOptions;
|
|
717
719
|
}): <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<TState, Partial<AllRulesDeclarations> & TCustomRules>>(state: vue.Ref<TState> | DeepReactiveState<TState>, rulesFactory: vue.ComputedRef<TRules> | (() => TRules), options?: (Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<TState>) | undefined) => Regle<TState, TRules>;
|
|
718
720
|
|
|
719
|
-
export { type $InternalExternalRegleErrors, type $InternalFormPropertyTypes, type $InternalRegleCollectionRuleDecl, type $InternalRegleCollectionStatus, type $InternalRegleErrors, type $InternalRegleFieldStatus, type $InternalReglePartialValidationTree, type $InternalRegleRuleDecl, type $InternalRegleRuleDefinition, type $InternalRegleRuleInit, type $InternalRegleRuleMetadataConsumer, type $InternalRegleRuleStatus, type $InternalRegleStatus, type $InternalRegleStatusType, type AllRulesDeclarations, type ArrayElement, type CustomRulesDeclarationTree, type DataType, type DeepMaybeRef, type ExcludeByType, type ExcludeFromTuple, type FormRuleDeclaration, type InferRegleRule, type InferRegleStatusType, type
|
|
721
|
+
export { type $InternalExternalRegleErrors, type $InternalFormPropertyTypes, type $InternalRegleCollectionRuleDecl, type $InternalRegleCollectionStatus, type $InternalRegleErrors, type $InternalRegleFieldStatus, type $InternalReglePartialValidationTree, type $InternalRegleRuleDecl, type $InternalRegleRuleDefinition, type $InternalRegleRuleInit, type $InternalRegleRuleMetadataConsumer, type $InternalRegleRuleStatus, type $InternalRegleStatus, type $InternalRegleStatusType, type AllRulesDeclarations, type ArrayElement, type CustomRulesDeclarationTree, type DataType, type DeepMaybeRef, type ExcludeByType, type ExcludeFromTuple, type FormRuleDeclaration, type InferRegleRule, type InferRegleStatusType, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type MaybeNull, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type ReglePartialValidationTree, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleUniversalParams, type RegleValidationErrors, type RegleValidationTree, type ResolvedRegleBehaviourOptions, type UnrefTuple, type UnwrapRegleUniversalParams, createRule, defineRegleConfig, defineType, unwrapRuleParameters, useRegle };
|
package/dist/index.js
CHANGED
|
@@ -202,8 +202,9 @@ function useStorage() {
|
|
|
202
202
|
const $pending = ref(false);
|
|
203
203
|
const $valid = ref(true);
|
|
204
204
|
const $metadata = ref({});
|
|
205
|
-
|
|
206
|
-
|
|
205
|
+
const $validating = ref(false);
|
|
206
|
+
ruleStatusStorage.value.set(path, { $pending, $valid, $metadata, $validating });
|
|
207
|
+
return { $pending, $valid, $metadata, $validating };
|
|
207
208
|
}
|
|
208
209
|
}
|
|
209
210
|
onScopeDispose(() => {
|
|
@@ -305,7 +306,13 @@ function extractRulesErrors(rules, externalErrors) {
|
|
|
305
306
|
return rule.$message;
|
|
306
307
|
}
|
|
307
308
|
return null;
|
|
308
|
-
}).filter((msg) => !!msg).
|
|
309
|
+
}).filter((msg) => !!msg).reduce((acc, value) => {
|
|
310
|
+
if (typeof value === "string") {
|
|
311
|
+
return acc?.concat([value]);
|
|
312
|
+
} else {
|
|
313
|
+
return acc?.concat(value);
|
|
314
|
+
}
|
|
315
|
+
}, []).concat(externalErrors ?? []);
|
|
309
316
|
}
|
|
310
317
|
function processFieldErrors(fieldStatus) {
|
|
311
318
|
if (isNestedRulesStatus(fieldStatus)) {
|
|
@@ -396,7 +403,9 @@ function createReactiveRuleStatus({
|
|
|
396
403
|
}) {
|
|
397
404
|
let scope = effectScope2();
|
|
398
405
|
let scopeState;
|
|
399
|
-
const { $pending, $valid, $metadata } = storage.trySetRuleStatusRef(
|
|
406
|
+
const { $pending, $valid, $metadata, $validating } = storage.trySetRuleStatusRef(
|
|
407
|
+
`${path}.${ruleKey}`
|
|
408
|
+
);
|
|
400
409
|
function $watch() {
|
|
401
410
|
scopeState = scope.run(() => {
|
|
402
411
|
const $defaultMetadata = computed2(() => ({
|
|
@@ -417,26 +426,28 @@ function createReactiveRuleStatus({
|
|
|
417
426
|
});
|
|
418
427
|
const $message = computed2(() => {
|
|
419
428
|
let message = "";
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
if (
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
message = customMessageRule;
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
if (isFormRuleDefinition(rule)) {
|
|
429
|
-
if (!(customMessageRule && !rule.value._patched)) {
|
|
430
|
-
if (typeof rule.value.message === "function") {
|
|
431
|
-
message = rule.value.message(state.value, $defaultMetadata.value);
|
|
429
|
+
if ($dirty.value && !$validating.value) {
|
|
430
|
+
const customMessageRule = customMessages ? customMessages[ruleKey]?.message : void 0;
|
|
431
|
+
if (customMessageRule) {
|
|
432
|
+
if (typeof customMessageRule === "function") {
|
|
433
|
+
message = customMessageRule(state.value, $defaultMetadata.value);
|
|
432
434
|
} else {
|
|
433
|
-
message =
|
|
435
|
+
message = customMessageRule;
|
|
434
436
|
}
|
|
435
437
|
}
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
438
|
+
if (isFormRuleDefinition(rule)) {
|
|
439
|
+
if (!(customMessageRule && !rule.value._patched)) {
|
|
440
|
+
if (typeof rule.value.message === "function") {
|
|
441
|
+
message = rule.value.message(state.value, $defaultMetadata.value);
|
|
442
|
+
} else {
|
|
443
|
+
message = rule.value.message;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
if (isEmpty(message)) {
|
|
448
|
+
message = "Error";
|
|
449
|
+
console.warn(`No error message defined for ${ruleKey}`);
|
|
450
|
+
}
|
|
440
451
|
}
|
|
441
452
|
return message;
|
|
442
453
|
});
|
|
@@ -476,43 +487,48 @@ function createReactiveRuleStatus({
|
|
|
476
487
|
deep: true
|
|
477
488
|
});
|
|
478
489
|
async function $validate() {
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
+
try {
|
|
491
|
+
$validating.value = true;
|
|
492
|
+
const validator = scopeState.$validator.value;
|
|
493
|
+
let ruleResult = false;
|
|
494
|
+
const resultOrPromise = validator(state.value, ...scopeState.$params.value);
|
|
495
|
+
if (resultOrPromise instanceof Promise) {
|
|
496
|
+
if ($dirty.value && !$pending.value) {
|
|
497
|
+
try {
|
|
498
|
+
$valid.value = true;
|
|
499
|
+
$pending.value = true;
|
|
500
|
+
const promiseResult = await resultOrPromise;
|
|
501
|
+
if (typeof promiseResult === "boolean") {
|
|
502
|
+
ruleResult = promiseResult;
|
|
503
|
+
} else {
|
|
504
|
+
const { $valid: $valid2, ...rest } = promiseResult;
|
|
505
|
+
ruleResult = $valid2;
|
|
506
|
+
$metadata.value = rest;
|
|
507
|
+
}
|
|
508
|
+
} catch (e) {
|
|
509
|
+
ruleResult = false;
|
|
510
|
+
} finally {
|
|
511
|
+
$pending.value = false;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
} else {
|
|
515
|
+
if (resultOrPromise != null) {
|
|
516
|
+
if (typeof resultOrPromise === "boolean") {
|
|
517
|
+
ruleResult = resultOrPromise;
|
|
490
518
|
} else {
|
|
491
|
-
const { $valid: $valid2, ...rest } =
|
|
519
|
+
const { $valid: $valid2, ...rest } = resultOrPromise;
|
|
492
520
|
ruleResult = $valid2;
|
|
493
521
|
$metadata.value = rest;
|
|
494
522
|
}
|
|
495
|
-
} catch (e) {
|
|
496
|
-
ruleResult = false;
|
|
497
|
-
} finally {
|
|
498
|
-
$pending.value = false;
|
|
499
523
|
}
|
|
500
524
|
}
|
|
501
|
-
|
|
502
|
-
if (
|
|
503
|
-
if (typeof resultOrPromise === "boolean") {
|
|
504
|
-
ruleResult = resultOrPromise;
|
|
505
|
-
} else {
|
|
506
|
-
const { $valid: $valid2, ...rest } = resultOrPromise;
|
|
507
|
-
ruleResult = $valid2;
|
|
508
|
-
$metadata.value = rest;
|
|
509
|
-
}
|
|
525
|
+
$valid.value = ruleResult;
|
|
526
|
+
if (options.$externalErrors) {
|
|
510
527
|
}
|
|
528
|
+
return ruleResult;
|
|
529
|
+
} finally {
|
|
530
|
+
$validating.value = false;
|
|
511
531
|
}
|
|
512
|
-
$valid.value = ruleResult;
|
|
513
|
-
if (options.$externalErrors) {
|
|
514
|
-
}
|
|
515
|
-
return ruleResult;
|
|
516
532
|
}
|
|
517
533
|
function $unwatch() {
|
|
518
534
|
$unwatchState();
|