import { Observable } from '../observable.js' import { Emitter } from '../emitter' import { Subscription } from '../subscription' import { Behavior } from '../behavior' export function remember(this: Observable): Observable { const emitters: Array> = [] let n = 0 let sub: Subscription | undefined const $ = new Behavior() return new Observable(emit => { const $sub = $.subscribe(emit) if (n++ == 0) sub = this.subscribe($) return () => { if (--n == 0) sub!.unsubscribe() $sub.unsubscribe() } }) } Observable.prototype.remember = remember declare module '../observable.js' { export interface Observable { remember: typeof remember } }