fastevent 2.3.6 → 2.3.7

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 R=Object.defineProperty;var z=(i,t,e)=>t in i?R(i,t,{enumerable:true,configurable:true,writable:true,value:e}):i[t]=e;var f=(i,t)=>R(i,"name",{value:t,configurable:true});var h=(i,t,e)=>z(i,typeof t!="symbol"?t+"":t,e);var H=Symbol.for("__FastEvent__"),J=Symbol.for("__FastEventScope__"),S=class S extends Error{constructor(t){super(t);}};f(S,"FastEventError");var m=S,A=class A extends m{};f(A,"TimeoutError");var C=A,M=class M extends m{};f(M,"UnboundError");var x=M,w=class w extends m{};f(w,"AbortError");var d=w,F=class F extends m{};f(F,"CancelError");var y=F,j=class j extends m{};f(j,"QueueOverflowError");var W=j,b={clearRetain:Symbol.for("ClearRetain")};var _=function(i){return i[i.Transformed=1]="Transformed",i}({});function L(i,t,e,s){let n,r={},o={};return typeof i[0]=="object"?(Object.assign(o,i[0]),r=typeof i[1]=="boolean"?{retain:i[1]}:i[1]||{},n=i[0].meta):(o.type=i[0],o.payload=i[1],r=typeof i[2]=="boolean"?{retain:i[2]}:i[2]||{}),n=Object.assign({},t,e,r.meta,n),Object.keys(n).length===0&&(n=void 0),o.meta=n,r.executor===void 0&&(r.executor=s),[o,r]}f(L,"parseEmitArgs");function D(i){return i?typeof i=="object"&&"__FastEventScope__"in i:false}f(D,"isFastEventScope");function E(i,t,e){let s=i[0],n=D(i[1])?i[1]:void 0,r=(n?i[2]:i[1])||{};return r.meta=Object.assign({},t,r?.meta),r.context=r.context!==void 0?r.context:e,[s,n,r]}f(E,"parseScopeArgs");function g(i,t){return Object.defineProperty(i,"name",{value:t||"anonymous",configurable:true}),i}f(g,"renameFn");function u(i){return i&&typeof i=="function"}f(u,"isFunction");var T=class T{constructor(t){h(this,"__FastEventScope__",true);h(this,"_options",{});h(this,"types",{events:void 0,meta:void 0,context:void 0,message:void 0,listeners:void 0,anyListener:void 0});h(this,"prefix","");h(this,"emitter");this._options=Object.assign({},this._initOptions(t));}get context(){return this.options.context||this}get options(){return this._options}get listeners(){return this.emitter.getListeners(this.prefix)}bind(t,e,s){this.emitter=t,this._options=Object.assign(this._options,{scope:e},s),e.length>0&&!e.endsWith(t.options.delimiter)&&(this.prefix=e+t.options.delimiter);}_initOptions(t){return t}_getScopeListener(t){let e=this.prefix;if(e.length===0)return t;t||(t=(this._options.onMessage||this.onMessage).bind(this));let s=this;return g(function(r,o){let p=o.rawEventType||r.type;if(p.startsWith(e)){let c=((o.flags||0)&_.Transformed)>0?r:Object.assign({},r,{type:p.substring(e.length)});return t.call(s.context,c,o)}},t.name)}_getScopeType(t){return t===void 0?void 0:this.prefix+t}_fixScopeType(t){return t.startsWith(this.prefix)?t.substring(this.prefix.length):t}on(){if(!this.emitter)throw new x;let t=[...arguments];return t[0]=this._getScopeType(t[0]),t[1]=this._getScopeListener(t[1]),this.emitter.on(...t)}once(){return this.on(arguments[0],arguments[1],Object.assign({},arguments[2],{count:1}))}onAny(){return this.on("**",...arguments)}off(){let t=arguments;typeof t[0]=="string"&&(t[0]=this._getScopeType(t[0])),this.emitter.off(...t);}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(){if(arguments.length===2&&typeof arguments[0]=="string"&&arguments[1]===b.clearRetain)return this.emitter.emit(this._getScopeType(arguments[0]));let[t,e]=L(arguments,this.emitter.options.meta,this.options.meta,this.options.executor);return this._transformMessage(t,e),t.type=this._getScopeType(t.type),this.emitter.emit(t,e)}_transformMessage(t,e){u(this._options.transform)&&(e.rawEventType=this._getScopeType(t.type),e.flags=(e.flags||0)|_.Transformed,t.payload=this._options.transform.call(this,t));}async emitAsync(){return (await Promise.allSettled(this.emit.apply(this,arguments))).map(e=>e.status==="fulfilled"?e.value:e.reason)}async waitFor(){let t=arguments[0],e=arguments[1],s=await this.emitter.waitFor(this._getScopeType(t),e);return Object.assign({},s,{type:this._fixScopeType(s.type)})}scope(){let[t,e,s]=E(arguments,this.options.meta,this.options.context),n;return e?n=e:n=new T,n.bind(this.emitter,this.prefix+t,s),n}onMessage(t,e){}};f(T,"FastEventScope");var v=T;function O(i,t){if(i.length!==t.length&&i.length>0&&t[t.length-1]!=="**")return false;let e=[...t];t.length>0&&t[t.length-1]==="**"&&e.splice(t.length-1,1,...Array.from({length:i.length-t.length+1}).fill("*"));for(let s=0;s<i.length;s++)if(e[s]!=="*"&&e[s]!==i[s])return false;return true}f(O,"isPathMatched");function N(i,t){let e=[];for(;;){let s=i.findIndex(n=>t(n));if(s===-1){e.push(s);break}i.splice(s,1);}return e}f(N,"removeItem");var V=Symbol.for("__expandable__");function Tt(i){return i[V]=true,i}f(Tt,"expandable");function I(i){return i&&i[V]}f(I,"isExpandable");function B(i){for(let t=0;t<i.length;t++){let e=i[t];Array.isArray(e)&&I(e)&&(i.splice(t,1,...e),t+=e.length-1);}return i}f(B,"expandEmitResults");function X(i){return i&&typeof i=="object"&&"off"in i&&"listener"in i}f(X,"isSubsctiber");function $(i,t){return i.catch(e=>(t&&t(e),Promise.resolve(e)))}f($,"tryReturnError");var P=class P{constructor(t){h(this,"__FastEvent__",true);h(this,"listeners",{__listeners:[]});h(this,"_options");h(this,"_delimiter","/");h(this,"_context");h(this,"retainedMessages",new Map);h(this,"listenerCount",0);h(this,"types",{events:void 0,meta:void 0,context:void 0,message:void 0,listeners:void 0,anyListener:void 0});this._options=Object.assign({debug:false,id:Math.random().toString(36).substring(2),delimiter:"/",context:null,ignoreErrors:true,meta:void 0,expandEmitResults:true},this._initOptions(t)),this._delimiter=this._options.delimiter,this._context=this._options.context,this._enableDevTools();}get options(){return this._options}get context(){return this.options.context||this}get meta(){return this.options.meta}get id(){return this._options.id}_initOptions(t){return t}_addListener(t,e,s){let{count:n,prepend:r}=s,o=0;return [this._forEachNodes(t,a=>{let c=[e,n,0,s.tag,s.flags];r?(a.__listeners.splice(0,0,c),o=0):(a.__listeners.push(c),o=a.__listeners.length-1),this.listenerCount++;}),o]}_enableDevTools(){this.options.debug&&globalThis.__FLEXEVENT_DEVTOOLS__&&globalThis.__FLEXEVENT_DEVTOOLS__.add(this);}_forEachNodes(t,e){if(t.length===0)return;let s=this.listeners;for(let n=0;n<t.length;n++){let r=t[n];if(r in s||(s[r]={__listeners:[]}),n===t.length-1){let o=s[r];return e(o,s),o}else s=s[r];}}_removeListener(t,e,s){s&&N(t.__listeners,n=>{n=Array.isArray(n)?n[0]:n;let r=n===s;return r&&(this.listenerCount--,u(this._options.onRemoveListener)&&this._options.onRemoveListener(e.join(this._delimiter),s)),r});}_pipeListener(t,e){return e.forEach(s=>{t=g(s(t),t.name);}),t}on(){let t=arguments[0],e=u(arguments[1])?arguments[1]:(this._options.onMessage||this.onMessage).bind(this),s=Object.assign({count:0,flags:0,prepend:false},u(arguments[1])?arguments[2]:arguments[1]);if(t.length===0)throw new Error("event type cannot be empty");if(u(this._options.onAddListener)){let a=this._options.onAddListener(t,e,s);if(a===false)throw new y;if(X(a))return a}let n=t.split(this._delimiter);if(s.pipes&&s.pipes.length>0&&(e=this._pipeListener(e,s.pipes)),u(s.filter)||u(s.off)){let a=e;e=g(function(c,l){if(u(s.off)&&s.off.call(this,c,l)){p();return}if(u(s.filter)){if(s.filter.call(this,c,l))return a.call(this,c,l)}else return a.call(this,c,l)},e.name);}let[r,o]=this._addListener(n,e,s),p=f(()=>r&&this._removeListener(r,n,e),"off");return this._emitRetainMessage(t,r,o),{off:p,listener:e}}once(){return u(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[0],arguments[1])}onMessage(t,e){}off(){let t=arguments,e=u(t[0])?void 0:t[0],s=u(t[0])?t[0]:t[1],n=e?e.split(this._delimiter):[],r=e?e.includes("*"):false;if(e&&!r)this._traverseToPath(this.listeners,n,o=>{s?this._removeListener(o,n,s):e&&(o.__listeners=[]);});else {let o=r?[]:n;this._traverseListeners(this.listeners,o,(p,a)=>{(s!==void 0||r&&O(p,n))&&(s?this._removeListener(a,n,s):a.__listeners=[]);});}}offAll(t){if(t){let e=t.split(this._delimiter),s=0;this._traverseListeners(this.listeners,e,(n,r)=>{s+=r.__listeners.length,r.__listeners=[];}),this.listenerCount-=s,this._removeRetainedEvents(t);}else {let e=0;this._traverseListeners(this.listeners,[],(s,n)=>{e+=n.__listeners.length;}),this.listenerCount-=e,this.retainedMessages.clear(),this.listeners={__listeners:[]};}u(this._options.onClearListeners)&&this._options.onClearListeners.call(this);}_removeRetainedEvents(t){t||this.retainedMessages.clear(),t?.endsWith(this._delimiter)&&(t+=this._delimiter),this.retainedMessages.delete(t);for(let e of this.retainedMessages.keys())e.startsWith(t)&&this.retainedMessages.delete(e);}clear(t){this.offAll(t),this._removeRetainedEvents(t);}_emitRetainMessage(t,e,s){let n=[];if(t.includes("*")){let r=t.split(this._delimiter);this.retainedMessages.forEach((o,p)=>{let a=p.split(this._delimiter);O(a,r)&&n.push(o);});}else this.retainedMessages.has(t)&&n.push(this.retainedMessages.get(t));e&&n.forEach(r=>{this._executeListeners([e],r,{},o=>o[0]===e.__listeners[s][0]);});}_traverseToPath(t,e,s,n=0,r){if(n>=e.length){s(t);return}let o=e[n];if(r===true){this._traverseToPath(t,e,s,n+1,true);return}"*"in t&&this._traverseToPath(t["*"],e,s,n+1),"**"in t&&this._traverseToPath(t["**"],e,s,n+1,true),o in t&&this._traverseToPath(t[o],e,s,n+1);}_traverseListeners(t,e,s){let n=t;e&&e.length>0&&this._traverseToPath(t,e,o=>{n=o;});let r=f((o,p,a)=>{p(a,o);for(let[c,l]of Object.entries(o))c.startsWith("__")||l&&r(l,p,[...a,c]);},"traverseNodes");r(n,s,[]);}_onListenerError(t,e,s,n){if(n instanceof Error&&(n._emitter=`${t.name||"anonymous"}:${e.type}`),u(this._options.onListenerError))try{this._options.onListenerError.call(this,n,t,e,s);}catch{}if(this._options.ignoreErrors)return n;throw n}_setListenerFlags(t,e){return !t||t===0?e:t|e}_executeListener(t,e,s,n=false){try{if(s&&s.abortSignal&&s.abortSignal.aborted)return this._onListenerError(t,e,s,new d(t.name));let r=((s?.flags||0)&_.Transformed)>0,o=t.call(this.context,r?e.payload:e,s);return n&&o&&o instanceof Promise&&(o=$(o,p=>this._onListenerError(t,e,s,p))),o}catch(r){return this._onListenerError(t,e,s,r)}}_getListenerExecutor(t){if(!t)return;let e=t.executor||this._options.executor;if(u(e))return e}_executeListeners(t,e,s,n){if(!t||t.length===0)return [];let r=t.reduce((p,a)=>p.concat(a.__listeners.filter(c=>u(n)?n(c,a):true).map((c,l)=>[c,l,a.__listeners])),[]);u(this._options.transform)&&(s||(s={}),s.rawEventType=e.type,e.payload=this._options.transform.call(this,e),s.flags=this._setListenerFlags(s.flags,_.Transformed)),this._decListenerExecCount(r);let o=this._getListenerExecutor(s);if(o){let p=o(r.map(a=>a[0]),e,s,this._executeListener.bind(this));return Array.isArray(p)?p:[p]}else return r.map(p=>this._executeListener(p[0][0],e,s,true))}_decListenerExecCount(t){for(let e=t.length-1;e>=0;e--){let s=t[e][0];s[2]++,s[1]>0&&s[1]<=s[2]&&t[e][2].splice(e,1);}}getListeners(t){let e=[],s=t.split(this._delimiter);return this._traverseToPath(this.listeners,s,n=>{e.push(n);}),e[0].__listeners}emit(){if(arguments.length===2&&typeof arguments[0]=="string"&&arguments[1]===b.clearRetain)return this.retainedMessages.delete(arguments[0]),[];let[t,e]=L(arguments,this.options.meta);u(e.parseArgs)&&e.parseArgs(t,e);let s=t.type.split(this._delimiter);e.retain&&this.retainedMessages.set(t.type,t);let n=[],r=[];if(this._traverseToPath(this.listeners,s,o=>{r.push(o);}),u(this._options.onBeforeExecuteListener)){let o=this._options.onBeforeExecuteListener.call(this,t,e);if(Array.isArray(o))return o;if(o===false)throw new d(t.type)}return u(this._options.transform)&&(t.payload=this._options.transform.call(this,t),e.rawEventType=t.type,e.flags=(e.flags||0)|_.Transformed),n.push(...this._executeListeners(r,t,e)),u(this._options.onAfterExecuteListener)&&this._options.onAfterExecuteListener.call(this,t,n,r),this._options.expandEmitResults&&B(n),n}async emitAsync(){return (await Promise.allSettled(this.emit.apply(this,arguments))).map(e=>e.status==="fulfilled"?e.value:e.reason)}waitFor(){let t=arguments[0],e=arguments[1];return new Promise((s,n)=>{let r,o,p=f(a=>{clearTimeout(r),o&&o.off(),s(a);},"listener");e&&e>0&&(r=setTimeout(()=>{o&&o.off(),n(new Error("wait for event<"+t+"> is timeout"));},e)),o=this.on(t,p);})}scope(){let[t,e,s]=E(arguments,this.options.meta,this.options.context),n;return e?n=e:n=new v,n.bind(this,t,s),n}};f(P,"FastEvent");var q=P;function Kt(i){return i?typeof i=="object"&&"type"in i:false}f(Kt,"isFastEventMessage");function kt(i){return i&&typeof i=="string"}f(kt,"isString");function te(i){return typeof i=="function"&&(i.toString().startsWith("class ")||i.prototype?.constructor===i)}f(te,"isClass");function ie(i){return i?typeof i=="object"&&"__FastEvent__"in i:false}f(ie,"isFastEvent");export{d as AbortError,y as CancelError,q as FastEvent,b as FastEventDirectives,m as FastEventError,_ as FastEventListenerFlags,v as FastEventScope,W as QueueOverflowError,C as TimeoutError,x as UnboundError,J as __FastEventScope__,H as __FastEvent__,V as __expandable__,Tt as expandable,te as isClass,I as isExpandable,ie as isFastEvent,Kt as isFastEventMessage,D as isFastEventScope,u as isFunction,O as isPathMatched,kt as isString,X as isSubsctiber};//# sourceMappingURL=index.mjs.map
1
+ var W=Object.defineProperty;var Z=(o,e,t)=>e in o?W(o,e,{enumerable:true,configurable:true,writable:true,value:t}):o[e]=t;var n=(o,e)=>W(o,"name",{value:e,configurable:true});var p=(o,e,t)=>Z(o,typeof e!="symbol"?e+"":e,t);var ee=Symbol.for("__FastEvent__"),te=Symbol.for("__FastEventScope__"),A=class A extends Error{constructor(e){super(e);}};n(A,"FastEventError");var m=A,O=class O extends m{};n(O,"TimeoutError");var I=O,M=class M extends m{};n(M,"UnboundError");var E=M,P=class P extends m{};n(P,"AbortError");var _=P,j=class j extends m{};n(j,"CancelError");var y=j,F=class F extends m{};n(F,"QueueOverflowError");var V=F;var x=(function(o){return o[o.Transformed=1]="Transformed",o})({});function w(o,e,t,r){let s,i={},f={};return typeof o[0]=="object"?(Object.assign(f,o[0]),i=typeof o[1]=="boolean"?{retain:o[1]}:o[1]||{},s=o[0].meta):(f.type=o[0],f.payload=o[1],i=typeof o[2]=="boolean"?{retain:o[2]}:o[2]||{}),s=Object.assign({},e,t,i.meta,s),Object.keys(s).length===0?(s=void 0,delete f.meta):f.meta=s,i.executor===void 0&&(i.executor=r),[f,i]}n(w,"parseEmitArgs");function $(o){return o?typeof o=="object"&&"__FastEventScope__"in o:false}n($,"isFastEventScope");function L(o,e,t){let r=o[0],s=$(o[1])?o[1]:void 0,i=(s?o[2]:o[1])||{};return i.meta=Object.assign({},e,i?.meta),i.context=i.context!==void 0?i.context:t,[r,s,i]}n(L,"parseScopeArgs");function d(o,e){return Object.defineProperty(o,"name",{value:e||"anonymous",configurable:true}),o}n(d,"renameFn");function h(o){return o&&typeof o=="function"}n(h,"isFunction");var T=class T{constructor(e){p(this,"__FastEventScope__",true);p(this,"__events__");p(this,"__meta__");p(this,"__context__");p(this,"_options",{});p(this,"prefix","");p(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,r){this.emitter=e,this._options=Object.assign(this._options,{scope:t},r),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 r=this;return d(function(i,f){let a=f.rawEventType||i.type;if(a.startsWith(t)){let l=((f.flags||0)&x.Transformed)>0?i:Object.assign({},i,{type:a.substring(t.length)});return e.call(r.context,l,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 E;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){h(this._options.transform)&&(t.rawEventType=this._getScopeType(e.type),t.flags=(t.flags||0)|x.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],r=await this.emitter.waitFor(this._getScopeType(e),t);return Object.assign({},r,{type:this._fixScopeType(r.type)})}scope(){let[e,t,r]=L(arguments,this.options.meta,this.options.context),s;return t?s=t:s=new T,s.bind(this.emitter,this.prefix+e,r),s}};n(T,"FastEventScope");var S=T;function R(o,e){let t=o.length,r=e.length;if(t!==r&&(r===0||e[r-1]!=="**"))return false;if(r>0&&e[r-1]==="**"){for(let s=0;s<r-1;s++)if(e[s]!=="*"&&e[s]!==o[s])return false;return true}for(let s=0;s<t;s++)if(e[s]!=="*"&&e[s]!==o[s])return false;return true}n(R,"isPathMatched");function k(o,e){let t=[];for(let r=o.length-1;r>=0;r--)e(o[r])&&(t.push(r),o.splice(r,1));return t.reverse()}n(k,"removeItem");function We(o){return o?typeof o=="object"&&"type"in o:false}n(We,"isFastEventMessage");function U(o){return o&&typeof o=="string"}n(U,"isString");var B=Symbol.for("__expandable__");function Be(o){return o[B]=true,o}n(Be,"expandable");function q(o){return o&&o[B]}n(q,"isExpandable");function z(o){return o&&typeof o=="object"&&"off"in o&&"listener"in o}n(z,"isSubsctiber");function Ke(o){return typeof o=="function"&&(o.toString().startsWith("class ")||o.prototype?.constructor===o)}n(Ke,"isClass");function Ze(o){return o?typeof o=="object"&&"__FastEvent__"in o:false}n(Ze,"isFastEvent");var G=n(()=>(o,e,t,r)=>o.map(s=>r(s[0],e,t,true)),"parallel");function H(o){for(let e=0;e<o.length;e++){let t=o[e];Array.isArray(t)&&q(t)&&(o.splice(e,1,...t),e+=t.length-1);}return o}n(H,"expandEmitResults");function J(o,e){return o.catch(t=>(e&&e(t),Promise.resolve(t)))}n(J,"tryReturnError");var N=class N{constructor(e,t,r={}){p(this,"eventEmitter");p(this,"eventName");p(this,"buffer",[]);p(this,"resolvers",[]);p(this,"errorResolvers",[]);p(this,"isStopped",false);p(this,"error",null);p(this,"options");p(this,"currentSize");p(this,"hasNewMessage",false);p(this,"_listener");p(this,"_ready",false);p(this,"_listenOptions");p(this,"_cleanups",[]);this.eventEmitter=e,this.eventName=t;let s=20,i=100;this.options={size:r.size??s,maxExpandSize:r.maxExpandSize??i,expandOverflow:r.expandOverflow??"slide",overflow:r.overflow??"slide",lifetime:r.lifetime??0,onPush:r.onPush,onPop:r.onPop,onDrop:r.onDrop,onError:r.onError??(()=>true),signal:r.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 r=n(()=>{this.off(!0);},"offFn");this.options.signal.addEventListener("abort",r),this._cleanups.push(()=>{this.options.signal.removeEventListener("abort",r);});}}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 r=this.buffer.shift();return this.options.onDrop&&r&&this.options.onDrop(r[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 r=e;if(this.resolvers.length>0){this.resolvers.shift()({value:r,done:false});return}this.hasNewMessage=true,this.buffer.length<this.currentSize?this.push(r):this.handleOverflow(r);}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 r=this.options.onPop(this.buffer,this.hasNewMessage);r?[e,t]=r:[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;}};n(N,"FastEventIterator");var D=N;function K(o,e,t={}){return new D(o,e,t)}n(K,"createAsyncEventIterator");function X(o,e){return Array.isArray(e)&&e.forEach(t=>{o=d(t(o),o.name);}),o}n(X,"wrapPipeListener");var C=class C{constructor(e){p(this,"__FastEvent__",true);p(this,"listeners",{__listeners:[]});p(this,"_options");p(this,"_delimiter","/");p(this,"_context");p(this,"retainedMessages",new Map);p(this,"listenerCount",0);p(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:G()},this._initOptions(e)),this._delimiter=this._options.delimiter,this._context=this._options.context,this._enableDevTools();}get options(){return this._options}get context(){return this.options.context||this}get meta(){return this.options.meta}get id(){return this._options.id}_initOptions(e){return e}_addListener(e,t,r){let{count:s,prepend:i}=r,f=0;return [this._forEachNodes(e,u=>{let l=[t,s,0,r.tag,r.flags];i?(u.__listeners.splice(0,0,l),f=0):(u.__listeners.push(l),f=u.__listeners.length-1),this.listenerCount++;}),f]}_enableDevTools(){this.options.debug&&globalThis.__FASTEVENT_DEVTOOLS__&&globalThis.__FASTEVENT_DEVTOOLS__.add(this);}_forEachNodes(e,t){if(e.length===0)return;let r=this.listeners;for(let s=0;s<e.length;s++){let i=e[s];if(i in r||(r[i]={__listeners:[]}),s===e.length-1){let f=r[i];return t(f,r),f}else r=r[i];}}_removeListener(e,t,r){r&&k(e.__listeners,s=>{s=Array.isArray(s)?s[0]:s;let i=s===r;return i&&(this.listenerCount--,h(this._options.onRemoveListener)&&this._options.onRemoveListener(t.join(this._delimiter),r)),i});}_onAddListener(e,t,r){if(h(this._options.onAddListener)){let s=this._options.onAddListener(e,t,r);if(s===false)throw new y;if(z(s))return s}}on(){let e=arguments[0],t=null,r,s=!h(arguments[1]);s?r=arguments[1]||{}:(t=arguments[1],r=arguments[2]||{});let i=Object.assign({count:0,flags:0,prepend:false},r);if(e.length===0)throw new Error("event type cannot be empty");if(s||t===null){let c=Object.assign({overflow:"expand",size:10,maxExpandSize:100},i.iterable),g=K(this,e,c);return g.create(i),this._onAddListener(e,g.listener,i),g}if(h(this._options.onAddListener)){let c=this._options.onAddListener(e,t,i);if(c===false)throw new y;if(z(c))return c}let f=e.split(this._delimiter);if(i.pipes&&i.pipes.length>0&&(t=X(t,i.pipes)),h(i.filter)||h(i.off)){let c=t,g=n(()=>a&&this._removeListener(a,f,t),"off");t=d(function(b,v){if(h(i.off)&&i.off.call(this,b,v)){g();return}if(h(i.filter)){if(i.filter.call(this,b,v))return c.call(this,b,v)}else return c.call(this,b,v)},t.name);}let[a,u]=this._addListener(f,t,i),l=n(()=>a&&this._removeListener(a,f,t),"off");return this._emitRetainMessage(e,a,u),{off:l,listener:t,[Symbol.dispose](){l();}}}once(){return h(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=h(e[0])?void 0:e[0],r=h(e[0])?e[0]:e[1],s=t?t.split(this._delimiter):[],i=t?t.includes("*"):false;if(t&&!i)this._traverseToPath(this.listeners,s,f=>{r?this._removeListener(f,s,r):t&&(f.__listeners=[]);});else {let f=i?[]:s;this._traverseListeners(this.listeners,f,(a,u)=>{(r!==void 0||i&&R(a,s))&&(r?this._removeListener(u,s,r):u.__listeners=[]);});}}offAll(e){if(e){let t=e.split(this._delimiter),r=0;this._traverseListeners(this.listeners,t,(s,i)=>{r+=i.__listeners.length,i.__listeners=[];}),this.listenerCount-=r,this._removeRetainedEvents(e);}else {let t=0;this._traverseListeners(this.listeners,[],(r,s)=>{t+=s.__listeners.length;}),this.listenerCount-=t,this.retainedMessages.clear(),this.listeners={__listeners:[]};}h(this._options.onClearListeners)&&this._options.onClearListeners.call(this);}_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,r){let s=[];if(e.includes("*")){let i=e.split(this._delimiter);this.retainedMessages.forEach((f,a)=>{let u=a.split(this._delimiter);R(u,i)&&s.push(f);});}else this.retainedMessages.has(e)&&s.push(this.retainedMessages.get(e));t&&s.forEach(i=>{this._executeListeners([t],i,{},f=>f[0]===t.__listeners[r][0]);});}_traverseToPath(e,t,r,s=0,i){if(s>=t.length){r(e);return}let f=t[s];if(i===true){this._traverseToPath(e,t,r,s+1,true);return}"*"in e&&this._traverseToPath(e["*"],t,r,s+1),"**"in e&&this._traverseToPath(e["**"],t,r,s+1,true),f in e&&this._traverseToPath(e[f],t,r,s+1);}_traverseListeners(e,t,r){let s=e;t&&t.length>0&&this._traverseToPath(e,t,f=>{s=f;});let i=n((f,a,u)=>{a(u,f);for(let[l,c]of Object.entries(f))l.startsWith("__")||c&&i(c,a,[...u,l]);},"traverseNodes");i(s,r,[]);}_onListenerError(e,t,r,s){if(s instanceof Error&&(s._emitter=`${e.name||"anonymous"}:${t.type}`),h(this._options.onListenerError))try{this._options.onListenerError.call(this,s,e,t,r);}catch{}if(this._options.ignoreErrors)return s;throw s}_setListenerFlags(e,t){return !e||e===0?t:e|t}_executeListener(e,t,r,s=false){try{if(r&&r.abortSignal&&r.abortSignal.aborted)return this._onListenerError(e,t,r,new _(e.name));let i=((r?.flags||0)&x.Transformed)>0,f=e.call(this.context,i?t.payload:t,r);return s&&f&&f instanceof Promise&&(f=J(f,a=>this._onListenerError(e,t,r,a))),f}catch(i){return this._onListenerError(e,t,r,i)}}_getListenerExecutor(e){if(!e)return;let t=e.executor||this._options.executor;if(h(t))return t}_executeListeners(e,t,r,s){if(!e||e.length===0)return [];let i=[];for(let a of e){let u=0;for(let l of a.__listeners)(!s||s(l,a))&&i.push([l,u++,a.__listeners]);}this._decListenerExecCount(i);let f=this._getListenerExecutor(r);if(f){let a=f(i.map(u=>u[0]),t,r,this._executeListener.bind(this));return Array.isArray(a)?a:[a]}else return i.map(a=>this._executeListener(a[0][0],t,r,true))}_decListenerExecCount(e){for(let t=e.length-1;t>=0;t--){let r=e[t][0];r[2]++,r[1]>0&&r[1]<=r[2]&&e[t][2].splice(t,1);}}getListeners(e){let t=[],r=e.split(this._delimiter);return this._traverseToPath(this.listeners,r,s=>{t.push(s);}),t[0].__listeners}clearRetainMessages(e){e?this.retainedMessages.delete(e):this.retainedMessages.clear();}emit(){let[e,t]=w(arguments,this.options.meta);h(t.parseArgs)&&t.parseArgs(e,t);let r=e.type.split(this._delimiter);t.retain&&this.retainedMessages.set(e.type,e);let s=[],i=[];if(this._traverseToPath(this.listeners,r,f=>{i.push(f);}),h(this._options.onBeforeExecuteListener)){let f=this._options.onBeforeExecuteListener.call(this,e,t);if(Array.isArray(f))return f;if(f===false)throw new _(e.type)}return h(this._options.transform)&&(e.payload=this._options.transform.call(this,e),t.rawEventType=e.type,t.flags=(t.flags||0)|x.Transformed),s.push(...this._executeListeners(i,e,t)),h(this._options.onAfterExecuteListener)&&this._options.onAfterExecuteListener.call(this,e,s,i),this._options.expandEmitResults&&H(s),s}async emitAsync(){return (await Promise.allSettled(this.emit.apply(this,arguments))).map(t=>t.status==="fulfilled"?t.value:t.reason)}waitFor(){let e=arguments[0],t=arguments[1];return new Promise((r,s)=>{let i,f,a=n(u=>{clearTimeout(i),f?.off(),r(u);},"listener");t&&t>0&&(i=setTimeout(()=>{f?.off(),s(new Error("wait for event<"+e+"> is timeout"));},t)),f=this.on(e,a);})}scope(){let[e,t,r]=L(arguments,this.options.meta,this.options.context),s;return t?s=t:s=new S,s.bind(this,e,r),s}};n(C,"FastEvent");var Y=C;export{_ as AbortError,y as CancelError,Y as FastEvent,m as FastEventError,x as FastEventListenerFlags,S as FastEventScope,V as QueueOverflowError,I as TimeoutError,E as UnboundError,te as __FastEventScope__,ee as __FastEvent__,B as __expandable__,Be as expandable,Ke as isClass,q as isExpandable,Ze as isFastEvent,We as isFastEventMessage,$ as isFastEventScope,h as isFunction,R as isPathMatched,U as isString,z as isSubsctiber};//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map