"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.refCount = void 0; var lift_1 = require("../util/lift"); var OperatorSubscriber_1 = require("./OperatorSubscriber"); function refCount() { return lift_1.operate(function (source, subscriber) { var connection = null; source._refCount++; var refCounter = OperatorSubscriber_1.createOperatorSubscriber(subscriber, undefined, undefined, undefined, function () { if (!source || source._refCount <= 0 || 0 < --source._refCount) { connection = null; return; } var sharedConnection = source._connection; var conn = connection; connection = null; if (sharedConnection && (!conn || sharedConnection === conn)) { sharedConnection.unsubscribe(); } subscriber.unsubscribe(); }); source.subscribe(refCounter); if (!refCounter.closed) { connection = source.connect(); } }); } exports.refCount = refCount; //# sourceMappingURL=refCount.js.map