From e8ba49d7bb2d4d1279f0762f89b89f93a9717238 Mon Sep 17 00:00:00 2001 From: kenneth Date: Sat, 14 Feb 2026 15:29:49 +0000 Subject: [PATCH] refactor: use switch/case in parser, move options - Replace if/else chains with switch/case in ical-parser - Move CalendarSourceOptions to calendar-source.ts Co-authored-by: Ona --- .../src/calendar-source.ts | 8 +++- .../src/ical-parser.ts | 48 ++++++++++++------- .../aris-source-apple-calendar/src/index.ts | 3 +- .../aris-source-apple-calendar/src/types.ts | 9 ---- 4 files changed, 40 insertions(+), 28 deletions(-) diff --git a/packages/aris-source-apple-calendar/src/calendar-source.ts b/packages/aris-source-apple-calendar/src/calendar-source.ts index 1a4ba33..6c265cb 100644 --- a/packages/aris-source-apple-calendar/src/calendar-source.ts +++ b/packages/aris-source-apple-calendar/src/calendar-source.ts @@ -8,9 +8,15 @@ import type { CalendarDAVClient, CalendarEventData, CalendarFeedItem, - CalendarSourceOptions, } from "./types.ts" +export interface CalendarSourceOptions { + /** Number of additional days beyond today to fetch. Default: 0 (today only). */ + lookAheadDays?: number + /** Optional DAVClient instance for testing. Uses tsdav DAVClient by default. */ + davClient?: CalendarDAVClient +} + import { CalendarKey, type CalendarContext } from "./calendar-context.ts" import { parseICalEvents } from "./ical-parser.ts" diff --git a/packages/aris-source-apple-calendar/src/ical-parser.ts b/packages/aris-source-apple-calendar/src/ical-parser.ts index 2607f04..36246ab 100644 --- a/packages/aris-source-apple-calendar/src/ical-parser.ts +++ b/packages/aris-source-apple-calendar/src/ical-parser.ts @@ -52,11 +52,16 @@ function parseVEvent( function parseStatus(raw: string | null): CalendarEventStatus | null { if (!raw) return null - const lower = raw.toLowerCase() - if (lower === "confirmed") return CalendarEventStatus.Confirmed - if (lower === "tentative") return CalendarEventStatus.Tentative - if (lower === "cancelled") return CalendarEventStatus.Cancelled - return null + switch (raw.toLowerCase()) { + case "confirmed": + return CalendarEventStatus.Confirmed + case "tentative": + return CalendarEventStatus.Tentative + case "cancelled": + return CalendarEventStatus.Cancelled + default: + return null + } } function parseOrganizer( @@ -97,21 +102,32 @@ function parseAttendees(properties: unknown[]): CalendarAttendee[] { function parseAttendeeRole(raw: string | null): AttendeeRole | null { if (!raw) return null - const upper = raw.toUpperCase() - if (upper === "CHAIR") return AttendeeRole.Chair - if (upper === "REQ-PARTICIPANT") return AttendeeRole.Required - if (upper === "OPT-PARTICIPANT") return AttendeeRole.Optional - return null + switch (raw.toUpperCase()) { + case "CHAIR": + return AttendeeRole.Chair + case "REQ-PARTICIPANT": + return AttendeeRole.Required + case "OPT-PARTICIPANT": + return AttendeeRole.Optional + default: + return null + } } function parseAttendeeStatus(raw: string | null): AttendeeStatus | null { if (!raw) return null - const upper = raw.toUpperCase() - if (upper === "ACCEPTED") return AttendeeStatus.Accepted - if (upper === "DECLINED") return AttendeeStatus.Declined - if (upper === "TENTATIVE") return AttendeeStatus.Tentative - if (upper === "NEEDS-ACTION") return AttendeeStatus.NeedsAction - return null + switch (raw.toUpperCase()) { + case "ACCEPTED": + return AttendeeStatus.Accepted + case "DECLINED": + return AttendeeStatus.Declined + case "TENTATIVE": + return AttendeeStatus.Tentative + case "NEEDS-ACTION": + return AttendeeStatus.NeedsAction + default: + return null + } } function parseAlarms(vevent: InstanceType): CalendarAlarm[] { diff --git a/packages/aris-source-apple-calendar/src/index.ts b/packages/aris-source-apple-calendar/src/index.ts index 371dc73..8da176e 100644 --- a/packages/aris-source-apple-calendar/src/index.ts +++ b/packages/aris-source-apple-calendar/src/index.ts @@ -1,5 +1,5 @@ export { CalendarKey, type CalendarContext } from "./calendar-context.ts" -export { CalendarSource } from "./calendar-source.ts" +export { CalendarSource, type CalendarSourceOptions } from "./calendar-source.ts" export { CalendarEventStatus, AttendeeRole, @@ -13,5 +13,4 @@ export { type CalendarAlarm, type CalendarEventData, type CalendarFeedItem, - type CalendarSourceOptions, } from "./types.ts" diff --git a/packages/aris-source-apple-calendar/src/types.ts b/packages/aris-source-apple-calendar/src/types.ts index 876537c..769581e 100644 --- a/packages/aris-source-apple-calendar/src/types.ts +++ b/packages/aris-source-apple-calendar/src/types.ts @@ -99,12 +99,3 @@ export interface CalendarDAVClient { }): Promise credentials: Record } - -// -- Source options -- - -export interface CalendarSourceOptions { - /** Number of additional days beyond today to fetch. Default: 0 (today only). */ - lookAheadDays?: number - /** Optional DAVClient instance for testing. Uses tsdav DAVClient by default. */ - davClient?: CalendarDAVClient -}