UNPKG

@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
"use strict"; 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