/** * @fileoverview Extended date range operations and utilities * Provides advanced operations for working with date ranges beyond basic intervals */ import type { DateRange, DateInput } from './types.js'; /** * Checks if two date ranges overlap * @param range1 - First date range * @param range2 - Second date range * @returns True if the ranges overlap * * @example * ```ts * const range1 = { start: new Date('2024-01-01'), end: new Date('2024-01-10') }; * const range2 = { start: new Date('2024-01-05'), end: new Date('2024-01-15') }; * * dateRangeOverlap(range1, range2); // true * ``` */ export declare function dateRangeOverlap(range1: DateRange, range2: DateRange): boolean; /** * Checks if multiple date ranges have any overlaps * @param ranges - Array of date ranges * @returns True if any two ranges overlap * * @example * ```ts * const ranges = [ * { start: new Date('2024-01-01'), end: new Date('2024-01-10') }, * { start: new Date('2024-01-05'), end: new Date('2024-01-15') } * ]; * * hasOverlappingRanges(ranges); // true * ``` */ export declare function hasOverlappingRanges(ranges: DateRange[]): boolean; /** * Merges overlapping or adjacent date ranges * @param ranges - Array of date ranges to merge * @returns Array of merged, non-overlapping ranges * * @example * ```ts * const ranges = [ * { start: new Date('2024-01-01'), end: new Date('2024-01-10') }, * { start: new Date('2024-01-05'), end: new Date('2024-01-15') }, * { start: new Date('2024-01-20'), end: new Date('2024-01-25') } * ]; * * mergeDateRanges(ranges); * // [ * // { start: Date('2024-01-01'), end: Date('2024-01-15') }, * // { start: Date('2024-01-20'), end: Date('2024-01-25') } * // ] * ``` */ export declare function mergeDateRanges(ranges: DateRange[]): DateRange[]; /** * Finds gaps between date ranges within specified bounds * @param ranges - Array of date ranges * @param bounds - Optional bounds to search within * @returns Array of date ranges representing gaps * * @example * ```ts * const ranges = [ * { start: new Date('2024-01-01'), end: new Date('2024-01-05') }, * { start: new Date('2024-01-10'), end: new Date('2024-01-15') } * ]; * * findGaps(ranges, { * start: new Date('2024-01-01'), * end: new Date('2024-01-20') * }); * // [ * // { start: Date('2024-01-06'), end: Date('2024-01-09') }, * // { start: Date('2024-01-16'), end: Date('2024-01-20') } * // ] * ``` */ export declare function findGaps(ranges: DateRange[], bounds?: DateRange): DateRange[]; /** * Splits a date range into smaller chunks * @param range - The date range to split * @param chunkSize - Size of each chunk * @param unit - Unit for chunk size * @returns Array of date ranges * * @example * ```ts * const range = { * start: new Date('2024-01-01'), * end: new Date('2024-01-10') * }; * * splitRange(range, 3, 'day'); * // Returns 4 ranges: 3 days, 3 days, 3 days, 1 day * ``` */ export declare function splitRange(range: DateRange, chunkSize: number, unit: 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year'): DateRange[]; /** * Checks if a date falls within a date range * @param range - The date range * @param date - The date to check * @param inclusive - Whether to include boundary dates (default: true) * @returns True if date is within range * * @example * ```ts * const range = { * start: new Date('2024-01-01'), * end: new Date('2024-01-31') * }; * * containsDate(range, new Date('2024-01-15')); // true * containsDate(range, new Date('2024-02-01')); // false * ``` */ export declare function containsDate(range: DateRange, date: DateInput, inclusive?: boolean): boolean; /** * Gets the intersection of two date ranges * @param range1 - First date range * @param range2 - Second date range * @returns The overlapping range, or null if no overlap * * @example * ```ts * const range1 = { start: new Date('2024-01-01'), end: new Date('2024-01-15') }; * const range2 = { start: new Date('2024-01-10'), end: new Date('2024-01-20') }; * * getIntersection(range1, range2); * // { start: Date('2024-01-10'), end: Date('2024-01-15') } * ``` */ export declare function getIntersection(range1: DateRange, range2: DateRange): DateRange | null; /** * Gets the union (combined coverage) of two date ranges * @param range1 - First date range * @param range2 - Second date range * @returns The combined range covering both inputs * * @example * ```ts * const range1 = { start: new Date('2024-01-01'), end: new Date('2024-01-15') }; * const range2 = { start: new Date('2024-01-10'), end: new Date('2024-01-20') }; * * getUnion(range1, range2); * // { start: Date('2024-01-01'), end: Date('2024-01-20') } * ``` */ export declare function getUnion(range1: DateRange, range2: DateRange): DateRange; /** * Subtracts one date range from another * @param range - The range to subtract from * @param subtract - The range to subtract * @returns Array of remaining date ranges (0-2 ranges) * * @example * ```ts * const range = { start: new Date('2024-01-01'), end: new Date('2024-01-31') }; * const subtract = { start: new Date('2024-01-10'), end: new Date('2024-01-20') }; * * subtractRange(range, subtract); * // [ * // { start: Date('2024-01-01'), end: Date('2024-01-09') }, * // { start: Date('2024-01-21'), end: Date('2024-01-31') } * // ] * ``` */ export declare function subtractRange(range: DateRange, subtract: DateRange): DateRange[]; /** * Calculates the duration of a date range in milliseconds * @param range - The date range * @returns Duration in milliseconds * * @example * ```ts * const range = { * start: new Date('2024-01-01'), * end: new Date('2024-01-02') * }; * * getRangeDuration(range); // 86400000 (1 day in ms) * ``` */ export declare function getRangeDuration(range: DateRange): number; /** * Expands a date range by a specified amount * @param range - The date range to expand * @param amount - Amount to expand by * @param unit - Unit for expansion * @param options - Expansion options * @returns Expanded date range * * @example * ```ts * const range = { * start: new Date('2024-01-10'), * end: new Date('2024-01-20') * }; * * expandRange(range, 5, 'day'); * // { start: Date('2024-01-05'), end: Date('2024-01-25') } * * expandRange(range, 5, 'day', { direction: 'before' }); * // { start: Date('2024-01-05'), end: Date('2024-01-20') } * ``` */ export declare function expandRange(range: DateRange, amount: number, unit: 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year', options?: { direction?: 'both' | 'before' | 'after'; }): DateRange; /** * Shrinks a date range by a specified amount * @param range - The date range to shrink * @param amount - Amount to shrink by * @param unit - Unit for shrinking * @param options - Shrink options * @returns Shrunk date range, or null if result would be invalid * * @example * ```ts * const range = { * start: new Date('2024-01-01'), * end: new Date('2024-01-31') * }; * * shrinkRange(range, 5, 'day'); * // { start: Date('2024-01-06'), end: Date('2024-01-26') } * ``` */ export declare function shrinkRange(range: DateRange, amount: number, unit: 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year', options?: { direction?: 'both' | 'start' | 'end'; }): DateRange | null; /** * Checks if one date range completely contains another * @param outer - The potentially containing range * @param inner - The potentially contained range * @returns True if outer completely contains inner * * @example * ```ts * const outer = { start: new Date('2024-01-01'), end: new Date('2024-01-31') }; * const inner = { start: new Date('2024-01-10'), end: new Date('2024-01-20') }; * * rangeContains(outer, inner); // true * ``` */ export declare function rangeContains(outer: DateRange, inner: DateRange): boolean; /** * Sorts an array of date ranges by start date * @param ranges - Array of date ranges * @param order - Sort order ('asc' or 'desc') * @returns Sorted array of date ranges * * @example * ```ts * const ranges = [ * { start: new Date('2024-01-15'), end: new Date('2024-01-20') }, * { start: new Date('2024-01-01'), end: new Date('2024-01-10') } * ]; * * sortRanges(ranges); // Sorted by start date ascending * ``` */ export declare function sortRanges(ranges: DateRange[], order?: 'asc' | 'desc'): DateRange[]; //# sourceMappingURL=dateRange.d.ts.map