1
0
This commit is contained in:
Herve BECHER
2025-05-24 12:11:44 +02:00
parent e5e6bffe1e
commit 0fd0e3bada
24 changed files with 1702 additions and 688 deletions

View File

@@ -1,7 +1,9 @@
import { AsyncSequence } from "../async/types.js";
import { Collector } from "../collector/types.js";
import { ComparisonOrComparer, Comparer } from "../comparer/types.js";
import { EqualityComparison } from "../equality-comparer/types.js";
import { RandomOptions } from "../random/types.js";
import { AnyPredicate, Converter, FilterPredicate, Equater, BiConverter, Accumulator, Comparer, Action } from "../types.js";
import { AnyPredicate, Converter, TypePredicate, BiConverter, Accumulator, Action } from "../types.js";
export type SequencePipeline<TElement, TResult> = (sequence: Sequence<TElement>) => TResult;
@@ -18,31 +20,31 @@ export interface Sequence<TElement> extends Iterable<TElement> {
maxCount(): number;
select<TResult>(selector: Converter<TElement, TResult>): Sequence<TResult>;
selectMany<TResult>(selector: Converter<TElement, Sequence<TResult>>): Sequence<TResult>;
selectMany<TResult>(selector: Converter<TElement, Iterable<TResult>>): Sequence<TResult>;
where<TFiltered extends TElement>(predicate: FilterPredicate<TElement, TFiltered>): Sequence<TFiltered>;
where<TFiltered extends TElement>(predicate: TypePredicate<TElement, TFiltered>): Sequence<TFiltered>;
where(predicate: AnyPredicate<TElement>): Sequence<TElement>;
groupBy<TKey>(keySelector: Converter<TElement, TKey>, elementSelector?: undefined, keyComparer?: Equater<TKey>): Sequence<GroupedSequence<TKey, TElement>>;
groupBy<TKey, TResult>(keySelector: Converter<TElement, TKey>, elementSelector: Converter<TElement, TResult>, keyComparer?: Equater<TKey>): Sequence<GroupedSequence<TKey, TResult>>;
groupBy<TKey>(keySelector: Converter<TElement, TKey>, elementSelector?: undefined, keyComparer?: EqualityComparison<TKey>): Sequence<GroupedSequence<TKey, TElement>>;
groupBy<TKey, TResult>(keySelector: Converter<TElement, TKey>, elementSelector: Converter<TElement, TResult>, keyComparer?: EqualityComparison<TKey>): Sequence<GroupedSequence<TKey, TResult>>;
join<TOther, TKey>(sequence: Sequence<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector?: undefined, keyComparer?: Equater<TKey>): Sequence<[TElement, TOther]>;
join<TOther, TKey, TResult>(sequence: Sequence<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector: BiConverter<TElement, TOther, TResult>, keyComparer?: Equater<TKey>): Sequence<TResult>;
join<TOther, TKey>(sequence: Iterable<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector?: undefined, keyComparer?: EqualityComparison<TKey>): Sequence<[TElement, TOther]>;
join<TOther, TKey, TResult>(sequence: Iterable<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector: BiConverter<TElement, TOther, TResult>, keyComparer?: EqualityComparison<TKey>): Sequence<TResult>;
groupJoin<TOther, TKey>(sequence: Sequence<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector?: undefined, keyComparer?: Equater<TKey>): Sequence<GroupedSequence<TElement, TOther>>;
groupJoin<TOther, TKey, TResult>(sequence: Sequence<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector: BiConverter<TElement, Sequence<TOther>, TResult>, keyComparer?: Equater<TKey>): Sequence<TResult>;
groupJoin<TOther, TKey>(sequence: Iterable<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector?: undefined, keyComparer?: EqualityComparison<TKey>): Sequence<GroupedSequence<TElement, TOther>>;
groupJoin<TOther, TKey, TResult>(sequence: Iterable<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector: BiConverter<TElement, Iterable<TOther>, TResult>, keyComparer?: EqualityComparison<TKey>): Sequence<TResult>;
contains(obj: TElement, equater?: Equater<TElement>): boolean;
contains(obj: TElement, equater?: EqualityComparison<TElement>): boolean;
sequenceEquals(sequence: Sequence<TElement>, equater?: Equater<TElement>): boolean;
sequenceEquals(sequence: Iterable<TElement>, equater?: EqualityComparison<TElement>): boolean;
append(obj: TElement): Sequence<TElement>;
prepend(obj: TElement): Sequence<TElement>;
remove(obj: TElement, all?: boolean, equater?: Equater<TElement>): Sequence<TElement>;
remove(obj: TElement, all?: boolean, equater?: EqualityComparison<TElement>): Sequence<TElement>;
concat(...sequences: Sequence<TElement>[]): Sequence<TElement>;
concat(...sequences: Iterable<TElement>[]): Sequence<TElement>;
first(predicate?: AnyPredicate<TElement>): TElement;
firstOrDefault(predicate?: AnyPredicate<TElement>, def?: TElement): TElement | undefined;
@@ -60,35 +62,35 @@ export interface Sequence<TElement> extends Iterable<TElement> {
aggregate<TAccumulator>(accumulator: Accumulator<TElement, TAccumulator>, seed?: TAccumulator): TAccumulator;
aggregate<TAccumulator, TResult>(accumulator: Accumulator<TElement, TAccumulator>, seed?: TAccumulator, resultSelector?: Converter<TAccumulator, TResult>): TResult;
min(comparer?: Comparer<TElement>): TElement;
minBy<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): TElement;
min(comparer?: ComparisonOrComparer<TElement>): TElement;
minBy<TBy>(selector: Converter<TElement, TBy>, comparer?: ComparisonOrComparer<TBy>): TElement;
max(comparer?: Comparer<TElement>): TElement;
maxBy<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): TElement;
max(comparer?: ComparisonOrComparer<TElement>): TElement;
maxBy<TBy>(selector: Converter<TElement, TBy>, comparer?: ComparisonOrComparer<TBy>): TElement;
bounds(comparer?: Comparer<TElement>): { min: TElement, max: TElement; };
boundsBy<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): { min: TElement, max: TElement; };
bounds(comparer?: ComparisonOrComparer<TElement>): [min: TElement, max: TElement];
boundsBy<TBy>(selector: Converter<TElement, TBy>, comparer?: ComparisonOrComparer<TBy>): [min: TElement, max: TElement];
order(comparer?: Comparer<TElement>): OrderedSequence<TElement>;
orderBy<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): OrderedSequence<TElement>;
order(comparer?: ComparisonOrComparer<TElement>): OrderedSequence<TElement>;
orderBy<TBy>(selector: Converter<TElement, TBy>, comparer?: ComparisonOrComparer<TBy>): OrderedSequence<TElement>;
orderDescending(comparer?: Comparer<TElement>): OrderedSequence<TElement>;
orderByDescending<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): OrderedSequence<TElement>;
orderDescending(comparer?: ComparisonOrComparer<TElement>): OrderedSequence<TElement>;
orderByDescending<TBy>(selector: Converter<TElement, TBy>, comparer?: ComparisonOrComparer<TBy>): OrderedSequence<TElement>;
partition(equater?: Equater<TElement>): Sequence<Sequence<TElement>>;
partitionBy<TBy>(selector: Converter<TElement, TBy>, equater?: Equater<TBy>): Sequence<Sequence<TElement>>;
partition(equater?: EqualityComparison<TElement>): Sequence<Sequence<TElement>>;
partitionBy<TBy>(selector: Converter<TElement, TBy>, equater?: EqualityComparison<TBy>): Sequence<Sequence<TElement>>;
distinct(equater?: Equater<TElement>): Sequence<TElement>;
distinctBy<TBy>(selector: Converter<TElement, TBy>, equater?: Equater<TBy>): Sequence<TElement>;
distinct(equater?: EqualityComparison<TElement>): Sequence<TElement>;
distinctBy<TBy>(selector: Converter<TElement, TBy>, equater?: EqualityComparison<TBy>): Sequence<TElement>;
union(sequence: Sequence<TElement>, equater?: Equater<TElement>): Sequence<TElement>;
unionBy<TBy>(sequence: Sequence<TElement>, selector: Converter<TElement, TBy>, equater?: Equater<TBy>): Sequence<TElement>;
union(sequence: Iterable<TElement>, equater?: EqualityComparison<TElement>): Sequence<TElement>;
unionBy<TBy>(sequence: Iterable<TElement>, selector: Converter<TElement, TBy>, equater?: EqualityComparison<TBy>): Sequence<TElement>;
except(sequence: Sequence<TElement>, equater?: Equater<TElement>): Sequence<TElement>;
exceptBy<TBy>(sequence: Sequence<TElement>, selector: Converter<TElement, TBy>, equater?: Equater<TBy>): Sequence<TElement>;
except(sequence: Iterable<TElement>, equater?: EqualityComparison<TElement>): Sequence<TElement>;
exceptBy<TBy>(sequence: Iterable<TElement>, selector: Converter<TElement, TBy>, equater?: EqualityComparison<TBy>): Sequence<TElement>;
intersect(sequence: Sequence<TElement>, equater?: Equater<TElement>): Sequence<TElement>;
intersectBy<TBy>(sequence: Sequence<TElement>, selector: Converter<TElement, TBy>, equater?: Equater<TBy>): Sequence<TElement>;
intersect(sequence: Iterable<TElement>, equater?: EqualityComparison<TElement>): Sequence<TElement>;
intersectBy<TBy>(sequence: Iterable<TElement>, selector: Converter<TElement, TBy>, equater?: EqualityComparison<TBy>): Sequence<TElement>;
all(predicate: AnyPredicate<TElement>): boolean;
any(predicate: AnyPredicate<TElement>): boolean;
@@ -108,13 +110,14 @@ export interface Sequence<TElement> extends Iterable<TElement> {
forEach(action: Action<TElement>): void;
zip<TOther>(sequence: Sequence<TOther>): Sequence<[TElement, TOther]>;
zip<TOther>(sequence: Iterable<TOther>): Sequence<[TElement, TOther]>;
indexed(): Sequence<[number, TElement]>;
reversed(): Sequence<TElement>;
chunked(size: number): Sequence<Sequence<TElement>>;
chunked(size: number, asArray: true): Sequence<TElement[]>;
chunked<TResult>(size: number, transformer: SequencePipeline<TElement, TResult>): Sequence<TResult>;
random(options?: RandomOptions<TElement>): TElement | undefined;
@@ -139,13 +142,13 @@ export interface GroupedSequence<TKey, TElement> extends Sequence<TElement> {
}
export interface OrderedSequence<TElement> extends Sequence<TElement> {
get comparer(): Comparer<TElement> | undefined;
get comparer(): Comparer<TElement>;
thenSelf(comparer?: Comparer<TElement>): OrderedSequence<TElement>;
thenSelf(comparer?: ComparisonOrComparer<TElement>): OrderedSequence<TElement>;
thenBy<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): OrderedSequence<TElement>;
thenBy<TBy>(selector: Converter<TElement, TBy>, comparer?: ComparisonOrComparer<TBy>): OrderedSequence<TElement>;
thenSelfDescending(comparer?: Comparer<TElement>): OrderedSequence<TElement>;
thenSelfDescending(comparer?: ComparisonOrComparer<TElement>): OrderedSequence<TElement>;
thenByDescending<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): OrderedSequence<TElement>;
thenByDescending<TBy>(selector: Converter<TElement, TBy>, comparer?: ComparisonOrComparer<TBy>): OrderedSequence<TElement>;
}