UNPKG

@paroicms/internal-server-lib

Version:

Common utilitaries for the paroicms server.

50 lines 1.46 kB
/** * @returns A function to stop the cron-like process. */ export function startCronLike(task, { shouldExecute, immediate, logger }) { const intervalMs = 15 * 60 * 1000; let lastTime; let taskPromise; const intervalId = setInterval(async () => { if (taskPromise) return; try { if ((lastTime && !shouldExecute(lastTime)) || (!lastTime && !immediate)) return; lastTime = new Date(); taskPromise = task(); await taskPromise; } catch (error) { logger.error(error); } taskPromise = undefined; }, intervalMs); logger.debug("Cron-like is started."); return async () => { clearInterval(intervalId); if (taskPromise) { try { await taskPromise; } catch { // The error is already logged in the 'setInterval' callback. } } logger.debug("Cron-like is stopped."); }; } export function eachDay({ hours }) { return (lastTime) => { const now = new Date(); if (lastTime && sameDay(lastTime, now)) return false; return now.getHours() === hours; }; } function sameDay(d1, d2) { return (d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth() && d1.getDate() === d2.getDate()); } //# sourceMappingURL=cron-like.js.map