From d54cfd8a7946f9fd50f10ce0c0a0ba2ab4da1727 Mon Sep 17 00:00:00 2001 From: Christoph Reiter <reiter.christoph@gmail.com> Date: Tue, 23 Jun 2020 14:41:47 +0200 Subject: [PATCH] Remove old event bus implementation --- packages/common/events.js | 149 --------------------------------- packages/common/test/events.js | 76 ----------------- 2 files changed, 225 deletions(-) delete mode 100644 packages/common/events.js delete mode 100644 packages/common/test/events.js diff --git a/packages/common/events.js b/packages/common/events.js deleted file mode 100644 index fdda0b18..00000000 --- a/packages/common/events.js +++ /dev/null @@ -1,149 +0,0 @@ -export class EventSubscriber { - - /** - * @param {string} eventName The event name used for broadcasting the event - * @param {string} requestName The event name used for requesting the event - */ - constructor(eventName, requestName) { - this._eventName = eventName; - this._requestName = requestName; - this._callbacks = []; - this._eventHandler = this._eventHandler.bind(this); - } - - /** - * Register a callback for the event - * - * @param {Function} callback - */ - subscribe(callback) { - const first = (this._callbacks.length === 0); - this._callbacks.push(callback); - if (first) { - window.addEventListener(this._eventName, this._eventHandler); - } - this._requestUpdate(callback); - } - - /** - * Unregister a callback registered through subscribe() - * - * @param {Function} callback - */ - unsubscribe(callback) { - const index = this._callbacks.indexOf(callback); - if (index == -1) - throw new Error("not subscribed"); - this._callbacks.splice(index, 1); - const last = (this._callbacks.length === 0); - if (last) { - window.removeEventListener(this._eventName, this._eventHandler); - } - } - - /** - * Request an event, might not do anything if there is no emitter. - */ - requestUpdate() { - this._requestUpdate((data) => { - for (const cb of this._callbacks) { - cb(data); - } - }); - } - - /** - * Returns the event data or throws an error if there is no emitter - */ - async requestData() { - return new Promise((resolve, reject) => { - const event = new CustomEvent(this._requestName, { - bubbles: true, - composed: true, - cancelable: true, - detail: {'callback': resolve} - }); - if (window.dispatchEvent(event)) { - reject(new Error("other side not there")); - } - }); - } - - _requestUpdate(callback) { - const event = new CustomEvent(this._requestName, { - bubbles: true, - composed: true, - detail: {callback: callback} - }); - window.dispatchEvent(event); - } - - _eventHandler(event) { - const data = event.detail.data; - for (const cb of this._callbacks) { - cb(data); - } - } -} - -export class EventEmitter { - - /** - * @param {string} eventName The event name used for broadcasting the event - * @param {string} requestName The event name used for requesting the event - */ - constructor(eventName, requestName) { - this._eventName = eventName; - this._requestName = requestName; - } - - /** - * Register a callback that will be called when a new event is generated. - * The callback needs to return an object that is send with the event. - * - * @param {Function} callback - */ - registerCallback(callback) { - if (this._getData !== undefined) - throw new Error("already registered"); - this._getData = callback; - this._onRequest = (event) => { - const callback = event.detail.callback; - if (callback === undefined) { - return; - } - event.preventDefault(); - event.stopImmediatePropagation(); - callback(this._getData()); - }; - window.addEventListener(this._requestName, this._onRequest); - this.emit(); - } - - /** - * Unregister a callback that was passed to registerCallback() - * - * @param {Function} callback - */ - unregisterCallback(callback) { - if (this._getData !== callback) - throw new Error("not registered"); - window.removeEventListener(this._requestName, this._onRequest); - delete this._getData; - delete this._onRequest; - } - - /** - * Force emit an event (when something has changed and new data needs to be send out) - */ - emit() { - if (this._getData === undefined) - throw new Error("no callback registered"); - const event = new CustomEvent(this._eventName, { - bubbles: true, - composed: true, - detail: { data: this._getData() } - }); - window.dispatchEvent(event); - } -} \ No newline at end of file diff --git a/packages/common/test/events.js b/packages/common/test/events.js deleted file mode 100644 index 25933976..00000000 --- a/packages/common/test/events.js +++ /dev/null @@ -1,76 +0,0 @@ -import {assert} from 'chai'; -import {EventEmitter, EventSubscriber} from '../events.js'; - - -const assertThrowsAsync = async (fn, ...args) => { - let error; - try { - await fn(); - } catch (e) { - error = e; - } - - return assert.throws(() => { - if (error !== undefined) - throw error; - }, ...args); -}; - - -suite('events', () => { - test('emitter basics', () => { - const ev = new EventEmitter("foo", "foo-req"); - assert.throws(ev.emit); - - const cb = () => { return 42; }; - ev.registerCallback(cb); - ev.emit(); - ev.unregisterCallback(cb); - assert.throws(() => {ev.unregisterCallback(cb);}); - assert.throws(ev.emit); - }); - - test('sub basics', async () => { - const sub = new EventSubscriber("foo", "foo-req"); - await assertThrowsAsync(async () => { await sub.requestData();}, /not there/); - - const buffer = []; - const handler = (data) => { - buffer.push(data); - }; - sub.subscribe(handler); - sub.subscribe(handler); - sub.requestUpdate(); - sub.unsubscribe(handler); - sub.unsubscribe(handler); - assert.throws(() => {sub.unsubscribe(handler);}); - assert.deepEqual(buffer, []); - }); - - test('both basics', async () => { - const sub = new EventSubscriber("foo", "foo-req"); - const ev = new EventEmitter("foo", "foo-req"); - let i = 0; - const cb = () => { return i++; }; - ev.registerCallback(cb); - - const buffer = []; - const handler = (data) => { - buffer.push(data); - }; - - sub.subscribe(handler); - assert.deepEqual(buffer, [1]); - sub.requestUpdate(); - assert.deepEqual(buffer, [1, 2]); - sub.requestUpdate(); - assert.deepEqual(buffer, [1, 2, 3]); - ev.emit(); - assert.deepEqual(buffer, [1, 2, 3, 4]); - - sub.unsubscribe(handler); - sub.requestUpdate(); - assert.deepEqual(buffer, [1, 2, 3, 4]); - ev.unregisterCallback(cb); - }); -}); -- GitLab