rxjs-pausable
Version:
A RxJS pipable operator to pause and resume streams
62 lines (54 loc) • 2.59 kB
JavaScript
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