UNPKG

javascript-linq

Version:

Linq-Collections (ES5): [IEnumerable, IQueryable, ...] + [List, Dictionary, Stack, ... + readonly]

252 lines (251 loc) 12.6 kB
import { Selector, Predicate, Aggregator, Action, Indexer } from "./Types"; import { IList, List, IDictionary } from "./Collections"; import { IIterable } from "./Iterators"; import { Comparer } from "./Comparers"; import { Cached } from "./Utils"; export interface IKeyValue<TKey, TValue> { key: TKey; value: TValue; } export declare type IGrouping<TKey, TElement> = IKeyValue<TKey, IQueryable<TElement>>; export interface IQueryable<TOut> { copy(): IQueryable<TOut>; asEnumerable(): IEnumerable<TOut>; toArray(): TOut[]; toList(): IList<TOut>; toDictionary<TKey extends Indexer, TValue>(keySelector: Selector<TOut, TKey>, valueSelector: Selector<TOut, TValue>): IDictionary<TKey, TValue>; aggregate(aggregator: Aggregator<TOut, TOut | undefined>): TOut; aggregate<TValue>(aggregator: Aggregator<TOut, TValue>, initialValue: TValue): TValue; all(predicate: Predicate<TOut>): boolean; any(): boolean; any(predicate: Predicate<TOut>): boolean; average(selector: Selector<TOut, number>): number; concat(other: TOut[] | IQueryable<TOut>, ...others: Array<TOut[] | IQueryable<TOut>>): IEnumerable<TOut>; contains(element: TOut): boolean; count(): number; count(predicate: Predicate<TOut>): number; distinct(): IEnumerable<TOut>; distinct<TKey>(keySelector: Selector<TOut, TKey>): IEnumerable<TOut>; elementAt(index: number): TOut; elementAtOrDefault(index: number): TOut | undefined; except(other: IQueryable<TOut>): IEnumerable<TOut>; first(): TOut; first(predicate: Predicate<TOut>): TOut; firstOrDefault(): TOut | undefined; firstOrDefault(predicate: Predicate<TOut>): TOut | undefined; forEach(action: Action<TOut>): void; groupBy<TKey extends Indexer>(keySelector: Selector<TOut, TKey>): IEnumerable<IGrouping<TKey, TOut>>; groupBy<TKey extends Indexer, TValue>(keySelector: Selector<TOut, TKey>, valueSelector: Selector<TOut, TValue>): IEnumerable<IGrouping<TKey, TValue>>; last(): TOut; last(predicate: Predicate<TOut>): TOut; lastOrDefault(): TOut | undefined; lastOrDefault(predicate: Predicate<TOut>): TOut | undefined; max(): TOut; max<TSelectorOut>(selector: Selector<TOut, TSelectorOut>): TSelectorOut; min(): TOut; min<TSelectorOut>(selector: Selector<TOut, TSelectorOut>): TSelectorOut; orderBy<TKey>(keySelector: Selector<TOut, TKey>): IOrderedEnumerable<TOut>; orderBy<TKey>(keySelector: Selector<TOut, TKey>, comparer: Comparer<TKey>): IOrderedEnumerable<TOut>; orderByDescending<TKey>(keySelector: Selector<TOut, TKey>): IOrderedEnumerable<TOut>; reverse(): IEnumerable<TOut>; select<TSelectorOut>(selector: Selector<TOut, TSelectorOut>): IEnumerable<TSelectorOut>; selectMany<TSelectorOut>(selector: Selector<TOut, TSelectorOut[] | IQueryable<TSelectorOut>>): IEnumerable<TSelectorOut>; single(): TOut; single(predicate: Predicate<TOut>): TOut; singleOrDefault(): TOut | undefined; singleOrDefault(predicate: Predicate<TOut>): TOut | undefined; skip(amount: number): IEnumerable<TOut>; sum(selector: Selector<TOut, number>): number; take(amount: number): IEnumerable<TOut>; union(other: IQueryable<TOut>): IEnumerable<TOut>; where(predicate: Predicate<TOut>): IEnumerable<TOut>; } export interface IEnumerable<TOut> extends IQueryable<TOut>, IIterable<TOut> { copy(): IEnumerable<TOut>; } export interface IOrderedEnumerable<TOut> extends IEnumerable<TOut> { copy(): IOrderedEnumerable<TOut>; thenBy<TKey>(keySelector: Selector<TOut, TKey>): IOrderedEnumerable<TOut>; thenBy<TKey>(keySelector: Selector<TOut, TKey>, comparer: Comparer<TKey>): IOrderedEnumerable<TOut>; thenByDescending<TKey>(keySelector: Selector<TOut, TKey>): IOrderedEnumerable<TOut>; } export declare abstract class EnumerableBase<TElement, TOut> implements IEnumerable<TOut> { protected readonly source: IIterable<TElement> | IEnumerable<TElement>; protected constructor(source: IIterable<TElement>); abstract copy(): IEnumerable<TOut>; abstract value(): TOut; reset(): void; next(): boolean; asEnumerable(): IEnumerable<TOut>; toArray(): TOut[]; toList(): IList<TOut>; toDictionary<TKey extends Indexer, TValue>(keySelector: Selector<TOut, TKey>, valueSelector: Selector<TOut, TValue>): IDictionary<TKey, TValue>; count(): number; count(predicate: Predicate<TOut>): number; any(): boolean; any(predicate: Predicate<TOut>): boolean; all(predicate: Predicate<TOut>): boolean; reverse(): IEnumerable<TOut>; contains(element: TOut): boolean; where(predicate: Predicate<TOut>): IEnumerable<TOut>; select<TSelectorOut>(selector: Selector<TOut, TSelectorOut>): IEnumerable<TSelectorOut>; selectMany<TSelectorOut>(selector: Selector<TOut, TSelectorOut[] | IQueryable<TSelectorOut>>): IEnumerable<TSelectorOut>; concat(other: TOut[] | IQueryable<TOut>, ...others: Array<TOut[] | IQueryable<TOut>>): IEnumerable<TOut>; elementAt(index: number): TOut; elementAtOrDefault(index: number): TOut | undefined; except(other: IQueryable<TOut>): IEnumerable<TOut>; first(): TOut; first(predicate: Predicate<TOut>): TOut; firstOrDefault(): TOut | undefined; firstOrDefault(predicate: Predicate<TOut>): TOut | undefined; forEach(action: Action<TOut>): void; groupBy<TKey extends Indexer>(keySelector: Selector<TOut, TKey>): IEnumerable<IGrouping<TKey, TOut>>; groupBy<TKey extends Indexer, TValue>(keySelector: Selector<TOut, TKey>, valueSelector: Selector<TOut, TValue>): IEnumerable<IGrouping<TKey, TValue>>; last(): TOut; last(predicate: Predicate<TOut>): TOut; lastOrDefault(): TOut | undefined; lastOrDefault(predicate: Predicate<TOut>): TOut | undefined; single(): TOut; single(predicate: Predicate<TOut>): TOut; singleOrDefault(): TOut | undefined; singleOrDefault(predicate: Predicate<TOut>): TOut | undefined; distinct(): IEnumerable<TOut>; distinct<TKey>(keySelector: Selector<TOut, TKey>): IEnumerable<TOut>; aggregate(aggregator: Aggregator<TOut, TOut | undefined>): TOut; aggregate<TValue>(aggregator: Aggregator<TOut, TValue>, initialValue: TValue): TValue; min(): TOut; min<TSelectorOut>(selector: Selector<TOut, TSelectorOut>): TSelectorOut; orderBy<TKey>(keySelector: Selector<TOut, TKey>): IOrderedEnumerable<TOut>; orderBy<TKey>(keySelector: Selector<TOut, TKey>, comparer: Comparer<TKey>): IOrderedEnumerable<TOut>; orderByDescending<TKey>(keySelector: Selector<TOut, TKey>): IOrderedEnumerable<TOut>; max(): TOut; max<TSelectorOut>(selector: Selector<TOut, TSelectorOut>): TSelectorOut; sum(selector: Selector<TOut, number>): number; average(selector: Selector<TOut, number>): number; skip(amount: number): IEnumerable<TOut>; take(amount: number): IEnumerable<TOut>; union(other: IQueryable<TOut>): IEnumerable<TOut>; } export declare class Enumerable<TElement> extends EnumerableBase<TElement, TElement> { protected currentValue: Cached<TElement>; static fromSource<TElement>(source: TElement[] | IIterable<TElement>): IEnumerable<TElement>; static empty<TElement>(): IEnumerable<TElement>; static range(start: number, count: number): IEnumerable<number>; static range(start: number, count: number, ascending: boolean): IEnumerable<number>; static repeat<TElement>(element: TElement, count: number): IEnumerable<TElement>; constructor(source: IIterable<TElement>); copy(): IEnumerable<TElement>; value(): TElement; reset(): void; next(): boolean; } export declare class ConditionalEnumerable<TElement> extends Enumerable<TElement> { protected source: IEnumerable<TElement>; private _predicate; constructor(source: IEnumerable<TElement>, predicate: Predicate<TElement>); copy(): ConditionalEnumerable<TElement>; next(): boolean; } export declare class ConcatEnumerable<TElement> extends Enumerable<TElement> { private _otherSource; private _isFirstSourceFinished; constructor(left: IIterable<TElement>, right: IIterable<TElement>); copy(): ConcatEnumerable<TElement>; reset(): void; next(): boolean; value(): TElement; } export declare class UniqueEnumerable<TElement, TKey> extends Enumerable<TElement> { protected source: IEnumerable<TElement>; private _seen; private _keySelector; constructor(source: IEnumerable<TElement>, keySelector?: Selector<TElement, TKey>); copy(): UniqueEnumerable<TElement, TKey>; reset(): void; private isUnique(element); next(): boolean; } export declare class RangeEnumerable<TElement> extends Enumerable<TElement> { protected source: IEnumerable<TElement>; private _start; private _count; private _currentIndex; constructor(source: IEnumerable<TElement>, start: number | undefined, count: number | undefined); copy(): RangeEnumerable<TElement>; reset(): void; private isValidIndex(); private performSkip(); next(): boolean; value(): TElement; } export declare class TransformEnumerable<TElement, TOut> extends EnumerableBase<TElement, TOut> { protected source: IEnumerable<TElement>; private _transform; private _currentValue; constructor(source: IEnumerable<TElement>, transform: Selector<TElement, TOut>); copy(): TransformEnumerable<TElement, TOut>; value(): TOut; reset(): void; next(): boolean; } export declare class ReverseEnumerable<TElement> extends Enumerable<TElement> { protected source: IEnumerable<TElement>; private _elements; private _currentIndex; constructor(source: IEnumerable<TElement>); copy(): IEnumerable<TElement>; reset(): void; private isValidIndex(); all(predicate: Predicate<TElement>): boolean; any(): boolean; any(predicate: Predicate<TElement>): boolean; average(selector: Selector<TElement, number>): number; count(): number; count(predicate: Predicate<TElement>): number; max(): TElement; max<TSelectorOut>(selector: Selector<TElement, TSelectorOut>): TSelectorOut; min(): TElement; min<TSelectorOut>(selector: Selector<TElement, TSelectorOut>): TSelectorOut; reverse(): IEnumerable<TElement>; sum(selector: Selector<TElement, number>): number; next(): boolean; value(): TElement; } export declare class OrderedEnumerable<TElement> extends EnumerableBase<TElement, TElement> implements IOrderedEnumerable<TElement> { protected source: IEnumerable<TElement>; private _comparer; private _elements; private _currentIndex; constructor(source: IEnumerable<TElement>, comparer: Comparer<TElement>); private isValidIndex(); orderBy<TKey>(keySelector: Selector<TElement, TKey>): IOrderedEnumerable<TElement>; orderBy<TKey>(keySelector: Selector<TElement, TKey>, comparer: Comparer<TKey>): IOrderedEnumerable<TElement>; orderByDescending<TKey>(keySelector: Selector<TElement, TKey>): IOrderedEnumerable<TElement>; thenBy<TKey>(keySelector: Selector<TElement, TKey>): IOrderedEnumerable<TElement>; thenBy<TKey>(keySelector: Selector<TElement, TKey>, comparer: Comparer<TKey>): IOrderedEnumerable<TElement>; thenByDescending<TKeySelector>(keySelector: Selector<TElement, TKeySelector>): IOrderedEnumerable<TElement>; reset(): void; copy(): IOrderedEnumerable<TElement>; value(): TElement; next(): boolean; toArray(): TElement[]; } export declare class ArrayEnumerable<TOut> extends Enumerable<TOut> { protected list: List<TOut>; constructor(source: TOut[]); toArray(): TOut[]; aggregate(aggregator: Aggregator<TOut, TOut | undefined>): TOut; aggregate<TValue>(aggregator: Aggregator<TOut, TValue>, initialValue: TValue): TValue; any(): boolean; any(predicate: Predicate<TOut>): boolean; all(predicate: Predicate<TOut>): boolean; average(selector: Selector<TOut, number>): number; count(): number; count(predicate: Predicate<TOut>): number; copy(): IEnumerable<TOut>; elementAtOrDefault(index: number): TOut | undefined; firstOrDefault(): TOut | undefined; firstOrDefault(predicate: Predicate<TOut>): TOut | undefined; lastOrDefault(): TOut | undefined; lastOrDefault(predicate: Predicate<TOut>): TOut | undefined; }