/** * @fileoverview Recurring events and pattern-based date generation utilities * Provides RRULE-inspired recurrence patterns for creating repeating events */ import type { DateInput, RecurrenceRule } from './types.js'; /** * Creates a recurrence pattern generator * @param rule - The recurrence rule defining the pattern * @returns An object with methods to work with the recurrence * * @example * ```ts * // Daily recurrence * const daily = createRecurrence({ * frequency: 'daily', * interval: 1, * startDate: new Date('2024-01-01') * }); * * // Weekly on Monday and Wednesday * const weekly = createRecurrence({ * frequency: 'weekly', * interval: 1, * startDate: new Date('2024-01-01'), * byWeekday: [1, 3] // Monday = 1, Wednesday = 3 * }); * * // Monthly on the 15th * const monthly = createRecurrence({ * frequency: 'monthly', * interval: 1, * startDate: new Date('2024-01-01'), * byMonthDay: [15] * }); * ``` */ export declare function createRecurrence(rule: RecurrenceRule): { rule: RecurrenceRule; getNextOccurrence: (afterDate?: DateInput) => Date | null; getOccurrencesBetween: (start: DateInput, end: DateInput, limit?: number) => Date[]; isRecurrenceDate: (date: DateInput) => boolean; getAllOccurrences: (limit?: number) => Date[]; }; /** * Gets the next occurrence of a recurring event after a specified date * @param rule - The recurrence rule * @param afterDate - Date to find next occurrence after (defaults to now) * @returns The next occurrence date, or null if no more occurrences * * @example * ```ts * const rule = { * frequency: 'daily', * interval: 2, * startDate: new Date('2024-01-01') * }; * * const next = getNextOccurrence(rule, new Date('2024-01-05')); * // Returns Date('2024-01-07') - every other day * ``` */ export declare function getNextOccurrence(rule: RecurrenceRule, afterDate?: DateInput): Date | null; /** * Gets all occurrences of a recurring event between two dates * @param rule - The recurrence rule * @param start - Start date of the range * @param end - End date of the range * @param limit - Maximum number of occurrences to return (default: 1000) * @returns Array of dates that match the recurrence pattern * * @example * ```ts * const rule = { * frequency: 'weekly', * interval: 1, * startDate: new Date('2024-01-01'), * byWeekday: [1, 5] // Monday and Friday * }; * * const occurrences = getOccurrencesBetween( * rule, * new Date('2024-01-01'), * new Date('2024-01-31') * ); * // Returns all Mondays and Fridays in January 2024 * ``` */ export declare function getOccurrencesBetween(rule: RecurrenceRule, start: DateInput, end: DateInput, limit?: number): Date[]; /** * Checks if a specific date matches a recurrence rule * @param date - The date to check * @param rule - The recurrence rule * @returns True if the date matches the recurrence pattern * * @example * ```ts * const rule = { * frequency: 'weekly', * interval: 1, * startDate: new Date('2024-01-01'), * byWeekday: [1] // Mondays only * }; * * isRecurrenceDate(new Date('2024-01-08'), rule); // true (Monday) * isRecurrenceDate(new Date('2024-01-09'), rule); // false (Tuesday) * ``` */ export declare function isRecurrenceDate(date: DateInput, rule: RecurrenceRule): boolean; /** * Validates a recurrence rule * @param rule - The recurrence rule to validate * @returns True if the rule is valid * * @example * ```ts * isValidRecurrenceRule({ * frequency: 'daily', * interval: 1, * startDate: new Date() * }); // true * * isValidRecurrenceRule({ * frequency: 'daily', * interval: 0, // Invalid * startDate: new Date() * }); // false * ``` */ export declare function isValidRecurrenceRule(rule: Partial): boolean; /** * Converts a recurrence rule to a human-readable string * @param rule - The recurrence rule * @returns A human-readable description * * @example * ```ts * const rule = { * frequency: 'weekly', * interval: 2, * startDate: new Date('2024-01-01'), * byWeekday: [1, 3, 5] * }; * * recurrenceToString(rule); * // "Every 2 weeks on Monday, Wednesday, Friday" * ``` */ export declare function recurrenceToString(rule: RecurrenceRule): string; //# sourceMappingURL=recurrence.d.ts.map