@rxjs-stuff/marbles
Version:
A set of plugins that provide a natural feeling integration with Mocha and Chai for RxJS "marbles" testing.
56 lines • 2.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.logSubscriptions = exports.wrapLogSubscriptions = exports.isSubscriptionLoggedObservable = exports.SubscriptionLog = void 0;
const rxjs_1 = require("rxjs");
class SubscriptionLog {
constructor(subscribedFrame, unsubscribedFrame = Infinity) {
this.subscribedFrame = subscribedFrame;
this.unsubscribedFrame = unsubscribedFrame;
}
}
exports.SubscriptionLog = SubscriptionLog;
function isSubscriptionLoggedObservable(obj) {
return (obj === null || obj === void 0 ? void 0 : obj.hasOwnProperty('subscriptions')) && Array.isArray(obj.subscriptions) && rxjs_1.isObservable(obj);
}
exports.isSubscriptionLoggedObservable = isSubscriptionLoggedObservable;
function wrapLogSubscriptions(scheduler, source) {
if (isSubscriptionLoggedObservable(source)) {
return source;
}
return logSubscriptions(scheduler)(source);
}
exports.wrapLogSubscriptions = wrapLogSubscriptions;
function logSubscriptions(scheduler) {
return (source) => new LogSubscriptionsOperator(scheduler).apply(source);
}
exports.logSubscriptions = logSubscriptions;
class LogSubscriptionsOperator {
constructor(scheduler) {
this.scheduler = scheduler;
}
apply(source) {
if (isSubscriptionLoggedObservable(source)) {
return source;
}
return Object.assign(source.lift(this), {
subscriptions: this.subscriptions,
});
}
call(subscriber, source) {
const logEntry = new SubscriptionLog(this.scheduler.frame);
this.subscriptions.push(logEntry);
return source.subscribe(new LogSubscriptionsSubscriber(this.scheduler, subscriber, logEntry));
}
}
class LogSubscriptionsSubscriber extends rxjs_1.Subscriber {
constructor(scheduler, destination, logEntry) {
super(destination);
this.scheduler = scheduler;
this.logEntry = logEntry;
}
unsubscribe() {
super.unsubscribe();
this.logEntry.unsubscribedFrame = this.scheduler.frame;
}
}
//# sourceMappingURL=log-subscriptions.js.map