'use strict'; var monthNamesConversion = require('./month-names-conversion'); var weekDayNamesConversion = require('./week-day-names-conversion'); var convertAsterisksToRanges = require('./asterisk-to-range-conversion'); var convertRanges = require('./range-conversion'); var convertSteps = require('./step-values-conversion'); module.exports = (() => { function appendSeccondExpression(expressions){ if(expressions.length === 5){ return ['0'].concat(expressions); } return expressions; } function removeSpaces(str) { return str.replace(/\s{2,}/g, ' ').trim(); } // Function that takes care of normalization. function normalizeIntegers(expressions) { for (var i=0; i < expressions.length; i++){ var numbers = expressions[i].split(','); for (var j=0; j<numbers.length; j++){ numbers[j] = parseInt(numbers[j]); } expressions[i] = numbers; } return expressions; } /* * The node-cron core allows only numbers (including multiple numbers e.g 1,2). * This module is going to translate the month names, week day names and ranges * to integers relatives. * * Month names example: * - expression 0 1 1 January,Sep * * - Will be translated to 0 1 1 1,9 * * * Week day names example: * - expression 0 1 1 2 Monday,Sat * - Will be translated to 0 1 1 1,5 * * * Ranges example: * - expression 1-5 * * * * * - Will be translated to 1,2,3,4,5 * * * * */ function interprete(expression){ var expressions = removeSpaces(expression).split(' '); expressions = appendSeccondExpression(expressions); expressions[4] = monthNamesConversion(expressions[4]); expressions[5] = weekDayNamesConversion(expressions[5]); expressions = convertAsterisksToRanges(expressions); expressions = convertRanges(expressions); expressions = convertSteps(expressions); expressions = normalizeIntegers(expressions); return expressions.join(' '); } return interprete; })();