@lou.codes/iterables
Version:
🔁 Iterable and AsyncIterable utils
31 lines (30 loc) • 910 B
JavaScript
import { createIterableIterator } from "./createIterableIterator.js";
/**
* Repeat given item the specified amount of times (can be `BigInt` or
* `Infinity` times) as an iterable.
*
* @category Generators
* @example
* ```typescript
* const repeat3Times = repeat(3);
* repeat3Times("foo"); // ["foo", "foo", "foo"]
* ```
* @param item Item to repeat.
* @returns Curried function with `item` in context.
*/
export const repeat = times => item =>
createIterableIterator(function* () {
// eslint-disable-next-line functional/no-conditional-statements
if (times === Infinity) {
// eslint-disable-next-line functional/no-loop-statements
for (;;) {
yield item;
}
// eslint-disable-next-line functional/no-conditional-statements
} else {
// eslint-disable-next-line functional/no-loop-statements
for (let count = 0n; count < times; count += 1n) {
yield item;
}
}
});