123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- '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, callback) {
- return CronExpression.parse(expression, options, callback);
- };
- /**
- * Parse content string
- *
- * @public
- * @param {String} data Crontab content
- * @return {Object}
- */
- CronParser.parseString = function parseString (data) {
- var self = this;
- 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.replace(/^\s+|\s+$/g, ''); // 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 = self._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;
|