From b410f127a0419952552983a84acea22814c3aa82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20de=20Juvigny?= Date: Mon, 12 Dec 2022 13:08:12 +0100 Subject: [PATCH 1/2] Apply feedback --- .../lib/services/__tests__/event-hub.test.js | 20 +++++++++++++++++++ .../core/strapi/lib/services/event-hub.js | 4 ++++ .../strapi/lib/services/webhook-runner.js | 11 ++++------ 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/packages/core/strapi/lib/services/__tests__/event-hub.test.js b/packages/core/strapi/lib/services/__tests__/event-hub.test.js index ce7dd85faa..da9e6c5564 100644 --- a/packages/core/strapi/lib/services/__tests__/event-hub.test.js +++ b/packages/core/strapi/lib/services/__tests__/event-hub.test.js @@ -95,4 +95,24 @@ describe('Event Hub', () => { expect(fn).toHaveBeenCalledTimes(1); expect(fn2).toHaveBeenCalledTimes(1); }); + + it('removes all subscribers on removeAllListeners()', async () => { + const { subscribe, on, emit, removeAllListeners } = createEventHub(); + + const fn = jest.fn(); + const fn2 = jest.fn(); + subscribe(fn); + on('my-event', fn2); + + await emit('my-event'); + expect(fn).toHaveBeenCalled(); + expect(fn2).toHaveBeenCalled(); + + removeAllListeners(); + + // Subscribers are removed + await emit('my-event'); + expect(fn).toHaveBeenCalledTimes(1); + expect(fn2).toHaveBeenCalledTimes(1); + }); }); diff --git a/packages/core/strapi/lib/services/event-hub.js b/packages/core/strapi/lib/services/event-hub.js index 7407a9d75a..658462cd63 100644 --- a/packages/core/strapi/lib/services/event-hub.js +++ b/packages/core/strapi/lib/services/event-hub.js @@ -67,6 +67,10 @@ module.exports = function createEventHub() { subscribers.length = 0; return this; }, + + removeAllListeners() { + eventHub.destroy(); + }, }; return { diff --git a/packages/core/strapi/lib/services/webhook-runner.js b/packages/core/strapi/lib/services/webhook-runner.js index 1a4015b0f2..77b6477f92 100644 --- a/packages/core/strapi/lib/services/webhook-runner.js +++ b/packages/core/strapi/lib/services/webhook-runner.js @@ -32,18 +32,14 @@ class WebhookRunner { this.queue = new WorkerQueue({ logger, concurrency: 5 }); this.queue.subscribe(this.executeListener.bind(this)); - - strapi.eventHub.subscribe((eventName, ...args) => { - if (this.listeners.has(eventName)) { - const listener = this.listeners.get(eventName); - listener(...args); - } - }); } deleteListener(event) { debug(`Deleting listener for event '${event}'`); if (this.listeners.has(event)) { + const fn = this.listeners.get(event); + + this.eventHub.off(event, fn); this.listeners.delete(event); } } @@ -61,6 +57,7 @@ class WebhookRunner { }; this.listeners.set(event, listen); + this.eventHub.on(event, listen); } async executeListener({ event, info }) { From 34278a74d58b75b4875efe6c6537667d9db5b75c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20de=20Juvigny?= Date: Mon, 12 Dec 2022 14:02:15 +0100 Subject: [PATCH 2/2] fix destroy alias --- packages/core/strapi/lib/services/event-hub.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/core/strapi/lib/services/event-hub.js b/packages/core/strapi/lib/services/event-hub.js index 658462cd63..61c1c44163 100644 --- a/packages/core/strapi/lib/services/event-hub.js +++ b/packages/core/strapi/lib/services/event-hub.js @@ -67,15 +67,12 @@ module.exports = function createEventHub() { subscribers.length = 0; return this; }, - - removeAllListeners() { - eventHub.destroy(); - }, }; return { ...eventHub, removeListener: eventHub.off, + removeAllListeners: eventHub.destroy, addListener: eventHub.on, }; };