feat: catch throw on validation
This commit is contained in:
		
							parent
							
								
									b89db3c8d0
								
							
						
					
					
						commit
						a60f64f744
					
				| @ -5,6 +5,14 @@ type UseValidationRule<T> = { | |||||||
|   message: string; |   message: string; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | function isFalsyOrHasThrown(cb: () => boolean) { | ||||||
|  |   try { | ||||||
|  |     return !cb(); | ||||||
|  |   } catch (_) { | ||||||
|  |     return true; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| export function useValidation<T>({ source, rules }: { source: Ref<T>; rules: UseValidationRule<T>[] }) { | export function useValidation<T>({ source, rules }: { source: Ref<T>; rules: UseValidationRule<T>[] }) { | ||||||
|   const state = reactive<{ |   const state = reactive<{ | ||||||
|     message: string; |     message: string; | ||||||
| @ -19,7 +27,7 @@ export function useValidation<T>({ source, rules }: { source: Ref<T>; rules: Use | |||||||
|     state.status = undefined; |     state.status = undefined; | ||||||
| 
 | 
 | ||||||
|     for (const rule of rules) { |     for (const rule of rules) { | ||||||
|       if (!rule.validator(source.value)) { |       if (isFalsyOrHasThrown(() => rule.validator(source.value))) { | ||||||
|         state.message = rule.message; |         state.message = rule.message; | ||||||
|         state.status = 'error'; |         state.status = 'error'; | ||||||
|       } |       } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user