@lou.codes/iterables
Version:
🔁 Iterable and AsyncIterable utils
35 lines (34 loc) • 1.09 kB
JavaScript
import { isIterable } from "@lou.codes/predicates";
import { setIterator } from "../setIterator.js";
import { setAsyncIterator } from "./setAsyncIterator.js";
/**
* 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 const createIterableIterator = generatorFunction => {
const generator = generatorFunction();
return (isIterable(generator) ? setIterator : setAsyncIterator)(
generatorFunction,
)(generator);
};