UNPKG

caminho

Version:

Tool for creating efficient data pipelines in a JavaScript environment

37 lines 1.72 kB
import { map, reduce as reduceRxJs } from 'rxjs'; import { getNewValueBag } from '../utils/valueBag'; import { pick } from '../utils/pick'; export function reduce(reduceParams, loggers, pendingDataControl) { var provides = reduceParams.provides, keep = reduceParams.keep, seed = reduceParams.seed; var immutableSeed = Object.freeze(seed); var lastBag = {}; function wrappedReduce(acc, valueBag, index, runId) { var startedAt = new Date(); loggers.onStepStarted([valueBag]); var renewedAcc = index === 0 ? structuredClone(immutableSeed) : acc; try { var reduceResult = reduceParams.fn(renewedAcc, valueBag, index); loggers.onStepFinished([valueBag], startedAt); lastBag = valueBag; return reduceResult; } catch (err) { loggers.onStepFinished([valueBag], startedAt, err); throw err; } finally { pendingDataControl === null || pendingDataControl === void 0 ? void 0 : pendingDataControl.decrement(runId); } } return function operatorApplierWithRunId(runId) { return function operatorApplier(observable) { return observable .pipe(reduceRxJs(function (acc, valueBag, index) { return wrappedReduce(acc, valueBag, index, runId); }, seed)) .pipe(map(function (reduceResult) { pendingDataControl === null || pendingDataControl === void 0 ? void 0 : pendingDataControl.increment(runId); return getNewValueBag(pick(lastBag, keep !== null && keep !== void 0 ? keep : []), provides, reduceResult); })); }; }; } //# sourceMappingURL=reduce.js.map