import Subscriber from './Subscriber'; /** * Subject similar to rxjs Subject */ export default class Subject { subscribers: { listener: Subscriber }[] = []; subscribe(listener: Subscriber) { const self = this; const subscriber = { listener, }; self.subscribers.push(subscriber); return { unsubscribe: () => { self.subscribers = self.subscribers.filter(item => item !== subscriber); }, }; } next(value: T) { this.subscribers.forEach(({ listener }) => { listener.next(value); }); } }