UNPKG

zephyr-events

Version:

Ultra-fast ES2023 event emitter with 889B bundle size and race-condition safety

1 lines 977 B
"use strict";Object.defineProperty(exports,"__esModule",{value: true});exports.default=zephyrEvents;function zephyrEvents(all){all ??=new Map();const handlerSets=new Map();const getHandlerSet=(type)=>{let handlers=handlerSets.get(type);if(!handlers){handlers=new Set();handlerSets.set(type,handlers);all.set(type,[]);}return handlers;};const syncMap=(type)=>{const handlers=handlerSets.get(type);if(handlers){all.set(type,[...handlers]);}};return{all,on(type,handler){const handlers=getHandlerSet(type);handlers.add(handler);syncMap(type);return()=>{handlers.delete(handler);syncMap(type);};},off(type,handler){const handlers=handlerSets.get(type);if(!handlers)return;handler ? handlers.delete(handler): handlers.clear();syncMap(type);},emit(type,evt){const handlers=handlerSets.get(type);if(handlers?.size){for(const handler of [...handlers]){handler(evt);}}const wildcards=handlerSets.get('*');if(wildcards?.size){for(const handler of [...wildcards]){handler(type,evt);}}}};}