@@ -1,2 +0,2 @@ | ||
| var FastEventSpaces=(function(exports){'use strict';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}};exports.AbortError=y;exports.CancelError=d;exports.FastEvent=H;exports.FastEventError=E;exports.FastEventIterator=P;exports.FastEventListenerFlags=q;exports.FastEventScope=M;exports.QueueOverflowError=w;exports.TimeoutError=O;exports.UnboundError=x;exports.__FastEventScope__=J;exports.__FastEvent__=Q;exports.__expandable__=k;exports.createAsyncEventIterator=R;exports.expandable=he;exports.isAsyncIterable=A;exports.isClass=xe;exports.isExpandable=D;exports.isFastEvent=be;exports.isFastEventMessage=ye;exports.isFastEventScope=I;exports.isFunction=c;exports.isPathMatched=L;exports.isString=ue;exports.isSubsctiber=G;return exports;})({});//# sourceMappingURL=index.global.js.map | ||
| var FastEventSpaces=(function(exports){'use strict';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]),p++;}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(e[t][1],1),this.listenerCount--);}}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}};exports.AbortError=y;exports.CancelError=d;exports.FastEvent=H;exports.FastEventError=E;exports.FastEventIterator=P;exports.FastEventListenerFlags=q;exports.FastEventScope=M;exports.QueueOverflowError=w;exports.TimeoutError=O;exports.UnboundError=x;exports.__FastEventScope__=J;exports.__FastEvent__=Q;exports.__expandable__=k;exports.createAsyncEventIterator=R;exports.expandable=he;exports.isAsyncIterable=A;exports.isClass=xe;exports.isExpandable=D;exports.isFastEvent=be;exports.isFastEventMessage=ye;exports.isFastEventScope=I;exports.isFunction=c;exports.isPathMatched=L;exports.isString=ue;exports.isSubsctiber=G;return exports;})({});//# sourceMappingURL=index.global.js.map | ||
| //# sourceMappingURL=index.global.js.map |
+1
-1
@@ -1,2 +0,2 @@ | ||
| 'use strict';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}};exports.AbortError=y;exports.CancelError=d;exports.FastEvent=H;exports.FastEventError=E;exports.FastEventIterator=P;exports.FastEventListenerFlags=q;exports.FastEventScope=M;exports.QueueOverflowError=w;exports.TimeoutError=O;exports.UnboundError=x;exports.__FastEventScope__=J;exports.__FastEvent__=Q;exports.__expandable__=k;exports.createAsyncEventIterator=R;exports.expandable=he;exports.isAsyncIterable=A;exports.isClass=xe;exports.isExpandable=D;exports.isFastEvent=be;exports.isFastEventMessage=ye;exports.isFastEventScope=I;exports.isFunction=c;exports.isPathMatched=L;exports.isString=ue;exports.isSubsctiber=G;//# sourceMappingURL=index.js.map | ||
| 'use strict';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]),p++;}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(e[t][1],1),this.listenerCount--);}}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}};exports.AbortError=y;exports.CancelError=d;exports.FastEvent=H;exports.FastEventError=E;exports.FastEventIterator=P;exports.FastEventListenerFlags=q;exports.FastEventScope=M;exports.QueueOverflowError=w;exports.TimeoutError=O;exports.UnboundError=x;exports.__FastEventScope__=J;exports.__FastEvent__=Q;exports.__expandable__=k;exports.createAsyncEventIterator=R;exports.expandable=he;exports.isAsyncIterable=A;exports.isClass=xe;exports.isExpandable=D;exports.isFastEvent=be;exports.isFastEventMessage=ye;exports.isFastEventScope=I;exports.isFunction=c;exports.isPathMatched=L;exports.isString=ue;exports.isSubsctiber=G;//# sourceMappingURL=index.js.map | ||
| //# sourceMappingURL=index.js.map |
+1
-1
@@ -1,2 +0,2 @@ | ||
| 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 | ||
| 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]),p++;}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(e[t][1],1),this.listenerCount--);}}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 | ||
| //# sourceMappingURL=index.mjs.map |
@@ -1,2 +0,2 @@ | ||
| var FastLiteEvent=(function(exports){'use strict';var L=Object.defineProperty;var _=(a,e,t)=>e in a?L(a,e,{enumerable:true,configurable:true,writable:true,value:t}):a[e]=t;var d=(a,e,t)=>_(a,typeof e!="symbol"?e+"":e,t);function v(a,e){let t=a.length,s=e.length;if(t!==s&&(s===0||e[s-1]!=="**"))return false;if(s>0&&e[s-1]==="**"){for(let n=0;n<s-1;n++)if(e[n]!=="*"&&e[n]!==a[n])return false;return true}for(let n=0;n<t;n++)if(e[n]!=="*"&&e[n]!==a[n])return false;return true}function c(a,e){let t=[];for(let s=a.length-1;s>=0;s--)e(a[s])&&(t.push(s),a.splice(s,1));return t.reverse()}function u(a){return a&&typeof a=="function"}var F=Symbol.for("__expandable__");function f(a){return a&&a[F]}function y(a){for(let e=0;e<a.length;e++){let t=a[e];Array.isArray(t)&&f(t)&&(a.splice(e,1,...t),e+=t.length-1);}return a}function m(a,e){return a.catch(t=>(e&&e(t),Promise.resolve(t)))}function g(a){return a.map(e=>e.status==="fulfilled"?e.value:e.reason)}function b(a){let e={},t={};return typeof a[0]=="object"?(Object.assign(e,a[0]),t=typeof a[1]=="boolean"?{retain:a[1]}:{}):(e.type=a[0],e.payload=a[1],t=typeof a[2]=="boolean"?{retain:a[2]}:{}),[e,t]}var h=class{constructor(e){d(this,"__FastLiteEvent__",true);d(this,"listeners",{__listeners:[]});d(this,"_options");d(this,"_delimiter","/");d(this,"retainedMessages",new Map);d(this,"listenerCount",0);this._options=Object.assign({id:Math.random().toString(36).substring(2),delimiter:"/",ignoreErrors:true,expandEmitResults:true},this._initOptions(e)),this._delimiter=this._options.delimiter;}get options(){return this._options}get id(){return this._options.id}get title(){return this._options.title||this.id||"FastLiteEvent"}_initOptions(e){return e}_addListener(e,t,s){let n=0;return [this._forEachNodes(e,r=>{let o=[t,s.count,0,s.tag,s.flags];r.__listeners.push(o),n=r.__listeners.length-1,this.listenerCount++;}),n]}_forEachNodes(e,t){if(e.length===0)return;let s=this.listeners;for(let n=0;n<e.length;n++){let i=e[n];if(i in s||(s[i]={__listeners:[]}),n===e.length-1){let r=s[i];return t(r,s),r}else s=s[i];}}_removeListener(e,t,s){s&&c(e.__listeners,n=>{n=Array.isArray(n)?n[0]:n;let i=n===s;return i&&this.listenerCount--,i});}on(e,t,s){if(e.length===0)throw new Error("event cannot be empty");let n=Object.assign({count:0,flags:0},s),i=e.split(this._delimiter),[r,o]=this._addListener(i,t,n),l=()=>r&&this._removeListener(r,i,t);return this._emitRetainMessage(e,r,o),{off:l,listener:t,[Symbol.dispose](){l();}}}once(e,t,s){return this.on(e,t,Object.assign({},s,{count:1}))}onAny(e,t){return this.on("**",e,t)}off(){let e=arguments,t=u(e[0])?void 0:e[0],s=u(e[0])?e[0]:e[1],n=t?t.split(this._delimiter):[],i=t?t.includes("*"):false;if(t&&!i)this._traverseToPath(this.listeners,n,r=>{s?this._removeListener(r,n,s):t&&(r.__listeners=[]);});else {let r=i?[]:n;this._traverseListeners(this.listeners,r,(o,l)=>{(s!==void 0||i&&v(o,n))&&(s?this._removeListener(l,n,s):l.__listeners=[]);});}}offAll(e){if(e){let t=e.split(this._delimiter),s=0;this._traverseListeners(this.listeners,t,(n,i)=>{s+=i.__listeners.length,i.__listeners=[];}),this.listenerCount-=s,this._removeRetainedEvents(e);}else {let t=0;this._traverseListeners(this.listeners,[],(s,n)=>{t+=n.__listeners.length;}),this.listenerCount-=t,this.retainedMessages.clear(),this.listeners={__listeners:[]};}}_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 n=[];if(e.includes("*")){let i=e.split(this._delimiter);this.retainedMessages.forEach((r,o)=>{let l=o.split(this._delimiter);v(l,i)&&n.push(r);});}else this.retainedMessages.has(e)&&n.push(this.retainedMessages.get(e));t&&n.forEach(i=>{this._executeListeners([t],i,{},r=>r[0]===t.__listeners[s][0]);});}_traverseToPath(e,t,s,n=0,i){if(n>=t.length){s(e);return}let r=t[n];if(i===true){this._traverseToPath(e,t,s,n+1,true);return}"*"in e&&this._traverseToPath(e["*"],t,s,n+1),"**"in e&&this._traverseToPath(e["**"],t,s,n+1,true),r in e&&this._traverseToPath(e[r],t,s,n+1);}_traverseListeners(e,t,s){let n=e;t&&t.length>0&&this._traverseToPath(e,t,r=>{n=r;});let i=(r,o,l)=>{o(l,r);for(let[p,E]of Object.entries(r))p.startsWith("__")||E&&i(E,o,[...l,p]);};i(n,s,[]);}_onListenerError(e,t,s,n){if(n instanceof Error&&(n._emitter=`${e.name||"anonymous"}:${t.type}`),this._options.ignoreErrors)return n;throw n}_executeListener(e,t,s,n=false){let i=e[0];try{let r=((s?.flags||0)&1)>0,o=i.call(this,r?t.payload:t,s);return n&&o&&o instanceof Promise&&(o=m(o,l=>this._onListenerError(i,t,s,l))),o}catch(r){return this._onListenerError(i,t,s,r)}}_executeListeners(e,t,s,n){if(!e||e.length===0)return [];let i=[];for(let r of e){let o=0;for(let l of r.__listeners)(!n||n(l,r))&&i.push([l,o++,r.__listeners]);}return this._decListenerExecCount(i),i.map(r=>this._executeListener(r[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,i=>{t.push(i);});let n=[];return t.map(i=>{n.push(...i.__listeners);}),n}clearRetainMessages(e){e?this.retainedMessages.delete(e):this.retainedMessages.clear();}emit(){let[e,t]=b(arguments),s=e.type.split(this._delimiter);t.retain&&this.retainedMessages.set(e.type,e);let n=[];if(this._traverseToPath(this.listeners,s,r=>{n.push(r);}),u(this._options.transform)){let r=this._options.transform.call(this,e);r!==e&&(e.payload=r,t.rawEventType=e.type,t.flags=(t.flags||0)|1);}let i=[];return i.push(...this._executeListeners(n,e,t)),this._options.expandEmitResults&&y(i),i}async emitAsync(){let e=await Promise.allSettled(this.emit.apply(this,arguments));return g(e)}};exports.FastLiteEvent=h;return exports;})({});//# sourceMappingURL=liteEvent.global.js.map | ||
| var FastLiteEvent=(function(exports){'use strict';var L=Object.defineProperty;var _=(a,e,t)=>e in a?L(a,e,{enumerable:true,configurable:true,writable:true,value:t}):a[e]=t;var d=(a,e,t)=>_(a,typeof e!="symbol"?e+"":e,t);function v(a,e){let t=a.length,s=e.length;if(t!==s&&(s===0||e[s-1]!=="**"))return false;if(s>0&&e[s-1]==="**"){for(let n=0;n<s-1;n++)if(e[n]!=="*"&&e[n]!==a[n])return false;return true}for(let n=0;n<t;n++)if(e[n]!=="*"&&e[n]!==a[n])return false;return true}function c(a,e){let t=[];for(let s=a.length-1;s>=0;s--)e(a[s])&&(t.push(s),a.splice(s,1));return t.reverse()}function u(a){return a&&typeof a=="function"}var F=Symbol.for("__expandable__");function f(a){return a&&a[F]}function y(a){for(let e=0;e<a.length;e++){let t=a[e];Array.isArray(t)&&f(t)&&(a.splice(e,1,...t),e+=t.length-1);}return a}function m(a,e){return a.catch(t=>(e&&e(t),Promise.resolve(t)))}function g(a){return a.map(e=>e.status==="fulfilled"?e.value:e.reason)}function b(a){let e={},t={};return typeof a[0]=="object"?(Object.assign(e,a[0]),t=typeof a[1]=="boolean"?{retain:a[1]}:{}):(e.type=a[0],e.payload=a[1],t=typeof a[2]=="boolean"?{retain:a[2]}:{}),[e,t]}var h=class{constructor(e){d(this,"__FastLiteEvent__",true);d(this,"listeners",{__listeners:[]});d(this,"_options");d(this,"_delimiter","/");d(this,"retainedMessages",new Map);d(this,"listenerCount",0);this._options=Object.assign({id:Math.random().toString(36).substring(2),delimiter:"/",ignoreErrors:true,expandEmitResults:true},this._initOptions(e)),this._delimiter=this._options.delimiter;}get options(){return this._options}get id(){return this._options.id}get title(){return this._options.title||this.id||"FastLiteEvent"}_initOptions(e){return e}_addListener(e,t,s){let n=0;return [this._forEachNodes(e,r=>{let o=[t,s.count,0,s.tag,s.flags];r.__listeners.push(o),n=r.__listeners.length-1,this.listenerCount++;}),n]}_forEachNodes(e,t){if(e.length===0)return;let s=this.listeners;for(let n=0;n<e.length;n++){let i=e[n];if(i in s||(s[i]={__listeners:[]}),n===e.length-1){let r=s[i];return t(r,s),r}else s=s[i];}}_removeListener(e,t,s){s&&c(e.__listeners,n=>{n=Array.isArray(n)?n[0]:n;let i=n===s;return i&&this.listenerCount--,i});}on(e,t,s){if(e.length===0)throw new Error("event cannot be empty");let n=Object.assign({count:0,flags:0},s),i=e.split(this._delimiter),[r,o]=this._addListener(i,t,n),l=()=>r&&this._removeListener(r,i,t);return this._emitRetainMessage(e,r,o),{off:l,listener:t,[Symbol.dispose](){l();}}}once(e,t,s){return this.on(e,t,Object.assign({},s,{count:1}))}onAny(e,t){return this.on("**",e,t)}off(){let e=arguments,t=u(e[0])?void 0:e[0],s=u(e[0])?e[0]:e[1],n=t?t.split(this._delimiter):[],i=t?t.includes("*"):false;if(t&&!i)this._traverseToPath(this.listeners,n,r=>{s?this._removeListener(r,n,s):t&&(r.__listeners=[]);});else {let r=i?[]:n;this._traverseListeners(this.listeners,r,(o,l)=>{(s!==void 0||i&&v(o,n))&&(s?this._removeListener(l,n,s):l.__listeners=[]);});}}offAll(e){if(e){let t=e.split(this._delimiter),s=0;this._traverseListeners(this.listeners,t,(n,i)=>{s+=i.__listeners.length,i.__listeners=[];}),this.listenerCount-=s,this._removeRetainedEvents(e);}else {let t=0;this._traverseListeners(this.listeners,[],(s,n)=>{t+=n.__listeners.length;}),this.listenerCount-=t,this.retainedMessages.clear(),this.listeners={__listeners:[]};}}_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 n=[];if(e.includes("*")){let i=e.split(this._delimiter);this.retainedMessages.forEach((r,o)=>{let l=o.split(this._delimiter);v(l,i)&&n.push(r);});}else this.retainedMessages.has(e)&&n.push(this.retainedMessages.get(e));t&&n.forEach(i=>{this._executeListeners([t],i,{},r=>r[0]===t.__listeners[s][0]);});}_traverseToPath(e,t,s,n=0,i){if(n>=t.length){s(e);return}let r=t[n];if(i===true){this._traverseToPath(e,t,s,n+1,true);return}"*"in e&&this._traverseToPath(e["*"],t,s,n+1),"**"in e&&this._traverseToPath(e["**"],t,s,n+1,true),r in e&&this._traverseToPath(e[r],t,s,n+1);}_traverseListeners(e,t,s){let n=e;t&&t.length>0&&this._traverseToPath(e,t,r=>{n=r;});let i=(r,o,l)=>{o(l,r);for(let[p,E]of Object.entries(r))p.startsWith("__")||E&&i(E,o,[...l,p]);};i(n,s,[]);}_onListenerError(e,t,s,n){if(n instanceof Error&&(n._emitter=`${e.name||"anonymous"}:${t.type}`),this._options.ignoreErrors)return n;throw n}_executeListener(e,t,s,n=false){let i=e[0];try{let r=((s?.flags||0)&1)>0,o=i.call(this,r?t.payload:t,s);return n&&o&&o instanceof Promise&&(o=m(o,l=>this._onListenerError(i,t,s,l))),o}catch(r){return this._onListenerError(i,t,s,r)}}_executeListeners(e,t,s,n){if(!e||e.length===0)return [];let i=[];for(let r of e){let o=0;for(let l of r.__listeners)(!n||n(l,r))&&i.push([l,o,r.__listeners]),o++;}return this._decListenerExecCount(i),i.map(r=>this._executeListener(r[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(e[t][1],1),this.listenerCount--);}}getListeners(e){let t=[],s=e.split(this._delimiter);this._traverseToPath(this.listeners,s,i=>{t.push(i);});let n=[];return t.map(i=>{n.push(...i.__listeners);}),n}clearRetainMessages(e){e?this.retainedMessages.delete(e):this.retainedMessages.clear();}emit(){let[e,t]=b(arguments),s=e.type.split(this._delimiter);t.retain&&this.retainedMessages.set(e.type,e);let n=[];if(this._traverseToPath(this.listeners,s,r=>{n.push(r);}),u(this._options.transform)){let r=this._options.transform.call(this,e);r!==e&&(e.payload=r,t.rawEventType=e.type,t.flags=(t.flags||0)|1);}let i=[];return i.push(...this._executeListeners(n,e,t)),this._options.expandEmitResults&&y(i),i}async emitAsync(){let e=await Promise.allSettled(this.emit.apply(this,arguments));return g(e)}};exports.FastLiteEvent=h;return exports;})({});//# sourceMappingURL=liteEvent.global.js.map | ||
| //# sourceMappingURL=liteEvent.global.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/utils/isPathMatched.ts","../src/utils/removeItem.ts","../src/utils/isFunction.ts","../src/utils/expandable.ts","../src/utils/expandEmitResults.ts","../src/utils/tryReturnError.ts","../src/utils/getPromiseResults.ts","../src/liteEvent.ts"],"names":["isPathMatched","path","pattern","pathLen","patternLen","i","removeItem","arr","condition","removedIndices","isFunction","fn","__expandable__","isExpandable","value","expandEmitResults","items","item","tryReturnError","callback","e","getPromiseResults","results","result","parseLiteEmitArgs","args","message","emitArgs","FastLiteEvent","options","__publicField","initial","parts","listener","index","node","newListener","current","part","isRemove","type","finalOptions","off","hasWildcard","entryParts","entry","count","_path","prefix","key","listenerNode","messages","patterns","t","listenerMeta","lastFollowing","entryNode","n","traverseNodes","parentPath","childNode","_args","catchErrors","listenerFn","isTransformed","nodes","filter","listeners","meta","transformed"],"mappings":"kDAiBO,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,IAAA,CAAA,YAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAASA,EAAcC,CAAgBC,CAAAA,CAAAA,CAA4B,CACtE,IAAMC,CAAAA,CAAUF,EAAK,MACfG,CAAAA,CAAAA,CAAaF,CAAQ,CAAA,MAAA,CAG3B,GAAIC,CAAYC,GAAAA,CAAAA,GAAeA,IAAe,CAAKF,EAAAA,CAAAA,CAAQE,EAAa,CAAC,CAAA,GAAM,IAC3E,CAAA,CAAA,OAAO,OAIX,GAAIA,CAAAA,CAAa,GAAKF,CAAQE,CAAAA,CAAAA,CAAa,CAAC,CAAM,GAAA,IAAA,CAAM,CAEpD,IAASC,IAAAA,CAAAA,CAAI,EAAGA,CAAID,CAAAA,CAAAA,CAAa,EAAGC,CAChC,EAAA,CAAA,GAAIH,EAAQG,CAAC,CAAA,GAAM,GAAOH,EAAAA,CAAAA,CAAQG,CAAC,CAAMJ,GAAAA,CAAAA,CAAKI,CAAC,CAC3C,CAAA,OAAO,OAGf,OAAO,KACX,CAGA,IAASA,IAAAA,CAAAA,CAAI,EAAGA,CAAIF,CAAAA,CAAAA,CAASE,IACzB,GAAIH,CAAAA,CAAQG,CAAC,CAAM,GAAA,GAAA,EAAOH,CAAQG,CAAAA,CAAC,IAAMJ,CAAKI,CAAAA,CAAC,EAC3C,OAAO,MAAA,CAIf,OAAO,KACX,CCvCO,SAASC,CAAWC,CAAAA,CAAAA,CAAYC,EAAmC,CACtE,IAAMC,EAA2B,EAAC,CAElC,QAASJ,CAAIE,CAAAA,CAAAA,CAAI,MAAS,CAAA,CAAA,CAAGF,GAAK,CAAGA,CAAAA,CAAAA,EAAAA,CAC7BG,EAAUD,CAAIF,CAAAA,CAAC,CAAC,CAChBI,GAAAA,CAAAA,CAAe,IAAKJ,CAAAA,CAAC,EACrBE,CAAI,CAAA,MAAA,CAAOF,EAAG,CAAC,CAAA,CAAA,CAKvB,OAAOI,CAAe,CAAA,OAAA,EAC1B,CClBO,SAASC,CAAWC,CAAAA,CAAAA,CAAyB,CAChD,OAAOA,CAAAA,EAAM,OAAQA,CAAO,EAAA,UAChC,CCwCO,IAAMC,CAAAA,CAAiB,OAAO,GAAI,CAAA,gBAAgB,EAOlD,SAASC,CAAAA,CAAaC,EAAY,CACrC,OAAOA,CAASA,EAAAA,CAAAA,CAAMF,CAAc,CACxC,CC5CO,SAASG,CAAkBC,CAAAA,CAAAA,CAAqB,CACnD,IAASX,IAAAA,CAAAA,CAAI,EAAGA,CAAIW,CAAAA,CAAAA,CAAM,OAAQX,CAAK,EAAA,CAAA,CACnC,IAAMY,CAAOD,CAAAA,CAAAA,CAAMX,CAAC,CAChB,CAAA,KAAA,CAAM,OAAQY,CAAAA,CAAI,GAAKJ,CAAaI,CAAAA,CAAI,IACxCD,CAAM,CAAA,MAAA,CAAOX,EAAG,CAAG,CAAA,GAAGY,CAAI,CAC1BZ,CAAAA,CAAAA,EAAKY,EAAK,MAAS,CAAA,CAAA,EAE3B,CACA,OAAOD,CAEX,CCVO,SAASE,CAAAA,CAAeP,CAAkBQ,CAAAA,CAAAA,CAA0C,CACvF,OAAOR,CAAAA,CAAG,MAAOS,CACTD,GAAAA,CAAAA,EAAUA,EAASC,CAAC,CAAA,CACjB,OAAQ,CAAA,OAAA,CAAQA,CAAC,CAC3B,CAAA,CACL,CCZO,SAASC,CAAAA,CAAkBC,EAAgB,CAC9C,OAAOA,CAAQ,CAAA,GAAA,CAAKC,GACZA,CAAO,CAAA,MAAA,GAAW,YACXA,CAAO,CAAA,KAAA,CAEPA,EAAO,MAErB,CACL,CC2FA,SAASC,CAAAA,CACLC,EAC6C,CAC7C,IAAIC,EAAU,EAAC,CACXC,EAAiC,EAAC,CACtC,OAAI,OAAOF,EAAK,CAAC,CAAA,EAAM,UACnB,MAAO,CAAA,MAAA,CAAOC,EAASD,CAAK,CAAA,CAAC,CAAC,CAC9BE,CAAAA,CAAAA,CAAW,OAAOF,CAAK,CAAA,CAAC,GAAM,SAAY,CAAA,CAAE,OAAQA,CAAK,CAAA,CAAC,CAAE,CAAA,CAAI,EAEhEC,GAAAA,CAAAA,CAAQ,KAAOD,CAAK,CAAA,CAAC,EACrBC,CAAQ,CAAA,OAAA,CAAUD,EAAK,CAAC,CAAA,CACxBE,EAAW,OAAOF,CAAAA,CAAK,CAAC,CAAM,EAAA,SAAA,CAAY,CAAE,MAAQA,CAAAA,CAAAA,CAAK,CAAC,CAAE,EAAI,EAAC,CAAA,CAE9D,CAACC,CAASC,CAAAA,CAAQ,CAC7B,CAOO,IAAMC,CAAN,CAAA,KAKL,CA8BE,WAAYC,CAAAA,CAAAA,CAAyC,CA7BrDC,CAAA,CAAA,IAAA,CAAA,mBAAA,CAA6B,MAG7BA,CAAA,CAAA,IAAA,CAAO,WAA2B,CAAA,CAC9B,YAAa,EACjB,GAGAA,CAAA,CAAA,IAAA,CAAQ,YAGRA,CAAA,CAAA,IAAA,CAAQ,aAAqB,GAG7BA,CAAAA,CAAAA,CAAAA,CAAA,wBAAqC,IAAI,GAAA,CAAA,CAGzCA,EAAA,IAAwB,CAAA,eAAA,CAAA,CAAA,CAAA,CAapB,KAAK,QAAW,CAAA,MAAA,CAAO,MACnB,CAAA,CACI,GAAI,IAAK,CAAA,MAAA,GAAS,QAAS,CAAA,EAAE,EAAE,SAAU,CAAA,CAAC,EAC1C,SAAW,CAAA,GAAA,CACX,aAAc,IACd,CAAA,iBAAA,CAAmB,IACvB,CACA,CAAA,IAAA,CAAK,aAAaD,CAAO,CAC7B,CACA,CAAA,IAAA,CAAK,WAAa,IAAK,CAAA,QAAA,CAAS,UACpC,CAGA,IAAI,SAAU,CACV,OAAO,KAAK,QAChB,CAEA,IAAI,EAAK,EAAA,CACL,OAAO,IAAK,CAAA,QAAA,CAAS,EACzB,CAEA,IAAI,KAAQ,EAAA,CACR,OAAO,IAAK,CAAA,QAAA,CAAS,OAAS,IAAK,CAAA,EAAA,EAAM,eAC7C,CAMA,YAAA,CAAaE,CAAyC,CAAA,CAClD,OAAOA,CACX,CASQ,aACJC,CACAC,CAAAA,CAAAA,CACAJ,EAC2C,CAC3C,IAAIK,CAAgB,CAAA,CAAA,CAapB,OAAO,CAZM,IAAA,CAAK,cAAcF,CAAQG,CAAAA,CAAAA,EAAS,CAC7C,IAAMC,CAAAA,CAAc,CAChBH,CACAJ,CAAAA,CAAAA,CAAQ,MACR,CACAA,CAAAA,CAAAA,CAAQ,IACRA,CAAQ,CAAA,KACZ,EACAM,CAAK,CAAA,WAAA,CAAY,IAAKC,CAAAA,CAAW,EACjCF,CAAQC,CAAAA,CAAAA,CAAK,YAAY,MAAS,CAAA,CAAA,CAClC,KAAK,aACT,GAAA,CAAC,EACaD,CAAK,CACvB,CAKQ,aACJF,CAAAA,CAAAA,CACAb,EACiC,CACjC,GAAIa,EAAM,MAAW,GAAA,CAAA,CAAG,OACxB,IAAIK,EAAU,IAAK,CAAA,SAAA,CACnB,QAAShC,CAAI,CAAA,CAAA,CAAGA,EAAI2B,CAAM,CAAA,MAAA,CAAQ3B,IAAK,CACnC,IAAMiC,EAAON,CAAM3B,CAAAA,CAAC,EAMpB,GALMiC,CAAAA,IAAQD,IACVA,CAAQC,CAAAA,CAAI,CAAI,CAAA,CACZ,YAAa,EACjB,GAEAjC,CAAM2B,GAAAA,CAAAA,CAAM,OAAS,CAAG,CAAA,CACxB,IAAMG,CAAAA,CAAOE,EAAQC,CAAI,CAAA,CACzB,OAAAnB,CAASgB,CAAAA,CAAAA,CAAME,CAAO,CACfF,CAAAA,CACX,CACIE,KAAAA,CAAAA,CAAUA,EAAQC,CAAI,EAE9B,CAEJ,CAKQ,eAAA,CACJH,EACAlC,CACAgC,CAAAA,CAAAA,CACI,CACCA,CACL3B,EAAAA,CAAAA,CAAW6B,EAAK,WAAclB,CAAAA,CAAAA,EAAc,CACxCA,CAAO,CAAA,KAAA,CAAM,QAAQA,CAAI,CAAA,CAAIA,CAAK,CAAA,CAAC,EAAIA,CACvC,CAAA,IAAMsB,EAAWtB,CAASgB,GAAAA,CAAAA,CAC1B,OAAIM,CAAU,EAAA,IAAA,CAAK,gBACZA,CACX,CAAC,EACL,CASO,EAAA,CACHC,EACAP,CASAJ,CAAAA,CAAAA,CACmB,CACnB,GAAIW,CAAAA,CAAK,MAAW,GAAA,CAAA,CAAG,MAAM,IAAI,KAAA,CAAM,uBAAuB,CAC9D,CAAA,IAAMC,EAAe,MAAO,CAAA,MAAA,CACxB,CAAE,KAAO,CAAA,CAAA,CAAG,MAAO,CAAE,CAAA,CACrBZ,CACJ,CAEMG,CAAAA,CAAAA,CAAQQ,EAAK,KAAM,CAAA,IAAA,CAAK,UAAU,CAAA,CAClC,CAACL,CAAMD,CAAAA,CAAK,EAAI,IAAK,CAAA,YAAA,CAAaF,EAAOC,CAAiBQ,CAAAA,CAAY,CACtEC,CAAAA,CAAAA,CAAM,IAAMP,CAAQ,EAAA,IAAA,CAAK,gBAAgBA,CAAMH,CAAAA,CAAAA,CAAOC,CAAe,CAG3E,CAAA,OAAA,IAAA,CAAK,kBAAmBO,CAAAA,CAAAA,CAAML,EAAMD,CAAK,CAAA,CAElC,CACH,GAAAQ,CAAAA,CAAAA,CACA,SAAUT,CACV,CAAA,CAAC,OAAO,OAAO,CAAA,EAAI,CACfS,CAAI,GACR,CACJ,CACJ,CAKO,KACHF,CACAP,CAAAA,CAAAA,CASAJ,CACmB,CAAA,CACnB,OAAO,IAAK,CAAA,EAAA,CAAGW,EAAMP,CAAU,CAAA,MAAA,CAAO,OAAO,EAAC,CAAGJ,EAAS,CAAE,KAAA,CAAO,CAAE,CAAC,CAAC,CAC3E,CAKO,KAAA,CACHI,EACAJ,CACmB,CAAA,CACnB,OAAO,IAAA,CAAK,GAAG,IAAMI,CAAAA,CAAAA,CAAiBJ,CAAc,CACxD,CASA,KAAM,CACF,IAAMJ,EAAO,SACPe,CAAAA,CAAAA,CAAO9B,EAAWe,CAAK,CAAA,CAAC,CAAC,CAAI,CAAA,MAAA,CAAYA,EAAK,CAAC,CAAA,CAC/CQ,CAAWvB,CAAAA,CAAAA,CAAWe,EAAK,CAAC,CAAC,EAAIA,CAAK,CAAA,CAAC,EAAIA,CAAK,CAAA,CAAC,CACjDO,CAAAA,CAAAA,CAAQQ,EAAOA,CAAK,CAAA,KAAA,CAAM,KAAK,UAAU,CAAA,CAAI,EAC7CG,CAAAA,CAAAA,CAAcH,CAAOA,CAAAA,CAAAA,CAAK,SAAS,GAAG,CAAA,CAAI,MAChD,GAAIA,CAAAA,EAAQ,CAACG,CACT,CAAA,IAAA,CAAK,gBAAgB,IAAK,CAAA,SAAA,CAAWX,EAAQG,CAAS,EAAA,CAC9CF,EACA,IAAK,CAAA,eAAA,CAAgBE,EAAMH,CAAOC,CAAAA,CAAQ,CACnCO,CAAAA,CAAAA,GACPL,EAAK,WAAc,CAAA,IAE3B,CAAC,CAAA,CAAA,KACE,CACH,IAAMS,CAAAA,CAAuBD,EAAc,EAAC,CAAIX,EAChD,IAAK,CAAA,kBAAA,CAAmB,KAAK,SAAWY,CAAAA,CAAAA,CAAY,CAAC3C,CAAMkC,CAAAA,CAAAA,GAAS,CAC5DF,CAAAA,CAAAA,GAAa,QAAcU,CAAe3C,EAAAA,CAAAA,CAAcC,EAAM+B,CAAK,CAAA,IAC/DC,EACA,IAAK,CAAA,eAAA,CAAgBE,EAAMH,CAAOC,CAAAA,CAAQ,EAE1CE,CAAK,CAAA,WAAA,CAAc,EAG/B,EAAA,CAAC,EACL,CACJ,CAMA,MAAOU,CAAAA,CAAAA,CAAgB,CACnB,GAAIA,CAAAA,CAAO,CACP,IAAMb,CAAAA,CAAQa,EAAM,KAAM,CAAA,IAAA,CAAK,UAAU,CAAA,CACrCC,EAAQ,CACZ,CAAA,IAAA,CAAK,mBAAmB,IAAK,CAAA,SAAA,CAAWd,EAAO,CAACe,CAAAA,CAAOZ,CAAS,GAAA,CAC5DW,GAASX,CAAK,CAAA,WAAA,CAAY,OAC1BA,CAAK,CAAA,WAAA,CAAc,GACvB,CAAC,EACD,IAAK,CAAA,aAAA,EAAiBW,EACtB,IAAK,CAAA,qBAAA,CAAsBD,CAAK,EACpC,CAAA,KAAO,CACH,IAAIC,CAAAA,CAAQ,CACZ,CAAA,IAAA,CAAK,mBAAmB,IAAK,CAAA,SAAA,CAAW,EAAI,CAAA,CAACC,EAAOZ,CAAS,GAAA,CACzDW,GAASX,CAAK,CAAA,WAAA,CAAY,OAC9B,CAAC,CAAA,CACD,KAAK,aAAiBW,EAAAA,CAAAA,CACtB,KAAK,gBAAiB,CAAA,KAAA,EACtB,CAAA,IAAA,CAAK,UAAY,CAAE,WAAA,CAAa,EAAG,EACvC,CACJ,CAKQ,qBAAA,CAAsBE,EAAiB,CACtCA,CAAAA,EAAQ,KAAK,gBAAiB,CAAA,KAAA,GAC/BA,CAAQ,EAAA,QAAA,CAAS,KAAK,UAAU,CAAA,GAChCA,CAAU,EAAA,IAAA,CAAK,YAEnB,IAAK,CAAA,gBAAA,CAAiB,OAAOA,CAAO,CAAA,CACpC,QAASC,CAAO,IAAA,IAAA,CAAK,gBAAiB,CAAA,IAAA,GAC9BA,CAAI,CAAA,UAAA,CAAWD,CAAO,CACtB,EAAA,IAAA,CAAK,iBAAiB,MAAOC,CAAAA,CAAG,EAG5C,CAKA,MAAMD,CAAiB,CAAA,CACnB,KAAK,MAAOA,CAAAA,CAAM,EAClB,IAAK,CAAA,qBAAA,CAAsBA,CAAM,EACrC,CAKQ,mBACJR,CACAU,CAAAA,CAAAA,CACAhB,EACF,CACE,IAAIiB,EAAW,EAAC,CAChB,GAAIX,CAAAA,CAAK,SAAS,GAAG,CAAA,CAAG,CACpB,IAAMY,CAAAA,CAAWZ,EAAK,KAAM,CAAA,IAAA,CAAK,UAAU,CAC3C,CAAA,IAAA,CAAK,iBAAiB,OAAQ,CAAA,CAACd,EAAS2B,CAAM,GAAA,CAC1C,IAAMrB,CAAQqB,CAAAA,CAAAA,CAAE,KAAM,CAAA,IAAA,CAAK,UAAU,CACjCrD,CAAAA,CAAAA,CAAcgC,EAAOoB,CAAQ,CAAA,EAC7BD,EAAS,IAAKzB,CAAAA,CAAO,EAE7B,CAAC,EACL,MAAW,IAAK,CAAA,gBAAA,CAAiB,IAAIc,CAAI,CAAA,EACrCW,EAAS,IAAK,CAAA,IAAA,CAAK,gBAAiB,CAAA,GAAA,CAAIX,CAAI,CAAC,CAAA,CAE7CU,GACAC,CAAS,CAAA,OAAA,CAASzB,GAAY,CAC1B,IAAA,CAAK,iBAAkB,CAAA,CAACwB,CAAY,CAAGxB,CAAAA,CAAAA,CAAS,EAAK4B,CAAAA,CAAAA,EAC1CA,EAAa,CAAC,CAAA,GAAMJ,CAAa,CAAA,WAAA,CAAYhB,CAAK,CAAE,CAAA,CAAC,CAC/D,EACL,CAAC,EAET,CAKQ,eAAA,CACJC,EACAH,CACAb,CAAAA,CAAAA,CACAe,EAAgB,CAChBqB,CAAAA,CAAAA,CACI,CACJ,GAAIrB,CAAAA,EAASF,EAAM,MAAQ,CAAA,CACvBb,CAASgB,CAAAA,CAAI,EACb,MACJ,CACA,IAAMG,CAAON,CAAAA,CAAAA,CAAME,CAAK,CACxB,CAAA,GAAIqB,IAAkB,IAAM,CAAA,CACxB,KAAK,eAAgBpB,CAAAA,CAAAA,CAAMH,EAAOb,CAAUe,CAAAA,CAAAA,CAAQ,EAAG,IAAI,CAAA,CAC3D,MACJ,CACI,MAAOC,CACP,EAAA,IAAA,CAAK,gBAAgBA,CAAK,CAAA,GAAG,EAAGH,CAAOb,CAAAA,CAAAA,CAAUe,EAAQ,CAAC,CAAA,CAE1D,OAAQC,CACR,EAAA,IAAA,CAAK,gBAAgBA,CAAK,CAAA,IAAI,EAAGH,CAAOb,CAAAA,CAAAA,CAAUe,CAAQ,CAAA,CAAA,CAAG,IAAI,CAEjEI,CAAAA,CAAAA,IAAQH,GACR,IAAK,CAAA,eAAA,CAAgBA,EAAKG,CAAI,CAAA,CAAGN,CAAOb,CAAAA,CAAAA,CAAUe,EAAQ,CAAC,EAEnE,CAEQ,kBACJC,CAAAA,CAAAA,CACAU,EACA1B,CACI,CAAA,CACJ,IAAIqC,CAAAA,CAAmCrB,EACnCU,CAASA,EAAAA,CAAAA,CAAM,OAAS,CACxB,EAAA,IAAA,CAAK,gBAAgBV,CAAMU,CAAAA,CAAAA,CAAQY,GAAM,CACrCD,CAAAA,CAAYC,EAChB,CAAC,CAAA,CAEL,IAAMC,CAAgB,CAAA,CAClBvB,EACAhB,CACAwC,CAAAA,CAAAA,GACC,CACDxC,CAAAA,CAASwC,EAAYxB,CAAI,CAAA,CACzB,OAAS,CAACc,CAAAA,CAAKW,CAAS,CAAK,GAAA,MAAA,CAAO,QAAQzB,CAAI,CAAA,CACxCc,EAAI,UAAW,CAAA,IAAI,GACnBW,CACAF,EAAAA,CAAAA,CAAcE,EAAoCzC,CAAU,CAAA,CACxD,GAAGwC,CAAAA,CACHV,CACJ,CAAC,EAGb,EACAS,CAAcF,CAAAA,CAAAA,CAAWrC,EAAU,EAAE,EACzC,CAKQ,gBAAA,CACJc,EACAP,CACAmC,CAAAA,CAAAA,CACAzC,EACF,CAKE,GAJIA,aAAa,KAEbA,GAAAA,CAAAA,CAAE,QAAW,CAAA,CAAA,EAAGa,EAAS,IAAQ,EAAA,WAAW,IAAIP,CAAQ,CAAA,IAAI,IAE5D,IAAK,CAAA,QAAA,CAAS,YACd,CAAA,OAAON,EAEP,MAAMA,CAEd,CAKQ,gBACJa,CAAAA,CAAAA,CACAP,EACAD,CACAqC,CAAAA,CAAAA,CAAuB,KACL,CAAA,CAClB,IAAMC,CAAa9B,CAAAA,CAAAA,CAAS,CAAC,CAC7B,CAAA,GAAI,CACA,IAAM+B,CAAAA,CAAAA,CAAAA,CACAvC,GAAM,KAAS,EAAA,CAAA,EAAK,GAAsC,CAC5DF,CAAAA,CAAAA,CAASwC,EAAW,IACpB,CAAA,IAAA,CACAC,EAAgBtC,CAAQ,CAAA,OAAA,CAAUA,CAClCD,CAAAA,CACJ,EAEA,OAAIqC,CAAAA,EAAevC,GAAUA,CAAkB,YAAA,OAAA,GAC3CA,EAASL,CAAeK,CAAAA,CAAAA,CAASH,GAC7B,IAAK,CAAA,gBAAA,CAAiB2C,EAAYrC,CAASD,CAAAA,CAAAA,CAAML,CAAC,CACtD,CAAA,CAAA,CAEGG,CACX,CAASH,MAAAA,CAAAA,CAAQ,CACb,OAAO,KAAK,gBAAiB2C,CAAAA,CAAAA,CAAYrC,EAASD,CAAML,CAAAA,CAAC,CAC7D,CACJ,CAKQ,kBACJ6C,CACAvC,CAAAA,CAAAA,CACAD,EACAyC,CACK,CAAA,CACL,GAAI,CAACD,CAAAA,EAASA,EAAM,MAAW,GAAA,CAAA,CAAG,OAAO,GACzC,IAAME,CAAAA,CAAwE,EAC9E,CAAA,IAAA,IAAWhC,KAAQ8B,CAAO,CAAA,CACtB,IAAI5D,CAAAA,CAAY,EAChB,IAAW4B,IAAAA,CAAAA,IAAYE,EAAK,WACpB,CAAA,CAAA,CAAC+B,GAAUA,CAAOjC,CAAAA,CAAAA,CAAUE,CAAI,CAAA,GAChCgC,EAAU,IAAK,CAAA,CAAClC,EAAU5B,CAAK8B,EAAAA,CAAAA,CAAAA,CAAK,WAAW,CAAC,EAG5D,CAEA,OAAK,IAAA,CAAA,qBAAA,CAAsBgC,CAAS,CAC7BA,CAAAA,CAAAA,CAAU,IAAKlC,CACX,EAAA,IAAA,CAAK,iBAAiBA,CAAS,CAAA,CAAC,CAAGP,CAAAA,CAAAA,CAASD,EAAM,IAAI,CAChE,CACL,CAKA,qBAAA,CACI0C,EACF,CACE,IAAA,IAAS9D,EAAI8D,CAAU,CAAA,MAAA,CAAS,EAAG9D,CAAK,EAAA,CAAA,CAAGA,IAAK,CAC5C,IAAM+D,EAAOD,CAAU9D,CAAAA,CAAC,CAAE,CAAA,CAAC,EAC3B+D,CAAK,CAAA,CAAC,IAEFA,CAAK,CAAA,CAAC,EAAI,CAAKA,EAAAA,CAAAA,CAAK,CAAC,CAAKA,EAAAA,CAAAA,CAAK,CAAC,CAChCD,EAAAA,CAAAA,CAAU9D,CAAC,CAAE,CAAA,CAAC,EAAE,MAAOA,CAAAA,CAAAA,CAAG,CAAC,EAEnC,CACJ,CAKA,YAAA,CAAamC,EAAuC,CAChD,IAAMyB,EAAiC,EAAC,CAClCjC,CAAQQ,CAAAA,CAAAA,CAAK,MAAM,IAAK,CAAA,UAAU,EACxC,IAAK,CAAA,eAAA,CAAgB,KAAK,SAAWR,CAAAA,CAAAA,CAAQG,CAAS,EAAA,CAClD8B,EAAM,IAAK9B,CAAAA,CAAI,EACnB,CAAC,CAAA,CACD,IAAMgC,CAAmB,CAAA,GACzB,OAAAF,CAAAA,CAAM,IAAK9B,CAAS,EAAA,CAChBgC,EAAU,IAAK,CAAA,GAAGhC,EAAK,WAAW,EACtC,CAAC,CAAA,CACMgC,CACX,CAKA,mBAAA,CAAoB3B,EAA4B,CACxCA,CAAAA,CACA,KAAK,gBAAiB,CAAA,MAAA,CAAOA,CAAc,CAE3C,CAAA,IAAA,CAAK,iBAAiB,KAAM,GAEpC,CA4BO,IAAY,EAAA,CACf,GAAM,CAACd,CAAAA,CAASD,CAAI,CAAA,CAAID,EAAkB,SAAS,CAAA,CAE7CQ,EAAQN,CAAQ,CAAA,IAAA,CAAK,MAAM,IAAK,CAAA,UAAU,EAC5CD,CAAK,CAAA,MAAA,EACL,KAAK,gBAAiB,CAAA,GAAA,CAAIC,EAAQ,IAAMA,CAAAA,CAAO,EAGnD,IAAMuC,CAAAA,CAAiC,EAAC,CAMxC,GALA,IAAK,CAAA,eAAA,CAAgB,KAAK,SAAWjC,CAAAA,CAAAA,CAAQG,GAAS,CAClD8B,CAAAA,CAAM,IAAK9B,CAAAA,CAAI,EACnB,CAAC,CAAA,CAGGzB,EAAW,IAAK,CAAA,QAAA,CAAS,SAAS,CAAG,CAAA,CACrC,IAAM2D,CAAAA,CAAc,KAAK,QAAS,CAAA,SAAA,CAAU,KAAK,IAAM3C,CAAAA,CAAc,EACjE2C,CAAgB3C,GAAAA,CAAAA,GAChBA,EAAQ,OAAU2C,CAAAA,CAAAA,CAClB5C,EAAK,YAAeC,CAAAA,CAAAA,CAAQ,KAC5BD,CAAK,CAAA,KAAA,CAAA,CAASA,EAAK,KAAS,EAAA,CAAA,EAAK,CAEzC,EAAA,CAGA,IAAMH,CAAiB,CAAA,GACvB,OAAAA,CAAAA,CAAQ,KAAK,GAAG,IAAA,CAAK,kBAAkB2C,CAAOvC,CAAAA,CAAAA,CAASD,CAAI,CAAC,CAAA,CAGxD,KAAK,QAAS,CAAA,iBAAA,EACdV,EAAkBO,CAAO,CAAA,CAEtBA,CACX,CA6BA,MAAa,SAA6C,EAAA,CACtD,IAAMA,CAAU,CAAA,MAAM,QAAQ,UAC1B,CAAA,IAAA,CAAK,KAAK,KAAM,CAAA,IAAA,CAAM,SAAgB,CAC1C,CAAA,CACA,OAAOD,CAAkBC,CAAAA,CAAO,CACpC,CAEJ","file":"liteEvent.global.js","sourcesContent":["/**\n *\n * 判断path是否与pattern匹配\n *\n * isPathMatched(\"a.b.c\",\"a.b.c\") == true\n * isPathMatched(\"a.b.c\",\"a.b.*\") == true\n * isPathMatched(\"a.b.c\",\"a.*.*\") == true\n * isPathMatched(\"a.b.c\",\"*.*.*\") == true\n * isPathMatched(\"a.b.c\",\".b.*\") == true\n * isPathMatched(\"a.b.c.d\",\"a.**\") == true\n *\n * - '**' 匹配后续的\n * - '*' 匹配任意数量的字符,包括零个字符\n *\n * @param path\n * @param pattern\n */\nexport function isPathMatched(path: string[], pattern: string[]): boolean {\n const pathLen = path.length;\n const patternLen = pattern.length;\n\n // 快速失败: 长度不匹配(除非以 ** 结尾)\n if (pathLen !== patternLen && (patternLen === 0 || pattern[patternLen - 1] !== '**')) {\n return false;\n }\n\n // 处理 ** 通配符: 直接检查前缀匹配\n if (patternLen > 0 && pattern[patternLen - 1] === '**') {\n // 检查前 n-1 个元素是否匹配\n for (let i = 0; i < patternLen - 1; i++) {\n if (pattern[i] !== '*' && pattern[i] !== path[i]) {\n return false;\n }\n }\n return true;\n }\n\n // 普通匹配: 逐元素比较\n for (let i = 0; i < pathLen; i++) {\n if (pattern[i] !== '*' && pattern[i] !== path[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n// export function isPathMatched(path:string[],pattern:string[]):boolean{\n// if(path.length !== pattern.length && (path.length>0 && pattern[pattern.length-1]!=='**') ){\n// return false;\n// }\n// let fPattern = [...pattern]\n// if(pattern.length >0 && pattern[pattern.length-1] === '**'){\n// fPattern.splice(pattern.length-1,1,...Array.from<string>({\n// length: path.length-pattern.length+1\n// }).fill('*'))\n// }\n// for(let i=0;i<path.length;i++){\n// if(fPattern[i]==='*'){\n// continue\n// }\n// if(fPattern[i]!==path[i]){\n// return false\n// }\n// }\n// return true\n// }\n","/**\n * 从数组中移除满足条件的元素并返回被移除元素的索引\n * @param {any[]} arr - 需要操作的数组\n * @param {(item: any) => boolean} condition - 判断元素是否应该被移除的条件函数\n * @returns {number[]} 被移除元素在原数组中的索引集合\n */\nexport function removeItem(arr: any[], condition: (item: any) => boolean) {\n const removedIndices: number[] = [];\n // 从后往前遍历,避免删除元素时索引变化的问题\n for (let i = arr.length - 1; i >= 0; i--) {\n if (condition(arr[i])) {\n removedIndices.push(i); // 记录原始索引\n arr.splice(i, 1); // 删除元素\n }\n }\n\n // 因为是从后往前遍历的,所以索引是降序的,需要反转得到升序结果\n return removedIndices.reverse();\n}\n","export function isFunction(fn: any): fn is Function {\n return fn && typeof (fn) == \"function\"\n}","/**\n * \n * \n * 用于包括输入值为可展开的对象\n * \n * \n * 用在emit事件\n * \n * emitter1 = new FastEvent()\n * emitter2 = new FastEvent()\n * \n * emitter1.on(\"xxx\",(message)=>{\n * return emitter2.emit(message)\n * })\n * \n * emitter2.on(\"xxx\",()=>1)\n * emitter2.on(\"xxx\",()=>2)\n * \n * const results = emitter1.emit(\"xxx\")\n * // results == [[1,2]] 而不 [1,2],因为emitter2.emit返回的是一个[]\n * \n * expandable的作用就是对emit结果进行包括,当isExpandable时,在emit内部进行展开\n * \n * \n * \n * \n * emitter1.on(\"xxx\",(message)=>{\n * // 告诉emitter2.emit返回的是一个expandable对象\n * // 然后在内部就展开此对象\n * return emitter2.emit(message)\n * })\n * \n* const results = emitter1.emit(\"xxx\")\n * // results == [1,2]\n * \n * 为了实现对结果数据的展开处理,在emit内部需要对监听器的执行结果进行依次检查\n * 这多了一个迭代操作,为了不影响性能,可以关闭此特性\n * options.expandEmitResults = false\n * \n * \n */\n\nexport const __expandable__ = Symbol.for('__expandable__')\n\nexport function expandable(value: any) {\n value[__expandable__] = true\n return value\n}\n\nexport function isExpandable(value: any) {\n return value && value[__expandable__]\n}","import { isExpandable } from \"./expandable\";\n/**\n * \n * 判断成员isExpandable,如果是则说明是一个数组,则原地展开\n * \n * \n */\nexport function expandEmitResults(items: any[]): any[] {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (Array.isArray(item) && isExpandable(item)) {\n items.splice(i, 1, ...item)\n i += item.length - 1\n }\n }\n return items\n\n}\n\n\n// import { expandable } from \"./expandable\";\n// const items = [1, 2, expandable([3, 4]), 0, 0, expandable([5, 6]), expandable([7, 8]), 9, 10, 11]\n// // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]\n// expandEmitResults(items)\n// console.log(items)","\n\n/**\n * 包装 Promise,将 catch 的错误转换为正常返回值\n * @param fn 需要包装的 Promise\n * @returns 包装后的 Promise,如果发生错误则返回错误对象\n */\nexport function tryReturnError(fn: Promise<any>, callback?: (e: any) => any): Promise<any> {\n return fn.catch((e) => {\n if (callback) callback(e)\n return Promise.resolve(e)\n })\n}\n","export function getPromiseResults(results: any[]) {\n return results.map((result) => {\n if (result.status === \"fulfilled\") {\n return result.value;\n } else {\n return result.reason;\n }\n });\n}\n","/**\n * FastLiteEvent 轻量级事件发射器\n *\n * 从 FastEvent 派生的精简版本,移除了以下高级特性:\n * scope / hook / meta / pipe / executor / 异步迭代 / context\n * debug / abortSignal / 订阅时的 filter+off / 监听优先级 prepend\n *\n * 仅保留核心的事件收发能力:on / once / onAny / off / offAll / clear /\n * emit / emitAsync / waitFor / getListeners / clearRetainMessages,以及通配符\n * (* / **)、retain 保留事件、count / tag / flags、ignoreErrors、transform\n * 消息转换、expandEmitResults 等基础特性。\n *\n * 类型与 FastEvent 同源派生(Omit / 复用),监听器、消息、订阅者与 FastEvent\n * 双向兼容——同一监听器函数可同时挂到 FastEvent 与 FastLiteEvent 上。\n */\nimport {\n GetClosestEvents,\n KeyOf,\n MutableMessage,\n Expand,\n Fallback,\n ReplaceWildcard,\n UnTransformedEvents,\n FastEventMessage,\n TypedFastEventMessage,\n FastEventEmitMessage,\n FastListeners,\n FastEventListenerNode,\n FastEventListenerMeta,\n FastEventCommonListener,\n FastEventSubscriber,\n FastEventOptions,\n FastEventListenOptions,\n FastEventListenerArgs,\n FastEvents,\n FastEventListenerFlags,\n IsTransformedEvent,\n ExtendWildcardEvents,\n PayloadValues,\n PickPayload,\n ValueOf,\n GetPayload,\n} from \"./types\";\nimport { InMatchedEvent } from \"./types/wildcards/InMatchedEvent\";\nimport { GetClosestMessage } from \"./types/closest/GetClosestMessage\";\nimport { isPathMatched } from \"./utils/isPathMatched\";\nimport { removeItem } from \"./utils/removeItem\";\nimport { isFunction } from \"./utils/isFunction\";\nimport { expandEmitResults } from \"./utils/expandEmitResults\";\nimport { tryReturnError } from \"./utils/tryReturnError\";\nimport { getPromiseResults } from \"./utils/getPromiseResults\";\n\n// —— 从原始类型 Omit 派生:剥离被移除特性对应的字段 ——\nexport type FastLiteMessage<T extends string = string, P = any> = Omit<\n FastEventMessage<T, P>,\n \"meta\"\n>;\n\nexport type FastLiteListenerArgs = Omit<\n FastEventListenerArgs,\n \"meta\" | \"executor\" | \"parseArgs\" | \"abortSignal\"\n>;\n\nexport type FastLiteListenOptions<\n Events extends Record<string, any> = Record<string, any>,\n> = Omit<FastEventListenOptions<Events>, \"pipes\" | \"iterable\" | \"filter\" | \"off\" | \"prepend\">;\n\nexport type FastLiteEventOptions = Omit<\n FastEventOptions,\n | \"context\"\n | \"meta\"\n | \"executor\"\n | \"debug\"\n | \"onAddBeforeListener\"\n | \"onAddAfterListener\"\n | \"onRemoveListener\"\n | \"onClearListeners\"\n | \"onListenerError\"\n | \"onBeforeExecuteListener\"\n | \"onAfterExecuteListener\"\n>;\n\n// —— 完全复用原始类型(与 FastEvent 互换兼容)——\nexport type FastLiteSubscriber = FastEventSubscriber;\nexport type FastLiteListener<\n T extends string = string,\n P = any,\n> = FastEventCommonListener<FastLiteMessage<T, P>, any, any>;\n\n/**\n * 解析 emit 参数(简化版,不复用 parseEmitArgs)\n *\n * 仅支持两种形态:\n * (type, payload, retain?)\n * (message, retain?)\n *\n * @param args - emit 的 arguments\n * @returns [消息, 监听器参数]\n */\nfunction parseLiteEmitArgs(\n args: IArguments,\n): [TypedFastEventMessage, FastLiteListenerArgs] {\n let message = {} as TypedFastEventMessage;\n let emitArgs: FastLiteListenerArgs = {};\n if (typeof args[0] === \"object\") {\n Object.assign(message, args[0]);\n emitArgs = typeof args[1] === \"boolean\" ? { retain: args[1] } : {};\n } else {\n message.type = args[0] as any;\n message.payload = args[1] as any;\n emitArgs = typeof args[2] === \"boolean\" ? { retain: args[2] } : {};\n }\n return [message, emitArgs];\n}\n\n/**\n * FastLiteEvent 轻量级事件发射器类\n *\n * @template Events - 事件类型定义,继承自 FastEvents 接口\n */\nexport class FastLiteEvent<\n Events extends Record<string, any> = Record<string, any>,\n AllEvents extends Record<string, any> = Expand<Events & FastEvents>,\n Types extends keyof AllEvents = KeyOf<AllEvents>,\n EventNames = KeyOf<ExtendWildcardEvents<AllEvents>>,\n> {\n __FastLiteEvent__: boolean = true;\n\n /** 事件监听器树结构,存储所有注册的事件监听器 */\n public listeners: FastListeners = {\n __listeners: [],\n } as unknown as FastListeners;\n\n /** 事件发射器的配置选项 */\n private _options: FastLiteEventOptions;\n\n /** 事件名称的分隔符,默认为 '/' */\n private _delimiter: string = \"/\";\n\n /** 保留的事件消息映射,Key 是事件名称,Value 是保留的事件消息 */\n retainedMessages: Map<string, any> = new Map<string, any>();\n\n /** 当前注册的监听器总数 */\n listenerCount: number = 0;\n\n /**\n * 创建 FastLiteEvent 实例\n * @param options - 事件发射器的配置选项\n *\n * 默认配置:\n * - id: 随机字符串 - 实例唯一标识符\n * - delimiter: '/' - 事件名称分隔符\n * - ignoreErrors: true - 是否忽略监听器执行错误\n * - expandEmitResults: true - 是否展开 emit 返回值\n */\n constructor(options?: Partial<FastLiteEventOptions>) {\n this._options = Object.assign(\n {\n id: Math.random().toString(36).substring(2),\n delimiter: \"/\",\n ignoreErrors: true,\n expandEmitResults: true,\n },\n this._initOptions(options),\n ) as unknown as FastLiteEventOptions;\n this._delimiter = this._options.delimiter!;\n }\n\n /** 获取事件发射器的配置选项 */\n get options() {\n return this._options;\n }\n /** 获取事件发射器的唯一标识符 */\n get id() {\n return this._options.id!;\n }\n /** 获取事件发射器的标题 */\n get title() {\n return this._options.title || this.id || \"FastLiteEvent\";\n }\n\n /**\n * 初始化选项(供子类重载)\n * @param initial - 可选的初始选项\n */\n _initOptions(initial?: Partial<FastLiteEventOptions>) {\n return initial;\n }\n\n /**\n * 添加事件监听器到事件树(仅尾插,已移除 prepend 插队)\n * @param parts - 事件路径数组\n * @param listener - 事件监听器函数\n * @param options - 监听器配置(count / tag / flags)\n * @returns [节点, 监听器索引]\n */\n private _addListener(\n parts: string[],\n listener: Function,\n options: { count: number; tag?: string; flags?: number },\n ): [FastEventListenerNode | undefined, number] {\n let index: number = 0;\n const node = this._forEachNodes(parts, (node) => {\n const newListener = [\n listener,\n options.count,\n 0,\n options.tag,\n options.flags,\n ] as unknown as FastEventListenerMeta;\n node.__listeners.push(newListener);\n index = node.__listeners.length - 1;\n this.listenerCount++;\n });\n return [node, index];\n }\n\n /**\n * 根据 parts 路径遍历监听器树,并在最后的节点上执行回调\n */\n private _forEachNodes(\n parts: string[],\n callback: (node: FastEventListenerNode, parent: FastEventListenerNode) => void,\n ): FastEventListenerNode | undefined {\n if (parts.length === 0) return;\n let current = this.listeners;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!(part in current)) {\n current[part] = {\n __listeners: [],\n } as unknown as FastListeners;\n }\n if (i === parts.length - 1) {\n const node = current[part];\n callback(node, current);\n return node;\n } else {\n current = current[part];\n }\n }\n return undefined;\n }\n\n /**\n * 从监听器节点中移除指定的事件监听器\n */\n private _removeListener(\n node: FastEventListenerNode,\n path: string[],\n listener: Function,\n ): void {\n if (!listener) return;\n removeItem(node.__listeners, (item: any) => {\n item = Array.isArray(item) ? item[0] : item;\n const isRemove = item === listener;\n if (isRemove) this.listenerCount--;\n return isRemove;\n });\n }\n\n /**\n * 注册事件监听器\n * @param type - 事件类型,支持普通字符串、通配符(user/*)、全局监听(**)\n * @param listener - 事件监听器函数\n * @param options - 监听器配置(count / tag / flags)\n * @returns 订阅者对象,包含 off 方法用于取消监听\n */\n public on<T extends string = KeyOf<Events> | \"**\">(\n type: T,\n listener: FastEventCommonListener<\n T extends IsTransformedEvent<AllEvents, T>\n ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n : T extends \"**\"\n ? MutableMessage<Events>\n : GetClosestMessage<Events, T, any>,\n any,\n any\n >,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n if (type.length === 0) throw new Error(\"event cannot be empty\");\n const finalOptions = Object.assign(\n { count: 0, flags: 0 },\n options,\n ) as Required<FastLiteListenOptions> & { count: number; flags: number };\n\n const parts = type.split(this._delimiter);\n const [node, index] = this._addListener(parts, listener as any, finalOptions);\n const off = () => node && this._removeListener(node, parts, listener as any);\n\n // 触发监听器保留消息(retain)\n this._emitRetainMessage(type, node, index);\n\n return {\n off,\n listener: listener as any,\n [Symbol.dispose]() {\n off();\n },\n };\n }\n\n /**\n * 注册一次性事件监听器(触发一次后自动注销)\n */\n public once<T extends string = KeyOf<Events> | \"**\">(\n type: T,\n listener: FastEventCommonListener<\n T extends IsTransformedEvent<AllEvents, T>\n ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n : T extends \"**\"\n ? MutableMessage<Events>\n : GetClosestMessage<Events, T, any>,\n any,\n any\n >,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n return this.on(type, listener, Object.assign({}, options, { count: 1 }));\n }\n\n /**\n * 注册一个监听所有事件的监听器(等同 on('**', listener))\n */\n public onAny(\n listener: FastEventCommonListener<MutableMessage<AllEvents, any>, any, any>,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n return this.on(\"**\", listener as any, options as any) as FastEventSubscriber;\n }\n\n /**\n * 移除事件监听器\n */\n off(listener: Function): void;\n off(type: string, listener: Function): void;\n off(type: Types): void;\n off(type: string): void;\n off() {\n const args = arguments;\n const type = isFunction(args[0]) ? undefined : args[0];\n const listener = isFunction(args[0]) ? args[0] : args[1];\n const parts = type ? type.split(this._delimiter) : [];\n const hasWildcard = type ? type.includes(\"*\") : false;\n if (type && !hasWildcard) {\n this._traverseToPath(this.listeners, parts, (node) => {\n if (listener) {\n this._removeListener(node, parts, listener);\n } else if (type) {\n node.__listeners = [];\n }\n });\n } else {\n const entryParts: string[] = hasWildcard ? [] : parts;\n this._traverseListeners(this.listeners, entryParts, (path, node) => {\n if (listener !== undefined || (hasWildcard && isPathMatched(path, parts))) {\n if (listener) {\n this._removeListener(node, parts, listener);\n } else {\n node.__listeners = [];\n }\n }\n });\n }\n }\n\n /**\n * 移除所有事件监听器\n * @param entry - 可选的事件前缀,提供则只移除该前缀下的监听器\n */\n offAll(entry?: string) {\n if (entry) {\n const parts = entry.split(this._delimiter);\n let count = 0;\n this._traverseListeners(this.listeners, parts, (_path, node) => {\n count += node.__listeners.length;\n node.__listeners = [];\n });\n this.listenerCount -= count;\n this._removeRetainedEvents(entry);\n } else {\n let count = 0;\n this._traverseListeners(this.listeners, [], (_path, node) => {\n count += node.__listeners.length;\n });\n this.listenerCount -= count;\n this.retainedMessages.clear();\n this.listeners = { __listeners: [] } as unknown as FastListeners;\n }\n }\n\n /**\n * 移除保留的事件\n */\n private _removeRetainedEvents(prefix?: string) {\n if (!prefix) this.retainedMessages.clear();\n if (prefix?.endsWith(this._delimiter)) {\n prefix += this._delimiter;\n }\n this.retainedMessages.delete(prefix!);\n for (let key of this.retainedMessages.keys()) {\n if (key.startsWith(prefix!)) {\n this.retainedMessages.delete(key);\n }\n }\n }\n\n /**\n * 清除所有事件或指定前缀的事件(含保留消息)\n */\n clear(prefix?: string) {\n this.offAll(prefix);\n this._removeRetainedEvents(prefix);\n }\n\n /**\n * 发送最后一次事件的消息给对应的监听器(用于 retain)\n */\n private _emitRetainMessage(\n type: string,\n listenerNode: FastEventListenerNode | undefined,\n index: number,\n ) {\n let messages = [] as TypedFastEventMessage[];\n if (type.includes(\"*\")) {\n const patterns = type.split(this._delimiter);\n this.retainedMessages.forEach((message, t) => {\n const parts = t.split(this._delimiter);\n if (isPathMatched(parts, patterns)) {\n messages.push(message);\n }\n });\n } else if (this.retainedMessages.has(type)) {\n messages.push(this.retainedMessages.get(type));\n }\n if (listenerNode) {\n messages.forEach((message) => {\n this._executeListeners([listenerNode], message, {}, (listenerMeta) => {\n return listenerMeta[0] === listenerNode.__listeners[index][0];\n });\n });\n }\n }\n\n /**\n * 遍历监听器节点树,支持三种匹配模式:精确 / 单层通配 * / 多层通配 **\n */\n private _traverseToPath(\n node: FastEventListenerNode,\n parts: string[],\n callback: (node: FastEventListenerNode) => void,\n index: number = 0,\n lastFollowing?: boolean,\n ): void {\n if (index >= parts.length) {\n callback(node);\n return;\n }\n const part = parts[index];\n if (lastFollowing === true) {\n this._traverseToPath(node, parts, callback, index + 1, true);\n return;\n }\n if (\"*\" in node) {\n this._traverseToPath(node[\"*\"], parts, callback, index + 1);\n }\n if (\"**\" in node) {\n this._traverseToPath(node[\"**\"], parts, callback, index + 1, true);\n }\n if (part in node) {\n this._traverseToPath(node[part], parts, callback, index + 1);\n }\n }\n\n private _traverseListeners(\n node: FastEventListenerNode,\n entry: string[],\n callback: (path: string[], node: FastEventListenerNode) => void,\n ): void {\n let entryNode: FastEventListenerNode = node;\n if (entry && entry.length > 0) {\n this._traverseToPath(node, entry, (n) => {\n entryNode = n;\n });\n }\n const traverseNodes = (\n node: FastEventListenerNode,\n callback: (path: string[], node: FastEventListenerNode) => void,\n parentPath: string[],\n ) => {\n callback(parentPath, node);\n for (let [key, childNode] of Object.entries(node)) {\n if (key.startsWith(\"__\")) continue;\n if (childNode) {\n traverseNodes(childNode as FastEventListenerNode, callback, [\n ...parentPath,\n key,\n ]);\n }\n }\n };\n traverseNodes(entryNode, callback, []);\n }\n\n /**\n * 监听器执行出错处理(移除了 ListenerError hook)\n */\n private _onListenerError(\n listener: Function,\n message: TypedFastEventMessage,\n _args: FastLiteListenerArgs | undefined,\n e: any,\n ) {\n if (e instanceof Error) {\n // @ts-ignore\n e._emitter = `${listener.name || \"anonymous\"}:${message.type}`;\n }\n if (this._options.ignoreErrors) {\n return e;\n } else {\n throw e;\n }\n }\n\n /**\n * 执行单个监听器函数(移除了 debug / abortSignal 分支,this 指向实例)\n */\n private _executeListener(\n listener: FastEventListenerMeta,\n message: TypedFastEventMessage,\n args: FastLiteListenerArgs | undefined,\n catchErrors: boolean = false,\n ): Promise<any> | any {\n const listenerFn = listener[0];\n try {\n const isTransformed =\n ((args?.flags || 0) & FastEventListenerFlags.Transformed) > 0;\n let result = listenerFn.call(\n this,\n isTransformed ? message.payload : message,\n args!,\n );\n // 自动处理 reject Promise\n if (catchErrors && result && result instanceof Promise) {\n result = tryReturnError(result, (e) =>\n this._onListenerError(listenerFn, message, args, e),\n );\n }\n return result;\n } catch (e: any) {\n return this._onListenerError(listenerFn, message, args, e);\n }\n }\n\n /**\n * 执行监听器节点列表中的所有监听器(移除了 executor,退化为同步顺序执行)\n */\n private _executeListeners(\n nodes: FastEventListenerNode[],\n message: TypedFastEventMessage,\n args: FastLiteListenerArgs,\n filter?: (listener: FastEventListenerMeta, node: FastEventListenerNode) => boolean,\n ): any[] {\n if (!nodes || nodes.length === 0) return [];\n const listeners: [FastEventListenerMeta, number, FastEventListenerMeta[]][] = [];\n for (const node of nodes) {\n let i: number = 0;\n for (const listener of node.__listeners) {\n if (!filter || filter(listener, node)) {\n listeners.push([listener, i++, node.__listeners]);\n }\n }\n }\n // 执行监听器前计数先减一,避免在监听器中再次触发导致重复执行\n this._decListenerExecCount(listeners);\n return listeners.map((listener) => {\n return this._executeListener(listener[0], message, args, true);\n });\n }\n\n /**\n * 减少侦听器的执行次数(达到 count 限制时移除)\n */\n _decListenerExecCount(\n listeners: [FastEventListenerMeta, number, FastEventListenerMeta[]][],\n ) {\n for (let i = listeners.length - 1; i >= 0; i--) {\n const meta = listeners[i][0] as FastEventListenerMeta;\n meta[2]++; // 实际执行的次数\n // count > 0 时代表执行次数限制\n if (meta[1] > 0 && meta[1] <= meta[2]) {\n listeners[i][2].splice(i, 1);\n }\n }\n }\n\n /**\n * 获取指定类型的所有事件监听器\n */\n getListeners(type: string): FastEventListenerMeta[] {\n const nodes: FastEventListenerNode[] = [];\n const parts = type.split(this._delimiter);\n this._traverseToPath(this.listeners, parts, (node) => {\n nodes.push(node);\n });\n const listeners: any[] = [];\n nodes.map((node) => {\n listeners.push(...node.__listeners);\n });\n return listeners;\n }\n\n /**\n * 清除所有事件或指定事件的保留消息\n */\n clearRetainMessages(type?: EventNames | string) {\n if (type) {\n this.retainedMessages.delete(type as string);\n } else {\n this.retainedMessages.clear();\n }\n }\n\n /**\n * 同步触发事件\n *\n * 支持两种调用方式:\n * emit(type, payload, retain?)\n * emit({ type, payload }, retain?)\n */\n public emit<R = any, T extends Types = Types>(\n type: T,\n payload?: UnTransformedEvents<AllEvents>[T],\n retain?: boolean,\n ): R[];\n public emit<R = any, T extends string = string>(\n type: ReplaceWildcard<T> | Types,\n payload?: InMatchedEvent<Events, T> extends true\n ? GetPayload<UnTransformedEvents<AllEvents>, T>\n : any,\n retain?: boolean,\n ): R[];\n public emit<R = any, T extends KeyOf<AllEvents> = KeyOf<AllEvents>>(\n message: FastEventEmitMessage<T, UnTransformedEvents<AllEvents>[T], any>,\n retain?: boolean,\n ): R[];\n public emit<R = any>(message: MutableMessage<AllEvents, any>, retain?: boolean): R[];\n public emit<R = any>(message: { type: keyof AllEvents }, retain?: boolean): R[];\n public emit<R = any>(message: FastEventMessage, retain?: boolean): R[];\n public emit(): any {\n const [message, args] = parseLiteEmitArgs(arguments);\n\n const parts = message.type.split(this._delimiter);\n if (args.retain) {\n this.retainedMessages.set(message.type, message);\n }\n\n const nodes: FastEventListenerNode[] = [];\n this._traverseToPath(this.listeners, parts, (node) => {\n nodes.push(node);\n });\n\n // 触发时进行消息转换\n if (isFunction(this._options.transform)) {\n const transformed = this._options.transform.call(this, message as any);\n if (transformed !== message) {\n message.payload = transformed;\n args.rawEventType = message.type;\n args.flags = (args.flags || 0) | FastEventListenerFlags.Transformed;\n }\n }\n\n // 执行监听器\n const results: any[] = [];\n results.push(...this._executeListeners(nodes, message, args));\n\n // 展开 expandable 结果\n if (this._options.expandEmitResults) {\n expandEmitResults(results);\n }\n return results;\n }\n\n /**\n * 异步触发事件(使用 Promise.allSettled,等待所有异步监听器完成)\n */\n public async emitAsync<R = any, T extends Types = Types>(\n type: T,\n payload?: UnTransformedEvents<AllEvents>[T],\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any, T extends string = string>(\n type: ReplaceWildcard<T> | Types,\n payload?: InMatchedEvent<Events, T> extends true\n ? GetPayload<UnTransformedEvents<AllEvents>, T>\n : any,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any, T extends KeyOf<AllEvents> = KeyOf<AllEvents>>(\n message: FastEventEmitMessage<T, UnTransformedEvents<AllEvents>[T], any>,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(\n message: MutableMessage<AllEvents, any>,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(\n message: { type: keyof AllEvents },\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(): Promise<(R | Error)[]> {\n const results = await Promise.allSettled(\n this.emit.apply(this, arguments as any),\n );\n return getPromiseResults(results);\n }\n\n}\n"]} | ||
| {"version":3,"sources":["../src/utils/isPathMatched.ts","../src/utils/removeItem.ts","../src/utils/isFunction.ts","../src/utils/expandable.ts","../src/utils/expandEmitResults.ts","../src/utils/tryReturnError.ts","../src/utils/getPromiseResults.ts","../src/liteEvent.ts"],"names":["isPathMatched","path","pattern","pathLen","patternLen","i","removeItem","arr","condition","removedIndices","isFunction","fn","__expandable__","isExpandable","value","expandEmitResults","items","item","tryReturnError","callback","e","getPromiseResults","results","result","parseLiteEmitArgs","args","message","emitArgs","FastLiteEvent","options","__publicField","initial","parts","listener","index","node","newListener","current","part","isRemove","type","finalOptions","off","hasWildcard","entryParts","entry","count","_path","prefix","key","listenerNode","messages","patterns","t","listenerMeta","lastFollowing","entryNode","n","traverseNodes","parentPath","childNode","_args","catchErrors","listenerFn","isTransformed","nodes","filter","listeners","meta","transformed"],"mappings":"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","file":"liteEvent.global.js","sourcesContent":["/**\n *\n * 判断path是否与pattern匹配\n *\n * isPathMatched(\"a.b.c\",\"a.b.c\") == true\n * isPathMatched(\"a.b.c\",\"a.b.*\") == true\n * isPathMatched(\"a.b.c\",\"a.*.*\") == true\n * isPathMatched(\"a.b.c\",\"*.*.*\") == true\n * isPathMatched(\"a.b.c\",\".b.*\") == true\n * isPathMatched(\"a.b.c.d\",\"a.**\") == true\n *\n * - '**' 匹配后续的\n * - '*' 匹配任意数量的字符,包括零个字符\n *\n * @param path\n * @param pattern\n */\nexport function isPathMatched(path: string[], pattern: string[]): boolean {\n const pathLen = path.length;\n const patternLen = pattern.length;\n\n // 快速失败: 长度不匹配(除非以 ** 结尾)\n if (pathLen !== patternLen && (patternLen === 0 || pattern[patternLen - 1] !== '**')) {\n return false;\n }\n\n // 处理 ** 通配符: 直接检查前缀匹配\n if (patternLen > 0 && pattern[patternLen - 1] === '**') {\n // 检查前 n-1 个元素是否匹配\n for (let i = 0; i < patternLen - 1; i++) {\n if (pattern[i] !== '*' && pattern[i] !== path[i]) {\n return false;\n }\n }\n return true;\n }\n\n // 普通匹配: 逐元素比较\n for (let i = 0; i < pathLen; i++) {\n if (pattern[i] !== '*' && pattern[i] !== path[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n// export function isPathMatched(path:string[],pattern:string[]):boolean{\n// if(path.length !== pattern.length && (path.length>0 && pattern[pattern.length-1]!=='**') ){\n// return false;\n// }\n// let fPattern = [...pattern]\n// if(pattern.length >0 && pattern[pattern.length-1] === '**'){\n// fPattern.splice(pattern.length-1,1,...Array.from<string>({\n// length: path.length-pattern.length+1\n// }).fill('*'))\n// }\n// for(let i=0;i<path.length;i++){\n// if(fPattern[i]==='*'){\n// continue\n// }\n// if(fPattern[i]!==path[i]){\n// return false\n// }\n// }\n// return true\n// }\n","/**\n * 从数组中移除满足条件的元素并返回被移除元素的索引\n * @param {any[]} arr - 需要操作的数组\n * @param {(item: any) => boolean} condition - 判断元素是否应该被移除的条件函数\n * @returns {number[]} 被移除元素在原数组中的索引集合\n */\nexport function removeItem(arr: any[], condition: (item: any) => boolean) {\n const removedIndices: number[] = [];\n // 从后往前遍历,避免删除元素时索引变化的问题\n for (let i = arr.length - 1; i >= 0; i--) {\n if (condition(arr[i])) {\n removedIndices.push(i); // 记录原始索引\n arr.splice(i, 1); // 删除元素\n }\n }\n\n // 因为是从后往前遍历的,所以索引是降序的,需要反转得到升序结果\n return removedIndices.reverse();\n}\n","export function isFunction(fn: any): fn is Function {\n return fn && typeof (fn) == \"function\"\n}","/**\n * \n * \n * 用于包括输入值为可展开的对象\n * \n * \n * 用在emit事件\n * \n * emitter1 = new FastEvent()\n * emitter2 = new FastEvent()\n * \n * emitter1.on(\"xxx\",(message)=>{\n * return emitter2.emit(message)\n * })\n * \n * emitter2.on(\"xxx\",()=>1)\n * emitter2.on(\"xxx\",()=>2)\n * \n * const results = emitter1.emit(\"xxx\")\n * // results == [[1,2]] 而不 [1,2],因为emitter2.emit返回的是一个[]\n * \n * expandable的作用就是对emit结果进行包括,当isExpandable时,在emit内部进行展开\n * \n * \n * \n * \n * emitter1.on(\"xxx\",(message)=>{\n * // 告诉emitter2.emit返回的是一个expandable对象\n * // 然后在内部就展开此对象\n * return emitter2.emit(message)\n * })\n * \n* const results = emitter1.emit(\"xxx\")\n * // results == [1,2]\n * \n * 为了实现对结果数据的展开处理,在emit内部需要对监听器的执行结果进行依次检查\n * 这多了一个迭代操作,为了不影响性能,可以关闭此特性\n * options.expandEmitResults = false\n * \n * \n */\n\nexport const __expandable__ = Symbol.for('__expandable__')\n\nexport function expandable(value: any) {\n value[__expandable__] = true\n return value\n}\n\nexport function isExpandable(value: any) {\n return value && value[__expandable__]\n}","import { isExpandable } from \"./expandable\";\n/**\n * \n * 判断成员isExpandable,如果是则说明是一个数组,则原地展开\n * \n * \n */\nexport function expandEmitResults(items: any[]): any[] {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (Array.isArray(item) && isExpandable(item)) {\n items.splice(i, 1, ...item)\n i += item.length - 1\n }\n }\n return items\n\n}\n\n\n// import { expandable } from \"./expandable\";\n// const items = [1, 2, expandable([3, 4]), 0, 0, expandable([5, 6]), expandable([7, 8]), 9, 10, 11]\n// // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]\n// expandEmitResults(items)\n// console.log(items)","\n\n/**\n * 包装 Promise,将 catch 的错误转换为正常返回值\n * @param fn 需要包装的 Promise\n * @returns 包装后的 Promise,如果发生错误则返回错误对象\n */\nexport function tryReturnError(fn: Promise<any>, callback?: (e: any) => any): Promise<any> {\n return fn.catch((e) => {\n if (callback) callback(e)\n return Promise.resolve(e)\n })\n}\n","export function getPromiseResults(results: any[]) {\n return results.map((result) => {\n if (result.status === \"fulfilled\") {\n return result.value;\n } else {\n return result.reason;\n }\n });\n}\n","/**\n * FastLiteEvent 轻量级事件发射器\n *\n * 从 FastEvent 派生的精简版本,移除了以下高级特性:\n * scope / hook / meta / pipe / executor / 异步迭代 / context\n * debug / abortSignal / 订阅时的 filter+off / 监听优先级 prepend\n *\n * 仅保留核心的事件收发能力:on / once / onAny / off / offAll / clear /\n * emit / emitAsync / waitFor / getListeners / clearRetainMessages,以及通配符\n * (* / **)、retain 保留事件、count / tag / flags、ignoreErrors、transform\n * 消息转换、expandEmitResults 等基础特性。\n *\n * 类型与 FastEvent 同源派生(Omit / 复用),监听器、消息、订阅者与 FastEvent\n * 双向兼容——同一监听器函数可同时挂到 FastEvent 与 FastLiteEvent 上。\n */\nimport {\n GetClosestEvents,\n KeyOf,\n MutableMessage,\n Expand,\n Fallback,\n ReplaceWildcard,\n UnTransformedEvents,\n FastEventMessage,\n TypedFastEventMessage,\n FastEventEmitMessage,\n FastListeners,\n FastEventListenerNode,\n FastEventListenerMeta,\n FastEventCommonListener,\n FastEventSubscriber,\n FastEventOptions,\n FastEventListenOptions,\n FastEventListenerArgs,\n FastEvents,\n FastEventListenerFlags,\n IsTransformedEvent,\n ExtendWildcardEvents,\n PayloadValues,\n PickPayload,\n ValueOf,\n GetPayload,\n} from \"./types\";\nimport { InMatchedEvent } from \"./types/wildcards/InMatchedEvent\";\nimport { GetClosestMessage } from \"./types/closest/GetClosestMessage\";\nimport { isPathMatched } from \"./utils/isPathMatched\";\nimport { removeItem } from \"./utils/removeItem\";\nimport { isFunction } from \"./utils/isFunction\";\nimport { expandEmitResults } from \"./utils/expandEmitResults\";\nimport { tryReturnError } from \"./utils/tryReturnError\";\nimport { getPromiseResults } from \"./utils/getPromiseResults\";\n\n// —— 从原始类型 Omit 派生:剥离被移除特性对应的字段 ——\nexport type FastLiteMessage<T extends string = string, P = any> = Omit<\n FastEventMessage<T, P>,\n \"meta\"\n>;\n\nexport type FastLiteListenerArgs = Omit<\n FastEventListenerArgs,\n \"meta\" | \"executor\" | \"parseArgs\" | \"abortSignal\"\n>;\n\nexport type FastLiteListenOptions<\n Events extends Record<string, any> = Record<string, any>,\n> = Omit<FastEventListenOptions<Events>, \"pipes\" | \"iterable\" | \"filter\" | \"off\" | \"prepend\">;\n\nexport type FastLiteEventOptions = Omit<\n FastEventOptions,\n | \"context\"\n | \"meta\"\n | \"executor\"\n | \"debug\"\n | \"onAddBeforeListener\"\n | \"onAddAfterListener\"\n | \"onRemoveListener\"\n | \"onClearListeners\"\n | \"onListenerError\"\n | \"onBeforeExecuteListener\"\n | \"onAfterExecuteListener\"\n>;\n\n// —— 完全复用原始类型(与 FastEvent 互换兼容)——\nexport type FastLiteSubscriber = FastEventSubscriber;\nexport type FastLiteListener<\n T extends string = string,\n P = any,\n> = FastEventCommonListener<FastLiteMessage<T, P>, any, any>;\n\n/**\n * 解析 emit 参数(简化版,不复用 parseEmitArgs)\n *\n * 仅支持两种形态:\n * (type, payload, retain?)\n * (message, retain?)\n *\n * @param args - emit 的 arguments\n * @returns [消息, 监听器参数]\n */\nfunction parseLiteEmitArgs(\n args: IArguments,\n): [TypedFastEventMessage, FastLiteListenerArgs] {\n let message = {} as TypedFastEventMessage;\n let emitArgs: FastLiteListenerArgs = {};\n if (typeof args[0] === \"object\") {\n Object.assign(message, args[0]);\n emitArgs = typeof args[1] === \"boolean\" ? { retain: args[1] } : {};\n } else {\n message.type = args[0] as any;\n message.payload = args[1] as any;\n emitArgs = typeof args[2] === \"boolean\" ? { retain: args[2] } : {};\n }\n return [message, emitArgs];\n}\n\n/**\n * FastLiteEvent 轻量级事件发射器类\n *\n * @template Events - 事件类型定义,继承自 FastEvents 接口\n */\nexport class FastLiteEvent<\n Events extends Record<string, any> = Record<string, any>,\n AllEvents extends Record<string, any> = Expand<Events & FastEvents>,\n Types extends keyof AllEvents = KeyOf<AllEvents>,\n EventNames = KeyOf<ExtendWildcardEvents<AllEvents>>,\n> {\n __FastLiteEvent__: boolean = true;\n\n /** 事件监听器树结构,存储所有注册的事件监听器 */\n public listeners: FastListeners = {\n __listeners: [],\n } as unknown as FastListeners;\n\n /** 事件发射器的配置选项 */\n private _options: FastLiteEventOptions;\n\n /** 事件名称的分隔符,默认为 '/' */\n private _delimiter: string = \"/\";\n\n /** 保留的事件消息映射,Key 是事件名称,Value 是保留的事件消息 */\n retainedMessages: Map<string, any> = new Map<string, any>();\n\n /** 当前注册的监听器总数 */\n listenerCount: number = 0;\n\n /**\n * 创建 FastLiteEvent 实例\n * @param options - 事件发射器的配置选项\n *\n * 默认配置:\n * - id: 随机字符串 - 实例唯一标识符\n * - delimiter: '/' - 事件名称分隔符\n * - ignoreErrors: true - 是否忽略监听器执行错误\n * - expandEmitResults: true - 是否展开 emit 返回值\n */\n constructor(options?: Partial<FastLiteEventOptions>) {\n this._options = Object.assign(\n {\n id: Math.random().toString(36).substring(2),\n delimiter: \"/\",\n ignoreErrors: true,\n expandEmitResults: true,\n },\n this._initOptions(options),\n ) as unknown as FastLiteEventOptions;\n this._delimiter = this._options.delimiter!;\n }\n\n /** 获取事件发射器的配置选项 */\n get options() {\n return this._options;\n }\n /** 获取事件发射器的唯一标识符 */\n get id() {\n return this._options.id!;\n }\n /** 获取事件发射器的标题 */\n get title() {\n return this._options.title || this.id || \"FastLiteEvent\";\n }\n\n /**\n * 初始化选项(供子类重载)\n * @param initial - 可选的初始选项\n */\n _initOptions(initial?: Partial<FastLiteEventOptions>) {\n return initial;\n }\n\n /**\n * 添加事件监听器到事件树(仅尾插,已移除 prepend 插队)\n * @param parts - 事件路径数组\n * @param listener - 事件监听器函数\n * @param options - 监听器配置(count / tag / flags)\n * @returns [节点, 监听器索引]\n */\n private _addListener(\n parts: string[],\n listener: Function,\n options: { count: number; tag?: string; flags?: number },\n ): [FastEventListenerNode | undefined, number] {\n let index: number = 0;\n const node = this._forEachNodes(parts, (node) => {\n const newListener = [\n listener,\n options.count,\n 0,\n options.tag,\n options.flags,\n ] as unknown as FastEventListenerMeta;\n node.__listeners.push(newListener);\n index = node.__listeners.length - 1;\n this.listenerCount++;\n });\n return [node, index];\n }\n\n /**\n * 根据 parts 路径遍历监听器树,并在最后的节点上执行回调\n */\n private _forEachNodes(\n parts: string[],\n callback: (node: FastEventListenerNode, parent: FastEventListenerNode) => void,\n ): FastEventListenerNode | undefined {\n if (parts.length === 0) return;\n let current = this.listeners;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!(part in current)) {\n current[part] = {\n __listeners: [],\n } as unknown as FastListeners;\n }\n if (i === parts.length - 1) {\n const node = current[part];\n callback(node, current);\n return node;\n } else {\n current = current[part];\n }\n }\n return undefined;\n }\n\n /**\n * 从监听器节点中移除指定的事件监听器\n */\n private _removeListener(\n node: FastEventListenerNode,\n path: string[],\n listener: Function,\n ): void {\n if (!listener) return;\n removeItem(node.__listeners, (item: any) => {\n item = Array.isArray(item) ? item[0] : item;\n const isRemove = item === listener;\n if (isRemove) this.listenerCount--;\n return isRemove;\n });\n }\n\n /**\n * 注册事件监听器\n * @param type - 事件类型,支持普通字符串、通配符(user/*)、全局监听(**)\n * @param listener - 事件监听器函数\n * @param options - 监听器配置(count / tag / flags)\n * @returns 订阅者对象,包含 off 方法用于取消监听\n */\n public on<T extends string = KeyOf<Events> | \"**\">(\n type: T,\n listener: FastEventCommonListener<\n T extends IsTransformedEvent<AllEvents, T>\n ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n : T extends \"**\"\n ? MutableMessage<Events>\n : GetClosestMessage<Events, T, any>,\n any,\n any\n >,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n if (type.length === 0) throw new Error(\"event cannot be empty\");\n const finalOptions = Object.assign(\n { count: 0, flags: 0 },\n options,\n ) as Required<FastLiteListenOptions> & { count: number; flags: number };\n\n const parts = type.split(this._delimiter);\n const [node, index] = this._addListener(parts, listener as any, finalOptions);\n const off = () => node && this._removeListener(node, parts, listener as any);\n\n // 触发监听器保留消息(retain)\n this._emitRetainMessage(type, node, index);\n\n return {\n off,\n listener: listener as any,\n [Symbol.dispose]() {\n off();\n },\n };\n }\n\n /**\n * 注册一次性事件监听器(触发一次后自动注销)\n */\n public once<T extends string = KeyOf<Events> | \"**\">(\n type: T,\n listener: FastEventCommonListener<\n T extends IsTransformedEvent<AllEvents, T>\n ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n : T extends \"**\"\n ? MutableMessage<Events>\n : GetClosestMessage<Events, T, any>,\n any,\n any\n >,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n return this.on(type, listener, Object.assign({}, options, { count: 1 }));\n }\n\n /**\n * 注册一个监听所有事件的监听器(等同 on('**', listener))\n */\n public onAny(\n listener: FastEventCommonListener<MutableMessage<AllEvents, any>, any, any>,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n return this.on(\"**\", listener as any, options as any) as FastEventSubscriber;\n }\n\n /**\n * 移除事件监听器\n */\n off(listener: Function): void;\n off(type: string, listener: Function): void;\n off(type: Types): void;\n off(type: string): void;\n off() {\n const args = arguments;\n const type = isFunction(args[0]) ? undefined : args[0];\n const listener = isFunction(args[0]) ? args[0] : args[1];\n const parts = type ? type.split(this._delimiter) : [];\n const hasWildcard = type ? type.includes(\"*\") : false;\n if (type && !hasWildcard) {\n this._traverseToPath(this.listeners, parts, (node) => {\n if (listener) {\n this._removeListener(node, parts, listener);\n } else if (type) {\n node.__listeners = [];\n }\n });\n } else {\n const entryParts: string[] = hasWildcard ? [] : parts;\n this._traverseListeners(this.listeners, entryParts, (path, node) => {\n if (listener !== undefined || (hasWildcard && isPathMatched(path, parts))) {\n if (listener) {\n this._removeListener(node, parts, listener);\n } else {\n node.__listeners = [];\n }\n }\n });\n }\n }\n\n /**\n * 移除所有事件监听器\n * @param entry - 可选的事件前缀,提供则只移除该前缀下的监听器\n */\n offAll(entry?: string) {\n if (entry) {\n const parts = entry.split(this._delimiter);\n let count = 0;\n this._traverseListeners(this.listeners, parts, (_path, node) => {\n count += node.__listeners.length;\n node.__listeners = [];\n });\n this.listenerCount -= count;\n this._removeRetainedEvents(entry);\n } else {\n let count = 0;\n this._traverseListeners(this.listeners, [], (_path, node) => {\n count += node.__listeners.length;\n });\n this.listenerCount -= count;\n this.retainedMessages.clear();\n this.listeners = { __listeners: [] } as unknown as FastListeners;\n }\n }\n\n /**\n * 移除保留的事件\n */\n private _removeRetainedEvents(prefix?: string) {\n if (!prefix) this.retainedMessages.clear();\n if (prefix?.endsWith(this._delimiter)) {\n prefix += this._delimiter;\n }\n this.retainedMessages.delete(prefix!);\n for (let key of this.retainedMessages.keys()) {\n if (key.startsWith(prefix!)) {\n this.retainedMessages.delete(key);\n }\n }\n }\n\n /**\n * 清除所有事件或指定前缀的事件(含保留消息)\n */\n clear(prefix?: string) {\n this.offAll(prefix);\n this._removeRetainedEvents(prefix);\n }\n\n /**\n * 发送最后一次事件的消息给对应的监听器(用于 retain)\n */\n private _emitRetainMessage(\n type: string,\n listenerNode: FastEventListenerNode | undefined,\n index: number,\n ) {\n let messages = [] as TypedFastEventMessage[];\n if (type.includes(\"*\")) {\n const patterns = type.split(this._delimiter);\n this.retainedMessages.forEach((message, t) => {\n const parts = t.split(this._delimiter);\n if (isPathMatched(parts, patterns)) {\n messages.push(message);\n }\n });\n } else if (this.retainedMessages.has(type)) {\n messages.push(this.retainedMessages.get(type));\n }\n if (listenerNode) {\n messages.forEach((message) => {\n this._executeListeners([listenerNode], message, {}, (listenerMeta) => {\n return listenerMeta[0] === listenerNode.__listeners[index][0];\n });\n });\n }\n }\n\n /**\n * 遍历监听器节点树,支持三种匹配模式:精确 / 单层通配 * / 多层通配 **\n */\n private _traverseToPath(\n node: FastEventListenerNode,\n parts: string[],\n callback: (node: FastEventListenerNode) => void,\n index: number = 0,\n lastFollowing?: boolean,\n ): void {\n if (index >= parts.length) {\n callback(node);\n return;\n }\n const part = parts[index];\n if (lastFollowing === true) {\n this._traverseToPath(node, parts, callback, index + 1, true);\n return;\n }\n if (\"*\" in node) {\n this._traverseToPath(node[\"*\"], parts, callback, index + 1);\n }\n if (\"**\" in node) {\n this._traverseToPath(node[\"**\"], parts, callback, index + 1, true);\n }\n if (part in node) {\n this._traverseToPath(node[part], parts, callback, index + 1);\n }\n }\n\n private _traverseListeners(\n node: FastEventListenerNode,\n entry: string[],\n callback: (path: string[], node: FastEventListenerNode) => void,\n ): void {\n let entryNode: FastEventListenerNode = node;\n if (entry && entry.length > 0) {\n this._traverseToPath(node, entry, (n) => {\n entryNode = n;\n });\n }\n const traverseNodes = (\n node: FastEventListenerNode,\n callback: (path: string[], node: FastEventListenerNode) => void,\n parentPath: string[],\n ) => {\n callback(parentPath, node);\n for (let [key, childNode] of Object.entries(node)) {\n if (key.startsWith(\"__\")) continue;\n if (childNode) {\n traverseNodes(childNode as FastEventListenerNode, callback, [\n ...parentPath,\n key,\n ]);\n }\n }\n };\n traverseNodes(entryNode, callback, []);\n }\n\n /**\n * 监听器执行出错处理(移除了 ListenerError hook)\n */\n private _onListenerError(\n listener: Function,\n message: TypedFastEventMessage,\n _args: FastLiteListenerArgs | undefined,\n e: any,\n ) {\n if (e instanceof Error) {\n // @ts-ignore\n e._emitter = `${listener.name || \"anonymous\"}:${message.type}`;\n }\n if (this._options.ignoreErrors) {\n return e;\n } else {\n throw e;\n }\n }\n\n /**\n * 执行单个监听器函数(移除了 debug / abortSignal 分支,this 指向实例)\n */\n private _executeListener(\n listener: FastEventListenerMeta,\n message: TypedFastEventMessage,\n args: FastLiteListenerArgs | undefined,\n catchErrors: boolean = false,\n ): Promise<any> | any {\n const listenerFn = listener[0];\n try {\n const isTransformed =\n ((args?.flags || 0) & FastEventListenerFlags.Transformed) > 0;\n let result = listenerFn.call(\n this,\n isTransformed ? message.payload : message,\n args!,\n );\n // 自动处理 reject Promise\n if (catchErrors && result && result instanceof Promise) {\n result = tryReturnError(result, (e) =>\n this._onListenerError(listenerFn, message, args, e),\n );\n }\n return result;\n } catch (e: any) {\n return this._onListenerError(listenerFn, message, args, e);\n }\n }\n\n /**\n * 执行监听器节点列表中的所有监听器(移除了 executor,退化为同步顺序执行)\n */\n private _executeListeners(\n nodes: FastEventListenerNode[],\n message: TypedFastEventMessage,\n args: FastLiteListenerArgs,\n filter?: (listener: FastEventListenerMeta, node: FastEventListenerNode) => boolean,\n ): any[] {\n if (!nodes || nodes.length === 0) return [];\n const listeners: [FastEventListenerMeta, number, FastEventListenerMeta[]][] = [];\n for (const node of nodes) {\n let i: number = 0;\n for (const listener of node.__listeners) {\n if (!filter || filter(listener, node)) {\n // localIdx 必须等于 listener 在 __listeners 中的真实数组下标,\n // 因此 i 对每个 listener 都递增(含被 filter 跳过的),不能只在命中时递增\n listeners.push([listener, i, node.__listeners]);\n }\n i++;\n }\n }\n // 执行监听器前计数先减一,避免在监听器中再次触发导致重复执行\n this._decListenerExecCount(listeners);\n return listeners.map((listener) => {\n return this._executeListener(listener[0], message, args, true);\n });\n }\n\n /**\n * 减少侦听器的执行次数(达到 count 限制时移除)\n */\n _decListenerExecCount(\n listeners: [FastEventListenerMeta, number, FastEventListenerMeta[]][],\n ) {\n for (let i = listeners.length - 1; i >= 0; i--) {\n const meta = listeners[i][0] as FastEventListenerMeta;\n meta[2]++; // 实际执行的次数\n // count > 0 时代表执行次数限制\n if (meta[1] > 0 && meta[1] <= meta[2]) {\n // 用元组中记录的 localIdx(listener 在所属 __listeners 内的本地下标),\n // 而非外层收集列表的循环下标 i(跨节点展平后的全局位置)\n listeners[i][2].splice(listeners[i][1], 1);\n this.listenerCount--; // 同步递减计数,与 off/offAll 路径保持一致\n }\n }\n }\n\n /**\n * 获取指定类型的所有事件监听器\n */\n getListeners(type: string): FastEventListenerMeta[] {\n const nodes: FastEventListenerNode[] = [];\n const parts = type.split(this._delimiter);\n this._traverseToPath(this.listeners, parts, (node) => {\n nodes.push(node);\n });\n const listeners: any[] = [];\n nodes.map((node) => {\n listeners.push(...node.__listeners);\n });\n return listeners;\n }\n\n /**\n * 清除所有事件或指定事件的保留消息\n */\n clearRetainMessages(type?: EventNames | string) {\n if (type) {\n this.retainedMessages.delete(type as string);\n } else {\n this.retainedMessages.clear();\n }\n }\n\n /**\n * 同步触发事件\n *\n * 支持两种调用方式:\n * emit(type, payload, retain?)\n * emit({ type, payload }, retain?)\n */\n public emit<R = any, T extends Types = Types>(\n type: T,\n payload?: UnTransformedEvents<AllEvents>[T],\n retain?: boolean,\n ): R[];\n public emit<R = any, T extends string = string>(\n type: ReplaceWildcard<T> | Types,\n payload?: InMatchedEvent<Events, T> extends true\n ? GetPayload<UnTransformedEvents<AllEvents>, T>\n : any,\n retain?: boolean,\n ): R[];\n public emit<R = any, T extends KeyOf<AllEvents> = KeyOf<AllEvents>>(\n message: FastEventEmitMessage<T, UnTransformedEvents<AllEvents>[T], any>,\n retain?: boolean,\n ): R[];\n public emit<R = any>(message: MutableMessage<AllEvents, any>, retain?: boolean): R[];\n public emit<R = any>(message: { type: keyof AllEvents }, retain?: boolean): R[];\n public emit<R = any>(message: FastEventMessage, retain?: boolean): R[];\n public emit(): any {\n const [message, args] = parseLiteEmitArgs(arguments);\n\n const parts = message.type.split(this._delimiter);\n if (args.retain) {\n this.retainedMessages.set(message.type, message);\n }\n\n const nodes: FastEventListenerNode[] = [];\n this._traverseToPath(this.listeners, parts, (node) => {\n nodes.push(node);\n });\n\n // 触发时进行消息转换\n if (isFunction(this._options.transform)) {\n const transformed = this._options.transform.call(this, message as any);\n if (transformed !== message) {\n message.payload = transformed;\n args.rawEventType = message.type;\n args.flags = (args.flags || 0) | FastEventListenerFlags.Transformed;\n }\n }\n\n // 执行监听器\n const results: any[] = [];\n results.push(...this._executeListeners(nodes, message, args));\n\n // 展开 expandable 结果\n if (this._options.expandEmitResults) {\n expandEmitResults(results);\n }\n return results;\n }\n\n /**\n * 异步触发事件(使用 Promise.allSettled,等待所有异步监听器完成)\n */\n public async emitAsync<R = any, T extends Types = Types>(\n type: T,\n payload?: UnTransformedEvents<AllEvents>[T],\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any, T extends string = string>(\n type: ReplaceWildcard<T> | Types,\n payload?: InMatchedEvent<Events, T> extends true\n ? GetPayload<UnTransformedEvents<AllEvents>, T>\n : any,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any, T extends KeyOf<AllEvents> = KeyOf<AllEvents>>(\n message: FastEventEmitMessage<T, UnTransformedEvents<AllEvents>[T], any>,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(\n message: MutableMessage<AllEvents, any>,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(\n message: { type: keyof AllEvents },\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(): Promise<(R | Error)[]> {\n const results = await Promise.allSettled(\n this.emit.apply(this, arguments as any),\n );\n return getPromiseResults(results);\n }\n\n}\n"]} |
@@ -1,2 +0,2 @@ | ||
| 'use strict';var L=Object.defineProperty;var _=(a,e,t)=>e in a?L(a,e,{enumerable:true,configurable:true,writable:true,value:t}):a[e]=t;var d=(a,e,t)=>_(a,typeof e!="symbol"?e+"":e,t);function v(a,e){let t=a.length,s=e.length;if(t!==s&&(s===0||e[s-1]!=="**"))return false;if(s>0&&e[s-1]==="**"){for(let n=0;n<s-1;n++)if(e[n]!=="*"&&e[n]!==a[n])return false;return true}for(let n=0;n<t;n++)if(e[n]!=="*"&&e[n]!==a[n])return false;return true}function c(a,e){let t=[];for(let s=a.length-1;s>=0;s--)e(a[s])&&(t.push(s),a.splice(s,1));return t.reverse()}function u(a){return a&&typeof a=="function"}var F=Symbol.for("__expandable__");function f(a){return a&&a[F]}function y(a){for(let e=0;e<a.length;e++){let t=a[e];Array.isArray(t)&&f(t)&&(a.splice(e,1,...t),e+=t.length-1);}return a}function m(a,e){return a.catch(t=>(e&&e(t),Promise.resolve(t)))}function g(a){return a.map(e=>e.status==="fulfilled"?e.value:e.reason)}function b(a){let e={},t={};return typeof a[0]=="object"?(Object.assign(e,a[0]),t=typeof a[1]=="boolean"?{retain:a[1]}:{}):(e.type=a[0],e.payload=a[1],t=typeof a[2]=="boolean"?{retain:a[2]}:{}),[e,t]}var h=class{constructor(e){d(this,"__FastLiteEvent__",true);d(this,"listeners",{__listeners:[]});d(this,"_options");d(this,"_delimiter","/");d(this,"retainedMessages",new Map);d(this,"listenerCount",0);this._options=Object.assign({id:Math.random().toString(36).substring(2),delimiter:"/",ignoreErrors:true,expandEmitResults:true},this._initOptions(e)),this._delimiter=this._options.delimiter;}get options(){return this._options}get id(){return this._options.id}get title(){return this._options.title||this.id||"FastLiteEvent"}_initOptions(e){return e}_addListener(e,t,s){let n=0;return [this._forEachNodes(e,r=>{let o=[t,s.count,0,s.tag,s.flags];r.__listeners.push(o),n=r.__listeners.length-1,this.listenerCount++;}),n]}_forEachNodes(e,t){if(e.length===0)return;let s=this.listeners;for(let n=0;n<e.length;n++){let i=e[n];if(i in s||(s[i]={__listeners:[]}),n===e.length-1){let r=s[i];return t(r,s),r}else s=s[i];}}_removeListener(e,t,s){s&&c(e.__listeners,n=>{n=Array.isArray(n)?n[0]:n;let i=n===s;return i&&this.listenerCount--,i});}on(e,t,s){if(e.length===0)throw new Error("event cannot be empty");let n=Object.assign({count:0,flags:0},s),i=e.split(this._delimiter),[r,o]=this._addListener(i,t,n),l=()=>r&&this._removeListener(r,i,t);return this._emitRetainMessage(e,r,o),{off:l,listener:t,[Symbol.dispose](){l();}}}once(e,t,s){return this.on(e,t,Object.assign({},s,{count:1}))}onAny(e,t){return this.on("**",e,t)}off(){let e=arguments,t=u(e[0])?void 0:e[0],s=u(e[0])?e[0]:e[1],n=t?t.split(this._delimiter):[],i=t?t.includes("*"):false;if(t&&!i)this._traverseToPath(this.listeners,n,r=>{s?this._removeListener(r,n,s):t&&(r.__listeners=[]);});else {let r=i?[]:n;this._traverseListeners(this.listeners,r,(o,l)=>{(s!==void 0||i&&v(o,n))&&(s?this._removeListener(l,n,s):l.__listeners=[]);});}}offAll(e){if(e){let t=e.split(this._delimiter),s=0;this._traverseListeners(this.listeners,t,(n,i)=>{s+=i.__listeners.length,i.__listeners=[];}),this.listenerCount-=s,this._removeRetainedEvents(e);}else {let t=0;this._traverseListeners(this.listeners,[],(s,n)=>{t+=n.__listeners.length;}),this.listenerCount-=t,this.retainedMessages.clear(),this.listeners={__listeners:[]};}}_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 n=[];if(e.includes("*")){let i=e.split(this._delimiter);this.retainedMessages.forEach((r,o)=>{let l=o.split(this._delimiter);v(l,i)&&n.push(r);});}else this.retainedMessages.has(e)&&n.push(this.retainedMessages.get(e));t&&n.forEach(i=>{this._executeListeners([t],i,{},r=>r[0]===t.__listeners[s][0]);});}_traverseToPath(e,t,s,n=0,i){if(n>=t.length){s(e);return}let r=t[n];if(i===true){this._traverseToPath(e,t,s,n+1,true);return}"*"in e&&this._traverseToPath(e["*"],t,s,n+1),"**"in e&&this._traverseToPath(e["**"],t,s,n+1,true),r in e&&this._traverseToPath(e[r],t,s,n+1);}_traverseListeners(e,t,s){let n=e;t&&t.length>0&&this._traverseToPath(e,t,r=>{n=r;});let i=(r,o,l)=>{o(l,r);for(let[p,E]of Object.entries(r))p.startsWith("__")||E&&i(E,o,[...l,p]);};i(n,s,[]);}_onListenerError(e,t,s,n){if(n instanceof Error&&(n._emitter=`${e.name||"anonymous"}:${t.type}`),this._options.ignoreErrors)return n;throw n}_executeListener(e,t,s,n=false){let i=e[0];try{let r=((s?.flags||0)&1)>0,o=i.call(this,r?t.payload:t,s);return n&&o&&o instanceof Promise&&(o=m(o,l=>this._onListenerError(i,t,s,l))),o}catch(r){return this._onListenerError(i,t,s,r)}}_executeListeners(e,t,s,n){if(!e||e.length===0)return [];let i=[];for(let r of e){let o=0;for(let l of r.__listeners)(!n||n(l,r))&&i.push([l,o++,r.__listeners]);}return this._decListenerExecCount(i),i.map(r=>this._executeListener(r[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,i=>{t.push(i);});let n=[];return t.map(i=>{n.push(...i.__listeners);}),n}clearRetainMessages(e){e?this.retainedMessages.delete(e):this.retainedMessages.clear();}emit(){let[e,t]=b(arguments),s=e.type.split(this._delimiter);t.retain&&this.retainedMessages.set(e.type,e);let n=[];if(this._traverseToPath(this.listeners,s,r=>{n.push(r);}),u(this._options.transform)){let r=this._options.transform.call(this,e);r!==e&&(e.payload=r,t.rawEventType=e.type,t.flags=(t.flags||0)|1);}let i=[];return i.push(...this._executeListeners(n,e,t)),this._options.expandEmitResults&&y(i),i}async emitAsync(){let e=await Promise.allSettled(this.emit.apply(this,arguments));return g(e)}};exports.FastLiteEvent=h;//# sourceMappingURL=liteEvent.js.map | ||
| 'use strict';var L=Object.defineProperty;var _=(a,e,t)=>e in a?L(a,e,{enumerable:true,configurable:true,writable:true,value:t}):a[e]=t;var d=(a,e,t)=>_(a,typeof e!="symbol"?e+"":e,t);function v(a,e){let t=a.length,s=e.length;if(t!==s&&(s===0||e[s-1]!=="**"))return false;if(s>0&&e[s-1]==="**"){for(let n=0;n<s-1;n++)if(e[n]!=="*"&&e[n]!==a[n])return false;return true}for(let n=0;n<t;n++)if(e[n]!=="*"&&e[n]!==a[n])return false;return true}function c(a,e){let t=[];for(let s=a.length-1;s>=0;s--)e(a[s])&&(t.push(s),a.splice(s,1));return t.reverse()}function u(a){return a&&typeof a=="function"}var F=Symbol.for("__expandable__");function f(a){return a&&a[F]}function y(a){for(let e=0;e<a.length;e++){let t=a[e];Array.isArray(t)&&f(t)&&(a.splice(e,1,...t),e+=t.length-1);}return a}function m(a,e){return a.catch(t=>(e&&e(t),Promise.resolve(t)))}function g(a){return a.map(e=>e.status==="fulfilled"?e.value:e.reason)}function b(a){let e={},t={};return typeof a[0]=="object"?(Object.assign(e,a[0]),t=typeof a[1]=="boolean"?{retain:a[1]}:{}):(e.type=a[0],e.payload=a[1],t=typeof a[2]=="boolean"?{retain:a[2]}:{}),[e,t]}var h=class{constructor(e){d(this,"__FastLiteEvent__",true);d(this,"listeners",{__listeners:[]});d(this,"_options");d(this,"_delimiter","/");d(this,"retainedMessages",new Map);d(this,"listenerCount",0);this._options=Object.assign({id:Math.random().toString(36).substring(2),delimiter:"/",ignoreErrors:true,expandEmitResults:true},this._initOptions(e)),this._delimiter=this._options.delimiter;}get options(){return this._options}get id(){return this._options.id}get title(){return this._options.title||this.id||"FastLiteEvent"}_initOptions(e){return e}_addListener(e,t,s){let n=0;return [this._forEachNodes(e,r=>{let o=[t,s.count,0,s.tag,s.flags];r.__listeners.push(o),n=r.__listeners.length-1,this.listenerCount++;}),n]}_forEachNodes(e,t){if(e.length===0)return;let s=this.listeners;for(let n=0;n<e.length;n++){let i=e[n];if(i in s||(s[i]={__listeners:[]}),n===e.length-1){let r=s[i];return t(r,s),r}else s=s[i];}}_removeListener(e,t,s){s&&c(e.__listeners,n=>{n=Array.isArray(n)?n[0]:n;let i=n===s;return i&&this.listenerCount--,i});}on(e,t,s){if(e.length===0)throw new Error("event cannot be empty");let n=Object.assign({count:0,flags:0},s),i=e.split(this._delimiter),[r,o]=this._addListener(i,t,n),l=()=>r&&this._removeListener(r,i,t);return this._emitRetainMessage(e,r,o),{off:l,listener:t,[Symbol.dispose](){l();}}}once(e,t,s){return this.on(e,t,Object.assign({},s,{count:1}))}onAny(e,t){return this.on("**",e,t)}off(){let e=arguments,t=u(e[0])?void 0:e[0],s=u(e[0])?e[0]:e[1],n=t?t.split(this._delimiter):[],i=t?t.includes("*"):false;if(t&&!i)this._traverseToPath(this.listeners,n,r=>{s?this._removeListener(r,n,s):t&&(r.__listeners=[]);});else {let r=i?[]:n;this._traverseListeners(this.listeners,r,(o,l)=>{(s!==void 0||i&&v(o,n))&&(s?this._removeListener(l,n,s):l.__listeners=[]);});}}offAll(e){if(e){let t=e.split(this._delimiter),s=0;this._traverseListeners(this.listeners,t,(n,i)=>{s+=i.__listeners.length,i.__listeners=[];}),this.listenerCount-=s,this._removeRetainedEvents(e);}else {let t=0;this._traverseListeners(this.listeners,[],(s,n)=>{t+=n.__listeners.length;}),this.listenerCount-=t,this.retainedMessages.clear(),this.listeners={__listeners:[]};}}_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 n=[];if(e.includes("*")){let i=e.split(this._delimiter);this.retainedMessages.forEach((r,o)=>{let l=o.split(this._delimiter);v(l,i)&&n.push(r);});}else this.retainedMessages.has(e)&&n.push(this.retainedMessages.get(e));t&&n.forEach(i=>{this._executeListeners([t],i,{},r=>r[0]===t.__listeners[s][0]);});}_traverseToPath(e,t,s,n=0,i){if(n>=t.length){s(e);return}let r=t[n];if(i===true){this._traverseToPath(e,t,s,n+1,true);return}"*"in e&&this._traverseToPath(e["*"],t,s,n+1),"**"in e&&this._traverseToPath(e["**"],t,s,n+1,true),r in e&&this._traverseToPath(e[r],t,s,n+1);}_traverseListeners(e,t,s){let n=e;t&&t.length>0&&this._traverseToPath(e,t,r=>{n=r;});let i=(r,o,l)=>{o(l,r);for(let[p,E]of Object.entries(r))p.startsWith("__")||E&&i(E,o,[...l,p]);};i(n,s,[]);}_onListenerError(e,t,s,n){if(n instanceof Error&&(n._emitter=`${e.name||"anonymous"}:${t.type}`),this._options.ignoreErrors)return n;throw n}_executeListener(e,t,s,n=false){let i=e[0];try{let r=((s?.flags||0)&1)>0,o=i.call(this,r?t.payload:t,s);return n&&o&&o instanceof Promise&&(o=m(o,l=>this._onListenerError(i,t,s,l))),o}catch(r){return this._onListenerError(i,t,s,r)}}_executeListeners(e,t,s,n){if(!e||e.length===0)return [];let i=[];for(let r of e){let o=0;for(let l of r.__listeners)(!n||n(l,r))&&i.push([l,o,r.__listeners]),o++;}return this._decListenerExecCount(i),i.map(r=>this._executeListener(r[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(e[t][1],1),this.listenerCount--);}}getListeners(e){let t=[],s=e.split(this._delimiter);this._traverseToPath(this.listeners,s,i=>{t.push(i);});let n=[];return t.map(i=>{n.push(...i.__listeners);}),n}clearRetainMessages(e){e?this.retainedMessages.delete(e):this.retainedMessages.clear();}emit(){let[e,t]=b(arguments),s=e.type.split(this._delimiter);t.retain&&this.retainedMessages.set(e.type,e);let n=[];if(this._traverseToPath(this.listeners,s,r=>{n.push(r);}),u(this._options.transform)){let r=this._options.transform.call(this,e);r!==e&&(e.payload=r,t.rawEventType=e.type,t.flags=(t.flags||0)|1);}let i=[];return i.push(...this._executeListeners(n,e,t)),this._options.expandEmitResults&&y(i),i}async emitAsync(){let e=await Promise.allSettled(this.emit.apply(this,arguments));return g(e)}};exports.FastLiteEvent=h;//# sourceMappingURL=liteEvent.js.map | ||
| //# sourceMappingURL=liteEvent.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/utils/isPathMatched.ts","../src/utils/removeItem.ts","../src/utils/isFunction.ts","../src/utils/expandable.ts","../src/utils/expandEmitResults.ts","../src/utils/tryReturnError.ts","../src/utils/getPromiseResults.ts","../src/liteEvent.ts"],"names":["isPathMatched","path","pattern","pathLen","patternLen","i","removeItem","arr","condition","removedIndices","isFunction","fn","__expandable__","isExpandable","value","expandEmitResults","items","item","tryReturnError","callback","e","getPromiseResults","results","result","parseLiteEmitArgs","args","message","emitArgs","FastLiteEvent","options","__publicField","initial","parts","listener","index","node","newListener","current","part","isRemove","type","finalOptions","off","hasWildcard","entryParts","entry","count","_path","prefix","key","listenerNode","messages","patterns","t","listenerMeta","lastFollowing","entryNode","n","traverseNodes","parentPath","childNode","_args","catchErrors","listenerFn","isTransformed","nodes","filter","listeners","meta","transformed"],"mappings":"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","file":"liteEvent.js","sourcesContent":["/**\n *\n * 判断path是否与pattern匹配\n *\n * isPathMatched(\"a.b.c\",\"a.b.c\") == true\n * isPathMatched(\"a.b.c\",\"a.b.*\") == true\n * isPathMatched(\"a.b.c\",\"a.*.*\") == true\n * isPathMatched(\"a.b.c\",\"*.*.*\") == true\n * isPathMatched(\"a.b.c\",\".b.*\") == true\n * isPathMatched(\"a.b.c.d\",\"a.**\") == true\n *\n * - '**' 匹配后续的\n * - '*' 匹配任意数量的字符,包括零个字符\n *\n * @param path\n * @param pattern\n */\nexport function isPathMatched(path: string[], pattern: string[]): boolean {\n const pathLen = path.length;\n const patternLen = pattern.length;\n\n // 快速失败: 长度不匹配(除非以 ** 结尾)\n if (pathLen !== patternLen && (patternLen === 0 || pattern[patternLen - 1] !== '**')) {\n return false;\n }\n\n // 处理 ** 通配符: 直接检查前缀匹配\n if (patternLen > 0 && pattern[patternLen - 1] === '**') {\n // 检查前 n-1 个元素是否匹配\n for (let i = 0; i < patternLen - 1; i++) {\n if (pattern[i] !== '*' && pattern[i] !== path[i]) {\n return false;\n }\n }\n return true;\n }\n\n // 普通匹配: 逐元素比较\n for (let i = 0; i < pathLen; i++) {\n if (pattern[i] !== '*' && pattern[i] !== path[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n// export function isPathMatched(path:string[],pattern:string[]):boolean{\n// if(path.length !== pattern.length && (path.length>0 && pattern[pattern.length-1]!=='**') ){\n// return false;\n// }\n// let fPattern = [...pattern]\n// if(pattern.length >0 && pattern[pattern.length-1] === '**'){\n// fPattern.splice(pattern.length-1,1,...Array.from<string>({\n// length: path.length-pattern.length+1\n// }).fill('*'))\n// }\n// for(let i=0;i<path.length;i++){\n// if(fPattern[i]==='*'){\n// continue\n// }\n// if(fPattern[i]!==path[i]){\n// return false\n// }\n// }\n// return true\n// }\n","/**\n * 从数组中移除满足条件的元素并返回被移除元素的索引\n * @param {any[]} arr - 需要操作的数组\n * @param {(item: any) => boolean} condition - 判断元素是否应该被移除的条件函数\n * @returns {number[]} 被移除元素在原数组中的索引集合\n */\nexport function removeItem(arr: any[], condition: (item: any) => boolean) {\n const removedIndices: number[] = [];\n // 从后往前遍历,避免删除元素时索引变化的问题\n for (let i = arr.length - 1; i >= 0; i--) {\n if (condition(arr[i])) {\n removedIndices.push(i); // 记录原始索引\n arr.splice(i, 1); // 删除元素\n }\n }\n\n // 因为是从后往前遍历的,所以索引是降序的,需要反转得到升序结果\n return removedIndices.reverse();\n}\n","export function isFunction(fn: any): fn is Function {\n return fn && typeof (fn) == \"function\"\n}","/**\n * \n * \n * 用于包括输入值为可展开的对象\n * \n * \n * 用在emit事件\n * \n * emitter1 = new FastEvent()\n * emitter2 = new FastEvent()\n * \n * emitter1.on(\"xxx\",(message)=>{\n * return emitter2.emit(message)\n * })\n * \n * emitter2.on(\"xxx\",()=>1)\n * emitter2.on(\"xxx\",()=>2)\n * \n * const results = emitter1.emit(\"xxx\")\n * // results == [[1,2]] 而不 [1,2],因为emitter2.emit返回的是一个[]\n * \n * expandable的作用就是对emit结果进行包括,当isExpandable时,在emit内部进行展开\n * \n * \n * \n * \n * emitter1.on(\"xxx\",(message)=>{\n * // 告诉emitter2.emit返回的是一个expandable对象\n * // 然后在内部就展开此对象\n * return emitter2.emit(message)\n * })\n * \n* const results = emitter1.emit(\"xxx\")\n * // results == [1,2]\n * \n * 为了实现对结果数据的展开处理,在emit内部需要对监听器的执行结果进行依次检查\n * 这多了一个迭代操作,为了不影响性能,可以关闭此特性\n * options.expandEmitResults = false\n * \n * \n */\n\nexport const __expandable__ = Symbol.for('__expandable__')\n\nexport function expandable(value: any) {\n value[__expandable__] = true\n return value\n}\n\nexport function isExpandable(value: any) {\n return value && value[__expandable__]\n}","import { isExpandable } from \"./expandable\";\n/**\n * \n * 判断成员isExpandable,如果是则说明是一个数组,则原地展开\n * \n * \n */\nexport function expandEmitResults(items: any[]): any[] {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (Array.isArray(item) && isExpandable(item)) {\n items.splice(i, 1, ...item)\n i += item.length - 1\n }\n }\n return items\n\n}\n\n\n// import { expandable } from \"./expandable\";\n// const items = [1, 2, expandable([3, 4]), 0, 0, expandable([5, 6]), expandable([7, 8]), 9, 10, 11]\n// // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]\n// expandEmitResults(items)\n// console.log(items)","\n\n/**\n * 包装 Promise,将 catch 的错误转换为正常返回值\n * @param fn 需要包装的 Promise\n * @returns 包装后的 Promise,如果发生错误则返回错误对象\n */\nexport function tryReturnError(fn: Promise<any>, callback?: (e: any) => any): Promise<any> {\n return fn.catch((e) => {\n if (callback) callback(e)\n return Promise.resolve(e)\n })\n}\n","export function getPromiseResults(results: any[]) {\n return results.map((result) => {\n if (result.status === \"fulfilled\") {\n return result.value;\n } else {\n return result.reason;\n }\n });\n}\n","/**\n * FastLiteEvent 轻量级事件发射器\n *\n * 从 FastEvent 派生的精简版本,移除了以下高级特性:\n * scope / hook / meta / pipe / executor / 异步迭代 / context\n * debug / abortSignal / 订阅时的 filter+off / 监听优先级 prepend\n *\n * 仅保留核心的事件收发能力:on / once / onAny / off / offAll / clear /\n * emit / emitAsync / waitFor / getListeners / clearRetainMessages,以及通配符\n * (* / **)、retain 保留事件、count / tag / flags、ignoreErrors、transform\n * 消息转换、expandEmitResults 等基础特性。\n *\n * 类型与 FastEvent 同源派生(Omit / 复用),监听器、消息、订阅者与 FastEvent\n * 双向兼容——同一监听器函数可同时挂到 FastEvent 与 FastLiteEvent 上。\n */\nimport {\n GetClosestEvents,\n KeyOf,\n MutableMessage,\n Expand,\n Fallback,\n ReplaceWildcard,\n UnTransformedEvents,\n FastEventMessage,\n TypedFastEventMessage,\n FastEventEmitMessage,\n FastListeners,\n FastEventListenerNode,\n FastEventListenerMeta,\n FastEventCommonListener,\n FastEventSubscriber,\n FastEventOptions,\n FastEventListenOptions,\n FastEventListenerArgs,\n FastEvents,\n FastEventListenerFlags,\n IsTransformedEvent,\n ExtendWildcardEvents,\n PayloadValues,\n PickPayload,\n ValueOf,\n GetPayload,\n} from \"./types\";\nimport { InMatchedEvent } from \"./types/wildcards/InMatchedEvent\";\nimport { GetClosestMessage } from \"./types/closest/GetClosestMessage\";\nimport { isPathMatched } from \"./utils/isPathMatched\";\nimport { removeItem } from \"./utils/removeItem\";\nimport { isFunction } from \"./utils/isFunction\";\nimport { expandEmitResults } from \"./utils/expandEmitResults\";\nimport { tryReturnError } from \"./utils/tryReturnError\";\nimport { getPromiseResults } from \"./utils/getPromiseResults\";\n\n// —— 从原始类型 Omit 派生:剥离被移除特性对应的字段 ——\nexport type FastLiteMessage<T extends string = string, P = any> = Omit<\n FastEventMessage<T, P>,\n \"meta\"\n>;\n\nexport type FastLiteListenerArgs = Omit<\n FastEventListenerArgs,\n \"meta\" | \"executor\" | \"parseArgs\" | \"abortSignal\"\n>;\n\nexport type FastLiteListenOptions<\n Events extends Record<string, any> = Record<string, any>,\n> = Omit<FastEventListenOptions<Events>, \"pipes\" | \"iterable\" | \"filter\" | \"off\" | \"prepend\">;\n\nexport type FastLiteEventOptions = Omit<\n FastEventOptions,\n | \"context\"\n | \"meta\"\n | \"executor\"\n | \"debug\"\n | \"onAddBeforeListener\"\n | \"onAddAfterListener\"\n | \"onRemoveListener\"\n | \"onClearListeners\"\n | \"onListenerError\"\n | \"onBeforeExecuteListener\"\n | \"onAfterExecuteListener\"\n>;\n\n// —— 完全复用原始类型(与 FastEvent 互换兼容)——\nexport type FastLiteSubscriber = FastEventSubscriber;\nexport type FastLiteListener<\n T extends string = string,\n P = any,\n> = FastEventCommonListener<FastLiteMessage<T, P>, any, any>;\n\n/**\n * 解析 emit 参数(简化版,不复用 parseEmitArgs)\n *\n * 仅支持两种形态:\n * (type, payload, retain?)\n * (message, retain?)\n *\n * @param args - emit 的 arguments\n * @returns [消息, 监听器参数]\n */\nfunction parseLiteEmitArgs(\n args: IArguments,\n): [TypedFastEventMessage, FastLiteListenerArgs] {\n let message = {} as TypedFastEventMessage;\n let emitArgs: FastLiteListenerArgs = {};\n if (typeof args[0] === \"object\") {\n Object.assign(message, args[0]);\n emitArgs = typeof args[1] === \"boolean\" ? { retain: args[1] } : {};\n } else {\n message.type = args[0] as any;\n message.payload = args[1] as any;\n emitArgs = typeof args[2] === \"boolean\" ? { retain: args[2] } : {};\n }\n return [message, emitArgs];\n}\n\n/**\n * FastLiteEvent 轻量级事件发射器类\n *\n * @template Events - 事件类型定义,继承自 FastEvents 接口\n */\nexport class FastLiteEvent<\n Events extends Record<string, any> = Record<string, any>,\n AllEvents extends Record<string, any> = Expand<Events & FastEvents>,\n Types extends keyof AllEvents = KeyOf<AllEvents>,\n EventNames = KeyOf<ExtendWildcardEvents<AllEvents>>,\n> {\n __FastLiteEvent__: boolean = true;\n\n /** 事件监听器树结构,存储所有注册的事件监听器 */\n public listeners: FastListeners = {\n __listeners: [],\n } as unknown as FastListeners;\n\n /** 事件发射器的配置选项 */\n private _options: FastLiteEventOptions;\n\n /** 事件名称的分隔符,默认为 '/' */\n private _delimiter: string = \"/\";\n\n /** 保留的事件消息映射,Key 是事件名称,Value 是保留的事件消息 */\n retainedMessages: Map<string, any> = new Map<string, any>();\n\n /** 当前注册的监听器总数 */\n listenerCount: number = 0;\n\n /**\n * 创建 FastLiteEvent 实例\n * @param options - 事件发射器的配置选项\n *\n * 默认配置:\n * - id: 随机字符串 - 实例唯一标识符\n * - delimiter: '/' - 事件名称分隔符\n * - ignoreErrors: true - 是否忽略监听器执行错误\n * - expandEmitResults: true - 是否展开 emit 返回值\n */\n constructor(options?: Partial<FastLiteEventOptions>) {\n this._options = Object.assign(\n {\n id: Math.random().toString(36).substring(2),\n delimiter: \"/\",\n ignoreErrors: true,\n expandEmitResults: true,\n },\n this._initOptions(options),\n ) as unknown as FastLiteEventOptions;\n this._delimiter = this._options.delimiter!;\n }\n\n /** 获取事件发射器的配置选项 */\n get options() {\n return this._options;\n }\n /** 获取事件发射器的唯一标识符 */\n get id() {\n return this._options.id!;\n }\n /** 获取事件发射器的标题 */\n get title() {\n return this._options.title || this.id || \"FastLiteEvent\";\n }\n\n /**\n * 初始化选项(供子类重载)\n * @param initial - 可选的初始选项\n */\n _initOptions(initial?: Partial<FastLiteEventOptions>) {\n return initial;\n }\n\n /**\n * 添加事件监听器到事件树(仅尾插,已移除 prepend 插队)\n * @param parts - 事件路径数组\n * @param listener - 事件监听器函数\n * @param options - 监听器配置(count / tag / flags)\n * @returns [节点, 监听器索引]\n */\n private _addListener(\n parts: string[],\n listener: Function,\n options: { count: number; tag?: string; flags?: number },\n ): [FastEventListenerNode | undefined, number] {\n let index: number = 0;\n const node = this._forEachNodes(parts, (node) => {\n const newListener = [\n listener,\n options.count,\n 0,\n options.tag,\n options.flags,\n ] as unknown as FastEventListenerMeta;\n node.__listeners.push(newListener);\n index = node.__listeners.length - 1;\n this.listenerCount++;\n });\n return [node, index];\n }\n\n /**\n * 根据 parts 路径遍历监听器树,并在最后的节点上执行回调\n */\n private _forEachNodes(\n parts: string[],\n callback: (node: FastEventListenerNode, parent: FastEventListenerNode) => void,\n ): FastEventListenerNode | undefined {\n if (parts.length === 0) return;\n let current = this.listeners;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!(part in current)) {\n current[part] = {\n __listeners: [],\n } as unknown as FastListeners;\n }\n if (i === parts.length - 1) {\n const node = current[part];\n callback(node, current);\n return node;\n } else {\n current = current[part];\n }\n }\n return undefined;\n }\n\n /**\n * 从监听器节点中移除指定的事件监听器\n */\n private _removeListener(\n node: FastEventListenerNode,\n path: string[],\n listener: Function,\n ): void {\n if (!listener) return;\n removeItem(node.__listeners, (item: any) => {\n item = Array.isArray(item) ? item[0] : item;\n const isRemove = item === listener;\n if (isRemove) this.listenerCount--;\n return isRemove;\n });\n }\n\n /**\n * 注册事件监听器\n * @param type - 事件类型,支持普通字符串、通配符(user/*)、全局监听(**)\n * @param listener - 事件监听器函数\n * @param options - 监听器配置(count / tag / flags)\n * @returns 订阅者对象,包含 off 方法用于取消监听\n */\n public on<T extends string = KeyOf<Events> | \"**\">(\n type: T,\n listener: FastEventCommonListener<\n T extends IsTransformedEvent<AllEvents, T>\n ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n : T extends \"**\"\n ? MutableMessage<Events>\n : GetClosestMessage<Events, T, any>,\n any,\n any\n >,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n if (type.length === 0) throw new Error(\"event cannot be empty\");\n const finalOptions = Object.assign(\n { count: 0, flags: 0 },\n options,\n ) as Required<FastLiteListenOptions> & { count: number; flags: number };\n\n const parts = type.split(this._delimiter);\n const [node, index] = this._addListener(parts, listener as any, finalOptions);\n const off = () => node && this._removeListener(node, parts, listener as any);\n\n // 触发监听器保留消息(retain)\n this._emitRetainMessage(type, node, index);\n\n return {\n off,\n listener: listener as any,\n [Symbol.dispose]() {\n off();\n },\n };\n }\n\n /**\n * 注册一次性事件监听器(触发一次后自动注销)\n */\n public once<T extends string = KeyOf<Events> | \"**\">(\n type: T,\n listener: FastEventCommonListener<\n T extends IsTransformedEvent<AllEvents, T>\n ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n : T extends \"**\"\n ? MutableMessage<Events>\n : GetClosestMessage<Events, T, any>,\n any,\n any\n >,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n return this.on(type, listener, Object.assign({}, options, { count: 1 }));\n }\n\n /**\n * 注册一个监听所有事件的监听器(等同 on('**', listener))\n */\n public onAny(\n listener: FastEventCommonListener<MutableMessage<AllEvents, any>, any, any>,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n return this.on(\"**\", listener as any, options as any) as FastEventSubscriber;\n }\n\n /**\n * 移除事件监听器\n */\n off(listener: Function): void;\n off(type: string, listener: Function): void;\n off(type: Types): void;\n off(type: string): void;\n off() {\n const args = arguments;\n const type = isFunction(args[0]) ? undefined : args[0];\n const listener = isFunction(args[0]) ? args[0] : args[1];\n const parts = type ? type.split(this._delimiter) : [];\n const hasWildcard = type ? type.includes(\"*\") : false;\n if (type && !hasWildcard) {\n this._traverseToPath(this.listeners, parts, (node) => {\n if (listener) {\n this._removeListener(node, parts, listener);\n } else if (type) {\n node.__listeners = [];\n }\n });\n } else {\n const entryParts: string[] = hasWildcard ? [] : parts;\n this._traverseListeners(this.listeners, entryParts, (path, node) => {\n if (listener !== undefined || (hasWildcard && isPathMatched(path, parts))) {\n if (listener) {\n this._removeListener(node, parts, listener);\n } else {\n node.__listeners = [];\n }\n }\n });\n }\n }\n\n /**\n * 移除所有事件监听器\n * @param entry - 可选的事件前缀,提供则只移除该前缀下的监听器\n */\n offAll(entry?: string) {\n if (entry) {\n const parts = entry.split(this._delimiter);\n let count = 0;\n this._traverseListeners(this.listeners, parts, (_path, node) => {\n count += node.__listeners.length;\n node.__listeners = [];\n });\n this.listenerCount -= count;\n this._removeRetainedEvents(entry);\n } else {\n let count = 0;\n this._traverseListeners(this.listeners, [], (_path, node) => {\n count += node.__listeners.length;\n });\n this.listenerCount -= count;\n this.retainedMessages.clear();\n this.listeners = { __listeners: [] } as unknown as FastListeners;\n }\n }\n\n /**\n * 移除保留的事件\n */\n private _removeRetainedEvents(prefix?: string) {\n if (!prefix) this.retainedMessages.clear();\n if (prefix?.endsWith(this._delimiter)) {\n prefix += this._delimiter;\n }\n this.retainedMessages.delete(prefix!);\n for (let key of this.retainedMessages.keys()) {\n if (key.startsWith(prefix!)) {\n this.retainedMessages.delete(key);\n }\n }\n }\n\n /**\n * 清除所有事件或指定前缀的事件(含保留消息)\n */\n clear(prefix?: string) {\n this.offAll(prefix);\n this._removeRetainedEvents(prefix);\n }\n\n /**\n * 发送最后一次事件的消息给对应的监听器(用于 retain)\n */\n private _emitRetainMessage(\n type: string,\n listenerNode: FastEventListenerNode | undefined,\n index: number,\n ) {\n let messages = [] as TypedFastEventMessage[];\n if (type.includes(\"*\")) {\n const patterns = type.split(this._delimiter);\n this.retainedMessages.forEach((message, t) => {\n const parts = t.split(this._delimiter);\n if (isPathMatched(parts, patterns)) {\n messages.push(message);\n }\n });\n } else if (this.retainedMessages.has(type)) {\n messages.push(this.retainedMessages.get(type));\n }\n if (listenerNode) {\n messages.forEach((message) => {\n this._executeListeners([listenerNode], message, {}, (listenerMeta) => {\n return listenerMeta[0] === listenerNode.__listeners[index][0];\n });\n });\n }\n }\n\n /**\n * 遍历监听器节点树,支持三种匹配模式:精确 / 单层通配 * / 多层通配 **\n */\n private _traverseToPath(\n node: FastEventListenerNode,\n parts: string[],\n callback: (node: FastEventListenerNode) => void,\n index: number = 0,\n lastFollowing?: boolean,\n ): void {\n if (index >= parts.length) {\n callback(node);\n return;\n }\n const part = parts[index];\n if (lastFollowing === true) {\n this._traverseToPath(node, parts, callback, index + 1, true);\n return;\n }\n if (\"*\" in node) {\n this._traverseToPath(node[\"*\"], parts, callback, index + 1);\n }\n if (\"**\" in node) {\n this._traverseToPath(node[\"**\"], parts, callback, index + 1, true);\n }\n if (part in node) {\n this._traverseToPath(node[part], parts, callback, index + 1);\n }\n }\n\n private _traverseListeners(\n node: FastEventListenerNode,\n entry: string[],\n callback: (path: string[], node: FastEventListenerNode) => void,\n ): void {\n let entryNode: FastEventListenerNode = node;\n if (entry && entry.length > 0) {\n this._traverseToPath(node, entry, (n) => {\n entryNode = n;\n });\n }\n const traverseNodes = (\n node: FastEventListenerNode,\n callback: (path: string[], node: FastEventListenerNode) => void,\n parentPath: string[],\n ) => {\n callback(parentPath, node);\n for (let [key, childNode] of Object.entries(node)) {\n if (key.startsWith(\"__\")) continue;\n if (childNode) {\n traverseNodes(childNode as FastEventListenerNode, callback, [\n ...parentPath,\n key,\n ]);\n }\n }\n };\n traverseNodes(entryNode, callback, []);\n }\n\n /**\n * 监听器执行出错处理(移除了 ListenerError hook)\n */\n private _onListenerError(\n listener: Function,\n message: TypedFastEventMessage,\n _args: FastLiteListenerArgs | undefined,\n e: any,\n ) {\n if (e instanceof Error) {\n // @ts-ignore\n e._emitter = `${listener.name || \"anonymous\"}:${message.type}`;\n }\n if (this._options.ignoreErrors) {\n return e;\n } else {\n throw e;\n }\n }\n\n /**\n * 执行单个监听器函数(移除了 debug / abortSignal 分支,this 指向实例)\n */\n private _executeListener(\n listener: FastEventListenerMeta,\n message: TypedFastEventMessage,\n args: FastLiteListenerArgs | undefined,\n catchErrors: boolean = false,\n ): Promise<any> | any {\n const listenerFn = listener[0];\n try {\n const isTransformed =\n ((args?.flags || 0) & FastEventListenerFlags.Transformed) > 0;\n let result = listenerFn.call(\n this,\n isTransformed ? message.payload : message,\n args!,\n );\n // 自动处理 reject Promise\n if (catchErrors && result && result instanceof Promise) {\n result = tryReturnError(result, (e) =>\n this._onListenerError(listenerFn, message, args, e),\n );\n }\n return result;\n } catch (e: any) {\n return this._onListenerError(listenerFn, message, args, e);\n }\n }\n\n /**\n * 执行监听器节点列表中的所有监听器(移除了 executor,退化为同步顺序执行)\n */\n private _executeListeners(\n nodes: FastEventListenerNode[],\n message: TypedFastEventMessage,\n args: FastLiteListenerArgs,\n filter?: (listener: FastEventListenerMeta, node: FastEventListenerNode) => boolean,\n ): any[] {\n if (!nodes || nodes.length === 0) return [];\n const listeners: [FastEventListenerMeta, number, FastEventListenerMeta[]][] = [];\n for (const node of nodes) {\n let i: number = 0;\n for (const listener of node.__listeners) {\n if (!filter || filter(listener, node)) {\n listeners.push([listener, i++, node.__listeners]);\n }\n }\n }\n // 执行监听器前计数先减一,避免在监听器中再次触发导致重复执行\n this._decListenerExecCount(listeners);\n return listeners.map((listener) => {\n return this._executeListener(listener[0], message, args, true);\n });\n }\n\n /**\n * 减少侦听器的执行次数(达到 count 限制时移除)\n */\n _decListenerExecCount(\n listeners: [FastEventListenerMeta, number, FastEventListenerMeta[]][],\n ) {\n for (let i = listeners.length - 1; i >= 0; i--) {\n const meta = listeners[i][0] as FastEventListenerMeta;\n meta[2]++; // 实际执行的次数\n // count > 0 时代表执行次数限制\n if (meta[1] > 0 && meta[1] <= meta[2]) {\n listeners[i][2].splice(i, 1);\n }\n }\n }\n\n /**\n * 获取指定类型的所有事件监听器\n */\n getListeners(type: string): FastEventListenerMeta[] {\n const nodes: FastEventListenerNode[] = [];\n const parts = type.split(this._delimiter);\n this._traverseToPath(this.listeners, parts, (node) => {\n nodes.push(node);\n });\n const listeners: any[] = [];\n nodes.map((node) => {\n listeners.push(...node.__listeners);\n });\n return listeners;\n }\n\n /**\n * 清除所有事件或指定事件的保留消息\n */\n clearRetainMessages(type?: EventNames | string) {\n if (type) {\n this.retainedMessages.delete(type as string);\n } else {\n this.retainedMessages.clear();\n }\n }\n\n /**\n * 同步触发事件\n *\n * 支持两种调用方式:\n * emit(type, payload, retain?)\n * emit({ type, payload }, retain?)\n */\n public emit<R = any, T extends Types = Types>(\n type: T,\n payload?: UnTransformedEvents<AllEvents>[T],\n retain?: boolean,\n ): R[];\n public emit<R = any, T extends string = string>(\n type: ReplaceWildcard<T> | Types,\n payload?: InMatchedEvent<Events, T> extends true\n ? GetPayload<UnTransformedEvents<AllEvents>, T>\n : any,\n retain?: boolean,\n ): R[];\n public emit<R = any, T extends KeyOf<AllEvents> = KeyOf<AllEvents>>(\n message: FastEventEmitMessage<T, UnTransformedEvents<AllEvents>[T], any>,\n retain?: boolean,\n ): R[];\n public emit<R = any>(message: MutableMessage<AllEvents, any>, retain?: boolean): R[];\n public emit<R = any>(message: { type: keyof AllEvents }, retain?: boolean): R[];\n public emit<R = any>(message: FastEventMessage, retain?: boolean): R[];\n public emit(): any {\n const [message, args] = parseLiteEmitArgs(arguments);\n\n const parts = message.type.split(this._delimiter);\n if (args.retain) {\n this.retainedMessages.set(message.type, message);\n }\n\n const nodes: FastEventListenerNode[] = [];\n this._traverseToPath(this.listeners, parts, (node) => {\n nodes.push(node);\n });\n\n // 触发时进行消息转换\n if (isFunction(this._options.transform)) {\n const transformed = this._options.transform.call(this, message as any);\n if (transformed !== message) {\n message.payload = transformed;\n args.rawEventType = message.type;\n args.flags = (args.flags || 0) | FastEventListenerFlags.Transformed;\n }\n }\n\n // 执行监听器\n const results: any[] = [];\n results.push(...this._executeListeners(nodes, message, args));\n\n // 展开 expandable 结果\n if (this._options.expandEmitResults) {\n expandEmitResults(results);\n }\n return results;\n }\n\n /**\n * 异步触发事件(使用 Promise.allSettled,等待所有异步监听器完成)\n */\n public async emitAsync<R = any, T extends Types = Types>(\n type: T,\n payload?: UnTransformedEvents<AllEvents>[T],\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any, T extends string = string>(\n type: ReplaceWildcard<T> | Types,\n payload?: InMatchedEvent<Events, T> extends true\n ? GetPayload<UnTransformedEvents<AllEvents>, T>\n : any,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any, T extends KeyOf<AllEvents> = KeyOf<AllEvents>>(\n message: FastEventEmitMessage<T, UnTransformedEvents<AllEvents>[T], any>,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(\n message: MutableMessage<AllEvents, any>,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(\n message: { type: keyof AllEvents },\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(): Promise<(R | Error)[]> {\n const results = await Promise.allSettled(\n this.emit.apply(this, arguments as any),\n );\n return getPromiseResults(results);\n }\n\n}\n"]} | ||
| {"version":3,"sources":["../src/utils/isPathMatched.ts","../src/utils/removeItem.ts","../src/utils/isFunction.ts","../src/utils/expandable.ts","../src/utils/expandEmitResults.ts","../src/utils/tryReturnError.ts","../src/utils/getPromiseResults.ts","../src/liteEvent.ts"],"names":["isPathMatched","path","pattern","pathLen","patternLen","i","removeItem","arr","condition","removedIndices","isFunction","fn","__expandable__","isExpandable","value","expandEmitResults","items","item","tryReturnError","callback","e","getPromiseResults","results","result","parseLiteEmitArgs","args","message","emitArgs","FastLiteEvent","options","__publicField","initial","parts","listener","index","node","newListener","current","part","isRemove","type","finalOptions","off","hasWildcard","entryParts","entry","count","_path","prefix","key","listenerNode","messages","patterns","t","listenerMeta","lastFollowing","entryNode","n","traverseNodes","parentPath","childNode","_args","catchErrors","listenerFn","isTransformed","nodes","filter","listeners","meta","transformed"],"mappings":"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","file":"liteEvent.js","sourcesContent":["/**\n *\n * 判断path是否与pattern匹配\n *\n * isPathMatched(\"a.b.c\",\"a.b.c\") == true\n * isPathMatched(\"a.b.c\",\"a.b.*\") == true\n * isPathMatched(\"a.b.c\",\"a.*.*\") == true\n * isPathMatched(\"a.b.c\",\"*.*.*\") == true\n * isPathMatched(\"a.b.c\",\".b.*\") == true\n * isPathMatched(\"a.b.c.d\",\"a.**\") == true\n *\n * - '**' 匹配后续的\n * - '*' 匹配任意数量的字符,包括零个字符\n *\n * @param path\n * @param pattern\n */\nexport function isPathMatched(path: string[], pattern: string[]): boolean {\n const pathLen = path.length;\n const patternLen = pattern.length;\n\n // 快速失败: 长度不匹配(除非以 ** 结尾)\n if (pathLen !== patternLen && (patternLen === 0 || pattern[patternLen - 1] !== '**')) {\n return false;\n }\n\n // 处理 ** 通配符: 直接检查前缀匹配\n if (patternLen > 0 && pattern[patternLen - 1] === '**') {\n // 检查前 n-1 个元素是否匹配\n for (let i = 0; i < patternLen - 1; i++) {\n if (pattern[i] !== '*' && pattern[i] !== path[i]) {\n return false;\n }\n }\n return true;\n }\n\n // 普通匹配: 逐元素比较\n for (let i = 0; i < pathLen; i++) {\n if (pattern[i] !== '*' && pattern[i] !== path[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n// export function isPathMatched(path:string[],pattern:string[]):boolean{\n// if(path.length !== pattern.length && (path.length>0 && pattern[pattern.length-1]!=='**') ){\n// return false;\n// }\n// let fPattern = [...pattern]\n// if(pattern.length >0 && pattern[pattern.length-1] === '**'){\n// fPattern.splice(pattern.length-1,1,...Array.from<string>({\n// length: path.length-pattern.length+1\n// }).fill('*'))\n// }\n// for(let i=0;i<path.length;i++){\n// if(fPattern[i]==='*'){\n// continue\n// }\n// if(fPattern[i]!==path[i]){\n// return false\n// }\n// }\n// return true\n// }\n","/**\n * 从数组中移除满足条件的元素并返回被移除元素的索引\n * @param {any[]} arr - 需要操作的数组\n * @param {(item: any) => boolean} condition - 判断元素是否应该被移除的条件函数\n * @returns {number[]} 被移除元素在原数组中的索引集合\n */\nexport function removeItem(arr: any[], condition: (item: any) => boolean) {\n const removedIndices: number[] = [];\n // 从后往前遍历,避免删除元素时索引变化的问题\n for (let i = arr.length - 1; i >= 0; i--) {\n if (condition(arr[i])) {\n removedIndices.push(i); // 记录原始索引\n arr.splice(i, 1); // 删除元素\n }\n }\n\n // 因为是从后往前遍历的,所以索引是降序的,需要反转得到升序结果\n return removedIndices.reverse();\n}\n","export function isFunction(fn: any): fn is Function {\n return fn && typeof (fn) == \"function\"\n}","/**\n * \n * \n * 用于包括输入值为可展开的对象\n * \n * \n * 用在emit事件\n * \n * emitter1 = new FastEvent()\n * emitter2 = new FastEvent()\n * \n * emitter1.on(\"xxx\",(message)=>{\n * return emitter2.emit(message)\n * })\n * \n * emitter2.on(\"xxx\",()=>1)\n * emitter2.on(\"xxx\",()=>2)\n * \n * const results = emitter1.emit(\"xxx\")\n * // results == [[1,2]] 而不 [1,2],因为emitter2.emit返回的是一个[]\n * \n * expandable的作用就是对emit结果进行包括,当isExpandable时,在emit内部进行展开\n * \n * \n * \n * \n * emitter1.on(\"xxx\",(message)=>{\n * // 告诉emitter2.emit返回的是一个expandable对象\n * // 然后在内部就展开此对象\n * return emitter2.emit(message)\n * })\n * \n* const results = emitter1.emit(\"xxx\")\n * // results == [1,2]\n * \n * 为了实现对结果数据的展开处理,在emit内部需要对监听器的执行结果进行依次检查\n * 这多了一个迭代操作,为了不影响性能,可以关闭此特性\n * options.expandEmitResults = false\n * \n * \n */\n\nexport const __expandable__ = Symbol.for('__expandable__')\n\nexport function expandable(value: any) {\n value[__expandable__] = true\n return value\n}\n\nexport function isExpandable(value: any) {\n return value && value[__expandable__]\n}","import { isExpandable } from \"./expandable\";\n/**\n * \n * 判断成员isExpandable,如果是则说明是一个数组,则原地展开\n * \n * \n */\nexport function expandEmitResults(items: any[]): any[] {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (Array.isArray(item) && isExpandable(item)) {\n items.splice(i, 1, ...item)\n i += item.length - 1\n }\n }\n return items\n\n}\n\n\n// import { expandable } from \"./expandable\";\n// const items = [1, 2, expandable([3, 4]), 0, 0, expandable([5, 6]), expandable([7, 8]), 9, 10, 11]\n// // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]\n// expandEmitResults(items)\n// console.log(items)","\n\n/**\n * 包装 Promise,将 catch 的错误转换为正常返回值\n * @param fn 需要包装的 Promise\n * @returns 包装后的 Promise,如果发生错误则返回错误对象\n */\nexport function tryReturnError(fn: Promise<any>, callback?: (e: any) => any): Promise<any> {\n return fn.catch((e) => {\n if (callback) callback(e)\n return Promise.resolve(e)\n })\n}\n","export function getPromiseResults(results: any[]) {\n return results.map((result) => {\n if (result.status === \"fulfilled\") {\n return result.value;\n } else {\n return result.reason;\n }\n });\n}\n","/**\n * FastLiteEvent 轻量级事件发射器\n *\n * 从 FastEvent 派生的精简版本,移除了以下高级特性:\n * scope / hook / meta / pipe / executor / 异步迭代 / context\n * debug / abortSignal / 订阅时的 filter+off / 监听优先级 prepend\n *\n * 仅保留核心的事件收发能力:on / once / onAny / off / offAll / clear /\n * emit / emitAsync / waitFor / getListeners / clearRetainMessages,以及通配符\n * (* / **)、retain 保留事件、count / tag / flags、ignoreErrors、transform\n * 消息转换、expandEmitResults 等基础特性。\n *\n * 类型与 FastEvent 同源派生(Omit / 复用),监听器、消息、订阅者与 FastEvent\n * 双向兼容——同一监听器函数可同时挂到 FastEvent 与 FastLiteEvent 上。\n */\nimport {\n GetClosestEvents,\n KeyOf,\n MutableMessage,\n Expand,\n Fallback,\n ReplaceWildcard,\n UnTransformedEvents,\n FastEventMessage,\n TypedFastEventMessage,\n FastEventEmitMessage,\n FastListeners,\n FastEventListenerNode,\n FastEventListenerMeta,\n FastEventCommonListener,\n FastEventSubscriber,\n FastEventOptions,\n FastEventListenOptions,\n FastEventListenerArgs,\n FastEvents,\n FastEventListenerFlags,\n IsTransformedEvent,\n ExtendWildcardEvents,\n PayloadValues,\n PickPayload,\n ValueOf,\n GetPayload,\n} from \"./types\";\nimport { InMatchedEvent } from \"./types/wildcards/InMatchedEvent\";\nimport { GetClosestMessage } from \"./types/closest/GetClosestMessage\";\nimport { isPathMatched } from \"./utils/isPathMatched\";\nimport { removeItem } from \"./utils/removeItem\";\nimport { isFunction } from \"./utils/isFunction\";\nimport { expandEmitResults } from \"./utils/expandEmitResults\";\nimport { tryReturnError } from \"./utils/tryReturnError\";\nimport { getPromiseResults } from \"./utils/getPromiseResults\";\n\n// —— 从原始类型 Omit 派生:剥离被移除特性对应的字段 ——\nexport type FastLiteMessage<T extends string = string, P = any> = Omit<\n FastEventMessage<T, P>,\n \"meta\"\n>;\n\nexport type FastLiteListenerArgs = Omit<\n FastEventListenerArgs,\n \"meta\" | \"executor\" | \"parseArgs\" | \"abortSignal\"\n>;\n\nexport type FastLiteListenOptions<\n Events extends Record<string, any> = Record<string, any>,\n> = Omit<FastEventListenOptions<Events>, \"pipes\" | \"iterable\" | \"filter\" | \"off\" | \"prepend\">;\n\nexport type FastLiteEventOptions = Omit<\n FastEventOptions,\n | \"context\"\n | \"meta\"\n | \"executor\"\n | \"debug\"\n | \"onAddBeforeListener\"\n | \"onAddAfterListener\"\n | \"onRemoveListener\"\n | \"onClearListeners\"\n | \"onListenerError\"\n | \"onBeforeExecuteListener\"\n | \"onAfterExecuteListener\"\n>;\n\n// —— 完全复用原始类型(与 FastEvent 互换兼容)——\nexport type FastLiteSubscriber = FastEventSubscriber;\nexport type FastLiteListener<\n T extends string = string,\n P = any,\n> = FastEventCommonListener<FastLiteMessage<T, P>, any, any>;\n\n/**\n * 解析 emit 参数(简化版,不复用 parseEmitArgs)\n *\n * 仅支持两种形态:\n * (type, payload, retain?)\n * (message, retain?)\n *\n * @param args - emit 的 arguments\n * @returns [消息, 监听器参数]\n */\nfunction parseLiteEmitArgs(\n args: IArguments,\n): [TypedFastEventMessage, FastLiteListenerArgs] {\n let message = {} as TypedFastEventMessage;\n let emitArgs: FastLiteListenerArgs = {};\n if (typeof args[0] === \"object\") {\n Object.assign(message, args[0]);\n emitArgs = typeof args[1] === \"boolean\" ? { retain: args[1] } : {};\n } else {\n message.type = args[0] as any;\n message.payload = args[1] as any;\n emitArgs = typeof args[2] === \"boolean\" ? { retain: args[2] } : {};\n }\n return [message, emitArgs];\n}\n\n/**\n * FastLiteEvent 轻量级事件发射器类\n *\n * @template Events - 事件类型定义,继承自 FastEvents 接口\n */\nexport class FastLiteEvent<\n Events extends Record<string, any> = Record<string, any>,\n AllEvents extends Record<string, any> = Expand<Events & FastEvents>,\n Types extends keyof AllEvents = KeyOf<AllEvents>,\n EventNames = KeyOf<ExtendWildcardEvents<AllEvents>>,\n> {\n __FastLiteEvent__: boolean = true;\n\n /** 事件监听器树结构,存储所有注册的事件监听器 */\n public listeners: FastListeners = {\n __listeners: [],\n } as unknown as FastListeners;\n\n /** 事件发射器的配置选项 */\n private _options: FastLiteEventOptions;\n\n /** 事件名称的分隔符,默认为 '/' */\n private _delimiter: string = \"/\";\n\n /** 保留的事件消息映射,Key 是事件名称,Value 是保留的事件消息 */\n retainedMessages: Map<string, any> = new Map<string, any>();\n\n /** 当前注册的监听器总数 */\n listenerCount: number = 0;\n\n /**\n * 创建 FastLiteEvent 实例\n * @param options - 事件发射器的配置选项\n *\n * 默认配置:\n * - id: 随机字符串 - 实例唯一标识符\n * - delimiter: '/' - 事件名称分隔符\n * - ignoreErrors: true - 是否忽略监听器执行错误\n * - expandEmitResults: true - 是否展开 emit 返回值\n */\n constructor(options?: Partial<FastLiteEventOptions>) {\n this._options = Object.assign(\n {\n id: Math.random().toString(36).substring(2),\n delimiter: \"/\",\n ignoreErrors: true,\n expandEmitResults: true,\n },\n this._initOptions(options),\n ) as unknown as FastLiteEventOptions;\n this._delimiter = this._options.delimiter!;\n }\n\n /** 获取事件发射器的配置选项 */\n get options() {\n return this._options;\n }\n /** 获取事件发射器的唯一标识符 */\n get id() {\n return this._options.id!;\n }\n /** 获取事件发射器的标题 */\n get title() {\n return this._options.title || this.id || \"FastLiteEvent\";\n }\n\n /**\n * 初始化选项(供子类重载)\n * @param initial - 可选的初始选项\n */\n _initOptions(initial?: Partial<FastLiteEventOptions>) {\n return initial;\n }\n\n /**\n * 添加事件监听器到事件树(仅尾插,已移除 prepend 插队)\n * @param parts - 事件路径数组\n * @param listener - 事件监听器函数\n * @param options - 监听器配置(count / tag / flags)\n * @returns [节点, 监听器索引]\n */\n private _addListener(\n parts: string[],\n listener: Function,\n options: { count: number; tag?: string; flags?: number },\n ): [FastEventListenerNode | undefined, number] {\n let index: number = 0;\n const node = this._forEachNodes(parts, (node) => {\n const newListener = [\n listener,\n options.count,\n 0,\n options.tag,\n options.flags,\n ] as unknown as FastEventListenerMeta;\n node.__listeners.push(newListener);\n index = node.__listeners.length - 1;\n this.listenerCount++;\n });\n return [node, index];\n }\n\n /**\n * 根据 parts 路径遍历监听器树,并在最后的节点上执行回调\n */\n private _forEachNodes(\n parts: string[],\n callback: (node: FastEventListenerNode, parent: FastEventListenerNode) => void,\n ): FastEventListenerNode | undefined {\n if (parts.length === 0) return;\n let current = this.listeners;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!(part in current)) {\n current[part] = {\n __listeners: [],\n } as unknown as FastListeners;\n }\n if (i === parts.length - 1) {\n const node = current[part];\n callback(node, current);\n return node;\n } else {\n current = current[part];\n }\n }\n return undefined;\n }\n\n /**\n * 从监听器节点中移除指定的事件监听器\n */\n private _removeListener(\n node: FastEventListenerNode,\n path: string[],\n listener: Function,\n ): void {\n if (!listener) return;\n removeItem(node.__listeners, (item: any) => {\n item = Array.isArray(item) ? item[0] : item;\n const isRemove = item === listener;\n if (isRemove) this.listenerCount--;\n return isRemove;\n });\n }\n\n /**\n * 注册事件监听器\n * @param type - 事件类型,支持普通字符串、通配符(user/*)、全局监听(**)\n * @param listener - 事件监听器函数\n * @param options - 监听器配置(count / tag / flags)\n * @returns 订阅者对象,包含 off 方法用于取消监听\n */\n public on<T extends string = KeyOf<Events> | \"**\">(\n type: T,\n listener: FastEventCommonListener<\n T extends IsTransformedEvent<AllEvents, T>\n ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n : T extends \"**\"\n ? MutableMessage<Events>\n : GetClosestMessage<Events, T, any>,\n any,\n any\n >,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n if (type.length === 0) throw new Error(\"event cannot be empty\");\n const finalOptions = Object.assign(\n { count: 0, flags: 0 },\n options,\n ) as Required<FastLiteListenOptions> & { count: number; flags: number };\n\n const parts = type.split(this._delimiter);\n const [node, index] = this._addListener(parts, listener as any, finalOptions);\n const off = () => node && this._removeListener(node, parts, listener as any);\n\n // 触发监听器保留消息(retain)\n this._emitRetainMessage(type, node, index);\n\n return {\n off,\n listener: listener as any,\n [Symbol.dispose]() {\n off();\n },\n };\n }\n\n /**\n * 注册一次性事件监听器(触发一次后自动注销)\n */\n public once<T extends string = KeyOf<Events> | \"**\">(\n type: T,\n listener: FastEventCommonListener<\n T extends IsTransformedEvent<AllEvents, T>\n ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n : T extends \"**\"\n ? MutableMessage<Events>\n : GetClosestMessage<Events, T, any>,\n any,\n any\n >,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n return this.on(type, listener, Object.assign({}, options, { count: 1 }));\n }\n\n /**\n * 注册一个监听所有事件的监听器(等同 on('**', listener))\n */\n public onAny(\n listener: FastEventCommonListener<MutableMessage<AllEvents, any>, any, any>,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n return this.on(\"**\", listener as any, options as any) as FastEventSubscriber;\n }\n\n /**\n * 移除事件监听器\n */\n off(listener: Function): void;\n off(type: string, listener: Function): void;\n off(type: Types): void;\n off(type: string): void;\n off() {\n const args = arguments;\n const type = isFunction(args[0]) ? undefined : args[0];\n const listener = isFunction(args[0]) ? args[0] : args[1];\n const parts = type ? type.split(this._delimiter) : [];\n const hasWildcard = type ? type.includes(\"*\") : false;\n if (type && !hasWildcard) {\n this._traverseToPath(this.listeners, parts, (node) => {\n if (listener) {\n this._removeListener(node, parts, listener);\n } else if (type) {\n node.__listeners = [];\n }\n });\n } else {\n const entryParts: string[] = hasWildcard ? [] : parts;\n this._traverseListeners(this.listeners, entryParts, (path, node) => {\n if (listener !== undefined || (hasWildcard && isPathMatched(path, parts))) {\n if (listener) {\n this._removeListener(node, parts, listener);\n } else {\n node.__listeners = [];\n }\n }\n });\n }\n }\n\n /**\n * 移除所有事件监听器\n * @param entry - 可选的事件前缀,提供则只移除该前缀下的监听器\n */\n offAll(entry?: string) {\n if (entry) {\n const parts = entry.split(this._delimiter);\n let count = 0;\n this._traverseListeners(this.listeners, parts, (_path, node) => {\n count += node.__listeners.length;\n node.__listeners = [];\n });\n this.listenerCount -= count;\n this._removeRetainedEvents(entry);\n } else {\n let count = 0;\n this._traverseListeners(this.listeners, [], (_path, node) => {\n count += node.__listeners.length;\n });\n this.listenerCount -= count;\n this.retainedMessages.clear();\n this.listeners = { __listeners: [] } as unknown as FastListeners;\n }\n }\n\n /**\n * 移除保留的事件\n */\n private _removeRetainedEvents(prefix?: string) {\n if (!prefix) this.retainedMessages.clear();\n if (prefix?.endsWith(this._delimiter)) {\n prefix += this._delimiter;\n }\n this.retainedMessages.delete(prefix!);\n for (let key of this.retainedMessages.keys()) {\n if (key.startsWith(prefix!)) {\n this.retainedMessages.delete(key);\n }\n }\n }\n\n /**\n * 清除所有事件或指定前缀的事件(含保留消息)\n */\n clear(prefix?: string) {\n this.offAll(prefix);\n this._removeRetainedEvents(prefix);\n }\n\n /**\n * 发送最后一次事件的消息给对应的监听器(用于 retain)\n */\n private _emitRetainMessage(\n type: string,\n listenerNode: FastEventListenerNode | undefined,\n index: number,\n ) {\n let messages = [] as TypedFastEventMessage[];\n if (type.includes(\"*\")) {\n const patterns = type.split(this._delimiter);\n this.retainedMessages.forEach((message, t) => {\n const parts = t.split(this._delimiter);\n if (isPathMatched(parts, patterns)) {\n messages.push(message);\n }\n });\n } else if (this.retainedMessages.has(type)) {\n messages.push(this.retainedMessages.get(type));\n }\n if (listenerNode) {\n messages.forEach((message) => {\n this._executeListeners([listenerNode], message, {}, (listenerMeta) => {\n return listenerMeta[0] === listenerNode.__listeners[index][0];\n });\n });\n }\n }\n\n /**\n * 遍历监听器节点树,支持三种匹配模式:精确 / 单层通配 * / 多层通配 **\n */\n private _traverseToPath(\n node: FastEventListenerNode,\n parts: string[],\n callback: (node: FastEventListenerNode) => void,\n index: number = 0,\n lastFollowing?: boolean,\n ): void {\n if (index >= parts.length) {\n callback(node);\n return;\n }\n const part = parts[index];\n if (lastFollowing === true) {\n this._traverseToPath(node, parts, callback, index + 1, true);\n return;\n }\n if (\"*\" in node) {\n this._traverseToPath(node[\"*\"], parts, callback, index + 1);\n }\n if (\"**\" in node) {\n this._traverseToPath(node[\"**\"], parts, callback, index + 1, true);\n }\n if (part in node) {\n this._traverseToPath(node[part], parts, callback, index + 1);\n }\n }\n\n private _traverseListeners(\n node: FastEventListenerNode,\n entry: string[],\n callback: (path: string[], node: FastEventListenerNode) => void,\n ): void {\n let entryNode: FastEventListenerNode = node;\n if (entry && entry.length > 0) {\n this._traverseToPath(node, entry, (n) => {\n entryNode = n;\n });\n }\n const traverseNodes = (\n node: FastEventListenerNode,\n callback: (path: string[], node: FastEventListenerNode) => void,\n parentPath: string[],\n ) => {\n callback(parentPath, node);\n for (let [key, childNode] of Object.entries(node)) {\n if (key.startsWith(\"__\")) continue;\n if (childNode) {\n traverseNodes(childNode as FastEventListenerNode, callback, [\n ...parentPath,\n key,\n ]);\n }\n }\n };\n traverseNodes(entryNode, callback, []);\n }\n\n /**\n * 监听器执行出错处理(移除了 ListenerError hook)\n */\n private _onListenerError(\n listener: Function,\n message: TypedFastEventMessage,\n _args: FastLiteListenerArgs | undefined,\n e: any,\n ) {\n if (e instanceof Error) {\n // @ts-ignore\n e._emitter = `${listener.name || \"anonymous\"}:${message.type}`;\n }\n if (this._options.ignoreErrors) {\n return e;\n } else {\n throw e;\n }\n }\n\n /**\n * 执行单个监听器函数(移除了 debug / abortSignal 分支,this 指向实例)\n */\n private _executeListener(\n listener: FastEventListenerMeta,\n message: TypedFastEventMessage,\n args: FastLiteListenerArgs | undefined,\n catchErrors: boolean = false,\n ): Promise<any> | any {\n const listenerFn = listener[0];\n try {\n const isTransformed =\n ((args?.flags || 0) & FastEventListenerFlags.Transformed) > 0;\n let result = listenerFn.call(\n this,\n isTransformed ? message.payload : message,\n args!,\n );\n // 自动处理 reject Promise\n if (catchErrors && result && result instanceof Promise) {\n result = tryReturnError(result, (e) =>\n this._onListenerError(listenerFn, message, args, e),\n );\n }\n return result;\n } catch (e: any) {\n return this._onListenerError(listenerFn, message, args, e);\n }\n }\n\n /**\n * 执行监听器节点列表中的所有监听器(移除了 executor,退化为同步顺序执行)\n */\n private _executeListeners(\n nodes: FastEventListenerNode[],\n message: TypedFastEventMessage,\n args: FastLiteListenerArgs,\n filter?: (listener: FastEventListenerMeta, node: FastEventListenerNode) => boolean,\n ): any[] {\n if (!nodes || nodes.length === 0) return [];\n const listeners: [FastEventListenerMeta, number, FastEventListenerMeta[]][] = [];\n for (const node of nodes) {\n let i: number = 0;\n for (const listener of node.__listeners) {\n if (!filter || filter(listener, node)) {\n // localIdx 必须等于 listener 在 __listeners 中的真实数组下标,\n // 因此 i 对每个 listener 都递增(含被 filter 跳过的),不能只在命中时递增\n listeners.push([listener, i, node.__listeners]);\n }\n i++;\n }\n }\n // 执行监听器前计数先减一,避免在监听器中再次触发导致重复执行\n this._decListenerExecCount(listeners);\n return listeners.map((listener) => {\n return this._executeListener(listener[0], message, args, true);\n });\n }\n\n /**\n * 减少侦听器的执行次数(达到 count 限制时移除)\n */\n _decListenerExecCount(\n listeners: [FastEventListenerMeta, number, FastEventListenerMeta[]][],\n ) {\n for (let i = listeners.length - 1; i >= 0; i--) {\n const meta = listeners[i][0] as FastEventListenerMeta;\n meta[2]++; // 实际执行的次数\n // count > 0 时代表执行次数限制\n if (meta[1] > 0 && meta[1] <= meta[2]) {\n // 用元组中记录的 localIdx(listener 在所属 __listeners 内的本地下标),\n // 而非外层收集列表的循环下标 i(跨节点展平后的全局位置)\n listeners[i][2].splice(listeners[i][1], 1);\n this.listenerCount--; // 同步递减计数,与 off/offAll 路径保持一致\n }\n }\n }\n\n /**\n * 获取指定类型的所有事件监听器\n */\n getListeners(type: string): FastEventListenerMeta[] {\n const nodes: FastEventListenerNode[] = [];\n const parts = type.split(this._delimiter);\n this._traverseToPath(this.listeners, parts, (node) => {\n nodes.push(node);\n });\n const listeners: any[] = [];\n nodes.map((node) => {\n listeners.push(...node.__listeners);\n });\n return listeners;\n }\n\n /**\n * 清除所有事件或指定事件的保留消息\n */\n clearRetainMessages(type?: EventNames | string) {\n if (type) {\n this.retainedMessages.delete(type as string);\n } else {\n this.retainedMessages.clear();\n }\n }\n\n /**\n * 同步触发事件\n *\n * 支持两种调用方式:\n * emit(type, payload, retain?)\n * emit({ type, payload }, retain?)\n */\n public emit<R = any, T extends Types = Types>(\n type: T,\n payload?: UnTransformedEvents<AllEvents>[T],\n retain?: boolean,\n ): R[];\n public emit<R = any, T extends string = string>(\n type: ReplaceWildcard<T> | Types,\n payload?: InMatchedEvent<Events, T> extends true\n ? GetPayload<UnTransformedEvents<AllEvents>, T>\n : any,\n retain?: boolean,\n ): R[];\n public emit<R = any, T extends KeyOf<AllEvents> = KeyOf<AllEvents>>(\n message: FastEventEmitMessage<T, UnTransformedEvents<AllEvents>[T], any>,\n retain?: boolean,\n ): R[];\n public emit<R = any>(message: MutableMessage<AllEvents, any>, retain?: boolean): R[];\n public emit<R = any>(message: { type: keyof AllEvents }, retain?: boolean): R[];\n public emit<R = any>(message: FastEventMessage, retain?: boolean): R[];\n public emit(): any {\n const [message, args] = parseLiteEmitArgs(arguments);\n\n const parts = message.type.split(this._delimiter);\n if (args.retain) {\n this.retainedMessages.set(message.type, message);\n }\n\n const nodes: FastEventListenerNode[] = [];\n this._traverseToPath(this.listeners, parts, (node) => {\n nodes.push(node);\n });\n\n // 触发时进行消息转换\n if (isFunction(this._options.transform)) {\n const transformed = this._options.transform.call(this, message as any);\n if (transformed !== message) {\n message.payload = transformed;\n args.rawEventType = message.type;\n args.flags = (args.flags || 0) | FastEventListenerFlags.Transformed;\n }\n }\n\n // 执行监听器\n const results: any[] = [];\n results.push(...this._executeListeners(nodes, message, args));\n\n // 展开 expandable 结果\n if (this._options.expandEmitResults) {\n expandEmitResults(results);\n }\n return results;\n }\n\n /**\n * 异步触发事件(使用 Promise.allSettled,等待所有异步监听器完成)\n */\n public async emitAsync<R = any, T extends Types = Types>(\n type: T,\n payload?: UnTransformedEvents<AllEvents>[T],\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any, T extends string = string>(\n type: ReplaceWildcard<T> | Types,\n payload?: InMatchedEvent<Events, T> extends true\n ? GetPayload<UnTransformedEvents<AllEvents>, T>\n : any,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any, T extends KeyOf<AllEvents> = KeyOf<AllEvents>>(\n message: FastEventEmitMessage<T, UnTransformedEvents<AllEvents>[T], any>,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(\n message: MutableMessage<AllEvents, any>,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(\n message: { type: keyof AllEvents },\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(): Promise<(R | Error)[]> {\n const results = await Promise.allSettled(\n this.emit.apply(this, arguments as any),\n );\n return getPromiseResults(results);\n }\n\n}\n"]} |
@@ -1,2 +0,2 @@ | ||
| var L=Object.defineProperty;var _=(a,e,t)=>e in a?L(a,e,{enumerable:true,configurable:true,writable:true,value:t}):a[e]=t;var d=(a,e,t)=>_(a,typeof e!="symbol"?e+"":e,t);function v(a,e){let t=a.length,s=e.length;if(t!==s&&(s===0||e[s-1]!=="**"))return false;if(s>0&&e[s-1]==="**"){for(let n=0;n<s-1;n++)if(e[n]!=="*"&&e[n]!==a[n])return false;return true}for(let n=0;n<t;n++)if(e[n]!=="*"&&e[n]!==a[n])return false;return true}function c(a,e){let t=[];for(let s=a.length-1;s>=0;s--)e(a[s])&&(t.push(s),a.splice(s,1));return t.reverse()}function u(a){return a&&typeof a=="function"}var F=Symbol.for("__expandable__");function f(a){return a&&a[F]}function y(a){for(let e=0;e<a.length;e++){let t=a[e];Array.isArray(t)&&f(t)&&(a.splice(e,1,...t),e+=t.length-1);}return a}function m(a,e){return a.catch(t=>(e&&e(t),Promise.resolve(t)))}function g(a){return a.map(e=>e.status==="fulfilled"?e.value:e.reason)}function b(a){let e={},t={};return typeof a[0]=="object"?(Object.assign(e,a[0]),t=typeof a[1]=="boolean"?{retain:a[1]}:{}):(e.type=a[0],e.payload=a[1],t=typeof a[2]=="boolean"?{retain:a[2]}:{}),[e,t]}var h=class{constructor(e){d(this,"__FastLiteEvent__",true);d(this,"listeners",{__listeners:[]});d(this,"_options");d(this,"_delimiter","/");d(this,"retainedMessages",new Map);d(this,"listenerCount",0);this._options=Object.assign({id:Math.random().toString(36).substring(2),delimiter:"/",ignoreErrors:true,expandEmitResults:true},this._initOptions(e)),this._delimiter=this._options.delimiter;}get options(){return this._options}get id(){return this._options.id}get title(){return this._options.title||this.id||"FastLiteEvent"}_initOptions(e){return e}_addListener(e,t,s){let n=0;return [this._forEachNodes(e,r=>{let o=[t,s.count,0,s.tag,s.flags];r.__listeners.push(o),n=r.__listeners.length-1,this.listenerCount++;}),n]}_forEachNodes(e,t){if(e.length===0)return;let s=this.listeners;for(let n=0;n<e.length;n++){let i=e[n];if(i in s||(s[i]={__listeners:[]}),n===e.length-1){let r=s[i];return t(r,s),r}else s=s[i];}}_removeListener(e,t,s){s&&c(e.__listeners,n=>{n=Array.isArray(n)?n[0]:n;let i=n===s;return i&&this.listenerCount--,i});}on(e,t,s){if(e.length===0)throw new Error("event cannot be empty");let n=Object.assign({count:0,flags:0},s),i=e.split(this._delimiter),[r,o]=this._addListener(i,t,n),l=()=>r&&this._removeListener(r,i,t);return this._emitRetainMessage(e,r,o),{off:l,listener:t,[Symbol.dispose](){l();}}}once(e,t,s){return this.on(e,t,Object.assign({},s,{count:1}))}onAny(e,t){return this.on("**",e,t)}off(){let e=arguments,t=u(e[0])?void 0:e[0],s=u(e[0])?e[0]:e[1],n=t?t.split(this._delimiter):[],i=t?t.includes("*"):false;if(t&&!i)this._traverseToPath(this.listeners,n,r=>{s?this._removeListener(r,n,s):t&&(r.__listeners=[]);});else {let r=i?[]:n;this._traverseListeners(this.listeners,r,(o,l)=>{(s!==void 0||i&&v(o,n))&&(s?this._removeListener(l,n,s):l.__listeners=[]);});}}offAll(e){if(e){let t=e.split(this._delimiter),s=0;this._traverseListeners(this.listeners,t,(n,i)=>{s+=i.__listeners.length,i.__listeners=[];}),this.listenerCount-=s,this._removeRetainedEvents(e);}else {let t=0;this._traverseListeners(this.listeners,[],(s,n)=>{t+=n.__listeners.length;}),this.listenerCount-=t,this.retainedMessages.clear(),this.listeners={__listeners:[]};}}_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 n=[];if(e.includes("*")){let i=e.split(this._delimiter);this.retainedMessages.forEach((r,o)=>{let l=o.split(this._delimiter);v(l,i)&&n.push(r);});}else this.retainedMessages.has(e)&&n.push(this.retainedMessages.get(e));t&&n.forEach(i=>{this._executeListeners([t],i,{},r=>r[0]===t.__listeners[s][0]);});}_traverseToPath(e,t,s,n=0,i){if(n>=t.length){s(e);return}let r=t[n];if(i===true){this._traverseToPath(e,t,s,n+1,true);return}"*"in e&&this._traverseToPath(e["*"],t,s,n+1),"**"in e&&this._traverseToPath(e["**"],t,s,n+1,true),r in e&&this._traverseToPath(e[r],t,s,n+1);}_traverseListeners(e,t,s){let n=e;t&&t.length>0&&this._traverseToPath(e,t,r=>{n=r;});let i=(r,o,l)=>{o(l,r);for(let[p,E]of Object.entries(r))p.startsWith("__")||E&&i(E,o,[...l,p]);};i(n,s,[]);}_onListenerError(e,t,s,n){if(n instanceof Error&&(n._emitter=`${e.name||"anonymous"}:${t.type}`),this._options.ignoreErrors)return n;throw n}_executeListener(e,t,s,n=false){let i=e[0];try{let r=((s?.flags||0)&1)>0,o=i.call(this,r?t.payload:t,s);return n&&o&&o instanceof Promise&&(o=m(o,l=>this._onListenerError(i,t,s,l))),o}catch(r){return this._onListenerError(i,t,s,r)}}_executeListeners(e,t,s,n){if(!e||e.length===0)return [];let i=[];for(let r of e){let o=0;for(let l of r.__listeners)(!n||n(l,r))&&i.push([l,o++,r.__listeners]);}return this._decListenerExecCount(i),i.map(r=>this._executeListener(r[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,i=>{t.push(i);});let n=[];return t.map(i=>{n.push(...i.__listeners);}),n}clearRetainMessages(e){e?this.retainedMessages.delete(e):this.retainedMessages.clear();}emit(){let[e,t]=b(arguments),s=e.type.split(this._delimiter);t.retain&&this.retainedMessages.set(e.type,e);let n=[];if(this._traverseToPath(this.listeners,s,r=>{n.push(r);}),u(this._options.transform)){let r=this._options.transform.call(this,e);r!==e&&(e.payload=r,t.rawEventType=e.type,t.flags=(t.flags||0)|1);}let i=[];return i.push(...this._executeListeners(n,e,t)),this._options.expandEmitResults&&y(i),i}async emitAsync(){let e=await Promise.allSettled(this.emit.apply(this,arguments));return g(e)}};export{h as FastLiteEvent};//# sourceMappingURL=liteEvent.mjs.map | ||
| var L=Object.defineProperty;var _=(a,e,t)=>e in a?L(a,e,{enumerable:true,configurable:true,writable:true,value:t}):a[e]=t;var d=(a,e,t)=>_(a,typeof e!="symbol"?e+"":e,t);function v(a,e){let t=a.length,s=e.length;if(t!==s&&(s===0||e[s-1]!=="**"))return false;if(s>0&&e[s-1]==="**"){for(let n=0;n<s-1;n++)if(e[n]!=="*"&&e[n]!==a[n])return false;return true}for(let n=0;n<t;n++)if(e[n]!=="*"&&e[n]!==a[n])return false;return true}function c(a,e){let t=[];for(let s=a.length-1;s>=0;s--)e(a[s])&&(t.push(s),a.splice(s,1));return t.reverse()}function u(a){return a&&typeof a=="function"}var F=Symbol.for("__expandable__");function f(a){return a&&a[F]}function y(a){for(let e=0;e<a.length;e++){let t=a[e];Array.isArray(t)&&f(t)&&(a.splice(e,1,...t),e+=t.length-1);}return a}function m(a,e){return a.catch(t=>(e&&e(t),Promise.resolve(t)))}function g(a){return a.map(e=>e.status==="fulfilled"?e.value:e.reason)}function b(a){let e={},t={};return typeof a[0]=="object"?(Object.assign(e,a[0]),t=typeof a[1]=="boolean"?{retain:a[1]}:{}):(e.type=a[0],e.payload=a[1],t=typeof a[2]=="boolean"?{retain:a[2]}:{}),[e,t]}var h=class{constructor(e){d(this,"__FastLiteEvent__",true);d(this,"listeners",{__listeners:[]});d(this,"_options");d(this,"_delimiter","/");d(this,"retainedMessages",new Map);d(this,"listenerCount",0);this._options=Object.assign({id:Math.random().toString(36).substring(2),delimiter:"/",ignoreErrors:true,expandEmitResults:true},this._initOptions(e)),this._delimiter=this._options.delimiter;}get options(){return this._options}get id(){return this._options.id}get title(){return this._options.title||this.id||"FastLiteEvent"}_initOptions(e){return e}_addListener(e,t,s){let n=0;return [this._forEachNodes(e,r=>{let o=[t,s.count,0,s.tag,s.flags];r.__listeners.push(o),n=r.__listeners.length-1,this.listenerCount++;}),n]}_forEachNodes(e,t){if(e.length===0)return;let s=this.listeners;for(let n=0;n<e.length;n++){let i=e[n];if(i in s||(s[i]={__listeners:[]}),n===e.length-1){let r=s[i];return t(r,s),r}else s=s[i];}}_removeListener(e,t,s){s&&c(e.__listeners,n=>{n=Array.isArray(n)?n[0]:n;let i=n===s;return i&&this.listenerCount--,i});}on(e,t,s){if(e.length===0)throw new Error("event cannot be empty");let n=Object.assign({count:0,flags:0},s),i=e.split(this._delimiter),[r,o]=this._addListener(i,t,n),l=()=>r&&this._removeListener(r,i,t);return this._emitRetainMessage(e,r,o),{off:l,listener:t,[Symbol.dispose](){l();}}}once(e,t,s){return this.on(e,t,Object.assign({},s,{count:1}))}onAny(e,t){return this.on("**",e,t)}off(){let e=arguments,t=u(e[0])?void 0:e[0],s=u(e[0])?e[0]:e[1],n=t?t.split(this._delimiter):[],i=t?t.includes("*"):false;if(t&&!i)this._traverseToPath(this.listeners,n,r=>{s?this._removeListener(r,n,s):t&&(r.__listeners=[]);});else {let r=i?[]:n;this._traverseListeners(this.listeners,r,(o,l)=>{(s!==void 0||i&&v(o,n))&&(s?this._removeListener(l,n,s):l.__listeners=[]);});}}offAll(e){if(e){let t=e.split(this._delimiter),s=0;this._traverseListeners(this.listeners,t,(n,i)=>{s+=i.__listeners.length,i.__listeners=[];}),this.listenerCount-=s,this._removeRetainedEvents(e);}else {let t=0;this._traverseListeners(this.listeners,[],(s,n)=>{t+=n.__listeners.length;}),this.listenerCount-=t,this.retainedMessages.clear(),this.listeners={__listeners:[]};}}_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 n=[];if(e.includes("*")){let i=e.split(this._delimiter);this.retainedMessages.forEach((r,o)=>{let l=o.split(this._delimiter);v(l,i)&&n.push(r);});}else this.retainedMessages.has(e)&&n.push(this.retainedMessages.get(e));t&&n.forEach(i=>{this._executeListeners([t],i,{},r=>r[0]===t.__listeners[s][0]);});}_traverseToPath(e,t,s,n=0,i){if(n>=t.length){s(e);return}let r=t[n];if(i===true){this._traverseToPath(e,t,s,n+1,true);return}"*"in e&&this._traverseToPath(e["*"],t,s,n+1),"**"in e&&this._traverseToPath(e["**"],t,s,n+1,true),r in e&&this._traverseToPath(e[r],t,s,n+1);}_traverseListeners(e,t,s){let n=e;t&&t.length>0&&this._traverseToPath(e,t,r=>{n=r;});let i=(r,o,l)=>{o(l,r);for(let[p,E]of Object.entries(r))p.startsWith("__")||E&&i(E,o,[...l,p]);};i(n,s,[]);}_onListenerError(e,t,s,n){if(n instanceof Error&&(n._emitter=`${e.name||"anonymous"}:${t.type}`),this._options.ignoreErrors)return n;throw n}_executeListener(e,t,s,n=false){let i=e[0];try{let r=((s?.flags||0)&1)>0,o=i.call(this,r?t.payload:t,s);return n&&o&&o instanceof Promise&&(o=m(o,l=>this._onListenerError(i,t,s,l))),o}catch(r){return this._onListenerError(i,t,s,r)}}_executeListeners(e,t,s,n){if(!e||e.length===0)return [];let i=[];for(let r of e){let o=0;for(let l of r.__listeners)(!n||n(l,r))&&i.push([l,o,r.__listeners]),o++;}return this._decListenerExecCount(i),i.map(r=>this._executeListener(r[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(e[t][1],1),this.listenerCount--);}}getListeners(e){let t=[],s=e.split(this._delimiter);this._traverseToPath(this.listeners,s,i=>{t.push(i);});let n=[];return t.map(i=>{n.push(...i.__listeners);}),n}clearRetainMessages(e){e?this.retainedMessages.delete(e):this.retainedMessages.clear();}emit(){let[e,t]=b(arguments),s=e.type.split(this._delimiter);t.retain&&this.retainedMessages.set(e.type,e);let n=[];if(this._traverseToPath(this.listeners,s,r=>{n.push(r);}),u(this._options.transform)){let r=this._options.transform.call(this,e);r!==e&&(e.payload=r,t.rawEventType=e.type,t.flags=(t.flags||0)|1);}let i=[];return i.push(...this._executeListeners(n,e,t)),this._options.expandEmitResults&&y(i),i}async emitAsync(){let e=await Promise.allSettled(this.emit.apply(this,arguments));return g(e)}};export{h as FastLiteEvent};//# sourceMappingURL=liteEvent.mjs.map | ||
| //# sourceMappingURL=liteEvent.mjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/utils/isPathMatched.ts","../src/utils/removeItem.ts","../src/utils/isFunction.ts","../src/utils/expandable.ts","../src/utils/expandEmitResults.ts","../src/utils/tryReturnError.ts","../src/utils/getPromiseResults.ts","../src/liteEvent.ts"],"names":["isPathMatched","path","pattern","pathLen","patternLen","i","removeItem","arr","condition","removedIndices","isFunction","fn","__expandable__","isExpandable","value","expandEmitResults","items","item","tryReturnError","callback","e","getPromiseResults","results","result","parseLiteEmitArgs","args","message","emitArgs","FastLiteEvent","options","__publicField","initial","parts","listener","index","node","newListener","current","part","isRemove","type","finalOptions","off","hasWildcard","entryParts","entry","count","_path","prefix","key","listenerNode","messages","patterns","t","listenerMeta","lastFollowing","entryNode","n","traverseNodes","parentPath","childNode","_args","catchErrors","listenerFn","isTransformed","nodes","filter","listeners","meta","transformed"],"mappings":"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","file":"liteEvent.mjs","sourcesContent":["/**\n *\n * 判断path是否与pattern匹配\n *\n * isPathMatched(\"a.b.c\",\"a.b.c\") == true\n * isPathMatched(\"a.b.c\",\"a.b.*\") == true\n * isPathMatched(\"a.b.c\",\"a.*.*\") == true\n * isPathMatched(\"a.b.c\",\"*.*.*\") == true\n * isPathMatched(\"a.b.c\",\".b.*\") == true\n * isPathMatched(\"a.b.c.d\",\"a.**\") == true\n *\n * - '**' 匹配后续的\n * - '*' 匹配任意数量的字符,包括零个字符\n *\n * @param path\n * @param pattern\n */\nexport function isPathMatched(path: string[], pattern: string[]): boolean {\n const pathLen = path.length;\n const patternLen = pattern.length;\n\n // 快速失败: 长度不匹配(除非以 ** 结尾)\n if (pathLen !== patternLen && (patternLen === 0 || pattern[patternLen - 1] !== '**')) {\n return false;\n }\n\n // 处理 ** 通配符: 直接检查前缀匹配\n if (patternLen > 0 && pattern[patternLen - 1] === '**') {\n // 检查前 n-1 个元素是否匹配\n for (let i = 0; i < patternLen - 1; i++) {\n if (pattern[i] !== '*' && pattern[i] !== path[i]) {\n return false;\n }\n }\n return true;\n }\n\n // 普通匹配: 逐元素比较\n for (let i = 0; i < pathLen; i++) {\n if (pattern[i] !== '*' && pattern[i] !== path[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n// export function isPathMatched(path:string[],pattern:string[]):boolean{\n// if(path.length !== pattern.length && (path.length>0 && pattern[pattern.length-1]!=='**') ){\n// return false;\n// }\n// let fPattern = [...pattern]\n// if(pattern.length >0 && pattern[pattern.length-1] === '**'){\n// fPattern.splice(pattern.length-1,1,...Array.from<string>({\n// length: path.length-pattern.length+1\n// }).fill('*'))\n// }\n// for(let i=0;i<path.length;i++){\n// if(fPattern[i]==='*'){\n// continue\n// }\n// if(fPattern[i]!==path[i]){\n// return false\n// }\n// }\n// return true\n// }\n","/**\n * 从数组中移除满足条件的元素并返回被移除元素的索引\n * @param {any[]} arr - 需要操作的数组\n * @param {(item: any) => boolean} condition - 判断元素是否应该被移除的条件函数\n * @returns {number[]} 被移除元素在原数组中的索引集合\n */\nexport function removeItem(arr: any[], condition: (item: any) => boolean) {\n const removedIndices: number[] = [];\n // 从后往前遍历,避免删除元素时索引变化的问题\n for (let i = arr.length - 1; i >= 0; i--) {\n if (condition(arr[i])) {\n removedIndices.push(i); // 记录原始索引\n arr.splice(i, 1); // 删除元素\n }\n }\n\n // 因为是从后往前遍历的,所以索引是降序的,需要反转得到升序结果\n return removedIndices.reverse();\n}\n","export function isFunction(fn: any): fn is Function {\n return fn && typeof (fn) == \"function\"\n}","/**\n * \n * \n * 用于包括输入值为可展开的对象\n * \n * \n * 用在emit事件\n * \n * emitter1 = new FastEvent()\n * emitter2 = new FastEvent()\n * \n * emitter1.on(\"xxx\",(message)=>{\n * return emitter2.emit(message)\n * })\n * \n * emitter2.on(\"xxx\",()=>1)\n * emitter2.on(\"xxx\",()=>2)\n * \n * const results = emitter1.emit(\"xxx\")\n * // results == [[1,2]] 而不 [1,2],因为emitter2.emit返回的是一个[]\n * \n * expandable的作用就是对emit结果进行包括,当isExpandable时,在emit内部进行展开\n * \n * \n * \n * \n * emitter1.on(\"xxx\",(message)=>{\n * // 告诉emitter2.emit返回的是一个expandable对象\n * // 然后在内部就展开此对象\n * return emitter2.emit(message)\n * })\n * \n* const results = emitter1.emit(\"xxx\")\n * // results == [1,2]\n * \n * 为了实现对结果数据的展开处理,在emit内部需要对监听器的执行结果进行依次检查\n * 这多了一个迭代操作,为了不影响性能,可以关闭此特性\n * options.expandEmitResults = false\n * \n * \n */\n\nexport const __expandable__ = Symbol.for('__expandable__')\n\nexport function expandable(value: any) {\n value[__expandable__] = true\n return value\n}\n\nexport function isExpandable(value: any) {\n return value && value[__expandable__]\n}","import { isExpandable } from \"./expandable\";\n/**\n * \n * 判断成员isExpandable,如果是则说明是一个数组,则原地展开\n * \n * \n */\nexport function expandEmitResults(items: any[]): any[] {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (Array.isArray(item) && isExpandable(item)) {\n items.splice(i, 1, ...item)\n i += item.length - 1\n }\n }\n return items\n\n}\n\n\n// import { expandable } from \"./expandable\";\n// const items = [1, 2, expandable([3, 4]), 0, 0, expandable([5, 6]), expandable([7, 8]), 9, 10, 11]\n// // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]\n// expandEmitResults(items)\n// console.log(items)","\n\n/**\n * 包装 Promise,将 catch 的错误转换为正常返回值\n * @param fn 需要包装的 Promise\n * @returns 包装后的 Promise,如果发生错误则返回错误对象\n */\nexport function tryReturnError(fn: Promise<any>, callback?: (e: any) => any): Promise<any> {\n return fn.catch((e) => {\n if (callback) callback(e)\n return Promise.resolve(e)\n })\n}\n","export function getPromiseResults(results: any[]) {\n return results.map((result) => {\n if (result.status === \"fulfilled\") {\n return result.value;\n } else {\n return result.reason;\n }\n });\n}\n","/**\n * FastLiteEvent 轻量级事件发射器\n *\n * 从 FastEvent 派生的精简版本,移除了以下高级特性:\n * scope / hook / meta / pipe / executor / 异步迭代 / context\n * debug / abortSignal / 订阅时的 filter+off / 监听优先级 prepend\n *\n * 仅保留核心的事件收发能力:on / once / onAny / off / offAll / clear /\n * emit / emitAsync / waitFor / getListeners / clearRetainMessages,以及通配符\n * (* / **)、retain 保留事件、count / tag / flags、ignoreErrors、transform\n * 消息转换、expandEmitResults 等基础特性。\n *\n * 类型与 FastEvent 同源派生(Omit / 复用),监听器、消息、订阅者与 FastEvent\n * 双向兼容——同一监听器函数可同时挂到 FastEvent 与 FastLiteEvent 上。\n */\nimport {\n GetClosestEvents,\n KeyOf,\n MutableMessage,\n Expand,\n Fallback,\n ReplaceWildcard,\n UnTransformedEvents,\n FastEventMessage,\n TypedFastEventMessage,\n FastEventEmitMessage,\n FastListeners,\n FastEventListenerNode,\n FastEventListenerMeta,\n FastEventCommonListener,\n FastEventSubscriber,\n FastEventOptions,\n FastEventListenOptions,\n FastEventListenerArgs,\n FastEvents,\n FastEventListenerFlags,\n IsTransformedEvent,\n ExtendWildcardEvents,\n PayloadValues,\n PickPayload,\n ValueOf,\n GetPayload,\n} from \"./types\";\nimport { InMatchedEvent } from \"./types/wildcards/InMatchedEvent\";\nimport { GetClosestMessage } from \"./types/closest/GetClosestMessage\";\nimport { isPathMatched } from \"./utils/isPathMatched\";\nimport { removeItem } from \"./utils/removeItem\";\nimport { isFunction } from \"./utils/isFunction\";\nimport { expandEmitResults } from \"./utils/expandEmitResults\";\nimport { tryReturnError } from \"./utils/tryReturnError\";\nimport { getPromiseResults } from \"./utils/getPromiseResults\";\n\n// —— 从原始类型 Omit 派生:剥离被移除特性对应的字段 ——\nexport type FastLiteMessage<T extends string = string, P = any> = Omit<\n FastEventMessage<T, P>,\n \"meta\"\n>;\n\nexport type FastLiteListenerArgs = Omit<\n FastEventListenerArgs,\n \"meta\" | \"executor\" | \"parseArgs\" | \"abortSignal\"\n>;\n\nexport type FastLiteListenOptions<\n Events extends Record<string, any> = Record<string, any>,\n> = Omit<FastEventListenOptions<Events>, \"pipes\" | \"iterable\" | \"filter\" | \"off\" | \"prepend\">;\n\nexport type FastLiteEventOptions = Omit<\n FastEventOptions,\n | \"context\"\n | \"meta\"\n | \"executor\"\n | \"debug\"\n | \"onAddBeforeListener\"\n | \"onAddAfterListener\"\n | \"onRemoveListener\"\n | \"onClearListeners\"\n | \"onListenerError\"\n | \"onBeforeExecuteListener\"\n | \"onAfterExecuteListener\"\n>;\n\n// —— 完全复用原始类型(与 FastEvent 互换兼容)——\nexport type FastLiteSubscriber = FastEventSubscriber;\nexport type FastLiteListener<\n T extends string = string,\n P = any,\n> = FastEventCommonListener<FastLiteMessage<T, P>, any, any>;\n\n/**\n * 解析 emit 参数(简化版,不复用 parseEmitArgs)\n *\n * 仅支持两种形态:\n * (type, payload, retain?)\n * (message, retain?)\n *\n * @param args - emit 的 arguments\n * @returns [消息, 监听器参数]\n */\nfunction parseLiteEmitArgs(\n args: IArguments,\n): [TypedFastEventMessage, FastLiteListenerArgs] {\n let message = {} as TypedFastEventMessage;\n let emitArgs: FastLiteListenerArgs = {};\n if (typeof args[0] === \"object\") {\n Object.assign(message, args[0]);\n emitArgs = typeof args[1] === \"boolean\" ? { retain: args[1] } : {};\n } else {\n message.type = args[0] as any;\n message.payload = args[1] as any;\n emitArgs = typeof args[2] === \"boolean\" ? { retain: args[2] } : {};\n }\n return [message, emitArgs];\n}\n\n/**\n * FastLiteEvent 轻量级事件发射器类\n *\n * @template Events - 事件类型定义,继承自 FastEvents 接口\n */\nexport class FastLiteEvent<\n Events extends Record<string, any> = Record<string, any>,\n AllEvents extends Record<string, any> = Expand<Events & FastEvents>,\n Types extends keyof AllEvents = KeyOf<AllEvents>,\n EventNames = KeyOf<ExtendWildcardEvents<AllEvents>>,\n> {\n __FastLiteEvent__: boolean = true;\n\n /** 事件监听器树结构,存储所有注册的事件监听器 */\n public listeners: FastListeners = {\n __listeners: [],\n } as unknown as FastListeners;\n\n /** 事件发射器的配置选项 */\n private _options: FastLiteEventOptions;\n\n /** 事件名称的分隔符,默认为 '/' */\n private _delimiter: string = \"/\";\n\n /** 保留的事件消息映射,Key 是事件名称,Value 是保留的事件消息 */\n retainedMessages: Map<string, any> = new Map<string, any>();\n\n /** 当前注册的监听器总数 */\n listenerCount: number = 0;\n\n /**\n * 创建 FastLiteEvent 实例\n * @param options - 事件发射器的配置选项\n *\n * 默认配置:\n * - id: 随机字符串 - 实例唯一标识符\n * - delimiter: '/' - 事件名称分隔符\n * - ignoreErrors: true - 是否忽略监听器执行错误\n * - expandEmitResults: true - 是否展开 emit 返回值\n */\n constructor(options?: Partial<FastLiteEventOptions>) {\n this._options = Object.assign(\n {\n id: Math.random().toString(36).substring(2),\n delimiter: \"/\",\n ignoreErrors: true,\n expandEmitResults: true,\n },\n this._initOptions(options),\n ) as unknown as FastLiteEventOptions;\n this._delimiter = this._options.delimiter!;\n }\n\n /** 获取事件发射器的配置选项 */\n get options() {\n return this._options;\n }\n /** 获取事件发射器的唯一标识符 */\n get id() {\n return this._options.id!;\n }\n /** 获取事件发射器的标题 */\n get title() {\n return this._options.title || this.id || \"FastLiteEvent\";\n }\n\n /**\n * 初始化选项(供子类重载)\n * @param initial - 可选的初始选项\n */\n _initOptions(initial?: Partial<FastLiteEventOptions>) {\n return initial;\n }\n\n /**\n * 添加事件监听器到事件树(仅尾插,已移除 prepend 插队)\n * @param parts - 事件路径数组\n * @param listener - 事件监听器函数\n * @param options - 监听器配置(count / tag / flags)\n * @returns [节点, 监听器索引]\n */\n private _addListener(\n parts: string[],\n listener: Function,\n options: { count: number; tag?: string; flags?: number },\n ): [FastEventListenerNode | undefined, number] {\n let index: number = 0;\n const node = this._forEachNodes(parts, (node) => {\n const newListener = [\n listener,\n options.count,\n 0,\n options.tag,\n options.flags,\n ] as unknown as FastEventListenerMeta;\n node.__listeners.push(newListener);\n index = node.__listeners.length - 1;\n this.listenerCount++;\n });\n return [node, index];\n }\n\n /**\n * 根据 parts 路径遍历监听器树,并在最后的节点上执行回调\n */\n private _forEachNodes(\n parts: string[],\n callback: (node: FastEventListenerNode, parent: FastEventListenerNode) => void,\n ): FastEventListenerNode | undefined {\n if (parts.length === 0) return;\n let current = this.listeners;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!(part in current)) {\n current[part] = {\n __listeners: [],\n } as unknown as FastListeners;\n }\n if (i === parts.length - 1) {\n const node = current[part];\n callback(node, current);\n return node;\n } else {\n current = current[part];\n }\n }\n return undefined;\n }\n\n /**\n * 从监听器节点中移除指定的事件监听器\n */\n private _removeListener(\n node: FastEventListenerNode,\n path: string[],\n listener: Function,\n ): void {\n if (!listener) return;\n removeItem(node.__listeners, (item: any) => {\n item = Array.isArray(item) ? item[0] : item;\n const isRemove = item === listener;\n if (isRemove) this.listenerCount--;\n return isRemove;\n });\n }\n\n /**\n * 注册事件监听器\n * @param type - 事件类型,支持普通字符串、通配符(user/*)、全局监听(**)\n * @param listener - 事件监听器函数\n * @param options - 监听器配置(count / tag / flags)\n * @returns 订阅者对象,包含 off 方法用于取消监听\n */\n public on<T extends string = KeyOf<Events> | \"**\">(\n type: T,\n listener: FastEventCommonListener<\n T extends IsTransformedEvent<AllEvents, T>\n ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n : T extends \"**\"\n ? MutableMessage<Events>\n : GetClosestMessage<Events, T, any>,\n any,\n any\n >,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n if (type.length === 0) throw new Error(\"event cannot be empty\");\n const finalOptions = Object.assign(\n { count: 0, flags: 0 },\n options,\n ) as Required<FastLiteListenOptions> & { count: number; flags: number };\n\n const parts = type.split(this._delimiter);\n const [node, index] = this._addListener(parts, listener as any, finalOptions);\n const off = () => node && this._removeListener(node, parts, listener as any);\n\n // 触发监听器保留消息(retain)\n this._emitRetainMessage(type, node, index);\n\n return {\n off,\n listener: listener as any,\n [Symbol.dispose]() {\n off();\n },\n };\n }\n\n /**\n * 注册一次性事件监听器(触发一次后自动注销)\n */\n public once<T extends string = KeyOf<Events> | \"**\">(\n type: T,\n listener: FastEventCommonListener<\n T extends IsTransformedEvent<AllEvents, T>\n ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n : T extends \"**\"\n ? MutableMessage<Events>\n : GetClosestMessage<Events, T, any>,\n any,\n any\n >,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n return this.on(type, listener, Object.assign({}, options, { count: 1 }));\n }\n\n /**\n * 注册一个监听所有事件的监听器(等同 on('**', listener))\n */\n public onAny(\n listener: FastEventCommonListener<MutableMessage<AllEvents, any>, any, any>,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n return this.on(\"**\", listener as any, options as any) as FastEventSubscriber;\n }\n\n /**\n * 移除事件监听器\n */\n off(listener: Function): void;\n off(type: string, listener: Function): void;\n off(type: Types): void;\n off(type: string): void;\n off() {\n const args = arguments;\n const type = isFunction(args[0]) ? undefined : args[0];\n const listener = isFunction(args[0]) ? args[0] : args[1];\n const parts = type ? type.split(this._delimiter) : [];\n const hasWildcard = type ? type.includes(\"*\") : false;\n if (type && !hasWildcard) {\n this._traverseToPath(this.listeners, parts, (node) => {\n if (listener) {\n this._removeListener(node, parts, listener);\n } else if (type) {\n node.__listeners = [];\n }\n });\n } else {\n const entryParts: string[] = hasWildcard ? [] : parts;\n this._traverseListeners(this.listeners, entryParts, (path, node) => {\n if (listener !== undefined || (hasWildcard && isPathMatched(path, parts))) {\n if (listener) {\n this._removeListener(node, parts, listener);\n } else {\n node.__listeners = [];\n }\n }\n });\n }\n }\n\n /**\n * 移除所有事件监听器\n * @param entry - 可选的事件前缀,提供则只移除该前缀下的监听器\n */\n offAll(entry?: string) {\n if (entry) {\n const parts = entry.split(this._delimiter);\n let count = 0;\n this._traverseListeners(this.listeners, parts, (_path, node) => {\n count += node.__listeners.length;\n node.__listeners = [];\n });\n this.listenerCount -= count;\n this._removeRetainedEvents(entry);\n } else {\n let count = 0;\n this._traverseListeners(this.listeners, [], (_path, node) => {\n count += node.__listeners.length;\n });\n this.listenerCount -= count;\n this.retainedMessages.clear();\n this.listeners = { __listeners: [] } as unknown as FastListeners;\n }\n }\n\n /**\n * 移除保留的事件\n */\n private _removeRetainedEvents(prefix?: string) {\n if (!prefix) this.retainedMessages.clear();\n if (prefix?.endsWith(this._delimiter)) {\n prefix += this._delimiter;\n }\n this.retainedMessages.delete(prefix!);\n for (let key of this.retainedMessages.keys()) {\n if (key.startsWith(prefix!)) {\n this.retainedMessages.delete(key);\n }\n }\n }\n\n /**\n * 清除所有事件或指定前缀的事件(含保留消息)\n */\n clear(prefix?: string) {\n this.offAll(prefix);\n this._removeRetainedEvents(prefix);\n }\n\n /**\n * 发送最后一次事件的消息给对应的监听器(用于 retain)\n */\n private _emitRetainMessage(\n type: string,\n listenerNode: FastEventListenerNode | undefined,\n index: number,\n ) {\n let messages = [] as TypedFastEventMessage[];\n if (type.includes(\"*\")) {\n const patterns = type.split(this._delimiter);\n this.retainedMessages.forEach((message, t) => {\n const parts = t.split(this._delimiter);\n if (isPathMatched(parts, patterns)) {\n messages.push(message);\n }\n });\n } else if (this.retainedMessages.has(type)) {\n messages.push(this.retainedMessages.get(type));\n }\n if (listenerNode) {\n messages.forEach((message) => {\n this._executeListeners([listenerNode], message, {}, (listenerMeta) => {\n return listenerMeta[0] === listenerNode.__listeners[index][0];\n });\n });\n }\n }\n\n /**\n * 遍历监听器节点树,支持三种匹配模式:精确 / 单层通配 * / 多层通配 **\n */\n private _traverseToPath(\n node: FastEventListenerNode,\n parts: string[],\n callback: (node: FastEventListenerNode) => void,\n index: number = 0,\n lastFollowing?: boolean,\n ): void {\n if (index >= parts.length) {\n callback(node);\n return;\n }\n const part = parts[index];\n if (lastFollowing === true) {\n this._traverseToPath(node, parts, callback, index + 1, true);\n return;\n }\n if (\"*\" in node) {\n this._traverseToPath(node[\"*\"], parts, callback, index + 1);\n }\n if (\"**\" in node) {\n this._traverseToPath(node[\"**\"], parts, callback, index + 1, true);\n }\n if (part in node) {\n this._traverseToPath(node[part], parts, callback, index + 1);\n }\n }\n\n private _traverseListeners(\n node: FastEventListenerNode,\n entry: string[],\n callback: (path: string[], node: FastEventListenerNode) => void,\n ): void {\n let entryNode: FastEventListenerNode = node;\n if (entry && entry.length > 0) {\n this._traverseToPath(node, entry, (n) => {\n entryNode = n;\n });\n }\n const traverseNodes = (\n node: FastEventListenerNode,\n callback: (path: string[], node: FastEventListenerNode) => void,\n parentPath: string[],\n ) => {\n callback(parentPath, node);\n for (let [key, childNode] of Object.entries(node)) {\n if (key.startsWith(\"__\")) continue;\n if (childNode) {\n traverseNodes(childNode as FastEventListenerNode, callback, [\n ...parentPath,\n key,\n ]);\n }\n }\n };\n traverseNodes(entryNode, callback, []);\n }\n\n /**\n * 监听器执行出错处理(移除了 ListenerError hook)\n */\n private _onListenerError(\n listener: Function,\n message: TypedFastEventMessage,\n _args: FastLiteListenerArgs | undefined,\n e: any,\n ) {\n if (e instanceof Error) {\n // @ts-ignore\n e._emitter = `${listener.name || \"anonymous\"}:${message.type}`;\n }\n if (this._options.ignoreErrors) {\n return e;\n } else {\n throw e;\n }\n }\n\n /**\n * 执行单个监听器函数(移除了 debug / abortSignal 分支,this 指向实例)\n */\n private _executeListener(\n listener: FastEventListenerMeta,\n message: TypedFastEventMessage,\n args: FastLiteListenerArgs | undefined,\n catchErrors: boolean = false,\n ): Promise<any> | any {\n const listenerFn = listener[0];\n try {\n const isTransformed =\n ((args?.flags || 0) & FastEventListenerFlags.Transformed) > 0;\n let result = listenerFn.call(\n this,\n isTransformed ? message.payload : message,\n args!,\n );\n // 自动处理 reject Promise\n if (catchErrors && result && result instanceof Promise) {\n result = tryReturnError(result, (e) =>\n this._onListenerError(listenerFn, message, args, e),\n );\n }\n return result;\n } catch (e: any) {\n return this._onListenerError(listenerFn, message, args, e);\n }\n }\n\n /**\n * 执行监听器节点列表中的所有监听器(移除了 executor,退化为同步顺序执行)\n */\n private _executeListeners(\n nodes: FastEventListenerNode[],\n message: TypedFastEventMessage,\n args: FastLiteListenerArgs,\n filter?: (listener: FastEventListenerMeta, node: FastEventListenerNode) => boolean,\n ): any[] {\n if (!nodes || nodes.length === 0) return [];\n const listeners: [FastEventListenerMeta, number, FastEventListenerMeta[]][] = [];\n for (const node of nodes) {\n let i: number = 0;\n for (const listener of node.__listeners) {\n if (!filter || filter(listener, node)) {\n listeners.push([listener, i++, node.__listeners]);\n }\n }\n }\n // 执行监听器前计数先减一,避免在监听器中再次触发导致重复执行\n this._decListenerExecCount(listeners);\n return listeners.map((listener) => {\n return this._executeListener(listener[0], message, args, true);\n });\n }\n\n /**\n * 减少侦听器的执行次数(达到 count 限制时移除)\n */\n _decListenerExecCount(\n listeners: [FastEventListenerMeta, number, FastEventListenerMeta[]][],\n ) {\n for (let i = listeners.length - 1; i >= 0; i--) {\n const meta = listeners[i][0] as FastEventListenerMeta;\n meta[2]++; // 实际执行的次数\n // count > 0 时代表执行次数限制\n if (meta[1] > 0 && meta[1] <= meta[2]) {\n listeners[i][2].splice(i, 1);\n }\n }\n }\n\n /**\n * 获取指定类型的所有事件监听器\n */\n getListeners(type: string): FastEventListenerMeta[] {\n const nodes: FastEventListenerNode[] = [];\n const parts = type.split(this._delimiter);\n this._traverseToPath(this.listeners, parts, (node) => {\n nodes.push(node);\n });\n const listeners: any[] = [];\n nodes.map((node) => {\n listeners.push(...node.__listeners);\n });\n return listeners;\n }\n\n /**\n * 清除所有事件或指定事件的保留消息\n */\n clearRetainMessages(type?: EventNames | string) {\n if (type) {\n this.retainedMessages.delete(type as string);\n } else {\n this.retainedMessages.clear();\n }\n }\n\n /**\n * 同步触发事件\n *\n * 支持两种调用方式:\n * emit(type, payload, retain?)\n * emit({ type, payload }, retain?)\n */\n public emit<R = any, T extends Types = Types>(\n type: T,\n payload?: UnTransformedEvents<AllEvents>[T],\n retain?: boolean,\n ): R[];\n public emit<R = any, T extends string = string>(\n type: ReplaceWildcard<T> | Types,\n payload?: InMatchedEvent<Events, T> extends true\n ? GetPayload<UnTransformedEvents<AllEvents>, T>\n : any,\n retain?: boolean,\n ): R[];\n public emit<R = any, T extends KeyOf<AllEvents> = KeyOf<AllEvents>>(\n message: FastEventEmitMessage<T, UnTransformedEvents<AllEvents>[T], any>,\n retain?: boolean,\n ): R[];\n public emit<R = any>(message: MutableMessage<AllEvents, any>, retain?: boolean): R[];\n public emit<R = any>(message: { type: keyof AllEvents }, retain?: boolean): R[];\n public emit<R = any>(message: FastEventMessage, retain?: boolean): R[];\n public emit(): any {\n const [message, args] = parseLiteEmitArgs(arguments);\n\n const parts = message.type.split(this._delimiter);\n if (args.retain) {\n this.retainedMessages.set(message.type, message);\n }\n\n const nodes: FastEventListenerNode[] = [];\n this._traverseToPath(this.listeners, parts, (node) => {\n nodes.push(node);\n });\n\n // 触发时进行消息转换\n if (isFunction(this._options.transform)) {\n const transformed = this._options.transform.call(this, message as any);\n if (transformed !== message) {\n message.payload = transformed;\n args.rawEventType = message.type;\n args.flags = (args.flags || 0) | FastEventListenerFlags.Transformed;\n }\n }\n\n // 执行监听器\n const results: any[] = [];\n results.push(...this._executeListeners(nodes, message, args));\n\n // 展开 expandable 结果\n if (this._options.expandEmitResults) {\n expandEmitResults(results);\n }\n return results;\n }\n\n /**\n * 异步触发事件(使用 Promise.allSettled,等待所有异步监听器完成)\n */\n public async emitAsync<R = any, T extends Types = Types>(\n type: T,\n payload?: UnTransformedEvents<AllEvents>[T],\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any, T extends string = string>(\n type: ReplaceWildcard<T> | Types,\n payload?: InMatchedEvent<Events, T> extends true\n ? GetPayload<UnTransformedEvents<AllEvents>, T>\n : any,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any, T extends KeyOf<AllEvents> = KeyOf<AllEvents>>(\n message: FastEventEmitMessage<T, UnTransformedEvents<AllEvents>[T], any>,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(\n message: MutableMessage<AllEvents, any>,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(\n message: { type: keyof AllEvents },\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(): Promise<(R | Error)[]> {\n const results = await Promise.allSettled(\n this.emit.apply(this, arguments as any),\n );\n return getPromiseResults(results);\n }\n\n}\n"]} | ||
| {"version":3,"sources":["../src/utils/isPathMatched.ts","../src/utils/removeItem.ts","../src/utils/isFunction.ts","../src/utils/expandable.ts","../src/utils/expandEmitResults.ts","../src/utils/tryReturnError.ts","../src/utils/getPromiseResults.ts","../src/liteEvent.ts"],"names":["isPathMatched","path","pattern","pathLen","patternLen","i","removeItem","arr","condition","removedIndices","isFunction","fn","__expandable__","isExpandable","value","expandEmitResults","items","item","tryReturnError","callback","e","getPromiseResults","results","result","parseLiteEmitArgs","args","message","emitArgs","FastLiteEvent","options","__publicField","initial","parts","listener","index","node","newListener","current","part","isRemove","type","finalOptions","off","hasWildcard","entryParts","entry","count","_path","prefix","key","listenerNode","messages","patterns","t","listenerMeta","lastFollowing","entryNode","n","traverseNodes","parentPath","childNode","_args","catchErrors","listenerFn","isTransformed","nodes","filter","listeners","meta","transformed"],"mappings":"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","file":"liteEvent.mjs","sourcesContent":["/**\n *\n * 判断path是否与pattern匹配\n *\n * isPathMatched(\"a.b.c\",\"a.b.c\") == true\n * isPathMatched(\"a.b.c\",\"a.b.*\") == true\n * isPathMatched(\"a.b.c\",\"a.*.*\") == true\n * isPathMatched(\"a.b.c\",\"*.*.*\") == true\n * isPathMatched(\"a.b.c\",\".b.*\") == true\n * isPathMatched(\"a.b.c.d\",\"a.**\") == true\n *\n * - '**' 匹配后续的\n * - '*' 匹配任意数量的字符,包括零个字符\n *\n * @param path\n * @param pattern\n */\nexport function isPathMatched(path: string[], pattern: string[]): boolean {\n const pathLen = path.length;\n const patternLen = pattern.length;\n\n // 快速失败: 长度不匹配(除非以 ** 结尾)\n if (pathLen !== patternLen && (patternLen === 0 || pattern[patternLen - 1] !== '**')) {\n return false;\n }\n\n // 处理 ** 通配符: 直接检查前缀匹配\n if (patternLen > 0 && pattern[patternLen - 1] === '**') {\n // 检查前 n-1 个元素是否匹配\n for (let i = 0; i < patternLen - 1; i++) {\n if (pattern[i] !== '*' && pattern[i] !== path[i]) {\n return false;\n }\n }\n return true;\n }\n\n // 普通匹配: 逐元素比较\n for (let i = 0; i < pathLen; i++) {\n if (pattern[i] !== '*' && pattern[i] !== path[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n// export function isPathMatched(path:string[],pattern:string[]):boolean{\n// if(path.length !== pattern.length && (path.length>0 && pattern[pattern.length-1]!=='**') ){\n// return false;\n// }\n// let fPattern = [...pattern]\n// if(pattern.length >0 && pattern[pattern.length-1] === '**'){\n// fPattern.splice(pattern.length-1,1,...Array.from<string>({\n// length: path.length-pattern.length+1\n// }).fill('*'))\n// }\n// for(let i=0;i<path.length;i++){\n// if(fPattern[i]==='*'){\n// continue\n// }\n// if(fPattern[i]!==path[i]){\n// return false\n// }\n// }\n// return true\n// }\n","/**\n * 从数组中移除满足条件的元素并返回被移除元素的索引\n * @param {any[]} arr - 需要操作的数组\n * @param {(item: any) => boolean} condition - 判断元素是否应该被移除的条件函数\n * @returns {number[]} 被移除元素在原数组中的索引集合\n */\nexport function removeItem(arr: any[], condition: (item: any) => boolean) {\n const removedIndices: number[] = [];\n // 从后往前遍历,避免删除元素时索引变化的问题\n for (let i = arr.length - 1; i >= 0; i--) {\n if (condition(arr[i])) {\n removedIndices.push(i); // 记录原始索引\n arr.splice(i, 1); // 删除元素\n }\n }\n\n // 因为是从后往前遍历的,所以索引是降序的,需要反转得到升序结果\n return removedIndices.reverse();\n}\n","export function isFunction(fn: any): fn is Function {\n return fn && typeof (fn) == \"function\"\n}","/**\n * \n * \n * 用于包括输入值为可展开的对象\n * \n * \n * 用在emit事件\n * \n * emitter1 = new FastEvent()\n * emitter2 = new FastEvent()\n * \n * emitter1.on(\"xxx\",(message)=>{\n * return emitter2.emit(message)\n * })\n * \n * emitter2.on(\"xxx\",()=>1)\n * emitter2.on(\"xxx\",()=>2)\n * \n * const results = emitter1.emit(\"xxx\")\n * // results == [[1,2]] 而不 [1,2],因为emitter2.emit返回的是一个[]\n * \n * expandable的作用就是对emit结果进行包括,当isExpandable时,在emit内部进行展开\n * \n * \n * \n * \n * emitter1.on(\"xxx\",(message)=>{\n * // 告诉emitter2.emit返回的是一个expandable对象\n * // 然后在内部就展开此对象\n * return emitter2.emit(message)\n * })\n * \n* const results = emitter1.emit(\"xxx\")\n * // results == [1,2]\n * \n * 为了实现对结果数据的展开处理,在emit内部需要对监听器的执行结果进行依次检查\n * 这多了一个迭代操作,为了不影响性能,可以关闭此特性\n * options.expandEmitResults = false\n * \n * \n */\n\nexport const __expandable__ = Symbol.for('__expandable__')\n\nexport function expandable(value: any) {\n value[__expandable__] = true\n return value\n}\n\nexport function isExpandable(value: any) {\n return value && value[__expandable__]\n}","import { isExpandable } from \"./expandable\";\n/**\n * \n * 判断成员isExpandable,如果是则说明是一个数组,则原地展开\n * \n * \n */\nexport function expandEmitResults(items: any[]): any[] {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (Array.isArray(item) && isExpandable(item)) {\n items.splice(i, 1, ...item)\n i += item.length - 1\n }\n }\n return items\n\n}\n\n\n// import { expandable } from \"./expandable\";\n// const items = [1, 2, expandable([3, 4]), 0, 0, expandable([5, 6]), expandable([7, 8]), 9, 10, 11]\n// // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]\n// expandEmitResults(items)\n// console.log(items)","\n\n/**\n * 包装 Promise,将 catch 的错误转换为正常返回值\n * @param fn 需要包装的 Promise\n * @returns 包装后的 Promise,如果发生错误则返回错误对象\n */\nexport function tryReturnError(fn: Promise<any>, callback?: (e: any) => any): Promise<any> {\n return fn.catch((e) => {\n if (callback) callback(e)\n return Promise.resolve(e)\n })\n}\n","export function getPromiseResults(results: any[]) {\n return results.map((result) => {\n if (result.status === \"fulfilled\") {\n return result.value;\n } else {\n return result.reason;\n }\n });\n}\n","/**\n * FastLiteEvent 轻量级事件发射器\n *\n * 从 FastEvent 派生的精简版本,移除了以下高级特性:\n * scope / hook / meta / pipe / executor / 异步迭代 / context\n * debug / abortSignal / 订阅时的 filter+off / 监听优先级 prepend\n *\n * 仅保留核心的事件收发能力:on / once / onAny / off / offAll / clear /\n * emit / emitAsync / waitFor / getListeners / clearRetainMessages,以及通配符\n * (* / **)、retain 保留事件、count / tag / flags、ignoreErrors、transform\n * 消息转换、expandEmitResults 等基础特性。\n *\n * 类型与 FastEvent 同源派生(Omit / 复用),监听器、消息、订阅者与 FastEvent\n * 双向兼容——同一监听器函数可同时挂到 FastEvent 与 FastLiteEvent 上。\n */\nimport {\n GetClosestEvents,\n KeyOf,\n MutableMessage,\n Expand,\n Fallback,\n ReplaceWildcard,\n UnTransformedEvents,\n FastEventMessage,\n TypedFastEventMessage,\n FastEventEmitMessage,\n FastListeners,\n FastEventListenerNode,\n FastEventListenerMeta,\n FastEventCommonListener,\n FastEventSubscriber,\n FastEventOptions,\n FastEventListenOptions,\n FastEventListenerArgs,\n FastEvents,\n FastEventListenerFlags,\n IsTransformedEvent,\n ExtendWildcardEvents,\n PayloadValues,\n PickPayload,\n ValueOf,\n GetPayload,\n} from \"./types\";\nimport { InMatchedEvent } from \"./types/wildcards/InMatchedEvent\";\nimport { GetClosestMessage } from \"./types/closest/GetClosestMessage\";\nimport { isPathMatched } from \"./utils/isPathMatched\";\nimport { removeItem } from \"./utils/removeItem\";\nimport { isFunction } from \"./utils/isFunction\";\nimport { expandEmitResults } from \"./utils/expandEmitResults\";\nimport { tryReturnError } from \"./utils/tryReturnError\";\nimport { getPromiseResults } from \"./utils/getPromiseResults\";\n\n// —— 从原始类型 Omit 派生:剥离被移除特性对应的字段 ——\nexport type FastLiteMessage<T extends string = string, P = any> = Omit<\n FastEventMessage<T, P>,\n \"meta\"\n>;\n\nexport type FastLiteListenerArgs = Omit<\n FastEventListenerArgs,\n \"meta\" | \"executor\" | \"parseArgs\" | \"abortSignal\"\n>;\n\nexport type FastLiteListenOptions<\n Events extends Record<string, any> = Record<string, any>,\n> = Omit<FastEventListenOptions<Events>, \"pipes\" | \"iterable\" | \"filter\" | \"off\" | \"prepend\">;\n\nexport type FastLiteEventOptions = Omit<\n FastEventOptions,\n | \"context\"\n | \"meta\"\n | \"executor\"\n | \"debug\"\n | \"onAddBeforeListener\"\n | \"onAddAfterListener\"\n | \"onRemoveListener\"\n | \"onClearListeners\"\n | \"onListenerError\"\n | \"onBeforeExecuteListener\"\n | \"onAfterExecuteListener\"\n>;\n\n// —— 完全复用原始类型(与 FastEvent 互换兼容)——\nexport type FastLiteSubscriber = FastEventSubscriber;\nexport type FastLiteListener<\n T extends string = string,\n P = any,\n> = FastEventCommonListener<FastLiteMessage<T, P>, any, any>;\n\n/**\n * 解析 emit 参数(简化版,不复用 parseEmitArgs)\n *\n * 仅支持两种形态:\n * (type, payload, retain?)\n * (message, retain?)\n *\n * @param args - emit 的 arguments\n * @returns [消息, 监听器参数]\n */\nfunction parseLiteEmitArgs(\n args: IArguments,\n): [TypedFastEventMessage, FastLiteListenerArgs] {\n let message = {} as TypedFastEventMessage;\n let emitArgs: FastLiteListenerArgs = {};\n if (typeof args[0] === \"object\") {\n Object.assign(message, args[0]);\n emitArgs = typeof args[1] === \"boolean\" ? { retain: args[1] } : {};\n } else {\n message.type = args[0] as any;\n message.payload = args[1] as any;\n emitArgs = typeof args[2] === \"boolean\" ? { retain: args[2] } : {};\n }\n return [message, emitArgs];\n}\n\n/**\n * FastLiteEvent 轻量级事件发射器类\n *\n * @template Events - 事件类型定义,继承自 FastEvents 接口\n */\nexport class FastLiteEvent<\n Events extends Record<string, any> = Record<string, any>,\n AllEvents extends Record<string, any> = Expand<Events & FastEvents>,\n Types extends keyof AllEvents = KeyOf<AllEvents>,\n EventNames = KeyOf<ExtendWildcardEvents<AllEvents>>,\n> {\n __FastLiteEvent__: boolean = true;\n\n /** 事件监听器树结构,存储所有注册的事件监听器 */\n public listeners: FastListeners = {\n __listeners: [],\n } as unknown as FastListeners;\n\n /** 事件发射器的配置选项 */\n private _options: FastLiteEventOptions;\n\n /** 事件名称的分隔符,默认为 '/' */\n private _delimiter: string = \"/\";\n\n /** 保留的事件消息映射,Key 是事件名称,Value 是保留的事件消息 */\n retainedMessages: Map<string, any> = new Map<string, any>();\n\n /** 当前注册的监听器总数 */\n listenerCount: number = 0;\n\n /**\n * 创建 FastLiteEvent 实例\n * @param options - 事件发射器的配置选项\n *\n * 默认配置:\n * - id: 随机字符串 - 实例唯一标识符\n * - delimiter: '/' - 事件名称分隔符\n * - ignoreErrors: true - 是否忽略监听器执行错误\n * - expandEmitResults: true - 是否展开 emit 返回值\n */\n constructor(options?: Partial<FastLiteEventOptions>) {\n this._options = Object.assign(\n {\n id: Math.random().toString(36).substring(2),\n delimiter: \"/\",\n ignoreErrors: true,\n expandEmitResults: true,\n },\n this._initOptions(options),\n ) as unknown as FastLiteEventOptions;\n this._delimiter = this._options.delimiter!;\n }\n\n /** 获取事件发射器的配置选项 */\n get options() {\n return this._options;\n }\n /** 获取事件发射器的唯一标识符 */\n get id() {\n return this._options.id!;\n }\n /** 获取事件发射器的标题 */\n get title() {\n return this._options.title || this.id || \"FastLiteEvent\";\n }\n\n /**\n * 初始化选项(供子类重载)\n * @param initial - 可选的初始选项\n */\n _initOptions(initial?: Partial<FastLiteEventOptions>) {\n return initial;\n }\n\n /**\n * 添加事件监听器到事件树(仅尾插,已移除 prepend 插队)\n * @param parts - 事件路径数组\n * @param listener - 事件监听器函数\n * @param options - 监听器配置(count / tag / flags)\n * @returns [节点, 监听器索引]\n */\n private _addListener(\n parts: string[],\n listener: Function,\n options: { count: number; tag?: string; flags?: number },\n ): [FastEventListenerNode | undefined, number] {\n let index: number = 0;\n const node = this._forEachNodes(parts, (node) => {\n const newListener = [\n listener,\n options.count,\n 0,\n options.tag,\n options.flags,\n ] as unknown as FastEventListenerMeta;\n node.__listeners.push(newListener);\n index = node.__listeners.length - 1;\n this.listenerCount++;\n });\n return [node, index];\n }\n\n /**\n * 根据 parts 路径遍历监听器树,并在最后的节点上执行回调\n */\n private _forEachNodes(\n parts: string[],\n callback: (node: FastEventListenerNode, parent: FastEventListenerNode) => void,\n ): FastEventListenerNode | undefined {\n if (parts.length === 0) return;\n let current = this.listeners;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!(part in current)) {\n current[part] = {\n __listeners: [],\n } as unknown as FastListeners;\n }\n if (i === parts.length - 1) {\n const node = current[part];\n callback(node, current);\n return node;\n } else {\n current = current[part];\n }\n }\n return undefined;\n }\n\n /**\n * 从监听器节点中移除指定的事件监听器\n */\n private _removeListener(\n node: FastEventListenerNode,\n path: string[],\n listener: Function,\n ): void {\n if (!listener) return;\n removeItem(node.__listeners, (item: any) => {\n item = Array.isArray(item) ? item[0] : item;\n const isRemove = item === listener;\n if (isRemove) this.listenerCount--;\n return isRemove;\n });\n }\n\n /**\n * 注册事件监听器\n * @param type - 事件类型,支持普通字符串、通配符(user/*)、全局监听(**)\n * @param listener - 事件监听器函数\n * @param options - 监听器配置(count / tag / flags)\n * @returns 订阅者对象,包含 off 方法用于取消监听\n */\n public on<T extends string = KeyOf<Events> | \"**\">(\n type: T,\n listener: FastEventCommonListener<\n T extends IsTransformedEvent<AllEvents, T>\n ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n : T extends \"**\"\n ? MutableMessage<Events>\n : GetClosestMessage<Events, T, any>,\n any,\n any\n >,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n if (type.length === 0) throw new Error(\"event cannot be empty\");\n const finalOptions = Object.assign(\n { count: 0, flags: 0 },\n options,\n ) as Required<FastLiteListenOptions> & { count: number; flags: number };\n\n const parts = type.split(this._delimiter);\n const [node, index] = this._addListener(parts, listener as any, finalOptions);\n const off = () => node && this._removeListener(node, parts, listener as any);\n\n // 触发监听器保留消息(retain)\n this._emitRetainMessage(type, node, index);\n\n return {\n off,\n listener: listener as any,\n [Symbol.dispose]() {\n off();\n },\n };\n }\n\n /**\n * 注册一次性事件监听器(触发一次后自动注销)\n */\n public once<T extends string = KeyOf<Events> | \"**\">(\n type: T,\n listener: FastEventCommonListener<\n T extends IsTransformedEvent<AllEvents, T>\n ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n : T extends \"**\"\n ? MutableMessage<Events>\n : GetClosestMessage<Events, T, any>,\n any,\n any\n >,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n return this.on(type, listener, Object.assign({}, options, { count: 1 }));\n }\n\n /**\n * 注册一个监听所有事件的监听器(等同 on('**', listener))\n */\n public onAny(\n listener: FastEventCommonListener<MutableMessage<AllEvents, any>, any, any>,\n options?: FastLiteListenOptions,\n ): FastEventSubscriber {\n return this.on(\"**\", listener as any, options as any) as FastEventSubscriber;\n }\n\n /**\n * 移除事件监听器\n */\n off(listener: Function): void;\n off(type: string, listener: Function): void;\n off(type: Types): void;\n off(type: string): void;\n off() {\n const args = arguments;\n const type = isFunction(args[0]) ? undefined : args[0];\n const listener = isFunction(args[0]) ? args[0] : args[1];\n const parts = type ? type.split(this._delimiter) : [];\n const hasWildcard = type ? type.includes(\"*\") : false;\n if (type && !hasWildcard) {\n this._traverseToPath(this.listeners, parts, (node) => {\n if (listener) {\n this._removeListener(node, parts, listener);\n } else if (type) {\n node.__listeners = [];\n }\n });\n } else {\n const entryParts: string[] = hasWildcard ? [] : parts;\n this._traverseListeners(this.listeners, entryParts, (path, node) => {\n if (listener !== undefined || (hasWildcard && isPathMatched(path, parts))) {\n if (listener) {\n this._removeListener(node, parts, listener);\n } else {\n node.__listeners = [];\n }\n }\n });\n }\n }\n\n /**\n * 移除所有事件监听器\n * @param entry - 可选的事件前缀,提供则只移除该前缀下的监听器\n */\n offAll(entry?: string) {\n if (entry) {\n const parts = entry.split(this._delimiter);\n let count = 0;\n this._traverseListeners(this.listeners, parts, (_path, node) => {\n count += node.__listeners.length;\n node.__listeners = [];\n });\n this.listenerCount -= count;\n this._removeRetainedEvents(entry);\n } else {\n let count = 0;\n this._traverseListeners(this.listeners, [], (_path, node) => {\n count += node.__listeners.length;\n });\n this.listenerCount -= count;\n this.retainedMessages.clear();\n this.listeners = { __listeners: [] } as unknown as FastListeners;\n }\n }\n\n /**\n * 移除保留的事件\n */\n private _removeRetainedEvents(prefix?: string) {\n if (!prefix) this.retainedMessages.clear();\n if (prefix?.endsWith(this._delimiter)) {\n prefix += this._delimiter;\n }\n this.retainedMessages.delete(prefix!);\n for (let key of this.retainedMessages.keys()) {\n if (key.startsWith(prefix!)) {\n this.retainedMessages.delete(key);\n }\n }\n }\n\n /**\n * 清除所有事件或指定前缀的事件(含保留消息)\n */\n clear(prefix?: string) {\n this.offAll(prefix);\n this._removeRetainedEvents(prefix);\n }\n\n /**\n * 发送最后一次事件的消息给对应的监听器(用于 retain)\n */\n private _emitRetainMessage(\n type: string,\n listenerNode: FastEventListenerNode | undefined,\n index: number,\n ) {\n let messages = [] as TypedFastEventMessage[];\n if (type.includes(\"*\")) {\n const patterns = type.split(this._delimiter);\n this.retainedMessages.forEach((message, t) => {\n const parts = t.split(this._delimiter);\n if (isPathMatched(parts, patterns)) {\n messages.push(message);\n }\n });\n } else if (this.retainedMessages.has(type)) {\n messages.push(this.retainedMessages.get(type));\n }\n if (listenerNode) {\n messages.forEach((message) => {\n this._executeListeners([listenerNode], message, {}, (listenerMeta) => {\n return listenerMeta[0] === listenerNode.__listeners[index][0];\n });\n });\n }\n }\n\n /**\n * 遍历监听器节点树,支持三种匹配模式:精确 / 单层通配 * / 多层通配 **\n */\n private _traverseToPath(\n node: FastEventListenerNode,\n parts: string[],\n callback: (node: FastEventListenerNode) => void,\n index: number = 0,\n lastFollowing?: boolean,\n ): void {\n if (index >= parts.length) {\n callback(node);\n return;\n }\n const part = parts[index];\n if (lastFollowing === true) {\n this._traverseToPath(node, parts, callback, index + 1, true);\n return;\n }\n if (\"*\" in node) {\n this._traverseToPath(node[\"*\"], parts, callback, index + 1);\n }\n if (\"**\" in node) {\n this._traverseToPath(node[\"**\"], parts, callback, index + 1, true);\n }\n if (part in node) {\n this._traverseToPath(node[part], parts, callback, index + 1);\n }\n }\n\n private _traverseListeners(\n node: FastEventListenerNode,\n entry: string[],\n callback: (path: string[], node: FastEventListenerNode) => void,\n ): void {\n let entryNode: FastEventListenerNode = node;\n if (entry && entry.length > 0) {\n this._traverseToPath(node, entry, (n) => {\n entryNode = n;\n });\n }\n const traverseNodes = (\n node: FastEventListenerNode,\n callback: (path: string[], node: FastEventListenerNode) => void,\n parentPath: string[],\n ) => {\n callback(parentPath, node);\n for (let [key, childNode] of Object.entries(node)) {\n if (key.startsWith(\"__\")) continue;\n if (childNode) {\n traverseNodes(childNode as FastEventListenerNode, callback, [\n ...parentPath,\n key,\n ]);\n }\n }\n };\n traverseNodes(entryNode, callback, []);\n }\n\n /**\n * 监听器执行出错处理(移除了 ListenerError hook)\n */\n private _onListenerError(\n listener: Function,\n message: TypedFastEventMessage,\n _args: FastLiteListenerArgs | undefined,\n e: any,\n ) {\n if (e instanceof Error) {\n // @ts-ignore\n e._emitter = `${listener.name || \"anonymous\"}:${message.type}`;\n }\n if (this._options.ignoreErrors) {\n return e;\n } else {\n throw e;\n }\n }\n\n /**\n * 执行单个监听器函数(移除了 debug / abortSignal 分支,this 指向实例)\n */\n private _executeListener(\n listener: FastEventListenerMeta,\n message: TypedFastEventMessage,\n args: FastLiteListenerArgs | undefined,\n catchErrors: boolean = false,\n ): Promise<any> | any {\n const listenerFn = listener[0];\n try {\n const isTransformed =\n ((args?.flags || 0) & FastEventListenerFlags.Transformed) > 0;\n let result = listenerFn.call(\n this,\n isTransformed ? message.payload : message,\n args!,\n );\n // 自动处理 reject Promise\n if (catchErrors && result && result instanceof Promise) {\n result = tryReturnError(result, (e) =>\n this._onListenerError(listenerFn, message, args, e),\n );\n }\n return result;\n } catch (e: any) {\n return this._onListenerError(listenerFn, message, args, e);\n }\n }\n\n /**\n * 执行监听器节点列表中的所有监听器(移除了 executor,退化为同步顺序执行)\n */\n private _executeListeners(\n nodes: FastEventListenerNode[],\n message: TypedFastEventMessage,\n args: FastLiteListenerArgs,\n filter?: (listener: FastEventListenerMeta, node: FastEventListenerNode) => boolean,\n ): any[] {\n if (!nodes || nodes.length === 0) return [];\n const listeners: [FastEventListenerMeta, number, FastEventListenerMeta[]][] = [];\n for (const node of nodes) {\n let i: number = 0;\n for (const listener of node.__listeners) {\n if (!filter || filter(listener, node)) {\n // localIdx 必须等于 listener 在 __listeners 中的真实数组下标,\n // 因此 i 对每个 listener 都递增(含被 filter 跳过的),不能只在命中时递增\n listeners.push([listener, i, node.__listeners]);\n }\n i++;\n }\n }\n // 执行监听器前计数先减一,避免在监听器中再次触发导致重复执行\n this._decListenerExecCount(listeners);\n return listeners.map((listener) => {\n return this._executeListener(listener[0], message, args, true);\n });\n }\n\n /**\n * 减少侦听器的执行次数(达到 count 限制时移除)\n */\n _decListenerExecCount(\n listeners: [FastEventListenerMeta, number, FastEventListenerMeta[]][],\n ) {\n for (let i = listeners.length - 1; i >= 0; i--) {\n const meta = listeners[i][0] as FastEventListenerMeta;\n meta[2]++; // 实际执行的次数\n // count > 0 时代表执行次数限制\n if (meta[1] > 0 && meta[1] <= meta[2]) {\n // 用元组中记录的 localIdx(listener 在所属 __listeners 内的本地下标),\n // 而非外层收集列表的循环下标 i(跨节点展平后的全局位置)\n listeners[i][2].splice(listeners[i][1], 1);\n this.listenerCount--; // 同步递减计数,与 off/offAll 路径保持一致\n }\n }\n }\n\n /**\n * 获取指定类型的所有事件监听器\n */\n getListeners(type: string): FastEventListenerMeta[] {\n const nodes: FastEventListenerNode[] = [];\n const parts = type.split(this._delimiter);\n this._traverseToPath(this.listeners, parts, (node) => {\n nodes.push(node);\n });\n const listeners: any[] = [];\n nodes.map((node) => {\n listeners.push(...node.__listeners);\n });\n return listeners;\n }\n\n /**\n * 清除所有事件或指定事件的保留消息\n */\n clearRetainMessages(type?: EventNames | string) {\n if (type) {\n this.retainedMessages.delete(type as string);\n } else {\n this.retainedMessages.clear();\n }\n }\n\n /**\n * 同步触发事件\n *\n * 支持两种调用方式:\n * emit(type, payload, retain?)\n * emit({ type, payload }, retain?)\n */\n public emit<R = any, T extends Types = Types>(\n type: T,\n payload?: UnTransformedEvents<AllEvents>[T],\n retain?: boolean,\n ): R[];\n public emit<R = any, T extends string = string>(\n type: ReplaceWildcard<T> | Types,\n payload?: InMatchedEvent<Events, T> extends true\n ? GetPayload<UnTransformedEvents<AllEvents>, T>\n : any,\n retain?: boolean,\n ): R[];\n public emit<R = any, T extends KeyOf<AllEvents> = KeyOf<AllEvents>>(\n message: FastEventEmitMessage<T, UnTransformedEvents<AllEvents>[T], any>,\n retain?: boolean,\n ): R[];\n public emit<R = any>(message: MutableMessage<AllEvents, any>, retain?: boolean): R[];\n public emit<R = any>(message: { type: keyof AllEvents }, retain?: boolean): R[];\n public emit<R = any>(message: FastEventMessage, retain?: boolean): R[];\n public emit(): any {\n const [message, args] = parseLiteEmitArgs(arguments);\n\n const parts = message.type.split(this._delimiter);\n if (args.retain) {\n this.retainedMessages.set(message.type, message);\n }\n\n const nodes: FastEventListenerNode[] = [];\n this._traverseToPath(this.listeners, parts, (node) => {\n nodes.push(node);\n });\n\n // 触发时进行消息转换\n if (isFunction(this._options.transform)) {\n const transformed = this._options.transform.call(this, message as any);\n if (transformed !== message) {\n message.payload = transformed;\n args.rawEventType = message.type;\n args.flags = (args.flags || 0) | FastEventListenerFlags.Transformed;\n }\n }\n\n // 执行监听器\n const results: any[] = [];\n results.push(...this._executeListeners(nodes, message, args));\n\n // 展开 expandable 结果\n if (this._options.expandEmitResults) {\n expandEmitResults(results);\n }\n return results;\n }\n\n /**\n * 异步触发事件(使用 Promise.allSettled,等待所有异步监听器完成)\n */\n public async emitAsync<R = any, T extends Types = Types>(\n type: T,\n payload?: UnTransformedEvents<AllEvents>[T],\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any, T extends string = string>(\n type: ReplaceWildcard<T> | Types,\n payload?: InMatchedEvent<Events, T> extends true\n ? GetPayload<UnTransformedEvents<AllEvents>, T>\n : any,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any, T extends KeyOf<AllEvents> = KeyOf<AllEvents>>(\n message: FastEventEmitMessage<T, UnTransformedEvents<AllEvents>[T], any>,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(\n message: MutableMessage<AllEvents, any>,\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(\n message: { type: keyof AllEvents },\n retain?: boolean,\n ): Promise<(R | Error)[]>;\n public async emitAsync<R = any>(): Promise<(R | Error)[]> {\n const results = await Promise.allSettled(\n this.emit.apply(this, arguments as any),\n );\n return getPromiseResults(results);\n }\n\n}\n"]} |
+1
-1
| { | ||
| "name": "fastevent", | ||
| "version": "2.6.0", | ||
| "version": "2.6.1", | ||
| "private": false, | ||
@@ -5,0 +5,0 @@ "description": "The Ultimate Event Trigger Library – Fast, Feature-Rich, Battle-Tested!", |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
1602330
0.27%7541
0.01%