use-app-events
Version:
Event system for global communication in vanilla JavaScript and React.
44 lines (43 loc) • 1.2 kB
JavaScript
import e from "../lib/heap.js";
import m from "../utils/generateId.js";
import y from "../lib/options.js";
const E = (f) => {
const {
debug: v,
scopeKey: t,
shouldBeCalledOnce: p
} = f || {}, g = typeof t == "string";
function h(r, i) {
v ?? y.debug;
const l = [];
let a, o;
return Array.isArray(r) ? (o = r, a = m("event-group-")) : o = [r], o.forEach((n) => {
const c = e.eventListeners.findIndex((s) => {
const u = s.scopeKey === t;
return g && !u ? !1 : s.eventType === n && s.callback.toString() === i.toString();
}), L = {
eventType: n,
callback: i,
scopeKey: t,
shouldBeCalledOnce: p,
eventGroupId: a
}, d = c !== -1;
if (d) {
const u = {
...e.eventListeners[c],
scopeKey: t,
shouldBeCalledOnce: p,
callback: i
};
e.eventListeners = [...e.eventListeners], e.eventListeners[c] = u;
}
d || (e.eventListeners = [...e.eventListeners, L]), l.push(L);
}), () => {
e.eventListeners = e.eventListeners.filter((n) => !l.includes(n));
};
}
return h;
};
export {
E as base_createListenForEvents
};