mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			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;
 | 
						|
})();
 |