/** * Flatten nested Iterable objects at any depth. * @template T * @param {Iterable.>} iterable * @param {number} depth */ export function flatten( iterable: Iterable>, depth: number = 1 ): Iterable { return function* _flatten( source: Iterable, depth: number ): Iterable> { for (const i of source) { if (depth > 0) { yield* _flatten(i as Iterable, depth - 1); } else { yield i as T; } } }(iterable, depth) as Iterable; } export default flatten;