import { Subject } from '../Subject'; import { Observable } from '../Observable'; import { Subscriber } from '../Subscriber'; import { Subscription } from '../Subscription'; import { ConnectableObservable } from '../observable/ConnectableObservable'; export class MulticastObservable extends Observable { constructor(protected source: Observable, private subjectFactory: () => Subject, private selector: (source: Observable) => Observable) { super(); } protected _subscribe(subscriber: Subscriber): Subscription { const { selector, source } = this; const connectable = new ConnectableObservable(source, this.subjectFactory); const subscription = selector(connectable).subscribe(subscriber); subscription.add(connectable.connect()); return subscription; } }