import { Voidable } from "./maybe"; import { Option } from "./option"; export declare function flu(iter: AsyncIterable): Flu; export declare class Flu implements AsyncIterable { readonly iter: () => AsyncIterable; constructor(iter: () => AsyncIterable); [Symbol.asyncIterator](): AsyncIterator; static empty(): Flu; static by(iter: () => AsyncIterable): Flu; static of(...iter: T[]): Flu; static from(iter: Iterable): Flu; static fromIter(iter: Iterable>): Flu; static fromCallback(): CbFlu<[T]>; static fromCallback(map?: (this: This, ...args: A) => T): CbFlu; /** Create a Flu from a range starting from 0 */ static to(to: number, step?: number): Flu; /** Create a Flu from a range */ static range(from: number, to: number, step?: number): Flu; collect(): Promise; join(separator?: string): Promise; count(): Promise; isEmpty(): Promise; first(): Promise>; firstO(): Promise>; last(): Promise>; lastO(): Promise>; nth(n: number): Promise>; nthO(n: number): Promise>; stepBy(step: number): Flu; chain(other: AsyncIterable | Iterable, ...more: (AsyncIterable | Iterable)[]): Flu; zip(other: AsyncIterable): Flu<[T, U]>; unzip(): Promise<[ (T extends [infer A, any] | readonly [infer A, any] ? A : T extends (infer R)[] ? R : unknown)[], (T extends [any, infer B] | readonly [any, infer B] ? B : T extends (infer R)[] ? R : unknown)[] ]>; map(f: (v: T) => R): Flu; mapWait(f: (v: T) => R | PromiseLike): Flu; fill(v: R): Flu; forEach(f: (v: T) => unknown | PromiseLike): Promise; run(): Promise; filter(f: (v: T) => v is S): Flu; filter(f: (v: T) => unknown | PromiseLike): Flu; enumerate(): Flu<[T, number]>; indexed(): Flu<[number, T]>; skip(n: number): Flu; take(n: number): Flu; slice(from: number, to: number): Flu; sub(from: number, count: number): Flu; scan(init: R, f: (acc: R, val: T) => R): Flu; scanWait(init: R | PromiseLike, f: (acc: R, val: T) => R | PromiseLike): Flu; flatMap(f: (v: T) => AsyncIterable | Iterable): Flu; flatten(): T extends AsyncIterable ? Flu : T extends Iterable ? Flu : never; wait(): T extends infer R | PromiseLike ? Flu : never; also(f: (v: T) => unknown | PromiseLike): Flu; fold(init: R, f: (acc: R, val: T) => R): Promise; foldWait(init: R | PromiseLike, f: (acc: R, val: T) => R | PromiseLike): Promise; reduce(f: (acc: T, val: T) => T): Promise; reduceWait(f: (acc: T, val: T) => T | PromiseLike): Promise; all(f: (v: T) => unknown | PromiseLike): Promise; any(f: (v: T) => unknown | PromiseLike): Promise; find(f: (v: T) => unknown | PromiseLike): Promise>; position(f: (v: T) => unknown | PromiseLike): Promise; indexOf(v: T): Promise; indexOfWait(v: T | PromiseLike): Promise; max(): Promise>; min(): Promise>; merge(other: AsyncIterable): Flu; delay(ms?: Voidable): Flu; delay(f: (v: T) => unknown): Flu; delay(ms: Voidable, f: (v: T) => unknown): Flu; retry(count: number): Flu; retry(f: (err: E, count: number) => unknown): Flu; retry(cond: number | ((err: E, count: number) => unknown)): Flu; timestamp(): Flu<[value: T, timestamp: number]>; throttle(ms: number): Flu; debounce(ms: number): Flu; audit(ms: number): Flu; buffer(n: number, mode?: 'count' | 'time'): Flu; break(): Flu; breakBy(f: (v: T) => unknown): Flu; takeIf(f: (v: T) => unknown): Flu; startBy(f: (v: T) => unknown): Flu; skipIf(f: (v: T) => unknown): Flu; drop(): Flu; forEnd(): Flu; breakAt(f: (v: T) => unknown): Flu; breakAt(single: PromiseLike): Flu; breakAt(single: AsyncIterable): Flu; breakAt(single: AsyncIterable | PromiseLike | ((v: T) => unknown)): Flu; takeUntil(single: PromiseLike): Flu; takeUntil(single: AsyncIterable): Flu; takeUntil(single: AsyncIterable | PromiseLike): Flu; startAt(f: (v: T) => unknown): Flu; startAt(single: PromiseLike): Flu; startAt(single: AsyncIterable): Flu; startAt(single: AsyncIterable | PromiseLike | ((v: T) => unknown)): Flu; skipUntil(single: PromiseLike): Flu; skipUntil(single: AsyncIterable): Flu; skipUntil(single: AsyncIterable | PromiseLike): Flu; push(...items: T[]): Flu; unshift(...items: T[]): Flu; as(): Flu; groupBy(keyf: (v: T) => K): Flu<[K, T[]]>; groupBy(keyf: (v: T) => K, valf: (v: T) => V): Flu<[K, V[]]>; toArray(): Promise; toSet(): Promise>; toMap(): Promise : never>; } export interface CbFlu extends Flu { cb(this: This, ...arg: A): void; end(): void; readonly isEnd: boolean; } export declare class CbFlu extends Flu { constructor(map?: (this: This, ...args: A) => T); } export declare function fromIter(iter: Iterable>): AsyncIterable; export declare function of(...iter: T[]): AsyncIterable; export declare function from(iter: Iterable): AsyncIterable; export declare function collect(iter: AsyncIterable): Promise; export declare function join(iter: AsyncIterable, separator?: string): Promise; export declare function count(iter: AsyncIterable): Promise; export declare function isEmpty(iter: AsyncIterable): Promise; export declare function first(iter: AsyncIterable): Promise>; export declare function firstO(iter: AsyncIterable): Promise>; export declare function last(iter: AsyncIterable): Promise>; export declare function lastO(iter: AsyncIterable): Promise>; export declare function nth(iter: AsyncIterable, n: number): Promise>; export declare function nthO(iter: AsyncIterable, n: number): Promise>; export declare function stepBy(iter: AsyncIterable, step: number): AsyncIterable; export declare function chain(a: AsyncIterable | Iterable, b: AsyncIterable | Iterable, ...more: (AsyncIterable | Iterable)[]): AsyncIterable; export declare function zip(a: AsyncIterable, b: AsyncIterable): AsyncIterable<[A, B]>; export declare function unzip(iter: AsyncIterable<[A, B]>): Promise<[A[], B[]]>; export declare function map(iter: AsyncIterable, f: (v: T) => R): AsyncIterable; export declare function mapWait(iter: AsyncIterable, f: (v: T) => R | PromiseLike): AsyncIterable; export declare function fill(iter: AsyncIterable, v: R): AsyncIterable; export declare function forEach(iter: AsyncIterable, f: (v: T) => unknown | PromiseLike): Promise; export declare function run(iter: AsyncIterable): Promise; export declare function filter(iter: AsyncIterable, f: (v: T) => v is S): AsyncIterable; export declare function filter(iter: AsyncIterable, f: (v: T) => unknown): AsyncIterable; export declare function enumerate(iter: AsyncIterable): AsyncIterable<[T, number]>; export declare function indexed(iter: AsyncIterable): AsyncIterable<[number, T]>; export declare function skip(iter: AsyncIterable, n: number): AsyncIterable; export declare function take(iter: AsyncIterable, n: number): AsyncIterable; export declare function slice(iter: AsyncIterable, from: number, to: number): AsyncIterable; export declare function sub(iter: AsyncIterable, from: number, count: number): AsyncIterable; export declare function scan(iter: AsyncIterable, init: R, f: (acc: R, val: T) => R): AsyncIterable; export declare function scanWait(iter: AsyncIterable, init: R | PromiseLike, f: (acc: R, val: T) => R | PromiseLike): AsyncIterable; export declare function flatMap(iter: AsyncIterable, f: (v: T) => AsyncIterable | Iterable): AsyncIterable; export declare function flatten(iter: AsyncIterable | Iterable>): AsyncIterable; export declare function wait(iter: AsyncIterable>): AsyncIterable; export declare function also(iter: AsyncIterable, f: (v: T) => unknown | PromiseLike): AsyncIterable; export declare function fold(a: AsyncIterable, init: R, f: (acc: R, val: T) => R): Promise; export declare function foldWait(a: AsyncIterable, init: R | PromiseLike, f: (acc: R, val: T) => R | PromiseLike): Promise; export declare function reduce(a: AsyncIterable, f: (acc: T, val: T) => T): Promise; export declare function reduceWait(a: AsyncIterable, f: (acc: T, val: T) => T | PromiseLike): Promise; export declare function all(a: AsyncIterable, f: (v: T) => unknown | PromiseLike): Promise; export declare function any(a: AsyncIterable, f: (v: T) => unknown | PromiseLike): Promise; export declare function find(a: AsyncIterable, f: (v: T) => unknown | PromiseLike): Promise>; export declare function position(a: AsyncIterable, f: (v: T) => unknown | PromiseLike): Promise; export declare function indexOf(a: AsyncIterable, v: T): Promise; export declare function indexOfWait(a: AsyncIterable, v: T | PromiseLike): Promise; export declare function max(a: AsyncIterable): Promise>; export declare function min(a: AsyncIterable): Promise>; export declare function merge(a: AsyncIterable, b: AsyncIterable): AsyncIterable; export declare function delay(iter: AsyncIterable, ms?: Voidable, f?: (v: T) => unknown): AsyncIterable; export declare function retry(iterFn: () => AsyncIterable, count?: number | ((err: E, count: number) => unknown)): AsyncIterable; export declare function timestamp(iter: AsyncIterable): AsyncIterable<[value: T, timestamp: number]>; export declare function throttle(iter: AsyncIterable, ms?: number): AsyncIterable; export declare function debounce(iter: AsyncIterable, ms?: number): AsyncIterable; export declare function audit(iter: AsyncIterable, ms?: number): AsyncIterable; export declare function buffer(iter: AsyncIterable, n: number, mode?: 'count' | 'time'): AsyncIterable; export declare function breakBy(iter: AsyncIterable, f?: (v: T) => unknown): AsyncIterable; export declare function takeIf(iter: AsyncIterable, f?: (v: T) => unknown): AsyncIterable; export declare function skipIf(iter: AsyncIterable, f: (v: T) => unknown): AsyncIterable; export declare function startBy(iter: AsyncIterable, f: (v: T) => unknown): AsyncIterable; export declare function drop(iter: AsyncIterable): AsyncIterable; export declare function forEnd(iter: AsyncIterable): AsyncIterable; export declare function breakAt(iter: AsyncIterable, single: AsyncIterable | PromiseLike): AsyncIterable; export declare function startAt(iter: AsyncIterable, single: AsyncIterable | PromiseLike): AsyncIterable; export declare function push(a: AsyncIterable, ...items: T[]): AsyncIterable; export declare function unshift(a: AsyncIterable, ...items: T[]): AsyncIterable; export declare function as(a: AsyncIterable): AsyncIterable; export declare function groupBy(a: AsyncIterable, keyf: (v: T) => K): AsyncIterable<[K, T[]]>; export declare function groupBy(a: AsyncIterable, keyf: (v: T) => K, valf: (v: T) => V): AsyncIterable<[K, V[]]>; export declare function toArray(a: AsyncIterable): Promise; export declare function toSet(a: AsyncIterable): Promise>; export declare function toMap(a: AsyncIterable<[K, V]>): Promise>;