@rschedule/rschedule
Version:
A typescript library for working with recurring dates and events.
65 lines • 2.82 kB
TypeScript
import { DateAdapter } from '../date-adapter';
import { IOperatorConfig, Operator, OperatorFnOutput } from './interface';
declare const MERGE_DURATION_OPERATOR_ID: unique symbol;
export declare class MergeDurationOperatorError extends Error {
}
/**
* An operator function which takes an occurrence stream with
* `hasDuration === true` and merges occurrences which have overlapping
* start and end times.
*
* Because it's possible for all the occurrences in the stream to have
* overlapping start and end times, you must provide a `maxDuration`
* argument that represents the maximum possible duration for a single
* occurrence. If this duration is exceeded, a `MergeDurationOperatorError`
* will be thrown.
*
* - For your convenience, you can globally set a default
* `MergeDurationOperator#maxDuration` via
* `RScheduleConfig.MergeDurationOperator.defaultMaxDuration`.
*
* Usage example:
*
* ```typescript
* const MILLISECONDS_IN_HOUR = 1000 * 60 * 60;
*
* const dates = new Dates({
* dates: [
* new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
* new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 2 }),
* new StandardDateAdapter(new Date(2010, 10, 11, 14), { duration: MILLISECONDS_IN_HOUR * 2 }),
* new StandardDateAdapter(new Date(2010, 10, 12, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
* ],
* dateAdpter: StandardDateAdapter,
* }).pipe(
* mergeDuration({
* maxDuration: MILLISECONDS_IN_HOUR * 24
* })
* )
*
* dates.occurrences().toArray() === [
* new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
* new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 3 }),
* new StandardDateAdapter(new Date(2010, 10, 12, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
* ]
* ```
*/
export declare function mergeDuration<T extends typeof DateAdapter>(args?: {
maxDuration?: number;
}): OperatorFnOutput<T>;
export declare class MergeDurationOperator<T extends typeof DateAdapter> extends Operator<T> {
static isMergeDurationOperator(object: unknown): object is MergeDurationOperator<any>;
readonly maxDuration: number;
protected readonly [MERGE_DURATION_OPERATOR_ID] = true;
constructor(args: {
maxDuration?: number;
}, config: IOperatorConfig<T>);
/** Not actually used but necessary for IRunnable interface */
set(_: 'timezone', value: string | null): MergeDurationOperator<T>;
protected calculateIsInfinite(): boolean;
protected calculateHasDuration(): boolean;
private forwardRun;
private reverseRun;
}
export {};
//# sourceMappingURL=merge-duration.operator.d.ts.map