export declare namespace Iterable { function is(thing: any): thing is Iterable; function empty(): Iterable; function single(element: T): Iterable; function wrap(iterableOrElement: Iterable | T): Iterable; function from(iterable: Iterable | undefined | null): Iterable; function reverse(array: Array): Iterable; function isEmpty(iterable: Iterable | undefined | null): boolean; function first(iterable: Iterable): T | undefined; function some(iterable: Iterable, predicate: (t: T, i: number) => unknown): boolean; function find(iterable: Iterable, predicate: (t: T) => t is R): R | undefined; function find(iterable: Iterable, predicate: (t: T) => boolean): T | undefined; function filter(iterable: Iterable, predicate: (t: T) => t is R): Iterable; function filter(iterable: Iterable, predicate: (t: T) => boolean): Iterable; function map(iterable: Iterable, fn: (t: T, index: number) => R): Iterable; function flatMap(iterable: Iterable, fn: (t: T, index: number) => Iterable): Iterable; function concat(...iterables: Iterable[]): Iterable; function reduce(iterable: Iterable, reducer: (previousValue: R, currentValue: T) => R, initialValue: R): R; /** * Returns an iterable slice of the array, with the same semantics as `array.slice()`. */ function slice(arr: ReadonlyArray, from: number, to?: number): Iterable; /** * Consumes `atMost` elements from iterable and returns the consumed elements, * and an iterable for the rest of the elements. */ function consume(iterable: Iterable, atMost?: number): [T[], Iterable]; function asyncToArray(iterable: AsyncIterable): Promise; } export interface IIterator { next(): T; } export declare class ArrayIterator implements IIterator { private items; protected start: number; protected end: number; protected index: number; constructor(items: T[], start?: number, end?: number); first(): T; next(): T; protected current(): T; } export declare class ArrayNavigator extends ArrayIterator implements INavigator { constructor(items: T[], start?: number, end?: number); current(): T; previous(): T; first(): T; last(): T; parent(): T; } export declare class MappedIterator implements IIterator { protected iterator: IIterator; protected fn: (item: T) => R; constructor(iterator: IIterator, fn: (item: T) => R); next(): R; } export interface INavigator extends IIterator { current(): T; previous(): T; parent(): T; first(): T; last(): T; next(): T; } export declare class MappedNavigator extends MappedIterator implements INavigator { protected navigator: INavigator; constructor(navigator: INavigator, fn: (item: T) => R); current(): R; previous(): R; parent(): R; first(): R; last(): R; next(): R; }