export type RangeFrom = ACC['length'] extends LENGTH ? ACC : RangeFrom; export type IntRange = FROM['length'] extends TO ? ACC | TO : IntRange<[...FROM, 1], TO, ACC | FROM['length']>; export type SixtyRange = IntRange, 59>; export type HourRange = IntRange, 23>; export type DayOfMonthRange = IntRange, 31> | 'L'; export type MonthRange = IntRange, 12>; export type DayOfWeekRange = IntRange, 7> | 'L'; export type CronFieldType = SixtyRange[] | HourRange[] | DayOfMonthRange[] | MonthRange[] | DayOfWeekRange[]; export type CronChars = 'L' | 'W'; export type CronMin = 0 | 1; export type CronMax = 7 | 12 | 23 | 31 | 59; export type ParseRangeResponse = number[] | string[] | number | string; export type CronConstraints = { min: CronMin; max: CronMax; chars: readonly CronChars[]; validChars: RegExp; };