var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) Eif (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var Observable_1 = require('../Observable');
var Subscription_1 = require('../Subscription');
var Subscriber_1 = require('../Subscriber');
var ConnectableObservable = (function (_super) {
__extends(ConnectableObservable, _super);
function ConnectableObservable(source, subjectFactory) {
_super.call(this);
this.source = source;
this.subjectFactory = subjectFactory;
}
ConnectableObservable.prototype._subscribe = function (subscriber) {
return this._getSubject().subscribe(subscriber);
};
ConnectableObservable.prototype._getSubject = function () {
var subject = this.subject;
if (subject && !subject.isUnsubscribed) {
return subject;
}
return (this.subject = this.subjectFactory());
};
ConnectableObservable.prototype.connect = function () {
var source = this.source;
var subscription = this.subscription;
if (subscription && !subscription.isUnsubscribed) {
return subscription;
}
subscription = source.subscribe(this._getSubject());
subscription.add(new ConnectableSubscription(this));
return (this.subscription = subscription);
};
ConnectableObservable.prototype.refCount = function () {
return new RefCountObservable(this);
};
return ConnectableObservable;
})(Observable_1.Observable);
exports.ConnectableObservable = ConnectableObservable;
var ConnectableSubscription = (function (_super) {
__extends(ConnectableSubscription, _super);
function ConnectableSubscription(connectable) {
_super.call(this);
this.connectable = connectable;
}
ConnectableSubscription.prototype._unsubscribe = function () {
var connectable = this.connectable;
connectable.subject = void 0;
connectable.subscription = void 0;
this.connectable = void 0;
};
return ConnectableSubscription;
})(Subscription_1.Subscription);
var RefCountObservable = (function (_super) {
__extends(RefCountObservable, _super);
function RefCountObservable(connectable, refCount) {
Eif (refCount === void 0) { refCount = 0; }
_super.call(this);
this.connectable = connectable;
this.refCount = refCount;
}
RefCountObservable.prototype._subscribe = function (subscriber) {
var connectable = this.connectable;
var refCountSubscriber = new RefCountSubscriber(subscriber, this);
var subscription = connectable.subscribe(refCountSubscriber);
if (!subscription.isUnsubscribed && ++this.refCount === 1) {
refCountSubscriber.connection = this.connection = connectable.connect();
}
return subscription;
};
return RefCountObservable;
})(Observable_1.Observable);
var RefCountSubscriber = (function (_super) {
__extends(RefCountSubscriber, _super);
function RefCountSubscriber(destination, refCountObservable) {
_super.call(this, null);
this.destination = destination;
this.refCountObservable = refCountObservable;
this.connection = refCountObservable.connection;
destination.add(this);
}
RefCountSubscriber.prototype._next = function (value) {
this.destination.next(value);
};
RefCountSubscriber.prototype._error = function (err) {
this._resetConnectable();
this.destination.error(err);
};
RefCountSubscriber.prototype._complete = function () {
this._resetConnectable();
this.destination.complete();
};
RefCountSubscriber.prototype._resetConnectable = function () {
var observable = this.refCountObservable;
var obsConnection = observable.connection;
var subConnection = this.connection;
if (subConnection && subConnection === obsConnection) {
observable.refCount = 0;
obsConnection.unsubscribe();
observable.connection = void 0;
this.unsubscribe();
}
};
RefCountSubscriber.prototype._unsubscribe = function () {
var observable = this.refCountObservable;
if (observable.refCount === 0) {
return;
}
if (--observable.refCount === 0) {
var obsConnection = observable.connection;
var subConnection = this.connection;
if (subConnection && subConnection === obsConnection) {
obsConnection.unsubscribe();
observable.connection = void 0;
}
}
};
return RefCountSubscriber;
})(Subscriber_1.Subscriber);
//# sourceMappingURL=ConnectableObservable.js.map |