cozyevent
Version:
World's fastest, Lightweight Async/Sync Event Emitter, also for React
3 lines (2 loc) • 1.57 kB
JavaScript
;var e=require("react/jsx-runtime"),t=require("react");class n{_events={};on(e,t){(this._events[e]??=[]).push(t)}once(e,t){const n=s=>{t(s),this.off(e,n)};this.on(e,n)}off(e,t){this._events[e]&&(this._events[e]=this._events[e].filter((e=>e!==t)),0===this._events[e].length&&delete this._events[e])}emit(e,t){this._events[e]?.forEach((e=>e(t)))}emitAsync(e,t){this._events[e]&&queueMicrotask((()=>{this._events[e].forEach((e=>e(t)))}))}removeAllListeners(e){e?delete this._events[e]:this._events={}}}const s=t.createContext(null),o={},r=(e,t)=>{o[e]=t},i=e=>o[e],v=new n;exports.CozyEvent=n,exports.CozyEventContext=s,exports.CozyEventProvider=({instance:i=v,children:c,id:a="default"})=>{if(!(i instanceof n))throw new Error("Invalid CozyEvent instance provided to CozyEventProvider");t.useEffect((()=>(r(a,i),()=>{(e=>{delete o[e]})(a)})),[a,i]);const u=t.useMemo((()=>i),[i]);return e.jsx(s.Provider,{value:u,children:c})},exports.getCozyEventInstanceById=i,exports.registerCozyEventInstance=r,exports.useCozyEvent=(e,n,o)=>{const{namespace:r,id:c}=o||{},a=c?i(c):t.useContext(s)||v;if(!a)throw new Error(`No CozyEvent instance found for id: ${c}`);if("string"!=typeof e||""===e.trim())throw new Error("Invalid eventName provided to useCozyEvent. It must be a non-empty string.");if("function"!=typeof n)throw new Error("Invalid callback provided to useCozyEvent. It must be a function.");const u=t.useMemo((()=>r?`${r}:${e}`:e),[r,e]),f=t.useCallback(n,[n]);return t.useEffect((()=>(a.on(u,f),()=>{a.off(u,f)})),[a,u,f]),a};
//# sourceMappingURL=index.cjs.map