import { AsyncSequence } from "../async/types.js"; import { Collector } from "../collector/types.js"; import { RandomOptions } from "../random/types.js"; import { Predicate, Converter, FilterPredicate, Equater, BiConverter, Accumulator, Comparer, Action } from "../types.js"; export interface Sequence extends Iterable { iterator(): Iterator; apply(pipeline: (sequence: Sequence) => TResult): TResult; count(predicate?: Predicate): number; nonEnumeratedCount(): number; fastCount(): number; maxCount(): number; select(selector: Converter): Sequence; selectMany(selector: Converter>): Sequence; where(predicate: FilterPredicate): Sequence; where(predicate: Predicate): Sequence; groupBy(keySelector: Converter, elementSelector?: undefined, keyComparer?: Equater): Sequence>; groupBy(keySelector: Converter, elementSelector: Converter, keyComparer?: Equater): Sequence>; join(sequence: Sequence, firstKeySelector: Converter, secondKeySelector: Converter, resultSelector?: undefined, keyComparer?: Equater): Sequence<[TElement, TOther]>; join(sequence: Sequence, firstKeySelector: Converter, secondKeySelector: Converter, resultSelector: BiConverter, keyComparer?: Equater): Sequence; groupJoin(sequence: Sequence, firstKeySelector: Converter, secondKeySelector: Converter, resultSelector?: undefined, keyComparer?: Equater): Sequence>; groupJoin(sequence: Sequence, firstKeySelector: Converter, secondKeySelector: Converter, resultSelector: BiConverter, TResult>, keyComparer?: Equater): Sequence; contains(obj: TElement, equater?: Equater): boolean; sequenceEquals(sequence: Sequence, equater?: Equater): boolean; append(obj: TElement): Sequence; prepend(obj: TElement): Sequence; remove(obj: TElement, all?: boolean, equater?: Equater): Sequence; concat(...sequences: Sequence[]): Sequence; first(predicate?: Predicate): TElement; firstOrDefault(predicate?: Predicate, def?: TElement): TElement | undefined; last(predicate?: Predicate): TElement; lastOrDefault(predicate?: Predicate, def?: TElement): TElement | undefined; single(predicate?: Predicate): TElement; singleOrDefault(predicate?: Predicate, 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?: Comparer): TElement; minBy(selector: Converter, comparer?: Comparer): TElement; max(comparer?: Comparer): TElement; maxBy(selector: Converter, comparer?: Comparer): TElement; order(comparer?: Comparer): OrderedSequence; orderBy(selector: Converter, comparer?: Comparer): OrderedSequence; orderDescending(comparer?: Comparer): OrderedSequence; orderByDescending(selector: Converter, comparer?: Comparer): OrderedSequence; partition(equater?: Equater): Sequence; partitionBy(selector: Converter, equater?: Equater): Sequence; distinct(equater?: Equater): Sequence; distinctBy(selector: Converter, equater?: Equater): Sequence; union(sequence: Sequence, equater?: Equater): Sequence; unionBy(sequence: Sequence, selector: Converter, equater?: Equater): Sequence; except(sequence: Sequence, equater?: Equater): Sequence; exceptBy(sequence: Sequence, selector: Converter, equater?: Equater): Sequence; intersect(sequence: Sequence, equater?: Equater): Sequence; intersectBy(sequence: Sequence, selector: Converter, equater?: Equater): Sequence; all(predicate: Predicate): boolean; any(predicate: Predicate): boolean; any(): boolean; none(predicate: Predicate): boolean; none(): boolean; skip(n: number): Sequence; skipLast(n: number): Sequence; skipWhile(condition: Predicate): Sequence; take(n: number): Sequence; takeLast(n: number): Sequence; takeWhile(condition: Predicate): Sequence; peek(action: Action): Sequence; forEach(action: Action): void; zip(sequence: Sequence): Sequence<[TElement, TOther]>; indexed(): Sequence<[number, TElement]>; reversed(): Sequence; chunked(size: number): Sequence>; random(options?: RandomOptions): TElement | undefined; cached(): Sequence; awaited(): AsyncSequence>; toArray(): TElement[]; toMap(keySelector: Converter, valueSelector: Converter): Map; toSet(): Set; 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 | undefined; thenSelf(comparer?: Comparer): OrderedSequence; thenBy(selector: Converter, comparer?: Comparer): OrderedSequence; thenSelfDescending(comparer?: Comparer): OrderedSequence; thenByDescending(selector: Converter, comparer?: Comparer): OrderedSequence; }