import { DateTime, UnionToIntersection } from './DateAdapter'; import { INormRuleOptionsBase } from './recurrence-rule-options'; export declare class RecurrenceRuleError extends Error {} export declare class ValidDateTime { readonly date: DateTime; constructor(date: DateTime); } export declare class InvalidDateTime { readonly date: DateTime; constructor(date: DateTime); } export declare type RecurrenceRuleResult = ValidDateTime | InvalidDateTime; export interface IRecurrenceRule { run(date: DateTime): RecurrenceRuleResult; } export interface IRecurrenceRulesIterator { readonly start: DateTime; readonly end?: DateTime; readonly reverse: boolean; readonly options: T; } export declare type GetRecurrenceRuleFn = ( iterator: IRecurrenceRulesIterator, ) => IRecurrenceRule | null; export declare type NormRecurrenceRuleOptionsFn = ( provided: Options, norm: INormRuleOptionsBase & Partial, ) => void; export declare type RecurrenceRuleModuleOptions< T extends IRecurrenceRuleModule > = T extends IRecurrenceRuleModule ? R : any; declare type NormRecurrenceRuleModuleOptions< T extends IRecurrenceRuleModule > = T extends IRecurrenceRuleModule ? R : any; export declare type UnwrapModules< T extends ReadonlyArray> > = T extends ReadonlyArray ? N : any; export declare type RecurrenceRulesOptions< T extends ReadonlyArray> > = UnionToIntersection>>; export declare type NormRecurrenceRulesOptions< T extends ReadonlyArray> > = UnionToIntersection>>; export interface IRecurrenceRuleModule { readonly name: string; readonly get: GetRecurrenceRuleFn; readonly normalizeOptions: NormRecurrenceRuleOptionsFn; readonly deps: () => ReadonlyArray>; } export declare function recurrenceRulesReducer< T extends readonly IRecurrenceRuleModule[] >( rules: T, ): ( iterator: IRecurrenceRulesIterator>, ) => IRecurrenceRule[]; export {};