import dayjs from "dayjs";
type PresetValidator = (args: {
    date: dayjs.Dayjs;
    lastSendAt: dayjs.Dayjs | null;
    args: string[];
}) => boolean;
export declare class CronTime {
    source: dayjs.Dayjs | string;
    presetValidation?: PresetValidator;
    presetArgs?: string[];
    presetStep?: number;
    realDate: boolean;
    utcOffset?: number;
    startAt?: dayjs.Dayjs;
    unitMap: Record<string, Record<string, boolean>>;
    lastSendAt: dayjs.Dayjs | null;
    constructor(source: Date | string, startAt?: dayjs.Dayjs, utcOffset?: number);
    /**
     * Calculate the "next" scheduled time
     */
    sendAt(): dayjs.Dayjs;
    sendAt(i: number): dayjs.Dayjs[];
    /**
     * Get the number of milliseconds in the future at which to fire our callbacks.
     */
    getTimeout(): number;
    /**
     * writes out a cron string
     */
    toString(): string;
    /**
     * Json representation of the parsed cron syntax.
     */
    toJSON(): string[];
    setLastSendAt(date: dayjs.Dayjs): void;
    private parse;
    private parsePrestArgs;
    private parseField;
    private verifyParse;
    private getNextDateFromWithValidation;
    /**
     * Get next date matching the specified cron time.
     *
     * Algorithm:
     * - Start with a start date and a parsed crontime.
     * - Loop until 5 seconds have passed, or we found the next date.
     * - Within the loop:
     *   - If it took longer than 5 seconds to select a date, throw an exception.
     *   - Find the next month to run at.
     *   - Find the next day of the month to run at.
     *   - Find the next day of the week to run at.
     *   - Find the next hour to run at.
     *   - Find the next minute to run at.
     *   - Find the next second to run at.
     *   - Check that the chosen time does not equal the current execution.
     * - Return the selected date object.
     */
    private getNextDateFrom;
    /**
     * wildcard, or all params in array (for to string)
     */
    private wcOrAll;
    private hasAll;
}
export {};
