UNPKG

data-collectors

Version:

A collection of composable reduction operations for arbitrary streams of values

54 lines 1.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class Collector { static of(supplier, accumulator, combinator, finisher) { return new FunctionalCollector(supplier, accumulator, combinator, finisher || (x => x)); } } exports.Collector = Collector; class BaseCollector { then(transformer) { return Collector.of(this.supply.bind(this), this.accumulate.bind(this), this.combine.bind(this), (result) => transformer(this.finish(result))); } apply(iterable) { const container = this.supply(); for (let item of iterable) { this.accumulate(container, item); } return this.finish(container); } } exports.BaseCollector = BaseCollector; class FunctionalCollector extends BaseCollector { constructor(supplier, accumulator, combinator, finisher) { super(); this.supplier = supplier; this.accumulator = accumulator; this.combinator = combinator; this.finisher = finisher; } supply() { return this.supplier(); } accumulate(container, item) { return this.accumulator(container, item); } combine(container1, container2) { return this.combinator(container1, container2); } finish(container) { return this.finisher(container); } } exports.FunctionalCollector = FunctionalCollector; /** * Applies a given collector to the given iterator's items * * @param iterable * @param collector */ function collect(iterable, collector) { return collector.apply(iterable); } exports.collect = collect; //# sourceMappingURL=collector.js.map