text: (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();
  })(typeof self !== 'undefined' ? self : this, function() {
  return /******/ (function(modules) { // webpackBootstrap
  /******/ 	// The module cache
  /******/ 	var installedModules = {};
  /******/
  /******/ 	// The require function
  /******/ 	function __webpack_require__(moduleId) {
  /******/
  /******/ 		// Check if module is in cache
  /******/ 		if(installedModules[moduleId]) {
  /******/ 			return installedModules[moduleId].exports;
  /******/ 		}
  /******/ 		// Create a new module (and put it into the cache)
  /******/ 		var module = installedModules[moduleId] = {
  /******/ 			i: moduleId,
  /******/ 			l: false,
  /******/ 			exports: {}
  /******/ 		};
  /******/
  /******/ 		// Execute the module function
  /******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  /******/
  /******/ 		// Flag the module as loaded
  /******/ 		module.l = true;
  /******/
  /******/ 		// Return the exports of the module
  /******/ 		return module.exports;
  /******/ 	}
  /******/
  /******/
  /******/ 	// expose the modules object (__webpack_modules__)
  /******/ 	__webpack_require__.m = modules;
  /******/
  /******/ 	// expose the module cache
  /******/ 	__webpack_require__.c = installedModules;
  /******/
  /******/ 	// define getter function for harmony exports
  /******/ 	__webpack_require__.d = function(exports, name, getter) {
  /******/ 		if(!__webpack_require__.o(exports, name)) {
  /******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
  /******/ 		}
  /******/ 	};
  /******/
  /******/ 	// define __esModule on exports
  /******/ 	__webpack_require__.r = function(exports) {
  /******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  /******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  /******/ 		}
  /******/ 		Object.defineProperty(exports, '__esModule', { value: true });
  /******/ 	};
  /******/
  /******/ 	// create a fake namespace object
  /******/ 	// mode & 1: value is a module id, require it
  /******/ 	// mode & 2: merge all properties of value into the ns
  /******/ 	// mode & 4: return value when already ns object
  /******/ 	// mode & 8|1: behave like require
  /******/ 	__webpack_require__.t = function(value, mode) {
  /******/ 		if(mode & 1) value = __webpack_require__(value);
  /******/ 		if(mode & 8) return value;
  /******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  /******/ 		var ns = Object.create(null);
  /******/ 		__webpack_require__.r(ns);
  /******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  /******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  /******/ 		return ns;
  /******/ 	};
  /******/
  /******/ 	// getDefaultExport function for compatibility with non-harmony modules
  /******/ 	__webpack_require__.n = function(module) {
  /******/ 		var getter = module && module.__esModule ?
  /******/ 			function getDefault() { return module['default']; } :
  /******/ 			function getModuleExports() { return module; };
  /******/ 		__webpack_require__.d(getter, 'a', getter);
  /******/ 		return getter;
  /******/ 	};
  /******/
  /******/ 	// Object.prototype.hasOwnProperty.call
  /******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  /******/
  /******/ 	// __webpack_public_path__
  /******/ 	__webpack_require__.p = "";
  /******/
  /******/
  /******/ 	// Load entry module and return exports
  /******/ 	return __webpack_require__(__webpack_require__.s = 5);
  /******/ })
  /************************************************************************/
  /******/ ([
  /* 0 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.ExpressionDescriptor = void 0;
  var stringUtilities_1 = __webpack_require__(1);
  var cronParser_1 = __webpack_require__(2);
  var ExpressionDescriptor = (function () {
      function ExpressionDescriptor(expression, options) {
          this.expression = expression;
          this.options = options;
          this.expressionParts = new Array(5);
          if (ExpressionDescriptor.locales[options.locale]) {
              this.i18n = ExpressionDescriptor.locales[options.locale];
          }
          else {
              console.warn("Locale '" + options.locale + "' could not be found; falling back to 'en'.");
              this.i18n = ExpressionDescriptor.locales["en"];
          }
          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, use24HourTimeFormat = _b.use24HourTimeFormat, _f = _b.locale, locale = _f === void 0 ? "en" : _f;
          var options = {
              throwExceptionOnParseError: throwExceptionOnParseError,
              verbose: verbose,
              dayOfWeekStartIndexZero: dayOfWeekStartIndexZero,
              use24HourTimeFormat: use24HourTimeFormat,
              locale: locale,
          };
          var descripter = new ExpressionDescriptor(expression, options);
          return descripter.getFullDescription();
      };
      ExpressionDescriptor.initialize = function (localesLoader) {
          ExpressionDescriptor.specialCharacters = ["/", "-", ",", "*"];
          localesLoader.load(ExpressionDescriptor.locales);
      };
      ExpressionDescriptor.prototype.getFullDescription = function () {
          var description = "";
          try {
              var parser = new cronParser_1.CronParser(this.expression, this.options.dayOfWeekStartIndexZero);
              this.expressionParts = parser.parse();
              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 "" + 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.length > 0 && minutesDescription.length > 0) {
                  description += ", ";
              }
              description += minutesDescription;
              if (minutesDescription === hoursDescription) {
                  return description;
              }
              if (description.length > 0 && hoursDescription.length > 0) {
                  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);
          }, function (s) {
              return _this.i18n.secondsX0ThroughX1PastTheMinute();
          }, function (s) {
              return s == "0"
                  ? ""
                  : parseInt(s) < 20
                      ? _this.i18n.atX0SecondsPastTheMinute()
                      : _this.i18n.atX0SecondsPastTheMinuteGt20() || _this.i18n.atX0SecondsPastTheMinute();
          });
          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);
          }, 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()
                          : _this.i18n.atX0MinutesPastTheHourGt20() || _this.i18n.atX0MinutesPastTheHour();
              }
              catch (e) {
                  return _this.i18n.atX0MinutesPastTheHour();
              }
          });
          return description;
      };
      ExpressionDescriptor.prototype.getHoursDescription = function () {
          var _this = this;
          var expression = this.expressionParts[2];
          var description = this.getSegmentDescription(expression, this.i18n.everyHour(), function (s) {
              return _this.formatTime(s, "0", "");
          }, function (s) {
              return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Hours(), 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) {
                  var exp = s;
                  if (s.indexOf("#") > -1) {
                      exp = s.substr(0, s.indexOf("#"));
                  }
                  else if (s.indexOf("L") > -1) {
                      exp = exp.replace("L", "");
                  }
                  return daysOfWeekNames[parseInt(exp)];
              }, function (s) {
                  if (parseInt(s) == 1) {
                      return "";
                  }
                  else {
                      return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0DaysOfTheWeek(), s);
                  }
              }, function (s) {
                  return _this.i18n.commaX0ThroughX1();
              }, function (s) {
                  var format = null;
                  if (s.indexOf("#") > -1) {
                      var dayOfWeekOfMonthNumber = s.substring(s.indexOf("#") + 1);
                      var dayOfWeekOfMonthDescription = null;
                      switch (dayOfWeekOfMonthNumber) {
                          case "1":
                              dayOfWeekOfMonthDescription = _this.i18n.first();
                              break;
                          case "2":
                              dayOfWeekOfMonthDescription = _this.i18n.second();
                              break;
                          case "3":
                              dayOfWeekOfMonthDescription = _this.i18n.third();
                              break;
                          case "4":
                              dayOfWeekOfMonthDescription = _this.i18n.fourth();
                              break;
                          case "5":
                              dayOfWeekOfMonthDescription = _this.i18n.fifth();
                              break;
                      }
                      format = _this.i18n.commaOnThe() + dayOfWeekOfMonthDescription + _this.i18n.spaceX0OfTheMonth();
                  }
                  else if (s.indexOf("L") > -1) {
                      format = _this.i18n.commaOnTheLastX0OfTheMonth();
                  }
                  else {
                      var domSpecified = _this.expressionParts[3] != "*";
                      format = domSpecified ? _this.i18n.commaAndOnX0() : _this.i18n.commaOnlyOnX0();
                  }
                  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) {
              return monthNames[parseInt(s) - 1];
          }, function (s) {
              if (parseInt(s) == 1) {
                  return "";
              }
              else {
                  return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0Months(), 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);
                          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();
                          }, function (s) {
                              return _this.i18n.commaBetweenDayX0AndX1OfTheMonth();
                          }, function (s) {
                              return _this.i18n.commaOnDayX0OfTheMonth();
                          });
                      }
                      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);
          }, 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 += 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]);
          var rangeSegment2Description = getSingleItemDescription(rangeSegments[1]);
          rangeSegment2Description = rangeSegment2Description.replace(":00", ":59");
          var rangeDescriptionFormat = getRangeDescriptionFormat(rangeExpression);
          description += stringUtilities_1.StringUtilities.format(rangeDescriptionFormat, rangeSegment1Description, rangeSegment2Description);
          return description;
      };
      ExpressionDescriptor.prototype.formatTime = function (hourExpression, minuteExpression, secondExpression) {
          var hour = parseInt(hourExpression);
          var period = "";
          var setPeriodBeforeTime = false;
          if (!this.options.use24HourTimeFormat) {
              setPeriodBeforeTime = this.i18n.setPeriodBeforeTime && this.i18n.setPeriodBeforeTime();
              period = setPeriodBeforeTime ? this.getPeriod(hour) + " " : " " + this.getPeriod(hour);
              if (hour > 12) {
                  hour -= 12;
              }
              if (hour === 0) {
                  hour = 12;
              }
          }
          var minute = minuteExpression;
          var second = "";
          if (secondExpression) {
              second = ":" + ("00" + secondExpression).substring(secondExpression.length);
          }
          return "" + (setPeriodBeforeTime ? period : "") + ("00" + hour.toString()).substring(hour.toString().length) + ":" + ("00" + minute.toString()).substring(minute.toString().length) + second + (!setPeriodBeforeTime ? period : "");
      };
      ExpressionDescriptor.prototype.transformVerbosity = function (description, useVerboseFormat) {
          if (!useVerboseFormat) {
              description = description.replace(new RegExp(", " + this.i18n.everyMinute(), "g"), "");
              description = description.replace(new RegExp(", " + this.i18n.everyHour(), "g"), "");
              description = description.replace(new RegExp(this.i18n.commaEveryDay(), "g"), "");
              description = description.replace(/\, ?$/, "");
          }
          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;
  
  
  /***/ }),
  /* 1 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  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 () {
              return values.shift();
          });
      };
      StringUtilities.containsAny = function (text, searchStrings) {
          return searchStrings.some(function (c) {
              return text.indexOf(c) > -1;
          });
      };
      return StringUtilities;
  }());
  exports.StringUtilities = StringUtilities;
  
  
  /***/ }),
  /* 2 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.CronParser = void 0;
  var rangeValidator_1 = __webpack_require__(3);
  var CronParser = (function () {
      function CronParser(expression, dayOfWeekStartIndexZero) {
          if (dayOfWeekStartIndexZero === void 0) { dayOfWeekStartIndexZero = true; }
          this.expression = expression;
          this.dayOfWeekStartIndexZero = dayOfWeekStartIndexZero;
      }
      CronParser.prototype.parse = function () {
          var parsed = this.extractParts(this.expression);
          this.normalize(parsed);
          this.validate(parsed);
          return parsed;
      };
      CronParser.prototype.extractParts = function (expression) {
          if (!this.expression) {
              throw new Error("Expression is empty");
          }
          var parsed = expression.trim().split(/[ ]+/);
          if (parsed.length < 5) {
              throw new Error("Expression has only " + parsed.length + " part" + (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 " + 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());
          }
          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] += "-" + 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] = parts[0] + "-" + stepRangeThrough + "/" + parts[1];
                  }
              }
          }
      };
      CronParser.prototype.validate = function (parsed) {
          this.assertNoInvalidCharacters("DOW", parsed[5]);
          this.assertNoInvalidCharacters("DOM", parsed[3]);
          this.validateRange(parsed);
      };
      CronParser.prototype.validateRange = 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]);
          rangeValidator_1.default.dayOfWeekRange(parsed[5], this.dayOfWeekStartIndexZero);
      };
      CronParser.prototype.assertNoInvalidCharacters = function (partDescription, expression) {
          var invalidChars = expression.match(/[A-KM-VX-Z]+/gi);
          if (invalidChars && invalidChars.length) {
              throw new Error(partDescription + " part contains invalid values: '" + invalidChars.toString() + "'");
          }
      };
      return CronParser;
  }());
  exports.CronParser = CronParser;
  
  
  /***/ }),
  /* 3 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  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) {
          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, '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;
  
  
  /***/ }),
  /* 4 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  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 occured 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.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",
          ];
      };
      return en;
  }());
  exports.en = en;
  
  
  /***/ }),
  /* 5 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.toString = void 0;
  var expressionDescriptor_1 = __webpack_require__(0);
  var enLocaleLoader_1 = __webpack_require__(6);
  expressionDescriptor_1.ExpressionDescriptor.initialize(new enLocaleLoader_1.enLocaleLoader());
  exports.default = expressionDescriptor_1.ExpressionDescriptor;
  var toString = expressionDescriptor_1.ExpressionDescriptor.toString;
  exports.toString = toString;
  
  
  /***/ }),
  /* 6 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.enLocaleLoader = void 0;
  var en_1 = __webpack_require__(4);
  var enLocaleLoader = (function () {
      function enLocaleLoader() {
      }
      enLocaleLoader.prototype.load = function (availableLocales) {
          availableLocales["en"] = new en_1.en();
      };
      return enLocaleLoader;
  }());
  exports.enLocaleLoader = enLocaleLoader;
  
  
  /***/ })
  /******/ ]);
  });