UNPKG

@everwhen/temporal

Version:
50 lines (49 loc) 2.03 kB
import { type DateDurationLike, type DurationLike, type TimeDurationLike, type YearMonthDurationLike } from './duration.ts'; import type { PlainDateTime } from './plain-date-time.ts'; import type { PlainDate } from './plain-date.ts'; import type { PlainTime } from './plain-time.ts'; import type { PlainYearMonth } from './plain-year-month.ts'; import type { Point } from './point.ts'; import type { ZonedDateTime } from './zoned-date-time.ts'; export type SequenceStep<T extends Point> = T extends PlainTime ? TimeDurationLike : T extends PlainYearMonth ? YearMonthDurationLike : T extends PlainDate ? DateDurationLike : T extends PlainDateTime | ZonedDateTime ? DurationLike : never; export interface SequenceBounds<T extends Point> { start: T; end: T; } export interface SequenceDef<T extends Point> extends SequenceBounds<T> { step?: SequenceStep<T>; } export interface SequenceItem<T extends Point> { previous?: T; value: T; next?: T; } export declare class Sequence<T extends Point> implements Iterable<T> { #private; readonly start: T; readonly end: T; readonly step: SequenceStep<T>; constructor(start: T, end: T, step: SequenceStep<T>); static from<T extends Point>(bounds: SequenceDef<T>): Sequence<T>; [Symbol.iterator](): Iterator<T>; get bounds(): SequenceBounds<T>; items(): Generator<SequenceItem<T>>; forEach(callbackfn: (value: T, index: number) => void): void; map<U>(mapper: (temporal: T) => U): U[]; group<K>(keyFn: (item: T) => K): Map<K, T[]>; select<U>(predicate: (item: T) => boolean, mapper: (temporal: T) => U): U[]; filter(predicate: (item: T) => boolean): T[]; with(bounds: Partial<SequenceBounds<T>> & { step?: SequenceStep<T>; }): Sequence<T>; get length(): number; contains(target: T): boolean; toMap<U>(mapper: (item: T) => U): Map<string, U>; toJSON(): { start: string; end: string; step: string; }; indexOf(target: T): number; toString(): string; }