fastevent 2.5.0 → 2.5.1

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.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var C=Object.defineProperty;var re=(r,e,t)=>e in r?C(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var o=(r,e)=>C(r,"name",{value:e,configurable:true});var h=(r,e,t)=>re(r,typeof e!="symbol"?e+"":e,t);var ne=Symbol.for("__FastEvent__"),oe=Symbol.for("__FastEventScope__"),j=class j extends Error{constructor(e){super(e);}};o(j,"FastEventError");var m=j,O=class O extends m{};o(O,"TimeoutError");var N=O,T=class T extends m{};o(T,"UnboundError");var L=T,R=class R extends m{};o(R,"AbortError");var _=R,F=class F extends m{};o(F,"CancelError");var b=F,z=class z extends m{};o(z,"QueueOverflowError");var B=z;var d=(function(r){return r[r.Transformed=1]="Transformed",r})({});function w(r,e,t,s){let i,n={},f={};return typeof r[0]=="object"?(Object.assign(f,r[0]),n=typeof r[1]=="boolean"?{retain:r[1]}:r[1]||{},i=r[0].meta):(f.type=r[0],f.payload=r[1],n=typeof r[2]=="boolean"?{retain:r[2]}:r[2]||{}),i=Object.assign({},e,t,n.meta,i),Object.keys(i).length===0?(i=void 0,delete f.meta):f.meta=i,n.executor===void 0&&(n.executor=s),[f,n]}o(w,"parseEmitArgs");function $(r){return r?typeof r=="object"&&"__FastEventScope__"in r:false}o($,"isFastEventScope");function S(r,e,t){let s=r[0],i=$(r[1])?r[1]:void 0,n=(i?r[2]:r[1])||{};return n.meta=Object.assign({},e,n?.meta),n.context=n.context!==void 0?n.context:t,[s,i,n]}o(S,"parseScopeArgs");function x(r,e){return Object.defineProperty(r,"name",{value:e||"anonymous",configurable:true}),r}o(x,"renameFn");function l(r){return r&&typeof r=="function"}o(l,"isFunction");var P=class P{constructor(e){h(this,"__FastEventScope__",true);h(this,"__events__");h(this,"__meta__");h(this,"__context__");h(this,"_options",{});h(this,"prefix","");h(this,"emitter");this._options=Object.assign({},this._initOptions(e));}get context(){return this.options.context||this}get options(){return this._options}get listeners(){return this.emitter.getListeners(this.prefix)}bind(e,t,s){this.emitter=e,this._options=Object.assign(this._options,{scope:t},s),t.length>0&&!t.endsWith(e.options.delimiter)&&(this.prefix=t+e.options.delimiter);}_initOptions(e){return e}_getScopeListener(e){let t=this.prefix;if(t.length===0)return e;if(!e)throw new Error;let s=this;return x(function(n,f){let a=f.rawEventType||n.type;if(a.startsWith(t)){let c=((f.flags||0)&d.Transformed)>0?n:Object.assign({},n,{type:a.substring(t.length)});return e.call(s.context,c,f)}},e.name)}_getScopeType(e){return e===void 0?void 0:this.prefix+e}_fixScopeType(e){return e.startsWith(this.prefix)?e.substring(this.prefix.length):e}on(){if(!this.emitter)throw new L;let e=[...arguments];return e[0]=this._getScopeType(e[0]),e[1]=this._getScopeListener(e[1]),this.emitter.on(...e)}once(){return this.on(arguments[0],arguments[1],Object.assign({},arguments[2],{count:1}))}onAny(){return this.on("**",...arguments)}off(){let e=arguments;typeof e[0]=="string"&&(e[0]=this._getScopeType(e[0])),this.emitter.off(...e);}offAll(){this.emitter.offAll(this.prefix.substring(0,this.prefix.length-1));}clear(){this.emitter.clear(this.prefix.substring(0,this.prefix.length-1));}emit(){let[e,t]=w(arguments,this.emitter.options.meta,this.options.meta,this.options.executor);return this._transformMessage(e,t),e.type=this._getScopeType(e.type),this.emitter.emit(e,t)}_transformMessage(e,t){l(this._options.transform)&&(t.rawEventType=this._getScopeType(e.type),t.flags=(t.flags||0)|d.Transformed,e.payload=this._options.transform.call(this,e));}async emitAsync(){return (await Promise.allSettled(this.emit.apply(this,arguments))).map(t=>t.status==="fulfilled"?t.value:t.reason)}async waitFor(){let e=arguments[0],t=arguments[1],s=await this.emitter.waitFor(this._getScopeType(e),t);return Object.assign({},s,{type:this._fixScopeType(s.type)})}scope(){let[e,t,s]=S(arguments,this.options.meta,this.options.context),i;return t?i=t:i=new P,i.bind(this.emitter,this.prefix+e,s),i}};o(P,"FastEventScope");var A=P;function k(r,e){let t=r.length,s=e.length;if(t!==s&&(s===0||e[s-1]!=="**"))return false;if(s>0&&e[s-1]==="**"){for(let i=0;i<s-1;i++)if(e[i]!=="*"&&e[i]!==r[i])return false;return true}for(let i=0;i<t;i++)if(e[i]!=="*"&&e[i]!==r[i])return false;return true}o(k,"isPathMatched");function V(r,e){let t=[];for(let s=r.length-1;s>=0;s--)e(r[s])&&(t.push(s),r.splice(s,1));return t.reverse()}o(V,"removeItem");function Fe(r){return r?typeof r=="object"&&"type"in r:false}o(Fe,"isFastEventMessage");function Ie(r){return r&&typeof r=="string"}o(Ie,"isString");var q=Symbol.for("__expandable__");function He(r){return r[q]=true,r}o(He,"expandable");function G(r){return r&&r[q]}o(G,"isExpandable");function J(r){return r&&typeof r=="object"&&"off"in r&&"listener"in r}o(J,"isSubsctiber");function Ve(r){return typeof r=="function"&&(r.toString().startsWith("class ")||r.prototype?.constructor===r)}o(Ve,"isClass");function Je(r){return r?typeof r=="object"&&"__FastEvent__"in r:false}o(Je,"isFastEvent");function K(r){if(r===null||typeof r!="object")return false;let e=r;return typeof e[Symbol.asyncIterator]=="function"||typeof e["@@asyncIterator"]=="function"}o(K,"isAsyncIterable");var X=o(()=>(r,e,t,s)=>r.map((i,n)=>s.call(r[n],i,e,t,true)),"parallel");function Y(r){for(let e=0;e<r.length;e++){let t=r[e];Array.isArray(t)&&G(t)&&(r.splice(e,1,...t),e+=t.length-1);}return r}o(Y,"expandEmitResults");function Z(r,e){return r.catch(t=>(e&&e(t),Promise.resolve(t)))}o(Z,"tryReturnError");var D=class D{constructor(e,t,s={}){h(this,"eventEmitter");h(this,"eventName");h(this,"buffer",[]);h(this,"resolvers",[]);h(this,"errorResolvers",[]);h(this,"isStopped",false);h(this,"error",null);h(this,"options");h(this,"currentSize");h(this,"hasNewMessage",false);h(this,"_listener");h(this,"_ready",false);h(this,"_listenOptions");h(this,"_cleanups",[]);this.eventEmitter=e,this.eventName=t;let i=20,n=100;this.options={size:s.size??i,maxExpandSize:s.maxExpandSize??n,expandOverflow:s.expandOverflow??"slide",overflow:s.overflow??"slide",lifetime:s.lifetime??0,onPush:s.onPush,onPop:s.onPop,onDrop:s.onDrop,onError:s.onError??(()=>true),signal:s.signal},this.currentSize=this.options.size,this._listener=this.onMessage.bind(this);}get listener(){return this._listener}get ready(){return this._ready}create(e){if(!this._ready){this._listenOptions=e;try{let t=this.eventEmitter.on(this.eventName,this._listener,e);if(this._cleanups.push(()=>t.off()),this.options.signal&&!this.options.signal.aborted){let s=o(()=>{this.off(!0);},"offFn");this.options.signal.addEventListener("abort",s),this._cleanups.push(()=>{this.options.signal.removeEventListener("abort",s);});}}finally{this._ready=true;}}}push(e){this.options.onPush?this.options.onPush(e,this.buffer):this.buffer.push(this.options.lifetime>0?[e,Date.now()]:[e,0]);}handleOverflow(e){switch(this.buffer.length>=this.options.maxExpandSize&&this.options.overflow==="expand"?this.options.expandOverflow:this.options.overflow){case "drop":return this.options.onDrop&&this.options.onDrop(e),false;case "expand":return this.currentSize=Math.min(this.currentSize+this.options.size,this.options.maxExpandSize),this.push(e),true;case "slide":let s=this.buffer.shift();return this.options.onDrop&&s&&this.options.onDrop(s[0]),this.push(e),true;case "throw":throw this.options.onDrop&&this.options.onDrop(e),new Error(`EventIterator queue overflow: buffer size (${this.currentSize}) exceeded`);default:return false}}onMessage(e,t){if(this.isStopped)return;let s=e;if(this.resolvers.length>0){this.resolvers.shift()({value:s,done:false});return}this.hasNewMessage=true,this.buffer.length<this.currentSize?this.push(s):this.handleOverflow(s);}off(e){this._ready&&(this.isStopped||(this.isStopped=true,this._cleanups.forEach(t=>t()),this._cleanups=[],this.buffer=[],this._ready=false,e?(this.errorResolvers.forEach(t=>{t(new _);}),this.errorResolvers=[]):(this.resolvers.forEach(t=>{t({value:void 0,done:true});}),this.resolvers=[]),this._ready=false));}async next(){if(this.error)return Promise.reject(this.error);if(this.isStopped&&this.buffer.length===0)return {value:void 0,done:true};if(this.buffer.length>0){let e,t;if(this.options.onPop){let s=this.options.onPop(this.buffer,this.hasNewMessage);s?[e,t]=s:[e,t]=this.buffer.shift()||[void 0,0];}else [e,t]=this.buffer.shift()||[void 0,0];if(this.hasNewMessage=false,e!==void 0)return this.options.lifetime>0&&Date.now()-t>this.options.lifetime?(this.options.onDrop&&this.options.onDrop(e),this.next()):{value:e,done:false}}return new Promise((e,t)=>{this.resolvers.push(e),this.errorResolvers.push(t);})}[Symbol.asyncIterator](){return this}async done(){return this.off(),{value:void 0,done:true}}async throw(e){return this.error=e,this.off(),Promise.reject(e)}async return(){return this.off(),{value:void 0,done:true}}[Symbol.dispose](){this.off();}on(){this.create(this._listenOptions),this.isStopped=false;}};o(D,"FastEventIterator");var I=D;function U(r,e,t={}){return new I(r,e,t)}o(U,"createAsyncEventIterator");function Q(r,e){return Array.isArray(e)&&e.forEach(t=>{r=x(t(r),r.name);}),r}o(Q,"wrapPipeListener");function M(r){return r!==null&&(typeof r=="object"||typeof r=="function")?new WeakRef(r):r}o(M,"getWeakRef");function W(r){return r.map(e=>e.status==="fulfilled"?e.value:e.reason)}o(W,"getPromiseResults");function ee(r){if(r==null)return false;let e=typeof r;return e!=="object"&&e!=="function"?false:typeof r.then=="function"}o(ee,"isPromise");async function te(r){try{return r instanceof Promise?await r:r}catch(e){return e instanceof Error?e:new Error(String(e))}}o(te,"resolveValue");var H=class H{constructor(e){h(this,"__FastEvent__",true);h(this,"listeners",{__listeners:[]});h(this,"_options");h(this,"_delimiter","/");h(this,"_context");h(this,"_hooks");h(this,"retainedMessages",new Map);h(this,"listenerCount",0);h(this,"types",null);this._options=Object.assign({debug:false,id:Math.random().toString(36).substring(2),delimiter:"/",context:null,ignoreErrors:true,meta:void 0,expandEmitResults:true,executor:X()},this._initOptions(e)),this._delimiter=this._options.delimiter,this._context=this._options.context;}get options(){return this._options}get context(){return this.options.context||this}get meta(){return this.options.meta}get id(){return this._options.id}get title(){return this._options.title||this.id||"FastEvent"}get hooks(){return this._hooks||(this._hooks={AddBeforeListener:[],AddAfterListener:[],RemoveListener:[],ClearListeners:[],ListenerError:[],BeforeExecuteListener:[],AfterExecuteListener:[]}),this._hooks}_execAfterExecuteListener(e,t){Promise.allSettled(t[1]).then(s=>{t[1]=W(s),e.apply(this,t);});}_executeHooks(e,t,s=false){if(setTimeout(()=>{if(!this._hooks)return;let i=this.hooks[e];Array.isArray(i)&&i.length>0&&Promise.allSettled(i.map(n=>{if(e==="AfterExecuteListener")this._execAfterExecuteListener(n,t);else return n.apply(this,t)}));}),!s){let i=this.options[`on${e}`];if(l(i))if(e==="AfterExecuteListener")this._execAfterExecuteListener(i,t);else return i.apply(this,t)}}_initOptions(e){return e}_addListener(e,t,s){let{count:i,prepend:n}=s,f=0;return [this._forEachNodes(e,u=>{let c=[t,i,0,s.tag,s.flags];n?(u.__listeners.splice(0,0,c),f=0):(u.__listeners.push(c),f=u.__listeners.length-1),this.listenerCount++;}),f]}_forEachNodes(e,t){if(e.length===0)return;let s=this.listeners;for(let i=0;i<e.length;i++){let n=e[i];if(n in s||(s[n]={__listeners:[]}),i===e.length-1){let f=s[n];return t(f,s),f}else s=s[n];}}_removeListener(e,t,s){s&&V(e.__listeners,i=>{i=Array.isArray(i)?i[0]:i;let n=i===s;return n&&(this.listenerCount--,this._executeHooks("RemoveListener",[t.join(this._delimiter),s,e])),n});}on(){let e=arguments[0],t=null,s,i=!l(arguments[1]);i?s=arguments[1]||{}:(t=arguments[1],s=arguments[2]||{});let n=Object.assign({count:0,flags:0,prepend:false},s);if(e.length===0)throw new Error("event type cannot be empty");if(i||t===null){let v=Object.assign({overflow:"expand",size:10,maxExpandSize:100},n.iterable),y=U(this,e,v);y.create(n);let p=this._executeHooks("AddBeforeListener",[e,y.listener,n]);if(p===false)throw new b;return K(p)?p:y}let f=this._executeHooks("AddBeforeListener",[e,t,n]);if(f===false)throw new b;if(J(f))return f;let a=e.split(this._delimiter);if(n.pipes&&n.pipes.length>0&&(t=Q(t,n.pipes)),l(n.filter)||l(n.off)){let v=t,y=o(()=>u&&this._removeListener(u,a,t),"off");t=x(function(p,E){if(l(n.off)&&n.off.call(this,p,E)){y();return}if(l(n.filter)){if(n.filter.call(this,p,E))return v.call(this,p,E)}else return v.call(this,p,E)},t.name);}let[u,c]=this._addListener(a,t,n),g=o(()=>u&&this._removeListener(u,a,t),"off");return this._executeHooks("AddAfterListener",[e,u]),this._emitRetainMessage(e,u,c),{off:g,listener:t,[Symbol.dispose](){g();}}}once(){return l(arguments[1])?this.on(arguments[0],arguments[1],Object.assign({},arguments[2],{count:1})):this.on(arguments[0],Object.assign({},arguments[2],{count:1}))}onAny(){return this.on("**",...arguments)}off(){let e=arguments,t=l(e[0])?void 0:e[0],s=l(e[0])?e[0]:e[1],i=t?t.split(this._delimiter):[],n=t?t.includes("*"):false;if(t&&!n)this._traverseToPath(this.listeners,i,f=>{s?this._removeListener(f,i,s):t&&(f.__listeners=[]);});else {let f=n?[]:i;this._traverseListeners(this.listeners,f,(a,u)=>{(s!==void 0||n&&k(a,i))&&(s?this._removeListener(u,i,s):u.__listeners=[]);});}}offAll(e){if(e){let t=e.split(this._delimiter),s=0;this._traverseListeners(this.listeners,t,(i,n)=>{s+=n.__listeners.length;try{n.__listeners.forEach(f=>{this._executeHooks("RemoveListener",[i.join(this.options.delimiter),f[0],n]);});}finally{n.__listeners=[];}}),this.listenerCount-=s,this._removeRetainedEvents(e);}else try{let t=0;this._traverseListeners(this.listeners,[],(s,i)=>{t+=i.__listeners.length;}),this.listenerCount-=t,this.retainedMessages.clear(),this.listeners={__listeners:[]};}finally{this._executeHooks("ClearListeners",[]);}}_removeRetainedEvents(e){e||this.retainedMessages.clear(),e?.endsWith(this._delimiter)&&(e+=this._delimiter),this.retainedMessages.delete(e);for(let t of this.retainedMessages.keys())t.startsWith(e)&&this.retainedMessages.delete(t);}clear(e){this.offAll(e),this._removeRetainedEvents(e);}_emitRetainMessage(e,t,s){let i=[];if(e.includes("*")){let n=e.split(this._delimiter);this.retainedMessages.forEach((f,a)=>{let u=a.split(this._delimiter);k(u,n)&&i.push(f);});}else this.retainedMessages.has(e)&&i.push(this.retainedMessages.get(e));t&&i.forEach(n=>{this._executeListeners([t],n,{},f=>f[0]===t.__listeners[s][0]);});}_traverseToPath(e,t,s,i=0,n){if(i>=t.length){s(e);return}let f=t[i];if(n===true){this._traverseToPath(e,t,s,i+1,true);return}"*"in e&&this._traverseToPath(e["*"],t,s,i+1),"**"in e&&this._traverseToPath(e["**"],t,s,i+1,true),f in e&&this._traverseToPath(e[f],t,s,i+1);}_traverseListeners(e,t,s){let i=e;t&&t.length>0&&this._traverseToPath(e,t,f=>{i=f;});let n=o((f,a,u)=>{a(u,f);for(let[c,g]of Object.entries(f))c.startsWith("__")||g&&n(g,a,[...u,c]);},"traverseNodes");n(i,s,[]);}_onListenerError(e,t,s,i){if(i instanceof Error&&(i._emitter=`${e.name||"anonymous"}:${t.type}`),this._executeHooks("ListenerError",[i,e,t,s]),this._options.ignoreErrors)return i;throw i}_executeListener(e,t,s,i=false){let n=e[0];try{if(this.options.debug&&(e.length=5),s&&s.abortSignal&&s.abortSignal.aborted)return this._onListenerError(n,t,s,new _(e[0].name));let f=((s?.flags||0)&d.Transformed)>0,a=n.call(this.context,f?t.payload:t,s);return i&&a&&a instanceof Promise&&(a=Z(a,u=>this._onListenerError(n,t,s,u))),this.options.debug&&(Promise.resolve(a),ee(a)?te(a).then(u=>{e[5]=M(u);}):e[5]=M(a)),a}catch(f){let a=this._onListenerError(n,t,s,f);return a instanceof Error&&(e[5]=M(a)),a}}_getListenerExecutor(e){if(!e)return;let t=e.executor||this._options.executor;if(l(t))return t}_executeListeners(e,t,s,i){if(!e||e.length===0)return [];let n=[];for(let a of e){let u=0;for(let c of a.__listeners)(!i||i(c,a))&&n.push([c,u++,a.__listeners]);}this._decListenerExecCount(n);let f=this._getListenerExecutor(s);if(f){let a=f(n.map(u=>u[0]),t,s,this._executeListener.bind(this));return Array.isArray(a)?a:[a]}else return n.map(a=>this._executeListener(a[0],t,s,true))}_decListenerExecCount(e){for(let t=e.length-1;t>=0;t--){let s=e[t][0];s[2]++,s[1]>0&&s[1]<=s[2]&&e[t][2].splice(t,1);}}getListeners(e){let t=[],s=e.split(this._delimiter);this._traverseToPath(this.listeners,s,n=>{t.push(n);});let i=[];return t.map(n=>{i.push(...n.__listeners);}),i}clearRetainMessages(e){e?this.retainedMessages.delete(e):this.retainedMessages.clear();}emit(){let[e,t]=w(arguments,this.options.meta);l(t.parseArgs)&&t.parseArgs(e,t);let s=e.type.split(this._delimiter);t.retain&&this.retainedMessages.set(e.type,e);let i=[],n=[];this._traverseToPath(this.listeners,s,a=>{n.push(a);});let f=this._executeHooks("BeforeExecuteListener",[e,t]);if(Array.isArray(f))return f;if(f===false)throw new _(e.type);if(l(this._options.transform)){let a=this._options.transform.call(this,e);a!==e&&(e.payload=a,t.rawEventType=e.type,t.flags=(t.flags||0)|d.Transformed);}return i.push(...this._executeListeners(n,e,t)),this._options.expandEmitResults&&Y(i),this._executeHooks("AfterExecuteListener",[e,i,n]),i}async emitAsync(){let e=await Promise.allSettled(this.emit.apply(this,arguments));return W(e)}waitFor(){let e=arguments[0],t=arguments[1];return new Promise((s,i)=>{let n,f,a=o(u=>{clearTimeout(n),f?.off(),s(u);},"listener");t&&t>0&&(n=setTimeout(()=>{f?.off(),i(new Error("wait for event<"+e+"> is timeout"));},t)),f=this.on(e,a);})}scope(){let[e,t,s]=S(arguments,this.options.meta,this.options.context),i;return t?i=t:i=new A,i.bind(this,e,s),i}};o(H,"FastEvent");var se=H;export{_ as AbortError,b as CancelError,se as FastEvent,m as FastEventError,I as FastEventIterator,d as FastEventListenerFlags,A as FastEventScope,B as QueueOverflowError,N as TimeoutError,L as UnboundError,oe as __FastEventScope__,ne as __FastEvent__,q as __expandable__,U as createAsyncEventIterator,He as expandable,K as isAsyncIterable,Ve as isClass,G as isExpandable,Je as isFastEvent,Fe as isFastEventMessage,$ as isFastEventScope,l as isFunction,k as isPathMatched,Ie as isString,J as isSubsctiber};//# sourceMappingURL=index.mjs.map
1
+ var V=Object.defineProperty;var B=(n,e,t)=>e in n?V(n,e,{enumerable:true,configurable:true,writable:true,value:t}):n[e]=t;var l=(n,e,t)=>B(n,typeof e!="symbol"?e+"":e,t);var Q=Symbol.for("__FastEvent__"),J=Symbol.for("__FastEventScope__"),E=class extends Error{constructor(e){super(e);}},O=class extends E{},x=class extends E{},y=class extends E{},d=class extends E{},w=class extends E{};var q=(e=>(e[e.Transformed=1]="Transformed",e))(q||{});function T(n,e,t,s){let r,a={},i={};return typeof n[0]=="object"?(Object.assign(i,n[0]),a=typeof n[1]=="boolean"?{retain:n[1]}:n[1]||{},r=n[0].meta):(i.type=n[0],i.payload=n[1],a=typeof n[2]=="boolean"?{retain:n[2]}:n[2]||{}),r=Object.assign({},e,t,a.meta,r),Object.keys(r).length===0?(r=void 0,delete i.meta):i.meta=r,a.executor===void 0&&(a.executor=s),[i,a]}function I(n){return n?typeof n=="object"&&"__FastEventScope__"in n:false}function b(n,e,t){let s=n[0],r=I(n[1])?n[1]:void 0,a=(r?n[2]:n[1])||{};return a.meta=Object.assign({},e,a?.meta),a.context=a.context!==void 0?a.context:t,[s,r,a]}function u(n,e){return Object.defineProperty(n,"name",{value:e||"anonymous",configurable:true}),n}function c(n){return n&&typeof n=="function"}var M=class n{constructor(e){l(this,"__FastEventScope__",true);l(this,"__events__");l(this,"__meta__");l(this,"__context__");l(this,"_options",{});l(this,"prefix","");l(this,"emitter");this._options=Object.assign({},this._initOptions(e));}get context(){return this.options.context||this}get options(){return this._options}get listeners(){return this.emitter.getListeners(this.prefix)}bind(e,t,s){this.emitter=e,this._options=Object.assign(this._options,{scope:t},s),t.length>0&&!t.endsWith(e.options.delimiter)&&(this.prefix=t+e.options.delimiter);}_initOptions(e){return e}_getScopeListener(e){let t=this.prefix;if(t.length===0)return e;if(!e)throw new Error;let s=this;return u(function(a,i){let o=i.rawEventType||a.type;if(o.startsWith(t)){let v=((i.flags||0)&1)>0?a:Object.assign({},a,{type:o.substring(t.length)});return e.call(s.context,v,i)}},e.name)}_getScopeType(e){return e===void 0?void 0:this.prefix+e}_fixScopeType(e){return e.startsWith(this.prefix)?e.substring(this.prefix.length):e}on(){if(!this.emitter)throw new x;let e=[...arguments];return e[0]=this._getScopeType(e[0]),e[1]=this._getScopeListener(e[1]),this.emitter.on(...e)}once(){return this.on(arguments[0],arguments[1],Object.assign({},arguments[2],{count:1}))}onAny(){return this.on("**",...arguments)}off(){let e=arguments;typeof e[0]=="string"&&(e[0]=this._getScopeType(e[0])),this.emitter.off(...e);}offAll(){this.emitter.offAll(this.prefix.substring(0,this.prefix.length-1));}clear(){this.emitter.clear(this.prefix.substring(0,this.prefix.length-1));}emit(){let[e,t]=T(arguments,this.emitter.options.meta,this.options.meta,this.options.executor);return this._transformMessage(e,t),e.type=this._getScopeType(e.type),this.emitter.emit(e,t)}_transformMessage(e,t){c(this._options.transform)&&(t.rawEventType=this._getScopeType(e.type),t.flags=(t.flags||0)|1,e.payload=this._options.transform.call(this,e));}async emitAsync(){return (await Promise.allSettled(this.emit.apply(this,arguments))).map(t=>t.status==="fulfilled"?t.value:t.reason)}async waitFor(){let e=arguments[0],t=arguments[1],s=await this.emitter.waitFor(this._getScopeType(e),t);return Object.assign({},s,{type:this._fixScopeType(s.type)})}scope(){let[e,t,s]=b(arguments,this.options.meta,this.options.context),r;return t?r=t:r=new n,r.bind(this.emitter,this.prefix+e,s),r}};function L(n,e){let t=n.length,s=e.length;if(t!==s&&(s===0||e[s-1]!=="**"))return false;if(s>0&&e[s-1]==="**"){for(let r=0;r<s-1;r++)if(e[r]!=="*"&&e[r]!==n[r])return false;return true}for(let r=0;r<t;r++)if(e[r]!=="*"&&e[r]!==n[r])return false;return true}function C(n,e){let t=[];for(let s=n.length-1;s>=0;s--)e(n[s])&&(t.push(s),n.splice(s,1));return t.reverse()}function ye(n){return n?typeof n=="object"&&"type"in n:false}function ue(n){return n&&typeof n=="string"}var k=Symbol.for("__expandable__");function he(n){return n[k]=true,n}function D(n){return n&&n[k]}function G(n){return n&&typeof n=="object"&&"off"in n&&"listener"in n}function xe(n){return typeof n=="function"&&(n.toString().startsWith("class ")||n.prototype?.constructor===n)}function be(n){return n?typeof n=="object"&&"__FastEvent__"in n:false}function A(n){if(n===null||typeof n!="object")return false;let e=n;return typeof e[Symbol.asyncIterator]=="function"||typeof e["@@asyncIterator"]=="function"}var j=()=>(n,e,t,s)=>n.map((r,a)=>s.call(n[a],r,e,t,true));function N(n){for(let e=0;e<n.length;e++){let t=n[e];Array.isArray(t)&&D(t)&&(n.splice(e,1,...t),e+=t.length-1);}return n}function W(n,e){return n.catch(t=>(e&&e(t),Promise.resolve(t)))}var P=class{constructor(e,t,s={}){this.eventEmitter=e;this.eventName=t;l(this,"resolvers",[]);l(this,"errorResolvers",[]);l(this,"isStopped",false);l(this,"options");l(this,"currentSize");l(this,"hasNewMessage",false);l(this,"_listener");l(this,"_ready",false);l(this,"_listenOptions");l(this,"_cleanups",[]);l(this,"error",null);l(this,"buffer",[]);this.options={size:s.size??20,maxExpandSize:s.maxExpandSize??100,expandOverflow:s.expandOverflow??"slide",overflow:s.overflow??"slide",lifetime:s.lifetime??0,onPush:s.onPush,onPop:s.onPop,onDrop:s.onDrop,onError:s.onError??(()=>true),signal:s.signal},this.currentSize=this.options.size,this._listener=this.onMessage.bind(this);}get listener(){return this._listener}get ready(){return this._ready}create(e){if(!this._ready){this._listenOptions=e;try{let t=this.eventEmitter.on(this.eventName,this._listener,e);if(this._cleanups.push(()=>t.off()),this.options.signal&&!this.options.signal.aborted){let s=()=>{this.off(!0);};this.options.signal.addEventListener("abort",s),this._cleanups.push(()=>{this.options.signal.removeEventListener("abort",s);});}}finally{this._ready=true;}}}push(e){this.options.onPush?this.options.onPush(e,this.buffer):this.buffer.push(this.options.lifetime>0?[e,Date.now()]:[e,0]);}handleOverflow(e){switch(this.buffer.length>=this.options.maxExpandSize&&this.options.overflow==="expand"?this.options.expandOverflow:this.options.overflow){case "drop":return this.options.onDrop&&this.options.onDrop(e),false;case "expand":return this.currentSize=Math.min(this.currentSize+this.options.size,this.options.maxExpandSize),this.push(e),true;case "slide":let s=this.buffer.shift();return this.options.onDrop&&s&&this.options.onDrop(s[0]),this.push(e),true;case "throw":throw this.options.onDrop&&this.options.onDrop(e),new Error(`EventIterator queue overflow: buffer size (${this.currentSize}) exceeded`);default:return false}}onMessage(e,t){if(this.isStopped)return;let s=e;if(this.resolvers.length>0){this.resolvers.shift()({value:s,done:false});return}this.hasNewMessage=true,this.buffer.length<this.currentSize?this.push(s):this.handleOverflow(s);}off(e){this._ready&&(this.isStopped||(this.isStopped=true,this._cleanups.forEach(t=>t()),this._cleanups=[],this.buffer=[],this._ready=false,e?(this.errorResolvers.forEach(t=>{t(new y);}),this.errorResolvers=[]):(this.resolvers.forEach(t=>{t({value:void 0,done:true});}),this.resolvers=[]),this._ready=false));}async next(){if(this.error)return Promise.reject(this.error);if(this.isStopped&&this.buffer.length===0)return {value:void 0,done:true};if(this.buffer.length>0){let e,t;if(this.options.onPop){let s=this.options.onPop(this.buffer,this.hasNewMessage);s?[e,t]=s:[e,t]=this.buffer.shift()||[void 0,0];}else [e,t]=this.buffer.shift()||[void 0,0];if(this.hasNewMessage=false,e!==void 0)return this.options.lifetime>0&&Date.now()-t>this.options.lifetime?(this.options.onDrop&&this.options.onDrop(e),this.next()):{value:e,done:false}}return new Promise((e,t)=>{this.resolvers.push(e),this.errorResolvers.push(t);})}[Symbol.asyncIterator](){return this}async done(){return this.off(),{value:void 0,done:true}}async throw(e){return this.error=e,this.off(),Promise.reject(e)}async return(){return this.off(),{value:void 0,done:true}}[Symbol.dispose](){this.off();}on(){this.create(this._listenOptions),this.isStopped=false;}};function R(n,e,t={}){return new P(n,e,t)}function U(n,e){return Array.isArray(e)&&e.forEach(t=>{n=u(t(n),n.name);}),n}function _(n){return n!==null&&(typeof n=="object"||typeof n=="function")?new WeakRef(n):n}function S(n){return n.map(e=>e.status==="fulfilled"?e.value:e.reason)}function z(n){if(n==null)return false;let e=typeof n;return e!=="object"&&e!=="function"?false:typeof n.then=="function"}async function K(n){try{return n instanceof Promise?await n:n}catch(e){return e instanceof Error?e:new Error(String(e))}}var H=class{constructor(e){l(this,"__FastEvent__",true);l(this,"listeners",{__listeners:[]});l(this,"_options");l(this,"_delimiter","/");l(this,"_context");l(this,"_hooks");l(this,"retainedMessages",new Map);l(this,"listenerCount",0);l(this,"types",null);this._options=Object.assign({debug:false,id:Math.random().toString(36).substring(2),delimiter:"/",context:null,ignoreErrors:true,meta:void 0,expandEmitResults:true,executor:j()},this._initOptions(e)),this._delimiter=this._options.delimiter,this._context=this._options.context;}get options(){return this._options}get context(){return this.options.context||this}get meta(){return this.options.meta}get id(){return this._options.id}get title(){return this._options.title||this.id||"FastEvent"}get hooks(){return this._hooks||(this._hooks={AddBeforeListener:[],AddAfterListener:[],RemoveListener:[],ClearListeners:[],ListenerError:[],BeforeExecuteListener:[],AfterExecuteListener:[]}),this._hooks}_execAfterExecuteListener(e,t){Promise.allSettled(t[1]).then(s=>{t[1]=S(s),e.apply(this,t);});}_executeHooks(e,t,s=false){if(setTimeout(()=>{if(!this._hooks)return;let r=this.hooks[e];Array.isArray(r)&&r.length>0&&Promise.allSettled(r.map(a=>{if(e==="AfterExecuteListener")this._execAfterExecuteListener(a,t);else return a.apply(this,t)}));}),!s){let r=this.options[`on${e}`];if(c(r))if(e==="AfterExecuteListener")this._execAfterExecuteListener(r,t);else return r.apply(this,t)}}_initOptions(e){return e}_addListener(e,t,s){let{count:r,prepend:a}=s,i=0;return [this._forEachNodes(e,p=>{let v=[t,r,0,s.tag,s.flags];a?(p.__listeners.splice(0,0,v),i=0):(p.__listeners.push(v),i=p.__listeners.length-1),this.listenerCount++;}),i]}_forEachNodes(e,t){if(e.length===0)return;let s=this.listeners;for(let r=0;r<e.length;r++){let a=e[r];if(a in s||(s[a]={__listeners:[]}),r===e.length-1){let i=s[a];return t(i,s),i}else s=s[a];}}_removeListener(e,t,s){s&&C(e.__listeners,r=>{r=Array.isArray(r)?r[0]:r;let a=r===s;return a&&(this.listenerCount--,this._executeHooks("RemoveListener",[t.join(this._delimiter),s,e])),a});}_createAyncIteratorListener(e,t){let s=Object.assign({overflow:"expand",size:10,maxExpandSize:100},t.iterable),r=R(this,e,s);r.create(t);let a=this._executeHooks("AddBeforeListener",[e,r.listener,t]);if(a===false)throw new d;return A(a)?a:r}on(){let e=arguments[0];if(e.length===0)throw new Error("event cannot be empty");let t=null,s,r=!c(arguments[1]);r?s=arguments[1]||{}:(t=arguments[1],s=arguments[2]||{});let a=Object.assign({count:0,flags:0,prepend:false},s);if(r||t===null)return this._createAyncIteratorListener(e,a);let i=this._executeHooks("AddBeforeListener",[e,t,a]);if(i===false)throw new d;if(G(i))return i;let o=e.split(this._delimiter);if(a.pipes&&a.pipes.length>0&&(t=U(t,a.pipes)),c(a.filter)||c(a.off)){let g=t,h=()=>p&&this._removeListener(p,o,t);t=u(function(f,F){if(c(a.off)&&a.off.call(this,f,F)){h();return}if(c(a.filter)){if(a.filter.call(this,f,F))return g.call(this,f,F)}else return g.call(this,f,F)},t.name);}let[p,v]=this._addListener(o,t,a),m=()=>p&&this._removeListener(p,o,t);return this._executeHooks("AddAfterListener",[e,p]),this._emitRetainMessage(e,p,v),{off:m,listener:t,[Symbol.dispose](){m();}}}once(){return c(arguments[1])?this.on(arguments[0],arguments[1],Object.assign({},arguments[2],{count:1})):this.on(arguments[0],Object.assign({},arguments[2],{count:1}))}onAny(){return this.on("**",...arguments)}off(){let e=arguments,t=c(e[0])?void 0:e[0],s=c(e[0])?e[0]:e[1],r=t?t.split(this._delimiter):[],a=t?t.includes("*"):false;if(t&&!a)this._traverseToPath(this.listeners,r,i=>{s?this._removeListener(i,r,s):t&&(i.__listeners=[]);});else {let i=a?[]:r;this._traverseListeners(this.listeners,i,(o,p)=>{(s!==void 0||a&&L(o,r))&&(s?this._removeListener(p,r,s):p.__listeners=[]);});}}offAll(e){if(e){let t=e.split(this._delimiter),s=0;this._traverseListeners(this.listeners,t,(r,a)=>{s+=a.__listeners.length;try{a.__listeners.forEach(i=>{this._executeHooks("RemoveListener",[r.join(this.options.delimiter),i[0],a]);});}finally{a.__listeners=[];}}),this.listenerCount-=s,this._removeRetainedEvents(e);}else try{let t=0;this._traverseListeners(this.listeners,[],(s,r)=>{t+=r.__listeners.length;}),this.listenerCount-=t,this.retainedMessages.clear(),this.listeners={__listeners:[]};}finally{this._executeHooks("ClearListeners",[]);}}_removeRetainedEvents(e){e||this.retainedMessages.clear(),e?.endsWith(this._delimiter)&&(e+=this._delimiter),this.retainedMessages.delete(e);for(let t of this.retainedMessages.keys())t.startsWith(e)&&this.retainedMessages.delete(t);}clear(e){this.offAll(e),this._removeRetainedEvents(e);}_emitRetainMessage(e,t,s){let r=[];if(e.includes("*")){let a=e.split(this._delimiter);this.retainedMessages.forEach((i,o)=>{let p=o.split(this._delimiter);L(p,a)&&r.push(i);});}else this.retainedMessages.has(e)&&r.push(this.retainedMessages.get(e));t&&r.forEach(a=>{this._executeListeners([t],a,{},i=>i[0]===t.__listeners[s][0]);});}_traverseToPath(e,t,s,r=0,a){if(r>=t.length){s(e);return}let i=t[r];if(a===true){this._traverseToPath(e,t,s,r+1,true);return}"*"in e&&this._traverseToPath(e["*"],t,s,r+1),"**"in e&&this._traverseToPath(e["**"],t,s,r+1,true),i in e&&this._traverseToPath(e[i],t,s,r+1);}_traverseListeners(e,t,s){let r=e;t&&t.length>0&&this._traverseToPath(e,t,i=>{r=i;});let a=(i,o,p)=>{o(p,i);for(let[v,m]of Object.entries(i))v.startsWith("__")||m&&a(m,o,[...p,v]);};a(r,s,[]);}_onListenerError(e,t,s,r){if(r instanceof Error&&(r._emitter=`${e.name||"anonymous"}:${t.type}`),this._executeHooks("ListenerError",[r,e,t,s]),this._options.ignoreErrors)return r;throw r}_executeListener(e,t,s,r=false){let a=e[0];try{if(this.options.debug&&(e.length=5),s&&s.abortSignal&&s.abortSignal.aborted)return this._onListenerError(a,t,s,new y(e[0].name));let i=((s?.flags||0)&1)>0,o=a.call(this.context,i?t.payload:t,s);return r&&o&&o instanceof Promise&&(o=W(o,p=>this._onListenerError(a,t,s,p))),this.options.debug&&(Promise.resolve(o),z(o)?K(o).then(p=>{e[5]=_(p);}):e[5]=_(o)),o}catch(i){let o=this._onListenerError(a,t,s,i);return o instanceof Error&&(e[5]=_(o)),o}}_getListenerExecutor(e){if(!e)return;let t=e.executor||this._options.executor;if(c(t))return t}_executeListeners(e,t,s,r){if(!e||e.length===0)return [];let a=[];for(let o of e){let p=0;for(let v of o.__listeners)(!r||r(v,o))&&a.push([v,p++,o.__listeners]);}this._decListenerExecCount(a);let i=this._getListenerExecutor(s);if(i){let o=i(a.map(p=>p[0]),t,s,this._executeListener.bind(this));return Array.isArray(o)?o:[o]}else return a.map(o=>this._executeListener(o[0],t,s,true))}_decListenerExecCount(e){for(let t=e.length-1;t>=0;t--){let s=e[t][0];s[2]++,s[1]>0&&s[1]<=s[2]&&e[t][2].splice(t,1);}}getListeners(e){let t=[],s=e.split(this._delimiter);this._traverseToPath(this.listeners,s,a=>{t.push(a);});let r=[];return t.map(a=>{r.push(...a.__listeners);}),r}clearRetainMessages(e){e?this.retainedMessages.delete(e):this.retainedMessages.clear();}emit(){let[e,t]=T(arguments,this.options.meta);c(t.parseArgs)&&t.parseArgs(e,t);let s=e.type.split(this._delimiter);t.retain&&this.retainedMessages.set(e.type,e);let r=[],a=[];this._traverseToPath(this.listeners,s,o=>{a.push(o);});let i=this._executeHooks("BeforeExecuteListener",[e,t]);if(Array.isArray(i))return i;if(i===false)throw new y(e.type);if(c(this._options.transform)){let o=this._options.transform.call(this,e);o!==e&&(e.payload=o,t.rawEventType=e.type,t.flags=(t.flags||0)|1);}return r.push(...this._executeListeners(a,e,t)),this._options.expandEmitResults&&N(r),this._executeHooks("AfterExecuteListener",[e,r,a]),r}async emitAsync(){let e=await Promise.allSettled(this.emit.apply(this,arguments));return S(e)}waitFor(){let e=arguments[0],t=arguments[1];return new Promise((s,r)=>{let a,i,o=p=>{clearTimeout(a),i?.off(),s(p);};t&&t>0&&(a=setTimeout(()=>{i?.off(),r(new Error("wait for event<"+e+"> is timeout"));},t)),i=this.on(e,o);})}scope(){let[e,t,s]=b(arguments,this.options.meta,this.options.context),r;return t?r=t:r=new M,r.bind(this,e,s),r}};export{y as AbortError,d as CancelError,H as FastEvent,E as FastEventError,P as FastEventIterator,q as FastEventListenerFlags,M as FastEventScope,w as QueueOverflowError,O as TimeoutError,x as UnboundError,J as __FastEventScope__,Q as __FastEvent__,k as __expandable__,R as createAsyncEventIterator,he as expandable,A as isAsyncIterable,xe as isClass,D as isExpandable,be as isFastEvent,ye as isFastEventMessage,I as isFastEventScope,c as isFunction,L as isPathMatched,ue as isString,G as isSubsctiber};//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map