interface FieldSpec {
    raw: string;
    values: Set<number>;
    min: number;
    max: number;
}
export interface CronSpec {
    minute: FieldSpec;
    hour: FieldSpec;
    day: FieldSpec;
    month: FieldSpec;
    dow: FieldSpec;
}
export declare function parseCron(expr: string): CronSpec;
/**
 * Next firing strictly after `from`, found by field-level
 * fast-forwarding. For "yearly at midnight Jan 1" (`0 0 1 1 *`) this
 * converges in at most 4-5 jumps, vs ~525_000 minute increments under
 * the previous brute-force loop.
 *
 * The loop walks fields outermost (month) → innermost (minute). On a
 * mismatch we set the field to its ceiling (next valid value) and reset
 * everything inside it. If no ceiling exists in the current scope we
 * step one unit up in the parent field. JavaScript Date handles
 * carries (month=12 → next year, hour=24 → next day) natively.
 */
export declare function nextOccurrence(spec: CronSpec, from?: Date): Date | null;
export {};
//# sourceMappingURL=cron.d.ts.map