import { Subject, Observable, ConnectableObservable } from 'rxjs'; import { publish } from 'rxjs/operators'; export interface LazyConnectionOptions { start : (subject : Subject) => void; stop : () => void; subject? : Subject; } export function lazyConnection(options : LazyConnectionOptions): Observable { let obs = new Observable(observer => { let subject = options.subject ?? new Subject(); let subscription = subject.subscribe(observer); options.start(subject); return () => { subscription.unsubscribe(); options.stop(); }; }); return (>obs.pipe(publish())).refCount(); }