Menu
popagent
publicLatest change 6edc7e928c57dab23c0973ed3f7ee70b3ebb72d5 - Initial popagent baseline by AkurAI Build
export type ScheduleFrequency = "daily" | "weekdays" | "weekly";
export const WEEKDAYS = [
{ value: "1", label: "Monday" },
{ value: "2", label: "Tuesday" },
{ value: "3", label: "Wednesday" },
{ value: "4", label: "Thursday" },
{ value: "5", label: "Friday" },
{ value: "6", label: "Saturday" },
{ value: "0", label: "Sunday" },
] as const;
export function scheduleCron(frequency: ScheduleFrequency, time: string, weekday: string): string {
const [hourText = "", minuteText = ""] = time.split(":");
const hour = Number(hourText);
const minute = Number(minuteText);
if (!/^\d{2}$/.test(hourText) || !/^\d{2}$/.test(minuteText) || hour > 23 || minute > 59) throw new Error("Invalid schedule time");
if (frequency === "weekdays") return `${minute} ${hour} * * 1-5`;
if (frequency === "weekly") return `${minute} ${hour} * * ${weekday}`;
return `${minute} ${hour} * * *`;
}
export function describeSchedule(cron: string): string {
const [minute = "", hour = "", dayOfMonth, month, dayOfWeek] = cron.split(" ");
if (dayOfMonth !== "*" || month !== "*" || !/^\d+$/.test(minute) || !/^\d+$/.test(hour)) return cron;
const time = new Date(2000, 0, 1, Number(hour), Number(minute)).toLocaleTimeString([], { hour: "numeric", minute: "2-digit" });
if (dayOfWeek === "1-5") return `Weekdays at ${time}`;
if (dayOfWeek === "*") return `Daily at ${time}`;
const weekday = WEEKDAYS.find((item) => item.value === dayOfWeek)?.label;
return weekday ? `${weekday}s at ${time}` : cron;
}