@stacksjs/events 0.75.482 → 0.75.484
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.
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{existsSync as
|
|
2
|
+
import{existsSync as S,readdirSync as ie,statSync as ae}from"fs";import{extname as ce,join as h}from"path";import M from"process";import{existsSync as re}from"fs";import{isAbsolute as se,resolve as I}from"path";import{fileURLToPath as oe}from"url";function U(e,n){if(e.startsWith("file:"))return oe(e);if(e.startsWith(".")||se(e))return I(n,e);if(e.startsWith("@"))return Bun.resolveSync(e,n);let t=I(n,e);if(re(t))return t;return Bun.resolveSync(e,n)}function de(e){return e}async function G(e={}){let n=e.dir??h(M.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(!S(n))return 0;let s=J(n,t);if(s.length===0)return 0;let o=0;for(let a of s)try{let l=await import(a),p=l?.default??l;if(typeof p==="function")continue;if(!le(p)){r.warn(`[events/discover] ${a}: default export doesn't match ListenerModule shape ({ listensTo, handle }), skipping`);continue}for(let E of ue(p.listensTo)){if(!Y(E,a))continue;j(E,(A)=>p.handle(A,E)),o++}}catch(l){r.error(`[events/discover] failed to import ${a}: ${l instanceof Error?l.message:String(l)}`)}if(o>0)r.info(`[events/discover] registered ${o} listener${o===1?"":"s"} from ${n}`);return o}function J(e,n){let t=[],r=ie(e);for(let s of r){let o=h(e,s),a=ae(o);if(a.isDirectory())t.push(...J(o,n));else if(a.isFile()&&n.includes(ce(s)))t.push(o)}return t}function le(e){let n=e?.listensTo;return!!e&&typeof e==="object"&&(typeof n==="string"||Array.isArray(n))&&typeof e.handle==="function"}function ue(e){return(Array.isArray(e)?e:[e]).map((t)=>String(t).trim()).filter(Boolean)}var F=Symbol.for("stacks.events.claimedListeners"),W=globalThis[F]??(globalThis[F]=new Set);function Y(e,n){let t=`${e}\x00${n}`;if(W.has(t))return!1;return W.add(t),!0}function fe(){W.clear(),delete b()[R],b()[K]=z}var R=Symbol.for("stacks.events.appListenersBoot"),K=Symbol.for("stacks.events.dispatchObserver");function b(){return globalThis}function O(){return b()[R]!==void 0}function ve(e={}){let n=b(),t=n[R];if(t)return t;let r=(async()=>{let s=e.base??M.cwd(),o=await Q(e);if(o===0){let a=await q(s);if(a>0)(e.log?.warn??((p)=>console.warn(p)))(`[events] app/Events.ts declares ${a} listener${a===1?"":"s"}, but none could be registered in this process, so the events they handle will reach nobody. See the errors above.`)}return o})();return n[R]=r,r}async function q(e){let n=["ts","js"].map((t)=>h(e,"app",`Events.${t}`)).find((t)=>S(t));if(!n)return 0;try{let t=await import(n),r=t?.default??t;if(!r||typeof r!=="object")return 0;return Object.values(r).flatMap((s)=>Array.isArray(s)?s:[s]).filter((s)=>typeof s==="string"&&s.trim()!=="").length}catch{return 0}}function z(e){let n=b();if(delete n[K],O())return;let t=M.cwd();q(t).then((r)=>{if(r===0||O())return;console.warn(`[events] "${e}" was dispatched, but this process never registered the application's listeners, so nothing handles it or any later event (app/Events.ts declares ${r}). An entry point that runs application code must call injectGlobalAutoImports() from @stacksjs/server, or bootAppListeners() from @stacksjs/events, before its first dispatch.`)})}if(!b()[K]&&!O())b()[K]=z;async function Q(e={}){let n=e.base??M.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 ye(n,t),r+=await G({...e,dir:e.dir??h(n,"app","Listeners"),log:{...t,info:()=>{}}}),r>0)t.info(`[events] registered ${r} listener${r===1?"":"s"}`);return r}async function ye(e,n){let t=["ts","js"].map((o)=>h(e,"app",`Events.${o}`)).find((o)=>S(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 l of Array.isArray(a)?a:[a]){if(typeof l!=="string"||!l.trim())continue;let p=await ke(e,l.trim());if(!p){n.warn(`[events] ${o}: no listener or action called ${l}`);continue}if(!Y(o,p.id))continue;let{handle:E,validations:A}=p;j(o,(T)=>(pe(o,l,T,A,n),E(T,o))),s++}return s}function pe(e,n,t,r,s){if(!r||typeof t!=="object"||t===null)return;let o=t,a=[];for(let[l,p]of Object.entries(r)){let E=p?.rule?.validate;if(typeof E!=="function")continue;try{if(!E(o[l]).valid)a.push(l)}catch{a.push(l)}}if(a.length)s.warn(`[events] ${e}: payload does not match what ${n} declares (${a.join(", ")})`)}var C=new Map;async function V(e,n,t){let r=`${e}:${n}`,s=C.get(r);if(s)return s;let o=(async()=>{let a=h(e,"storage","framework","auto-imports"),l=h(a,`${n}.ts`);if(!S(l))return null;let E=(await import(l))[t];if(!E)throw Error(`Invalid ${t} registry: ${l}`);return E})();return C.set(r,o),o}async function ge(e,n){let t=await V(e,"listeners","listeners"),r=await V(e,"actions","actions");if(!t&&!r)return null;let s=t?.[n]??r?.[`Actions/${n}`];return s?U(s,h(e,"storage/framework/auto-imports")):null}function me(){C.clear()}function Ee(e){let n=[h(e,"app"),h(e,"storage","framework","defaults","app")];try{let t=Bun.resolveSync("@stacksjs/defaults/package.json",e);n.push(h(t.slice(0,t.lastIndexOf("/")),"app"))}catch{}return n.filter((t)=>S(t))}async function ke(e,n){let t=[],r=await ge(e,n);if(r)t.push(r);for(let s of Ee(e))for(let o of["Listeners","Actions"])for(let a of["ts","js"])t.push(h(s,o,`${n}.${a}`));for(let s of t){if(!S(s))continue;try{let o=await import(s),a=o?.default??o,l=a?.handle;if(typeof l!=="function")continue;return{id:s,handle:l.bind(a),validations:a?.validations}}catch{continue}}return null}var X=Symbol.for("stacks.events.handler.error");function H(e,n){let t=n.slice(),r=e.get(n);if(t.length<2||!r)return t;return t.map((s,o)=>({h:s,i:o,p:r.get(s)??0})).sort((s,o)=>o.p-s.p||s.i-o.i).map((s)=>s.h)}function he(e){return new RegExp(`^${e.replace(/[\\^$+?()[\]{}|]/g,"\\$&").replace(/\*/g,".*")}$`)}function x(e,n,t){console.error(`[Events] ${e} for '${String(n)}':`,t)}function L(e){return!!e&&typeof e.catch==="function"}function B(e){let n=e??new Map,t=new WeakMap,r=new WeakMap,s=(i,v,d)=>{let f=r.get(d),y=f?.key===i?f.re:void 0;if(!y)y=he(i),r.set(d,{key:i,re:y});return y.test(v)};function o(i,v,d){let f=n.get(i);if(f)f.push(v);else n.set(i,f=[v]);if(d?.priority!==void 0&&Number.isFinite(d.priority)){let y=t.get(f);if(!y)t.set(f,y=new Map);y.set(v,d.priority)}}function a(i,v){let d=(...f)=>(l(i,d),v(...f));d[X]=v,o(i,d)}function l(i,v){let d=n.get(i);if(!d)return;if(!v){n.set(i,[]);return}let f=t.get(d);for(let y=d.length-1;y>=0;y--){let k=d[y];if(k===v||k?.[X]===v){if(d.splice(y,1),!d.includes(k))f?.delete(k)}}}function p(i){if(i===void 0)n.clear();else n.delete(i)}function E(i){return n.get(i)?.length??0}function A(i,v){let d=n.get(i),f=n.get("*"),y=d?H(t,d):void 0,k=f?H(t,f):void 0;if(y)for(let m of y)try{let c=m(v);if(L(c))c.catch((u)=>x("Async handler error",i,u))}catch(c){x("Handler error",i,c)}let g=String(i);if(n.forEach((m,c)=>{let u=String(c);if(u===g||u==="*"||!u.includes("*"))return;if(s(u,g,m))for(let _ of H(t,m))try{let P=_(i,v);if(L(P))P.catch((te)=>x(`Async pattern handler '${u}' error`,i,te))}catch(P){x(`Pattern handler '${u}' error`,i,P)}}),k)for(let m of k)try{let c=m(i,v);if(L(c))c.catch((u)=>x("Async wildcard handler error",i,u))}catch(c){x("Wildcard handler error",i,c)}}async function T(i,v){let d=[],f=async(g,m)=>{if(!g)return;for(let c of H(t,g))try{let u=m?c(i,v):c(v);d.push(L(u)?await u:u)}catch(u){x("Awaited handler error",i,u),d.push(void 0)}};await f(n.get(i),!1);let y=String(i),k=[];n.forEach((g,m)=>{let c=String(m);if(c===y||c==="*"||!c.includes("*"))return;if(s(c,y,g))k.push(c)});for(let g of k)await f(n.get(g),!0);return await f(n.get("*"),!0),d}async function ne(i,v){let d=[],f=async(g,m)=>{if(!g)return;for(let c of H(t,g))try{let u=m?c(i,v):c(v),_=L(u)?await u:u;d.push({ok:!0,value:_})}catch(u){let _=u instanceof Error?u:Error(String(u));d.push({ok:!1,error:_})}};await f(n.get(i),!1);let y=String(i),k=[];n.forEach((g,m)=>{let c=String(m);if(c===y||c==="*"||!c.includes("*"))return;if(s(c,y,g))k.push(c)});for(let g of k)await f(n.get(g),!0);return await f(n.get("*"),!0),d}return{all:n,on:o,once:a,off:l,emit:A,emitAsync:T,emitAndCollect:ne,removeAllListeners:p,listenerCount:E}}var Oe=B,Ge=B;function we(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 Me(e){return e}var Z=Symbol.for("stacks.events.emitter"),ee=globalThis,N=ee[Z]??(ee[Z]=B()),w=N,We=N,be=Symbol.for("stacks.events.dispatchObserver");function D(e){let n=globalThis[be];if(n)n(String(e))}var xe=(e,n)=>(D(e),w.emit(e,n)),Ce=(e,n)=>(D(e),w.emitAsync(e,n)),je=(e,n)=>(D(e),w.emitAndCollect(e,n)),Be=xe,{all:Ne,on:j,on:De,once:Ie,off:Ue}=w;function Fe(e){return we(N,e)}export{Ne as all,O as appListenersBooted,ve as bootAppListeners,B as createEmitter,Ge as default,Me as defineEvents,de as defineListener,G as discoverListeners,xe as dispatch,je as dispatchAndCollect,Ce as dispatchAsync,w as emitter,N as events,j as listen,Oe as mitt,Ue as off,Ie as once,Q as registerAppListeners,fe as resetListenerRegistry,me as resetNameRegistries,we as scope,Fe as scopedEvents,Be as useEvent,We as useEvents,De 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.75.
|
|
5
|
+
"version": "0.75.484",
|
|
6
6
|
"description": "Functional event emitting.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"contributors": [
|
|
@@ -63,6 +63,6 @@
|
|
|
63
63
|
"better-dx": "^0.2.24"
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@stacksjs/path": "0.75.
|
|
66
|
+
"@stacksjs/path": "0.75.484"
|
|
67
67
|
}
|
|
68
68
|
}
|