in src/push/monitor.ts [391:427]
export function parseSchedule(schedule: string) {
const EVERY_SYNTAX = '@every';
if (!(schedule + '').startsWith(EVERY_SYNTAX)) {
throw `Monitor schedule format(${schedule}) not supported: use '@every' syntax instead`;
}
const duration = schedule.substring(EVERY_SYNTAX.length + 1);
// split between non-digit (\D) and a digit (\d)
const durations = duration.split(/(?<=\D)(?=\d)/g);
let minutes = 0;
let seconds = 0;
for (const dur of durations) {
// split between a digit and non-digit
const [value, format] = dur.split(/(?<=\d)(?=\D)/g);
// Calculate based on the duration symbol
const scheduleValue = parseInt(value, 10);
switch (format) {
case 's':
if (scheduleValue < 60) {
seconds += scheduleValue;
} else {
minutes += Math.round(scheduleValue / 60);
}
break;
case 'm':
minutes += scheduleValue;
break;
case 'h':
minutes += scheduleValue * 60;
break;
case 'd':
minutes += scheduleValue * 24 * 60;
break;
}
}
return nearestSchedule(minutes, seconds);
}