export function parseSchedule()

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);
}