From 4b2b964283075712de98743720ff3e31370ddc8e Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Tue, 8 Sep 2026 08:57:08 +0200 Subject: Deduplicate routine actions and badges across project routes - Share edit/complete/archive form actions in routine-actions.ts; route servers become thin wrappers (strictest guard semantics in one place) - Move parseFrequencyDays into validation.ts - Extract ScoreBadge/StatusBadge components; use on project pages and the home page instead of duplicated scoreClass/statusClass helpers - Fix archiveProject calling the routine archive with the project id --- src/lib/server/services/validation.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/lib/server/services/validation.ts') diff --git a/src/lib/server/services/validation.ts b/src/lib/server/services/validation.ts index a8cebd9..69820ea 100644 --- a/src/lib/server/services/validation.ts +++ b/src/lib/server/services/validation.ts @@ -1,3 +1,4 @@ +import { parseIntervalToDays } from '$lib/shared/routine-metrics'; import * as v from 'valibot'; export const IdSchema = v.pipe(v.number(), v.integer(), v.minValue(1)); @@ -43,3 +44,12 @@ export function parseOptionalNumber( if (!Number.isFinite(n)) return null; return n; } + +/** Parses an interval like '2w' into days; throws when the format is invalid. */ +export function parseFrequencyDays(value: FormDataEntryValue | null): number { + const days = parseIntervalToDays(value?.toString() ?? ''); + if (days === null) { + throw new Error('Invalid interval'); + } + return days; +} -- cgit v1.3