UNPKG

@lou.codes/iterables

Version:
40 lines (39 loc) 1.17 kB
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;