@dazejs/framework
Version:
Daze.js - A powerful web framework for Node.js
111 lines • 4.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CornParser = void 0;
class CornParser {
convertMonthName(expression) {
let _expression = expression;
for (const [index, month] of CornParser.MONTHS.entries()) {
_expression = _expression.replace(new RegExp(month, 'gi'), `${parseInt(`${index}`, 10) + 1}`);
}
for (const [index, month] of CornParser.SHORT_MONTHS.entries()) {
_expression = _expression.replace(new RegExp(month, 'gi'), `${parseInt(`${index}`, 10) + 1}`);
}
return _expression;
}
convertWeekName(expression) {
let _expression = expression.replace('7', '0');
for (const [index, week] of CornParser.WEEKS.entries()) {
_expression = _expression.replace(new RegExp(week, 'gi'), `${parseInt(`${index}`, 10)}`);
}
for (const [index, week] of CornParser.SHORT_WEEKS.entries()) {
_expression = _expression.replace(new RegExp(week, 'gi'), `${parseInt(`${index}`, 10)}`);
}
return _expression;
}
convertAsterisks(expressions) {
if (~expressions[0].indexOf('*')) {
expressions[0] = expressions[0].replace('*', '0-59');
}
if (~expressions[1].indexOf('*')) {
expressions[1] = expressions[1].replace('*', '0-59');
}
if (~expressions[2].indexOf('*')) {
expressions[2] = expressions[2].replace('*', '0-23');
}
if (~expressions[3].indexOf('*')) {
expressions[3] = expressions[3].replace('*', '1-31');
}
if (~expressions[4].indexOf('*')) {
expressions[4] = expressions[4].replace('*', '1-12');
}
if (~expressions[5].indexOf('*')) {
expressions[5] = expressions[5].replace('*', '0-6');
}
return expressions;
}
convertRange(expression) {
const rangeRegEx = /(\d+)-(\d+)/;
let match = rangeRegEx.exec(expression);
while (match !== null && match.length > 0) {
const numbers = [];
let last = parseInt(match[2]);
let first = parseInt(match[1]);
if (first > last) {
last = parseInt(match[1]);
first = parseInt(match[2]);
}
for (let i = first; i <= last; i++) {
numbers.push(i);
}
expression = expression.replace(new RegExp(match[0], 'i'), numbers.join());
match = rangeRegEx.exec(expression);
}
return expression;
}
convertRanges(expressions) {
return expressions.map(expression => this.convertRange(expression));
}
convertSteps(expressions) {
const stepValuePattern = /^(.+)\/(\w+)$/;
for (const [index, expression] of expressions.entries()) {
const match = stepValuePattern.exec(expression);
const isStepValue = match !== null && match.length > 0;
if (isStepValue) {
const baseDivider = match[2];
if (isNaN(+baseDivider)) {
throw baseDivider + ' is not a valid step value';
}
const values = match[1].split(',');
const stepValues = [];
const divider = parseInt(baseDivider, 10);
for (const value of values) {
const _value = parseInt(value, 10);
if (_value % divider === 0) {
stepValues.push(value);
}
}
expressions[index] = stepValues.join(',');
}
}
return expressions;
}
interprete(expression) {
let _expressions = expression.replace(/\s{2,}/g, ' ').trim().split(' ');
if (_expressions.length === 5) {
_expressions = ['0'].concat(_expressions);
}
_expressions[4] = this.convertMonthName(_expressions[4]);
_expressions[5] = this.convertWeekName(_expressions[5]);
_expressions = this.convertAsterisks(_expressions);
_expressions = this.convertRanges(_expressions);
_expressions = this.convertSteps(_expressions);
const numberExpressions = _expressions.map(exp => exp.split(',').map(number => parseInt(number)));
return numberExpressions.join(' ');
}
}
exports.CornParser = CornParser;
CornParser.MONTHS = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];
CornParser.SHORT_MONTHS = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
CornParser.WEEKS = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
CornParser.SHORT_WEEKS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
//# sourceMappingURL=corn-parser.js.map