UNPKG

rx-synchronizer

Version:

Commonly-used synchronizer bases that can be composed into more specific purposes.

68 lines 4.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var javascriptutilities_1 = require("javascriptutilities"); var rx_utilities_js_1 = require("rx-utilities-js"); var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var ProgressSync = require("./progress"); var sync_util_1 = require("./sync-util"); var deepEqual = require("deep-equal"); var Impl = /** @class */ (function () { function Impl(progressSync) { this.progressSync = progressSync || new ProgressSync.Impl(); this.subscription = new rxjs_1.Subscription(); } Impl.prototype.synchronize = function (dependency) { var subscription = this.subscription; var validateStartedStream = dependency.paramStream.pipe((function () { if (dependency.allowDuplicateParams) { return function (v) { return v; }; } return function (v) { return v.pipe(operators_1.distinctUntilChanged(function (v1, v2) { return deepEqual(v1.value, v2.value); })); }; })(), operators_1.map(function (v) { return v.map(function (v1) { var validated = dependency.validateParam(v1); if (validated instanceof rxjs_1.Observable) { return validated.pipe(operators_1.map(function (errors) { return [v1, errors]; })); } return rxjs_1.of([v1, validated]); }); }), operators_1.observeOn(dependency.resultReceiptScheduler || rxjs_1.asapScheduler), operators_1.share()); var validateCompletedStream = validateStartedStream.pipe(operators_1.switchMap(function (v) { try { return v.getOrThrow().pipe(operators_1.map(function (v1) { return javascriptutilities_1.Try.success(v1); }), rx_utilities_js_1.catchJustReturn(function (e) { return javascriptutilities_1.Try.failure(e); })); } catch (e) { return rxjs_1.of(javascriptutilities_1.Try.failure(e)); } }), operators_1.share()); var argumentFailStream = validateCompletedStream.pipe(rx_utilities_js_1.mapNonNilOrEmpty(function (v) { return v.error; }), operators_1.share()); var validateFailStream = validateCompletedStream.pipe(rx_utilities_js_1.mapNonNilOrEmpty(function (_a) { var value = _a.value; return value; }), operators_1.filter(function (v) { return v[1].length > 0; }), operators_1.map(function (v) { return v[1]; }), operators_1.share()); var modifyStream = validateCompletedStream.pipe(rx_utilities_js_1.mapNonNilOrEmpty(function (v) { return v.value; }), operators_1.filter(function (v) { return v[1].length === 0; }), operators_1.map(function (v) { return v[0]; }), operators_1.map(function (v) { return sync_util_1.createObservable(dependency.modifyWithParam(v)).pipe(operators_1.map(function (v2) { return javascriptutilities_1.Try.success(v2); }), rx_utilities_js_1.catchJustReturn(function (e) { return javascriptutilities_1.Try.failure(e); })); }), operators_1.share()); var modifyCompletedStream = modifyStream.pipe(operators_1.switchMap(function (v) { return v; }), operators_1.share()); this.progressSync.synchronize({ progressReceiver: dependency.progressReceiver, progressStartStream: validateStartedStream.pipe(operators_1.map(function () { return true; })), progressEndStream: rxjs_1.merge(argumentFailStream, validateFailStream, modifyCompletedStream).pipe(operators_1.map(function () { return false; })), stopStream: dependency.stopStream }); subscription.add(modifyCompletedStream .pipe(rx_utilities_js_1.mapNonNilOrEmpty(function (v) { return v.value; }), operators_1.takeUntil(dependency.stopStream)) .subscribe(dependency.resultReceiver)); subscription.add(rxjs_1.merge(argumentFailStream, validateFailStream.pipe(rx_utilities_js_1.flatMapIterable(function (v) { return v; })), modifyCompletedStream.pipe(rx_utilities_js_1.mapNonNilOrEmpty(function (v) { return v.error; }))) .pipe(operators_1.takeUntil(dependency.stopStream)) .subscribe(dependency.errorReceiver)); }; return Impl; }()); exports.Impl = Impl; //# sourceMappingURL=modify.js.map