@paroicms/internal-server-lib
Version:
Common utilitaries for the paroicms server.
50 lines • 1.46 kB
JavaScript
/**
* @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