🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

fastevent

Package Overview
Dependencies
Maintainers
1
Versions
45
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

fastevent - npm Package Compare versions

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

Sorry, the diff of this file is too big to display

import { AddAfterListenerHook } from 'fastevent';
import { ClearListenersHook } from 'fastevent';
import { CSSResult } from 'lit';
import { FastEvent } from 'fastevent';
import { FastEventListenerArgs } from 'fastevent';
import { FastEventListenerFlags } from 'fastevent';
import { FastEventListenerMeta } from 'fastevent';
import { FastEventListenerNode } from 'fastevent';
import { FastEventMessage } from 'fastevent';
import { FastEventSubscriber } from 'fastevent';
import { LitElement } from 'lit';
import { RemoveListenerHook } from 'fastevent';
import { TemplateResult } from 'lit';
declare type EventLog = {
id: number;
done: boolean;
message: WeakRef<FastEventMessage>;
triggerTime: number;
duration: [number, number];
args: WeakRef<FastEventListenerArgs>;
updateVersion: number;
listeners: {
fn: WeakRef<any>;
status: "running" | "ok" | "error";
name: string;
tag: string | undefined;
count: string;
flags?: FastEventListenerFlags;
result: any;
}[];
};
/**
* FastEventListeners 组件 - 显示 FastEvent 实例的监听器树
*/
export declare class FastEventListeners extends LitElement {
static styles: CSSResult;
emitter?: FastEvent;
dark: boolean;
private _selectedPath;
private _listeners;
private _expandedNodes;
lang: string;
private _leftWidth;
private _isResizing;
private _resizeStartX;
private _resizeStartWidth;
/**
* 根据路径从 emitter.listeners 中查找节点
*/
private _getListenerNode;
/**
* 查找第一个有监听器的节点路径
*/
private _findFirstNodeWithListeners;
/**
* 初始化展开状态
*/
private _initializeExpandedNodes;
/**
* 刷新所有数据
*/
private _refreshData;
/**
* 处理节点选择
*/
private _handleNodeSelect;
_onAddAfterListener: AddAfterListenerHook;
_onRemoveListener: RemoveListenerHook;
_onClearListeners: ClearListenersHook;
private _setupHooks;
private _clearHooks;
/**
* 处理节点展开/收起
*/
private _handleNodeToggle;
/**
* 手动刷新
*/
private _handleRefresh;
private _handleResizeStart;
private _handleResizeMove;
private _handleResizeEnd;
private _handleKeyDown;
/**
* 判断节点是否为空
*/
private _isEmptyNode;
/**
* 渲染树节点
*/
private renderTreeNode;
/**
* 渲染树
*/
private renderTree;
private renderListener;
private renderListeners;
willUpdate(changedProperties: Map<PropertyKey, unknown>): void;
connectedCallback(): void;
disconnectedCallback(): void;
render(): TemplateResult<1>;
}
export declare class FastEventViewer extends LitElement {
static styles: CSSResult;
private _emitters;
private _currentEmitterIndex;
private _isDropdownOpen;
private _emitterLogs;
private _emitterLogIndexes;
get emitter(): FastEvent | FastEvent[] | undefined;
set emitter(value: FastEvent | FastEvent[] | undefined);
dark: boolean;
enable: boolean;
/**
* 允许显示的日志最大数量,超过此数量时自动删除旧的
*/
maxSize: number;
title: string;
lang: string;
/**
* 是否在日志中显示监听器详情
*/
showListeners: boolean;
private _filterText;
private _showListeners;
private _isShowListeners;
subscriber?: FastEventSubscriber;
messages: FastEventMessage[];
logs: EventLog[];
private _logIndexs;
connectedCallback(): void;
disconnectedCallback(): void;
willUpdate(changedProperties: Map<string, any>): void;
private _getCurrentEmitter;
private _switchEmitter;
private _handleDocumentClick;
private _reattach;
private _updateFilteredLogs;
_onBeforeExecuteListener: (message: FastEventMessage, args: FastEventListenerArgs) => void;
_getListenerMeta(meta: FastEventListenerMeta, status?: any): ItemOf<EventLog["listeners"]>;
_onAfterExecuteListener: (message: FastEventMessage, returns: any[], _listeners: FastEventListenerNode[]) => void;
private _attach;
private _detach;
clear(): void;
/**
* 在控制台显示监听器函数
* @param listener
*/
private _printListenerInfo;
renderFilter(): TemplateResult<1>;
private _renderEmitterMenu;
private _getEmitterVarName;
private _injectEmitterToConsole;
renderHeader(): TemplateResult<1>;
renderToolbar(): TemplateResult<1>;
renderLogs(): TemplateResult<1>;
render(): TemplateResult<1>;
}
declare type ItemOf<T extends any[]> = T extends (infer I)[] ? I : never;
export { }
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="46" fill="none" viewBox="0 0 48 46"><path fill="#863bff" d="M25.946 44.938c-.664.845-2.021.375-2.021-.698V33.937a2.26 2.26 0 0 0-2.262-2.262H10.287c-.92 0-1.456-1.04-.92-1.788l7.48-10.471c1.07-1.497 0-3.578-1.842-3.578H1.237c-.92 0-1.456-1.04-.92-1.788L10.013.474c.214-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.471c-1.07 1.498 0 3.579 1.842 3.579h11.377c.943 0 1.473 1.088.89 1.83L25.947 44.94z" style="fill:#863bff;fill:color(display-p3 .5252 .23 1);fill-opacity:1"/><mask id="a" width="48" height="46" x="0" y="0" maskUnits="userSpaceOnUse" style="mask-type:alpha"><path fill="#000" d="M25.842 44.938c-.664.844-2.021.375-2.021-.698V33.937a2.26 2.26 0 0 0-2.262-2.262H10.183c-.92 0-1.456-1.04-.92-1.788l7.48-10.471c1.07-1.498 0-3.579-1.842-3.579H1.133c-.92 0-1.456-1.04-.92-1.787L9.91.473c.214-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.471c-1.07 1.498 0 3.578 1.842 3.578h11.377c.943 0 1.473 1.088.89 1.832L25.843 44.94z" style="fill:#000;fill-opacity:1"/></mask><g mask="url(#a)"><g filter="url(#b)"><ellipse cx="5.508" cy="14.704" fill="#ede6ff" rx="5.508" ry="14.704" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -4.47 31.516)"/></g><g filter="url(#c)"><ellipse cx="10.399" cy="29.851" fill="#ede6ff" rx="10.399" ry="29.851" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -39.328 7.883)"/></g><g filter="url(#d)"><ellipse cx="5.508" cy="30.487" fill="#7e14ff" rx="5.508" ry="30.487" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.814 -25.913 -14.639)scale(1 -1)"/></g><g filter="url(#e)"><ellipse cx="5.508" cy="30.599" fill="#7e14ff" rx="5.508" ry="30.599" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.814 -32.644 -3.334)scale(1 -1)"/></g><g filter="url(#f)"><ellipse cx="5.508" cy="30.599" fill="#7e14ff" rx="5.508" ry="30.599" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -34.34 30.47)"/></g><g filter="url(#g)"><ellipse cx="14.072" cy="22.078" fill="#ede6ff" rx="14.072" ry="22.078" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="rotate(93.35 24.506 48.493)scale(-1 1)"/></g><g filter="url(#h)"><ellipse cx="3.47" cy="21.501" fill="#7e14ff" rx="3.47" ry="21.501" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.009 28.708 47.59)scale(-1 1)"/></g><g filter="url(#i)"><ellipse cx="3.47" cy="21.501" fill="#7e14ff" rx="3.47" ry="21.501" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.009 28.708 47.59)scale(-1 1)"/></g><g filter="url(#j)"><ellipse cx=".387" cy="8.972" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(39.51 .387 8.972)"/></g><g filter="url(#k)"><ellipse cx="47.523" cy="-6.092" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 47.523 -6.092)"/></g><g filter="url(#l)"><ellipse cx="41.412" cy="6.333" fill="#47bfff" rx="5.971" ry="9.665" style="fill:#47bfff;fill:color(display-p3 .2799 .748 1);fill-opacity:1" transform="rotate(37.892 41.412 6.333)"/></g><g filter="url(#m)"><ellipse cx="-1.879" cy="38.332" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 -1.88 38.332)"/></g><g filter="url(#n)"><ellipse cx="-1.879" cy="38.332" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 -1.88 38.332)"/></g><g filter="url(#o)"><ellipse cx="35.651" cy="29.907" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 35.651 29.907)"/></g><g filter="url(#p)"><ellipse cx="38.418" cy="32.4" fill="#47bfff" rx="5.971" ry="15.297" style="fill:#47bfff;fill:color(display-p3 .2799 .748 1);fill-opacity:1" transform="rotate(37.892 38.418 32.4)"/></g></g><defs><filter id="b" width="60.045" height="41.654" x="-19.77" y="16.149" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="c" width="90.34" height="51.437" x="-54.613" y="-7.533" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="d" width="79.355" height="29.4" x="-49.64" y="2.03" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="e" width="79.579" height="29.4" x="-45.045" y="20.029" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="f" width="79.579" height="29.4" x="-43.513" y="21.178" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="g" width="74.749" height="58.852" x="15.756" y="-17.901" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="h" width="61.377" height="25.362" x="23.548" y="2.284" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="i" width="61.377" height="25.362" x="23.548" y="2.284" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="j" width="56.045" height="63.649" x="-27.636" y="-22.853" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="k" width="54.814" height="64.646" x="20.116" y="-38.415" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="l" width="33.541" height="35.313" x="24.641" y="-11.323" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="m" width="54.814" height="64.646" x="-29.286" y="6.009" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="n" width="54.814" height="64.646" x="-29.286" y="6.009" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="o" width="54.814" height="64.646" x="8.244" y="-2.416" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="p" width="39.409" height="43.623" x="18.713" y="10.588" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter></defs></svg>
<svg xmlns="http://www.w3.org/2000/svg">
<symbol id="bluesky-icon" viewBox="0 0 16 17">
<g clip-path="url(#bluesky-clip)"><path fill="#08060d" d="M7.75 7.735c-.693-1.348-2.58-3.86-4.334-5.097-1.68-1.187-2.32-.981-2.74-.79C.188 2.065.1 2.812.1 3.251s.241 3.602.398 4.13c.52 1.744 2.367 2.333 4.07 2.145-2.495.37-4.71 1.278-1.805 4.512 3.196 3.309 4.38-.71 4.987-2.746.608 2.036 1.307 5.91 4.93 2.746 2.72-2.746.747-4.143-1.747-4.512 1.702.189 3.55-.4 4.07-2.145.156-.528.397-3.691.397-4.13s-.088-1.186-.575-1.406c-.42-.19-1.06-.395-2.741.79-1.755 1.24-3.64 3.752-4.334 5.099"/></g>
<defs><clipPath id="bluesky-clip"><path fill="#fff" d="M.1.85h15.3v15.3H.1z"/></clipPath></defs>
</symbol>
<symbol id="discord-icon" viewBox="0 0 20 19">
<path fill="#08060d" d="M16.224 3.768a14.5 14.5 0 0 0-3.67-1.153c-.158.286-.343.67-.47.976a13.5 13.5 0 0 0-4.067 0c-.128-.306-.317-.69-.476-.976A14.4 14.4 0 0 0 3.868 3.77C1.546 7.28.916 10.703 1.231 14.077a14.7 14.7 0 0 0 4.5 2.306q.545-.748.965-1.587a9.5 9.5 0 0 1-1.518-.74q.191-.14.372-.293c2.927 1.369 6.107 1.369 8.999 0q.183.152.372.294-.723.437-1.52.74.418.838.963 1.588a14.6 14.6 0 0 0 4.504-2.308c.37-3.911-.63-7.302-2.644-10.309m-9.13 8.234c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.894 0 1.614.82 1.599 1.82.001 1-.705 1.82-1.6 1.82m5.91 0c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.893 0 1.614.82 1.599 1.82 0 1-.706 1.82-1.6 1.82"/>
</symbol>
<symbol id="documentation-icon" viewBox="0 0 21 20">
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="m15.5 13.333 1.533 1.322c.645.555.967.833.967 1.178s-.322.623-.967 1.179L15.5 18.333m-3.333-5-1.534 1.322c-.644.555-.966.833-.966 1.178s.322.623.966 1.179l1.534 1.321"/>
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M17.167 10.836v-4.32c0-1.41 0-2.117-.224-2.68-.359-.906-1.118-1.621-2.08-1.96-.599-.21-1.349-.21-2.848-.21-2.623 0-3.935 0-4.983.369-1.684.591-3.013 1.842-3.641 3.428C3 6.449 3 7.684 3 10.154v2.122c0 2.558 0 3.838.706 4.726q.306.383.713.671c.76.536 1.79.64 3.581.66"/>
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M3 10a2.78 2.78 0 0 1 2.778-2.778c.555 0 1.209.097 1.748-.047.48-.129.854-.503.982-.982.145-.54.048-1.194.048-1.749a2.78 2.78 0 0 1 2.777-2.777"/>
</symbol>
<symbol id="github-icon" viewBox="0 0 19 19">
<path fill="#08060d" fill-rule="evenodd" d="M9.356 1.85C5.05 1.85 1.57 5.356 1.57 9.694a7.84 7.84 0 0 0 5.324 7.44c.387.079.528-.168.528-.376 0-.182-.013-.805-.013-1.454-2.165.467-2.616-.935-2.616-.935-.349-.91-.864-1.143-.864-1.143-.71-.48.051-.48.051-.48.787.051 1.2.805 1.2.805.695 1.194 1.817.857 2.268.649.064-.507.27-.857.49-1.052-1.728-.182-3.545-.857-3.545-3.87 0-.857.31-1.558.8-2.104-.078-.195-.349-1 .077-2.078 0 0 .657-.208 2.14.805a7.5 7.5 0 0 1 1.946-.26c.657 0 1.328.092 1.946.26 1.483-1.013 2.14-.805 2.14-.805.426 1.078.155 1.883.078 2.078.502.546.799 1.247.799 2.104 0 3.013-1.818 3.675-3.558 3.87.284.247.528.714.528 1.454 0 1.052-.012 1.896-.012 2.156 0 .208.142.455.528.377a7.84 7.84 0 0 0 5.324-7.441c.013-4.338-3.48-7.844-7.773-7.844" clip-rule="evenodd"/>
</symbol>
<symbol id="social-icon" viewBox="0 0 20 20">
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M12.5 6.667a4.167 4.167 0 1 0-8.334 0 4.167 4.167 0 0 0 8.334 0"/>
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M2.5 16.667a5.833 5.833 0 0 1 8.75-5.053m3.837.474.513 1.035c.07.144.257.282.414.309l.93.155c.596.1.736.536.307.965l-.723.73a.64.64 0 0 0-.152.531l.207.903c.164.715-.213.991-.84.618l-.872-.52a.63.63 0 0 0-.577 0l-.872.52c-.624.373-1.003.094-.84-.618l.207-.903a.64.64 0 0 0-.152-.532l-.723-.729c-.426-.43-.289-.864.306-.964l.93-.156a.64.64 0 0 0 .412-.31l.513-1.034c.28-.562.735-.562 1.012 0"/>
</symbol>
<symbol id="x-icon" viewBox="0 0 19 19">
<path fill="#08060d" fill-rule="evenodd" d="M1.893 1.98c.052.072 1.245 1.769 2.653 3.77l2.892 4.114c.183.261.333.48.333.486s-.068.089-.152.183l-.522.593-.765.867-3.597 4.087c-.375.426-.734.834-.798.905a1 1 0 0 0-.118.148c0 .01.236.017.664.017h.663l.729-.83c.4-.457.796-.906.879-.999a692 692 0 0 0 1.794-2.038c.034-.037.301-.34.594-.675l.551-.624.345-.392a7 7 0 0 1 .34-.374c.006 0 .93 1.306 2.052 2.903l2.084 2.965.045.063h2.275c1.87 0 2.273-.003 2.266-.021-.008-.02-1.098-1.572-3.894-5.547-2.013-2.862-2.28-3.246-2.273-3.266.008-.019.282-.332 2.085-2.38l2-2.274 1.567-1.782c.022-.028-.016-.03-.65-.03h-.674l-.3.342a871 871 0 0 1-1.782 2.025c-.067.075-.405.458-.75.852a100 100 0 0 1-.803.91c-.148.172-.299.344-.99 1.127-.304.343-.32.358-.345.327-.015-.019-.904-1.282-1.976-2.808L6.365 1.85H1.8zm1.782.91 8.078 11.294c.772 1.08 1.413 1.973 1.425 1.984.016.017.241.02 1.05.017l1.03-.004-2.694-3.766L7.796 5.75 5.722 2.852l-1.039-.004-1.039-.004z" clip-rule="evenodd"/>
</symbol>
</svg>

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

+9
-7

@@ -91,7 +91,8 @@ type DeepPartial<T> = {

* [
* 监听器函数引用,
* 需要执行多少次, =0代表不限
* 实际执行的次数(用于负载均衡时记录)
* 标签 用于调试一般可以标识监听器类型或任意信息
* 标识
* 0: 监听器函数引用,
* 1: 需要执行多少次, =0代表不限
* 2: 实际执行的次数(用于负载均衡时记录)
* 3: 标签 用于调试一般可以标识监听器类型或任意信息
* 4: 标识,
* 5: 监听器最后一次执行结果,仅仅在debug时启用,如果结果是对象则是一个WeakRef
* ]

@@ -104,6 +105,7 @@ */

string,
number
number,
any?
];
type FastListenerExecutor = (listeners: FastEventListenerMeta[], message: TypedFastEventMessage, args: FastEventListenerArgs, execute: (listener: TypedFastEventListener, message: TypedFastEventMessage, args: FastEventListenerArgs, catchErrors?: boolean) => Promise<any> | any) => Promise<any[]> | any[];
type FastListenerExecutor = (listeners: FastEventListenerMeta[], message: TypedFastEventMessage, args: FastEventListenerArgs, execute: (this: FastEventListenerMeta, listener: FastEventListenerMeta, message: TypedFastEventMessage, args: FastEventListenerArgs, catchErrors?: boolean) => Promise<any> | any) => Promise<any[]> | any[];
type FastListenerExecutorBuilder<T extends Record<string, any>> = (options?: T) => FastListenerExecutor;

@@ -110,0 +112,0 @@

@@ -91,7 +91,8 @@ type DeepPartial<T> = {

* [
* 监听器函数引用,
* 需要执行多少次, =0代表不限
* 实际执行的次数(用于负载均衡时记录)
* 标签 用于调试一般可以标识监听器类型或任意信息
* 标识
* 0: 监听器函数引用,
* 1: 需要执行多少次, =0代表不限
* 2: 实际执行的次数(用于负载均衡时记录)
* 3: 标签 用于调试一般可以标识监听器类型或任意信息
* 4: 标识,
* 5: 监听器最后一次执行结果,仅仅在debug时启用,如果结果是对象则是一个WeakRef
* ]

@@ -104,6 +105,7 @@ */

string,
number
number,
any?
];
type FastListenerExecutor = (listeners: FastEventListenerMeta[], message: TypedFastEventMessage, args: FastEventListenerArgs, execute: (listener: TypedFastEventListener, message: TypedFastEventMessage, args: FastEventListenerArgs, catchErrors?: boolean) => Promise<any> | any) => Promise<any[]> | any[];
type FastListenerExecutor = (listeners: FastEventListenerMeta[], message: TypedFastEventMessage, args: FastEventListenerArgs, execute: (this: FastEventListenerMeta, listener: FastEventListenerMeta, message: TypedFastEventMessage, args: FastEventListenerArgs, catchErrors?: boolean) => Promise<any> | any) => Promise<any[]> | any[];
type FastListenerExecutorBuilder<T extends Record<string, any>> = (options?: T) => FastListenerExecutor;

@@ -110,0 +112,0 @@

@@ -1,2 +0,2 @@

'use strict';var S=Object.defineProperty;var t=(r,n)=>S(r,"name",{value:n,configurable:true});var j=t(()=>(r,n,o,f)=>(r.forEach(e=>e[2]--),r[0][2]++,[f(r[0][0],n,o)]),"first");var w=t(()=>(r,n,o,f)=>(r.forEach(e=>e[2]--),r[r.length-1][2]++,[f(r[r.length-1][0],n,o)]),"last");var N=t(()=>(r,n,o,f)=>{let e,i;return (!o||o&&!o.abortSignal)&&(i=new AbortController,o||(o={}),o.abortSignal=i.signal),[Promise.race(r.map(c=>(c[2]--,Promise.resolve(f(c[0],n,o)).then(l=>(e||(e=c,c[2]++),i?.abort(),l)))))]},"race");var L=t(()=>(r,n,o,f)=>{let e=Math.floor(Math.random()*r.length);return r.forEach(i=>i[2]--),r[e][2]++,[f(r[e][0],n,o)]},"random");var W=t(()=>(r,n,o,f)=>{let e,i=0;return r.forEach((u,c)=>{u[2]--,(e===void 0||e>u[2])&&(e=u[2],i=c);}),r[i][2]++,[f(r[i][0],n,o)]},"balance");function s(r){return r&&typeof r=="function"}t(s,"isFunction");function d(r){return r&&typeof r=="string"}t(d,"isString");var _=t(r=>{let{reverse:n,onNext:o,onReturns:f,onError:e}=Object.assign({reverse:false,onError:t(()=>{},"onError"),onNext:t(()=>true,"onNext"),onReturns:t((i,u)=>u,"onReturns")},r);return async(i,u,c,l)=>{let p,a,y=0;i.forEach(x=>x[2]--);for(let x=0;x<i.length;x++){let b=i[n?i.length-1-x:x],E=b[0];try{if(s(o)&&o(++y,a,u,c,p)===!1)break;a=await l(E,u,c,!1),s(f)?p=f(p,a):p=a,b[2]++;}catch(h){try{let m=d(e)?e:s(e)&&e(h,u,c);if(m==="skip")continue;if(m==="error"){p=h;break}else if(m==="abort")break}catch{}}}return p}},"series");var dr=t(r=>_(Object.assign({},r,{onError:"abort",onNext:t((n,o,f)=>{f.payload=o;},"onNext")})),"waterfall");var Er=t(()=>(r,n,o,f)=>r.map(e=>f(e[0],n,o,true)),"parallel");exports.balance=W;exports.first=j;exports.last=w;exports.parallel=Er;exports.race=N;exports.random=L;exports.series=_;exports.waterfall=dr;//# sourceMappingURL=index.js.map
'use strict';var v=Object.defineProperty;var o=(r,c)=>v(r,"name",{value:c,configurable:true});var S=o(()=>(r,c,t,a)=>(r.forEach(e=>e[2]--),r[0][2]++,[a.call(r[0],r[0],c,t)]),"first");var j=o(()=>(r,c,t,a)=>(r.forEach(e=>e[2]--),r[r.length-1][2]++,[a.call(r[r.length-1],r[r.length-1],c,t)]),"last");var M=o(()=>(r,c,t,a)=>{let e,n;return (!t||t&&!t.abortSignal)&&(n=new AbortController,t||(t={}),t.abortSignal=n.signal),[Promise.race(r.map(f=>(f[2]--,Promise.resolve(a.call(f,f,c,t)).then(m=>(e||(e=f,f[2]++),n?.abort(),m)))))]},"race");var A=o(()=>(r,c,t,a)=>{let e=Math.floor(Math.random()*r.length);return r.forEach(n=>n[2]--),r[e][2]++,[a.call(r[e],r[e],c,t)]},"random");var z=o(()=>(r,c,t,a)=>{let e,n=0;return r.forEach((u,f)=>{u[2]--,(e===void 0||e>u[2])&&(e=u[2],n=f);}),r[n][2]++,[a.call(r[n],r[n],c,t)]},"balance");function i(r){return r&&typeof r=="function"}o(i,"isFunction");function y(r){return r&&typeof r=="string"}o(y,"isString");var g=o(r=>{let{reverse:c,onNext:t,onReturns:a,onError:e}=Object.assign({reverse:false,onError:o(()=>{},"onError"),onNext:o(()=>true,"onNext"),onReturns:o((n,u)=>u,"onReturns")},r);return async(n,u,f,m)=>{let l,x,k=0;n.forEach(p=>p[2]--);for(let p=0;p<n.length;p++){let b=n[c?n.length-1-p:p],d=b;try{if(i(t)&&t(++k,x,u,f,l)===!1)break;x=await m.call(d,d,u,f,!1),i(a)?l=a(l,x):l=x,b[2]++;}catch(E){try{let h=y(e)?e:i(e)&&e(E,u,f);if(h==="skip")continue;if(h==="error"){l=E;break}else if(h==="abort")break}catch{}}}return l}},"series");var V=o(r=>g(Object.assign({},r,{onError:"abort",onNext:o((c,t,a)=>{a.payload=t;},"onNext")})),"waterfall");var Y=o(()=>(r,c,t,a)=>r.map((e,n)=>a.call(r[n],e,c,t,true)),"parallel");exports.balance=z;exports.first=S;exports.last=j;exports.parallel=Y;exports.race=M;exports.random=A;exports.series=g;exports.waterfall=V;//# sourceMappingURL=index.js.map
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"sources":["../../src/executors/first.ts","../../src/executors/last.ts","../../src/executors/race.ts","../../src/executors/random.ts","../../src/executors/balance.ts","../../src/utils/isFunction.ts","../../src/utils/isString.ts","../../src/executors/series.ts","../../src/executors/waterfall.ts","../../src/executors/parallel.ts"],"names":["first","__name","listeners","message","args","execute","forEach","listener","last","length","race","winner","abortController","abortSignal","AbortController","signal","Promise","map","resolve","then","result","abort","random","index","Math","floor","balance","count","i","undefined","isFunction","fn","isString","str","series","options","reverse","onNext","onReturns","onError","Object","assign","_","cur","results","stepResult","item","e","behavior","waterfall","previous","payload","parallel"],"mappings":"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","file":"index.js","sourcesContent":["import { FastListenerExecutor } from \"./types\"\n\n/**\n * 执行第一个监听器的执行器函数\n * \n * @param listeners - 监听器数组,每个元素是一个包含监听器函数的元组\n * @param message - 要传递给监听器的消息对象\n * @param args - 要传递给监听器的额外参数\n * @param execute - 执行监听器的函数\n * @returns 返回一个数组,包含第一个监听器的执行结果\n */\nexport const first = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n listeners.forEach(listener => listener[2]--)\n listeners[0][2]++\n return [\n execute(listeners[0][0], message, args)\n ]\n }\n}","import { FastListenerExecutor } from \"./types\"\n\n/**\n * 执行监听器列表中的最后一个监听器\n * @param listeners - 监听器数组\n * @param message - 事件消息\n * @param args - 事件参数\n * @param execute - 执行器函数\n * @returns 返回包含最后一个监听器执行结果的数组\n */\nexport const last = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n listeners.forEach(listener => listener[2]--)\n listeners[listeners.length - 1][2]++\n return [\n execute(listeners[listeners.length - 1][0], message, args)\n ]\n }\n}","import { FastEventListenerMeta } from \"../types/FastEventListeners\";\nimport { FastListenerExecutor } from \"./types\";\n\n/**\n * 竞态执行器 - 同时执行多个监听器,只返回最快完成的结果\n *\n * @param listeners - 监听器元数据列表\n * @param message - 要处理的消息\n * @param args - 执行参数\n * @param execute - 执行函数\n * @returns 包含最快完成监听器结果的数组\n *\n * @description\n * - 只有第一个完成的监听器结果会被返回\n * - 其他未完成的监听器会被中止\n * - 如果没有提供中止信号,会自动创建一个\n * - 胜出的监听器计数会被恢复\n */\nexport const race = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n let winner: FastEventListenerMeta | undefined;\n let abortController: AbortController | undefined;\n if (!args || (args && !args.abortSignal)) {\n abortController = new AbortController();\n if (!args) args = {};\n args.abortSignal = abortController.signal;\n }\n const result = Promise.race(\n listeners.map((listener) => {\n listener[2]--;\n return Promise.resolve(execute(listener[0], message, args)).then((result: any) => {\n if (!winner) {\n winner = listener;\n listener[2]++;\n }\n abortController?.abort();\n return result;\n });\n }),\n );\n return [result];\n };\n};\n","import { FastListenerExecutor } from \"./types\"\n\n/**\n * 随机执行器 - 从监听器列表中随机选择一个监听器执行\n * \n * @param listeners - 监听器列表,每个元素为 [监听器函数, 优先级, 执行次数] 的元组\n * @param message - 要处理的消息对象\n * @param args - 传递给监听器的额外参数\n * @param execute - 执行监听器的函数\n * @returns 返回包含执行结果的数组\n * \n * @remarks\n * - 随机选择一个监听器执行\n * - 所有监听器的执行次数计数减1\n * - 被选中执行的监听器执行次数加1\n */\nexport const random = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n const index = Math.floor(Math.random() * listeners.length)\n listeners.forEach(listener => listener[2]--)\n listeners[index][2]++\n return [\n execute(listeners[index][0], message, args)\n ]\n }\n}","import { FastListenerExecutor } from \"./types\"\n\n/**\n * 负载均衡执行器,用于在多个监听器中选择执行次数最少的进行调用\n * @param listeners 监听器列表\n * @param message 消息对象\n * @param args 参数列表\n * @param execute 执行函数\n * @returns 返回包含单个执行结果的数组\n * \n * 执行策略:\n * 1. 遍历所有监听器,找出执行次数最少的监听器\n * 2. 由于监听器执行后会自动+1,因此先对所有监听器执行次数-1,以抵消后续的+1\n * 3. 只执行选中的监听器,其他监听器不执行\n */\nexport const balance = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n // 找出listeners里面所有执行器的执行次数最少的项\n let count: number\n let index: number = 0\n listeners.forEach((listener, i) => {\n // 为什么所有监听器的执行次数均减1?\n // 因为监听器执行完毕后会自动+1,但是在balance执行器中,只有一个会监听器会执行,因此在此先减一用来抵消后续的+1\n listener[2]--\n if (count === undefined || count > listener[2]) {\n count = listener[2]\n index = i\n }\n })\n listeners[index][2]++\n return [execute(listeners[index][0], message, args)]\n }\n}","export function isFunction(fn: any): fn is Function {\n return fn && typeof (fn) == \"function\"\n}","export function isString(str: any): str is string {\n return str && typeof (str) === \"string\"\n}","import { TypedFastEventMessage } from \"../types/FastEventMessages\";\nimport { TypedFastEventListener } from \"../types/FastEventListeners\";\nimport { FastEventListenerArgs } from \"../types/FastEvents\";\nimport { isString } from \"../utils\";\nimport { isFunction } from \"../utils/isFunction\";\nimport { FastListenerExecutor } from \"./types\";\n\nexport type SeriesExecutorOptions = {\n reverse?: boolean; // 反向执行监听器\n /**\n * 控制监听器如何返回结果\n *\n * 提供一个reduce函数对所有监听器返回结果进行reduce操作\n * series({\n * onReturns: (result, cur)=>{\n * if(!result) result = []\n * return result.push(cur)\n * }\n * })\n */\n onReturns?: (results: any, cur: any) => any;\n // 当调用下一个监听器前执行,返回false或触发错误均不再执行后续的监听器\n // 可以在此修改message\n onNext?: (\n index: number,\n previous: any,\n message: TypedFastEventMessage,\n args: FastEventListenerArgs,\n results: any,\n ) => boolean;\n // 当执行监听器出错时的回调,返回false中止后续执行\n onError?:\n | \"skip\"\n | \"abort\"\n | \"error\"\n | ((\n e: any,\n message: TypedFastEventMessage,\n args: FastEventListenerArgs,\n ) => void | \"skip\" | \"abort\" | \"error\");\n};\n\nexport const series = (options?: SeriesExecutorOptions): FastListenerExecutor => {\n const { reverse, onNext, onReturns, onError } = Object.assign(\n {\n reverse: false,\n onError: () => {},\n onNext: () => true,\n onReturns: (_: any, cur: any) => cur,\n },\n options,\n ) as SeriesExecutorOptions;\n return async (listeners, message, args, execute) => {\n let results: any = undefined;\n let stepResult: any = undefined;\n let index: number = 0;\n // 全部执行次数-1\n listeners.forEach((listener) => listener[2]--);\n for (let i = 0; i < listeners.length; i++) {\n const item = listeners[reverse ? listeners.length - 1 - i : i];\n const listener = item[0] as TypedFastEventListener<any, any, any>;\n try {\n if (\n isFunction(onNext) &&\n onNext(++index, stepResult, message, args, results) === false\n ) {\n break;\n }\n stepResult = await execute(listener, message, args, false);\n if (isFunction(onReturns)) {\n results = onReturns(results, stepResult);\n } else {\n results = stepResult;\n }\n // 实际执行次数+1\n item[2]++;\n } catch (e: any) {\n try {\n const behavior = isString(onError)\n ? onError\n : isFunction(onError) && onError!(e, message, args);\n if (behavior === \"skip\") {\n continue;\n } else if (behavior === \"error\") {\n results = e;\n break;\n } else if (behavior === \"abort\") {\n break;\n }\n } catch {}\n }\n }\n return results;\n };\n};\n","import { TypedFastEventMessage } from \"../types/FastEventMessages\";\nimport { series, SeriesExecutorOptions } from \"./series\";\nimport { FastListenerExecutor } from \"./types\";\n\nexport type WaterfallExecutorOptions = Omit<\n SeriesExecutorOptions,\n \"onError\" | \"onReturns\" | \"onStep\"\n>;\n\n/**\n * 创建一个瀑布流执行器,用于按顺序执行监听器,并将前一个监听器的结果传递给下一个监听器\n * 如果出错就不再执行后续的监听器\n *\n * @param options - 执行器配置选项\n * @returns 返回一个 FastListener 执行器实例\n *\n * @remarks\n * - 当任一监听器执行出错时,会中断后续监听器的执行\n * - 每个监听器的执行结果会作为下一个监听器的 payload 参数\n */\nexport const waterfall = (options?: WaterfallExecutorOptions): FastListenerExecutor => {\n return series(\n Object.assign({}, options, {\n // 出错时不再执行后续的监听器\n onError: \"abort\",\n // 将结果作为payload传给下一个监听器\n onNext: (index: number, previous: any, message: TypedFastEventMessage) => {\n message.payload = previous;\n },\n }) as unknown as SeriesExecutorOptions,\n );\n};\n","import { FastListenerExecutor } from \"./types\"\n\n/**\n * \n */\nexport const parallel = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n return listeners.map(listener => execute(listener[0], message, args, true))\n }\n}"]}
{"version":3,"sources":["../../src/executors/first.ts","../../src/executors/last.ts","../../src/executors/race.ts","../../src/executors/random.ts","../../src/executors/balance.ts","../../src/utils/isFunction.ts","../../src/utils/isString.ts","../../src/executors/series.ts","../../src/executors/waterfall.ts","../../src/executors/parallel.ts"],"names":["first","__name","listeners","message","args","execute","forEach","listener","call","last","length","race","winner","abortController","abortSignal","AbortController","signal","Promise","map","resolve","then","result","abort","random","index","Math","floor","balance","count","i","undefined","isFunction","fn","isString","str","series","options","reverse","onNext","onReturns","onError","Object","assign","_","cur","results","stepResult","item","e","behavior","waterfall","previous","payload","parallel"],"mappings":"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","file":"index.js","sourcesContent":["import { FastListenerExecutor } from \"./types\";\n\n/**\n * 执行第一个监听器的执行器函数\n *\n * @param listeners - 监听器数组,每个元素是一个包含监听器函数的元组\n * @param message - 要传递给监听器的消息对象\n * @param args - 要传递给监听器的额外参数\n * @param execute - 执行监听器的函数\n * @returns 返回一个数组,包含第一个监听器的执行结果\n */\nexport const first = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n listeners.forEach((listener) => listener[2]--);\n listeners[0][2]++;\n return [execute.call(listeners[0], listeners[0], message, args)];\n };\n};\n","import { FastListenerExecutor } from \"./types\";\n\n/**\n * 执行监听器列表中的最后一个监听器\n * @param listeners - 监听器数组\n * @param message - 事件消息\n * @param args - 事件参数\n * @param execute - 执行器函数\n * @returns 返回包含最后一个监听器执行结果的数组\n */\nexport const last = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n listeners.forEach((listener) => listener[2]--);\n listeners[listeners.length - 1][2]++;\n return [\n execute.call(\n listeners[listeners.length - 1],\n listeners[listeners.length - 1],\n message,\n args,\n ),\n ];\n };\n};\n","import { FastEventListenerMeta } from \"../types/FastEventListeners\";\nimport { FastListenerExecutor } from \"./types\";\n\n/**\n * 竞态执行器 - 同时执行多个监听器,只返回最快完成的结果\n *\n * @param listeners - 监听器元数据列表\n * @param message - 要处理的消息\n * @param args - 执行参数\n * @param execute - 执行函数\n * @returns 包含最快完成监听器结果的数组\n *\n * @description\n * - 只有第一个完成的监听器结果会被返回\n * - 其他未完成的监听器会被中止\n * - 如果没有提供中止信号,会自动创建一个\n * - 胜出的监听器计数会被恢复\n */\nexport const race = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n let winner: FastEventListenerMeta | undefined;\n let abortController: AbortController | undefined;\n if (!args || (args && !args.abortSignal)) {\n abortController = new AbortController();\n if (!args) args = {};\n args.abortSignal = abortController.signal;\n }\n const result = Promise.race(\n listeners.map((listener) => {\n listener[2]--;\n return Promise.resolve(execute.call(listener, listener, message, args)).then(\n (result: any) => {\n if (!winner) {\n winner = listener;\n listener[2]++;\n }\n abortController?.abort();\n return result;\n },\n );\n }),\n );\n return [result];\n };\n};\n","import { FastListenerExecutor } from \"./types\";\n\n/**\n * 随机执行器 - 从监听器列表中随机选择一个监听器执行\n *\n * @param listeners - 监听器列表,每个元素为 [监听器函数, 优先级, 执行次数] 的元组\n * @param message - 要处理的消息对象\n * @param args - 传递给监听器的额外参数\n * @param execute - 执行监听器的函数\n * @returns 返回包含执行结果的数组\n *\n * @remarks\n * - 随机选择一个监听器执行\n * - 所有监听器的执行次数计数减1\n * - 被选中执行的监听器执行次数加1\n */\nexport const random = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n const index = Math.floor(Math.random() * listeners.length);\n listeners.forEach((listener) => listener[2]--);\n listeners[index][2]++;\n return [execute.call(listeners[index], listeners[index], message, args)];\n };\n};\n","import { FastListenerExecutor } from \"./types\";\n\n/**\n * 负载均衡执行器,用于在多个监听器中选择执行次数最少的进行调用\n * @param listeners 监听器列表\n * @param message 消息对象\n * @param args 参数列表\n * @param execute 执行函数\n * @returns 返回包含单个执行结果的数组\n *\n * 执行策略:\n * 1. 遍历所有监听器,找出执行次数最少的监听器\n * 2. 由于监听器执行后会自动+1,因此先对所有监听器执行次数-1,以抵消后续的+1\n * 3. 只执行选中的监听器,其他监听器不执行\n */\nexport const balance = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n // 找出listeners里面所有执行器的执行次数最少的项\n let count: number;\n let index: number = 0;\n listeners.forEach((listener, i) => {\n // 为什么所有监听器的执行次数均减1?\n // 因为监听器执行完毕后会自动+1,但是在balance执行器中,只有一个会监听器会执行,因此在此先减一用来抵消后续的+1\n listener[2]--;\n if (count === undefined || count > listener[2]) {\n count = listener[2];\n index = i;\n }\n });\n listeners[index][2]++;\n return [execute.call(listeners[index], listeners[index], message, args)];\n };\n};\n","export function isFunction(fn: any): fn is Function {\n return fn && typeof (fn) == \"function\"\n}","export function isString(str: any): str is string {\n return str && typeof (str) === \"string\"\n}","import { TypedFastEventMessage } from \"../types/FastEventMessages\";\nimport { FastEventListenerMeta, TypedFastEventListener } from \"../types/FastEventListeners\";\nimport { FastEventListenerArgs } from \"../types/FastEvents\";\nimport { isString } from \"../utils\";\nimport { isFunction } from \"../utils/isFunction\";\nimport { FastListenerExecutor } from \"./types\";\n\nexport type SeriesExecutorOptions = {\n reverse?: boolean; // 反向执行监听器\n /**\n * 控制监听器如何返回结果\n *\n * 提供一个reduce函数对所有监听器返回结果进行reduce操作\n * series({\n * onReturns: (result, cur)=>{\n * if(!result) result = []\n * return result.push(cur)\n * }\n * })\n */\n onReturns?: (results: any, cur: any) => any;\n // 当调用下一个监听器前执行,返回false或触发错误均不再执行后续的监听器\n // 可以在此修改message\n onNext?: (\n index: number,\n previous: any,\n message: TypedFastEventMessage,\n args: FastEventListenerArgs,\n results: any,\n ) => boolean;\n // 当执行监听器出错时的回调,返回false中止后续执行\n onError?:\n | \"skip\"\n | \"abort\"\n | \"error\"\n | ((\n e: any,\n message: TypedFastEventMessage,\n args: FastEventListenerArgs,\n ) => void | \"skip\" | \"abort\" | \"error\");\n};\n\nexport const series = (options?: SeriesExecutorOptions): FastListenerExecutor => {\n const { reverse, onNext, onReturns, onError } = Object.assign(\n {\n reverse: false,\n onError: () => {},\n onNext: () => true,\n onReturns: (_: any, cur: any) => cur,\n },\n options,\n ) as SeriesExecutorOptions;\n return async (listeners, message, args, execute) => {\n let results: any = undefined;\n let stepResult: any = undefined;\n let index: number = 0;\n // 全部执行次数-1\n listeners.forEach((listener) => listener[2]--);\n for (let i = 0; i < listeners.length; i++) {\n const item = listeners[reverse ? listeners.length - 1 - i : i];\n const listener = item as unknown as FastEventListenerMeta;\n try {\n if (\n isFunction(onNext) &&\n onNext(++index, stepResult, message, args, results) === false\n ) {\n break;\n }\n stepResult = await execute.call(listener, listener, message, args, false);\n if (isFunction(onReturns)) {\n results = onReturns(results, stepResult);\n } else {\n results = stepResult;\n }\n // 实际执行次数+1\n item[2]++;\n } catch (e: any) {\n try {\n const behavior = isString(onError)\n ? onError\n : isFunction(onError) && onError!(e, message, args);\n if (behavior === \"skip\") {\n continue;\n } else if (behavior === \"error\") {\n results = e;\n break;\n } else if (behavior === \"abort\") {\n break;\n }\n } catch {}\n }\n }\n return results;\n };\n};\n","import { TypedFastEventMessage } from \"../types/FastEventMessages\";\nimport { series, SeriesExecutorOptions } from \"./series\";\nimport { FastListenerExecutor } from \"./types\";\n\nexport type WaterfallExecutorOptions = Omit<\n SeriesExecutorOptions,\n \"onError\" | \"onReturns\" | \"onStep\"\n>;\n\n/**\n * 创建一个瀑布流执行器,用于按顺序执行监听器,并将前一个监听器的结果传递给下一个监听器\n * 如果出错就不再执行后续的监听器\n *\n * @param options - 执行器配置选项\n * @returns 返回一个 FastListener 执行器实例\n *\n * @remarks\n * - 当任一监听器执行出错时,会中断后续监听器的执行\n * - 每个监听器的执行结果会作为下一个监听器的 payload 参数\n */\nexport const waterfall = (options?: WaterfallExecutorOptions): FastListenerExecutor => {\n return series(\n Object.assign({}, options, {\n // 出错时不再执行后续的监听器\n onError: \"abort\",\n // 将结果作为payload传给下一个监听器\n onNext: (index: number, previous: any, message: TypedFastEventMessage) => {\n message.payload = previous;\n },\n }) as unknown as SeriesExecutorOptions,\n );\n};\n","import { FastListenerExecutor } from \"./types\";\n\n/**\n *\n */\nexport const parallel = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n return listeners.map((listener, i) =>\n execute.call(listeners[i], listener, message, args, true),\n );\n };\n};\n"]}

@@ -1,2 +0,2 @@

var S=Object.defineProperty;var t=(r,n)=>S(r,"name",{value:n,configurable:true});var j=t(()=>(r,n,o,f)=>(r.forEach(e=>e[2]--),r[0][2]++,[f(r[0][0],n,o)]),"first");var w=t(()=>(r,n,o,f)=>(r.forEach(e=>e[2]--),r[r.length-1][2]++,[f(r[r.length-1][0],n,o)]),"last");var N=t(()=>(r,n,o,f)=>{let e,i;return (!o||o&&!o.abortSignal)&&(i=new AbortController,o||(o={}),o.abortSignal=i.signal),[Promise.race(r.map(c=>(c[2]--,Promise.resolve(f(c[0],n,o)).then(l=>(e||(e=c,c[2]++),i?.abort(),l)))))]},"race");var L=t(()=>(r,n,o,f)=>{let e=Math.floor(Math.random()*r.length);return r.forEach(i=>i[2]--),r[e][2]++,[f(r[e][0],n,o)]},"random");var W=t(()=>(r,n,o,f)=>{let e,i=0;return r.forEach((u,c)=>{u[2]--,(e===void 0||e>u[2])&&(e=u[2],i=c);}),r[i][2]++,[f(r[i][0],n,o)]},"balance");function s(r){return r&&typeof r=="function"}t(s,"isFunction");function d(r){return r&&typeof r=="string"}t(d,"isString");var _=t(r=>{let{reverse:n,onNext:o,onReturns:f,onError:e}=Object.assign({reverse:false,onError:t(()=>{},"onError"),onNext:t(()=>true,"onNext"),onReturns:t((i,u)=>u,"onReturns")},r);return async(i,u,c,l)=>{let p,a,y=0;i.forEach(x=>x[2]--);for(let x=0;x<i.length;x++){let b=i[n?i.length-1-x:x],E=b[0];try{if(s(o)&&o(++y,a,u,c,p)===!1)break;a=await l(E,u,c,!1),s(f)?p=f(p,a):p=a,b[2]++;}catch(h){try{let m=d(e)?e:s(e)&&e(h,u,c);if(m==="skip")continue;if(m==="error"){p=h;break}else if(m==="abort")break}catch{}}}return p}},"series");var dr=t(r=>_(Object.assign({},r,{onError:"abort",onNext:t((n,o,f)=>{f.payload=o;},"onNext")})),"waterfall");var Er=t(()=>(r,n,o,f)=>r.map(e=>f(e[0],n,o,true)),"parallel");export{W as balance,j as first,w as last,Er as parallel,N as race,L as random,_ as series,dr as waterfall};//# sourceMappingURL=index.mjs.map
var v=Object.defineProperty;var o=(r,c)=>v(r,"name",{value:c,configurable:true});var S=o(()=>(r,c,t,a)=>(r.forEach(e=>e[2]--),r[0][2]++,[a.call(r[0],r[0],c,t)]),"first");var j=o(()=>(r,c,t,a)=>(r.forEach(e=>e[2]--),r[r.length-1][2]++,[a.call(r[r.length-1],r[r.length-1],c,t)]),"last");var M=o(()=>(r,c,t,a)=>{let e,n;return (!t||t&&!t.abortSignal)&&(n=new AbortController,t||(t={}),t.abortSignal=n.signal),[Promise.race(r.map(f=>(f[2]--,Promise.resolve(a.call(f,f,c,t)).then(m=>(e||(e=f,f[2]++),n?.abort(),m)))))]},"race");var A=o(()=>(r,c,t,a)=>{let e=Math.floor(Math.random()*r.length);return r.forEach(n=>n[2]--),r[e][2]++,[a.call(r[e],r[e],c,t)]},"random");var z=o(()=>(r,c,t,a)=>{let e,n=0;return r.forEach((u,f)=>{u[2]--,(e===void 0||e>u[2])&&(e=u[2],n=f);}),r[n][2]++,[a.call(r[n],r[n],c,t)]},"balance");function i(r){return r&&typeof r=="function"}o(i,"isFunction");function y(r){return r&&typeof r=="string"}o(y,"isString");var g=o(r=>{let{reverse:c,onNext:t,onReturns:a,onError:e}=Object.assign({reverse:false,onError:o(()=>{},"onError"),onNext:o(()=>true,"onNext"),onReturns:o((n,u)=>u,"onReturns")},r);return async(n,u,f,m)=>{let l,x,k=0;n.forEach(p=>p[2]--);for(let p=0;p<n.length;p++){let b=n[c?n.length-1-p:p],d=b;try{if(i(t)&&t(++k,x,u,f,l)===!1)break;x=await m.call(d,d,u,f,!1),i(a)?l=a(l,x):l=x,b[2]++;}catch(E){try{let h=y(e)?e:i(e)&&e(E,u,f);if(h==="skip")continue;if(h==="error"){l=E;break}else if(h==="abort")break}catch{}}}return l}},"series");var V=o(r=>g(Object.assign({},r,{onError:"abort",onNext:o((c,t,a)=>{a.payload=t;},"onNext")})),"waterfall");var Y=o(()=>(r,c,t,a)=>r.map((e,n)=>a.call(r[n],e,c,t,true)),"parallel");export{z as balance,S as first,j as last,Y as parallel,M as race,A as random,g as series,V as waterfall};//# sourceMappingURL=index.mjs.map
//# sourceMappingURL=index.mjs.map

@@ -1,1 +0,1 @@

{"version":3,"sources":["../../src/executors/first.ts","../../src/executors/last.ts","../../src/executors/race.ts","../../src/executors/random.ts","../../src/executors/balance.ts","../../src/utils/isFunction.ts","../../src/utils/isString.ts","../../src/executors/series.ts","../../src/executors/waterfall.ts","../../src/executors/parallel.ts"],"names":["first","__name","listeners","message","args","execute","forEach","listener","last","length","race","winner","abortController","abortSignal","AbortController","signal","Promise","map","resolve","then","result","abort","random","index","Math","floor","balance","count","i","undefined","isFunction","fn","isString","str","series","options","reverse","onNext","onReturns","onError","Object","assign","_","cur","results","stepResult","item","e","behavior","waterfall","previous","payload","parallel"],"mappings":"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","file":"index.mjs","sourcesContent":["import { FastListenerExecutor } from \"./types\"\n\n/**\n * 执行第一个监听器的执行器函数\n * \n * @param listeners - 监听器数组,每个元素是一个包含监听器函数的元组\n * @param message - 要传递给监听器的消息对象\n * @param args - 要传递给监听器的额外参数\n * @param execute - 执行监听器的函数\n * @returns 返回一个数组,包含第一个监听器的执行结果\n */\nexport const first = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n listeners.forEach(listener => listener[2]--)\n listeners[0][2]++\n return [\n execute(listeners[0][0], message, args)\n ]\n }\n}","import { FastListenerExecutor } from \"./types\"\n\n/**\n * 执行监听器列表中的最后一个监听器\n * @param listeners - 监听器数组\n * @param message - 事件消息\n * @param args - 事件参数\n * @param execute - 执行器函数\n * @returns 返回包含最后一个监听器执行结果的数组\n */\nexport const last = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n listeners.forEach(listener => listener[2]--)\n listeners[listeners.length - 1][2]++\n return [\n execute(listeners[listeners.length - 1][0], message, args)\n ]\n }\n}","import { FastEventListenerMeta } from \"../types/FastEventListeners\";\nimport { FastListenerExecutor } from \"./types\";\n\n/**\n * 竞态执行器 - 同时执行多个监听器,只返回最快完成的结果\n *\n * @param listeners - 监听器元数据列表\n * @param message - 要处理的消息\n * @param args - 执行参数\n * @param execute - 执行函数\n * @returns 包含最快完成监听器结果的数组\n *\n * @description\n * - 只有第一个完成的监听器结果会被返回\n * - 其他未完成的监听器会被中止\n * - 如果没有提供中止信号,会自动创建一个\n * - 胜出的监听器计数会被恢复\n */\nexport const race = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n let winner: FastEventListenerMeta | undefined;\n let abortController: AbortController | undefined;\n if (!args || (args && !args.abortSignal)) {\n abortController = new AbortController();\n if (!args) args = {};\n args.abortSignal = abortController.signal;\n }\n const result = Promise.race(\n listeners.map((listener) => {\n listener[2]--;\n return Promise.resolve(execute(listener[0], message, args)).then((result: any) => {\n if (!winner) {\n winner = listener;\n listener[2]++;\n }\n abortController?.abort();\n return result;\n });\n }),\n );\n return [result];\n };\n};\n","import { FastListenerExecutor } from \"./types\"\n\n/**\n * 随机执行器 - 从监听器列表中随机选择一个监听器执行\n * \n * @param listeners - 监听器列表,每个元素为 [监听器函数, 优先级, 执行次数] 的元组\n * @param message - 要处理的消息对象\n * @param args - 传递给监听器的额外参数\n * @param execute - 执行监听器的函数\n * @returns 返回包含执行结果的数组\n * \n * @remarks\n * - 随机选择一个监听器执行\n * - 所有监听器的执行次数计数减1\n * - 被选中执行的监听器执行次数加1\n */\nexport const random = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n const index = Math.floor(Math.random() * listeners.length)\n listeners.forEach(listener => listener[2]--)\n listeners[index][2]++\n return [\n execute(listeners[index][0], message, args)\n ]\n }\n}","import { FastListenerExecutor } from \"./types\"\n\n/**\n * 负载均衡执行器,用于在多个监听器中选择执行次数最少的进行调用\n * @param listeners 监听器列表\n * @param message 消息对象\n * @param args 参数列表\n * @param execute 执行函数\n * @returns 返回包含单个执行结果的数组\n * \n * 执行策略:\n * 1. 遍历所有监听器,找出执行次数最少的监听器\n * 2. 由于监听器执行后会自动+1,因此先对所有监听器执行次数-1,以抵消后续的+1\n * 3. 只执行选中的监听器,其他监听器不执行\n */\nexport const balance = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n // 找出listeners里面所有执行器的执行次数最少的项\n let count: number\n let index: number = 0\n listeners.forEach((listener, i) => {\n // 为什么所有监听器的执行次数均减1?\n // 因为监听器执行完毕后会自动+1,但是在balance执行器中,只有一个会监听器会执行,因此在此先减一用来抵消后续的+1\n listener[2]--\n if (count === undefined || count > listener[2]) {\n count = listener[2]\n index = i\n }\n })\n listeners[index][2]++\n return [execute(listeners[index][0], message, args)]\n }\n}","export function isFunction(fn: any): fn is Function {\n return fn && typeof (fn) == \"function\"\n}","export function isString(str: any): str is string {\n return str && typeof (str) === \"string\"\n}","import { TypedFastEventMessage } from \"../types/FastEventMessages\";\nimport { TypedFastEventListener } from \"../types/FastEventListeners\";\nimport { FastEventListenerArgs } from \"../types/FastEvents\";\nimport { isString } from \"../utils\";\nimport { isFunction } from \"../utils/isFunction\";\nimport { FastListenerExecutor } from \"./types\";\n\nexport type SeriesExecutorOptions = {\n reverse?: boolean; // 反向执行监听器\n /**\n * 控制监听器如何返回结果\n *\n * 提供一个reduce函数对所有监听器返回结果进行reduce操作\n * series({\n * onReturns: (result, cur)=>{\n * if(!result) result = []\n * return result.push(cur)\n * }\n * })\n */\n onReturns?: (results: any, cur: any) => any;\n // 当调用下一个监听器前执行,返回false或触发错误均不再执行后续的监听器\n // 可以在此修改message\n onNext?: (\n index: number,\n previous: any,\n message: TypedFastEventMessage,\n args: FastEventListenerArgs,\n results: any,\n ) => boolean;\n // 当执行监听器出错时的回调,返回false中止后续执行\n onError?:\n | \"skip\"\n | \"abort\"\n | \"error\"\n | ((\n e: any,\n message: TypedFastEventMessage,\n args: FastEventListenerArgs,\n ) => void | \"skip\" | \"abort\" | \"error\");\n};\n\nexport const series = (options?: SeriesExecutorOptions): FastListenerExecutor => {\n const { reverse, onNext, onReturns, onError } = Object.assign(\n {\n reverse: false,\n onError: () => {},\n onNext: () => true,\n onReturns: (_: any, cur: any) => cur,\n },\n options,\n ) as SeriesExecutorOptions;\n return async (listeners, message, args, execute) => {\n let results: any = undefined;\n let stepResult: any = undefined;\n let index: number = 0;\n // 全部执行次数-1\n listeners.forEach((listener) => listener[2]--);\n for (let i = 0; i < listeners.length; i++) {\n const item = listeners[reverse ? listeners.length - 1 - i : i];\n const listener = item[0] as TypedFastEventListener<any, any, any>;\n try {\n if (\n isFunction(onNext) &&\n onNext(++index, stepResult, message, args, results) === false\n ) {\n break;\n }\n stepResult = await execute(listener, message, args, false);\n if (isFunction(onReturns)) {\n results = onReturns(results, stepResult);\n } else {\n results = stepResult;\n }\n // 实际执行次数+1\n item[2]++;\n } catch (e: any) {\n try {\n const behavior = isString(onError)\n ? onError\n : isFunction(onError) && onError!(e, message, args);\n if (behavior === \"skip\") {\n continue;\n } else if (behavior === \"error\") {\n results = e;\n break;\n } else if (behavior === \"abort\") {\n break;\n }\n } catch {}\n }\n }\n return results;\n };\n};\n","import { TypedFastEventMessage } from \"../types/FastEventMessages\";\nimport { series, SeriesExecutorOptions } from \"./series\";\nimport { FastListenerExecutor } from \"./types\";\n\nexport type WaterfallExecutorOptions = Omit<\n SeriesExecutorOptions,\n \"onError\" | \"onReturns\" | \"onStep\"\n>;\n\n/**\n * 创建一个瀑布流执行器,用于按顺序执行监听器,并将前一个监听器的结果传递给下一个监听器\n * 如果出错就不再执行后续的监听器\n *\n * @param options - 执行器配置选项\n * @returns 返回一个 FastListener 执行器实例\n *\n * @remarks\n * - 当任一监听器执行出错时,会中断后续监听器的执行\n * - 每个监听器的执行结果会作为下一个监听器的 payload 参数\n */\nexport const waterfall = (options?: WaterfallExecutorOptions): FastListenerExecutor => {\n return series(\n Object.assign({}, options, {\n // 出错时不再执行后续的监听器\n onError: \"abort\",\n // 将结果作为payload传给下一个监听器\n onNext: (index: number, previous: any, message: TypedFastEventMessage) => {\n message.payload = previous;\n },\n }) as unknown as SeriesExecutorOptions,\n );\n};\n","import { FastListenerExecutor } from \"./types\"\n\n/**\n * \n */\nexport const parallel = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n return listeners.map(listener => execute(listener[0], message, args, true))\n }\n}"]}
{"version":3,"sources":["../../src/executors/first.ts","../../src/executors/last.ts","../../src/executors/race.ts","../../src/executors/random.ts","../../src/executors/balance.ts","../../src/utils/isFunction.ts","../../src/utils/isString.ts","../../src/executors/series.ts","../../src/executors/waterfall.ts","../../src/executors/parallel.ts"],"names":["first","__name","listeners","message","args","execute","forEach","listener","call","last","length","race","winner","abortController","abortSignal","AbortController","signal","Promise","map","resolve","then","result","abort","random","index","Math","floor","balance","count","i","undefined","isFunction","fn","isString","str","series","options","reverse","onNext","onReturns","onError","Object","assign","_","cur","results","stepResult","item","e","behavior","waterfall","previous","payload","parallel"],"mappings":"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","file":"index.mjs","sourcesContent":["import { FastListenerExecutor } from \"./types\";\n\n/**\n * 执行第一个监听器的执行器函数\n *\n * @param listeners - 监听器数组,每个元素是一个包含监听器函数的元组\n * @param message - 要传递给监听器的消息对象\n * @param args - 要传递给监听器的额外参数\n * @param execute - 执行监听器的函数\n * @returns 返回一个数组,包含第一个监听器的执行结果\n */\nexport const first = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n listeners.forEach((listener) => listener[2]--);\n listeners[0][2]++;\n return [execute.call(listeners[0], listeners[0], message, args)];\n };\n};\n","import { FastListenerExecutor } from \"./types\";\n\n/**\n * 执行监听器列表中的最后一个监听器\n * @param listeners - 监听器数组\n * @param message - 事件消息\n * @param args - 事件参数\n * @param execute - 执行器函数\n * @returns 返回包含最后一个监听器执行结果的数组\n */\nexport const last = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n listeners.forEach((listener) => listener[2]--);\n listeners[listeners.length - 1][2]++;\n return [\n execute.call(\n listeners[listeners.length - 1],\n listeners[listeners.length - 1],\n message,\n args,\n ),\n ];\n };\n};\n","import { FastEventListenerMeta } from \"../types/FastEventListeners\";\nimport { FastListenerExecutor } from \"./types\";\n\n/**\n * 竞态执行器 - 同时执行多个监听器,只返回最快完成的结果\n *\n * @param listeners - 监听器元数据列表\n * @param message - 要处理的消息\n * @param args - 执行参数\n * @param execute - 执行函数\n * @returns 包含最快完成监听器结果的数组\n *\n * @description\n * - 只有第一个完成的监听器结果会被返回\n * - 其他未完成的监听器会被中止\n * - 如果没有提供中止信号,会自动创建一个\n * - 胜出的监听器计数会被恢复\n */\nexport const race = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n let winner: FastEventListenerMeta | undefined;\n let abortController: AbortController | undefined;\n if (!args || (args && !args.abortSignal)) {\n abortController = new AbortController();\n if (!args) args = {};\n args.abortSignal = abortController.signal;\n }\n const result = Promise.race(\n listeners.map((listener) => {\n listener[2]--;\n return Promise.resolve(execute.call(listener, listener, message, args)).then(\n (result: any) => {\n if (!winner) {\n winner = listener;\n listener[2]++;\n }\n abortController?.abort();\n return result;\n },\n );\n }),\n );\n return [result];\n };\n};\n","import { FastListenerExecutor } from \"./types\";\n\n/**\n * 随机执行器 - 从监听器列表中随机选择一个监听器执行\n *\n * @param listeners - 监听器列表,每个元素为 [监听器函数, 优先级, 执行次数] 的元组\n * @param message - 要处理的消息对象\n * @param args - 传递给监听器的额外参数\n * @param execute - 执行监听器的函数\n * @returns 返回包含执行结果的数组\n *\n * @remarks\n * - 随机选择一个监听器执行\n * - 所有监听器的执行次数计数减1\n * - 被选中执行的监听器执行次数加1\n */\nexport const random = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n const index = Math.floor(Math.random() * listeners.length);\n listeners.forEach((listener) => listener[2]--);\n listeners[index][2]++;\n return [execute.call(listeners[index], listeners[index], message, args)];\n };\n};\n","import { FastListenerExecutor } from \"./types\";\n\n/**\n * 负载均衡执行器,用于在多个监听器中选择执行次数最少的进行调用\n * @param listeners 监听器列表\n * @param message 消息对象\n * @param args 参数列表\n * @param execute 执行函数\n * @returns 返回包含单个执行结果的数组\n *\n * 执行策略:\n * 1. 遍历所有监听器,找出执行次数最少的监听器\n * 2. 由于监听器执行后会自动+1,因此先对所有监听器执行次数-1,以抵消后续的+1\n * 3. 只执行选中的监听器,其他监听器不执行\n */\nexport const balance = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n // 找出listeners里面所有执行器的执行次数最少的项\n let count: number;\n let index: number = 0;\n listeners.forEach((listener, i) => {\n // 为什么所有监听器的执行次数均减1?\n // 因为监听器执行完毕后会自动+1,但是在balance执行器中,只有一个会监听器会执行,因此在此先减一用来抵消后续的+1\n listener[2]--;\n if (count === undefined || count > listener[2]) {\n count = listener[2];\n index = i;\n }\n });\n listeners[index][2]++;\n return [execute.call(listeners[index], listeners[index], message, args)];\n };\n};\n","export function isFunction(fn: any): fn is Function {\n return fn && typeof (fn) == \"function\"\n}","export function isString(str: any): str is string {\n return str && typeof (str) === \"string\"\n}","import { TypedFastEventMessage } from \"../types/FastEventMessages\";\nimport { FastEventListenerMeta, TypedFastEventListener } from \"../types/FastEventListeners\";\nimport { FastEventListenerArgs } from \"../types/FastEvents\";\nimport { isString } from \"../utils\";\nimport { isFunction } from \"../utils/isFunction\";\nimport { FastListenerExecutor } from \"./types\";\n\nexport type SeriesExecutorOptions = {\n reverse?: boolean; // 反向执行监听器\n /**\n * 控制监听器如何返回结果\n *\n * 提供一个reduce函数对所有监听器返回结果进行reduce操作\n * series({\n * onReturns: (result, cur)=>{\n * if(!result) result = []\n * return result.push(cur)\n * }\n * })\n */\n onReturns?: (results: any, cur: any) => any;\n // 当调用下一个监听器前执行,返回false或触发错误均不再执行后续的监听器\n // 可以在此修改message\n onNext?: (\n index: number,\n previous: any,\n message: TypedFastEventMessage,\n args: FastEventListenerArgs,\n results: any,\n ) => boolean;\n // 当执行监听器出错时的回调,返回false中止后续执行\n onError?:\n | \"skip\"\n | \"abort\"\n | \"error\"\n | ((\n e: any,\n message: TypedFastEventMessage,\n args: FastEventListenerArgs,\n ) => void | \"skip\" | \"abort\" | \"error\");\n};\n\nexport const series = (options?: SeriesExecutorOptions): FastListenerExecutor => {\n const { reverse, onNext, onReturns, onError } = Object.assign(\n {\n reverse: false,\n onError: () => {},\n onNext: () => true,\n onReturns: (_: any, cur: any) => cur,\n },\n options,\n ) as SeriesExecutorOptions;\n return async (listeners, message, args, execute) => {\n let results: any = undefined;\n let stepResult: any = undefined;\n let index: number = 0;\n // 全部执行次数-1\n listeners.forEach((listener) => listener[2]--);\n for (let i = 0; i < listeners.length; i++) {\n const item = listeners[reverse ? listeners.length - 1 - i : i];\n const listener = item as unknown as FastEventListenerMeta;\n try {\n if (\n isFunction(onNext) &&\n onNext(++index, stepResult, message, args, results) === false\n ) {\n break;\n }\n stepResult = await execute.call(listener, listener, message, args, false);\n if (isFunction(onReturns)) {\n results = onReturns(results, stepResult);\n } else {\n results = stepResult;\n }\n // 实际执行次数+1\n item[2]++;\n } catch (e: any) {\n try {\n const behavior = isString(onError)\n ? onError\n : isFunction(onError) && onError!(e, message, args);\n if (behavior === \"skip\") {\n continue;\n } else if (behavior === \"error\") {\n results = e;\n break;\n } else if (behavior === \"abort\") {\n break;\n }\n } catch {}\n }\n }\n return results;\n };\n};\n","import { TypedFastEventMessage } from \"../types/FastEventMessages\";\nimport { series, SeriesExecutorOptions } from \"./series\";\nimport { FastListenerExecutor } from \"./types\";\n\nexport type WaterfallExecutorOptions = Omit<\n SeriesExecutorOptions,\n \"onError\" | \"onReturns\" | \"onStep\"\n>;\n\n/**\n * 创建一个瀑布流执行器,用于按顺序执行监听器,并将前一个监听器的结果传递给下一个监听器\n * 如果出错就不再执行后续的监听器\n *\n * @param options - 执行器配置选项\n * @returns 返回一个 FastListener 执行器实例\n *\n * @remarks\n * - 当任一监听器执行出错时,会中断后续监听器的执行\n * - 每个监听器的执行结果会作为下一个监听器的 payload 参数\n */\nexport const waterfall = (options?: WaterfallExecutorOptions): FastListenerExecutor => {\n return series(\n Object.assign({}, options, {\n // 出错时不再执行后续的监听器\n onError: \"abort\",\n // 将结果作为payload传给下一个监听器\n onNext: (index: number, previous: any, message: TypedFastEventMessage) => {\n message.payload = previous;\n },\n }) as unknown as SeriesExecutorOptions,\n );\n};\n","import { FastListenerExecutor } from \"./types\";\n\n/**\n *\n */\nexport const parallel = (): FastListenerExecutor => {\n return (listeners, message, args, execute) => {\n return listeners.map((listener, i) =>\n execute.call(listeners[i], listener, message, args, true),\n );\n };\n};\n"]}

@@ -1,2 +0,2 @@

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

@@ -1,2 +0,2 @@

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

@@ -52,3 +52,3 @@ type DeepPartial<T> = {

type FastListenerExecutor = (listeners: FastEventListenerMeta[], message: TypedFastEventMessage, args: FastEventListenerArgs, execute: (listener: TypedFastEventListener, message: TypedFastEventMessage, args: FastEventListenerArgs, catchErrors?: boolean) => Promise<any> | any) => Promise<any[]> | any[];
type FastListenerExecutor = (listeners: FastEventListenerMeta[], message: TypedFastEventMessage, args: FastEventListenerArgs, execute: (this: FastEventListenerMeta, listener: FastEventListenerMeta, message: TypedFastEventMessage, args: FastEventListenerArgs, catchErrors?: boolean) => Promise<any> | any) => Promise<any[]> | any[];

@@ -94,7 +94,8 @@ /**

* [
* 监听器函数引用,
* 需要执行多少次, =0代表不限
* 实际执行的次数(用于负载均衡时记录)
* 标签 用于调试一般可以标识监听器类型或任意信息
* 标识
* 0: 监听器函数引用,
* 1: 需要执行多少次, =0代表不限
* 2: 实际执行的次数(用于负载均衡时记录)
* 3: 标签 用于调试一般可以标识监听器类型或任意信息
* 4: 标识,
* 5: 监听器最后一次执行结果,仅仅在debug时启用,如果结果是对象则是一个WeakRef
* ]

@@ -107,3 +108,4 @@ */

string,
number
number,
any?
];

@@ -110,0 +112,0 @@

@@ -52,3 +52,3 @@ type DeepPartial<T> = {

type FastListenerExecutor = (listeners: FastEventListenerMeta[], message: TypedFastEventMessage, args: FastEventListenerArgs, execute: (listener: TypedFastEventListener, message: TypedFastEventMessage, args: FastEventListenerArgs, catchErrors?: boolean) => Promise<any> | any) => Promise<any[]> | any[];
type FastListenerExecutor = (listeners: FastEventListenerMeta[], message: TypedFastEventMessage, args: FastEventListenerArgs, execute: (this: FastEventListenerMeta, listener: FastEventListenerMeta, message: TypedFastEventMessage, args: FastEventListenerArgs, catchErrors?: boolean) => Promise<any> | any) => Promise<any[]> | any[];

@@ -94,7 +94,8 @@ /**

* [
* 监听器函数引用,
* 需要执行多少次, =0代表不限
* 实际执行的次数(用于负载均衡时记录)
* 标签 用于调试一般可以标识监听器类型或任意信息
* 标识
* 0: 监听器函数引用,
* 1: 需要执行多少次, =0代表不限
* 2: 实际执行的次数(用于负载均衡时记录)
* 3: 标签 用于调试一般可以标识监听器类型或任意信息
* 4: 标识,
* 5: 监听器最后一次执行结果,仅仅在debug时启用,如果结果是对象则是一个WeakRef
* ]

@@ -107,3 +108,4 @@ */

string,
number
number,
any?
];

@@ -110,0 +112,0 @@

{
"name": "fastevent",
"version": "2.4.1",
"version": "2.5.0",
"description": "The Ultimate Event Trigger Library – Fast, Feature-Rich, Battle-Tested!",

@@ -31,12 +31,9 @@ "main": "dist/index.js",

},
"./eventbus": {
"types": "./dist/eventbus/index.d.ts",
"import": "./dist/eventbus/index.mjs",
"require": "./dist/eventbus/index.js"
"./viewer": {
"types": "./dist/viewer/fastevent.viewer.d.ts",
"import": "./dist/viewer/index.mjs",
"require": "./dist/viewer/index.js",
"default": "./dist/viewer/index.js"
},
"./devtools": {
"types": "./devTools.d.ts",
"import": "./devTools.mjs",
"require": "./devTools.js"
}
"./fastevent-viewer": "./dist/viewer/index.js"
},

@@ -46,3 +43,3 @@ "scripts": {

"test:coverage": "vitest --coverage --exclude=\"src/__benchmarks__/**\" --exclude=src/devTools",
"build": "tsup",
"build": "tsup && cpy \"./index.global.js\" ../../../docs/public --cwd=./dist --rename=fastevent.js",
"bench": "tsx src/__benchmarks__/index.ts"

@@ -58,2 +55,6 @@ },

],
"sideEffects": [
"dist/viewer/*.js",
"dist/viewer/*.mjs"
],
"author": "zhangfisher",

@@ -66,2 +67,4 @@ "license": "MIT",

"@vitest/coverage-v8": "4.1.0",
"cpx": "^1.5.0",
"cpy-cli": "^7.0.0",
"eventemitter2": "^6.4.9",

@@ -68,0 +71,0 @@ "redux": "^5.0.1",

'use strict';var $=Object.defineProperty;var n=(t,e)=>$(t,"name",{value:e,configurable:true});function c(t){return `Minified Redux error #${t}; visit https://redux.js.org/Errors?code=${t} for the full message or use the non-minified dev environment for full errors. `}n(c,"formatProdErrorMessage");var A=typeof Symbol=="function"&&Symbol.observable||"@@observable",v=A,m=n(()=>Math.random().toString(36).substring(7).split("").join("."),"randomString"),V={INIT:`@@redux/INIT${m()}`,REPLACE:`@@redux/REPLACE${m()}`,PROBE_UNKNOWN_ACTION:n(()=>`@@redux/PROBE_UNKNOWN_ACTION${m()}`,"PROBE_UNKNOWN_ACTION")},S=V;function k(t){if(typeof t!="object"||t===null)return false;let e=t;for(;Object.getPrototypeOf(e)!==null;)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e||Object.getPrototypeOf(t)===null}n(k,"isPlainObject");function L(t){if(t===void 0)return "undefined";if(t===null)return "null";let e=typeof t;switch(e){case "boolean":case "string":case "number":case "symbol":case "function":return e}if(Array.isArray(t))return "array";if(M(t))return "date";if(C(t))return "error";let r=j(t);switch(r){case "Symbol":case "Promise":case "WeakMap":case "WeakSet":case "Map":case "Set":return r}return Object.prototype.toString.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"")}n(L,"miniKindOf");function j(t){return typeof t.constructor=="function"?t.constructor.name:null}n(j,"ctorName");function C(t){return t instanceof Error||typeof t.message=="string"&&t.constructor&&typeof t.constructor.stackTraceLimit=="number"}n(C,"isError");function M(t){return t instanceof Date?true:typeof t.toDateString=="function"&&typeof t.getDate=="function"&&typeof t.setDate=="function"}n(M,"isDate");function h(t){let e=typeof t;return process.env.NODE_ENV!=="production"&&(e=L(t)),e}n(h,"kindOf");function x(t,e,r){if(typeof t!="function")throw new Error(process.env.NODE_ENV==="production"?c(2):`Expected the root reducer to be a function. Instead, received: '${h(t)}'`);if(typeof e=="function"&&typeof r=="function"||typeof r=="function"&&typeof arguments[3]=="function")throw new Error(process.env.NODE_ENV==="production"?c(0):"It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.");if(typeof e=="function"&&typeof r>"u"&&(r=e,e=void 0),typeof r<"u"){if(typeof r!="function")throw new Error(process.env.NODE_ENV==="production"?c(1):`Expected the enhancer to be a function. Instead, received: '${h(r)}'`);return r(x)(t,e)}let s=t,o=e,p=new Map,f=p,u=0,a=false;function w(){f===p&&(f=new Map,p.forEach((i,d)=>{f.set(d,i);}));}n(w,"ensureCanMutateNextListeners");function b(){if(a)throw new Error(process.env.NODE_ENV==="production"?c(3):"You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.");return o}n(b,"getState");function N(i){if(typeof i!="function")throw new Error(process.env.NODE_ENV==="production"?c(4):`Expected the listener to be a function. Instead, received: '${h(i)}'`);if(a)throw new Error(process.env.NODE_ENV==="production"?c(5):"You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.");let d=true;w();let l=u++;return f.set(l,i),n(function(){if(d){if(a)throw new Error(process.env.NODE_ENV==="production"?c(6):"You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.");d=false,w(),f.delete(l),p=null;}},"unsubscribe")}n(N,"subscribe");function E(i){if(!k(i))throw new Error(process.env.NODE_ENV==="production"?c(7):`Actions must be plain objects. Instead, the actual type was: '${h(i)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);if(typeof i.type>"u")throw new Error(process.env.NODE_ENV==="production"?c(8):'Actions may not have an undefined "type" property. You may have misspelled an action type string constant.');if(typeof i.type!="string")throw new Error(process.env.NODE_ENV==="production"?c(17):`Action "type" property must be a string. Instead, the actual type was: '${h(i.type)}'. Value was: '${i.type}' (stringified)`);if(a)throw new Error(process.env.NODE_ENV==="production"?c(9):"Reducers may not dispatch actions.");try{a=!0,o=s(o,i);}finally{a=false;}return (p=f).forEach(l=>{l();}),i}n(E,"dispatch");function T(i){if(typeof i!="function")throw new Error(process.env.NODE_ENV==="production"?c(10):`Expected the nextReducer to be a function. Instead, received: '${h(i)}`);s=i,E({type:S.REPLACE});}n(T,"replaceReducer");function I(){let i=N;return {subscribe(d){if(typeof d!="object"||d===null)throw new Error(process.env.NODE_ENV==="production"?c(11):`Expected the observer to be an object. Instead, received: '${h(d)}'`);function l(){let O=d;O.next&&O.next(b());}return n(l,"observeState"),l(),{unsubscribe:i(l)}},[v](){return this}}}return n(I,"observable"),E({type:S.INIT}),{dispatch:E,subscribe:N,getState:b,replaceReducer:T,[v]:I}}n(x,"createStore");function D(t,e,r){return x(t,e,r)}n(D,"legacy_createStore");var y=class{static{n(this,"WeakObjectMap");}map;finalizationRegistry;constructor(){this.map=new Map,this.finalizationRegistry=new FinalizationRegistry(e=>{this.map.delete(e);});}set(e,r){let s=new WeakRef(r);this.map.set(e,s),this.finalizationRegistry.register(r,e);}get(e){let r=this.map.get(e);return r?r.deref():void 0}delete(e){return this.map.delete(e)}has(e){let r=this.map.get(e);return r?r.deref()!==void 0:false}};var P={};function _(t){return {messageCount:0,listenerCount:t.listenerCount,retainMessageCount:t.retainedMessages.size}}n(_,"getDefaultFastEventState");var g=class{static{n(this,"FlexEventDevTools");}reduxStore;_installed=false;fastEvents=new y;constructor(){this.install();}add(e){this.fastEvents.set(e.id,e),e.options.onAddListener=(r,s)=>{this.reduxStore.dispatch({type:"__ADD_LISTENER__",event:r,listener:s.name||"anonymous",emitter:e.id});},e.options.onRemoveListener=(r,s)=>{this.reduxStore.dispatch({type:"__REMOVE_LISTENER__",event:r,listener:s.name||"anonymous",emitter:e.id});},e.options.onClearListeners=()=>{this.reduxStore.dispatch({type:"__CLEAR_LISTENERS__",emitter:e.id});},e.options.onAfterExecuteListener=(r,s,o)=>{let p=s.map(u=>u instanceof Error?`Error(${u.message})`:u),f=o.reduce((u,a)=>(u.push(...a.__listeners),u),[]).map((u,a)=>`${u[0].name||"anonymous"}(${u[2]}) -> ${p[a]} ${u[3]?`(tag=${u[3]})`:""}`);console.log(`FastEvent<\x1B[31m${r.type}\x1B[30m> is emit, listeners:`,o),this.reduxStore.dispatch({type:r.type,payload:r.payload,meta:r.meta,emitter:e.id,returns:f});},this.reduxStore.dispatch({type:"__ADD_FASTEVENT__",emitter:e.id});}remove(e){this.fastEvents.has(e.id)&&this.fastEvents.delete(e.id);}reducer(e=P,r){if(r.type.startsWith("@@"))return e;let s=this.fastEvents.get(r.emitter);if(r.type==="__ADD_FASTEVENT__")return {...e,[r.emitter]:_(s)};if(r.type==="__ADD_LISTENER__"){let o=e[r.emitter]||_(s);return o.listenerCount++,{...e,[r.emitter]:{...o}}}else if(r.type==="__REMOVE_LISTENER__"){let o=e[r.emitter];return o?(o.listenerCount++,{...e,[r.emitter]:{...o}}):e}else if(r.type==="__CLEAR_LISTENERS__"){let o=e[r.emitter];return o?(o.listenerCount++,{...e,[r.emitter]:_(s)}):e}else {let o=e[r.emitter];return o?(o.messageCount++,o.listenerCount=s.listenerCount,o.retainMessageCount=s.retainedMessages.size,{...e,[r.emitter]:{...o}}):e}}install(){this._installed||(this.reduxStore=D(this.reducer.bind(this),window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__()),this._installed=true,console.info("%c FlexEventDevTools installed. Please open <Redux devtools> to view. %c","color:red;",""));}};function K(){globalThis.__FLEXEVENT_DEVTOOLS__||(globalThis.__FLEXEVENT_DEVTOOLS__=new g);}n(K,"install");K();
exports.FlexEventDevTools=g;exports.install=K;//# sourceMappingURL=devTools.js.map
//# sourceMappingURL=devTools.js.map
{"version":3,"sources":["../../../node_modules/.bun/redux@5.0.1/node_modules/redux/src/utils/formatProdErrorMessage.ts","../../../node_modules/.bun/redux@5.0.1/node_modules/redux/src/utils/symbol-observable.ts","../../../node_modules/.bun/redux@5.0.1/node_modules/redux/src/utils/actionTypes.ts","../../../node_modules/.bun/redux@5.0.1/node_modules/redux/src/utils/isPlainObject.ts","../../../node_modules/.bun/redux@5.0.1/node_modules/redux/src/utils/kindOf.ts","../../../node_modules/.bun/redux@5.0.1/node_modules/redux/src/createStore.ts","../src/utils/WeakObjectMap.ts","../src/devTools.ts"],"names":["formatProdErrorMessage","code","__name","$$observable","symbol_observable_default","randomString","ActionTypes","actionTypes_default","isPlainObject","obj","proto","miniKindOf","val","type","isDate","isError","constructorName","ctorName","kindOf","typeOfVal","createStore","reducer","preloadedState","enhancer","currentReducer","currentState","currentListeners","nextListeners","listenerIdCounter","isDispatching","ensureCanMutateNextListeners","listener","key","getState","subscribe","isSubscribed","listenerId","dispatch","action","replaceReducer","nextReducer","observable","outerSubscribe","observer","observeState","observerAsObserver","legacy_createStore","WeakObjectMap","map","finalizationRegistry","Map","FinalizationRegistry","delete","set","value","weakRef","WeakRef","register","get","deref","undefined","has","initialState","getDefaultFastEventState","instance","messageCount","listenerCount","retainMessageCount","retainedMessages","size","FlexEventDevTools","reduxStore","_installed","fastEvents","install","add","id","options","onAddListener","event","name","emitter","onRemoveListener","onClearListeners","onAfterExecuteListener","message","returns","listeners","results","r","Error","sresults","reduce","cur","push","__listeners","i","console","log","payload","meta","remove","state","startsWith","eventState","bind","window","__REDUX_DEVTOOLS_EXTENSION__","info","globalThis","__FLEXEVENT_DEVTOOLS__"],"mappings":"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","file":"devTools.js","sourcesContent":["/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nexport function formatProdErrorMessage(code: number) {\n return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}","declare global {\n interface SymbolConstructor {\n readonly observable: symbol;\n }\n}\nconst $$observable = /* #__PURE__ */(() => typeof Symbol === 'function' && Symbol.observable || '@@observable')();\nexport default $$observable;","/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\n\nconst randomString = () => Math.random().toString(36).substring(7).split('').join('.');\nconst ActionTypes = {\n INIT: `@@redux/INIT${/* #__PURE__ */randomString()}`,\n REPLACE: `@@redux/REPLACE${/* #__PURE__ */randomString()}`,\n PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nexport default ActionTypes;","/**\n * @param obj The object to inspect.\n * @returns True if the argument appears to be a plain object.\n */\nexport default function isPlainObject(obj: any): obj is object {\n if (typeof obj !== 'object' || obj === null) return false;\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}","// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nexport function miniKindOf(val: any): string {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n const type = typeof val;\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n const constructorName = ctorName(val);\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n }\n\n // other\n return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\nfunction ctorName(val: any): string | null {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\nfunction isError(val: any) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\nfunction isDate(val: any) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\nexport function kindOf(val: any) {\n let typeOfVal: string = typeof val;\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n return typeOfVal;\n}","import { formatProdErrorMessage as _formatProdErrorMessage13 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage12 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage11 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage10 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage9 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage8 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage7 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage6 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage5 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage4 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport $$observable from './utils/symbol-observable';\nimport { Store, StoreEnhancer, Dispatch, Observer, ListenerCallback, UnknownIfNonSpecific } from './types/store';\nimport { Action } from './types/actions';\nimport { Reducer } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport { kindOf } from './utils/kindOf';\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n }\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = (preloadedState as StoreEnhancer<Ext, StateExt>);\n preloadedState = undefined;\n }\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n }\n return enhancer(createStore)(reducer, (preloadedState as PreloadedState | undefined));\n }\n let currentReducer = reducer;\n let currentState: S | PreloadedState | undefined = (preloadedState as PreloadedState | undefined);\n let currentListeners: Map<number, ListenerCallback> | null = new Map();\n let nextListeners = currentListeners;\n let listenerIdCounter = 0;\n let isDispatching = false;\n\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = new Map();\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener);\n });\n }\n }\n\n /**\n * Reads the state tree managed by the store.\n *\n * @returns The current state tree of your application.\n */\n function getState(): S {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n return (currentState as S);\n }\n\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param listener A callback to be invoked on every dispatch.\n * @returns A function to remove this change listener.\n */\n function subscribe(listener: () => void) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n let isSubscribed = true;\n ensureCanMutateNextListeners();\n const listenerId = listenerIdCounter++;\n nextListeners.set(listenerId, listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n isSubscribed = false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners = null;\n };\n }\n\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n function dispatch(action: A) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n }\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage9(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n if (typeof action.type !== 'string') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage10(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage11(9) : 'Reducers may not dispatch actions.');\n }\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n const listeners = currentListeners = nextListeners;\n listeners.forEach(listener => {\n listener();\n });\n return action;\n }\n\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param nextReducer The reducer for the store to use instead.\n */\n function replaceReducer(nextReducer: Reducer<S, A>): void {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage12(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n }\n currentReducer = ((nextReducer as unknown) as Reducer<S, A, PreloadedState>);\n\n // This action has a similar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n dispatch(({\n type: ActionTypes.REPLACE\n } as A));\n }\n\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n function observable() {\n const outerSubscribe = subscribe;\n return {\n /**\n * The minimal observable subscription method.\n * @param observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe(observer: unknown) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage13(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n }\n function observeState() {\n const observerAsObserver = (observer as Observer<S>);\n if (observerAsObserver.next) {\n observerAsObserver.next(getState());\n }\n }\n observeState();\n const unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe\n };\n },\n [$$observable]() {\n return this;\n }\n };\n }\n\n // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n dispatch(({\n type: ActionTypes.INIT\n } as A));\n const store = (({\n dispatch: (dispatch as Dispatch<A>),\n subscribe,\n getState,\n replaceReducer,\n [$$observable]: observable\n } as unknown) as Store<S, A, StateExt> & Ext);\n return store;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n return createStore(reducer, (preloadedState as any), enhancer);\n}","// @ts-nocheck\n/**\n * 一个基于弱引用(WeakRef)的键值映射集合\n * \n * @template T - 值的类型,必须是对象类型(继承自 `object`)\n * \n * @example\n * const map = new WeakObjectMap<MyObject>();\n * map.set('key1', obj1);\n * const retrieved = map.get('key1'); // 返回 obj1 或 undefined(如果已被垃圾回收)\n */\nexport class WeakObjectMap<T extends object> {\n private map: Map<string, WeakRef<T>>;\n private finalizationRegistry: FinalizationRegistry<string>;\n\n /**\n * 构造一个新的 WeakObjectMap 实例\n */\n constructor() {\n this.map = new Map();\n this.finalizationRegistry = new FinalizationRegistry((key) => {\n this.map.delete(key);\n });\n }\n\n /**\n * 设置键值对\n * @param key - 字符串键名\n * @param value - 要存储的对象值(会被自动包装为弱引用)\n */\n set(key: string, value: T): void {\n const weakRef = new WeakRef(value);\n this.map.set(key, weakRef);\n this.finalizationRegistry.register(value, key);\n }\n\n /**\n * 获取指定键对应的值\n * @param key - 要查找的键名\n * @returns 如果值存在且未被垃圾回收则返回值,否则返回 undefined\n */\n get(key: string): T | undefined {\n const weakRef = this.map.get(key);\n return weakRef ? weakRef.deref() : undefined;\n }\n\n /**\n * 删除指定键的映射\n * @param key - 要删除的键名\n * @returns 如果键存在并已删除则返回 true,否则返回 false\n */\n delete(key: string): boolean {\n return this.map.delete(key);\n }\n\n /**\n * 检查是否存在指定键的映射(且值未被垃圾回收)\n * @param key - 要检查的键名\n * @returns 如果键存在且值未被回收则返回 true,否则返回 false\n */\n has(key: string): boolean {\n const weakRef = this.map.get(key);\n return weakRef ? weakRef.deref() !== undefined : false;\n }\n}\n","/**\n *\n * 基于开发工具\n *\n * Redux DevTools 是一个实用工具,用于开发和调试 Redux 应用程序。\n * FLEXEVENT是基于Redux DevTools 的简单包装,可以让开发者使用Redux DevTools\n * 来查看FLEXEVENT的状态变化\n *\n * import { createStore } from \"@FLEXEVENTjs/react\"\n * import { install } from \"@FLEXEVENTjs/devtools\"\n *\n *\n * const store = createStore({})\n *\n * install()\n *\n */\n\n//@ts-ignore\nimport { legacy_createStore as createStore } from \"redux\";\nimport { WeakObjectMap } from \"./utils/WeakObjectMap\";\nimport { FastEvent } from \"./event\";\nimport { FastEventListenerMeta } from \"./types/FastEventListeners\";\n\nconst initialState = {};\n\nfunction getDefaultFastEventState(instance: FastEvent) {\n return {\n messageCount: 0,\n listenerCount: instance.listenerCount,\n retainMessageCount: instance.retainedMessages.size,\n };\n}\n\nexport class FlexEventDevTools {\n private reduxStore: any;\n private _installed: boolean = false;\n fastEvents = new WeakObjectMap();\n constructor() {\n this.install();\n }\n add(instance: FastEvent) {\n this.fastEvents.set(instance.id, instance);\n\n instance.options.onAddListener = (type: string, listener: any) => {\n this.reduxStore.dispatch({\n type: \"__ADD_LISTENER__\",\n event: type,\n listener: listener.name || \"anonymous\",\n emitter: instance.id,\n });\n };\n instance.options.onRemoveListener = (type: string, listener: any) => {\n this.reduxStore.dispatch({\n type: \"__REMOVE_LISTENER__\",\n event: type,\n listener: listener.name || \"anonymous\",\n emitter: instance.id,\n });\n };\n instance.options.onClearListeners = () => {\n this.reduxStore.dispatch({\n type: \"__CLEAR_LISTENERS__\",\n emitter: instance.id,\n });\n };\n instance.options.onAfterExecuteListener = (message, returns, listeners) => {\n const results = returns.map((r) => (r instanceof Error ? `Error(${r.message})` : r));\n const sresults = listeners\n .reduce<FastEventListenerMeta[]>((results, cur) => {\n results.push(...cur.__listeners);\n return results;\n }, [])\n .map(\n (listener, i) =>\n `${listener[0].name || \"anonymous\"}(${listener[2]}) -> ${results[i]} ${listener[3] ? `(tag=${listener[3]})` : \"\"}`,\n );\n\n console.log(\n `FastEvent<\\x1B[31m${message.type}\\x1B[30m> is emit, listeners:`,\n listeners,\n );\n this.reduxStore.dispatch({\n type: message.type,\n payload: message.payload,\n meta: message.meta,\n emitter: instance.id,\n returns: sresults,\n });\n };\n this.reduxStore.dispatch({\n type: \"__ADD_FASTEVENT__\",\n emitter: instance.id,\n });\n }\n remove(instance: FastEvent) {\n if (this.fastEvents.has(instance.id)) {\n this.fastEvents.delete(instance.id);\n }\n }\n private reducer(state: any = initialState, action: any) {\n if (action.type.startsWith(\"@@\")) return state;\n const instance = this.fastEvents.get(action.emitter) as FastEvent;\n if (action.type === \"__ADD_FASTEVENT__\") {\n return {\n ...state,\n [action.emitter]: getDefaultFastEventState(instance),\n };\n } else if (action.type === \"__ADD_LISTENER__\") {\n const eventState = state[action.emitter] || getDefaultFastEventState(instance);\n eventState.listenerCount++;\n return {\n ...state,\n [action.emitter]: {\n ...eventState,\n },\n };\n } else if (action.type === \"__REMOVE_LISTENER__\") {\n const eventState = state[action.emitter];\n if (!eventState) return state;\n eventState.listenerCount++;\n return {\n ...state,\n [action.emitter]: {\n ...eventState,\n },\n };\n } else if (action.type === \"__CLEAR_LISTENERS__\") {\n const eventState = state[action.emitter];\n if (!eventState) return state;\n eventState.listenerCount++;\n return {\n ...state,\n [action.emitter]: getDefaultFastEventState(instance),\n };\n } else {\n const eventState = state[action.emitter];\n if (!eventState) return state;\n eventState.messageCount++;\n eventState.listenerCount = instance.listenerCount;\n eventState.retainMessageCount = instance.retainedMessages.size;\n return {\n ...state,\n [action.emitter]: { ...eventState },\n };\n }\n }\n private install() {\n if (this._installed) return;\n this.reduxStore = createStore(\n this.reducer.bind(this),\n // @ts-ignore\n window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(),\n );\n this._installed = true;\n console.info(\n \"%c FlexEventDevTools installed. Please open <Redux devtools> to view. %c\",\n \"color:red;\",\n \"\",\n );\n }\n}\n\nexport function install() {\n // @ts-ignore\n if (!globalThis.__FLEXEVENT_DEVTOOLS__)\n globalThis.__FLEXEVENT_DEVTOOLS__ = new FlexEventDevTools();\n}\n\ndeclare global {\n // @ts-ignore\n var __FLEXEVENT_DEVTOOLS__: FlexEventDevTools;\n}\n\ninstall();\n"]}
var $=Object.defineProperty;var n=(t,e)=>$(t,"name",{value:e,configurable:true});function c(t){return `Minified Redux error #${t}; visit https://redux.js.org/Errors?code=${t} for the full message or use the non-minified dev environment for full errors. `}n(c,"formatProdErrorMessage");var A=typeof Symbol=="function"&&Symbol.observable||"@@observable",v=A,m=n(()=>Math.random().toString(36).substring(7).split("").join("."),"randomString"),V={INIT:`@@redux/INIT${m()}`,REPLACE:`@@redux/REPLACE${m()}`,PROBE_UNKNOWN_ACTION:n(()=>`@@redux/PROBE_UNKNOWN_ACTION${m()}`,"PROBE_UNKNOWN_ACTION")},S=V;function k(t){if(typeof t!="object"||t===null)return false;let e=t;for(;Object.getPrototypeOf(e)!==null;)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e||Object.getPrototypeOf(t)===null}n(k,"isPlainObject");function L(t){if(t===void 0)return "undefined";if(t===null)return "null";let e=typeof t;switch(e){case "boolean":case "string":case "number":case "symbol":case "function":return e}if(Array.isArray(t))return "array";if(M(t))return "date";if(C(t))return "error";let r=j(t);switch(r){case "Symbol":case "Promise":case "WeakMap":case "WeakSet":case "Map":case "Set":return r}return Object.prototype.toString.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"")}n(L,"miniKindOf");function j(t){return typeof t.constructor=="function"?t.constructor.name:null}n(j,"ctorName");function C(t){return t instanceof Error||typeof t.message=="string"&&t.constructor&&typeof t.constructor.stackTraceLimit=="number"}n(C,"isError");function M(t){return t instanceof Date?true:typeof t.toDateString=="function"&&typeof t.getDate=="function"&&typeof t.setDate=="function"}n(M,"isDate");function h(t){let e=typeof t;return process.env.NODE_ENV!=="production"&&(e=L(t)),e}n(h,"kindOf");function x(t,e,r){if(typeof t!="function")throw new Error(process.env.NODE_ENV==="production"?c(2):`Expected the root reducer to be a function. Instead, received: '${h(t)}'`);if(typeof e=="function"&&typeof r=="function"||typeof r=="function"&&typeof arguments[3]=="function")throw new Error(process.env.NODE_ENV==="production"?c(0):"It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.");if(typeof e=="function"&&typeof r>"u"&&(r=e,e=void 0),typeof r<"u"){if(typeof r!="function")throw new Error(process.env.NODE_ENV==="production"?c(1):`Expected the enhancer to be a function. Instead, received: '${h(r)}'`);return r(x)(t,e)}let s=t,o=e,p=new Map,f=p,u=0,a=false;function w(){f===p&&(f=new Map,p.forEach((i,d)=>{f.set(d,i);}));}n(w,"ensureCanMutateNextListeners");function b(){if(a)throw new Error(process.env.NODE_ENV==="production"?c(3):"You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.");return o}n(b,"getState");function N(i){if(typeof i!="function")throw new Error(process.env.NODE_ENV==="production"?c(4):`Expected the listener to be a function. Instead, received: '${h(i)}'`);if(a)throw new Error(process.env.NODE_ENV==="production"?c(5):"You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.");let d=true;w();let l=u++;return f.set(l,i),n(function(){if(d){if(a)throw new Error(process.env.NODE_ENV==="production"?c(6):"You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.");d=false,w(),f.delete(l),p=null;}},"unsubscribe")}n(N,"subscribe");function E(i){if(!k(i))throw new Error(process.env.NODE_ENV==="production"?c(7):`Actions must be plain objects. Instead, the actual type was: '${h(i)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);if(typeof i.type>"u")throw new Error(process.env.NODE_ENV==="production"?c(8):'Actions may not have an undefined "type" property. You may have misspelled an action type string constant.');if(typeof i.type!="string")throw new Error(process.env.NODE_ENV==="production"?c(17):`Action "type" property must be a string. Instead, the actual type was: '${h(i.type)}'. Value was: '${i.type}' (stringified)`);if(a)throw new Error(process.env.NODE_ENV==="production"?c(9):"Reducers may not dispatch actions.");try{a=!0,o=s(o,i);}finally{a=false;}return (p=f).forEach(l=>{l();}),i}n(E,"dispatch");function T(i){if(typeof i!="function")throw new Error(process.env.NODE_ENV==="production"?c(10):`Expected the nextReducer to be a function. Instead, received: '${h(i)}`);s=i,E({type:S.REPLACE});}n(T,"replaceReducer");function I(){let i=N;return {subscribe(d){if(typeof d!="object"||d===null)throw new Error(process.env.NODE_ENV==="production"?c(11):`Expected the observer to be an object. Instead, received: '${h(d)}'`);function l(){let O=d;O.next&&O.next(b());}return n(l,"observeState"),l(),{unsubscribe:i(l)}},[v](){return this}}}return n(I,"observable"),E({type:S.INIT}),{dispatch:E,subscribe:N,getState:b,replaceReducer:T,[v]:I}}n(x,"createStore");function D(t,e,r){return x(t,e,r)}n(D,"legacy_createStore");var y=class{static{n(this,"WeakObjectMap");}map;finalizationRegistry;constructor(){this.map=new Map,this.finalizationRegistry=new FinalizationRegistry(e=>{this.map.delete(e);});}set(e,r){let s=new WeakRef(r);this.map.set(e,s),this.finalizationRegistry.register(r,e);}get(e){let r=this.map.get(e);return r?r.deref():void 0}delete(e){return this.map.delete(e)}has(e){let r=this.map.get(e);return r?r.deref()!==void 0:false}};var P={};function _(t){return {messageCount:0,listenerCount:t.listenerCount,retainMessageCount:t.retainedMessages.size}}n(_,"getDefaultFastEventState");var g=class{static{n(this,"FlexEventDevTools");}reduxStore;_installed=false;fastEvents=new y;constructor(){this.install();}add(e){this.fastEvents.set(e.id,e),e.options.onAddListener=(r,s)=>{this.reduxStore.dispatch({type:"__ADD_LISTENER__",event:r,listener:s.name||"anonymous",emitter:e.id});},e.options.onRemoveListener=(r,s)=>{this.reduxStore.dispatch({type:"__REMOVE_LISTENER__",event:r,listener:s.name||"anonymous",emitter:e.id});},e.options.onClearListeners=()=>{this.reduxStore.dispatch({type:"__CLEAR_LISTENERS__",emitter:e.id});},e.options.onAfterExecuteListener=(r,s,o)=>{let p=s.map(u=>u instanceof Error?`Error(${u.message})`:u),f=o.reduce((u,a)=>(u.push(...a.__listeners),u),[]).map((u,a)=>`${u[0].name||"anonymous"}(${u[2]}) -> ${p[a]} ${u[3]?`(tag=${u[3]})`:""}`);console.log(`FastEvent<\x1B[31m${r.type}\x1B[30m> is emit, listeners:`,o),this.reduxStore.dispatch({type:r.type,payload:r.payload,meta:r.meta,emitter:e.id,returns:f});},this.reduxStore.dispatch({type:"__ADD_FASTEVENT__",emitter:e.id});}remove(e){this.fastEvents.has(e.id)&&this.fastEvents.delete(e.id);}reducer(e=P,r){if(r.type.startsWith("@@"))return e;let s=this.fastEvents.get(r.emitter);if(r.type==="__ADD_FASTEVENT__")return {...e,[r.emitter]:_(s)};if(r.type==="__ADD_LISTENER__"){let o=e[r.emitter]||_(s);return o.listenerCount++,{...e,[r.emitter]:{...o}}}else if(r.type==="__REMOVE_LISTENER__"){let o=e[r.emitter];return o?(o.listenerCount++,{...e,[r.emitter]:{...o}}):e}else if(r.type==="__CLEAR_LISTENERS__"){let o=e[r.emitter];return o?(o.listenerCount++,{...e,[r.emitter]:_(s)}):e}else {let o=e[r.emitter];return o?(o.messageCount++,o.listenerCount=s.listenerCount,o.retainMessageCount=s.retainedMessages.size,{...e,[r.emitter]:{...o}}):e}}install(){this._installed||(this.reduxStore=D(this.reducer.bind(this),window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__()),this._installed=true,console.info("%c FlexEventDevTools installed. Please open <Redux devtools> to view. %c","color:red;",""));}};function K(){globalThis.__FLEXEVENT_DEVTOOLS__||(globalThis.__FLEXEVENT_DEVTOOLS__=new g);}n(K,"install");K();
export{g as FlexEventDevTools,K as install};//# sourceMappingURL=devTools.mjs.map
//# sourceMappingURL=devTools.mjs.map
{"version":3,"sources":["../../../node_modules/.bun/redux@5.0.1/node_modules/redux/src/utils/formatProdErrorMessage.ts","../../../node_modules/.bun/redux@5.0.1/node_modules/redux/src/utils/symbol-observable.ts","../../../node_modules/.bun/redux@5.0.1/node_modules/redux/src/utils/actionTypes.ts","../../../node_modules/.bun/redux@5.0.1/node_modules/redux/src/utils/isPlainObject.ts","../../../node_modules/.bun/redux@5.0.1/node_modules/redux/src/utils/kindOf.ts","../../../node_modules/.bun/redux@5.0.1/node_modules/redux/src/createStore.ts","../src/utils/WeakObjectMap.ts","../src/devTools.ts"],"names":["formatProdErrorMessage","code","__name","$$observable","symbol_observable_default","randomString","ActionTypes","actionTypes_default","isPlainObject","obj","proto","miniKindOf","val","type","isDate","isError","constructorName","ctorName","kindOf","typeOfVal","createStore","reducer","preloadedState","enhancer","currentReducer","currentState","currentListeners","nextListeners","listenerIdCounter","isDispatching","ensureCanMutateNextListeners","listener","key","getState","subscribe","isSubscribed","listenerId","dispatch","action","replaceReducer","nextReducer","observable","outerSubscribe","observer","observeState","observerAsObserver","legacy_createStore","WeakObjectMap","map","finalizationRegistry","Map","FinalizationRegistry","delete","set","value","weakRef","WeakRef","register","get","deref","undefined","has","initialState","getDefaultFastEventState","instance","messageCount","listenerCount","retainMessageCount","retainedMessages","size","FlexEventDevTools","reduxStore","_installed","fastEvents","install","add","id","options","onAddListener","event","name","emitter","onRemoveListener","onClearListeners","onAfterExecuteListener","message","returns","listeners","results","r","Error","sresults","reduce","cur","push","__listeners","i","console","log","payload","meta","remove","state","startsWith","eventState","bind","window","__REDUX_DEVTOOLS_EXTENSION__","info","globalThis","__FLEXEVENT_DEVTOOLS__"],"mappings":"AAOO,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAASA,EAAuBC,CAAc,CAAA,CACnD,OAAO,CAAA,sBAAA,EAAyBA,CAAI,CAA4CA,yCAAAA,EAAAA,CAAI,CACtF,+EAAA,CAAA,CAFgBC,EAAAF,CAAA,CAAA,wBAAA,CAAA,CCFhB,IAAMG,CAAAA,CAAqC,OAAO,MAAW,EAAA,UAAA,EAAc,MAAO,CAAA,UAAA,EAAc,eACzFC,CAAQD,CAAAA,CAAAA,CCCTE,CAAeH,CAAAA,CAAAA,CAAA,IAAM,IAAK,CAAA,MAAA,EAAS,CAAA,QAAA,CAAS,EAAE,CAAE,CAAA,SAAA,CAAU,CAAC,CAAE,CAAA,KAAA,CAAM,EAAE,CAAE,CAAA,IAAA,CAAK,GAAG,CAAA,CAAhE,gBACfI,CAAc,CAAA,CAClB,IAAM,CAAA,CAAA,YAAA,EAA8BD,GAAc,CAAA,CAAA,CAClD,OAAS,CAAA,CAAA,eAAA,EAAiCA,GAAc,CAAA,CAAA,CACxD,qBAAsBH,CAAA,CAAA,IAAM,+BAA+BG,CAAa,EAAC,CAAnD,CAAA,CAAA,sBAAA,CACxB,EACOE,CAAQD,CAAAA,CAAAA,CCTA,SAARE,CAAAA,CAA+BC,EAAyB,CAC7D,GAAI,OAAOA,CAAAA,EAAQ,UAAYA,CAAQ,GAAA,IAAA,CAAM,OAAO,MACpD,CAAA,IAAIC,EAAQD,CACZ,CAAA,KAAO,MAAO,CAAA,cAAA,CAAeC,CAAK,CAAM,GAAA,IAAA,EACtCA,CAAQ,CAAA,MAAA,CAAO,eAAeA,CAAK,CAAA,CAErC,OAAO,MAAA,CAAO,eAAeD,CAAG,CAAA,GAAMC,GAAS,MAAO,CAAA,cAAA,CAAeD,CAAG,CAAM,GAAA,IAChF,CAPOP,CAAAA,CAAAM,EAAA,eCHA,CAAA,CAAA,SAASG,CAAWC,CAAAA,CAAAA,CAAkB,CAC3C,GAAIA,CAAAA,GAAQ,MAAQ,CAAA,OAAO,YAC3B,GAAIA,CAAAA,GAAQ,KAAM,OAAO,MAAA,CACzB,IAAMC,CAAO,CAAA,OAAOD,CACpB,CAAA,OAAQC,GACN,KAAK,SACL,CAAA,KAAK,SACL,KAAK,QAAA,CACL,KAAK,QAAA,CACL,KAAK,UAED,CAAA,OAAOA,CAEb,CACA,GAAI,MAAM,OAAQD,CAAAA,CAAG,CAAG,CAAA,OAAO,QAC/B,GAAIE,CAAAA,CAAOF,CAAG,CAAA,CAAG,OAAO,MACxB,CAAA,GAAIG,CAAQH,CAAAA,CAAG,EAAG,OAAO,OAAA,CACzB,IAAMI,CAAkBC,CAAAA,CAAAA,CAASL,CAAG,CACpC,CAAA,OAAQI,CAAiB,EACvB,KAAK,QACL,CAAA,KAAK,SACL,CAAA,KAAK,UACL,KAAK,SAAA,CACL,KAAK,KAAA,CACL,KAAK,KACH,CAAA,OAAOA,CACX,CAGA,OAAO,OAAO,SAAU,CAAA,QAAA,CAAS,IAAKJ,CAAAA,CAAG,EAAE,KAAM,CAAA,CAAA,CAAG,EAAE,CAAA,CAAE,aAAc,CAAA,OAAA,CAAQ,KAAO,CAAA,EAAE,CACzF,CA9BgBV,CAAAA,CAAAS,EAAA,YA+BhB,CAAA,CAAA,SAASM,EAASL,CAAyB,CAAA,CACzC,OAAO,OAAOA,EAAI,WAAgB,EAAA,UAAA,CAAaA,CAAI,CAAA,WAAA,CAAY,KAAO,IACxE,CAFSV,CAAAe,CAAAA,CAAAA,CAAA,YAGT,SAASF,CAAAA,CAAQH,EAAU,CACzB,OAAOA,aAAe,KAAS,EAAA,OAAOA,CAAI,CAAA,OAAA,EAAY,UAAYA,CAAI,CAAA,WAAA,EAAe,OAAOA,CAAAA,CAAI,YAAY,eAAoB,EAAA,QAClI,CAFSV,CAAAA,CAAAa,EAAA,SAGT,CAAA,CAAA,SAASD,EAAOF,CAAU,CAAA,CACxB,OAAIA,CAAe,YAAA,IAAA,CAAa,IACzB,CAAA,OAAOA,EAAI,YAAiB,EAAA,UAAA,EAAc,OAAOA,CAAAA,CAAI,SAAY,UAAc,EAAA,OAAOA,CAAI,CAAA,OAAA,EAAY,UAC/G,CAHSV,CAAAA,CAAAY,EAAA,QAIF,CAAA,CAAA,SAASI,EAAON,CAAU,CAAA,CAC/B,IAAIO,CAAAA,CAAoB,OAAOP,CAC/B,CAAA,OAAI,OAAQ,CAAA,GAAA,CAAI,WAAa,YAC3BO,GAAAA,CAAAA,CAAYR,CAAWC,CAAAA,CAAG,GAErBO,CACT,CANgBjB,EAAAgB,CAAA,CAAA,QAAA,CAAA,CC+BT,SAASE,CAAoGC,CAAAA,CAAAA,CAAwCC,CAA4EC,CAAAA,CAAAA,CAA4F,CAClU,GAAI,OAAOF,CAAY,EAAA,UAAA,CACrB,MAAM,IAAI,KAAA,CAAM,OAAQ,CAAA,GAAA,CAAI,WAAa,YAAerB,CAAAA,CAAAA,CAAwB,CAAC,CAAI,CAAA,CAAA,gEAAA,EAAmEkB,EAAOG,CAAO,CAAC,CAAG,CAAA,CAAA,CAAA,CAE5K,GAAI,OAAOC,CAAAA,EAAmB,UAAc,EAAA,OAAOC,GAAa,UAAc,EAAA,OAAOA,CAAa,EAAA,UAAA,EAAc,OAAO,SAAU,CAAA,CAAC,GAAM,UACtI,CAAA,MAAM,IAAI,KAAM,CAAA,OAAA,CAAQ,GAAI,CAAA,QAAA,GAAa,aAAevB,CAAyB,CAAA,CAAC,CAAI,CAAA,kQAA4Q,EAMpW,GAJI,OAAOsB,CAAmB,EAAA,UAAA,EAAc,OAAOC,CAAa,CAAA,GAAA,GAC9DA,CAAYD,CAAAA,CAAAA,CACZA,EAAiB,MAEf,CAAA,CAAA,OAAOC,CAAa,CAAA,GAAA,CAAa,CACnC,GAAI,OAAOA,CAAa,EAAA,UAAA,CACtB,MAAM,IAAI,KAAA,CAAM,OAAQ,CAAA,GAAA,CAAI,WAAa,YAAevB,CAAAA,CAAAA,CAAyB,CAAC,CAAI,CAAA,CAAA,4DAAA,EAA+DkB,EAAOK,CAAQ,CAAC,CAAG,CAAA,CAAA,CAAA,CAE1K,OAAOA,CAASH,CAAAA,CAAW,CAAEC,CAAAA,CAAAA,CAAUC,CAA6C,CACtF,CACA,IAAIE,CAAAA,CAAiBH,EACjBI,CAAgDH,CAAAA,CAAAA,CAChDI,EAAyD,IAAI,GAAA,CAC7DC,EAAgBD,CAChBE,CAAAA,CAAAA,CAAoB,CACpBC,CAAAA,CAAAA,CAAgB,MASpB,SAASC,CAAAA,EAA+B,CAClCH,CAAAA,GAAkBD,IACpBC,CAAgB,CAAA,IAAI,GACpBD,CAAAA,CAAAA,CAAiB,QAAQ,CAACK,CAAAA,CAAUC,IAAQ,CAC1CL,CAAAA,CAAc,IAAIK,CAAKD,CAAAA,CAAQ,EACjC,CAAC,GAEL,CAPS7B,CAAAA,CAAA4B,CAAA,CAAA,8BAAA,CAAA,CAcT,SAASG,CAAc,EAAA,CACrB,GAAIJ,CAAAA,CACF,MAAM,IAAI,KAAA,CAAM,QAAQ,GAAI,CAAA,QAAA,GAAa,aAAe7B,CAAyB,CAAA,CAAC,CAAI,CAAA,sMAAgN,EAExS,OAAQyB,CACV,CALSvB,CAAAA,CAAA+B,EAAA,UA8BT,CAAA,CAAA,SAASC,CAAUH,CAAAA,CAAAA,CAAsB,CACvC,GAAI,OAAOA,GAAa,UACtB,CAAA,MAAM,IAAI,KAAM,CAAA,OAAA,CAAQ,GAAI,CAAA,QAAA,GAAa,aAAe/B,CAAyB,CAAA,CAAC,CAAI,CAAA,CAAA,4DAAA,EAA+DkB,EAAOa,CAAQ,CAAC,CAAG,CAAA,CAAA,CAAA,CAE1K,GAAIF,CACF,CAAA,MAAM,IAAI,KAAM,CAAA,OAAA,CAAQ,IAAI,QAAa,GAAA,YAAA,CAAe7B,CAAyB,CAAA,CAAC,EAAI,iTAAgU,CAAA,CAExZ,IAAImC,CAAAA,CAAe,KACnBL,CAA6B,EAAA,CAC7B,IAAMM,CAAAA,CAAaR,IACnB,OAAAD,CAAAA,CAAc,IAAIS,CAAYL,CAAAA,CAAQ,EAC/B7B,CAAA,CAAA,UAAuB,CAC5B,GAAKiC,EAGL,CAAIN,GAAAA,CAAAA,CACF,MAAM,IAAI,MAAM,OAAQ,CAAA,GAAA,CAAI,QAAa,GAAA,YAAA,CAAe7B,EAAyB,CAAC,CAAA,CAAI,sJAA2J,CAEnPmC,CAAAA,CAAAA,CAAe,MACfL,CAA6B,EAAA,CAC7BH,CAAc,CAAA,MAAA,CAAOS,CAAU,CAC/BV,CAAAA,CAAAA,CAAmB,KACrB,CAAA,CAAA,CAXO,cAYT,CAvBSxB,CAAAA,CAAAgC,CAAA,CAAA,WAAA,CAAA,CAkDT,SAASG,CAASC,CAAAA,CAAAA,CAAW,CAC3B,GAAI,CAAC9B,EAAc8B,CAAM,CAAA,CACvB,MAAM,IAAI,MAAM,OAAQ,CAAA,GAAA,CAAI,QAAa,GAAA,YAAA,CAAetC,EAAyB,CAAC,CAAA,CAAI,CAAiEkB,8DAAAA,EAAAA,CAAAA,CAAOoB,CAAM,CAAC,CAAA,0UAAA,CAA4U,EAEnf,GAAI,OAAOA,EAAO,IAAS,CAAA,GAAA,CACzB,MAAM,IAAI,MAAM,OAAQ,CAAA,GAAA,CAAI,QAAa,GAAA,YAAA,CAAetC,EAAyB,CAAC,CAAA,CAAI,4GAA4G,CAAA,CAEpM,GAAI,OAAOsC,CAAAA,CAAO,MAAS,QACzB,CAAA,MAAM,IAAI,KAAM,CAAA,OAAA,CAAQ,GAAI,CAAA,QAAA,GAAa,aAAetC,CAA0B,CAAA,EAAE,CAAI,CAAA,CAAA,wEAAA,EAA2EkB,EAAOoB,CAAO,CAAA,IAAI,CAAC,CAAA,eAAA,EAAkBA,EAAO,IAAI,CAAA,eAAA,CAAiB,EAEtO,GAAIT,CAAAA,CACF,MAAM,IAAI,KAAA,CAAM,OAAQ,CAAA,GAAA,CAAI,WAAa,YAAe7B,CAAAA,CAAAA,CAA0B,CAAC,CAAA,CAAI,oCAAoC,CAE7H,CAAA,GAAI,CACF6B,CAAAA,CAAgB,GAChBJ,CAAeD,CAAAA,CAAAA,CAAeC,EAAca,CAAM,EACpD,QAAA,CACET,CAAAA,CAAgB,MAClB,CAEA,QADkBH,CAAmBC,CAAAA,CAAAA,EAC3B,OAAQI,CAAAA,CAAAA,EAAY,CAC5BA,CAAS,GACX,CAAC,CAAA,CACMO,CACT,CAxBSpC,CAAAA,CAAAmC,EAAA,UAmCT,CAAA,CAAA,SAASE,EAAeC,CAAkC,CAAA,CACxD,GAAI,OAAOA,GAAgB,UACzB,CAAA,MAAM,IAAI,KAAA,CAAM,QAAQ,GAAI,CAAA,QAAA,GAAa,YAAexC,CAAAA,CAAAA,CAA0B,EAAE,CAAI,CAAA,CAAA,+DAAA,EAAkEkB,EAAOsB,CAAW,CAAC,EAAE,CAEjLhB,CAAAA,CAAAA,CAAmBgB,CAMnBH,CAAAA,CAAAA,CAAU,CACR,IAAM9B,CAAAA,CAAAA,CAAY,OACpB,CAAO,EACT,CAbSL,CAAAA,CAAAqC,CAAA,CAAA,gBAAA,CAAA,CAqBT,SAASE,CAAa,EAAA,CACpB,IAAMC,CAAAA,CAAiBR,EACvB,OAAO,CASL,SAAUS,CAAAA,CAAAA,CAAmB,CAC3B,GAAI,OAAOA,CAAa,EAAA,QAAA,EAAYA,IAAa,IAC/C,CAAA,MAAM,IAAI,KAAA,CAAM,QAAQ,GAAI,CAAA,QAAA,GAAa,aAAe3C,CAA0B,CAAA,EAAE,EAAI,CAA8DkB,2DAAAA,EAAAA,CAAAA,CAAOyB,CAAQ,CAAC,GAAG,CAE3K,CAAA,SAASC,CAAe,EAAA,CACtB,IAAMC,CAAsBF,CAAAA,CAAAA,CACxBE,CAAmB,CAAA,IAAA,EACrBA,EAAmB,IAAKZ,CAAAA,CAAAA,EAAU,EAEtC,CALS,OAAA/B,CAAA0C,CAAAA,CAAAA,CAAA,cAMTA,CAAAA,CAAAA,CAAAA,GAEO,CACL,WAAA,CAFkBF,CAAeE,CAAAA,CAAY,CAG/C,CACF,CAAA,CACA,CAACxC,CAAY,GAAI,CACf,OAAO,IACT,CACF,CACF,CA/BS,OAAAF,CAAAA,CAAAuC,CAAA,CAAA,YAAA,CAAA,CAoCTJ,EAAU,CACR,IAAA,CAAM9B,CAAY,CAAA,IACpB,CAAO,CACS,CAAA,CACd,QAAA8B,CAAAA,CAAAA,CACA,UAAAH,CACA,CAAA,QAAA,CAAAD,EACA,cAAAM,CAAAA,CAAAA,CACA,CAACnC,CAAY,EAAGqC,CAClB,CAEF,CApOgBvC,CAAAkB,CAAAA,CAAAA,CAAA,aAoST,CAAA,CAAA,SAAS0B,EAA2GzB,CAAwBC,CAAAA,CAAAA,CAA4EC,CAA4F,CAAA,CACzT,OAAOH,CAAYC,CAAAA,CAAAA,CAAUC,EAAwBC,CAAQ,CAC/D,CAFgBrB,CAAA4C,CAAAA,CAAAA,CAAA,oBClWT,CAAA,CAAA,IAAMC,EAAN,KAAMA,CAXb,OAWaA,EAAAA,IACDC,CAAAA,eAAAA,EAAAA,CAAAA,GAAAA,CACAC,oBAKR,CAAA,WAAA,EAAc,CACV,IAAKD,CAAAA,GAAAA,CAAM,IAAIE,GACf,CAAA,IAAA,CAAKD,qBAAuB,IAAIE,oBAAAA,CAAsBnB,CAAAA,EAAAA,CAClD,KAAKgB,GAAII,CAAAA,MAAAA,CAAOpB,CAAAA,EACpB,CAAA,EACJ,CAOAqB,GAAIrB,CAAAA,CAAAA,CAAasB,EAAgB,CAC7B,IAAMC,EAAU,IAAIC,OAAAA,CAAQF,CAAAA,CAC5B,CAAA,IAAA,CAAKN,GAAIK,CAAAA,GAAAA,CAAIrB,EAAKuB,CAAAA,CAAAA,CAClB,IAAKN,CAAAA,oBAAAA,CAAqBQ,SAASH,CAAOtB,CAAAA,CAAAA,EAC9C,CAOA0B,IAAI1B,CAA4B,CAAA,CAC5B,IAAMuB,CAAU,CAAA,IAAA,CAAKP,IAAIU,GAAI1B,CAAAA,CAAAA,CAC7B,CAAA,OAAOuB,EAAUA,CAAQI,CAAAA,KAAAA,EAAUC,CAAAA,MACvC,CAOAR,MAAOpB,CAAAA,CAAAA,CAAsB,CACzB,OAAO,KAAKgB,GAAII,CAAAA,MAAAA,CAAOpB,CAAAA,CAC3B,CAOA6B,IAAI7B,CAAsB,CAAA,CACtB,IAAMuB,CAAAA,CAAU,KAAKP,GAAIU,CAAAA,GAAAA,CAAI1B,CAAAA,CAAAA,CAC7B,OAAOuB,CAAUA,CAAAA,CAAAA,CAAQI,KAAK,EAAA,GAAOC,OAAY,KACrD,CACJ,ECxCA,IAAME,CAAAA,CAAe,EAErB,CAAA,SAASC,CAAyBC,CAAAA,CAAAA,CAAmB,CACjD,OAAO,CACHC,YAAc,CAAA,CAAA,CACdC,cAAeF,CAASE,CAAAA,aAAAA,CACxBC,kBAAoBH,CAAAA,CAAAA,CAASI,iBAAiBC,IAClD,CACJ,CANSN,CAAAA,CAAAA,CAAAA,CAAAA,4BAQIO,IAAAA,CAAAA,CAAN,KAAMA,CAlCb,OAkCaA,CAAAA,CAAAA,IACDC,CAAAA,mBAAAA,EAAAA,CAAAA,UAAAA,CACAC,WAAsB,KAC9BC,CAAAA,UAAAA,CAAa,IAAI1B,CAAAA,CACjB,aAAc,CACV,IAAA,CAAK2B,UACT,CACAC,IAAIX,CAAqB,CAAA,CACrB,IAAKS,CAAAA,UAAAA,CAAWpB,IAAIW,CAASY,CAAAA,EAAAA,CAAIZ,CAAAA,CAAAA,CAEjCA,EAASa,OAAQC,CAAAA,aAAAA,CAAgB,CAACjE,CAAAA,CAAckB,IAAAA,CAC5C,IAAA,CAAKwC,WAAWlC,QAAS,CAAA,CACrBxB,KAAM,kBACNkE,CAAAA,KAAAA,CAAOlE,CACPkB,CAAAA,QAAAA,CAAUA,EAASiD,IAAQ,EAAA,WAAA,CAC3BC,OAASjB,CAAAA,CAAAA,CAASY,EACtB,CAAA,EACJ,CACAZ,CAAAA,CAAAA,CAASa,QAAQK,gBAAmB,CAAA,CAACrE,EAAckB,CAAAA,GAAAA,CAC/C,KAAKwC,UAAWlC,CAAAA,QAAAA,CAAS,CACrBxB,IAAAA,CAAM,sBACNkE,KAAOlE,CAAAA,CAAAA,CACPkB,QAAUA,CAAAA,CAAAA,CAASiD,MAAQ,WAC3BC,CAAAA,OAAAA,CAASjB,CAASY,CAAAA,EACtB,CAAA,EACJ,CAAA,CACAZ,EAASa,OAAQM,CAAAA,gBAAAA,CAAmB,IAAA,CAChC,IAAA,CAAKZ,UAAWlC,CAAAA,QAAAA,CAAS,CACrBxB,IAAM,CAAA,qBAAA,CACNoE,OAASjB,CAAAA,CAAAA,CAASY,EACtB,CAAA,EACJ,CACAZ,CAAAA,CAAAA,CAASa,QAAQO,sBAAyB,CAAA,CAACC,EAASC,CAASC,CAAAA,CAAAA,GAAAA,CACzD,IAAMC,CAAAA,CAAUF,CAAQtC,CAAAA,GAAAA,CAAKyC,GAAOA,CAAaC,YAAAA,KAAAA,CAAQ,CAASD,MAAAA,EAAAA,CAAAA,CAAEJ,OAAO,CAAMI,CAAAA,CAAAA,CAAAA,CAAAA,CAC3EE,CAAAA,CAAAA,CAAWJ,EACZK,MAAgC,CAAA,CAACJ,EAASK,CACvCL,IAAAA,CAAAA,CAAQM,KAAI,GAAID,CAAAA,CAAIE,WAAW,CAAA,CACxBP,GACR,EAAE,CACJxC,CAAAA,GAAAA,CACG,CAACjB,CAAUiE,CAAAA,CAAAA,GACP,CAAGjE,EAAAA,CAAAA,CAAS,CAAA,CAAGiD,CAAAA,IAAAA,EAAQ,WAAA,CAAejD,CAAAA,EAAAA,CAAAA,CAAS,CAAA,CAAE,CAAA,KAAA,EAAQyD,CAAQQ,CAAAA,CAAAA,CAAE,CAAIjE,CAAAA,EAAAA,CAAAA,CAAS,CAAA,CAAA,CAAK,QAAQA,CAAS,CAAA,CAAA,CAAE,CAAA,CAAA,CAAA,CAAM,EAAA,CAAI,CAAA,CAAA,CAG9HkE,QAAQC,GACJ,CAAA,CAAA,kBAAA,EAAqBb,EAAQxE,IAAI,CAAA,6BAAA,CAAA,CACjC0E,CAAAA,CAAAA,CAEJ,KAAKhB,UAAWlC,CAAAA,QAAAA,CAAS,CACrBxB,IAAAA,CAAMwE,EAAQxE,IACdsF,CAAAA,OAAAA,CAASd,CAAQc,CAAAA,OAAAA,CACjBC,KAAMf,CAAQe,CAAAA,IAAAA,CACdnB,QAASjB,CAASY,CAAAA,EAAAA,CAClBU,QAASK,CACb,CAAA,EACJ,CAAA,CACA,KAAKpB,UAAWlC,CAAAA,QAAAA,CAAS,CACrBxB,IAAAA,CAAM,oBACNoE,OAASjB,CAAAA,CAAAA,CAASY,EACtB,CAAA,EACJ,CACAyB,MAAAA,CAAOrC,EAAqB,CACpB,IAAA,CAAKS,WAAWZ,GAAIG,CAAAA,CAAAA,CAASY,EAAE,CAAA,EAC/B,KAAKH,UAAWrB,CAAAA,MAAAA,CAAOY,CAASY,CAAAA,EAAE,EAE1C,CACQvD,OAAAA,CAAQiF,CAAaxC,CAAAA,CAAAA,CAAcxB,EAAa,CACpD,GAAIA,EAAOzB,IAAK0F,CAAAA,UAAAA,CAAW,IAAA,CAAO,CAAA,OAAOD,CACzC,CAAA,IAAMtC,EAAW,IAAKS,CAAAA,UAAAA,CAAWf,GAAIpB,CAAAA,CAAAA,CAAO2C,OAAO,CACnD,CAAA,GAAI3C,CAAOzB,CAAAA,IAAAA,GAAS,oBAChB,OAAO,CACH,GAAGyF,CACH,CAAA,CAAChE,EAAO2C,OAAO,EAAGlB,CAAyBC,CAAAA,CAAAA,CAC/C,CACG,CAAA,GAAI1B,CAAOzB,CAAAA,IAAAA,GAAS,mBAAoB,CAC3C,IAAM2F,CAAaF,CAAAA,CAAAA,CAAMhE,EAAO2C,OAAO,CAAA,EAAKlB,EAAyBC,CAAAA,CAAAA,CACrEwC,OAAAA,CAAWtC,CAAAA,aAAAA,EAAAA,CACJ,CACH,GAAGoC,EACH,CAAChE,CAAAA,CAAO2C,OAAO,EAAG,CACd,GAAGuB,CACP,CACJ,CACJ,SAAWlE,CAAOzB,CAAAA,IAAAA,GAAS,sBAAuB,CAC9C,IAAM2F,EAAaF,CAAMhE,CAAAA,CAAAA,CAAO2C,OAAO,CAAA,CACvC,OAAKuB,CACLA,EAAAA,CAAAA,CAAWtC,aACJ,EAAA,CAAA,CACH,GAAGoC,CACH,CAAA,CAAChE,CAAO2C,CAAAA,OAAO,EAAG,CACd,GAAGuB,CACP,CACJ,CAAA,EAPwBF,CAQ5B,CAAWhE,KAAAA,GAAAA,CAAAA,CAAOzB,IAAS,GAAA,qBAAA,CAAuB,CAC9C,IAAM2F,CAAAA,CAAaF,CAAMhE,CAAAA,CAAAA,CAAO2C,OAAO,CACvC,CAAA,OAAKuB,CACLA,EAAAA,CAAAA,CAAWtC,gBACJ,CACH,GAAGoC,EACH,CAAChE,CAAAA,CAAO2C,OAAO,EAAGlB,CAAAA,CAAyBC,CAAAA,CAC/C,GALwBsC,CAM5B,CAAA,KAAO,CACH,IAAME,EAAaF,CAAMhE,CAAAA,CAAAA,CAAO2C,OAAO,CAAA,CACvC,OAAKuB,CACLA,EAAAA,CAAAA,CAAWvC,eACXuC,CAAWtC,CAAAA,aAAAA,CAAgBF,EAASE,aACpCsC,CAAAA,CAAAA,CAAWrC,kBAAqBH,CAAAA,CAAAA,CAASI,iBAAiBC,IACnD,CAAA,CACH,GAAGiC,CAAAA,CACH,CAAChE,CAAO2C,CAAAA,OAAO,EAAG,CAAE,GAAGuB,CAAW,CACtC,GAPwBF,CAQ5B,CACJ,CACQ5B,OAAU,EAAA,CACV,IAAKF,CAAAA,UAAAA,GACT,KAAKD,UAAanD,CAAAA,CAAAA,CACd,IAAKC,CAAAA,OAAAA,CAAQoF,KAAK,IAAI,CAAA,CAEtBC,MAAOC,CAAAA,4BAAAA,EAAgCD,OAAOC,4BAA4B,EAAA,EAE9E,IAAKnC,CAAAA,UAAAA,CAAa,KAClByB,OAAQW,CAAAA,IAAAA,CACJ,0EACA,CAAA,YAAA,CACA,EAAA,CAER,EAAA,CACJ,EAEO,SAASlC,GAAAA,CAEPmC,UAAAA,CAAWC,sBACZD,GAAAA,UAAAA,CAAWC,uBAAyB,IAAIxC,CAAAA,EAChD,CAJgBI,CAAAA,CAAAA,CAAAA,CAAAA,WAWhBA,CAAAA,EAAAA","file":"devTools.mjs","sourcesContent":["/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nexport function formatProdErrorMessage(code: number) {\n return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}","declare global {\n interface SymbolConstructor {\n readonly observable: symbol;\n }\n}\nconst $$observable = /* #__PURE__ */(() => typeof Symbol === 'function' && Symbol.observable || '@@observable')();\nexport default $$observable;","/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\n\nconst randomString = () => Math.random().toString(36).substring(7).split('').join('.');\nconst ActionTypes = {\n INIT: `@@redux/INIT${/* #__PURE__ */randomString()}`,\n REPLACE: `@@redux/REPLACE${/* #__PURE__ */randomString()}`,\n PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nexport default ActionTypes;","/**\n * @param obj The object to inspect.\n * @returns True if the argument appears to be a plain object.\n */\nexport default function isPlainObject(obj: any): obj is object {\n if (typeof obj !== 'object' || obj === null) return false;\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}","// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nexport function miniKindOf(val: any): string {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n const type = typeof val;\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n const constructorName = ctorName(val);\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n }\n\n // other\n return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\nfunction ctorName(val: any): string | null {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\nfunction isError(val: any) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\nfunction isDate(val: any) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\nexport function kindOf(val: any) {\n let typeOfVal: string = typeof val;\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n return typeOfVal;\n}","import { formatProdErrorMessage as _formatProdErrorMessage13 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage12 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage11 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage10 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage9 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage8 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage7 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage6 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage5 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage4 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport $$observable from './utils/symbol-observable';\nimport { Store, StoreEnhancer, Dispatch, Observer, ListenerCallback, UnknownIfNonSpecific } from './types/store';\nimport { Action } from './types/actions';\nimport { Reducer } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport { kindOf } from './utils/kindOf';\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n }\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = (preloadedState as StoreEnhancer<Ext, StateExt>);\n preloadedState = undefined;\n }\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n }\n return enhancer(createStore)(reducer, (preloadedState as PreloadedState | undefined));\n }\n let currentReducer = reducer;\n let currentState: S | PreloadedState | undefined = (preloadedState as PreloadedState | undefined);\n let currentListeners: Map<number, ListenerCallback> | null = new Map();\n let nextListeners = currentListeners;\n let listenerIdCounter = 0;\n let isDispatching = false;\n\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = new Map();\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener);\n });\n }\n }\n\n /**\n * Reads the state tree managed by the store.\n *\n * @returns The current state tree of your application.\n */\n function getState(): S {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n return (currentState as S);\n }\n\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param listener A callback to be invoked on every dispatch.\n * @returns A function to remove this change listener.\n */\n function subscribe(listener: () => void) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n let isSubscribed = true;\n ensureCanMutateNextListeners();\n const listenerId = listenerIdCounter++;\n nextListeners.set(listenerId, listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n isSubscribed = false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners = null;\n };\n }\n\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n function dispatch(action: A) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n }\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage9(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n if (typeof action.type !== 'string') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage10(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage11(9) : 'Reducers may not dispatch actions.');\n }\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n const listeners = currentListeners = nextListeners;\n listeners.forEach(listener => {\n listener();\n });\n return action;\n }\n\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param nextReducer The reducer for the store to use instead.\n */\n function replaceReducer(nextReducer: Reducer<S, A>): void {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage12(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n }\n currentReducer = ((nextReducer as unknown) as Reducer<S, A, PreloadedState>);\n\n // This action has a similar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n dispatch(({\n type: ActionTypes.REPLACE\n } as A));\n }\n\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n function observable() {\n const outerSubscribe = subscribe;\n return {\n /**\n * The minimal observable subscription method.\n * @param observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe(observer: unknown) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage13(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n }\n function observeState() {\n const observerAsObserver = (observer as Observer<S>);\n if (observerAsObserver.next) {\n observerAsObserver.next(getState());\n }\n }\n observeState();\n const unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe\n };\n },\n [$$observable]() {\n return this;\n }\n };\n }\n\n // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n dispatch(({\n type: ActionTypes.INIT\n } as A));\n const store = (({\n dispatch: (dispatch as Dispatch<A>),\n subscribe,\n getState,\n replaceReducer,\n [$$observable]: observable\n } as unknown) as Store<S, A, StateExt> & Ext);\n return store;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n return createStore(reducer, (preloadedState as any), enhancer);\n}","// @ts-nocheck\n/**\n * 一个基于弱引用(WeakRef)的键值映射集合\n * \n * @template T - 值的类型,必须是对象类型(继承自 `object`)\n * \n * @example\n * const map = new WeakObjectMap<MyObject>();\n * map.set('key1', obj1);\n * const retrieved = map.get('key1'); // 返回 obj1 或 undefined(如果已被垃圾回收)\n */\nexport class WeakObjectMap<T extends object> {\n private map: Map<string, WeakRef<T>>;\n private finalizationRegistry: FinalizationRegistry<string>;\n\n /**\n * 构造一个新的 WeakObjectMap 实例\n */\n constructor() {\n this.map = new Map();\n this.finalizationRegistry = new FinalizationRegistry((key) => {\n this.map.delete(key);\n });\n }\n\n /**\n * 设置键值对\n * @param key - 字符串键名\n * @param value - 要存储的对象值(会被自动包装为弱引用)\n */\n set(key: string, value: T): void {\n const weakRef = new WeakRef(value);\n this.map.set(key, weakRef);\n this.finalizationRegistry.register(value, key);\n }\n\n /**\n * 获取指定键对应的值\n * @param key - 要查找的键名\n * @returns 如果值存在且未被垃圾回收则返回值,否则返回 undefined\n */\n get(key: string): T | undefined {\n const weakRef = this.map.get(key);\n return weakRef ? weakRef.deref() : undefined;\n }\n\n /**\n * 删除指定键的映射\n * @param key - 要删除的键名\n * @returns 如果键存在并已删除则返回 true,否则返回 false\n */\n delete(key: string): boolean {\n return this.map.delete(key);\n }\n\n /**\n * 检查是否存在指定键的映射(且值未被垃圾回收)\n * @param key - 要检查的键名\n * @returns 如果键存在且值未被回收则返回 true,否则返回 false\n */\n has(key: string): boolean {\n const weakRef = this.map.get(key);\n return weakRef ? weakRef.deref() !== undefined : false;\n }\n}\n","/**\n *\n * 基于开发工具\n *\n * Redux DevTools 是一个实用工具,用于开发和调试 Redux 应用程序。\n * FLEXEVENT是基于Redux DevTools 的简单包装,可以让开发者使用Redux DevTools\n * 来查看FLEXEVENT的状态变化\n *\n * import { createStore } from \"@FLEXEVENTjs/react\"\n * import { install } from \"@FLEXEVENTjs/devtools\"\n *\n *\n * const store = createStore({})\n *\n * install()\n *\n */\n\n//@ts-ignore\nimport { legacy_createStore as createStore } from \"redux\";\nimport { WeakObjectMap } from \"./utils/WeakObjectMap\";\nimport { FastEvent } from \"./event\";\nimport { FastEventListenerMeta } from \"./types/FastEventListeners\";\n\nconst initialState = {};\n\nfunction getDefaultFastEventState(instance: FastEvent) {\n return {\n messageCount: 0,\n listenerCount: instance.listenerCount,\n retainMessageCount: instance.retainedMessages.size,\n };\n}\n\nexport class FlexEventDevTools {\n private reduxStore: any;\n private _installed: boolean = false;\n fastEvents = new WeakObjectMap();\n constructor() {\n this.install();\n }\n add(instance: FastEvent) {\n this.fastEvents.set(instance.id, instance);\n\n instance.options.onAddListener = (type: string, listener: any) => {\n this.reduxStore.dispatch({\n type: \"__ADD_LISTENER__\",\n event: type,\n listener: listener.name || \"anonymous\",\n emitter: instance.id,\n });\n };\n instance.options.onRemoveListener = (type: string, listener: any) => {\n this.reduxStore.dispatch({\n type: \"__REMOVE_LISTENER__\",\n event: type,\n listener: listener.name || \"anonymous\",\n emitter: instance.id,\n });\n };\n instance.options.onClearListeners = () => {\n this.reduxStore.dispatch({\n type: \"__CLEAR_LISTENERS__\",\n emitter: instance.id,\n });\n };\n instance.options.onAfterExecuteListener = (message, returns, listeners) => {\n const results = returns.map((r) => (r instanceof Error ? `Error(${r.message})` : r));\n const sresults = listeners\n .reduce<FastEventListenerMeta[]>((results, cur) => {\n results.push(...cur.__listeners);\n return results;\n }, [])\n .map(\n (listener, i) =>\n `${listener[0].name || \"anonymous\"}(${listener[2]}) -> ${results[i]} ${listener[3] ? `(tag=${listener[3]})` : \"\"}`,\n );\n\n console.log(\n `FastEvent<\\x1B[31m${message.type}\\x1B[30m> is emit, listeners:`,\n listeners,\n );\n this.reduxStore.dispatch({\n type: message.type,\n payload: message.payload,\n meta: message.meta,\n emitter: instance.id,\n returns: sresults,\n });\n };\n this.reduxStore.dispatch({\n type: \"__ADD_FASTEVENT__\",\n emitter: instance.id,\n });\n }\n remove(instance: FastEvent) {\n if (this.fastEvents.has(instance.id)) {\n this.fastEvents.delete(instance.id);\n }\n }\n private reducer(state: any = initialState, action: any) {\n if (action.type.startsWith(\"@@\")) return state;\n const instance = this.fastEvents.get(action.emitter) as FastEvent;\n if (action.type === \"__ADD_FASTEVENT__\") {\n return {\n ...state,\n [action.emitter]: getDefaultFastEventState(instance),\n };\n } else if (action.type === \"__ADD_LISTENER__\") {\n const eventState = state[action.emitter] || getDefaultFastEventState(instance);\n eventState.listenerCount++;\n return {\n ...state,\n [action.emitter]: {\n ...eventState,\n },\n };\n } else if (action.type === \"__REMOVE_LISTENER__\") {\n const eventState = state[action.emitter];\n if (!eventState) return state;\n eventState.listenerCount++;\n return {\n ...state,\n [action.emitter]: {\n ...eventState,\n },\n };\n } else if (action.type === \"__CLEAR_LISTENERS__\") {\n const eventState = state[action.emitter];\n if (!eventState) return state;\n eventState.listenerCount++;\n return {\n ...state,\n [action.emitter]: getDefaultFastEventState(instance),\n };\n } else {\n const eventState = state[action.emitter];\n if (!eventState) return state;\n eventState.messageCount++;\n eventState.listenerCount = instance.listenerCount;\n eventState.retainMessageCount = instance.retainedMessages.size;\n return {\n ...state,\n [action.emitter]: { ...eventState },\n };\n }\n }\n private install() {\n if (this._installed) return;\n this.reduxStore = createStore(\n this.reducer.bind(this),\n // @ts-ignore\n window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(),\n );\n this._installed = true;\n console.info(\n \"%c FlexEventDevTools installed. Please open <Redux devtools> to view. %c\",\n \"color:red;\",\n \"\",\n );\n }\n}\n\nexport function install() {\n // @ts-ignore\n if (!globalThis.__FLEXEVENT_DEVTOOLS__)\n globalThis.__FLEXEVENT_DEVTOOLS__ = new FlexEventDevTools();\n}\n\ndeclare global {\n // @ts-ignore\n var __FLEXEVENT_DEVTOOLS__: FlexEventDevTools;\n}\n\ninstall();\n"]}

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