/** * An asynchronous stream that produces elements of type `T` on demand. * * This is an extension of the built-in `AsyncIterable` protocol. * * The operations defined here in IteratorStream are a superset of the * operations described in the * [Iterator Helpers](https://github.com/tc39/proposal-iterator-helpers) * proposal. * * The behavior of all operations here that correspond to operations in the * `Iterator Helpers` proposal are defined (as best as possible) to match * exactly with the behavior of the corresponding `Iterator Helpers` * operations. This is intended to allow users of this library to seamlessly * switch between this library and the `Iterator Helpers` once those are * implemented and available. * * However, this library is NOT a polyfill for `Iterator Helpers`. To use * this library, an iterable iterator or generator needs to be explicitly * wrapped in an IteratorStream like in this example: * * ``` * import "streams/sync"; * * function* generator() { * yield* [1, 2, 3]; * } * * generator() // returns an AsyncGenerator * .stream() // convert to IteratorStream first! * .forEach(console.log); // use the IteratorStream APIs * ``` */ export declare class IteratorStream implements Iterator { private readonly iterator; /** * Creates an IteratorStream from a Iterator or Iterable. * * ``` * IteratorStream.from([1, 2, 3]).map(x => x * 2).forEach(console.log); * ``` */ static from(it: Iterable | Iterator): IteratorStream; readonly next: () => IteratorResult; readonly return?: () => IteratorResult; readonly throw?: (e?: unknown) => IteratorResult; constructor(iterator: Iterator); stream(): this; [Symbol.iterator](): this; [Symbol.dispose](): void; /** * Returns a new stream that skips elements of this stream not matched by the * `predicate`. * * See also [IteratorHelpers#filter](https://github.com/tc39/proposal-iterator-helpers#filterfiltererfn). * * @param predicate a function that decides whether to include each element * in the new stream (true) or to exclude the element (false) */ filter(predicate: (_: T) => boolean): IteratorStream; /** * Returns a new stream that transforms each element of this stream * using the provided function. * * See also [IteratorHelpers#map](https://github.com/tc39/proposal-iterator-helpers#mapmapperfn). * * @param transform a function to apply to each element of this stream */ map(transform: (_: T) => U): IteratorStream; /** * * See also [IteratorHelpers#flatMap](https://github.com/tc39/proposal-iterator-helpers#flatmapmapperfn). * * @param transform */ flatMap(transform: (_: T) => Iterable | Iterator): IteratorStream; batch(batchSize: number): IteratorStream; /** * Returns a new stream that produces up to the first `limit` number of * elements of this stream. * * See also [IteratorHelpers#take](https://github.com/tc39/proposal-iterator-helpers#takelimit). * * @param limit the maximum number of items to produce */ take(limit: number): IteratorStream; /** * * See also [IteratorHelpers#drop](https://github.com/tc39/proposal-iterator-helpers#droplimit). * * @param n */ drop(n: number): IteratorStream; dropWhile(predicate: (_: T) => boolean): IteratorStream; takeWhile(predicate: (_: T) => boolean): IteratorStream; peek(observer: (_: T) => void): IteratorStream; /** * * See also [IteratorHelpers#forEach](https://github.com/tc39/proposal-iterator-helpers#foreachfn). * * @param block */ forEach(block: (_: T) => unknown): void; collect(container: A, accumulator: (a: A, t: T) => void, finisher: (_: A) => R): R; collect(container: A, accumulator: (a: A, t: T) => void): A; /** * * See also [IteratorHelpers#every](https://github.com/tc39/proposal-iterator-helpers#everyfn). * * @param predicate */ every(predicate: (_: T) => boolean): boolean; /** * See also [IteratorHelpers#some](https://github.com/tc39/proposal-iterator-helpers#somefn). * * @param predicate */ some(predicate: (_: T) => boolean): boolean; none(predicate: (_: T) => boolean): boolean; count(): number; /** * Returns the first element that matches the predicate. * * This is the same as the {@link first()} method except that the predicate is * required and a `TypeError` will be thrown if a predicate is not supplied. * * See also [IteratorHelpers#find](https://github.com/tc39/proposal-iterator-helpers#findfn). * * @param predicate */ find(predicate: (_: T) => boolean): T | undefined; first(predicate?: (_: T) => boolean): T | undefined; last(predicate?: (_: T) => boolean): T | undefined; max(comparator: (a: T, b: T) => number): T | undefined; min(comparator: (a: T, b: T) => number): T | undefined; /** * * See also [IteratorHelpers#reduce](https://github.com/tc39/proposal-iterator-helpers#reducereducer--initialvalue-). * * @param reducer * @param initial */ reduce(reducer: (a: R, b: T) => R, initial?: R): R; /** * Like {@link reduce()} but returns `undefined` if this stream is empty * instead of throwing `TypeError`. * * @param reducer * @param initial */ fold(reducer: (a: R, b: T) => R, initial: R): R | undefined; fold(reducer: (a: T, b: T) => T): T | undefined; /** * See also [IteratorHelpers#toArray](https://github.com/tc39/proposal-iterator-helpers#toarray). */ toArray(): T[]; }