UNPKG

node-cron-job

Version:

An easy-to-use cron job/task scheduler for node.

82 lines (59 loc) 2.12 kB
var Promise = require('promise'); var parser = require('cron-parser'); const MAX_INT = 2147483647; const SAFETY_MARGIN = 1; /* * A utility method used for time conversion. */ exports.convertToTime = function convertToTime(_after) { var milliseconds = 0; if(_after.hasOwnProperty('days') && _after.days) { milliseconds = _after.days ? _after.days * 24 * 60 * 60 * 1000 : 0; } if(_after.hasOwnProperty('hours') && _after.hours) { milliseconds += _after.hours ? _after.hours * 60 * 60 * 1000 : 0; } if(_after.hasOwnProperty('minutes') && _after.minutes) { milliseconds += _after.minutes ? _after.minutes * 60 * 1000 : 0; } if(_after.hasOwnProperty('seconds') && _after.seconds) { milliseconds += _after.seconds ? _after.seconds * 1000 : 0; } return milliseconds; } /* * This returns a promise that is resolved after every interval * determined by the millisecond (integer) or cron tab parameter. */ exports.convertToPromise = function convertToPromise(interval) { return new Promise(function(resolve, reject) { var _interval = interval; var one_round = MAX_INT; // Pushing 'time' to the JS task queue incase the interval is too long. while(_interval > one_round) { setTimeout(function(){}, one_round); _interval -= one_round } setTimeout(function(){ resolve(_interval); }, _interval); }); } /* * Calculates the remaining time based on the cron tab. */ exports.getNextInterval = function getNextInterval(_on) { var today = new Date(); try { var interval = parser.parseExpression(_on); var nextDate = new Date(interval.next().toString()); } catch (err) { console.log('Error: ' + err.message); process.exit(-1); } return nextDate - today; } /* * Utility function to check if the given input is an integer. */ function checkInteger(param) { return param === parseInt(param, 10); }