UNPKG

@dazejs/framework

Version:

Daze.js - A powerful web framework for Node.js

111 lines 4.88 kB
"use strict"; 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