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 {