-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy patheventSink.mjs
More file actions
32 lines (30 loc) · 1.12 KB
/
eventSink.mjs
File metadata and controls
32 lines (30 loc) · 1.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
let shouldLogEvents = false;
export function logEvents(enable) {
shouldLogEvents = enable;
}
/**
* Create a super simple event sink
* @param subscriptions container for the event subscriptions in the current context
*/
export default function eventSink({ subscriptions, logEvents = false }) {
shouldLogEvents = logEvents;
function subscribe(eventName, callback) {
subscriptions[eventName] = subscriptions[eventName] || [];
const eventSubscriptions = subscriptions[eventName];
eventSubscriptions.push(callback);
// return an unsubscribe function
return () => eventSubscriptions.splice(eventSubscriptions.indexOf(callback));
}
function publish(eventName, payload) {
if (shouldLogEvents) {
console.info(
`type: ${eventName}, payload: ${
typeof payload === 'object' ? JSON.stringify(payload, null, 3) : payload
}`
);
}
const eventSubscriptions = subscriptions[eventName] || [];
eventSubscriptions.forEach((callback) => callback(payload));
}
return [subscribe, publish];
}