UNPKG

@eolme/vma-engine

Version:
56 lines (55 loc) 1.64 kB
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 };