70 lines
2.2 KiB
JavaScript
70 lines
2.2 KiB
JavaScript
'use strict';
|
|
|
|
// SOURCE: https://github.com/node-cron/node-cron
|
|
// LICENSE: https://github.com/node-cron/node-cron/blob/master/LICENSE.md
|
|
|
|
const monthNamesConversion = require('./month-names-conversion');
|
|
const weekDayNamesConversion = require('./week-day-names-conversion');
|
|
const convertAsterisksToRanges = require('./asterisk-to-range-conversion');
|
|
const convertRanges = require('./range-conversion');
|
|
const 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 (let i = 0; i < expressions.length; i++) {
|
|
const numbers = expressions[i].split(',');
|
|
for (let 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) {
|
|
let 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;
|
|
})();
|