{"version":3,"file":"cron.mjs","sources":["../../src/utils/cron.ts"],"sourcesContent":["import { isEmpty, negate } from 'lodash/fp';\n\nconst DATE_FUNCTIONS = [\n  'getSeconds',\n  'getMinutes',\n  'getHours',\n  'getDate',\n  'getMonth',\n  'getDay',\n] as const;\n\nconst INTEGER_REGEX = /^\\d+$/;\nconst STEP_REGEX = /^\\*\\/\\d+$/;\nconst COMPONENTS: {\n  limit: number;\n  zeroBasedIndices: boolean;\n  functionName: (typeof DATE_FUNCTIONS)[number];\n}[] = [\n  { limit: 60, zeroBasedIndices: true, functionName: 'getSeconds' },\n  { limit: 60, zeroBasedIndices: true, functionName: 'getMinutes' },\n  { limit: 24, zeroBasedIndices: true, functionName: 'getHours' },\n  { limit: 31, zeroBasedIndices: false, functionName: 'getDate' },\n  { limit: 12, zeroBasedIndices: false, functionName: 'getMonth' },\n  { limit: 7, zeroBasedIndices: true, functionName: 'getDay' },\n];\n\nconst shift = (component: string, index: number, date: Date) => {\n  if (component === '*') {\n    return '*';\n  }\n\n  const { limit, zeroBasedIndices, functionName } = COMPONENTS[index];\n  const offset = +!zeroBasedIndices;\n  const currentValue = date[functionName]();\n\n  if (INTEGER_REGEX.test(component)) {\n    return ((Number.parseInt(component, 10) + currentValue) % limit) + offset;\n  }\n\n  if (STEP_REGEX.test(component)) {\n    const [, step] = component.split('/');\n    const frequency = Math.floor(limit / Number(step));\n    const list = Array.from({ length: frequency }, (_, index) => index * Number(step));\n    return list.map((value) => ((value + currentValue) % limit) + offset).sort((a, b) => a - b);\n  }\n\n  // Unsupported syntax\n  return component;\n};\n\n/**\n * Simulate an interval by shifting a cron expression using the specified date.\n * @param {string} rule A cron expression you want to shift.\n * @param {Date} date The date that's gonna be used as the start of the \"interval\", it defaults to now.\n * @returns The shifted cron expression.\n */\nexport const shiftCronExpression = (rule: string, date = new Date()) => {\n  const components = rule.trim().split(' ').filter(negate(isEmpty));\n  const secondsIncluded = components.length === 6;\n  return components\n    .map((component, index) => shift(component, secondsIncluded ? index : index + 1, date))\n    .join(' ');\n};\n"],"names":["INTEGER_REGEX","STEP_REGEX","COMPONENTS","limit","zeroBasedIndices","functionName","shift","component","index","date","offset","currentValue","test","Number","parseInt","step","split","frequency","Math","floor","list","Array","from","length","_","map","value","sort","a","b","shiftCronExpression","rule","Date","components","trim","filter","negate","isEmpty","secondsIncluded","join"],"mappings":"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"}