From 36c06874fafc14f3bf14f48c0b216c38fbc15e0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20BECHER?= Date: Wed, 8 May 2024 20:40:51 +0200 Subject: [PATCH] add collect to async enumerable --- src/async.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/async.ts b/src/async.ts index 0556aee..9e57f02 100644 --- a/src/async.ts +++ b/src/async.ts @@ -4,6 +4,7 @@ import { createQueue } from "./queue.js"; import { selectionSorter } from "./sorting.js"; import { createAsyncEqualitySet } from "./equality-set.js"; import { createAsyncEqualityMap } from "./equality-map.js"; +import { Collector } from "./collector.js"; //#region types @@ -134,6 +135,8 @@ export interface AsyncEnumerable extends AsyncIterable { toMap(keySelector: MaybeAsyncConverter, valueSelector: MaybeAsyncConverter): Promise>; toSet(): Promise>; toObject(keySelector: MaybeAsyncConverter, valueSelector: MaybeAsyncConverter): Promise>; + + collect(collector: Collector): Promise; } export interface GroupedAsyncEnumerable extends AsyncEnumerable { @@ -898,6 +901,16 @@ export abstract class BaseAsyncEnumerable implements AsyncEnumerable(collector: Collector) { + const acc = collector.initialize(); + + for await (const e of this) { + collector.accumulate(acc, e); + } + + return collector.finalize(acc); + } } class GroupedAsyncEnumerableImpl extends BaseAsyncEnumerable implements GroupedAsyncEnumerable {