Apply feedback

This commit is contained in:
Rémi de Juvigny 2022-12-09 13:56:28 +01:00
parent c29a2a841b
commit 3f01d36578
4 changed files with 30 additions and 14 deletions

View File

@ -24,11 +24,7 @@ const registerAuthEvents = () => {
const eventList = Object.entries(events).filter(keyIsValidEventName).filter(valueIsFunctionType); const eventList = Object.entries(events).filter(keyIsValidEventName).filter(valueIsFunctionType);
for (const [eventName, handler] of eventList) { for (const [eventName, handler] of eventList) {
strapi.eventHub.addSubscriber((name, ...args) => { strapi.eventHub.on(authEventsMapper[eventName], handler);
if (name === authEventsMapper[eventName]) {
handler(...args);
}
});
} }
}; };

View File

@ -225,7 +225,7 @@ class Strapi {
await this.runLifecyclesFunctions(LIFECYCLES.DESTROY); await this.runLifecyclesFunctions(LIFECYCLES.DESTROY);
this.eventHub.removeAllSubscribers(); this.eventHub.destroy();
if (_.has(this, 'db')) { if (_.has(this, 'db')) {
await this.db.destroy(); await this.db.destroy();

View File

@ -4,17 +4,24 @@
* The event hub is Strapi's event control center. * The event hub is Strapi's event control center.
*/ */
module.exports = function createEventHub() { module.exports = function createEventHub() {
const listeners = new Map();
// Default subscriber to easily add listeners with the on() method
const defaultSubscriber = async (eventName, ...args) => {
if (listeners.has(eventName)) {
return Promise.all(listeners.get(eventName).map((listener) => listener(...args)));
}
};
// Store of subscribers that will be called when an event is emitted // Store of subscribers that will be called when an event is emitted
const subscribers = []; const subscribers = [defaultSubscriber];
return { return {
emit(eventName, ...args) { async emit(eventName, ...args) {
subscribers.forEach((subscriber) => { await Promise.all(subscribers.map((subscriber) => subscriber(eventName, ...args)));
subscriber(eventName, ...args);
});
}, },
addSubscriber(subscriber) { subscribe(subscriber) {
subscribers.push(subscriber); subscribers.push(subscriber);
// Return a function to remove the subscriber // Return a function to remove the subscriber
@ -23,7 +30,20 @@ module.exports = function createEventHub() {
}; };
}, },
removeAllSubscribers() { on(eventName, listener) {
if (!listeners.has(eventName)) {
listeners.set(eventName, []);
}
listeners.get(eventName).push(listener);
// Return a function to remove the listener
return () => {
listeners.get(eventName).splice(listeners.get(eventName).indexOf(listener), 1);
};
},
destroy() {
subscribers.length = 0; subscribers.length = 0;
}, },
}; };

View File

@ -33,7 +33,7 @@ class WebhookRunner {
this.queue = new WorkerQueue({ logger, concurrency: 5 }); this.queue = new WorkerQueue({ logger, concurrency: 5 });
this.queue.subscribe(this.executeListener.bind(this)); this.queue.subscribe(this.executeListener.bind(this));
strapi.eventHub.addSubscriber((eventName, ...args) => { strapi.eventHub.subscribe((eventName, ...args) => {
if (this.listeners.has(eventName)) { if (this.listeners.has(eventName)) {
const listener = this.listeners.get(eventName); const listener = this.listeners.get(eventName);
listener(...args); listener(...args);