@lou.codes/iterables
Version:
🔁 Iterable and AsyncIterable utils
40 lines (39 loc) • 1.17 kB
TypeScript
import type { IsomorphicIterator } from "@lou.codes/types";
/**
* Takes a generator function and returns an iterable iterator or asynchronous
* iterable iterator object.
*
* @category Asynchronous Common
* @example
* ```typescript
* const identityGenerator = function* (value) { yield value; };
* const iterableIterator = createIterableIterator(identityGenerator);
*
* const fooIdentity = iterableIterator("foo");
*
* for (const value of fooIdentity) {
* console.log(value); // "foo"
* }
*
* // Same IterableIterator as above, return values again:
*
* for (const value of fooIdentity) {
* console.log(value); // "foo"
* }
* ```
* @param generatorFunction Generator to be used every time `[Symbol.iterator]` is called.
* @returns Iterable iterator object.
*/
export declare const createIterableIterator: <
GeneratorFunction extends () => IsomorphicIterator,
>(
generatorFunction: GeneratorFunction,
) => GeneratorFunction extends () => IsomorphicIterator<infer Item> ?
Readonly<
GeneratorFunction extends (
(..._arguments: infer _Arguments) => AsyncIterator<Item>
) ?
AsyncIterableIterator<Item>
: IterableIterator<Item>
>
: never;