/** * Object that can be iterated * * @since 2.0.0 */ export interface MinimalIterator { /** * Returns next item. * * @since 2.0.0 */ next(): MinimalIteratorResult; } /** * Object that can be iterated asynchronously * * @since 2.5.0 */ export interface MinimalAsyncIterator { /** * Returns next item. * * @since 2.5.0 */ next(): Promise>; } /** * Object that can be iterated, with unknown synchronicity * * @since 2.5.0 */ export type MinimalAwaitableIterator = MinimalIterator | MinimalAsyncIterator; interface IteratorResultValue { readonly done?: false; readonly value: D; } interface IteratorResultDone { readonly done: true; readonly value?: R; } export type MinimalIteratorResult = IteratorResultValue | IteratorResultDone; export type AnyIterable = Iterable | MinimalIterator; export type AnyAsyncIterable = AsyncIterable | MinimalAsyncIterator; export type AnyAwaitableIterable = Iterable | AsyncIterable | MinimalIterator | MinimalAsyncIterator; /** * Extracts iterator yielded value type from an iterable * * @since 2.0.0 */ export type IteratedValue = ExtractIteratorYield['value']; type ExtractIteratorYield = Extract['next']>, { done?: false; }>; type ExtractIterator = I extends Iterable ? ReturnType : I; /** * Extracts iterator yielded value type from an async iterable * * @since 2.5.0 */ export type AsyncIteratedValue = ExtractAsyncIteratorYield['value']; type ExtractAsyncIteratorYield = Extract['next']>>, { done?: false; }>; type ExtractAsyncIterator = I extends AsyncIterable ? ReturnType : I; export {};