@stacksjs/events
Version:
Functional event emitting.
3 lines (2 loc) • 2.05 kB
JavaScript
// @bun
var W=Symbol.for("stacks.events.handler.error");function X($,B,M){console.error(`[Events] ${$} for '${String(B)}':`,M)}function D($){return!!$&&typeof $.catch==="function"}function G($){let B=$??new Map,M=new Map,K=(j,z)=>{let q=M.get(j);if(!q)q=new RegExp(`^${j.replace(/\*/g,".*")}$`),M.set(j,q);return q.test(z)};function R(j,z){let q=B.get(j);if(q)q.push(z);else B.set(j,[z])}function b(j,z){let q=(...J)=>{return T(j,q),z(...J)};q[W]=z,R(j,q)}function T(j,z){let q=B.get(j);if(!q)return;if(!z){B.set(j,[]);return}for(let J=q.length-1;J>=0;J--){let U=q[J];if(U===z||U?.[W]===z)q.splice(J,1)}}function x(j){if(j===void 0)B.clear();else B.delete(j)}function N(j){return B.get(j)?.length??0}function _(j,z){let q=B.get(j)?.slice(),J=B.get("*")?.slice();if(q)for(let V of q)try{let F=V(z);if(D(F))F.catch((I)=>X("Async handler error",j,I))}catch(F){X("Handler error",j,F)}let U=String(j);if(B.forEach((V,F)=>{let I=String(F);if(I===U||I==="*"||!I.includes("*"))return;if(K(I,U))for(let O of V.slice())try{let Q=O(j,z);if(D(Q))Q.catch((P)=>X(`Async pattern handler '${I}' error`,j,P))}catch(Q){X(`Pattern handler '${I}' error`,j,Q)}}),J)for(let V of J)try{let F=V(j,z);if(D(F))F.catch((I)=>X("Async wildcard handler error",j,I))}catch(F){X("Wildcard handler error",j,F)}}async function C(j,z){let q=[],J=async(F,I)=>{if(!F)return;for(let O of F.slice())try{let Q=I?O(j,z):O(z);q.push(D(Q)?await Q:Q)}catch(Q){X("Awaited handler error",j,Q),q.push(void 0)}};await J(B.get(j),!1);let U=String(j),V=[];B.forEach((F,I)=>{let O=String(I);if(O===U||O==="*"||!O.includes("*"))return;if(K(O,U))V.push(O)});for(let F of V)await J(B.get(F),!0);return await J(B.get("*"),!0),q}return{all:B,on:R,once:b,off:T,emit:_,emitAsync:C,removeAllListeners:x,listenerCount:N}}var w=G,c=G,Y=G(),Z=Y,H=Y,f=Z.emit,g=Z.emitAsync,L=f,E=Z.all,S=Z.on,A=Z.on,u=Z.once,k=Z.off;export{A as useListen,H as useEvents,L as useEvent,u as once,k as off,w as mitt,S as listen,Y as events,Z as emitter,g as dispatchAsync,f as dispatch,c as default,G as createEmitter,E as all};