@everwhen/temporal
Version:
_description_
50 lines (49 loc) • 2.03 kB
TypeScript
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;
}