UNPKG

@codibre/fluent-iterable

Version:

Provides LINQ-like fluent api operations for iterables and async iterables (ES2018+).

73 lines (72 loc) 4.44 kB
import { AnyIterable, Mapper } from 'augmentative-iterable'; import { FluentAsyncIterable, FluentIterable } from '../base'; export interface CombineFunction<T> { /** * Join the iterable with another one, returning a new iterable with a NxN combination * @param iterable The iterable to be combined */ <U>(iterable: Iterable<U>): FluentIterable<[T, U]>; /** * Join the iterable with another one, returning a new iterable with the inner matching combinations * @param iterable The right iterable to be combined * @param keyA A mapper that returns the key map value from the left iterable * @param keyB A mapper that returns the key map value from the right iterable */ <U, K>(iterable: Iterable<U>, keyA: Mapper<T, K>, keyB: Mapper<U, K>): FluentIterable<[T, U]>; /** * Join the iterable with another one, returning a new iterable with the inner matching combinations * @param iterable The right iterable to be combined * @param keyA A property name with value will be used as for comparison with the key of the second iterable * @param keyB A mapper that returns the key map value from the right iterable */ <U, K>(iterable: Iterable<U>, keyA: keyof T, keyB: Mapper<U, K>): FluentIterable<[T, U]>; /** * Join the iterable with another one, returning a new iterable with the inner matching combinations * @param iterable The right iterable to be combined * @param keyA A mapper that returns the key map value from the left iterable * @param keyB A property name with value will be used as for comparison with the key of the first iterable */ <U, K>(iterable: Iterable<U>, keyA: Mapper<T, K>, keyB: keyof U): FluentIterable<[T, U]>; /** * Join the iterable with another one, returning a new iterable with the inner matching combinations * @param iterable The right iterable to be combined * @param keyA A property name with value will be used as for comparison with the key of the second iterable * @param keyB A property name with value will be used as for comparison with the key of the first iterable */ <U>(iterable: Iterable<U>, keyA: keyof T, keyB: keyof U): FluentIterable<[T, U]>; } export interface AsyncCombineFunction<T> { /** * Join the iterable with an async one, returning a new async iterable with a NxN combination * @param iterable The iterable to be combined */ <U>(iterable: AnyIterable<U>): FluentAsyncIterable<[T, U]>; /** * Join the iterable with another one, returning a new async iterable with the inner matching combinations * @param iterable The right iterable to be combined * @param keyA A mapper that returns the key map value from the left iterable * @param keyB A mapper that returns the key map value from the right iterable */ <U, K>(iterable: AnyIterable<U>, keyA: Mapper<T, K>, keyB: Mapper<U, K>): FluentAsyncIterable<[T, U]>; /** * Join the iterable with another one, returning a new async iterable with the inner matching combinations * @param iterable The right iterable to be combined * @param keyA A property name with value will be used as for comparison with the key of the second iterable * @param keyB A mapper that returns the key map value from the right iterable */ <U, K>(iterable: AnyIterable<U>, keyA: keyof T, keyB: Mapper<U, K>): FluentAsyncIterable<[T, U]>; /** * Join the iterable with another one, returning a new async iterable with the inner matching combinations * @param iterable The right iterable to be combined * @param keyA A mapper that returns the key map value from the left iterable * @param keyB A property name with value will be used as for comparison with the key of the first iterable */ <U, K>(iterable: AnyIterable<U>, keyA: Mapper<T, K>, keyB: keyof U): FluentAsyncIterable<[T, U]>; /** * Join the iterable with another one, returning a new async iterable with the inner matching combinations * @param iterable The right iterable to be combined * @param keyA A property name with value will be used as for comparison with the key of the second iterable * @param keyB A property name with value will be used as for comparison with the key of the first iterable */ <U>(iterable: AnyIterable<U>, keyA: keyof T, keyB: keyof U): FluentAsyncIterable<[T, U]>; }