mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-30 18:12:25 -04: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;
 | |
| })();
 |