import { Observable } from './observable' import { IObservable, IObserver } from './types.js' import { Emitter } from './emitter.js' export class Subject extends Observable implements IObservable, IObserver { private _emitters: Array> = [] constructor() { super(emit => { this._emitters.push(emit) return () => { const i = this._emitters.indexOf(emit) if (i >= 0) this._emitters.splice(i, 1) } }) } next(val: T) { this._emitters.forEach(emit => emit.next(val)) } error(err: Error) { this._emitters.forEach(emit => emit.error(err)) } complete(val: any) { this._emitters.forEach(emit => emit.complete(val)) } }