// eslint-disable-next-line @typescript-eslint/triple-slash-reference /// import Observable, { Observer, Subscription } from 'core-js/features/observable'; export default function shareObservable(observable: Observable): Observable { let observers: Observer[] = []; let subscription: Subscription; return new Observable((observer: Observer) => { observers = [...observers, observer]; if (!subscription) { subscription = observable.subscribe({ complete: () => observers.forEach((observer) => observer.complete()), error: (error: Error) => observers.forEach((observer) => observer.error(error)), next: (value: T) => observers.forEach((observer) => observer.next(value)) }); } return () => { observers = observers.filter((o) => o !== observer); if (!observers.length) { subscription.unsubscribe(); subscription = undefined; } }; }); }