1 | {"version":3,"sources":["../src/parse.js"],"names":["compareNumbers","a","b","createParser","fields","presets","m","length","j","field","aliases","undefined","symbols","Array","isArray","range","start","forEach","alias","i","Object","keys","aliasesRegExp","RegExp","join","n","pattern","schedule","values","isDigit","c","match","consumeWhitespaces","parseInteger","digits","push","SyntaxError","name","Number","parseInt","parseValue","value","post","lastIndex","matches","exec","parseRange","end","step","add","parseSequence","parse","p","Set","size","from","sort","split"],"mappings":"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","sourcesContent":["const compareNumbers = (a, b) => a - b\n\nconst createParser = ({ fields: [...fields], presets: { ...presets } }) => {\n const m = fields.length\n\n for (let j = 0; j < m; ++j) {\n const field = fields[j]\n let { aliases } = field\n if (aliases !== undefined) {\n let symbols = aliases\n\n if (Array.isArray(aliases)) {\n aliases = {}\n const [start] = field.range\n symbols.forEach((alias, i) => {\n aliases[alias] = start + i\n })\n } else {\n symbols = Object.keys(aliases)\n }\n\n fields[j] = {\n ...field,\n aliases,\n aliasesRegExp: new RegExp(symbols.join('|'), 'y'),\n }\n }\n }\n\n let field, i, n, pattern, schedule, values\n\n const isDigit = c => c >= '0' && c <= '9'\n const match = c => pattern[i] === c && (++i, true)\n\n const consumeWhitespaces = () => {\n let c\n while ((c = pattern[i]) === ' ' || c === '\\t') {\n ++i\n }\n }\n\n const parseInteger = () => {\n let c\n const digits = []\n while (isDigit((c = pattern[i]))) {\n ++i\n digits.push(c)\n }\n if (digits.length === 0) {\n throw new SyntaxError(`${field.name}: missing integer at character ${i}`)\n }\n return Number.parseInt(digits.join(''), 10)\n }\n\n const parseValue = () => {\n let value\n\n const { aliasesRegExp } = field\n if (aliasesRegExp === undefined || isDigit(pattern[i])) {\n value = parseInteger()\n const { post } = field\n if (post !== undefined) {\n value = post(value)\n }\n } else {\n aliasesRegExp.lastIndex = i\n const matches = aliasesRegExp.exec(pattern)\n if (matches === null) {\n throw new SyntaxError(\n `${field.name}: missing alias or integer at character ${i}`\n )\n }\n const [alias] = matches\n i += alias.length\n value = field.aliases[alias]\n }\n\n const { range } = field\n if (value < range[0] || value > range[1]) {\n throw new SyntaxError(\n `${field.name}: ${value} is not between ${range[0]} and ${range[1]}`\n )\n }\n return value\n }\n\n const parseRange = () => {\n let end, start, step\n if (match('*')) {\n if (!match('/')) {\n return\n }\n ;[start, end] = field.range\n step = parseInteger()\n } else {\n start = parseValue()\n if (!match('-')) {\n values.add(start)\n return\n }\n end = parseValue()\n step = match('/') ? parseInteger() : 1\n }\n\n for (let i = start; i <= end; i += step) {\n values.add(i)\n }\n }\n\n const parseSequence = () => {\n do {\n parseRange()\n } while (match(','))\n }\n\n const parse = p => {\n {\n const schedule = presets[p]\n if (schedule !== undefined) {\n return typeof schedule === 'string'\n ? (presets[p] = parse(schedule))\n : schedule\n }\n }\n\n try {\n i = 0\n n = p.length\n pattern = p\n schedule = {}\n\n for (let j = 0; j < m; ++j) {\n consumeWhitespaces()\n\n field = fields[j]\n values = new Set()\n parseSequence()\n if (values.size !== 0) {\n schedule[field.name] = Array.from(values).sort(compareNumbers)\n }\n }\n\n consumeWhitespaces()\n if (i !== n) {\n throw new SyntaxError(\n `unexpected character at offset ${i}, expected end`\n )\n }\n\n return schedule\n } finally {\n field = pattern = schedule = values = undefined\n }\n }\n\n return parse\n}\n\nexport default createParser({\n fields: [\n {\n name: 'minute',\n range: [0, 59],\n },\n {\n name: 'hour',\n range: [0, 23],\n },\n {\n name: 'dayOfMonth',\n range: [1, 31],\n },\n {\n aliases: 'jan feb mar apr may jun jul aug sep oct nov dec'.split(' '),\n name: 'month',\n range: [0, 11],\n },\n {\n aliases: 'sun mon tue wen thu fri sat'.split(' '),\n name: 'dayOfWeek',\n post: value => (value === 7 ? 0 : value),\n range: [0, 6],\n },\n ],\n presets: {\n '@annually': '0 0 1 jan *',\n '@daily': '0 0 * * *',\n '@hourly': '0 * * * *',\n '@monthly': '0 0 1 * *',\n '@weekly': '0 0 * * sun',\n '@yearly': '0 0 1 jan *',\n },\n})\n"],"file":"parse.js"} |