import { ArgumentError } from './basic-utilities'; import { DateAdapter } from './date-adapter'; import { DateTime } from './date-time'; import { RScheduleConfig } from './rschedule-config'; export type DateInput = T['date'] | InstanceType | DateTime; export function dateInputToDateAdapter( date: DateInput, dateAdapter?: T, ): InstanceType { dateAdapter = dateAdapter || (RScheduleConfig.defaultDateAdapter as T | undefined); if (!dateAdapter) { throw new ArgumentError( 'No `dateAdapter` option provided and `RScheduleConfig.defaultDateAdapter` not set.', ); } if (DateTime.isInstance(date)) { return dateAdapter.fromDateTime(date) as InstanceType; } return DateAdapter.isInstance(date) ? date : (new dateAdapter(date) as InstanceType); } export function dateInputToDateTime( date: DateInput, timezone: string | null, dateAdapter?: T, ): DateTime { dateAdapter = dateAdapter || (RScheduleConfig.defaultDateAdapter as T | undefined); if (!dateAdapter) { throw new ArgumentError( 'No `dateAdapter` option provided and `RScheduleConfig.defaultDateAdapter` not set.', ); } if (DateTime.isInstance(date)) { if (date.timezone !== timezone) { return dateAdapter .fromDateTime(date) .set('timezone', timezone) .toDateTime(); } return date; } return DateAdapter.isInstance(date) ? date.set('timezone', timezone).toDateTime() : new dateAdapter(date).set('timezone', timezone).toDateTime(); } export function normalizeDateTimeTimezone( date: DateTime, timezone: string | null, dateAdapter?: T, ): DateTime { dateAdapter = dateAdapter || (RScheduleConfig.defaultDateAdapter as T | undefined); if (!dateAdapter) { throw new ArgumentError( 'No `dateAdapter` option provided and `RScheduleConfig.defaultDateAdapter` not set.', ); } if (date.timezone !== timezone) { return dateAdapter .fromDateTime(date) .set('timezone', timezone) .toDateTime(); } return date; }