export type DateType = Date | number | string export interface CronDate { addYear(): void addMonth(): void addDay(): void addHour(): void addMinute(): void addSecond(): void subtractYear(): void subtractMonth(): void subtractDay(): void subtractHour(): void subtractMinute(): void subtractSecond(): void getDate(): number getFullYear(): number getDay(): number getMonth(): number getHours(): number getMinutes(): number getSeconds(): number getMilliseconds(): number getTime(): number getUTCDate(): number getUTCFullYear(): number getUTCDay(): number getUTCMonth(): number getUTCHours(): number getUTCMinutes(): number getUTCSeconds(): number toISOString(): string toJSON(): string setDate(d: number): void setFullYear(y: number): void setDay(d: number): void setMonth(m: number): void setHours(h: number): void setMinutes(m: number): void setSeconds(s: number): void setMilliseconds(s: number): void getTime(): number toString(): string toDate(): Date isLastDayOfMonth(): boolean } export interface ParserOptions { currentDate?: DateType startDate?: DateType endDate?: DateType utc?: boolean tz?: string nthDayOfWeek?: number iterator?: IsIterable } type IteratorResultOrCronDate = IsIterable extends true ? IteratorResult : CronDate; export interface ICronExpression { readonly fields: CronFields; /** Find next suitable date */ next(): IteratorResultOrCronDate /** Find previous suitable date */ prev(): IteratorResultOrCronDate /** Check if next suitable date exists */ hasNext(): boolean /** Check if previous suitable date exists */ hasPrev(): boolean /** Iterate over expression iterator */ iterate(steps: number, callback?: (item: IteratorResultOrCronDate, i: number) => void): IteratorResultOrCronDate[] /** Reset expression iterator state */ reset(resetDate?: string | number | Date): void stringify(includeSeconds?: boolean): string } export interface IStringResult { variables: Record, expressions: ICronExpression[], errors: Record, }