UNPKG

rxjs-pausable

Version:

A RxJS pipable operator to pause and resume streams

62 lines (54 loc) 2.59 kB
import { Observable, NEVER, BehaviorSubject } from 'rxjs'; import { switchMap, materialize, dematerialize } from 'rxjs/operators'; /*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ /* global Reflect, Promise */ var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; function __extends(d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); } var PausableObservable = /** @class */ (function (_super) { __extends(PausableObservable, _super); function PausableObservable() { return _super !== null && _super.apply(this, arguments) || this; } PausableObservable.prototype.pause = function () { this.pauser.next(true); }; PausableObservable.prototype.resume = function () { this.pauser.next(false); }; return PausableObservable; }(Observable)); function pausable() { return function pauseFn(source) { var pausableProto = PausableObservable.prototype; var pauser = new BehaviorSubject(false); var newSource = pauser.pipe(switchMap(function (paused) { return (paused ? NEVER : source.pipe(materialize())); }), dematerialize()); var pausable = Object.create(newSource, { pause: { value: pausableProto.pause }, resume: { value: pausableProto.resume }, pauser: { value: pauser } }); return pausable; }; } export { PausableObservable, pausable }; //# sourceMappingURL=rxjs-pausable.js.map