UNPKG

caminho

Version:

Tool for creating efficient data pipelines in a JavaScript environment

37 lines 1.49 kB
import { map, reduce as reduceRxJs } from 'rxjs'; import { getNewValueBag } from '../utils/valueBag'; import { pick } from '../utils/pick'; export 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(reduceRxJs((acc, valueBag, index) => wrappedReduce(acc, valueBag, index, runId), seed)) .pipe(map((reduceResult) => { pendingDataControl?.increment(runId); return getNewValueBag(pick(lastBag, keep ?? []), provides, reduceResult); })); }; }; } //# sourceMappingURL=reduce.js.map