{"version":3,"sources":["../src/helpers/constants/commons.ts","../src/helpers/constants/postponers.ts","../src/helpers/constants/cron.ts","../src/helpers/functions/locale.ts","../src/helpers/functions/shared.ts","../src/helpers/functions/dates.ts","../src/helpers/functions/cron.ts","../src/helpers/constants/shared.ts","../src/helpers/constants/formats.ts","../src/helpers/constants/validators.ts","../src/helpers/functions/lib.ts","../src/main.ts"],"sourcesContent":["import { T_ArgsBase } from '@/helpers/types/lib'\n\nexport const ERRORS = {\n  outputLimit: {\n    count: 99_999,\n    errorText: 'Too many iterations! It has exceeded 99_999.',\n  },\n}\n\n/**\n * Readonly map of supported recurrence interval units.\n *\n * Use as the `unit` value inside a rule object passed to `genRecurDateBasedList`.\n *\n * Keys / values: `millisecond`, `minute`, `hour`, `day`, `week`, `month`, `year`.\n *\n * @constant\n */\nexport const INTERVAL_UNITS = {\n  millisecond: 'millisecond',\n  minute: 'minute',\n  hour: 'hour',\n  day: 'day',\n  week: 'week',\n  month: 'month',\n  year: 'year',\n} as const\n\n/**\n * Readonly map of supported iteration directions.\n *\n * - `DIRECTIONS.forward` — iterate from `start` toward the future.\n * - `DIRECTIONS.backward` — iterate from `start` toward the past.\n *\n * @constant\n */\nexport const DIRECTIONS = {\n  backward: 'backward',\n  forward: 'forward',\n} as const\n\nexport const DEFAULT_ARGS: Partial<T_ArgsBase> & Pick<T_ArgsBase, 'end' | 'rules' | 'direction' | 'extend'> = {\n  end: 10,\n  rules: [\n    {\n      portion: 1,\n      unit: INTERVAL_UNITS.day,\n    },\n  ],\n  direction: DIRECTIONS.forward,\n  extend: {},\n}\n","import { T_CoreArgs, T_IntervalUnit, T_Rule } from '@/helpers/types/lib'\nimport { INTERVAL_UNITS } from '@/helpers/constants/commons'\n\nexport const POSTPONERS: Record<\n  T_CoreArgs['direction'],\n  Record<T_IntervalUnit, (start: T_CoreArgs['start'], interval: T_Rule['portion']) => void>\n> = {\n  backward: {\n    [INTERVAL_UNITS.millisecond]: (date, interval) => date.setTime(date.getTime() - interval),\n    [INTERVAL_UNITS.minute]: (date, interval) => date.setMinutes(date.getMinutes() - interval),\n    [INTERVAL_UNITS.hour]: (date, interval) => date.setHours(date.getHours() - interval),\n    [INTERVAL_UNITS.day]: (date, interval) => date.setDate(date.getDate() - interval),\n    [INTERVAL_UNITS.week]: (date, interval) => date.setDate(date.getDate() - interval * 7),\n    [INTERVAL_UNITS.month]: (date, interval) => date.setMonth(date.getMonth() - interval),\n    [INTERVAL_UNITS.year]: (date, interval) => date.setFullYear(date.getFullYear() - interval),\n  },\n  forward: {\n    [INTERVAL_UNITS.millisecond]: (date, interval) => date.setTime(date.getTime() + interval),\n    [INTERVAL_UNITS.minute]: (date, interval) => date.setMinutes(date.getMinutes() + interval),\n    [INTERVAL_UNITS.hour]: (date, interval) => date.setHours(date.getHours() + interval),\n    [INTERVAL_UNITS.day]: (date, interval) => date.setDate(date.getDate() + interval),\n    [INTERVAL_UNITS.week]: (date, interval) => date.setDate(date.getDate() + interval * 7),\n    [INTERVAL_UNITS.month]: (date, interval) => date.setMonth(date.getMonth() + interval),\n    [INTERVAL_UNITS.year]: (date, interval) => date.setFullYear(date.getFullYear() + interval),\n  },\n}\n","export const CRON_FIELD_RANGES = {\n  minute: [0, 59],\n  hour: [0, 23],\n  dayOfMonth: [1, 31],\n  month: [1, 12],\n  dayOfWeek: [0, 6], // 0 = Sunday\n} as const\n\nexport const CRON_FIELD_NAMES = Object.keys(CRON_FIELD_RANGES) as (keyof typeof CRON_FIELD_RANGES)[]\n\nexport const CRON_FAR_BOUND_MS = 100 * 365 * 24 * 60 * 60 * 1000\n\nexport const MAX_ITERATIONS_FIRST_MATCH_MINUTES = 8 * 24 * 60\nexport const MAX_ITERATIONS_DAY_STEP = 32\n","import { T_CoreArgs } from '@/helpers/types/lib'\n\nexport function getOutputLocale(localeString: T_CoreArgs['localeString']): string {\n  if (localeString?.lang == null) return 'en-US'\n  if (typeof localeString.lang === 'string') return localeString.lang\n  if (Array.isArray(localeString.lang)) return String(localeString.lang[0] ?? 'en-US')\n  return String(localeString.lang)\n}\n","import type { T_ArgsBase, T_CoreArgs } from '@/helpers/types/lib'\n\nexport const pad = (n: number) => `${Math.floor(Math.abs(n))}`.padStart(2, '0')\nexport const pad3 = (n: number) => `${Math.floor(Math.abs(n))}`.padStart(3, '0')\n\nexport const isNullish = (value: unknown) => value == null\n\nexport function hasFormatOptions(localeString: T_ArgsBase['localeString'] | undefined): boolean {\n  return Boolean(localeString?.formatOptions && Object.keys(localeString.formatOptions).length > 0)\n}\n\nexport const generateErrorPreText = (key: keyof T_CoreArgs, value: unknown) =>\n  `Invalid property \"${key}\" (received *${value === '' ? 'empty string' : value}*)`\n","import { T_ArgsBase, T_CoreArgs, T_OutputFormat } from '@/helpers/types/lib'\nimport { getOutputLocale } from '@/helpers/functions/locale'\nimport { hasFormatOptions, pad, pad3 } from '@/helpers/functions/shared'\n\nexport function cloneDate(date: Date): Date {\n  return new Date(date.getTime())\n}\n\nexport const setTimeZoneOffset = (date: Date, offset: number, resetCurrent: boolean = true) => {\n  if (resetCurrent) date.setTime(date.getTime() + date.getTimezoneOffset() * 60 * 1000)\n  date.setTime(date.getTime() + offset * 60 * 60 * 1000)\n\n  return date\n}\n\nexport const isDateObject = (date: unknown) => {\n  return Object.prototype.toString.call(date) === '[object Date]'\n}\n\nexport const isValidDate = (date: T_ArgsBase['start']) => {\n  const processedDate = new Date(date)\n\n  if (isDateObject(processedDate)) {\n    return !!processedDate.getTime()\n  }\n\n  return false\n}\n\nexport const toAdjustedTimezoneISOString = (date: Date) => {\n  return (\n    date.getFullYear() +\n    '-' +\n    pad(date.getMonth() + 1) +\n    '-' +\n    pad(date.getDate()) +\n    'T' +\n    pad(date.getHours()) +\n    ':' +\n    pad(date.getMinutes()) +\n    ':' +\n    pad(date.getSeconds())\n  )\n}\n\nfunction getDayOfYear(date: Date, useUtc: boolean = false): number {\n  if (useUtc) {\n    const y = date.getUTCFullYear()\n    const start = Date.UTC(y, 0, 0)\n    const diff = date.getTime() - start\n    return Math.floor(diff / (24 * 60 * 60 * 1000))\n  }\n  const start = new Date(date.getFullYear(), 0, 0)\n  const diff = date.getTime() - start.getTime() + (start.getTimezoneOffset() - date.getTimezoneOffset()) * 60 * 1000\n  return Math.floor(diff / (24 * 60 * 60 * 1000))\n}\n\nconst MAX_INTL_CACHE_SIZE = 32\nconst INTL_FORMAT_CACHE = new Map<\n  string,\n  {\n    monthShort: Intl.DateTimeFormat\n    monthLong: Intl.DateTimeFormat\n    weekdayLong: Intl.DateTimeFormat\n    weekdayShort: Intl.DateTimeFormat\n  }\n>()\n\nfunction getIntlFormatters(locale: string, useUtc: boolean) {\n  const key = `${locale}\\0${useUtc}`\n  let cached = INTL_FORMAT_CACHE.get(key)\n  if (!cached) {\n    if (INTL_FORMAT_CACHE.size >= MAX_INTL_CACHE_SIZE) INTL_FORMAT_CACHE.clear()\n    const intlOpts = useUtc ? { timeZone: 'UTC' as const } : {}\n    cached = {\n      monthShort: new Intl.DateTimeFormat(locale, { month: 'short', ...intlOpts }),\n      monthLong: new Intl.DateTimeFormat(locale, { month: 'long', ...intlOpts }),\n      weekdayLong: new Intl.DateTimeFormat(locale, { weekday: 'long', ...intlOpts }),\n      weekdayShort: new Intl.DateTimeFormat(locale, { weekday: 'short', ...intlOpts }),\n    }\n    INTL_FORMAT_CACHE.set(key, cached)\n  }\n  return cached\n}\n\nfunction getTimezoneOffsetString(date: Date, numericTimeZone?: number): string {\n  const offsetMin = numericTimeZone != null ? numericTimeZone * 60 : -date.getTimezoneOffset()\n  const sign = offsetMin >= 0 ? '+' : '-'\n  const absMin = Math.abs(offsetMin)\n  const h = Math.floor(absMin / 60)\n  const m = absMin % 60\n  return `${sign}${pad(h)}:${pad(m)}`\n}\n\n/**\n * Formats a date using a supported output format string from {@link OUTPUT_FORMATS}.\n *\n * **Tokens (all uppercase):** YYYY/YY (year), MM/M (month), DD/D (day), HH (hour; 12h when format contains ` A`), MM in time context (minutes), SS (seconds), SSS (milliseconds), A (AM/PM), EEE/EEEE (weekday short/long), MMM/MMMM (month short/long), DDD (day of year), Z (timezone offset e.g. +00:00). Uses local time; use result’s utcDate for UTC. Month and weekday names use the given locale.\n *\n * @param date - The Date instance to format.\n * @param format - One of the strings in {@link OUTPUT_FORMATS} (e.g. `'YYYY-MM-DD'`, `'YYYY-MM-DD HH:MM'`, `'MM/DD/YYYY HH:MM:SS A'`, `'DD MMM YYYY HH:MM:SS'`, `'MMMM YYYY'`).\n * @param locale - BCP 47 locale string for month and weekday names (default `'en-US'`).\n * @param numericTimeZone - Optional numeric timezone offset (e.g. 5, -8). When provided, the Z token outputs this offset instead of the machine's.\n * @returns The formatted date string with all tokens replaced.\n */\nexport function formatDateByOutputFormat(\n  date: Date,\n  format: T_OutputFormat,\n  locale: string = 'en-US',\n  numericTimeZone?: number\n): string {\n  const year = date.getFullYear()\n  const month = date.getMonth()\n  const day = date.getDate()\n  const hours = date.getHours()\n  const minutes = date.getMinutes()\n  const seconds = date.getSeconds()\n  const ms = date.getMilliseconds()\n\n  const use12h = format.includes(' A')\n  const hour24 = hours\n  const hour12 = hours % 12 === 0 ? 12 : hours % 12\n  const ampm = hours < 12 ? 'AM' : 'PM'\n\n  const {\n    monthShort: monthShortFmt,\n    monthLong: monthLongFmt,\n    weekdayLong: weekdayLongFmt,\n    weekdayShort: weekdayShortFmt,\n  } = getIntlFormatters(locale, false)\n  const monthShort = monthShortFmt.format(date)\n  const monthLong = monthLongFmt.format(date)\n  const weekdayLong = weekdayLongFmt.format(date)\n  const weekdayShort = weekdayShortFmt.format(date)\n\n  const dayOfYear = getDayOfYear(date, false)\n  const tzStr = getTimezoneOffsetString(date, numericTimeZone)\n  const monthPadded = pad(month + 1)\n  const dayPadded = pad(day)\n\n  // Placeholders to protect locale text and AM/PM from numeric M/D replacement\n  const PH_WL = '\\x01',\n    PH_WS = '\\x02',\n    PH_ML = '\\x03',\n    PH_MS = '\\x04',\n    PH_AP = '\\x05'\n\n  // 1. Weekday (EEEE/EEE) and month names → placeholders (longest first)\n  let out = format.replace(/EEEE/g, PH_WL).replace(/EEE/g, PH_WS).replace(/MMMM/g, PH_ML).replace(/MMM/g, PH_MS)\n\n  // 2. Year\n  out = out.replace(/YYYY/g, String(year)).replace(/YY/g, String(year).slice(-2))\n\n  // 3. Day of year\n  out = out.replace(/DDD/g, pad3(dayOfYear))\n\n  // 4. Minutes in time context (before month MM): :MM followed by :, ., space, Z or end\n  out = out.replace(/:MM(?=[:. Z]|$)/g, `:${pad(minutes)}`)\n\n  // 5. Hour (HH), seconds (SS), ms (SSS), AM/PM → placeholder\n  const hourStr = use12h ? pad(hour12) : pad(hour24)\n  out = out\n    .replace(/HH/g, hourStr)\n    .replace(/SSS/g, pad3(ms))\n    .replace(/SS/g, pad(seconds))\n    .replace(/ A$/g, ` ${PH_AP}`)\n    .replace(/ A /g, ` ${PH_AP} `)\n    .replace(/^A /g, `${PH_AP} `)\n    .replace(/ A/g, ` ${PH_AP}`)\n\n  // 6. Month 2-digit (MM in date context)\n  out = out.replace(/MM/g, monthPadded)\n\n  // 7. Day 2-digit\n  out = out.replace(/DD/g, dayPadded)\n\n  // 8. Single M / D (unpadded month/day)\n  out = out.replace(/(?<![DM])D(?!D)/g, String(day)).replace(/(?<![DM])M(?!M)/g, String(month + 1))\n\n  // 9. Timezone Z\n  out = out.replace(/ Z$/g, ` ${tzStr}`).replace(/Z$/g, tzStr)\n\n  // 10. Restore placeholders with actual locale text / AM/PM\n  out = out\n    .replace(new RegExp(PH_WL, 'g'), weekdayLong)\n    .replace(new RegExp(PH_WS, 'g'), weekdayShort)\n    .replace(new RegExp(PH_ML, 'g'), monthLong)\n    .replace(new RegExp(PH_MS, 'g'), monthShort)\n    .replace(new RegExp(PH_AP, 'g'), ampm)\n\n  return out\n}\n\nexport function getDateStr(currentDate: Date, f_Args: T_CoreArgs): string {\n  const outputLocale = getOutputLocale(f_Args.localeString)\n  if (f_Args.outputFormat) {\n    return formatDateByOutputFormat(currentDate, f_Args.outputFormat, outputLocale, f_Args.numericTimeZone)\n  }\n  if (f_Args.localeString?.lang != null || hasFormatOptions(f_Args.localeString)) {\n    return currentDate.toLocaleString(f_Args.localeString!.lang, f_Args.localeString!.formatOptions)\n  }\n  return toAdjustedTimezoneISOString(currentDate)\n}\n","/**\n * Cron expression support (5 fields: minute, hour, day-of-month, month, day-of-week).\n * Used when `rules` is a cron string in genRecurDateBasedList.\n */\nimport {\n  CRON_FAR_BOUND_MS,\n  CRON_FIELD_NAMES,\n  CRON_FIELD_RANGES,\n  MAX_ITERATIONS_DAY_STEP,\n  MAX_ITERATIONS_FIRST_MATCH_MINUTES,\n} from '@/helpers/constants/cron'\nimport { ERRORS } from '@/helpers/constants/commons'\nimport { T_CronFieldName, T_CronStepType } from '@/helpers/types/cron'\nimport { T_Direction, T_ParsedCron } from '@/helpers/types/lib'\nimport { cloneDate } from '@/helpers/functions/dates'\n\n/** null = any, Set = allowed values, undefined = invalid */\nfunction parseCronField(\n  str: string,\n  fieldName: T_CronFieldName,\n  allowSundaySeven: boolean\n): Set<number> | null | undefined {\n  const trimmed = str.trim()\n  const [min, max] = CRON_FIELD_RANGES[fieldName]\n\n  if (trimmed === '*') return null\n\n  const values = new Set<number>()\n\n  for (const part of trimmed.split(',')) {\n    const stepMatch = part.match(/^(.+)\\/(\\d+)$/)\n    const step = stepMatch ? Math.max(1, parseInt(stepMatch[2], 10)) : 1\n    const rangePart = stepMatch ? stepMatch[1].trim() : part.trim()\n\n    let rangeStart: number\n    let rangeEnd: number\n\n    if (rangePart === '*') {\n      rangeStart = min\n      rangeEnd = max\n    } else {\n      const range = rangePart.split('-')\n      if (range.length === 1) {\n        let v = parseInt(range[0], 10)\n        if (fieldName === 'dayOfWeek' && allowSundaySeven && v === 7) v = 0\n        if (isNaN(v) || v < min || v > max) return undefined\n        values.add(v)\n        continue\n      }\n      if (range.length === 2) {\n        rangeStart = parseInt(range[0], 10)\n        rangeEnd = parseInt(range[1], 10)\n        if (fieldName === 'dayOfWeek' && allowSundaySeven) {\n          if (rangeStart === 7) rangeStart = 0\n          if (rangeEnd === 7) rangeEnd = 0\n        }\n        if (isNaN(rangeStart) || isNaN(rangeEnd) || rangeStart < min || rangeEnd > max || rangeStart > rangeEnd)\n          return undefined\n      } else {\n        return undefined\n      }\n    }\n\n    for (let i = rangeStart; i <= rangeEnd; i += step) {\n      if (i >= min && i <= max) values.add(i)\n    }\n  }\n\n  if (values.size === 0) return undefined\n  return values\n}\n\n/**\n * Parse a 5-field cron string. Returns null if invalid.\n * Format: \"minute hour dayOfMonth month dayOfWeek\"\n * dayOfWeek: 0-6 (0=Sunday) or 1-7 (7=Sunday)\n */\nexport function parseCron(cronStr: string): T_ParsedCron | null {\n  if (typeof cronStr !== 'string') return null\n  const parts = cronStr.trim().split(/\\s+/)\n  if (parts.length !== 5) return null\n\n  const allowSundaySeven = true\n  const minute = parseCronField(parts[0], 'minute', false)\n  const hour = parseCronField(parts[1], 'hour', false)\n  const dayOfMonth = parseCronField(parts[2], 'dayOfMonth', false)\n  const month = parseCronField(parts[3], 'month', false)\n  const dayOfWeek = parseCronField(parts[4], 'dayOfWeek', allowSundaySeven)\n\n  if (\n    minute === undefined ||\n    hour === undefined ||\n    dayOfMonth === undefined ||\n    month === undefined ||\n    dayOfWeek === undefined\n  )\n    return null\n\n  return { minute, hour, dayOfMonth, month, dayOfWeek }\n}\n\n/**\n * Validate cron string. Returns error message or empty string if valid.\n */\nexport function validateCronString(cronStr: string): string {\n  const trimmed = cronStr.trim()\n  if (!trimmed) {\n    return 'Cron rules must be a non-empty string with 5 fields: minute hour day-of-month month day-of-week.'\n  }\n  const parsed = parseCron(trimmed)\n  if (!parsed) {\n    return 'Invalid cron expression. Use 5 fields: minute (0-59), hour (0-23), day-of-month (1-31), month (1-12), day-of-week (0-6, 0=Sunday). Examples: \"0 9 * * 1-5\", \"*/15 0 1 * *\".'\n  }\n  return ''\n}\n\nfunction dateMatchesCron(date: Date, cron: T_ParsedCron): boolean {\n  const min = date.getMinutes()\n  const hour = date.getHours()\n  const dom = date.getDate()\n  const month = date.getMonth() + 1\n  const dow = date.getDay()\n\n  if (cron.minute !== null && !cron.minute.has(min)) return false\n  if (cron.hour !== null && !cron.hour.has(hour)) return false\n  if (cron.dayOfMonth !== null && !cron.dayOfMonth.has(dom)) return false\n  if (cron.month !== null && !cron.month.has(month)) return false\n  if (cron.dayOfWeek !== null && !cron.dayOfWeek.has(dow)) return false\n  return true\n}\n\n// --- Optimized path: split by multi-value fields, fixed-step or day-step, k-way merge ---\n\nfunction getSingletonValue(set: Set<number> | null): number | null {\n  if (set === null || set.size !== 1) return null\n  return set.values().next().value\n}\n\n/** Set date to cron time when minute/hour are fixed (for dayOfMonth step). */\nfunction setTimeFromParsed(d: Date, parsed: T_ParsedCron): void {\n  const m = getSingletonValue(parsed.minute) ?? d.getMinutes()\n  const h = getSingletonValue(parsed.hour) ?? d.getHours()\n  d.setHours(h, m, 0, 0)\n}\n\nfunction getStepType(parsed: T_ParsedCron): T_CronStepType {\n  const minS = getSingletonValue(parsed.minute)\n  const hourS = getSingletonValue(parsed.hour)\n  const domS = getSingletonValue(parsed.dayOfMonth)\n  const monthS = getSingletonValue(parsed.month)\n  const dowS = getSingletonValue(parsed.dayOfWeek)\n\n  if (domS !== null && parsed.month === null) return 'dayOfMonth'\n  if (dowS !== null && domS === null && parsed.month === null) return 'week'\n  if (monthS !== null && domS !== null) return 'year'\n  if (\n    minS !== null &&\n    hourS !== null &&\n    parsed.dayOfMonth === null &&\n    parsed.month === null &&\n    parsed.dayOfWeek === null\n  ) {\n    return 'day'\n  }\n  if (minS !== null && parsed.hour === null) return 'minute'\n  return 'day'\n}\n\nfunction expandToSubCrons(parsed: T_ParsedCron): T_ParsedCron[] {\n  for (const name of CRON_FIELD_NAMES) {\n    const set = parsed[name]\n    if (set !== null && set.size > 1) {\n      return Array.from(set).map((val) => ({\n        ...parsed,\n        [name]: new Set<number>([val]),\n      }))\n    }\n  }\n  return [parsed]\n}\n\nfunction getFirstMatchInclusive(from: Date, parsed: T_ParsedCron, direction: T_Direction): Date | null {\n  const d = cloneDate(from)\n  d.setSeconds(0, 0)\n  const stepType = getStepType(parsed)\n\n  if (stepType === 'dayOfMonth') {\n    for (let i = 0; i < MAX_ITERATIONS_DAY_STEP; i++) {\n      setTimeFromParsed(d, parsed)\n      if (dateMatchesCron(d, parsed)) return d\n      if (direction === 'forward') {\n        d.setDate(d.getDate() + 1)\n      } else {\n        d.setDate(d.getDate() - 1)\n        if (d.getTime() < 0) return null\n      }\n    }\n    return null\n  }\n\n  const step = direction === 'forward' ? 1 : -1\n  for (let i = 0; i < MAX_ITERATIONS_FIRST_MATCH_MINUTES; i++) {\n    if (dateMatchesCron(d, parsed)) return d\n    d.setMinutes(d.getMinutes() + step)\n    if (d.getTime() < 0) return null\n  }\n  return null\n}\n\nfunction advanceDateByCronStep(date: Date, stepType: T_CronStepType, direction: T_Direction): void {\n  const sign = direction === 'forward' ? 1 : -1\n  switch (stepType) {\n    case 'minute':\n      date.setMinutes(date.getMinutes() + sign * 60)\n      break\n    case 'hour':\n    case 'day':\n      date.setHours(date.getHours() + sign * 24)\n      break\n    case 'week':\n      date.setDate(date.getDate() + sign * 7)\n      break\n    case 'year':\n      date.setFullYear(date.getFullYear() + sign)\n      break\n    case 'dayOfMonth':\n      break\n  }\n}\n\nfunction getNextMatchOptimized(\n  from: Date,\n  parsed: T_ParsedCron,\n  stepType: T_CronStepType,\n  direction: T_Direction\n): Date | null {\n  const d = cloneDate(from)\n\n  if (stepType === 'dayOfMonth') {\n    const sign = direction === 'forward' ? 1 : -1\n    d.setDate(d.getDate() + sign)\n    for (let i = 0; i < MAX_ITERATIONS_DAY_STEP; i++) {\n      if (d.getTime() < 0) return null\n      setTimeFromParsed(d, parsed)\n      if (dateMatchesCron(d, parsed)) return d\n      d.setDate(d.getDate() + sign)\n    }\n    return null\n  }\n\n  advanceDateByCronStep(d, stepType, direction)\n  if (d.getTime() < 0) return null\n  return dateMatchesCron(d, parsed) ? d : null\n}\n\nfunction generateListForSubCron(\n  start: Date,\n  end: Date,\n  parsed: T_ParsedCron,\n  direction: T_Direction,\n  maxItems: number\n): Date[] {\n  const list: Date[] = []\n  let current = getFirstMatchInclusive(start, parsed, direction)\n  const stepType = getStepType(parsed)\n\n  while (current !== null && list.length < maxItems) {\n    if (direction === 'forward' && current >= end) break\n    if (direction === 'backward' && current <= end) break\n    list.push(current)\n    current = getNextMatchOptimized(current, parsed, stepType, direction)\n  }\n  return list\n}\n\nfunction mergeSortedLists(lists: Date[][], direction: T_Direction): Date[] {\n  const K = lists.length\n  const indexes = new Array(K).fill(0)\n  const result: Date[] = []\n  const cmp =\n    direction === 'forward'\n      ? (a: Date, b: Date) => a.getTime() - b.getTime()\n      : (a: Date, b: Date) => b.getTime() - a.getTime()\n\n  while (true) {\n    let bestIdx = -1\n    let bestDate: Date | null = null\n    for (let k = 0; k < K; k++) {\n      const idx = indexes[k]\n      if (idx >= lists[k].length) continue\n      const d = lists[k][idx]\n      if (bestDate === null || cmp(d, bestDate) < 0) {\n        bestDate = d\n        bestIdx = k\n      }\n    }\n    if (bestIdx === -1) break\n    result.push(bestDate!)\n    indexes[bestIdx]++\n  }\n  return result\n}\n\n/**\n * Optimized cron occurrence generation: splits multi-value fields into sub-crons, uses fixed-step or day-step per sub-cron, then k-way merges. Returns dates in [start, end) (forward) or (end, start] (backward), capped at output limit. When endCount is set, stops after that many results (uses internal far bound).\n */\nexport function getCronOccurrencesOptimized(\n  start: Date,\n  end: Date,\n  cronStr: string,\n  direction: T_Direction,\n  endCount?: number\n): Date[] {\n  const maxOutput = ERRORS.outputLimit.count\n  const parsed = parseCron(cronStr)\n  if (!parsed) return []\n\n  const bound =\n    endCount != null\n      ? new Date(start.getTime() + (direction === 'forward' ? CRON_FAR_BOUND_MS : -CRON_FAR_BOUND_MS))\n      : end\n\n  const maxItems = endCount != null ? Math.min(endCount, maxOutput) : maxOutput\n  const subCrons = expandToSubCrons(parsed)\n\n  if (subCrons.length === 1) {\n    const single = generateListForSubCron(start, bound, parsed, direction, maxItems)\n    const capped = single.length > maxOutput ? single.slice(0, maxOutput) : single\n    return endCount != null ? capped.slice(0, endCount) : capped\n  }\n\n  const lists = subCrons.map((sub) => generateListForSubCron(start, bound, sub, direction, maxOutput))\n  const merged = mergeSortedLists(lists, direction)\n  const capped = merged.length > maxOutput ? merged.slice(0, maxOutput) : merged\n  return endCount != null ? capped.slice(0, endCount) : capped\n}\n","export const TODAY = new Date()\n","/**\n * Readonly list of supported date/time format strings. Use with `outputFormat` in {@link genRecurDateBasedList} or as the second argument to {@link formatDate}; compatible with `localeString.lang`, not with `localeString.formatOptions`.\n *\n * Includes: ISO (e.g. YYYY-MM-DD, YYYY-MM, YYYY-MM-DD HH:MM); US slash and dash (MM/DD/YYYY, MM-DD-YYYY, with time); European dot and dash (DD.MM.YYYY, DD-MM-YYYY, with time); month-year only (MMMM YYYY, MMM YYYY); RFC-style (DD MMM YYYY HH:MM:SS); weekday + date/time (EEE, DD MMM YYYY HH:MM:SS); time-only (HH:MM, HH:MM:SS, with A or Z); and compact (YYYYMMDD).\n *\n * Token meanings (all uppercase): YYYY = 4-digit year, YY = 2-digit year; MM = month 2-digit, M = month no zero; DD = day 2-digit, D = day no zero; HH = hour (12h if format contains ` A`, else 24h); MM after colon = minutes; SS = seconds, SSS = milliseconds; A = AM/PM; EEE = weekday short (locale), EEEE = weekday long; MMM = month short (locale), MMMM = month long; DDD = day of year (3-digit); Z = timezone offset (+HH:mm).\n *\n * @constant\n */\nexport const OUTPUT_FORMATS = [\n  // ── 1. Date-only: US slash (MM/DD) ──────────────────────────────────\n  'MM/DD/YYYY',\n  'MM/D/YYYY',\n  'M/DD/YYYY',\n  'M/D/YYYY',\n\n  // ── 2. Date-only: EU slash (DD/MM) ─────────────────────────────────\n  'DD/MM/YYYY',\n  'D/MM/YYYY',\n  'DD/M/YYYY',\n  'D/M/YYYY',\n\n  // ── 3. Date-only: ISO dash (YYYY-MM-DD) ────────────────────────────\n  'YYYY-MM-DD',\n  'YYYY-MM-D',\n  'YYYY-MM',\n\n  // ── 4. Date-only: EU/US dash ───────────────────────────────────────\n  'DD-MM-YYYY',\n  'D-MM-YYYY',\n  'MM-DD-YYYY',\n  'M-DD-YYYY',\n  'MM-D-YYYY',\n  'M-D-YYYY',\n\n  // ── 5. Date-only: YYYY slash ───────────────────────────────────────\n  'YYYY/MM/DD',\n  'YYYY/MM/D',\n\n  // ── 6. Date-only: text month (MMM / MMMM) ─────────────────────────\n  'MMM DD, YYYY',\n  'MMM D, YYYY',\n  'MMMM DD, YYYY',\n  'MMMM D, YYYY',\n  'MMMM YYYY',\n  'MMM YYYY',\n\n  // ── 7. Date-only: weekday + date ───────────────────────────────────\n  'EEEE, MMMM DD, YYYY',\n  'EEEE, MMMM D, YYYY',\n  'EEEE, DD MMM YYYY',\n  'EEEE, D MMM YYYY',\n\n  // ── 8. Date-only: day-month-year text ──────────────────────────────\n  'DD MMM YYYY',\n  'D MMM YYYY',\n  'DD MMMM YYYY',\n  'D MMMM YYYY',\n\n  // ── 9. Date+time: DD/D MMM YYYY ───────────────────────────────────\n  'DD MMM YYYY HH:MM',\n  'D MMM YYYY HH:MM',\n  'DD MMM YYYY HH:MM:SS',\n  'D MMM YYYY HH:MM:SS',\n  'DD MMM YYYY HH:MM A',\n  'D MMM YYYY HH:MM A',\n  'DD MMM YYYY HH:MM:SS A',\n  'D MMM YYYY HH:MM:SS A',\n\n  // ── 10. Date+time: DD/D MMMM YYYY ─────────────────────────────────\n  'DD MMMM YYYY HH:MM',\n  'D MMMM YYYY HH:MM',\n  'DD MMMM YYYY HH:MM:SS',\n  'D MMMM YYYY HH:MM:SS',\n  'DD MMMM YYYY HH:MM A',\n  'D MMMM YYYY HH:MM A',\n  'DD MMMM YYYY HH:MM:SS A',\n  'D MMMM YYYY HH:MM:SS A',\n\n  // ── 11. Date+time: MMMM DD/D, YYYY ────────────────────────────────\n  'MMMM DD, YYYY HH:MM',\n  'MMMM D, YYYY HH:MM',\n  'MMMM DD, YYYY HH:MM:SS',\n  'MMMM D, YYYY HH:MM:SS',\n  'MMMM DD, YYYY HH:MM A',\n  'MMMM D, YYYY HH:MM A',\n  'MMMM DD, YYYY HH:MM:SS A',\n  'MMMM D, YYYY HH:MM:SS A',\n\n  // ── 12. Date+time: EEEE long weekday ──────────────────────────────\n  'EEEE, MMMM DD, YYYY HH:MM',\n  'EEEE, MMMM DD, YYYY HH:MM:SS',\n  'EEEE, MMMM DD, YYYY HH:MM A',\n  'EEEE, MMMM DD, YYYY HH:MM:SS A',\n  'EEEE, MMMM D, YYYY HH:MM',\n  'EEEE, MMMM D, YYYY HH:MM:SS',\n  'EEEE, MMMM D, YYYY HH:MM A',\n  'EEEE, MMMM D, YYYY HH:MM:SS A',\n  'EEEE, DD MMM YYYY HH:MM',\n  'EEEE, DD MMM YYYY HH:MM:SS',\n  'EEEE, DD MMM YYYY HH:MM A',\n  'EEEE, DD MMM YYYY HH:MM:SS A',\n  'EEEE, D MMM YYYY HH:MM',\n  'EEEE, D MMM YYYY HH:MM:SS',\n  'EEEE, D MMM YYYY HH:MM A',\n  'EEEE, D MMM YYYY HH:MM:SS A',\n\n  // ── 13. Date+time: EEE short weekday ──────────────────────────────\n  'EEE, DD MMM YYYY HH:MM',\n  'EEE, D MMM YYYY HH:MM',\n  'EEE, DD MMM YYYY HH:MM:SS',\n  'EEE, D MMM YYYY HH:MM:SS',\n  'EEE, DD MMM YYYY HH:MM:SS A',\n  'EEE, D MMM YYYY HH:MM:SS A',\n  'EEE, DD MMM YYYY HH:MM:SS.SSS',\n  'EEE, D MMM YYYY HH:MM:SS.SSS',\n  'EEE, DD MMM YYYY HH:MM:SS.SSS A',\n  'EEE, D MMM YYYY HH:MM:SS.SSS A',\n\n  // ── 14. Date-only: 2-digit year ───────────────────────────────────\n  'YY/MM/DD',\n  'YY/MM/D',\n  'YY-MM-DD',\n  'YY-MM-D',\n  'MM/DD/YY',\n  'M/D/YY',\n  'DD/MM/YY',\n  'D/M/YY',\n\n  // ── 15. Date-only: compact ────────────────────────────────────────\n  'YYYYMMDD',\n  'YYYYDDD',\n\n  // ── 16. Date-only: dot ────────────────────────────────────────────\n  'DD.MM.YYYY',\n  'D.MM.YYYY',\n  'DD.MM.YY',\n  'D.MM.YY',\n  'YYYY.MM.DD',\n  'YYYY.MM.D',\n  'D.M.YYYY',\n\n  // ── 17. Date+time: dot ────────────────────────────────────────────\n  'DD.MM.YYYY HH:MM',\n  'D.MM.YYYY HH:MM',\n  'DD.MM.YYYY HH:MM:SS',\n  'D.MM.YYYY HH:MM:SS',\n  'DD.MM.YY HH:MM',\n  'D.MM.YY HH:MM',\n  'DD.MM.YY HH:MM:SS',\n  'D.MM.YY HH:MM:SS',\n  'YYYY.MM.DD HH:MM',\n  'YYYY.MM.DD HH:MM:SS',\n  'YYYY.MM.D HH:MM',\n  'YYYY.MM.D HH:MM:SS',\n  'D.M.YYYY HH:MM',\n  'D.M.YYYY HH:MM:SS',\n\n  // ── 18. Time only ────────────────────────────────────────────────\n  'HH:MM',\n  'HH:MM A',\n  'HH:MM:SS A',\n  'HH:MM:SS.SSS A',\n  'HH:MM Z',\n  'HH:MM:SS Z',\n  'HH:MM:SS',\n  'HH:MM:SS.SSS',\n\n  // ── 19. Date+time: ISO (YYYY-MM-DD) ──────────────────────────────\n  'YYYY-MM-DDTHH:MM',\n  'YYYY-MM-DDTHH:MMZ',\n  'YYYY-MM-DDTHH:MM:SS',\n  'YYYY-MM-DDTHH:MM:SS.SSS',\n  'YYYY-MM-DDTHH:MM:SSZ',\n  'YYYY-MM-DDTHH:MM:SS.SSSZ',\n  'YYYY-MM-DD HH:MM',\n  'YYYY-MM-DD HH:MM:SS',\n  'YYYY-MM-DD HH:MM:SS.SSS',\n  'YYYY-MM-DD HH:MM:SS Z',\n  'YYYY-MM-D HH:MM',\n  'YYYY-MM-D HH:MM:SS',\n\n  // ── 20. Date+time: US slash (MM/DD) ──────────────────────────────\n  'MM/DD/YYYY HH:MM',\n  'MM/D/YYYY HH:MM',\n  'MM/DD/YYYY HH:MM A',\n  'MM/D/YYYY HH:MM A',\n  'MM/DD/YYYY HH:MM:SS',\n  'MM/D/YYYY HH:MM:SS',\n  'MM/DD/YYYY HH:MM:SS A',\n  'MM/D/YYYY HH:MM:SS A',\n  'M/DD/YYYY HH:MM',\n  'M/DD/YYYY HH:MM:SS',\n  'M/DD/YYYY HH:MM A',\n  'M/DD/YYYY HH:MM:SS A',\n  'M/D/YYYY HH:MM',\n  'M/D/YYYY HH:MM:SS',\n  'M/D/YYYY HH:MM A',\n  'M/D/YYYY HH:MM:SS A',\n\n  // ── 21. Date+time: EU slash (DD/MM) ──────────────────────────────\n  'DD/MM/YYYY HH:MM',\n  'D/MM/YYYY HH:MM',\n  'DD/MM/YYYY HH:MM A',\n  'D/MM/YYYY HH:MM A',\n  'DD/MM/YYYY HH:MM:SS',\n  'D/MM/YYYY HH:MM:SS',\n  'DD/MM/YYYY HH:MM:SS A',\n  'D/MM/YYYY HH:MM:SS A',\n  'DD/MM/YYYY HH:MM:SS.SSS',\n  'DD/MM/YYYY HH:MM:SS.SSS A',\n  'DD/M/YYYY HH:MM',\n  'DD/M/YYYY HH:MM:SS',\n  'DD/M/YYYY HH:MM A',\n  'DD/M/YYYY HH:MM:SS A',\n  'D/M/YYYY HH:MM',\n  'D/M/YYYY HH:MM:SS',\n  'D/M/YYYY HH:MM A',\n  'D/M/YYYY HH:MM:SS A',\n\n  // ── 22. Date+time: EU/US dash ────────────────────────────────────\n  'DD-MM-YYYY HH:MM',\n  'D-MM-YYYY HH:MM',\n  'DD-MM-YYYY HH:MM:SS',\n  'D-MM-YYYY HH:MM:SS',\n  'DD-MM-YYYY HH:MM A',\n  'D-MM-YYYY HH:MM A',\n  'DD-MM-YYYY HH:MM:SS A',\n  'D-MM-YYYY HH:MM:SS A',\n  'MM-DD-YYYY HH:MM',\n  'M-DD-YYYY HH:MM',\n  'MM-D-YYYY HH:MM',\n  'M-D-YYYY HH:MM',\n  'MM-DD-YYYY HH:MM:SS',\n  'M-DD-YYYY HH:MM:SS',\n  'MM-D-YYYY HH:MM:SS',\n  'M-D-YYYY HH:MM:SS',\n  'MM-DD-YYYY HH:MM A',\n  'M-DD-YYYY HH:MM A',\n  'MM-D-YYYY HH:MM A',\n  'M-D-YYYY HH:MM A',\n  'MM-DD-YYYY HH:MM:SS A',\n  'M-DD-YYYY HH:MM:SS A',\n  'MM-D-YYYY HH:MM:SS A',\n  'M-D-YYYY HH:MM:SS A',\n\n  // ── 23. Date+time: YYYY slash ────────────────────────────────────\n  'YYYY/MM/DD HH:MM',\n  'YYYY/MM/DD HH:MM:SS',\n  'YYYY/MM/D HH:MM',\n  'YYYY/MM/D HH:MM:SS',\n\n  // ── 24. Date+time: MMM DD, YYYY ──────────────────────────────────\n  'MMM DD, YYYY HH:MM',\n  'MMM D, YYYY HH:MM',\n  'MMM DD, YYYY HH:MM:SS',\n  'MMM D, YYYY HH:MM:SS',\n  'MMM DD, YYYY HH:MM A',\n  'MMM D, YYYY HH:MM A',\n  'MMM DD, YYYY HH:MM:SS A',\n  'MMM D, YYYY HH:MM:SS A',\n  'MMM DD, YYYY HH:MM:SS.SSS',\n  'MMM D, YYYY HH:MM:SS.SSS',\n  'MMM DD, YYYY HH:MM:SS.SSS A',\n  'MMM D, YYYY HH:MM:SS.SSS A',\n\n  // ── 25. Date+time: 2-digit year ──────────────────────────────────\n  'YY/MM/DD HH:MM',\n  'YY/MM/DD HH:MM:SS',\n  'YY/MM/D HH:MM',\n  'YY/MM/D HH:MM:SS',\n  'YY-MM-DD HH:MM',\n  'YY-MM-DD HH:MM:SS',\n  'YY-MM-D HH:MM',\n  'YY-MM-D HH:MM:SS',\n  'MM/DD/YY HH:MM',\n  'MM/DD/YY HH:MM:SS',\n  'M/D/YY HH:MM',\n  'M/D/YY HH:MM:SS',\n  'DD/MM/YY HH:MM',\n  'DD/MM/YY HH:MM:SS',\n  'D/M/YY HH:MM',\n  'D/M/YY HH:MM:SS',\n] as const\n","import { isNullish } from '@/helpers/functions/shared'\nimport { isValidDate } from '@/helpers/functions/dates'\nimport { generateErrorPreText, hasFormatOptions } from '@/helpers/functions/shared'\nimport { validateCronString } from '@/helpers/functions/cron'\nimport { T_ArgsBase, T_CoreInitialArgs, T_Rule } from '@/helpers/types/lib'\nimport { DIRECTIONS, ERRORS, INTERVAL_UNITS } from '@/helpers/constants/commons'\nimport { OUTPUT_FORMATS } from '@/helpers/constants/formats'\n\nexport const VALIDATORS: Record<keyof T_ArgsBase, (args: T_CoreInitialArgs) => string> = {\n  start: ({ start }) => {\n    if (isNullish(start) || isValidDate(start!)) return ''\n\n    return `${generateErrorPreText('start', start)}. The provided value must be either a string, which can be formatted into a valid date, or a Date.`\n  },\n  rules: ({ rules, direction }) => {\n    if (isNullish(rules)) return ''\n\n    const rulesHint =\n      ' Provide either a valid 5-field cron string (e.g. \"0 9 * * *\") or an array of T_Rule (import type from the library for the shape) objects.'\n\n    if (typeof rules === 'string') {\n      const msg = validateCronString(rules)\n      return msg ? msg + rulesHint : ''\n    }\n\n    if (!Array.isArray(rules)) {\n      return `${generateErrorPreText('rules', rules)}. *rules* must be a cron string or an array of rule objects (import type T_Rule or T_Rules from the library).`\n    }\n\n    for (const { unit, portion } of rules as T_Rule[]) {\n      if (typeof portion !== 'number' || isNaN(portion) || !Number.isInteger(portion)) {\n        return `${generateErrorPreText('rules', portion)}. The provided value for *${unit}* must be a number.${rulesHint}`\n      }\n\n      if (portion <= 0) {\n        return (\n          (direction === DIRECTIONS.forward\n            ? `${generateErrorPreText('rules', portion)}. The provided value for *portion* must be a positive number. Use only positive portions. Instead, you can set direction property to *backward* in *genRecurDateBasedList* configs.`\n            : `${generateErrorPreText('rules', portion)}. The provided value for *portion* must be a positive number. Use only positive portions. The property *direction* is already set to *backward* in *genRecurDateBasedList* configs.`) +\n          rulesHint\n        )\n      }\n\n      if (isNullish(unit)) return ''\n\n      if (!Object.keys(INTERVAL_UNITS).includes(unit)) {\n        return `${generateErrorPreText('rules', unit)}. The provided *unit* must be one of the types from the following list: ${Object.keys(INTERVAL_UNITS).join(', ')}.${rulesHint}`\n      }\n    }\n\n    return ''\n  },\n  end: ({ end, rules }) => {\n    if (typeof rules === 'string') {\n      if (isNullish(end)) {\n        return 'When `rules` is a string (cron), `end` is required: date, string or number (count of occurrences).'\n      }\n    }\n\n    if (isNullish(end)) return ''\n\n    if (\n      (typeof end !== 'string' && typeof end !== 'number' && !isValidDate(end!)) ||\n      (typeof end === 'string' && !isValidDate(end)) ||\n      (typeof end === 'number' && (end > ERRORS.outputLimit.count || isNaN(end)))\n    ) {\n      return `${generateErrorPreText('end', end)}. The provided value must be either a string, which can be formatted into a valid date, or a number less than 100_000.`\n    }\n\n    return ''\n  },\n  direction: ({ direction }) => {\n    if (isNullish(direction)) return ''\n\n    if (!Object.keys(DIRECTIONS).includes(direction!)) {\n      return `${generateErrorPreText('direction', direction)}. The provided value must be one of the members from the following list: ${JSON.stringify(Object.keys(DIRECTIONS))}.`\n    }\n\n    return ''\n  },\n  numericTimeZone: ({ numericTimeZone }) => {\n    if (isNullish(numericTimeZone)) return ''\n\n    if (\n      typeof numericTimeZone !== 'number' ||\n      isNaN(numericTimeZone) ||\n      !Number.isInteger(numericTimeZone) ||\n      numericTimeZone < -12 ||\n      numericTimeZone > 12\n    ) {\n      return `${generateErrorPreText('numericTimeZone', numericTimeZone)}. The provided value timezone must be an integer defined in a specific range (from -12 to 12).`\n    }\n\n    return ''\n  },\n  localeString: ({ localeString, numericTimeZone, outputFormat }) => {\n    if (isNullish(localeString)) return ''\n\n    if (typeof localeString !== 'object') {\n      return `The provided property *localeString* must be an object.`\n    }\n\n    if (numericTimeZone != null && localeString.formatOptions?.timeZone != null) {\n      return `There is an unresolved conflict in the provided configuration object. Either provide *timeZone* property in *localeString.formatOptions* or define the timezone using the property *numericTimeZone*.`\n    }\n\n    if (outputFormat != null && hasFormatOptions(localeString)) {\n      return `Using *outputFormat* and *localeString.formatOptions* at the same time may cause conflicts in the output format. Either provide *outputFormat* or *localeString.formatOptions* in the configuration object, but not both.`\n    }\n\n    return ''\n  },\n  outputFormat: ({ outputFormat, localeString }) => {\n    if (isNullish(outputFormat)) return ''\n\n    if (typeof outputFormat !== 'string') {\n      return `${generateErrorPreText('outputFormat', outputFormat)}. The provided value must be one of the supported format strings. Use OUTPUT_FORMATS from the library.`\n    }\n\n    if (!OUTPUT_FORMATS.includes(outputFormat)) {\n      return `${generateErrorPreText('outputFormat', outputFormat)}. The format must be one of the supported strings. Use one of the *OUTPUT_FORMATS* exported from the library.`\n    }\n\n    if (hasFormatOptions(localeString)) {\n      return `Using *outputFormat* and *localeString.formatOptions* at the same time may cause conflicts in the output format. Either provide *outputFormat* or *localeString.formatOptions* in the configuration object, but not both.`\n    }\n\n    return ''\n  },\n  filter: ({ filter }) => {\n    if (isNullish(filter)) return ''\n\n    if (typeof filter !== 'function') {\n      return `The provided property *filter* must be a function, which returns a boolean value.`\n    }\n\n    return ''\n  },\n  extend: ({ extend }) => {\n    if (isNullish(extend)) return ''\n\n    if (typeof extend !== 'object') {\n      return `The provided property *extend* must be an object.`\n    }\n\n    return ''\n  },\n  onError: ({ onError }) => {\n    if (isNullish(onError)) return ''\n\n    if (typeof onError !== 'function') {\n      return `The provided property onError must be a function.`\n    }\n\n    return ''\n  },\n}\n","import { DEFAULT_ARGS } from '@/helpers/constants/commons'\nimport { POSTPONERS } from '@/helpers/constants/postponers'\nimport { TODAY } from '@/helpers/constants/shared'\nimport { VALIDATORS } from '@/helpers/constants/validators'\nimport { T_CoreArgs, T_CoreInitialArgs, T_Rule } from '@/helpers/types/lib'\nimport { isDateObject, setTimeZoneOffset } from '@/helpers/functions/dates'\n\nexport function getEndDate({ start, rules, direction, end }: T_CoreArgs): Date {\n  if (typeof end === 'string') return new Date(end)\n\n  if (isDateObject(end)) return end as Date\n\n  const f_End = new Date(start)\n  const rulesList = rules as T_Rule[]\n\n  rulesList.forEach((rule) => {\n    POSTPONERS[direction][rule.unit](f_End, rule.portion * (+end || +DEFAULT_ARGS.end))\n  })\n\n  return f_End\n}\n\nexport function processInitialArgs(args: T_CoreInitialArgs): T_CoreArgs {\n  let start: Date\n  if (args.start === undefined) {\n    start = new Date(TODAY.getTime())\n    if (args.numericTimeZone != null) {\n      setTimeZoneOffset(start, args.numericTimeZone)\n    }\n  } else if (typeof args.start === 'string') {\n    // String: face values are the wall-clock time, no transformation needed\n    start = new Date(args.start)\n  } else {\n    // Date object: transform to target timezone if numericTimeZone provided\n    start = new Date(args.start.getTime())\n    if (args.numericTimeZone != null) {\n      setTimeZoneOffset(start, args.numericTimeZone)\n    }\n  }\n\n  const rules =\n    args.rules === undefined ||\n    (Array.isArray(args.rules) && args.rules.length === 0) ||\n    (typeof args.rules === 'string' && !args.rules.trim())\n      ? DEFAULT_ARGS.rules\n      : args.rules\n\n  let result = {\n    start,\n    rules,\n    direction: args.direction ?? DEFAULT_ARGS.direction,\n    localeString: args.localeString ?? {},\n    outputFormat: args.outputFormat,\n    extend: args.extend,\n    filter: args.filter,\n    numericTimeZone: args.numericTimeZone ?? -(TODAY.getTimezoneOffset() / 60),\n    end: args.end,\n  } as T_CoreArgs\n\n  if (typeof rules === 'string' && typeof args.end === 'number') {\n    result.endCount = args.end\n    result.end = result.start\n  } else {\n    const end = getEndDate(result)\n    if (isDateObject(args.end) && args.numericTimeZone != null) {\n      result.end = setTimeZoneOffset(new Date(end.getTime()), args.numericTimeZone)\n    } else {\n      result.end = end\n    }\n  }\n\n  return result\n}\n\nexport function checkInvalidData(args: T_CoreInitialArgs): void {\n  Object.values(VALIDATORS).forEach((checker) => {\n    const errorMessage = checker(args)\n    if (errorMessage) throw new Error(errorMessage)\n  })\n}\n","import { DEFAULT_ARGS, DIRECTIONS, ERRORS } from '@/helpers/constants/commons'\nimport { POSTPONERS } from '@/helpers/constants/postponers'\nimport { getCronOccurrencesOptimized } from '@/helpers/functions/cron'\nimport { cloneDate, getDateStr } from '@/helpers/functions/dates'\nimport { checkInvalidData, processInitialArgs } from '@/helpers/functions/lib'\nimport { T_Core, T_CoreArgs, T_CoreInitialArgs, T_CoreReturnType, T_Error, T_PostponeArgs } from '@/helpers/types/lib'\n\nfunction buildResultFromDate(\n  f_Args: T_CoreArgs,\n  currentDate: Date\n): { currentResult: T_CoreReturnType; callbackArgs: T_CoreReturnType } {\n  const dateStr = getDateStr(currentDate, f_Args)\n  const date = cloneDate(currentDate)\n  const wallMs = Date.UTC(\n    currentDate.getFullYear(),\n    currentDate.getMonth(),\n    currentDate.getDate(),\n    currentDate.getHours(),\n    currentDate.getMinutes(),\n    currentDate.getSeconds(),\n    currentDate.getMilliseconds()\n  )\n  const utcDate = new Date(wallMs - f_Args.numericTimeZone * 60 * 60 * 1000)\n\n  const currentResult: T_CoreReturnType = { dateStr, date, utcDate }\n\n  const callbackArgs: T_CoreReturnType = {\n    dateStr,\n    date: cloneDate(currentDate),\n    utcDate: new Date(utcDate.getTime()),\n  }\n\n  return { currentResult, callbackArgs }\n}\n\n/**\n * Yields list of recurring dates from `start` to `end` (date or step count), stepping by `rules` in `direction`. Each item has `date`, `utcDate`, `dateStr` and property defined in the object `extend`; `filter` can skip iterations.\n *\n * @param args - Partial config (start, end, rules, direction, outputFormat, localeString, filter, extend, onError, numericTimeZone). Defaults to `DEFAULT_ARGS`; omit `start` for \"now\". `rules` may be an array of unit/portion or a cron string (e.g. \"0 9 * * 1-5\").\n * @returns Array of {@link T_CoreReturnType}.\n * @throws {Error} On invalid config or when iteration count exceeds 99_999.\n */\nexport const genRecurDateBasedList = ((args: T_CoreInitialArgs = DEFAULT_ARGS) => {\n  const result: T_CoreReturnType[] = []\n\n  try {\n    checkInvalidData(args)\n\n    const f_Args = processInitialArgs(args)\n\n    const isDirectionForward = f_Args.direction === DIRECTIONS.forward\n    let iterations: number = 0\n    const rules = f_Args.rules\n\n    if (typeof rules === 'string') {\n      const cronStr = rules\n      const dates = getCronOccurrencesOptimized(\n        f_Args.start,\n        f_Args.end,\n        cronStr,\n        f_Args.direction,\n        f_Args.endCount ?? undefined\n      )\n      for (const current of dates) {\n        if (f_Args.endCount != null && result.length >= f_Args.endCount) break\n        iterations++\n        if (iterations === ERRORS.outputLimit.count) {\n          throw new Error(ERRORS.outputLimit.errorText)\n        }\n\n        const { currentResult, callbackArgs } = buildResultFromDate(f_Args, current)\n\n        if (f_Args.filter && f_Args.filter(callbackArgs) === false) continue\n\n        if (f_Args.extend) {\n          for (const key in f_Args.extend) {\n            ;(currentResult as Record<string, unknown>)[key] = f_Args.extend[key](callbackArgs)\n          }\n        }\n\n        result.push(currentResult)\n      }\n    } else {\n      const postpone = (date: T_PostponeArgs['start']) => {\n        rules.forEach((rule) => {\n          const postponeByDirection = POSTPONERS[f_Args.direction]\n          postponeByDirection[rule.unit](date, rule.portion)\n        })\n      }\n\n      while (isDirectionForward ? f_Args.start < f_Args.end : f_Args.start > f_Args.end) {\n        iterations++\n\n        if (iterations === ERRORS.outputLimit.count) {\n          throw new Error(ERRORS.outputLimit.errorText)\n        }\n\n        const { currentResult, callbackArgs } = buildResultFromDate(f_Args, f_Args.start)\n\n        if (f_Args.filter && f_Args.filter(callbackArgs) === false) {\n          postpone(f_Args.start)\n          if (typeof f_Args.end === 'number') postpone(f_Args.end)\n          iterations++\n\n          continue\n        }\n\n        if (f_Args.extend) {\n          for (const key in f_Args.extend) {\n            ;(currentResult as Record<string, unknown>)[key] = f_Args.extend[key](callbackArgs)\n          }\n        }\n\n        result.push(currentResult)\n\n        postpone(f_Args.start)\n      }\n    }\n  } catch (e) {\n    const error = e as T_Error\n\n    if (args.onError && typeof args.onError === 'function') {\n      args.onError(error)\n    } else {\n      throw new Error(error.message)\n    }\n  }\n\n  return result\n}) as T_Core\n"],"mappings":"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AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;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","names":["start","diff","capped"]}