import { AsyncSequence } from "../async/types.js"; import { Collector } from "../collector/types.js"; import { ComparisonOrComparer, Comparer } from "../comparer/types.js"; import { EqualityComparisonOrComparer } from "../equality-comparer/types.js"; import { RandomOptions } from "../random/types.js"; import { AnyPredicate, Converter, TypePredicate, BiConverter, Accumulator, Action } from "../types.js"; export type SequencePipeline = (sequence: Sequence) => TResult; export type SequenceElement> = TSequence extends Sequence ? TElement : never; export interface Sequence extends Iterable { iterator(): Iterator; toJSON(): any; apply(pipeline: SequencePipeline): TResult; count(predicate?: AnyPredicate): number; nonEnumeratedCount(): number; fastCount(): number; maxCount(): number; select(selector: Converter): Sequence; selectMany(selector: Converter>): Sequence; where(predicate: TypePredicate): Sequence; where(predicate: AnyPredicate): Sequence; groupBy(keySelector: Converter, elementSelector?: undefined, keyComparer?: EqualityComparisonOrComparer): Sequence>; groupBy(keySelector: Converter, elementSelector: Converter, keyComparer?: EqualityComparisonOrComparer): Sequence>; join(sequence: Iterable, firstKeySelector: Converter, secondKeySelector: Converter, resultSelector?: undefined, keyComparer?: EqualityComparisonOrComparer): Sequence<[TElement, TOther]>; join(sequence: Iterable, firstKeySelector: Converter, secondKeySelector: Converter, resultSelector: BiConverter, keyComparer?: EqualityComparisonOrComparer): Sequence; groupJoin(sequence: Iterable, firstKeySelector: Converter, secondKeySelector: Converter, resultSelector?: undefined, keyComparer?: EqualityComparisonOrComparer): Sequence>; groupJoin(sequence: Iterable, firstKeySelector: Converter, secondKeySelector: Converter, resultSelector: BiConverter, TResult>, keyComparer?: EqualityComparisonOrComparer): Sequence; contains(obj: TElement, equater?: EqualityComparisonOrComparer): boolean; sequenceEquals(sequence: Iterable, equater?: EqualityComparisonOrComparer): boolean; append(obj: TElement): Sequence; prepend(obj: TElement): Sequence; remove(obj: TElement, all?: boolean, equater?: EqualityComparisonOrComparer): Sequence; concat(...sequences: Iterable[]): Sequence; first(predicate?: AnyPredicate): TElement; firstOrDefault(predicate?: AnyPredicate, def?: TElement): TElement | undefined; last(predicate?: AnyPredicate): TElement; lastOrDefault(predicate?: AnyPredicate, def?: TElement): TElement | undefined; single(predicate?: AnyPredicate): TElement; singleOrDefault(predicate?: AnyPredicate, def?: TElement): TElement | undefined; elementAt(index: number): TElement; elementAtOrDefault(index: number, def?: TElement): TElement | undefined; aggregate(accumulator: Accumulator): TElement; aggregate(accumulator: Accumulator, seed?: TAccumulator): TAccumulator; aggregate(accumulator: Accumulator, seed?: TAccumulator, resultSelector?: Converter): TResult; min(comparer?: ComparisonOrComparer): TElement; minBy(selector: Converter, comparer?: ComparisonOrComparer): TElement; max(comparer?: ComparisonOrComparer): TElement; maxBy(selector: Converter, comparer?: ComparisonOrComparer): TElement; bounds(comparer?: ComparisonOrComparer): [min: TElement, max: TElement]; boundsBy(selector: Converter, comparer?: ComparisonOrComparer): [min: TElement, max: TElement]; order(comparer?: ComparisonOrComparer): OrderedSequence; orderBy(selector: Converter, comparer?: ComparisonOrComparer): OrderedSequence; orderDescending(comparer?: ComparisonOrComparer): OrderedSequence; orderByDescending(selector: Converter, comparer?: ComparisonOrComparer): OrderedSequence; partition(equater?: EqualityComparisonOrComparer): Sequence>; partitionBy(selector: Converter, equater?: EqualityComparisonOrComparer): Sequence>; distinct(equater?: EqualityComparisonOrComparer): Sequence; distinctBy(selector: Converter, equater?: EqualityComparisonOrComparer): Sequence; union(sequence: Iterable, equater?: EqualityComparisonOrComparer): Sequence; unionBy(sequence: Iterable, selector: Converter, equater?: EqualityComparisonOrComparer): Sequence; except(sequence: Iterable, equater?: EqualityComparisonOrComparer): Sequence; exceptBy(sequence: Iterable, selector: Converter, equater?: EqualityComparisonOrComparer): Sequence; intersect(sequence: Iterable, equater?: EqualityComparisonOrComparer): Sequence; intersectBy(sequence: Iterable, selector: Converter, equater?: EqualityComparisonOrComparer): Sequence; all(predicate: AnyPredicate): boolean; any(predicate: AnyPredicate): boolean; any(): boolean; none(predicate: AnyPredicate): boolean; none(): boolean; skip(n: number): Sequence; skipLast(n: number): Sequence; skipWhile(condition: AnyPredicate): Sequence; take(n: number): Sequence; takeLast(n: number): Sequence; takeWhile(condition: AnyPredicate): Sequence; peek(action: Action): Sequence; forEach(action: Action): void; zip(sequence: Iterable): Sequence<[TElement, TOther]>; cartesianProduct(sequence: Iterable): Sequence<[TElement, TOther]>; indexed(): Sequence<[number, TElement]>; reversed(): Sequence; chunked(size: number): Sequence>; chunked(size: number, asArray: true): Sequence; chunked(size: number, transformer: SequencePipeline): Sequence; random(options?: RandomOptions): TElement | undefined; cached(): Sequence; awaited(): AsyncSequence>; asArray(): TElement[]; toArray(): TElement[]; toMap(keySelector: Converter): Map; toMap(keySelector: Converter, valueSelector: Converter): Map; toSet(): Set; toObject(keySelector: Converter): Record; toObject(keySelector: Converter, valueSelector: Converter): Record; collect(collector: Collector): TResult; } export interface GroupedSequence extends Sequence { get key(): TKey; } export interface OrderedSequence extends Sequence { get comparer(): Comparer; thenSelf(comparer?: ComparisonOrComparer): OrderedSequence; thenBy(selector: Converter, comparer?: ComparisonOrComparer): OrderedSequence; thenSelfDescending(comparer?: ComparisonOrComparer): OrderedSequence; thenByDescending(selector: Converter, comparer?: ComparisonOrComparer): OrderedSequence; }