@stacksjs/events 0.74.19 → 0.74.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{existsSync as T,readdirSync as Y,statSync as G}from"fs";import{extname as J,join as k,resolve as q}from"path";import W from"process";function z(e){return e}async function C(e={}){let n=e.dir??k(W.cwd(),"app","Listeners"),t=e.extensions??[".ts",".js"],r={warn:e.log?.warn??((a)=>console.warn(a)),error:e.log?.error??((a)=>console.error(a)),info:e.log?.info??((a)=>console.info(a))};if(!T(n))return 0;let s=j(n,t);if(s.length===0)return 0;let o=0;for(let a of s)try{let u=await import(a),v=u?.default??u;if(typeof v==="function")continue;if(!Q(v)){r.warn(`[events/discover] ${a}: default export doesn't match ListenerModule shape ({ listensTo, handle }), skipping`);continue}for(let m of X(v.listensTo)){if(!D(m,a))continue;R(m,(x)=>v.handle(x,m)),o++}}catch(u){r.error(`[events/discover] failed to import ${a}: ${u instanceof Error?u.message:String(u)}`)}if(o>0)r.info(`[events/discover] registered ${o} listener${o===1?"":"s"} from ${n}`);return o}function j(e,n){let t=[],r=Y(e);for(let s of r){let o=k(e,s),a=G(o);if(a.isDirectory())t.push(...j(o,n));else if(a.isFile()&&n.includes(J(s)))t.push(o)}return t}function Q(e){let n=e?.listensTo;return!!e&&typeof e==="object"&&(typeof n==="string"||Array.isArray(n))&&typeof e.handle==="function"}function X(e){return(Array.isArray(e)?e:[e]).map((t)=>String(t).trim()).filter(Boolean)}var K=new Set;function D(e,n){let t=`${e}\x00${n}`;if(K.has(t))return!1;return K.add(t),!0}function Z(){K.clear()}async function ee(e={}){let n=e.base??W.cwd(),t={warn:e.log?.warn??((s)=>console.warn(s)),error:e.log?.error??((s)=>console.error(s)),info:e.log?.info??((s)=>console.info(s))},r=0;if(r+=await ne(n,t),r+=await C({...e,dir:e.dir??k(n,"app","Listeners"),log:{...t,info:()=>{}}}),r>0)t.info(`[events] registered ${r} listener${r===1?"":"s"}`);return r}async function ne(e,n){let t=["ts","js"].map((o)=>k(e,"app",`Events.${o}`)).find((o)=>T(o));if(!t)return 0;let r;try{let o=await import(t);r=o?.default??o}catch(o){return n.error(`[events] failed to read ${t}: ${o instanceof Error?o.message:String(o)}`),0}if(!r||typeof r!=="object")return 0;let s=0;for(let[o,a]of Object.entries(r))for(let u of Array.isArray(a)?a:[a]){if(typeof u!=="string"||!u.trim())continue;let v=await ie(e,u.trim());if(!v){n.warn(`[events] ${o}: no listener or action called ${u}`);continue}if(!D(o,v.id))continue;let{handle:m,validations:x}=v;R(o,(H)=>(te(o,u,H,x,n),m(H,o))),s++}return s}function te(e,n,t,r,s){if(!r||typeof t!=="object"||t===null)return;let o=t,a=[];for(let[u,v]of Object.entries(r)){let m=v?.rule?.validate;if(typeof m!=="function")continue;try{if(!m(o[u]).valid)a.push(u)}catch{a.push(u)}}if(a.length)s.warn(`[events] ${e}: payload does not match what ${n} declares (${a.join(", ")})`)}var P=new Map;async function O(e,n,t){let r=`${e}:${n}`,s=P.get(r);if(s)return s;let o=(async()=>{try{let a=k(e,"storage","framework","auto-imports"),v=(await import(k(a,`${n}.ts`)))[t];if(!v)return null;return Object.fromEntries(Object.entries(v).map(([m,x])=>[m,q(a,x)]))}catch{return null}})();return P.set(r,o),o}async function re(e,n){let t=await O(e,"listeners","listeners"),r=await O(e,"actions","actions");if(!t&&!r)return null;return t?.[n]??r?.[`Actions/${n}`]??null}function se(){P.clear()}function oe(e){let n=[k(e,"app"),k(e,"storage","framework","defaults","app")];try{let t=Bun.resolveSync("@stacksjs/defaults/package.json",e);n.push(k(t.slice(0,t.lastIndexOf("/")),"app"))}catch{}return n.filter((t)=>T(t))}async function ie(e,n){let t=[],r=await re(e,n);if(r)t.push(r);for(let s of oe(e))for(let o of["Listeners","Actions"])for(let a of["ts","js"])t.push(k(s,o,`${n}.${a}`));for(let s of t){if(!T(s))continue;try{let o=await import(s),a=o?.default??o,u=a?.handle;if(typeof u!=="function")continue;return{id:s,handle:u.bind(a),validations:a?.validations}}catch{continue}}return null}var U=Symbol.for("stacks.events.handler.error"),V=Symbol.for("stacks.events.handler.priority");function ae(e){if(e&&typeof e==="object"||typeof e==="function"){let n=e[V];return typeof n==="number"&&Number.isFinite(n)?n:0}return 0}function A(e){return e.map((n,t)=>({h:n,i:t,p:ae(n)})).sort((n,t)=>t.p-n.p||n.i-t.i).map((n)=>n.h)}function S(e,n,t){console.error(`[Events] ${e} for '${String(n)}':`,t)}function b(e){return!!e&&typeof e.catch==="function"}function M(e){let n=e??new Map,t=new Map,r=(i,f)=>{let d=t.get(i);if(!d)d=new RegExp(`^${i.replace(/\*/g,".*")}$`),t.set(i,d);return d.test(f)};function s(i,f,d){if(d?.priority!==void 0&&Number.isFinite(d.priority))f[V]=d.priority;let y=n.get(i);if(y)y.push(f);else n.set(i,[f])}function o(i,f){let d=(...y)=>(a(i,d),f(...y));d[U]=f,s(i,d)}function a(i,f){let d=n.get(i);if(!d)return;if(!f){n.set(i,[]);return}for(let y=d.length-1;y>=0;y--){let E=d[y];if(E===f||E?.[U]===f)d.splice(y,1)}}function u(i){if(i===void 0)n.clear();else n.delete(i)}function v(i){return n.get(i)?.length??0}function m(i,f){let d=n.get(i)?.slice(),y=n.get("*")?.slice(),E=d?A(d):void 0,w=y?A(y):void 0;if(E)for(let g of E)try{let c=g(f);if(b(c))c.catch((l)=>S("Async handler error",i,l))}catch(c){S("Handler error",i,c)}let p=String(i);if(n.forEach((g,c)=>{let l=String(c);if(l===p||l==="*"||!l.includes("*"))return;if(r(l,p))for(let _ of A(g.slice()))try{let L=_(i,f);if(b(L))L.catch((B)=>S(`Async pattern handler '${l}' error`,i,B))}catch(L){S(`Pattern handler '${l}' error`,i,L)}}),w)for(let g of w)try{let c=g(i,f);if(b(c))c.catch((l)=>S("Async wildcard handler error",i,l))}catch(c){S("Wildcard handler error",i,c)}}async function x(i,f){let d=[],y=async(p,g)=>{if(!p)return;for(let c of A(p.slice()))try{let l=g?c(i,f):c(f);d.push(b(l)?await l:l)}catch(l){S("Awaited handler error",i,l),d.push(void 0)}};await y(n.get(i),!1);let E=String(i),w=[];n.forEach((p,g)=>{let c=String(g);if(c===E||c==="*"||!c.includes("*"))return;if(r(c,E))w.push(c)});for(let p of w)await y(n.get(p),!0);return await y(n.get("*"),!0),d}async function H(i,f){let d=[],y=async(p,g)=>{if(!p)return;for(let c of A(p.slice()))try{let l=g?c(i,f):c(f),_=b(l)?await l:l;d.push({ok:!0,value:_})}catch(l){let _=l instanceof Error?l:Error(String(l));d.push({ok:!1,error:_})}};await y(n.get(i),!1);let E=String(i),w=[];n.forEach((p,g)=>{let c=String(g);if(c===E||c==="*"||!c.includes("*"))return;if(r(c,E))w.push(c)});for(let p of w)await y(n.get(p),!0);return await y(n.get("*"),!0),d}return{all:n,on:s,once:o,off:a,emit:m,emitAsync:x,emitAndCollect:H,removeAllListeners:u,listenerCount:v}}var pe=M,He=M;function ce(e,n){let t=(r)=>`${n}:${r}`;return{on(r,s,o){e.on(t(r),s,o)},once(r,s){e.once(t(r),s)},off(r,s){e.off(t(r),s)},emit(r,s){e.emit(t(r),s)},emitAsync(r,s){return e.emitAsync(t(r),s)},emitAndCollect(r,s){return e.emitAndCollect(t(r),s)},listenerCount(r){return e.listenerCount(t(r))}}}function ge(e){return e}var F=Symbol.for("stacks.events.emitter"),I=globalThis,N=I[F]??(I[F]=M()),h=N,me=N,de=h.emit,Ee=h.emitAsync,ke=h.emitAndCollect,we=de,he=h.all,R=h.on,xe=h.on,Se=h.once,_e=h.off;function Ae(e){return ce(N,e)}export{he as all,M as createEmitter,He as default,ge as defineEvents,z as defineListener,C as discoverListeners,de as dispatch,ke as dispatchAndCollect,Ee as dispatchAsync,h as emitter,N as events,R as listen,pe as mitt,_e as off,Se as once,ee as registerAppListeners,Z as resetListenerRegistry,se as resetNameRegistries,ce as scope,Ae as scopedEvents,we as useEvent,me as useEvents,xe as useListen};
2
+ import{existsSync as T,readdirSync as Y,statSync as G}from"fs";import{extname as J,join as k,resolve as q}from"path";import W from"process";function z(e){return e}async function C(e={}){let n=e.dir??k(W.cwd(),"app","Listeners"),t=e.extensions??[".ts",".js"],r={warn:e.log?.warn??((a)=>console.warn(a)),error:e.log?.error??((a)=>console.error(a)),info:e.log?.info??((a)=>console.info(a))};if(!T(n))return 0;let s=j(n,t);if(s.length===0)return 0;let o=0;for(let a of s)try{let u=await import(a),v=u?.default??u;if(typeof v==="function")continue;if(!Q(v)){r.warn(`[events/discover] ${a}: default export doesn't match ListenerModule shape ({ listensTo, handle }), skipping`);continue}for(let m of X(v.listensTo)){if(!D(m,a))continue;R(m,(x)=>v.handle(x,m)),o++}}catch(u){r.error(`[events/discover] failed to import ${a}: ${u instanceof Error?u.message:String(u)}`)}if(o>0)r.info(`[events/discover] registered ${o} listener${o===1?"":"s"} from ${n}`);return o}function j(e,n){let t=[],r=Y(e);for(let s of r){let o=k(e,s),a=G(o);if(a.isDirectory())t.push(...j(o,n));else if(a.isFile()&&n.includes(J(s)))t.push(o)}return t}function Q(e){let n=e?.listensTo;return!!e&&typeof e==="object"&&(typeof n==="string"||Array.isArray(n))&&typeof e.handle==="function"}function X(e){return(Array.isArray(e)?e:[e]).map((t)=>String(t).trim()).filter(Boolean)}var K=new Set;function D(e,n){let t=`${e}\x00${n}`;if(K.has(t))return!1;return K.add(t),!0}function Z(){K.clear()}async function ee(e={}){let n=e.base??W.cwd(),t={warn:e.log?.warn??((s)=>console.warn(s)),error:e.log?.error??((s)=>console.error(s)),info:e.log?.info??((s)=>console.info(s))},r=0;if(r+=await ne(n,t),r+=await C({...e,dir:e.dir??k(n,"app","Listeners"),log:{...t,info:()=>{}}}),r>0)t.info(`[events] registered ${r} listener${r===1?"":"s"}`);return r}async function ne(e,n){let t=["ts","js"].map((o)=>k(e,"app",`Events.${o}`)).find((o)=>T(o));if(!t)return 0;let r;try{let o=await import(t);r=o?.default??o}catch(o){return n.error(`[events] failed to read ${t}: ${o instanceof Error?o.message:String(o)}`),0}if(!r||typeof r!=="object")return 0;let s=0;for(let[o,a]of Object.entries(r))for(let u of Array.isArray(a)?a:[a]){if(typeof u!=="string"||!u.trim())continue;let v=await ie(e,u.trim());if(!v){n.warn(`[events] ${o}: no listener or action called ${u}`);continue}if(!D(o,v.id))continue;let{handle:m,validations:x}=v;R(o,(H)=>(te(o,u,H,x,n),m(H,o))),s++}return s}function te(e,n,t,r,s){if(!r||typeof t!=="object"||t===null)return;let o=t,a=[];for(let[u,v]of Object.entries(r)){let m=v?.rule?.validate;if(typeof m!=="function")continue;try{if(!m(o[u]).valid)a.push(u)}catch{a.push(u)}}if(a.length)s.warn(`[events] ${e}: payload does not match what ${n} declares (${a.join(", ")})`)}var P=new Map;async function O(e,n,t){let r=`${e}:${n}`,s=P.get(r);if(s)return s;let o=(async()=>{try{let a=k(e,"storage","framework","auto-imports"),v=(await import(k(a,`${n}.ts`)))[t];if(!v)return null;return Object.fromEntries(Object.entries(v).map(([m,x])=>[m,q(a,x)]))}catch{return null}})();return P.set(r,o),o}async function re(e,n){let t=await O(e,"listeners","listeners"),r=await O(e,"actions","actions");if(!t&&!r)return null;return t?.[n]??r?.[`Actions/${n}`]??null}function se(){P.clear()}function oe(e){let n=[k(e,"app"),k(e,"storage","framework","defaults","app")];try{let t=Bun.resolveSync("@stacksjs/defaults/package.json",e);n.push(k(t.slice(0,t.lastIndexOf("/")),"app"))}catch{}return n.filter((t)=>T(t))}async function ie(e,n){let t=[],r=await re(e,n);if(r)t.push(r);for(let s of oe(e))for(let o of["Listeners","Actions"])for(let a of["ts","js"])t.push(k(s,o,`${n}.${a}`));for(let s of t){if(!T(s))continue;try{let o=await import(s),a=o?.default??o,u=a?.handle;if(typeof u!=="function")continue;return{id:s,handle:u.bind(a),validations:a?.validations}}catch{continue}}return null}var U=Symbol.for("stacks.events.handler.error"),V=Symbol.for("stacks.events.handler.priority");function ae(e){if(e&&typeof e==="object"||typeof e==="function"){let n=e[V];return typeof n==="number"&&Number.isFinite(n)?n:0}return 0}function A(e){return e.map((n,t)=>({h:n,i:t,p:ae(n)})).sort((n,t)=>t.p-n.p||n.i-t.i).map((n)=>n.h)}function S(e,n,t){console.error(`[Events] ${e} for '${String(n)}':`,t)}function b(e){return!!e&&typeof e.catch==="function"}function M(e){let n=e??new Map,t=new Map,r=(i,f)=>{let d=t.get(i);if(!d)d=new RegExp(`^${i.replace(/\*/g,".*")}$`),t.set(i,d);return d.test(f)};function s(i,f,d){if(d?.priority!==void 0&&Number.isFinite(d.priority))f[V]=d.priority;let y=n.get(i);if(y)y.push(f);else n.set(i,[f])}function o(i,f){let d=(...y)=>(a(i,d),f(...y));d[U]=f,s(i,d)}function a(i,f){let d=n.get(i);if(!d)return;if(!f){n.set(i,[]);return}for(let y=d.length-1;y>=0;y--){let E=d[y];if(E===f||E?.[U]===f)d.splice(y,1)}}function u(i){if(i===void 0)n.clear();else n.delete(i)}function v(i){return n.get(i)?.length??0}function m(i,f){let d=n.get(i)?.slice(),y=n.get("*")?.slice(),E=d?A(d):void 0,w=y?A(y):void 0;if(E)for(let g of E)try{let c=g(f);if(b(c))c.catch((l)=>S("Async handler error",i,l))}catch(c){S("Handler error",i,c)}let p=String(i);if(n.forEach((g,c)=>{let l=String(c);if(l===p||l==="*"||!l.includes("*"))return;if(r(l,p))for(let _ of A(g.slice()))try{let L=_(i,f);if(b(L))L.catch((B)=>S(`Async pattern handler '${l}' error`,i,B))}catch(L){S(`Pattern handler '${l}' error`,i,L)}}),w)for(let g of w)try{let c=g(i,f);if(b(c))c.catch((l)=>S("Async wildcard handler error",i,l))}catch(c){S("Wildcard handler error",i,c)}}async function x(i,f){let d=[],y=async(p,g)=>{if(!p)return;for(let c of A(p.slice()))try{let l=g?c(i,f):c(f);d.push(b(l)?await l:l)}catch(l){S("Awaited handler error",i,l),d.push(void 0)}};await y(n.get(i),!1);let E=String(i),w=[];n.forEach((p,g)=>{let c=String(g);if(c===E||c==="*"||!c.includes("*"))return;if(r(c,E))w.push(c)});for(let p of w)await y(n.get(p),!0);return await y(n.get("*"),!0),d}async function H(i,f){let d=[],y=async(p,g)=>{if(!p)return;for(let c of A(p.slice()))try{let l=g?c(i,f):c(f),_=b(l)?await l:l;d.push({ok:!0,value:_})}catch(l){let _=l instanceof Error?l:Error(String(l));d.push({ok:!1,error:_})}};await y(n.get(i),!1);let E=String(i),w=[];n.forEach((p,g)=>{let c=String(g);if(c===E||c==="*"||!c.includes("*"))return;if(r(c,E))w.push(c)});for(let p of w)await y(n.get(p),!0);return await y(n.get("*"),!0),d}return{all:n,on:s,once:o,off:a,emit:m,emitAsync:x,emitAndCollect:H,removeAllListeners:u,listenerCount:v}}var pe=M,He=M;function ce(e,n){let t=(r)=>`${n}:${r}`;return{on(r,s,o){e.on(t(r),s,o)},once(r,s){e.once(t(r),s)},off(r,s){e.off(t(r),s)},emit(r,s){e.emit(t(r),s)},emitAsync(r,s){return e.emitAsync(t(r),s)},emitAndCollect(r,s){return e.emitAndCollect(t(r),s)},listenerCount(r){return e.listenerCount(t(r))}}}function ge(e){return e}var F=Symbol.for("stacks.events.emitter"),I=globalThis,N=I[F]??(I[F]=M()),h=N,me=N,{emit:de,emitAsync:Ee,emitAndCollect:ke}=h,we=de,{all:he,on:R,on:xe,once:Se,off:_e}=h;function Ae(e){return ce(N,e)}export{he as all,M as createEmitter,He as default,ge as defineEvents,z as defineListener,C as discoverListeners,de as dispatch,ke as dispatchAndCollect,Ee as dispatchAsync,h as emitter,N as events,R as listen,pe as mitt,_e as off,Se as once,ee as registerAppListeners,Z as resetListenerRegistry,se as resetNameRegistries,ce as scope,Ae as scopedEvents,we as useEvent,me as useEvents,xe as useListen};
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@stacksjs/events",
3
3
  "type": "module",
4
4
  "sideEffects": false,
5
- "version": "0.74.19",
5
+ "version": "0.74.21",
6
6
  "description": "Functional event emitting.",
7
7
  "author": "Chris Breuer",
8
8
  "contributors": [