UNPKG

cronstrue

Version:

Convert cron expressions into human readable descriptions

1,132 lines (1,098 loc) 48.3 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define("cronstrue", [], factory); else if(typeof exports === 'object') exports["cronstrue"] = factory(); else root["cronstrue"] = factory(); })(globalThis, () => { return /******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ 949: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CronParser = void 0; var rangeValidator_1 = __webpack_require__(515); var CronParser = (function () { function CronParser(expression, dayOfWeekStartIndexZero, monthStartIndexZero) { if (dayOfWeekStartIndexZero === void 0) { dayOfWeekStartIndexZero = true; } if (monthStartIndexZero === void 0) { monthStartIndexZero = false; } this.expression = expression; this.dayOfWeekStartIndexZero = dayOfWeekStartIndexZero; this.monthStartIndexZero = monthStartIndexZero; } CronParser.prototype.parse = function () { var _a; var parsed; var expression = (_a = this.expression) !== null && _a !== void 0 ? _a : ''; if (expression === "@reboot") { parsed = ["@reboot", "", "", "", "", "", ""]; return parsed; } else if (expression.startsWith('@')) { var special = this.parseSpecial(this.expression); parsed = this.extractParts(special); } else { parsed = this.extractParts(this.expression); } this.normalize(parsed); this.validate(parsed); return parsed; }; CronParser.prototype.parseSpecial = function (expression) { var specialExpressions = { '@yearly': '0 0 1 1 *', '@annually': '0 0 1 1 *', '@monthly': '0 0 1 * *', '@weekly': '0 0 * * 0', '@daily': '0 0 * * *', '@midnight': '0 0 * * *', '@hourly': '0 * * * *', '@reboot': '@reboot' }; var special = specialExpressions[expression]; if (!special) { throw new Error('Unknown special expression.'); } return special; }; CronParser.prototype.extractParts = function (expression) { if (!this.expression) { throw new Error("cron expression is empty"); } var parsed = expression.trim().split(/[ ]+/); for (var i = 0; i < parsed.length; i++) { if (parsed[i].includes(",")) { var arrayElement = parsed[i] .split(",") .map(function (item) { return item.trim(); }) .filter(function (item) { return item !== ""; }) .map(function (item) { return (!isNaN(Number(item)) ? Number(item) : item); }) .filter(function (item) { return item !== null && item !== ""; }); if (arrayElement.length === 0) { arrayElement.push("*"); } arrayElement.sort(function (a, b) { return (a !== null && b !== null ? a - b : 0); }); parsed[i] = arrayElement.map(function (item) { return (item !== null ? item.toString() : ""); }).join(","); } } if (parsed.length < 5) { throw new Error("Expression has only ".concat(parsed.length, " part").concat(parsed.length == 1 ? "" : "s", ". At least 5 parts are required.")); } else if (parsed.length == 5) { parsed.unshift(""); parsed.push(""); } else if (parsed.length == 6) { var isYearWithNoSecondsPart = /\d{4}$/.test(parsed[5]) || parsed[4] == "?" || parsed[2] == "?"; if (isYearWithNoSecondsPart) { parsed.unshift(""); } else { parsed.push(""); } } else if (parsed.length > 7) { throw new Error("Expression has ".concat(parsed.length, " parts; too many!")); } return parsed; }; CronParser.prototype.normalize = function (expressionParts) { var _this = this; expressionParts[3] = expressionParts[3].replace("?", "*"); expressionParts[5] = expressionParts[5].replace("?", "*"); expressionParts[2] = expressionParts[2].replace("?", "*"); if (expressionParts[0].indexOf("0/") == 0) { expressionParts[0] = expressionParts[0].replace("0/", "*/"); } if (expressionParts[1].indexOf("0/") == 0) { expressionParts[1] = expressionParts[1].replace("0/", "*/"); } if (expressionParts[2].indexOf("0/") == 0) { expressionParts[2] = expressionParts[2].replace("0/", "*/"); } if (expressionParts[3].indexOf("1/") == 0) { expressionParts[3] = expressionParts[3].replace("1/", "*/"); } if (expressionParts[4].indexOf("1/") == 0) { expressionParts[4] = expressionParts[4].replace("1/", "*/"); } if (expressionParts[6].indexOf("1/") == 0) { expressionParts[6] = expressionParts[6].replace("1/", "*/"); } expressionParts[5] = expressionParts[5].replace(/(^\d)|([^#/\s]\d)/g, function (t) { var dowDigits = t.replace(/\D/, ""); var dowDigitsAdjusted = dowDigits; if (_this.dayOfWeekStartIndexZero) { if (dowDigits == "7") { dowDigitsAdjusted = "0"; } } else { dowDigitsAdjusted = (parseInt(dowDigits) - 1).toString(); } return t.replace(dowDigits, dowDigitsAdjusted); }); if (expressionParts[5] == "L") { expressionParts[5] = "6"; } if (expressionParts[3] == "?") { expressionParts[3] = "*"; } if (expressionParts[3].indexOf("W") > -1 && (expressionParts[3].indexOf(",") > -1 || expressionParts[3].indexOf("-") > -1)) { throw new Error("The 'W' character can be specified only when the day-of-month is a single day, not a range or list of days."); } var days = { SUN: 0, MON: 1, TUE: 2, WED: 3, THU: 4, FRI: 5, SAT: 6, }; for (var day in days) { expressionParts[5] = expressionParts[5].replace(new RegExp(day, "gi"), days[day].toString()); } expressionParts[4] = expressionParts[4].replace(/(^\d{1,2})|([^#/\s]\d{1,2})/g, function (t) { var dowDigits = t.replace(/\D/, ""); var dowDigitsAdjusted = dowDigits; if (_this.monthStartIndexZero) { dowDigitsAdjusted = (parseInt(dowDigits) + 1).toString(); } return t.replace(dowDigits, dowDigitsAdjusted); }); var months = { JAN: 1, FEB: 2, MAR: 3, APR: 4, MAY: 5, JUN: 6, JUL: 7, AUG: 8, SEP: 9, OCT: 10, NOV: 11, DEC: 12, }; for (var month in months) { expressionParts[4] = expressionParts[4].replace(new RegExp(month, "gi"), months[month].toString()); } if (expressionParts[0] == "0") { expressionParts[0] = ""; } if (!/\*|\-|\,|\//.test(expressionParts[2]) && (/\*|\//.test(expressionParts[1]) || /\*|\//.test(expressionParts[0]))) { expressionParts[2] += "-".concat(expressionParts[2]); } for (var i = 0; i < expressionParts.length; i++) { if (expressionParts[i].indexOf(",") != -1) { expressionParts[i] = expressionParts[i] .split(",") .filter(function (str) { return str !== ""; }) .join(",") || "*"; } if (expressionParts[i] == "*/1") { expressionParts[i] = "*"; } if (expressionParts[i].indexOf("/") > -1 && !/^\*|\-|\,/.test(expressionParts[i])) { var stepRangeThrough = null; switch (i) { case 4: stepRangeThrough = "12"; break; case 5: stepRangeThrough = "6"; break; case 6: stepRangeThrough = "9999"; break; default: stepRangeThrough = null; break; } if (stepRangeThrough !== null) { var parts = expressionParts[i].split("/"); expressionParts[i] = "".concat(parts[0], "-").concat(stepRangeThrough, "/").concat(parts[1]); } } } }; CronParser.prototype.validate = function (parsed) { var standardCronPartCharacters = "0-9,\\-*\/"; this.validateOnlyExpectedCharactersFound(parsed[0], standardCronPartCharacters); this.validateOnlyExpectedCharactersFound(parsed[1], standardCronPartCharacters); this.validateOnlyExpectedCharactersFound(parsed[2], standardCronPartCharacters); this.validateOnlyExpectedCharactersFound(parsed[3], "0-9,\\-*\/LW"); this.validateOnlyExpectedCharactersFound(parsed[4], standardCronPartCharacters); this.validateOnlyExpectedCharactersFound(parsed[5], "0-9,\\-*\/L#"); this.validateOnlyExpectedCharactersFound(parsed[6], standardCronPartCharacters); this.validateAnyRanges(parsed); }; CronParser.prototype.validateAnyRanges = function (parsed) { rangeValidator_1.default.secondRange(parsed[0]); rangeValidator_1.default.minuteRange(parsed[1]); rangeValidator_1.default.hourRange(parsed[2]); rangeValidator_1.default.dayOfMonthRange(parsed[3]); rangeValidator_1.default.monthRange(parsed[4], this.monthStartIndexZero); rangeValidator_1.default.dayOfWeekRange(parsed[5], this.dayOfWeekStartIndexZero); }; CronParser.prototype.validateOnlyExpectedCharactersFound = function (cronPart, allowedCharsExpression) { var invalidChars = cronPart.match(new RegExp("[^".concat(allowedCharsExpression, "]+"), "gi")); if (invalidChars && invalidChars.length) { throw new Error("Expression contains invalid values: '".concat(invalidChars.toString(), "'")); } }; return CronParser; }()); exports.CronParser = CronParser; /***/ }), /***/ 333: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ExpressionDescriptor = void 0; var stringUtilities_1 = __webpack_require__(823); var cronParser_1 = __webpack_require__(949); var ExpressionDescriptor = (function () { function ExpressionDescriptor(expression, options) { this.expression = expression; this.options = options; this.expressionParts = new Array(5); if (!this.options.locale && ExpressionDescriptor.defaultLocale) { this.options.locale = ExpressionDescriptor.defaultLocale; } if (!ExpressionDescriptor.locales[this.options.locale]) { var fallBackLocale = Object.keys(ExpressionDescriptor.locales)[0]; console.warn("Locale '".concat(this.options.locale, "' could not be found; falling back to '").concat(fallBackLocale, "'.")); this.options.locale = fallBackLocale; } this.i18n = ExpressionDescriptor.locales[this.options.locale]; if (options.use24HourTimeFormat === undefined) { options.use24HourTimeFormat = this.i18n.use24HourTimeFormatByDefault(); } } ExpressionDescriptor.toString = function (expression, _a) { var _b = _a === void 0 ? {} : _a, _c = _b.throwExceptionOnParseError, throwExceptionOnParseError = _c === void 0 ? true : _c, _d = _b.verbose, verbose = _d === void 0 ? false : _d, _e = _b.dayOfWeekStartIndexZero, dayOfWeekStartIndexZero = _e === void 0 ? true : _e, _f = _b.monthStartIndexZero, monthStartIndexZero = _f === void 0 ? false : _f, use24HourTimeFormat = _b.use24HourTimeFormat, _g = _b.locale, locale = _g === void 0 ? null : _g; var options = { throwExceptionOnParseError: throwExceptionOnParseError, verbose: verbose, dayOfWeekStartIndexZero: dayOfWeekStartIndexZero, monthStartIndexZero: monthStartIndexZero, use24HourTimeFormat: use24HourTimeFormat, locale: locale, }; if (options.tzOffset) { console.warn("'tzOffset' option has been deprecated and is no longer supported."); } var descripter = new ExpressionDescriptor(expression, options); return descripter.getFullDescription(); }; ExpressionDescriptor.initialize = function (localesLoader, defaultLocale) { if (defaultLocale === void 0) { defaultLocale = "en"; } ExpressionDescriptor.specialCharacters = ["/", "-", ",", "*"]; ExpressionDescriptor.defaultLocale = defaultLocale; localesLoader.load(ExpressionDescriptor.locales); }; ExpressionDescriptor.prototype.getFullDescription = function () { var _a, _b; var description = ""; try { var parser = new cronParser_1.CronParser(this.expression, this.options.dayOfWeekStartIndexZero, this.options.monthStartIndexZero); this.expressionParts = parser.parse(); if (this.expressionParts[0] === "@reboot") { return ((_b = (_a = this.i18n).atReboot) === null || _b === void 0 ? void 0 : _b.call(_a)) || "Run once, at startup"; } var timeSegment = this.getTimeOfDayDescription(); var dayOfMonthDesc = this.getDayOfMonthDescription(); var monthDesc = this.getMonthDescription(); var dayOfWeekDesc = this.getDayOfWeekDescription(); var yearDesc = this.getYearDescription(); description += timeSegment + dayOfMonthDesc + dayOfWeekDesc + monthDesc + yearDesc; description = this.transformVerbosity(description, !!this.options.verbose); description = description.charAt(0).toLocaleUpperCase() + description.substr(1); } catch (ex) { if (!this.options.throwExceptionOnParseError) { description = this.i18n.anErrorOccuredWhenGeneratingTheExpressionD(); } else { throw "".concat(ex); } } return description; }; ExpressionDescriptor.prototype.getTimeOfDayDescription = function () { var secondsExpression = this.expressionParts[0]; var minuteExpression = this.expressionParts[1]; var hourExpression = this.expressionParts[2]; var description = ""; if (!stringUtilities_1.StringUtilities.containsAny(minuteExpression, ExpressionDescriptor.specialCharacters) && !stringUtilities_1.StringUtilities.containsAny(hourExpression, ExpressionDescriptor.specialCharacters) && !stringUtilities_1.StringUtilities.containsAny(secondsExpression, ExpressionDescriptor.specialCharacters)) { description += this.i18n.atSpace() + this.formatTime(hourExpression, minuteExpression, secondsExpression); } else if (!secondsExpression && minuteExpression.indexOf("-") > -1 && !(minuteExpression.indexOf(",") > -1) && !(minuteExpression.indexOf("/") > -1) && !stringUtilities_1.StringUtilities.containsAny(hourExpression, ExpressionDescriptor.specialCharacters)) { var minuteParts = minuteExpression.split("-"); description += stringUtilities_1.StringUtilities.format(this.i18n.everyMinuteBetweenX0AndX1(), this.formatTime(hourExpression, minuteParts[0], ""), this.formatTime(hourExpression, minuteParts[1], "")); } else if (!secondsExpression && hourExpression.indexOf(",") > -1 && hourExpression.indexOf("-") == -1 && hourExpression.indexOf("/") == -1 && !stringUtilities_1.StringUtilities.containsAny(minuteExpression, ExpressionDescriptor.specialCharacters)) { var hourParts = hourExpression.split(","); description += this.i18n.at(); for (var i = 0; i < hourParts.length; i++) { description += " "; description += this.formatTime(hourParts[i], minuteExpression, ""); if (i < hourParts.length - 2) { description += ","; } if (i == hourParts.length - 2) { description += this.i18n.spaceAnd(); } } } else { var secondsDescription = this.getSecondsDescription(); var minutesDescription = this.getMinutesDescription(); var hoursDescription = this.getHoursDescription(); description += secondsDescription; if (description && minutesDescription) { description += ", "; } description += minutesDescription; if (minutesDescription === hoursDescription) { return description; } if (description && hoursDescription) { description += ", "; } description += hoursDescription; } return description; }; ExpressionDescriptor.prototype.getSecondsDescription = function () { var _this = this; var description = this.getSegmentDescription(this.expressionParts[0], this.i18n.everySecond(), function (s) { return s; }, function (s) { return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Seconds(s), s); }, function (s) { return _this.i18n.secondsX0ThroughX1PastTheMinute(); }, function (s) { return s == "0" ? "" : parseInt(s) < 20 ? _this.i18n.atX0SecondsPastTheMinute(s) : _this.i18n.atX0SecondsPastTheMinuteGt20() || _this.i18n.atX0SecondsPastTheMinute(s); }); return description; }; ExpressionDescriptor.prototype.getMinutesDescription = function () { var _this = this; var secondsExpression = this.expressionParts[0]; var hourExpression = this.expressionParts[2]; var description = this.getSegmentDescription(this.expressionParts[1], this.i18n.everyMinute(), function (s) { return s; }, function (s) { return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Minutes(s), s); }, function (s) { return _this.i18n.minutesX0ThroughX1PastTheHour(); }, function (s) { try { return s == "0" && hourExpression.indexOf("/") == -1 && secondsExpression == "" ? _this.i18n.everyHour() : parseInt(s) < 20 ? _this.i18n.atX0MinutesPastTheHour(s) : _this.i18n.atX0MinutesPastTheHourGt20() || _this.i18n.atX0MinutesPastTheHour(s); } catch (e) { return _this.i18n.atX0MinutesPastTheHour(s); } }); return description; }; ExpressionDescriptor.prototype.getHoursDescription = function () { var _this = this; var expression = this.expressionParts[2]; var hourIndex = 0; var rangeEndValues = []; expression .split("/")[0] .split(",") .forEach(function (range) { var rangeParts = range.split("-"); if (rangeParts.length === 2) { rangeEndValues.push({ value: rangeParts[1], index: hourIndex + 1 }); } hourIndex += rangeParts.length; }); var evaluationIndex = 0; var description = this.getSegmentDescription(expression, this.i18n.everyHour(), function (s) { var match = rangeEndValues.find(function (r) { return r.value === s && r.index === evaluationIndex; }); var isRangeEndWithNonZeroMinute = match && _this.expressionParts[1] !== "0"; evaluationIndex++; return isRangeEndWithNonZeroMinute ? _this.formatTime(s, "59", "") : _this.formatTime(s, "0", ""); }, function (s) { return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Hours(s), s); }, function (s) { return _this.i18n.betweenX0AndX1(); }, function (s) { return _this.i18n.atX0(); }); return description; }; ExpressionDescriptor.prototype.getDayOfWeekDescription = function () { var _this = this; var daysOfWeekNames = this.i18n.daysOfTheWeek(); var description = null; if (this.expressionParts[5] == "*") { description = ""; } else { description = this.getSegmentDescription(this.expressionParts[5], this.i18n.commaEveryDay(), function (s, form) { var exp = s; if (s.indexOf("#") > -1) { exp = s.substring(0, s.indexOf("#")); } else if (s.indexOf("L") > -1) { exp = exp.replace("L", ""); } var parsedExp = parseInt(exp); var description = _this.i18n.daysOfTheWeekInCase ? _this.i18n.daysOfTheWeekInCase(form)[parsedExp] : daysOfWeekNames[parsedExp]; if (s.indexOf("#") > -1) { var dayOfWeekOfMonthDescription = null; var dayOfWeekOfMonthNumber = s.substring(s.indexOf("#") + 1); var dayOfWeekNumber = s.substring(0, s.indexOf("#")); switch (dayOfWeekOfMonthNumber) { case "1": dayOfWeekOfMonthDescription = _this.i18n.first(dayOfWeekNumber); break; case "2": dayOfWeekOfMonthDescription = _this.i18n.second(dayOfWeekNumber); break; case "3": dayOfWeekOfMonthDescription = _this.i18n.third(dayOfWeekNumber); break; case "4": dayOfWeekOfMonthDescription = _this.i18n.fourth(dayOfWeekNumber); break; case "5": dayOfWeekOfMonthDescription = _this.i18n.fifth(dayOfWeekNumber); break; } description = dayOfWeekOfMonthDescription + " " + description; } return description; }, function (s) { if (parseInt(s) == 1) { return ""; } else { return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0DaysOfTheWeek(s), s); } }, function (s) { var beginFrom = s.substring(0, s.indexOf("-")); var domSpecified = _this.expressionParts[3] != "*"; return domSpecified ? _this.i18n.commaAndX0ThroughX1(beginFrom) : _this.i18n.commaX0ThroughX1(beginFrom); }, function (s) { var format = null; if (s.indexOf("#") > -1) { var dayOfWeekOfMonthNumber = s.substring(s.indexOf("#") + 1); var dayOfWeek = s.substring(0, s.indexOf("#")); format = _this.i18n.commaOnThe(dayOfWeekOfMonthNumber, dayOfWeek).trim() + _this.i18n.spaceX0OfTheMonth(); } else if (s.indexOf("L") > -1) { format = _this.i18n.commaOnTheLastX0OfTheMonth(s.replace("L", "")); } else { var domSpecified = _this.expressionParts[3] != "*"; format = domSpecified ? _this.i18n.commaAndOnX0() : _this.i18n.commaOnlyOnX0(s); } return format; }); } return description; }; ExpressionDescriptor.prototype.getMonthDescription = function () { var _this = this; var monthNames = this.i18n.monthsOfTheYear(); var description = this.getSegmentDescription(this.expressionParts[4], "", function (s, form) { return form && _this.i18n.monthsOfTheYearInCase ? _this.i18n.monthsOfTheYearInCase(form)[parseInt(s) - 1] : monthNames[parseInt(s) - 1]; }, function (s) { if (parseInt(s) == 1) { return ""; } else { return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0Months(s), s); } }, function (s) { return _this.i18n.commaMonthX0ThroughMonthX1() || _this.i18n.commaX0ThroughX1(); }, function (s) { return _this.i18n.commaOnlyInMonthX0 ? _this.i18n.commaOnlyInMonthX0() : _this.i18n.commaOnlyInX0(); }); return description; }; ExpressionDescriptor.prototype.getDayOfMonthDescription = function () { var _this = this; var description = null; var expression = this.expressionParts[3]; switch (expression) { case "L": description = this.i18n.commaOnTheLastDayOfTheMonth(); break; case "WL": case "LW": description = this.i18n.commaOnTheLastWeekdayOfTheMonth(); break; default: var weekDayNumberMatches = expression.match(/(\d{1,2}W)|(W\d{1,2})/); if (weekDayNumberMatches) { var dayNumber = parseInt(weekDayNumberMatches[0].replace("W", "")); var dayString = dayNumber == 1 ? this.i18n.firstWeekday() : stringUtilities_1.StringUtilities.format(this.i18n.weekdayNearestDayX0(), dayNumber.toString()); description = stringUtilities_1.StringUtilities.format(this.i18n.commaOnTheX0OfTheMonth(), dayString); break; } else { var lastDayOffSetMatches = expression.match(/L-(\d{1,2})/); if (lastDayOffSetMatches) { var offSetDays = lastDayOffSetMatches[1]; description = stringUtilities_1.StringUtilities.format(this.i18n.commaDaysBeforeTheLastDayOfTheMonth(offSetDays), offSetDays); break; } else if (expression == "*" && this.expressionParts[5] != "*") { return ""; } else { description = this.getSegmentDescription(expression, this.i18n.commaEveryDay(), function (s) { return s == "L" ? _this.i18n.lastDay() : _this.i18n.dayX0 ? stringUtilities_1.StringUtilities.format(_this.i18n.dayX0(), s) : s; }, function (s) { return s == "1" ? _this.i18n.commaEveryDay() : _this.i18n.commaEveryX0Days(s); }, function (s) { return _this.i18n.commaBetweenDayX0AndX1OfTheMonth(s); }, function (s) { return _this.i18n.commaOnDayX0OfTheMonth(s); }); } break; } } return description; }; ExpressionDescriptor.prototype.getYearDescription = function () { var _this = this; var description = this.getSegmentDescription(this.expressionParts[6], "", function (s) { return /^\d+$/.test(s) ? new Date(parseInt(s), 1).getFullYear().toString() : s; }, function (s) { return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0Years(s), s); }, function (s) { return _this.i18n.commaYearX0ThroughYearX1() || _this.i18n.commaX0ThroughX1(); }, function (s) { return _this.i18n.commaOnlyInYearX0 ? _this.i18n.commaOnlyInYearX0() : _this.i18n.commaOnlyInX0(); }); return description; }; ExpressionDescriptor.prototype.getSegmentDescription = function (expression, allDescription, getSingleItemDescription, getIncrementDescriptionFormat, getRangeDescriptionFormat, getDescriptionFormat) { var description = null; var doesExpressionContainIncrement = expression.indexOf("/") > -1; var doesExpressionContainRange = expression.indexOf("-") > -1; var doesExpressionContainMultipleValues = expression.indexOf(",") > -1; if (!expression) { description = ""; } else if (expression === "*") { description = allDescription; } else if (!doesExpressionContainIncrement && !doesExpressionContainRange && !doesExpressionContainMultipleValues) { description = stringUtilities_1.StringUtilities.format(getDescriptionFormat(expression), getSingleItemDescription(expression)); } else if (doesExpressionContainMultipleValues) { var segments = expression.split(","); var descriptionContent = ""; for (var i = 0; i < segments.length; i++) { if (i > 0 && segments.length > 2) { descriptionContent += ","; if (i < segments.length - 1) { descriptionContent += " "; } } if (i > 0 && segments.length > 1 && (i == segments.length - 1 || segments.length == 2)) { descriptionContent += "".concat(this.i18n.spaceAnd(), " "); } if (segments[i].indexOf("/") > -1 || segments[i].indexOf("-") > -1) { var isSegmentRangeWithoutIncrement = segments[i].indexOf("-") > -1 && segments[i].indexOf("/") == -1; var currentDescriptionContent = this.getSegmentDescription(segments[i], allDescription, getSingleItemDescription, getIncrementDescriptionFormat, isSegmentRangeWithoutIncrement ? this.i18n.commaX0ThroughX1 : getRangeDescriptionFormat, getDescriptionFormat); if (isSegmentRangeWithoutIncrement) { currentDescriptionContent = currentDescriptionContent.replace(", ", ""); } descriptionContent += currentDescriptionContent; } else if (!doesExpressionContainIncrement) { descriptionContent += getSingleItemDescription(segments[i]); } else { descriptionContent += this.getSegmentDescription(segments[i], allDescription, getSingleItemDescription, getIncrementDescriptionFormat, getRangeDescriptionFormat, getDescriptionFormat); } } if (!doesExpressionContainIncrement) { description = stringUtilities_1.StringUtilities.format(getDescriptionFormat(expression), descriptionContent); } else { description = descriptionContent; } } else if (doesExpressionContainIncrement) { var segments = expression.split("/"); description = stringUtilities_1.StringUtilities.format(getIncrementDescriptionFormat(segments[1]), segments[1]); if (segments[0].indexOf("-") > -1) { var rangeSegmentDescription = this.generateRangeSegmentDescription(segments[0], getRangeDescriptionFormat, getSingleItemDescription); if (rangeSegmentDescription.indexOf(", ") != 0) { description += ", "; } description += rangeSegmentDescription; } else if (segments[0].indexOf("*") == -1) { var rangeItemDescription = stringUtilities_1.StringUtilities.format(getDescriptionFormat(segments[0]), getSingleItemDescription(segments[0])); rangeItemDescription = rangeItemDescription.replace(", ", ""); description += stringUtilities_1.StringUtilities.format(this.i18n.commaStartingX0(), rangeItemDescription); } } else if (doesExpressionContainRange) { description = this.generateRangeSegmentDescription(expression, getRangeDescriptionFormat, getSingleItemDescription); } return description; }; ExpressionDescriptor.prototype.generateRangeSegmentDescription = function (rangeExpression, getRangeDescriptionFormat, getSingleItemDescription) { var description = ""; var rangeSegments = rangeExpression.split("-"); var rangeSegment1Description = getSingleItemDescription(rangeSegments[0], 1); var rangeSegment2Description = getSingleItemDescription(rangeSegments[1], 2); var rangeDescriptionFormat = getRangeDescriptionFormat(rangeExpression); description += stringUtilities_1.StringUtilities.format(rangeDescriptionFormat, rangeSegment1Description, rangeSegment2Description); return description; }; ExpressionDescriptor.prototype.formatTime = function (hourExpression, minuteExpression, secondExpression) { var hourOffset = 0; var minuteOffset = 0; var hour = parseInt(hourExpression) + hourOffset; var minute = parseInt(minuteExpression) + minuteOffset; if (minute >= 60) { minute -= 60; hour += 1; } else if (minute < 0) { minute += 60; hour -= 1; } if (hour >= 24) { hour = hour - 24; } else if (hour < 0) { hour = 24 + hour; } var period = ""; var setPeriodBeforeTime = false; if (!this.options.use24HourTimeFormat) { setPeriodBeforeTime = !!(this.i18n.setPeriodBeforeTime && this.i18n.setPeriodBeforeTime()); period = setPeriodBeforeTime ? "".concat(this.getPeriod(hour), " ") : " ".concat(this.getPeriod(hour)); if (hour > 12) { hour -= 12; } if (hour === 0) { hour = 12; } } var second = ""; if (secondExpression) { second = ":".concat(("00" + secondExpression).substring(secondExpression.length)); } return "".concat(setPeriodBeforeTime ? period : "").concat(("00" + hour.toString()).substring(hour.toString().length), ":").concat(("00" + minute.toString()).substring(minute.toString().length)).concat(second).concat(!setPeriodBeforeTime ? period : ""); }; ExpressionDescriptor.prototype.transformVerbosity = function (description, useVerboseFormat) { if (!useVerboseFormat) { description = description.replace(new RegExp(", ".concat(this.i18n.everyMinute()), "g"), ""); description = description.replace(new RegExp(", ".concat(this.i18n.everyHour()), "g"), ""); description = description.replace(new RegExp(this.i18n.commaEveryDay(), "g"), ""); description = description.replace(/\, ?$/, ""); if (this.i18n.conciseVerbosityReplacements) { for (var _i = 0, _a = Object.entries(this.i18n.conciseVerbosityReplacements()); _i < _a.length; _i++) { var _b = _a[_i], key = _b[0], value = _b[1]; description = description.replace(new RegExp(key, "g"), value); } } } return description; }; ExpressionDescriptor.prototype.getPeriod = function (hour) { return hour >= 12 ? (this.i18n.pm && this.i18n.pm()) || "PM" : (this.i18n.am && this.i18n.am()) || "AM"; }; ExpressionDescriptor.locales = {}; return ExpressionDescriptor; }()); exports.ExpressionDescriptor = ExpressionDescriptor; /***/ }), /***/ 747: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.enLocaleLoader = void 0; var en_1 = __webpack_require__(486); var enLocaleLoader = (function () { function enLocaleLoader() { } enLocaleLoader.prototype.load = function (availableLocales) { availableLocales["en"] = new en_1.en(); }; return enLocaleLoader; }()); exports.enLocaleLoader = enLocaleLoader; /***/ }), /***/ 486: /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.en = void 0; var en = (function () { function en() { } en.prototype.atX0SecondsPastTheMinuteGt20 = function () { return null; }; en.prototype.atX0MinutesPastTheHourGt20 = function () { return null; }; en.prototype.commaMonthX0ThroughMonthX1 = function () { return null; }; en.prototype.commaYearX0ThroughYearX1 = function () { return null; }; en.prototype.use24HourTimeFormatByDefault = function () { return false; }; en.prototype.anErrorOccuredWhenGeneratingTheExpressionD = function () { return "An error occurred when generating the expression description. Check the cron expression syntax."; }; en.prototype.everyMinute = function () { return "every minute"; }; en.prototype.everyHour = function () { return "every hour"; }; en.prototype.atSpace = function () { return "At "; }; en.prototype.everyMinuteBetweenX0AndX1 = function () { return "Every minute between %s and %s"; }; en.prototype.at = function () { return "At"; }; en.prototype.spaceAnd = function () { return " and"; }; en.prototype.everySecond = function () { return "every second"; }; en.prototype.everyX0Seconds = function () { return "every %s seconds"; }; en.prototype.secondsX0ThroughX1PastTheMinute = function () { return "seconds %s through %s past the minute"; }; en.prototype.atX0SecondsPastTheMinute = function () { return "at %s seconds past the minute"; }; en.prototype.everyX0Minutes = function () { return "every %s minutes"; }; en.prototype.minutesX0ThroughX1PastTheHour = function () { return "minutes %s through %s past the hour"; }; en.prototype.atX0MinutesPastTheHour = function () { return "at %s minutes past the hour"; }; en.prototype.everyX0Hours = function () { return "every %s hours"; }; en.prototype.betweenX0AndX1 = function () { return "between %s and %s"; }; en.prototype.atX0 = function () { return "at %s"; }; en.prototype.commaEveryDay = function () { return ", every day"; }; en.prototype.commaEveryX0DaysOfTheWeek = function () { return ", every %s days of the week"; }; en.prototype.commaX0ThroughX1 = function () { return ", %s through %s"; }; en.prototype.commaAndX0ThroughX1 = function () { return ", %s through %s"; }; en.prototype.first = function () { return "first"; }; en.prototype.second = function () { return "second"; }; en.prototype.third = function () { return "third"; }; en.prototype.fourth = function () { return "fourth"; }; en.prototype.fifth = function () { return "fifth"; }; en.prototype.commaOnThe = function () { return ", on the "; }; en.prototype.spaceX0OfTheMonth = function () { return " %s of the month"; }; en.prototype.lastDay = function () { return "the last day"; }; en.prototype.commaOnTheLastX0OfTheMonth = function () { return ", on the last %s of the month"; }; en.prototype.commaOnlyOnX0 = function () { return ", only on %s"; }; en.prototype.commaAndOnX0 = function () { return ", and on %s"; }; en.prototype.commaEveryX0Months = function () { return ", every %s months"; }; en.prototype.commaOnlyInX0 = function () { return ", only in %s"; }; en.prototype.commaOnTheLastDayOfTheMonth = function () { return ", on the last day of the month"; }; en.prototype.commaOnTheLastWeekdayOfTheMonth = function () { return ", on the last weekday of the month"; }; en.prototype.commaDaysBeforeTheLastDayOfTheMonth = function () { return ", %s days before the last day of the month"; }; en.prototype.firstWeekday = function () { return "first weekday"; }; en.prototype.weekdayNearestDayX0 = function () { return "weekday nearest day %s"; }; en.prototype.commaOnTheX0OfTheMonth = function () { return ", on the %s of the month"; }; en.prototype.commaEveryX0Days = function () { return ", every %s days"; }; en.prototype.commaBetweenDayX0AndX1OfTheMonth = function () { return ", between day %s and %s of the month"; }; en.prototype.commaOnDayX0OfTheMonth = function () { return ", on day %s of the month"; }; en.prototype.commaEveryHour = function () { return ", every hour"; }; en.prototype.commaEveryX0Years = function () { return ", every %s years"; }; en.prototype.commaStartingX0 = function () { return ", starting %s"; }; en.prototype.daysOfTheWeek = function () { return ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; }; en.prototype.monthsOfTheYear = function () { return [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ]; }; en.prototype.atReboot = function () { return "Run once, at startup"; }; return en; }()); exports.en = en; /***/ }), /***/ 515: /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); function assert(value, message) { if (!value) { throw new Error(message); } } var RangeValidator = (function () { function RangeValidator() { } RangeValidator.secondRange = function (parse) { var parsed = parse.split(','); for (var i = 0; i < parsed.length; i++) { if (!isNaN(parseInt(parsed[i], 10))) { var second = parseInt(parsed[i], 10); assert(second >= 0 && second <= 59, 'seconds part must be >= 0 and <= 59'); } } }; RangeValidator.minuteRange = function (parse) { var parsed = parse.split(','); for (var i = 0; i < parsed.length; i++) { if (!isNaN(parseInt(parsed[i], 10))) { var minute = parseInt(parsed[i], 10); assert(minute >= 0 && minute <= 59, 'minutes part must be >= 0 and <= 59'); } } }; RangeValidator.hourRange = function (parse) { var parsed = parse.split(','); for (var i = 0; i < parsed.length; i++) { if (!isNaN(parseInt(parsed[i], 10))) { var hour = parseInt(parsed[i], 10); assert(hour >= 0 && hour <= 23, 'hours part must be >= 0 and <= 23'); } } }; RangeValidator.dayOfMonthRange = function (parse) { var parsed = parse.split(','); for (var i = 0; i < parsed.length; i++) { if (!isNaN(parseInt(parsed[i], 10))) { var dayOfMonth = parseInt(parsed[i], 10); assert(dayOfMonth >= 1 && dayOfMonth <= 31, 'DOM part must be >= 1 and <= 31'); } } }; RangeValidator.monthRange = function (parse, monthStartIndexZero) { var parsed = parse.split(','); for (var i = 0; i < parsed.length; i++) { if (!isNaN(parseInt(parsed[i], 10))) { var month = parseInt(parsed[i], 10); assert(month >= 1 && month <= 12, monthStartIndexZero ? 'month part must be >= 0 and <= 11' : 'month part must be >= 1 and <= 12'); } } }; RangeValidator.dayOfWeekRange = function (parse, dayOfWeekStartIndexZero) { var parsed = parse.split(','); for (var i = 0; i < parsed.length; i++) { if (!isNaN(parseInt(parsed[i], 10))) { var dayOfWeek = parseInt(parsed[i], 10); assert(dayOfWeek >= 0 && dayOfWeek <= 6, dayOfWeekStartIndexZero ? 'DOW part must be >= 0 and <= 6' : 'DOW part must be >= 1 and <= 7'); } } }; return RangeValidator; }()); exports["default"] = RangeValidator; /***/ }), /***/ 823: /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.StringUtilities = void 0; var StringUtilities = (function () { function StringUtilities() { } StringUtilities.format = function (template) { var values = []; for (var _i = 1; _i < arguments.length; _i++) { values[_i - 1] = arguments[_i]; } return template.replace(/%s/g, function (substring) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } return values.shift(); }); }; StringUtilities.containsAny = function (text, searchStrings) { return searchStrings.some(function (c) { return text.indexOf(c) > -1; }); }; return StringUtilities; }()); exports.StringUtilities = StringUtilities; /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it uses a non-standard name for the exports (exports). (() => { var exports = __webpack_exports__; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.toString = void 0; var expressionDescriptor_1 = __webpack_require__(333); var enLocaleLoader_1 = __webpack_require__(747); expressionDescriptor_1.ExpressionDescriptor.initialize(new enLocaleLoader_1.enLocaleLoader()); exports["default"] = expressionDescriptor_1.ExpressionDescriptor; var toString = expressionDescriptor_1.ExpressionDescriptor.toString; exports.toString = toString; })(); /******/ return __webpack_exports__; /******/ })() ; });