@eolme/vma-engine
Version:
Engine for VK Mini Apps
56 lines (55 loc) • 1.64 kB
JavaScript
const createBus = () => {
const mettEvents = new Map();
const onceEvents = new Map();
const mett = {
on(type, handler) {
const set = mettEvents.get(type);
if (set) {
set.add(handler);
}
else {
mettEvents.set(type, new Set([handler]));
}
},
once(type, handler) {
const wrapper = (event, type) => {
mett.off(type, handler);
handler(event, type);
};
onceEvents.set(handler, wrapper);
const set = mettEvents.get(type);
if (set) {
set.add(wrapper);
}
else {
mettEvents.set(type, new Set([wrapper]));
}
},
off(type, handler) {
const once = onceEvents.get(handler);
if (once) {
onceEvents.delete(handler);
handler = once;
}
const set = mettEvents.get(type);
if (set) {
set.delete(handler);
}
},
emit(type, event = null) {
const setName = mettEvents.get(type);
if (setName) {
setName.forEach((handler) => {
handler(event, type);
});
}
},
clear() {
mettEvents.clear();
onceEvents.clear();
}
};
return mett;
};
const readonlyBus = createBus();
export { createBus, readonlyBus as bus, readonlyBus as default };