@lou.codes/iterables
Version:
🔁 Iterable and AsyncIterable utils
21 lines (20 loc) • 745 B
JavaScript
import { asyncIterator, iterator } from "@lou.codes/constants/Symbol.js";
import { isIterable } from "@lou.codes/predicates";
/**
* Get a `Symbol.iterator` from an iterable or a `Symbol.asyncIterator` from an
* asynchronous iterable.
*
* @category Asynchronous Common
* @example
* ```typescript
* const iterator = getIterator([1, 2, 3]);
* iterator.next(); // { value: 1, done: false }
* iterator.next(); // { value: 2, done: false }
* iterator.next(); // { value: 3, done: false }
* iterator.next(); // { value: undefined, done: true }
* ```
* @param iterable Iterable to get the iterator from.
* @returns Iterator instance.
*/
export const getIterator = iterable =>
iterable[isIterable(iterable) ? iterator : asyncIterator]();