aws-cron-parser
Version:
A util to parse cron expressions used by AWS services
129 lines • 4.38 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getScheduleDescription = void 0;
var n2w = __importStar(require("number-to-words"));
var monthNumberToWord = function (n) {
return [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December',
][n - 1];
};
var weekdayNumberToWord = function (n) {
return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][n - 1];
};
var joinMultipleWords = function (words) {
if (words.length === 1)
return words[0];
if (words.length === 2)
return words[0] + " and " + words[1];
var rs = '';
words.forEach(function (w, i, a) {
if (i === 0)
rs += w + ",";
else if (i < a.length - 1)
rs += " " + w + ",";
else
rs += " and " + w;
});
return rs;
};
var checkCurrentlyUnsupported = function (p) {
for (var _i = 0, _a = ['months', 'daysOfMonth', 'daysOfWeek']; _i < _a.length; _i++) {
var part = _a[_i];
var found = p[part].find(function (e) { return typeof e !== 'number'; });
if (found)
return true;
}
return false;
};
var handleDaysOfMonth = function (p) {
if (checkCurrentlyUnsupported(p))
return '';
// N N * * ? * = every day
// N N * 4,5 ? * = every day in April and May
// N N 1,3,5 * ? * = on the 1st, 3rd, and 5th of every month
// N N 1,3,5 4,5 ? * = on the 1st, 3rd, and 5th of April and May
var desc = '';
if (p.daysOfMonth.length === 31) {
desc += 'every day';
if (p.months.length < 12)
desc += " in " + joinMultipleWords(p.months.map(monthNumberToWord));
}
else {
desc += "on the " + joinMultipleWords(p.daysOfMonth.map(n2w.toOrdinal));
if (p.months.length === 12)
desc += ' of every month';
else
desc += " of " + joinMultipleWords(p.months.map(monthNumberToWord));
}
return desc;
};
var handleDaysOfWeek = function (p) {
if (checkCurrentlyUnsupported(p))
return '';
// N N ? * MON * = every Monday
// N N ? * MON,FRI * = every Monday and Friday
// N N ? 4,5 MON,FRI * = every Monday and Friday in April and May
var desc = '';
desc += "every " + joinMultipleWords(p.daysOfWeek.map(weekdayNumberToWord));
if (p.months.length < 12)
desc += " in " + joinMultipleWords(p.months.map(monthNumberToWord));
return desc;
};
var handleOncePerDay = function (p) {
var hours = p.hours, minutes = p.minutes;
var h = +hours[0] % 12 || 12;
var m = +minutes[0];
var mm = m < 10 ? "0" + m : "" + m;
var am = +hours[0] < 12 ? 'AM' : 'PM';
return h + ":" + mm + " " + am;
};
/**
* @param {*} p the value returned by "parse" function of this module
*/
function getScheduleDescription(p) {
var desc = '';
var perDay = p.minutes.length * p.hours.length;
if (perDay === 2)
desc += 'twice a day, ';
else if (perDay > 2)
desc += n2w.toWords(perDay) + " times a day, ";
if (p.daysOfMonth.length > 0)
desc += handleDaysOfMonth(p);
else if (p.daysOfWeek.length > 0)
desc += handleDaysOfWeek(p);
if (perDay === 1)
desc += " at " + handleOncePerDay(p);
return desc;
}
exports.getScheduleDescription = getScheduleDescription;
//# sourceMappingURL=desc.js.map