You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							117 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							117 lines
						
					
					
						
							2.5 KiB
						
					
					
				'use strict';
 | 
						|
 | 
						|
var CronExpression = require('./expression');
 | 
						|
 | 
						|
function CronParser() {}
 | 
						|
 | 
						|
/**
 | 
						|
 * Parse crontab entry
 | 
						|
 *
 | 
						|
 * @private
 | 
						|
 * @param {String} entry Crontab file entry/line
 | 
						|
 */
 | 
						|
CronParser._parseEntry = function _parseEntry (entry) {
 | 
						|
  var atoms = entry.split(' ');
 | 
						|
 | 
						|
  if (atoms.length === 6) {
 | 
						|
    return {
 | 
						|
      interval: CronExpression.parse(entry)
 | 
						|
    };
 | 
						|
  } else if (atoms.length > 6) {
 | 
						|
    return {
 | 
						|
      interval: CronExpression.parse(
 | 
						|
        atoms.slice(0, 6).join(' ')
 | 
						|
      ),
 | 
						|
      command: atoms.slice(6, atoms.length)
 | 
						|
    };
 | 
						|
  } else {
 | 
						|
    throw new Error('Invalid entry: ' + entry);
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * Wrapper for CronExpression.parser method
 | 
						|
 *
 | 
						|
 * @public
 | 
						|
 * @param {String} expression Input expression
 | 
						|
 * @param {Object} [options] Parsing options
 | 
						|
 * @return {Object}
 | 
						|
 */
 | 
						|
CronParser.parseExpression = function parseExpression (expression, options) {
 | 
						|
  return CronExpression.parse(expression, options);
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * Wrapper for CronExpression.fieldsToExpression method
 | 
						|
 *
 | 
						|
 * @public
 | 
						|
 * @param {Object} fields Input fields
 | 
						|
 * @param {Object} [options] Parsing options
 | 
						|
 * @return {Object}
 | 
						|
 */
 | 
						|
CronParser.fieldsToExpression = function fieldsToExpression (fields, options) {
 | 
						|
  return CronExpression.fieldsToExpression(fields, options);
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * Parse content string
 | 
						|
 *
 | 
						|
 * @public
 | 
						|
 * @param {String} data Crontab content
 | 
						|
 * @return {Object}
 | 
						|
 */
 | 
						|
CronParser.parseString = function parseString (data) {
 | 
						|
  var blocks = data.split('\n');
 | 
						|
 | 
						|
  var response = {
 | 
						|
    variables: {},
 | 
						|
    expressions: [],
 | 
						|
    errors: {}
 | 
						|
  };
 | 
						|
 | 
						|
  for (var i = 0, c = blocks.length; i < c; i++) {
 | 
						|
    var block = blocks[i];
 | 
						|
    var matches = null;
 | 
						|
    var entry = block.trim(); // Remove surrounding spaces
 | 
						|
 | 
						|
    if (entry.length > 0) {
 | 
						|
      if (entry.match(/^#/)) { // Comment
 | 
						|
        continue;
 | 
						|
      } else if ((matches = entry.match(/^(.*)=(.*)$/))) { // Variable
 | 
						|
        response.variables[matches[1]] = matches[2];
 | 
						|
      } else { // Expression?
 | 
						|
        var result = null;
 | 
						|
 | 
						|
        try {
 | 
						|
          result = CronParser._parseEntry('0 ' + entry);
 | 
						|
          response.expressions.push(result.interval);
 | 
						|
        } catch (err) {
 | 
						|
          response.errors[entry] = err;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  return response;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * Parse crontab file
 | 
						|
 *
 | 
						|
 * @public
 | 
						|
 * @param {String} filePath Path to file
 | 
						|
 * @param {Function} callback
 | 
						|
 */
 | 
						|
CronParser.parseFile = function parseFile (filePath, callback) {
 | 
						|
  require('fs').readFile(filePath, function(err, data) {
 | 
						|
    if (err) {
 | 
						|
      callback(err);
 | 
						|
      return;
 | 
						|
    }
 | 
						|
 | 
						|
    return callback(null, CronParser.parseString(data.toString()));
 | 
						|
  });
 | 
						|
};
 | 
						|
 | 
						|
module.exports = CronParser;
 |