caminho
Version:
Tool for creating efficient data pipelines in a JavaScript environment
52 lines • 2.23 kB
JavaScript
import { __awaiter, __generator, __read, __spreadArray } from "tslib";
import { bufferTime, filter, mergeAll, mergeMap } from 'rxjs';
import { getNewValueBag } from '../utils/valueBag';
export function batch(params, loggers) {
var getBag = params.provides
? valueBagGetterBatchProvides(params.provides)
: valueBagGetterBatchNoProvides();
function wrappedStep(valueBag) {
return __awaiter(this, void 0, void 0, function () {
var startTime, values, newValueBags, err_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
loggers.onStepStarted(valueBag);
startTime = new Date();
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4, params.fn(__spreadArray([], __read(valueBag), false))];
case 2:
values = _a.sent();
newValueBags = getBag(valueBag, values);
loggers.onStepFinished(newValueBags, startTime);
return [2, newValueBags];
case 3:
err_1 = _a.sent();
loggers.onStepFinished(valueBag, startTime, err_1);
throw err_1;
case 4: return [2];
}
});
});
}
return function operatorApplier(observable) {
return observable
.pipe(bufferTime(params.batch.timeoutMs, undefined, params.batch.maxSize))
.pipe(filter(function (buffer) { return buffer.length > 0; }))
.pipe(mergeMap(wrappedStep, params.maxConcurrency))
.pipe(mergeAll());
};
}
export function valueBagGetterBatchNoProvides() {
return function getValueBag(valueBag) {
return valueBag;
};
}
export function valueBagGetterBatchProvides(provides) {
return function getValueBagWithProvides(valueBags, values) {
return valueBags.map(function (valueBag, index) { return getNewValueBag(valueBag, provides, values[index]); });
};
}
//# sourceMappingURL=batch.js.map