@@ -105,13 +105,14 @@ const MAX_REMINDER_OVERRIDES = 5
105105const MAX_REMINDER_MINUTES = 40320
106106
107107/**
108- * Parse reminder overrides from a JSON string or array of `{ method, minutes }` objects.
109- * Returns `undefined` when nothing usable was provided. An empty array (`[]`) means
110- * "no reminders" and is returned as-is so callers can turn the calendar default off.
108+ * Parse the reminders input into the Calendar `reminders` setting. Accepts a JSON string or
109+ * value that is either an array of `{ method, minutes }` overrides (custom reminders; `[]`
110+ * turns reminders off) or the API's own `{ useDefault, overrides }` object, so a previous
111+ * event's reminders can be copied as-is. Returns `undefined` when nothing usable was provided.
111112 */
112- function parseReminderOverrides (
113- reminders : string | GoogleCalendarReminderOverride [ ] | undefined
114- ) : GoogleCalendarReminderOverride [ ] | undefined {
113+ function parseReminders (
114+ reminders : unknown
115+ ) : { useDefault : boolean ; overrides ?: GoogleCalendarReminderOverride [ ] } | undefined {
115116 if ( reminders === undefined || reminders === null ) return undefined
116117
117118 let parsed : unknown = reminders
@@ -125,10 +126,16 @@ function parseReminderOverrides(
125126 }
126127 }
127128
128- if ( isRecordLike ( parsed ) && Array . isArray ( parsed . overrides ) ) {
129- parsed = parsed . overrides
129+ if ( isRecordLike ( parsed ) && ! Array . isArray ( parsed ) ) {
130+ if ( parsed . useDefault === true ) return { useDefault : true }
131+ const overrides = parsed . overrides === undefined ? [ ] : parsed . overrides
132+ return { useDefault : false , overrides : validateReminderOverrides ( overrides ) }
130133 }
131134
135+ return { useDefault : false , overrides : validateReminderOverrides ( parsed ) }
136+ }
137+
138+ function validateReminderOverrides ( parsed : unknown ) : GoogleCalendarReminderOverride [ ] {
132139 if ( ! Array . isArray ( parsed ) ) {
133140 throw new Error ( 'Reminders must be an array of { method, minutes } objects' )
134141 }
@@ -173,8 +180,8 @@ export function applyEventOptions(
173180 if ( params . transparency ) body . transparency = params . transparency
174181 const colorId = params . colorId ?. toString ( ) . trim ( )
175182 if ( colorId ) body . colorId = colorId
176- const overrides = parseReminderOverrides ( params . reminders )
177- if ( overrides ) body . reminders = { useDefault : false , overrides }
183+ const reminders = parseReminders ( params . reminders )
184+ if ( reminders ) body . reminders = reminders
178185}
179186
180187/** Fields shared by every event-shaped output beyond the core id/summary/time/people fields. */
0 commit comments