UNPKG

@lou.codes/cron

Version:

⏲️ Cron Quartz and Cron UNIX expression parser

34 lines (33 loc) 1.29 kB
import { entriesToObject, length, objectToEntries } from "@lou.codes/iterables"; import { build } from "functional-expression"; import { cronRegExp } from "./cronRegExp.js"; import { normalizeAliases } from "./normalizeAliases.js"; import { parseFieldTuplesMap } from "./parseFieldTuplesMap.js"; /** * Parses a cron expression into an object representation. * * @category Cron String * @example * ```typescript * parse("* * * * *"); // { minute: "*", hour: "*", dayOfMonth: "*", month: "*", dayOfWeek: "*" } * parse("* * 13 10 *"); // { minute: "*", hour: "*", dayOfMonth: 13, month: 10, dayOfWeek: "*" } * parse("5 * 10,11,13 1-10 *"); // { minute: 5, hour: "*", dayOfMonth: [10, 11, 13], month: { from: 1, to: 10 }, dayOfWeek: "*" } * parse("* * 31 2 *"); // undefined * parse("nope"); // undefined * ``` * @see {@link parseFieldTuplesMap} * @see {@link normalizeAliases} * * @param expression Cron expression to be parsed. * @returns Object representing that expression or `undefined` if expression is * invalid. */ export const parse = expression => { const entries = parseFieldTuplesMap( objectToEntries( build("iu")(cronRegExp).exec(normalizeAliases(expression)) ?.groups ?? {}, ), ); return length(entries) === 0 ? undefined : entriesToObject(entries); };