import { Converter } from "../types.js"; import { SimpleCollector, ToArrayCollector, ToObjectCollector, ToMapCollector, ToSetCollector, JoinCollector, SumCollector, BigIntSumCollector, AverageCollector, BigIntAverageCollector, ToObjectListCollector, ToMapListCollector } from "./impl.js"; import { Collector } from "./types.js"; export function create(initialize: () => TAccumulator, accumulate: (accumulator: TAccumulator, element: TElement) => void, finalize: (accumulator: TAccumulator) => TResult): Collector { return new SimpleCollector(initialize, accumulate, finalize); } const toArrayCollector = new ToArrayCollector(); export function toArray(): Collector { return toArrayCollector; } export function toObject(keySelector: Converter, valueSelector: Converter): Collector> { return new ToObjectCollector(keySelector, valueSelector); } export function toObjectList(keySelector: Converter, valueSelector: Converter): Collector> { return new ToObjectListCollector(keySelector, valueSelector); } export function toMap(keySelector: Converter, valueSelector: Converter): Collector> { return new ToMapCollector(keySelector, valueSelector); } export function toMapList(keySelector: Converter, valueSelector: Converter): Collector> { return new ToMapListCollector(keySelector, valueSelector); } const toSetCollector = new ToSetCollector(); export function toSet(): Collector> { return toSetCollector; } export function join(delimiter?: string, prefix?: string, suffix?: string): Collector { return new JoinCollector(delimiter, prefix, suffix); } const sumCollector = new SumCollector(); export function sum(): Collector { return sumCollector; } const bigintSumCollector = new BigIntSumCollector(); export function bigintSum(): Collector { return bigintSumCollector; } const averageCollector = new AverageCollector(); export function average(): Collector { return averageCollector; } const bigintAverageCollector = new BigIntAverageCollector(); export function bigintAverage(): Collector { return bigintAverageCollector; }