@prefecthq/prefect-ui-library
Version:
This library is the Vue and Typescript component library for [Prefect 2](https://github.com/PrefectHQ/prefect) and [Prefect Cloud 2](https://www.prefect.io/cloud/). _The components and utilities in this project are not meant to be used independently_.
84 lines (73 loc) • 2.6 kB
text/typescript
import { CronSchedule, IntervalSchedule, RRuleSchedule, Schedule, ScheduleResponse, isCronScheduleResponse, isIntervalScheduleResponse, isRRuleScheduleResponse, isIntervalSchedule, isRRuleSchedule, isCronSchedule, IntervalScheduleRequest, RRuleScheduleRequest, CronScheduleRequest } from '@/models'
import { MapFunction } from '@/services/Mapper'
import { setTimezone } from '@/utilities/timezone'
export const mapScheduleResponseToSchedule: MapFunction<ScheduleResponse, Schedule> = function(source) {
if (isRRuleScheduleResponse(source)) {
return new RRuleSchedule({
timezone: source.timezone,
rrule: source.rrule,
})
}
if (isCronScheduleResponse(source)) {
return new CronSchedule({
timezone: source.timezone,
cron: source.cron,
dayOr: source.day_or,
})
}
if (isIntervalScheduleResponse(source)) {
if (source.anchor_date && source.timezone) {
return new IntervalSchedule({
timezone: source.timezone,
interval: source.interval,
anchorDate: this.map('string', source.anchor_date, 'Date'),
})
}
return new IntervalSchedule({
interval: source.interval,
timezone: null,
anchorDate: null,
})
}
throw 'Invalid ScheduleResponse'
}
export const mapScheduleToScheduleRequest: MapFunction<Schedule, ScheduleResponse> = function(source) {
if (isRRuleSchedule(source)) {
return {
timezone: source.timezone,
rrule: source.rrule,
} satisfies RRuleScheduleRequest
}
if (isCronSchedule(source)) {
return {
timezone: source.timezone,
cron: source.cron,
day_or: source.dayOr,
} satisfies CronScheduleRequest
}
if (isIntervalSchedule(source)) {
if (source.anchorDate && source.timezone) {
return {
timezone: source.timezone,
interval: source.interval,
anchor_date: this.map('Date', setTimezone(source.anchorDate, source.timezone), 'string'),
} satisfies IntervalScheduleRequest
}
return {
interval: source.interval,
timezone: null,
anchor_date: null,
} satisfies IntervalScheduleRequest
}
throw 'Invalid ScheduleRequest'
}
export const mapScheduleToScheduleResponse: MapFunction<Schedule, ScheduleResponse> = function(source) {
return {
timezone: source.timezone,
rrule: (source as RRuleSchedule).rrule,
cron: (source as CronSchedule).cron,
day_or: (source as CronSchedule).dayOr,
interval: (source as IntervalSchedule).interval,
anchor_date: this.map('Date', (source as IntervalSchedule).anchorDate, 'string'),
}
}