From 900d2ea7145feebd344aa2f77363b5a05a57f4a4 Mon Sep 17 00:00:00 2001 From: Klemek Date: Fri, 10 Jul 2026 10:43:47 +0200 Subject: [PATCH] feat: validate cron syntax --- README.md | 2 +- resources/ts/components/CronInput.vue | 23 ++++++++++++++++++++--- resources/ts/components/TaskItem.vue | 10 +++++++--- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5200769..5bb855d 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ## TODO - [ ] auto refresh task completion -- [ ] validate cron string +- [x] validate cron string - [ ] clone task - [ ] delete task - [ ] list per URL diff --git a/resources/ts/components/CronInput.vue b/resources/ts/components/CronInput.vue index c3e156b..acac6be 100644 --- a/resources/ts/components/CronInput.vue +++ b/resources/ts/components/CronInput.vue @@ -1,7 +1,10 @@ diff --git a/resources/ts/components/TaskItem.vue b/resources/ts/components/TaskItem.vue index e0e66c5..ea70b9d 100644 --- a/resources/ts/components/TaskItem.vue +++ b/resources/ts/components/TaskItem.vue @@ -18,9 +18,13 @@ const checked = computed(() => { if (task.value.reset_cron === null) { return true; } - const interval = CronExpressionParser.parse(task.value.reset_cron, {currentDate: task.value.check_date}); - const nextDate = interval.next(); - return nextDate.getTime() > (new Date()).getTime(); + try { + const interval = CronExpressionParser.parse(task.value.reset_cron, {currentDate: task.value.check_date}); + const nextDate = interval.next(); + return nextDate.getTime() > (new Date()).getTime(); + } catch { + return false; + } }); function save() {