UNPKG

ts-action-operators

Version:

TypeScript action operators for NgRx and redux-observable

56 lines (55 loc) 2.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.act = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); function act(projectOrConfig, optionalError) { var config = typeof projectOrConfig === "function" ? { error: optionalError, project: projectOrConfig, } : projectOrConfig; var complete = config.complete, error = config.error, _a = config.operator, operator = _a === void 0 ? operators_1.concatMap : _a, project = config.project, unsubscribe = config.unsubscribe; return function (source) { return rxjs_1.defer(function () { var subject = new rxjs_1.Subject(); return rxjs_1.merge(source.pipe(operator(function (action, index) { return rxjs_1.defer(function () { var completed = false; var errored = false; var projectedCount = 0; return project(action, index).pipe(operators_1.materialize(), operators_1.map(function (notification) { switch (notification.kind) { case "E": errored = true; return { kind: "N", value: error(notification.error, action), }; case "C": completed = true; return complete ? { kind: "N", value: complete(projectedCount, action), } : undefined; default: ++projectedCount; return notification; } }), operators_1.filter(isDefined), operators_1.dematerialize(), operators_1.finalize(function () { if (!completed && !errored && unsubscribe) { subject.next(unsubscribe(projectedCount, action)); } })); }); })), subject); }); }; } exports.act = act; function isDefined(value) { return value !== undefined; }