UNPKG

quartzcron

Version:

version: `0.1.0` [CHANGELOG](https://github.com/fedeghe/quartzcron/blob/master/CHANGELOG.md)

71 lines (68 loc) 2.23 kB
/* quartzcron (v.0.1.0) */ const { rx, errors } = require('./constants.js'); const getRangeValidator = (mainRx, cadenceRx) => val => { const v = `${val}`; if (v.match(rx.dumb.astrxn)) return true; const elements = v.split(/,/), matches = elements.map(el => el.match(rx.loose['n-n/nOPZ'])).filter(Boolean); if(matches.length !== elements.length) return false; // 1,3,5 => n-n/n // 1,3 => n-n // 1,5 => n/n // 1 => n return matches.every(m => { const base = m[1].match(mainRx); if (base) { if (m[3] && m[5]){ return m[3].match(mainRx) && m[5].match(cadenceRx); } if(m[3]) return m[3].match(mainRx); if(m[5]) return m[5].match(cadenceRx); } return base; }); }, getValidator = rxs => v => rxs.find(r => { if(typeof r === 'function') return r(v); return `${v}`.match(r); }), rx059 = getRangeValidator(rx.ranged['0-59'], rx.ranged['0-59'] ), rx023 = getRangeValidator(rx.ranged['0-23'], rx.ranged['0-23'] ), rx131 = getRangeValidator(rx.ranged['1-31'], rx.ranged['1-31'] ), rxmonth = getRangeValidator(rx.month, rx.month ), rxYear = getRangeValidator(rx.year, rx.yearCadence ), rxWeekday = getRangeValidator(rx.ranged['maybelabelled-wd'], rx.ranged['maybelabelled-wd'] ), rxDom = getValidator([ rx131, rx.ranged['1-31'], rx.dumb.quest, rx.dumb.astrxn, rx.dumb['LW?'], rx.ranged['L-md'], rx.ranged['1-31L'], rx.ranged['1-31W'] ]), rxDow = getValidator([ rx.dumb.quest, rxWeekday, rx.ranged.fullWd, rx.ranged.nthFullWd ]), fieldCorrelationValidators = [{ validator: ({dom, dow}) => !(dow!=='?' && dom!=='?') && !(dow==='?'&&dom==='?'), message: errors.domdowExclusivity }]; module.exports = { validators: { second: rx059, minute: rx059, hour: rx023, month: rxmonth, year: rxYear, dayOfMonth: rxDom, dayOfWeek: rxDow }, fieldCorrelationValidators };