UNPKG

@valkyriestudios/validator

Version:

A lightweight configurable javascript validator

77 lines (76 loc) 2.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.vCron = vCron; exports.default = vCron; const number_1 = require("@valkyriestudios/utils/number"); const RGX_DIGITS = /^\d+$/; function isSubpart(part, min, max) { if (!RGX_DIGITS.test(part)) return null; const normalized = parseFloat(part); return (0, number_1.isIntBetween)(normalized, min, max) ? normalized : null; } function isPart(part, min, max) { if (part === '*') { return true; } else if (part.indexOf('/') > -1) { const [base, stepStr] = part.split('/', 2); const step = parseFloat(stepStr); if (!(0, number_1.isIntGt)(step, 0) || !(0, number_1.isIntBetween)(step, min, max)) return false; if (base === '*') return true; let start = min; let end = max; if (base.indexOf('-') > -1) { const chunks = base.split('-'); if (chunks.length !== 2) return false; start = isSubpart(chunks[0], min, max); end = isSubpart(chunks[1], min, max); } else { start = isSubpart(base, min, max); } if (start === null || end === null) return false; if (start > end) return false; if (step > (end - start)) return false; return true; } else if (part.indexOf('-') > -1) { const chunks = part.split('-'); if (chunks.length !== 2) return false; const start = isSubpart(chunks[0], min, max); const end = isSubpart(chunks[1], min, max); if (start === null || end === null) return false; return start < end; } else if (part.indexOf(',') > -1) { const chunks = part.split(','); for (let i = 0; i < chunks.length; i++) { if (isSubpart(chunks[i], min, max) === null) return false; } return true; } else { return isSubpart(part, min, max) !== null; } } function vCron(val) { if (typeof val !== 'string') return false; const parts = val.split(' ', 6); return (parts.length === 5 && isPart(parts[0], 0, 59) && isPart(parts[1], 0, 23) && isPart(parts[2], 1, 31) && isPart(parts[3], 1, 12) && isPart(parts[4], 0, 6)); }