diff --git a/src/common/utils/iter.ts b/src/common/utils/iter.ts index 5b5593d2d4..a1156e16cf 100644 --- a/src/common/utils/iter.ts +++ b/src/common/utils/iter.ts @@ -12,6 +12,7 @@ interface Iterator extends Iterable { collect(fn: (values: Iterable) => U): U; map(fn: (val: T) => U): Iterator; flatMap(fn: (val: T) => U[]): Iterator; + concat(src2: IterableIterator): Iterator; join(sep?: string): string; } @@ -24,6 +25,7 @@ export function chain(src: IterableIterator): Iterator { find: (fn) => find(src, fn), join: (sep) => join(src, sep), collect: (fn) => fn(src), + concat: (src2) => chain(concat(src, src2)), [Symbol.iterator]: () => src, }; } @@ -236,3 +238,13 @@ export function every(src: Iterable, fn: (val: T) => any): boolean { return true; } + +export function* concat(src1: IterableIterator, src2: IterableIterator): IterableIterator { + for (const val of src1) { + yield val; + } + + for (const val of src2) { + yield val; + } +}