// import { Converter } from "../../types.js"; // import { CollectorFactory, CollectorInstance } from "./types.js"; // export class ToArrayCollectorFactory implements CollectorFactory { // initialize() { // return new ToArrayCollectorInstance(); // } // }; // class ToArrayCollectorInstance implements CollectorInstance { // readonly #accumulator: TElement[]; // constructor() { // this.#accumulator = []; // } // accumulate(element: TElement) { // this.#accumulator.push(element); // } // finalize() { // return this.#accumulator; // } // } // export class ToObjectCollectorFactory implements CollectorFactory> { // readonly #keySelector: Converter; // readonly #valueSelector: Converter; // constructor(keySelector: Converter, valueSelector: Converter) { // this.#keySelector = keySelector; // this.#valueSelector = valueSelector; // } // get keySelector() { // return this.#keySelector; // } // get valueSelector() { // return this.#valueSelector; // } // initialize() { // return new ToObjectCollectorInstance(this); // } // } // class ToObjectCollectorInstance implements CollectorInstance> { // readonly #factory: ToObjectCollectorFactory; // readonly #accumulator = >{}; // constructor(factory: ToObjectCollectorFactory) { // this.#factory = factory; // } // accumulate(element: TElement) { // const key = this.#factory.keySelector(element); // const value = this.#factory.valueSelector(element); // this.#accumulator[key] = value; // } // finalize() { // return this.#accumulator; // } // } // export class ToMapCollectorFactory implements CollectorFactory> { // readonly #keySelector: Converter; // readonly #valueSelector: Converter; // constructor(keySelector: Converter, valueSelector: Converter) { // this.#keySelector = keySelector; // this.#valueSelector = valueSelector; // } // get keySelector() { // return this.#keySelector; // } // get valueSelector() { // return this.#valueSelector; // } // initialize() { // return new ToMapCollectorInstance(this); // } // } // class ToMapCollectorInstance implements CollectorInstance> { // readonly #factory: ToMapCollectorFactory; // readonly #accumulator = new Map(); // constructor(factory: ToMapCollectorFactory) { // this.#factory = factory; // } // accumulate(element: TElement) { // const key = this.#factory.keySelector(element); // const value = this.#factory.valueSelector(element); // this.#accumulator.set(key, value); // } // finalize() { // return this.#accumulator; // } // } // export class ToSetCollectorFactory implements CollectorFactory> { // initialize() { // return new ToSetCollectorInstance(); // } // } // class ToSetCollectorInstance implements CollectorInstance> { // readonly #accumulator = new Set(); // accumulate(element: TElement) { // this.#accumulator.add(element); // } // finalize() { // return this.#accumulator; // } // } // export class JoinCollectorFactory implements CollectorFactory { // readonly #delimiter: string; // readonly #prefix: string; // readonly #suffix: string; // constructor(delimiter?: string, prefix?: string, suffix?: string) { // this.#delimiter = delimiter ?? ""; // this.#prefix = prefix ?? ""; // this.#suffix = suffix ?? ""; // } // accumulate(element: string) { // this.#accumulator.push(element); // } // finalize() { // return this.#prefix + this.#accumulator.join(this.#delimiter) + this.#suffix; // } // } // class JoinCollectorInstance implements CollectorInstance { // readonly #delimiter: string; // readonly #prefix: string; // readonly #suffix: string; // readonly #accumulator: any[] = []; // constructor(delimiter: string, prefix: string, suffix: string) { // this.#delimiter = delimiter ?? ""; // this.#prefix = prefix ?? ""; // this.#suffix = suffix ?? ""; // } // accumulate(element: string) { // this.#accumulator.push(element); // } // finalize() { // return this.#prefix + this.#accumulator.join(this.#delimiter) + this.#suffix; // } // } // export class SumCollectorInstance implements CollectorInstance { // #accumulator = 0; // accumulate(element: number) { // this.#accumulator += element; // } // finalize() { // return this.#accumulator; // } // } // export class BigIntSumCollectorInstance implements CollectorInstance { // #accumulator = 0n; // accumulate(element: bigint) { // this.#accumulator += element; // } // finalize() { // return this.#accumulator; // } // } // export class AverageCollectorInstance implements CollectorInstance { // #count = 0; // #sum = 0; // accumulate(element: number) { // this.#count++; // this.#sum += element; // } // finalize() { // return this.#count === 0 ? 0 : this.#sum / this.#count; // } // } // export class BigIntAverageCollectorInstance implements CollectorInstance { // #count = 0n; // #sum = 0n; // accumulate(element: bigint) { // this.#count++; // this.#sum += element; // } // finalize() { // return this.#count === 0n ? 0n : this.#sum / this.#count; // } // }