"use strict"; var __extends = (this && this.__extends) || (function () { 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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.ConnectableObservable = void 0; var Observable_1 = require("../Observable"); var Subscription_1 = require("../Subscription"); var refCount_1 = require("../operators/refCount"); var OperatorSubscriber_1 = require("../operators/OperatorSubscriber"); var lift_1 = require("../util/lift"); var ConnectableObservable = (function (_super) { __extends(ConnectableObservable, _super); function ConnectableObservable(source, subjectFactory) { var _this = _super.call(this) || this; _this.source = source; _this.subjectFactory = subjectFactory; _this._subject = null; _this._refCount = 0; _this._connection = null; if (lift_1.hasLift(source)) { _this.lift = source.lift; } return _this; } ConnectableObservable.prototype._subscribe = function (subscriber) { return this.getSubject().subscribe(subscriber); }; ConnectableObservable.prototype.getSubject = function () { var subject = this._subject; if (!subject || subject.isStopped) { this._subject = this.subjectFactory(); } return this._subject; }; ConnectableObservable.prototype._teardown = function () { this._refCount = 0; var _connection = this._connection; this._subject = this._connection = null; _connection === null || _connection === void 0 ? void 0 : _connection.unsubscribe(); }; ConnectableObservable.prototype.connect = function () { var _this = this; var connection = this._connection; if (!connection) { connection = this._connection = new Subscription_1.Subscription(); var subject_1 = this.getSubject(); connection.add(this.source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subject_1, undefined, function () { _this._teardown(); subject_1.complete(); }, function (err) { _this._teardown(); subject_1.error(err); }, function () { return _this._teardown(); }))); if (connection.closed) { this._connection = null; connection = Subscription_1.Subscription.EMPTY; } } return connection; }; ConnectableObservable.prototype.refCount = function () { return refCount_1.refCount()(this); }; return ConnectableObservable; }(Observable_1.Observable)); exports.ConnectableObservable = ConnectableObservable; //# sourceMappingURL=ConnectableObservable.js.map