From a60f64f74417f811204121f97c16cdb4754afc3b Mon Sep 17 00:00:00 2001 From: Corentin Thomasset Date: Mon, 9 May 2022 17:40:29 +0200 Subject: [PATCH] feat: catch throw on validation --- src/composable/validation.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/composable/validation.ts b/src/composable/validation.ts index 9d1d4242..40df887d 100644 --- a/src/composable/validation.ts +++ b/src/composable/validation.ts @@ -5,6 +5,14 @@ type UseValidationRule = { message: string; }; +function isFalsyOrHasThrown(cb: () => boolean) { + try { + return !cb(); + } catch (_) { + return true; + } +} + export function useValidation({ source, rules }: { source: Ref; rules: UseValidationRule[] }) { const state = reactive<{ message: string; @@ -19,7 +27,7 @@ export function useValidation({ source, rules }: { source: Ref; rules: Use state.status = undefined; for (const rule of rules) { - if (!rule.validator(source.value)) { + if (isFalsyOrHasThrown(() => rule.validator(source.value))) { state.message = rule.message; state.status = 'error'; }