@stacksjs/events 0.75.208 → 0.75.211
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 +4 -1
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{existsSync as _,readdirSync as
|
|
2
|
+
import{existsSync as _,readdirSync as ie,statSync as ae}from"fs";import{extname as ce,join as k}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??k(M.cwd(),"app","Listeners"),t=e.extensions??[".ts",".js"],r={warn:e.log?.warn??((i)=>console.warn(i)),error:e.log?.error??((i)=>console.error(i)),info:e.log?.info??((i)=>console.info(i))};if(!_(n))return 0;let s=Y(n,t);if(s.length===0)return 0;let o=0;for(let i of s)try{let d=await import(i),v=d?.default??d;if(typeof v==="function")continue;if(!le(v)){r.warn(`[events/discover] ${i}: default export doesn't match ListenerModule shape ({ listensTo, handle }), skipping`);continue}for(let E of ue(v.listensTo)){if(!J(E,i))continue;W(E,(b)=>v.handle(b,E)),o++}}catch(d){r.error(`[events/discover] failed to import ${i}: ${d instanceof Error?d.message:String(d)}`)}if(o>0)r.info(`[events/discover] registered ${o} listener${o===1?"":"s"} from ${n}`);return o}function Y(e,n){let t=[],r=ie(e);for(let s of r){let o=k(e,s),i=ae(o);if(i.isDirectory())t.push(...Y(o,n));else if(i.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"),C=globalThis[F]??(globalThis[F]=new Set);function J(e,n){let t=`${e}\x00${n}`;if(C.has(t))return!1;return C.add(t),!0}function fe(){C.clear(),delete S()[R],S()[K]=z}var R=Symbol.for("stacks.events.appListenersBoot"),K=Symbol.for("stacks.events.dispatchObserver");function S(){return globalThis}function O(){return S()[R]!==void 0}function ye(e={}){let n=S(),t=n[R];if(t)return t;let r=(async()=>{let s=e.base??M.cwd(),o=await Q(e);if(o===0){let i=await q(s);if(i>0)(e.log?.warn??((v)=>console.warn(v)))(`[events] app/Events.ts declares ${i} listener${i===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)=>k(e,"app",`Events.${t}`)).find((t)=>_(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=S();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(!S()[K]&&!O())S()[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 ve(n,t),r+=await G({...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 ve(e,n){let t=["ts","js"].map((o)=>k(e,"app",`Events.${o}`)).find((o)=>_(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,i]of Object.entries(r))for(let d of Array.isArray(i)?i:[i]){if(typeof d!=="string"||!d.trim())continue;let v=await ke(e,d.trim());if(!v){n.warn(`[events] ${o}: no listener or action called ${d}`);continue}if(!J(o,v.id))continue;let{handle:E,validations:b}=v;W(o,(A)=>(pe(o,d,A,b,n),E(A,o))),s++}return s}function pe(e,n,t,r,s){if(!r||typeof t!=="object"||t===null)return;let o=t,i=[];for(let[d,v]of Object.entries(r)){let E=v?.rule?.validate;if(typeof E!=="function")continue;try{if(!E(o[d]).valid)i.push(d)}catch{i.push(d)}}if(i.length)s.warn(`[events] ${e}: payload does not match what ${n} declares (${i.join(", ")})`)}var j=new Map;async function V(e,n,t){let r=`${e}:${n}`,s=j.get(r);if(s)return s;let o=(async()=>{let i=k(e,"storage","framework","auto-imports"),d=k(i,`${n}.ts`);if(!_(d))return null;let E=(await import(d))[t];if(!E)throw Error(`Invalid ${t} registry: ${d}`);return Object.fromEntries(Object.entries(E).map(([b,A])=>[b,U(A,i)]))})();return j.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;return t?.[n]??r?.[`Actions/${n}`]??null}function me(){j.clear()}function Ee(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))}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 i of["ts","js"])t.push(k(s,o,`${n}.${i}`));for(let s of t){if(!_(s))continue;try{let o=await import(s),i=o?.default??o,d=i?.handle;if(typeof d!=="function")continue;return{id:s,handle:d.bind(i),validations:i?.validations}}catch{continue}}return null}var X=Symbol.for("stacks.events.handler.error"),ne=Symbol.for("stacks.events.handler.priority");function he(e){if(e&&typeof e==="object"||typeof e==="function"){let n=e[ne];return typeof n==="number"&&Number.isFinite(n)?n:0}return 0}function L(e){if(e.length<2)return e;return e.map((n,t)=>({h:n,i:t,p:he(n)})).sort((n,t)=>t.p-n.p||n.i-t.i).map((n)=>n.h)}function x(e,n,t){console.error(`[Events] ${e} for '${String(n)}':`,t)}function T(e){return!!e&&typeof e.catch==="function"}function N(e){let n=e??new Map,t=new WeakMap,r=(a,y,l)=>{let f=t.get(l),p=f?.key===a?f.re:void 0;if(!p)p=new RegExp(`^${a.replace(/\*/g,".*")}$`),t.set(l,{key:a,re:p});return p.test(y)};function s(a,y,l){if(l?.priority!==void 0&&Number.isFinite(l.priority))y[ne]=l.priority;let f=n.get(a);if(f)f.push(y);else n.set(a,[y])}function o(a,y){let l=(...f)=>(i(a,l),y(...f));l[X]=y,s(a,l)}function i(a,y){let l=n.get(a);if(!l)return;if(!y){n.set(a,[]);return}for(let f=l.length-1;f>=0;f--){let p=l[f];if(p===y||p?.[X]===y)l.splice(f,1)}}function d(a){if(a===void 0)n.clear();else n.delete(a)}function v(a){return n.get(a)?.length??0}function E(a,y){let l=n.get(a)?.slice(),f=n.get("*")?.slice(),p=l?L(l):void 0,h=f?L(f):void 0;if(p)for(let m of p)try{let c=m(y);if(T(c))c.catch((u)=>x("Async handler error",a,u))}catch(c){x("Handler error",a,c)}let g=String(a);if(n.forEach((m,c)=>{let u=String(c);if(u===g||u==="*"||!u.includes("*"))return;if(r(u,g,m))for(let H of L(m.slice()))try{let P=H(a,y);if(T(P))P.catch((te)=>x(`Async pattern handler '${u}' error`,a,te))}catch(P){x(`Pattern handler '${u}' error`,a,P)}}),h)for(let m of h)try{let c=m(a,y);if(T(c))c.catch((u)=>x("Async wildcard handler error",a,u))}catch(c){x("Wildcard handler error",a,c)}}async function b(a,y){let l=[],f=async(g,m)=>{if(!g)return;for(let c of L(g.slice()))try{let u=m?c(a,y):c(y);l.push(T(u)?await u:u)}catch(u){x("Awaited handler error",a,u),l.push(void 0)}};await f(n.get(a),!1);let p=String(a),h=[];n.forEach((g,m)=>{let c=String(m);if(c===p||c==="*"||!c.includes("*"))return;if(r(c,p,g))h.push(c)});for(let g of h)await f(n.get(g),!0);return await f(n.get("*"),!0),l}async function A(a,y){let l=[],f=async(g,m)=>{if(!g)return;for(let c of L(g.slice()))try{let u=m?c(a,y):c(y),H=T(u)?await u:u;l.push({ok:!0,value:H})}catch(u){let H=u instanceof Error?u:Error(String(u));l.push({ok:!1,error:H})}};await f(n.get(a),!1);let p=String(a),h=[];n.forEach((g,m)=>{let c=String(m);if(c===p||c==="*"||!c.includes("*"))return;if(r(c,p,g))h.push(c)});for(let g of h)await f(n.get(g),!0);return await f(n.get("*"),!0),l}return{all:n,on:s,once:o,off:i,emit:E,emitAsync:b,emitAndCollect:A,removeAllListeners:d,listenerCount:v}}var Oe=N,Ge=N;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,B=ee[Z]??(ee[Z]=N()),w=B,Ce=B,be=Symbol.for("stacks.events.dispatchObserver");function D(e){let n=globalThis[be];if(n)n(String(e))}var Se=(e,n)=>(D(e),w.emit(e,n)),je=(e,n)=>(D(e),w.emitAsync(e,n)),We=(e,n)=>(D(e),w.emitAndCollect(e,n)),Ne=Se,{all:Be,on:W,on:De,once:Ie,off:Ue}=w;function Fe(e){return we(B,e)}export{Be as all,O as appListenersBooted,ye as bootAppListeners,N as createEmitter,Ge as default,Me as defineEvents,de as defineListener,G as discoverListeners,Se as dispatch,We as dispatchAndCollect,je as dispatchAsync,w as emitter,B as events,W 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,Ne as useEvent,Ce 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.211",
|
|
6
6
|
"description": "Functional event emitting.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"contributors": [
|
|
@@ -61,5 +61,8 @@
|
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"better-dx": "^0.2.24"
|
|
64
|
+
},
|
|
65
|
+
"dependencies": {
|
|
66
|
+
"@stacksjs/path": "0.75.211"
|
|
64
67
|
}
|
|
65
68
|
}
|