UNPKG

caminho

Version:

Tool for creating efficient data pipelines in a JavaScript environment

40 lines 1.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.reduce = reduce; const rxjs_1 = require("rxjs"); const valueBag_1 = require("../utils/valueBag"); const pick_1 = require("../utils/pick"); function reduce(reduceParams, loggers, pendingDataControl) { const { provides, keep, seed } = reduceParams; const immutableSeed = Object.freeze(seed); let lastBag = {}; function wrappedReduce(acc, valueBag, index, runId) { const startedAt = new Date(); loggers.onStepStarted([valueBag]); const renewedAcc = index === 0 ? structuredClone(immutableSeed) : acc; try { const 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?.decrement(runId); } } return function operatorApplierWithRunId(runId) { return function operatorApplier(observable) { return observable .pipe((0, rxjs_1.reduce)((acc, valueBag, index) => wrappedReduce(acc, valueBag, index, runId), seed)) .pipe((0, rxjs_1.map)((reduceResult) => { pendingDataControl?.increment(runId); return (0, valueBag_1.getNewValueBag)((0, pick_1.pick)(lastBag, keep ?? []), provides, reduceResult); })); }; }; } //# sourceMappingURL=reduce.js.map