--- /dev/null
+import { Subscriber } from '../Subscriber';
+export function refCount() {
+ return function refCountOperatorFunction(source) {
+ return source.lift(new RefCountOperator(source));
+ };
+}
+class RefCountOperator {
+ constructor(connectable) {
+ this.connectable = connectable;
+ }
+ call(subscriber, source) {
+ const { connectable } = this;
+ connectable._refCount++;
+ const refCounter = new RefCountSubscriber(subscriber, connectable);
+ const subscription = source.subscribe(refCounter);
+ if (!refCounter.closed) {
+ refCounter.connection = connectable.connect();
+ }
+ return subscription;
+ }
+}
+class RefCountSubscriber extends Subscriber {
+ constructor(destination, connectable) {
+ super(destination);
+ this.connectable = connectable;
+ }
+ _unsubscribe() {
+ const { connectable } = this;
+ if (!connectable) {
+ this.connection = null;
+ return;
+ }
+ this.connectable = null;
+ const refCount = connectable._refCount;
+ if (refCount <= 0) {
+ this.connection = null;
+ return;
+ }
+ connectable._refCount = refCount - 1;
+ if (refCount > 1) {
+ this.connection = null;
+ return;
+ }
+ const { connection } = this;
+ const sharedConnection = connectable._connection;
+ this.connection = null;
+ if (sharedConnection && (!connection || sharedConnection === connection)) {
+ sharedConnection.unsubscribe();
+ }
+ }
+}
+//# sourceMappingURL=refCount.js.map
\ No newline at end of file