@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 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
- ruleStatusStorage.value.set(path, { $pending, $valid, $metadata });
237
- return { $pending, $valid, $metadata };
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).concat(externalErrors ?? []);
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(`${path}.${ruleKey}`);
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
- const customMessageRule = customMessages ? customMessages[ruleKey]?.message : void 0;
452
- if (customMessageRule) {
453
- if (typeof customMessageRule === "function") {
454
- message = customMessageRule(state.value, $defaultMetadata.value);
455
- } else {
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 = rule.value.message;
466
+ message = customMessageRule;
465
467
  }
466
468
  }
467
- }
468
- if (isEmpty(message)) {
469
- message = "Error";
470
- console.warn(`No error message defined for ${ruleKey}`);
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
- const validator = scopeState.$validator.value;
511
- let ruleResult = false;
512
- const resultOrPromise = validator(state.value, ...scopeState.$params.value);
513
- if (resultOrPromise instanceof Promise) {
514
- if ($dirty.value && !$pending.value) {
515
- try {
516
- $valid.value = true;
517
- $pending.value = true;
518
- const promiseResult = await resultOrPromise;
519
- if (typeof promiseResult === "boolean") {
520
- ruleResult = promiseResult;
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 } = promiseResult;
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
- } else {
533
- if (resultOrPromise != null) {
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<unknown, 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>;
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 = any, TMetadata extends RegleRuleMetadataDefinition = boolean, TReturn extends TMetadata | Promise<TMetadata> = TMetadata, TAsync extends boolean = TReturn extends Promise<any> ? true : false> = (value: Maybe<TValue>, ...args: any[]) => TReturn;
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[] = [], TMetadata extends RegleRuleMetadataDefinition = boolean> = InlineRuleDeclaration<TValue, TMetadata> | RegleRuleDefinition<TValue, TParams, boolean, TMetadata>;
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>, 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>;
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 InlinePromiseRuleDeclaration, 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 ResolvedRegleBehaviourOptions, type UnrefTuple, type UnwrapRegleUniversalParams, createRule, defineRegleConfig, defineType, unwrapRuleParameters, useRegle };
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<unknown, 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>;
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 = any, TMetadata extends RegleRuleMetadataDefinition = boolean, TReturn extends TMetadata | Promise<TMetadata> = TMetadata, TAsync extends boolean = TReturn extends Promise<any> ? true : false> = (value: Maybe<TValue>, ...args: any[]) => TReturn;
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[] = [], TMetadata extends RegleRuleMetadataDefinition = boolean> = InlineRuleDeclaration<TValue, TMetadata> | RegleRuleDefinition<TValue, TParams, boolean, TMetadata>;
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>, 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>;
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 InlinePromiseRuleDeclaration, 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 ResolvedRegleBehaviourOptions, type UnrefTuple, type UnwrapRegleUniversalParams, createRule, defineRegleConfig, defineType, unwrapRuleParameters, useRegle };
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
- ruleStatusStorage.value.set(path, { $pending, $valid, $metadata });
206
- return { $pending, $valid, $metadata };
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).concat(externalErrors ?? []);
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(`${path}.${ruleKey}`);
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
- const customMessageRule = customMessages ? customMessages[ruleKey]?.message : void 0;
421
- if (customMessageRule) {
422
- if (typeof customMessageRule === "function") {
423
- message = customMessageRule(state.value, $defaultMetadata.value);
424
- } else {
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 = rule.value.message;
435
+ message = customMessageRule;
434
436
  }
435
437
  }
436
- }
437
- if (isEmpty(message)) {
438
- message = "Error";
439
- console.warn(`No error message defined for ${ruleKey}`);
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
- const validator = scopeState.$validator.value;
480
- let ruleResult = false;
481
- const resultOrPromise = validator(state.value, ...scopeState.$params.value);
482
- if (resultOrPromise instanceof Promise) {
483
- if ($dirty.value && !$pending.value) {
484
- try {
485
- $valid.value = true;
486
- $pending.value = true;
487
- const promiseResult = await resultOrPromise;
488
- if (typeof promiseResult === "boolean") {
489
- ruleResult = promiseResult;
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 } = promiseResult;
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
- } else {
502
- if (resultOrPromise != null) {
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();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regle/core",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "description": "Vue form validator",
5
5
  "scripts": {
6
6
  "lint": "eslint --ext .ts --ext .vue .",