aws-cron-parser
Version:
A util to parse cron expressions used by AWS services
78 lines • 2.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.arrayFindLast = exports.arrayFindFirst = exports.getDaysOfMonthForW = exports.getDaysOfMonthForL = exports.getDaysOfMonthFromDaysOfWeek = void 0;
var isWeekday = function (year, month, day) {
if (day < 1 || day > 31) {
return false;
}
var thisDate = new Date(year, month - 1, day);
if (thisDate.getMonth() !== month - 1) {
return false;
}
return thisDate.getDay() > 0 && thisDate.getDay() < 6;
};
var getDaysOfMonthFromDaysOfWeek = function (year, month, daysOfWeek) {
var daysOfMonth = [];
var index = 0; // only for "#" use case
for (var i = 1; i <= 31; i += 1) {
var thisDate = new Date(year, month - 1, i);
// already after last day of month
if (thisDate.getMonth() !== month - 1) {
break;
}
if (daysOfWeek[0] === 'L') {
if (daysOfWeek[1] === thisDate.getDay() + 1) {
var sameDayNextWeek = new Date(thisDate.getTime() + 7 * 24 * 3600000);
if (sameDayNextWeek.getMonth() !== thisDate.getMonth()) {
return [i];
}
}
}
else if (daysOfWeek[0] === '#') {
if (daysOfWeek[1] === thisDate.getDay() + 1) {
index += 1;
}
if (daysOfWeek[2] === index) {
return [i];
}
}
else if (daysOfWeek.includes(thisDate.getDay() + 1)) {
daysOfMonth.push(i);
}
}
return daysOfMonth;
};
exports.getDaysOfMonthFromDaysOfWeek = getDaysOfMonthFromDaysOfWeek;
var getDaysOfMonthForL = function (year, month, daysBefore) {
for (var i = 31; i >= 28; i -= 1) {
var thisDate = new Date(year, month - 1, i);
if (thisDate.getMonth() === month - 1) {
return [i - daysBefore];
}
}
throw new Error('getDaysOfMonthForL - should not happen');
};
exports.getDaysOfMonthForL = getDaysOfMonthForL;
var getDaysOfMonthForW = function (year, month, day) {
var offset = [0, 1, -1, 2, -2].find(function (c) { return isWeekday(year, month, day + c); });
if (offset === undefined)
throw new Error('getDaysOfMonthForW - should not happen');
return [day + offset];
};
exports.getDaysOfMonthForW = getDaysOfMonthForW;
var arrayFindFirst = function (a, f) {
return a.find(f);
};
exports.arrayFindFirst = arrayFindFirst;
var arrayFindLast = function (a, f) {
// note: a.slice().reverse().find(f) is less efficient
for (var i = a.length - 1; i >= 0; i--) {
// eslint-disable-next-line security/detect-object-injection
var e = a[i];
if (f(e)) {
return e;
}
}
};
exports.arrayFindLast = arrayFindLast;
//# sourceMappingURL=common.js.map