fastevent 2.2.5 → 2.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/eventbus/index.d.mts +14 -5
- package/dist/eventbus/index.d.ts +14 -5
- package/dist/eventbus/index.js +1 -1
- package/dist/eventbus/index.js.map +1 -1
- package/dist/eventbus/index.mjs +1 -1
- package/dist/eventbus/index.mjs.map +1 -1
- package/dist/executors/index.d.mts +2 -1
- package/dist/executors/index.d.ts +2 -1
- package/dist/index.d.mts +14 -5
- package/dist/index.d.ts +14 -5
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/pipes/index.d.mts +2 -1
- package/dist/pipes/index.d.ts +2 -1
- package/package.json +1 -1
|
@@ -18,9 +18,10 @@ type TypedFastEventListener<T extends string = string, P = any, M = any, C = any
|
|
|
18
18
|
* 需要执行多少次, =0代表不限
|
|
19
19
|
* 实际执行的次数(用于负载均衡时记录)
|
|
20
20
|
* 标签 用于调试一般可以标识监听器类型或任意信息
|
|
21
|
+
* 标识
|
|
21
22
|
* ]
|
|
22
23
|
*/
|
|
23
|
-
type FastListenerMeta = [TypedFastEventListener<any, any>, number, number, string
|
|
24
|
+
type FastListenerMeta = [TypedFastEventListener<any, any>, number, number, string, number];
|
|
24
25
|
type FastEventListenerArgs<M = Record<string, any>> = {
|
|
25
26
|
retain?: boolean;
|
|
26
27
|
meta?: DeepPartial<M> & Record<string, any>;
|
package/dist/index.d.mts
CHANGED
|
@@ -44,9 +44,10 @@ type FastEventListener<P = any, M extends Record<string, any> = Record<string, a
|
|
|
44
44
|
* 需要执行多少次, =0代表不限
|
|
45
45
|
* 实际执行的次数(用于负载均衡时记录)
|
|
46
46
|
* 标签 用于调试一般可以标识监听器类型或任意信息
|
|
47
|
+
* 标识
|
|
47
48
|
* ]
|
|
48
49
|
*/
|
|
49
|
-
type FastListenerMeta = [TypedFastEventListener<any, any>, number, number, string
|
|
50
|
+
type FastListenerMeta = [TypedFastEventListener<any, any>, number, number, string, number];
|
|
50
51
|
type FastListenerNode = {
|
|
51
52
|
__listeners: FastListenerMeta[];
|
|
52
53
|
} & {
|
|
@@ -114,16 +115,14 @@ type ScopeEvents<T extends Record<string, any>, Prefix extends string> = PickSco
|
|
|
114
115
|
type FastEventListenOptions<Events extends Record<string, any> = Record<string, any>, Meta = any> = {
|
|
115
116
|
count?: number;
|
|
116
117
|
prepend?: boolean;
|
|
118
|
+
flags?: number;
|
|
117
119
|
filter?: (message: TypedFastEventMessage<Events, Meta>, args: FastEventListenerArgs<Meta>) => boolean;
|
|
118
120
|
off?: (message: TypedFastEventMessage<Events, Meta>, args: FastEventListenerArgs<Meta>) => boolean;
|
|
119
121
|
pipes?: FastListenerPipe[];
|
|
120
122
|
/**
|
|
121
123
|
* 为监听器添加一个tag,在监听器注册表中记录,用于调试使用
|
|
122
|
-
*
|
|
123
124
|
* emitter.on(type,listener,{tag:"x"})
|
|
124
|
-
*
|
|
125
125
|
* emitter.getListeners(tag)
|
|
126
|
-
*
|
|
127
126
|
*/
|
|
128
127
|
tag?: string;
|
|
129
128
|
};
|
|
@@ -344,12 +343,16 @@ declare class FastEventScope<Events extends Record<string, any> = Record<string,
|
|
|
344
343
|
clear(): void;
|
|
345
344
|
emit(type: Types, directive: symbol): void;
|
|
346
345
|
emit(type: string, directive: symbol): void;
|
|
346
|
+
emit<R = any, T extends Types = Types>(type: T, payload?: Events[T], retain?: boolean): R[];
|
|
347
|
+
emit<R = any, T extends string = string>(type: T, payload?: T extends Types ? Events[Types] : any, retain?: boolean): R[];
|
|
347
348
|
emit<R = any>(type: Types, payload?: Events[Types], options?: FastEventListenerArgs<FinalMeta>): R[];
|
|
348
349
|
emit<R = any, T extends string = string>(type: T, payload?: T extends Types ? Events[Types] : any, options?: FastEventListenerArgs<FinalMeta>): R[];
|
|
349
350
|
emit<R = any>(message: FastEventEmitMessage<Events, FinalMeta>, options?: FastEventListenerArgs<FinalMeta>): R[];
|
|
350
351
|
emit<R = any, T extends string = string>(message: FastEventEmitMessage<{
|
|
351
352
|
[K in T]: K extends Types ? Events[K] : any;
|
|
352
353
|
}, FinalMeta>, options?: FastEventListenerArgs<FinalMeta>): R[];
|
|
354
|
+
emitAsync<R = any>(type: Types, payload?: Events[Types], retain?: boolean): Promise<[R | Error][]>;
|
|
355
|
+
emitAsync<R = any>(type: string, payload?: any, retain?: boolean): Promise<[R | Error][]>;
|
|
353
356
|
emitAsync<R = any>(type: string, payload?: any, options?: FastEventListenerArgs<FinalMeta>): Promise<[R | Error][]>;
|
|
354
357
|
emitAsync<R = any>(type: Types, payload?: Events[Types], options?: FastEventListenerArgs<FinalMeta>): Promise<[R | Error][]>;
|
|
355
358
|
emitAsync<R = any>(message: TypedFastEventMessage<Events, FinalMeta>, options?: FastEventListenerArgs<FinalMeta>): Promise<[R | Error][]>;
|
|
@@ -670,6 +673,7 @@ declare class FastEvent<Events extends Record<string, any> = Record<string, any>
|
|
|
670
673
|
* @param listeners
|
|
671
674
|
*/
|
|
672
675
|
_decListenerExecCount(listeners: [FastListenerMeta, number, FastListenerMeta[]][]): void;
|
|
676
|
+
getListeners(type: keyof AllEvents): FastListenerMeta[];
|
|
673
677
|
/**
|
|
674
678
|
* 触发事件并执行对应的监听器
|
|
675
679
|
*
|
|
@@ -742,7 +746,6 @@ declare class FastEvent<Events extends Record<string, any> = Record<string, any>
|
|
|
742
746
|
[K in T]: K extends Types ? AllEvents[K] : any;
|
|
743
747
|
}, Meta>, options?: FastEventListenerArgs<Meta>): R[];
|
|
744
748
|
emit<R = any>(message: FastEventEmitMessage<AllEvents, Meta>, options?: FastEventListenerArgs<Meta>): R[];
|
|
745
|
-
getListeners(type: keyof AllEvents): FastListenerMeta[];
|
|
746
749
|
/**
|
|
747
750
|
* 异步触发事件
|
|
748
751
|
* @param type - 事件类型,可以是字符串或预定义的事件类型
|
|
@@ -816,6 +819,12 @@ declare class FastEvent<Events extends Record<string, any> = Record<string, any>
|
|
|
816
819
|
* // 无限等待事件
|
|
817
820
|
* const event = await emitter.waitFor('server/ready');
|
|
818
821
|
* console.log('服务器就绪');
|
|
822
|
+
*
|
|
823
|
+
* // 等待指定的事件发生,并且如果该事件有其他订阅者,则同时等待该事件的所有订阅执行完成
|
|
824
|
+
* waitFor
|
|
825
|
+
*
|
|
826
|
+
*
|
|
827
|
+
*
|
|
819
828
|
* ```
|
|
820
829
|
*/
|
|
821
830
|
waitFor<T extends Types>(type: T, timeout?: number): Promise<TypedFastEventMessage<{
|
package/dist/index.d.ts
CHANGED
|
@@ -44,9 +44,10 @@ type FastEventListener<P = any, M extends Record<string, any> = Record<string, a
|
|
|
44
44
|
* 需要执行多少次, =0代表不限
|
|
45
45
|
* 实际执行的次数(用于负载均衡时记录)
|
|
46
46
|
* 标签 用于调试一般可以标识监听器类型或任意信息
|
|
47
|
+
* 标识
|
|
47
48
|
* ]
|
|
48
49
|
*/
|
|
49
|
-
type FastListenerMeta = [TypedFastEventListener<any, any>, number, number, string
|
|
50
|
+
type FastListenerMeta = [TypedFastEventListener<any, any>, number, number, string, number];
|
|
50
51
|
type FastListenerNode = {
|
|
51
52
|
__listeners: FastListenerMeta[];
|
|
52
53
|
} & {
|
|
@@ -114,16 +115,14 @@ type ScopeEvents<T extends Record<string, any>, Prefix extends string> = PickSco
|
|
|
114
115
|
type FastEventListenOptions<Events extends Record<string, any> = Record<string, any>, Meta = any> = {
|
|
115
116
|
count?: number;
|
|
116
117
|
prepend?: boolean;
|
|
118
|
+
flags?: number;
|
|
117
119
|
filter?: (message: TypedFastEventMessage<Events, Meta>, args: FastEventListenerArgs<Meta>) => boolean;
|
|
118
120
|
off?: (message: TypedFastEventMessage<Events, Meta>, args: FastEventListenerArgs<Meta>) => boolean;
|
|
119
121
|
pipes?: FastListenerPipe[];
|
|
120
122
|
/**
|
|
121
123
|
* 为监听器添加一个tag,在监听器注册表中记录,用于调试使用
|
|
122
|
-
*
|
|
123
124
|
* emitter.on(type,listener,{tag:"x"})
|
|
124
|
-
*
|
|
125
125
|
* emitter.getListeners(tag)
|
|
126
|
-
*
|
|
127
126
|
*/
|
|
128
127
|
tag?: string;
|
|
129
128
|
};
|
|
@@ -344,12 +343,16 @@ declare class FastEventScope<Events extends Record<string, any> = Record<string,
|
|
|
344
343
|
clear(): void;
|
|
345
344
|
emit(type: Types, directive: symbol): void;
|
|
346
345
|
emit(type: string, directive: symbol): void;
|
|
346
|
+
emit<R = any, T extends Types = Types>(type: T, payload?: Events[T], retain?: boolean): R[];
|
|
347
|
+
emit<R = any, T extends string = string>(type: T, payload?: T extends Types ? Events[Types] : any, retain?: boolean): R[];
|
|
347
348
|
emit<R = any>(type: Types, payload?: Events[Types], options?: FastEventListenerArgs<FinalMeta>): R[];
|
|
348
349
|
emit<R = any, T extends string = string>(type: T, payload?: T extends Types ? Events[Types] : any, options?: FastEventListenerArgs<FinalMeta>): R[];
|
|
349
350
|
emit<R = any>(message: FastEventEmitMessage<Events, FinalMeta>, options?: FastEventListenerArgs<FinalMeta>): R[];
|
|
350
351
|
emit<R = any, T extends string = string>(message: FastEventEmitMessage<{
|
|
351
352
|
[K in T]: K extends Types ? Events[K] : any;
|
|
352
353
|
}, FinalMeta>, options?: FastEventListenerArgs<FinalMeta>): R[];
|
|
354
|
+
emitAsync<R = any>(type: Types, payload?: Events[Types], retain?: boolean): Promise<[R | Error][]>;
|
|
355
|
+
emitAsync<R = any>(type: string, payload?: any, retain?: boolean): Promise<[R | Error][]>;
|
|
353
356
|
emitAsync<R = any>(type: string, payload?: any, options?: FastEventListenerArgs<FinalMeta>): Promise<[R | Error][]>;
|
|
354
357
|
emitAsync<R = any>(type: Types, payload?: Events[Types], options?: FastEventListenerArgs<FinalMeta>): Promise<[R | Error][]>;
|
|
355
358
|
emitAsync<R = any>(message: TypedFastEventMessage<Events, FinalMeta>, options?: FastEventListenerArgs<FinalMeta>): Promise<[R | Error][]>;
|
|
@@ -670,6 +673,7 @@ declare class FastEvent<Events extends Record<string, any> = Record<string, any>
|
|
|
670
673
|
* @param listeners
|
|
671
674
|
*/
|
|
672
675
|
_decListenerExecCount(listeners: [FastListenerMeta, number, FastListenerMeta[]][]): void;
|
|
676
|
+
getListeners(type: keyof AllEvents): FastListenerMeta[];
|
|
673
677
|
/**
|
|
674
678
|
* 触发事件并执行对应的监听器
|
|
675
679
|
*
|
|
@@ -742,7 +746,6 @@ declare class FastEvent<Events extends Record<string, any> = Record<string, any>
|
|
|
742
746
|
[K in T]: K extends Types ? AllEvents[K] : any;
|
|
743
747
|
}, Meta>, options?: FastEventListenerArgs<Meta>): R[];
|
|
744
748
|
emit<R = any>(message: FastEventEmitMessage<AllEvents, Meta>, options?: FastEventListenerArgs<Meta>): R[];
|
|
745
|
-
getListeners(type: keyof AllEvents): FastListenerMeta[];
|
|
746
749
|
/**
|
|
747
750
|
* 异步触发事件
|
|
748
751
|
* @param type - 事件类型,可以是字符串或预定义的事件类型
|
|
@@ -816,6 +819,12 @@ declare class FastEvent<Events extends Record<string, any> = Record<string, any>
|
|
|
816
819
|
* // 无限等待事件
|
|
817
820
|
* const event = await emitter.waitFor('server/ready');
|
|
818
821
|
* console.log('服务器就绪');
|
|
822
|
+
*
|
|
823
|
+
* // 等待指定的事件发生,并且如果该事件有其他订阅者,则同时等待该事件的所有订阅执行完成
|
|
824
|
+
* waitFor
|
|
825
|
+
*
|
|
826
|
+
*
|
|
827
|
+
*
|
|
819
828
|
* ```
|
|
820
829
|
*/
|
|
821
830
|
waitFor<T extends Types>(type: T, timeout?: number): Promise<TypedFastEventMessage<{
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var P=Object.defineProperty;var q=(n,e,t)=>e in n?P(n,e,{enumerable:true,configurable:true,writable:true,value:t}):n[e]=t;var u=(n,e)=>P(n,"name",{value:e,configurable:true});var p=(n,e,t)=>q(n,typeof e!="symbol"?e+"":e,t);var G=Symbol.for("__FastEvent__"),H=Symbol.for("__FastEventScope__"),S=class S extends Error{constructor(e){super(e);}};u(S,"FastEventError");var m=S,A=class A extends m{};u(A,"TimeoutError");var R=A,M=class M extends m{};u(M,"UnboundError");var g=M,T=class T extends m{};u(T,"AbortError");var _=T,j=class j extends m{};u(j,"CancelError");var x=j,O=class O extends m{};u(O,"QueueOverflowError");var C=O,y={clearRetain:Symbol.for("ClearRetain")};function b(n,e,t,s){let i,r={},o={};return typeof n[0]=="object"?(Object.assign(o,n[0]),r=typeof n[1]=="boolean"?{retain:n[1]}:n[1]||{},i=n[0].meta):(o.type=n[0],o.payload=n[1],r=typeof n[2]=="boolean"?{retain:n[2]}:n[2]||{}),i=Object.assign({},e,t,r.meta,i),Object.keys(i).length===0&&(i=void 0),o.meta=i,r.executor===void 0&&(r.executor=s),[o,r]}u(b,"parseEmitArgs");function W(n){return n?typeof n=="object"&&"__FastEventScope__"in n:false}u(W,"isFastEventScope");function L(n,e,t){let s=n[0],i=W(n[1])?n[1]:void 0,r=(i?n[2]:n[1])||{};return r.meta=Object.assign({},e,r?.meta),r.context=r.context!==void 0?r.context:t,[s,i,r]}u(L,"parseScopeArgs");function d(n,e){return Object.defineProperty(n,"name",{value:e||"anonymous",configurable:true}),n}u(d,"renameFn");var v=class v{constructor(e){p(this,"__FastEventScope__",true);p(this,"_options",{});p(this,"types",{events:void 0,meta:void 0,context:void 0,message:void 0,listeners:void 0,anyListener:void 0});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}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;e||(e=(this._options.onMessage||this.onMessage).bind(this));let s=this;return d(function(r,o){if(r.type.startsWith(t))return e.call(s.context,Object.assign({},r,{type:r.type.substring(t.length)}),o)},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 g;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(){if(arguments.length===2&&typeof arguments[0]=="string"&&arguments[1]===y.clearRetain)return this.emitter.emit(this._getScopeType(arguments[0]));let[e,t]=b(arguments,this.emitter.options.meta,this.options.meta,this.options.executor);return e.type=this._getScopeType(e.type),this.emitter.emit(e,t)}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]=L(arguments,this.options.meta,this.options.context),i;return t?i=t:i=new v,i.bind(this.emitter,this.prefix+e,s),i}onMessage(e,t){}};u(v,"FastEventScope");var E=v;function w(n,e){if(n.length!==e.length&&n.length>0&&e[e.length-1]!=="**")return false;let t=[...e];e.length>0&&e[e.length-1]==="**"&&t.splice(e.length-1,1,...Array.from({length:n.length-e.length+1}).fill("*"));for(let s=0;s<n.length;s++)if(t[s]!=="*"&&t[s]!==n[s])return false;return true}u(w,"isPathMatched");function D(n,e){let t=[];for(;;){let s=n.findIndex(i=>e(i));if(s===-1){t.push(s);break}n.splice(s,1);}return t}u(D,"removeItem");function c(n){return n&&typeof n=="function"}u(c,"isFunction");var N=Symbol.for("__expandable__");function de(n){return n[N]=true,n}u(de,"expandable");function V(n){return n&&n[N]}u(V,"isExpandable");function I(n){for(let e=0;e<n.length;e++){let t=n[e];Array.isArray(t)&&V(t)&&(n.splice(e,1,...t),e+=t.length-1);}return n}u(I,"expandEmitResults");function B(n){return n&&typeof n=="object"&&"off"in n&&"listener"in n}u(B,"isSubsctiber");function X(n,e){return n.catch(t=>(e&&e(t),Promise.resolve(t)))}u(X,"tryReturnError");var F=class F{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",{events:void 0,meta:void 0,context:void 0,message:void 0,listeners:void 0,anyListener:void 0});this._options=Object.assign({debug:false,id:Math.random().toString(36).substring(2),delimiter:"/",context:null,ignoreErrors:true,meta:void 0,expandEmitResults:true},this._initOptions(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,s){let{count:i,prepend:r}=s,o=0;return [this._forEachNodes(e,a=>{let h=[t,i,0];s.tag&&h.push(s.tag),r?(a.__listeners.splice(0,0,h),o=0):(a.__listeners.push(h),o=a.__listeners.length-1),this.listenerCount++;}),o]}_enableDevTools(){this.options.debug&&globalThis.__FLEXEVENT_DEVTOOLS__&&globalThis.__FLEXEVENT_DEVTOOLS__.add(this);}_forEachNodes(e,t){if(e.length===0)return;let s=this.listeners;for(let i=0;i<e.length;i++){let r=e[i];if(r in s||(s[r]={__listeners:[]}),i===e.length-1){let o=s[r];return t(o,s),o}else s=s[r];}}_removeListener(e,t,s){s&&D(e.__listeners,i=>{i=Array.isArray(i)?i[0]:i;let r=i===s;return r&&(this.listenerCount--,c(this._options.onRemoveListener)&&this._options.onRemoveListener(t.join(this._delimiter),s)),r});}_pipeListener(e,t){return t.forEach(s=>{e=d(s(e),e.name);}),e}on(){let e=arguments[0],t=c(arguments[1])?arguments[1]:(this._options.onMessage||this.onMessage).bind(this),s=Object.assign({count:0,prepend:false},c(arguments[1])?arguments[2]:arguments[1]);if(e.length===0)throw new Error("event type cannot be empty");if(c(this._options.onAddListener)){let a=this._options.onAddListener(e,t,s);if(a===false)throw new x;if(B(a))return a}let i=e.split(this._delimiter);if(s.pipes&&s.pipes.length>0&&(t=this._pipeListener(t,s.pipes)),c(s.filter)||c(s.off)){let a=t;t=d(function(h,l){if(c(s.off)&&s.off.call(this,h,l)){f();return}if(c(s.filter)){if(s.filter.call(this,h,l))return a.call(this,h,l)}else return a.call(this,h,l)},t.name);}let[r,o]=this._addListener(i,t,s),f=u(()=>r&&this._removeListener(r,i,t),"off");return this._emitRetainMessage(e,r,o),{off:f,listener:t}}once(){return c(arguments[1])?this.on(arguments[0],arguments[1],Object.assign({},arguments[2],{count:1})):this.on(arguments[0],Object.assign({},arguments[2],{count:1}))}onAny(){return this.on("**",arguments[0],arguments[1])}onMessage(e,t){}off(){let e=arguments,t=c(e[0])?void 0:e[0],s=c(e[0])?e[0]:e[1],i=t?t.split(this._delimiter):[],r=t?t.includes("*"):false;if(t&&!r)this._traverseToPath(this.listeners,i,o=>{s?this._removeListener(o,i,s):t&&(o.__listeners=[]);});else {let o=r?[]:i;this._traverseListeners(this.listeners,o,(f,a)=>{(s!==void 0||r&&w(f,i))&&(s?this._removeListener(a,i,s):a.__listeners=[]);});}}offAll(e){if(e){let t=e.split(this._delimiter),s=0;this._traverseListeners(this.listeners,t,(i,r)=>{s+=r.__listeners.length,r.__listeners=[];}),this.listenerCount-=s,this._removeRetainedEvents(e);}else {let t=0;this._traverseListeners(this.listeners,[],(s,i)=>{t+=i.__listeners.length;}),this.listenerCount-=t,this.retainedMessages.clear(),this.listeners={__listeners:[]};}c(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,s){let i=[];if(e.includes("*")){let r=e.split(this._delimiter);this.retainedMessages.forEach((o,f)=>{let a=f.split(this._delimiter);w(a,r)&&i.push(o);});}else this.retainedMessages.has(e)&&i.push(this.retainedMessages.get(e));t&&i.forEach(r=>{this._executeListeners([t],r,{},o=>o[0]===t.__listeners[s][0]);});}_traverseToPath(e,t,s,i=0,r){if(i>=t.length){s(e);return}let o=t[i];if(r===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),o in e&&this._traverseToPath(e[o],t,s,i+1);}_traverseListeners(e,t,s){let i=e;t&&t.length>0&&this._traverseToPath(e,t,o=>{i=o;});let r=u((o,f,a)=>{f(a,o);for(let[h,l]of Object.entries(o))h.startsWith("__")||l&&r(l,f,[...a,h]);},"traverseNodes");r(i,s,[]);}_onListenerError(e,t,s,i){if(i instanceof Error&&(i._emitter=`${e.name||"anonymous"}:${t.type}`),c(this._options.onListenerError))try{this._options.onListenerError.call(this,i,e,t,s);}catch{}if(this._options.ignoreErrors)return i;throw i}_executeListener(e,t,s,i=false){try{if(s&&s.abortSignal&&s.abortSignal.aborted)return this._onListenerError(e,t,s,new _(e.name));let r=e.call(this.context,t,s);return i&&r&&r instanceof Promise&&(r=X(r,o=>this._onListenerError(e,t,s,o))),r}catch(r){return this._onListenerError(e,t,s,r)}}_getListenerExecutor(e){if(!e)return;let t=e.executor||this._options.executor;if(c(t))return t}_executeListeners(e,t,s,i){if(!e||e.length===0)return [];let r=e.reduce((f,a)=>f.concat(a.__listeners.filter(h=>c(i)?i(h,a):true).map((h,l)=>[h,l,a.__listeners])),[]);this._decListenerExecCount(r);let o=this._getListenerExecutor(s);if(o){let f=o(r.map(a=>a[0]),t,s,this._executeListener.bind(this));return Array.isArray(f)?f:[f]}else return r.map(f=>this._executeListener(f[0][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);}}emit(){if(arguments.length===2&&typeof arguments[0]=="string"&&arguments[1]===y.clearRetain)return this.retainedMessages.delete(arguments[0]),[];let[e,t]=b(arguments,this.options.meta);c(t.parseArgs)&&t.parseArgs(e,t);let s=e.type.split(this._delimiter);t.retain&&this.retainedMessages.set(e.type,e);let i=[],r=[];if(this._traverseToPath(this.listeners,s,o=>{r.push(o);}),c(this._options.onBeforeExecuteListener)){let o=this._options.onBeforeExecuteListener.call(this,e,t);if(Array.isArray(o))return o;if(o===false)throw new _(e.type)}return i.push(...this._executeListeners(r,e,t)),c(this._options.onAfterExecuteListener)&&this._options.onAfterExecuteListener.call(this,e,i,r),this._options.expandEmitResults&&I(i),i}getListeners(e){let t=[],s=e.split(this._delimiter);return this._traverseToPath(this.listeners,s,i=>{t.push(i);}),t[0].__listeners}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((s,i)=>{let r,o,f=u(a=>{clearTimeout(r),o&&o.off(),s(a);},"listener");t&&t>0&&(r=setTimeout(()=>{o&&o.off(),i(new Error("wait for event<"+e+"> is timeout"));},t)),o=this.on(e,f);})}scope(){let[e,t,s]=L(arguments,this.options.meta,this.options.context),i;return t?i=t:i=new E,i.bind(this,e,s),i}};u(F,"FastEvent");var $=F;function Ie(n){return n?typeof n=="object"&&"type"in n:false}u(Ie,"isFastEventMessage");function $e(n){return n&&typeof n=="string"}u($e,"isString");function Ge(n){return typeof n=="function"&&(n.toString().startsWith("class ")||n.prototype?.constructor===n)}u(Ge,"isClass");function Ke(n){return n?typeof n=="object"&&"__FastEvent__"in n:false}u(Ke,"isFastEvent");exports.AbortError=_;exports.CancelError=x;exports.FastEvent=$;exports.FastEventDirectives=y;exports.FastEventError=m;exports.FastEventScope=E;exports.QueueOverflowError=C;exports.TimeoutError=R;exports.UnboundError=g;exports.__FastEventScope__=H;exports.__FastEvent__=G;exports.__expandable__=N;exports.expandable=de;exports.isClass=Ge;exports.isExpandable=V;exports.isFastEvent=Ke;exports.isFastEventMessage=Ie;exports.isFastEventScope=W;exports.isFunction=c;exports.isPathMatched=w;exports.isString=$e;exports.isSubsctiber=B;//# sourceMappingURL=index.js.map
|
|
1
|
+
'use strict';var P=Object.defineProperty;var q=(n,e,t)=>e in n?P(n,e,{enumerable:true,configurable:true,writable:true,value:t}):n[e]=t;var u=(n,e)=>P(n,"name",{value:e,configurable:true});var h=(n,e,t)=>q(n,typeof e!="symbol"?e+"":e,t);var G=Symbol.for("__FastEvent__"),H=Symbol.for("__FastEventScope__"),S=class S extends Error{constructor(e){super(e);}};u(S,"FastEventError");var m=S,A=class A extends m{};u(A,"TimeoutError");var R=A,M=class M extends m{};u(M,"UnboundError");var d=M,T=class T extends m{};u(T,"AbortError");var _=T,j=class j extends m{};u(j,"CancelError");var x=j,O=class O extends m{};u(O,"QueueOverflowError");var C=O,y={clearRetain:Symbol.for("ClearRetain")};function b(n,e,t,s){let i,r={},o={};return typeof n[0]=="object"?(Object.assign(o,n[0]),r=typeof n[1]=="boolean"?{retain:n[1]}:n[1]||{},i=n[0].meta):(o.type=n[0],o.payload=n[1],r=typeof n[2]=="boolean"?{retain:n[2]}:n[2]||{}),i=Object.assign({},e,t,r.meta,i),Object.keys(i).length===0&&(i=void 0),o.meta=i,r.executor===void 0&&(r.executor=s),[o,r]}u(b,"parseEmitArgs");function W(n){return n?typeof n=="object"&&"__FastEventScope__"in n:false}u(W,"isFastEventScope");function L(n,e,t){let s=n[0],i=W(n[1])?n[1]:void 0,r=(i?n[2]:n[1])||{};return r.meta=Object.assign({},e,r?.meta),r.context=r.context!==void 0?r.context:t,[s,i,r]}u(L,"parseScopeArgs");function g(n,e){return Object.defineProperty(n,"name",{value:e||"anonymous",configurable:true}),n}u(g,"renameFn");var v=class v{constructor(e){h(this,"__FastEventScope__",true);h(this,"_options",{});h(this,"types",{events:void 0,meta:void 0,context:void 0,message:void 0,listeners:void 0,anyListener:void 0});h(this,"prefix","");h(this,"emitter");this._options=Object.assign({},this._initOptions(e));}get context(){return this.options.context||this}get options(){return this._options}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;e||(e=(this._options.onMessage||this.onMessage).bind(this));let s=this;return g(function(r,o){if(r.type.startsWith(t))return e.call(s.context,Object.assign({},r,{type:r.type.substring(t.length)}),o)},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 d;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(){if(arguments.length===2&&typeof arguments[0]=="string"&&arguments[1]===y.clearRetain)return this.emitter.emit(this._getScopeType(arguments[0]));let[e,t]=b(arguments,this.emitter.options.meta,this.options.meta,this.options.executor);return e.type=this._getScopeType(e.type),this.emitter.emit(e,t)}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]=L(arguments,this.options.meta,this.options.context),i;return t?i=t:i=new v,i.bind(this.emitter,this.prefix+e,s),i}onMessage(e,t){}};u(v,"FastEventScope");var E=v;function w(n,e){if(n.length!==e.length&&n.length>0&&e[e.length-1]!=="**")return false;let t=[...e];e.length>0&&e[e.length-1]==="**"&&t.splice(e.length-1,1,...Array.from({length:n.length-e.length+1}).fill("*"));for(let s=0;s<n.length;s++)if(t[s]!=="*"&&t[s]!==n[s])return false;return true}u(w,"isPathMatched");function D(n,e){let t=[];for(;;){let s=n.findIndex(i=>e(i));if(s===-1){t.push(s);break}n.splice(s,1);}return t}u(D,"removeItem");function c(n){return n&&typeof n=="function"}u(c,"isFunction");var N=Symbol.for("__expandable__");function ge(n){return n[N]=true,n}u(ge,"expandable");function V(n){return n&&n[N]}u(V,"isExpandable");function I(n){for(let e=0;e<n.length;e++){let t=n[e];Array.isArray(t)&&V(t)&&(n.splice(e,1,...t),e+=t.length-1);}return n}u(I,"expandEmitResults");function B(n){return n&&typeof n=="object"&&"off"in n&&"listener"in n}u(B,"isSubsctiber");function X(n,e){return n.catch(t=>(e&&e(t),Promise.resolve(t)))}u(X,"tryReturnError");var F=class F{constructor(e){h(this,"__FastEvent__",true);h(this,"listeners",{__listeners:[]});h(this,"_options");h(this,"_delimiter","/");h(this,"_context");h(this,"retainedMessages",new Map);h(this,"listenerCount",0);h(this,"types",{events:void 0,meta:void 0,context:void 0,message:void 0,listeners:void 0,anyListener:void 0});this._options=Object.assign({debug:false,id:Math.random().toString(36).substring(2),delimiter:"/",context:null,ignoreErrors:true,meta:void 0,expandEmitResults:true},this._initOptions(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,s){let{count:i,prepend:r}=s,o=0;return [this._forEachNodes(e,a=>{let p=[t,i,0,s.tag,s.flags];r?(a.__listeners.splice(0,0,p),o=0):(a.__listeners.push(p),o=a.__listeners.length-1),this.listenerCount++;}),o]}_enableDevTools(){this.options.debug&&globalThis.__FLEXEVENT_DEVTOOLS__&&globalThis.__FLEXEVENT_DEVTOOLS__.add(this);}_forEachNodes(e,t){if(e.length===0)return;let s=this.listeners;for(let i=0;i<e.length;i++){let r=e[i];if(r in s||(s[r]={__listeners:[]}),i===e.length-1){let o=s[r];return t(o,s),o}else s=s[r];}}_removeListener(e,t,s){s&&D(e.__listeners,i=>{i=Array.isArray(i)?i[0]:i;let r=i===s;return r&&(this.listenerCount--,c(this._options.onRemoveListener)&&this._options.onRemoveListener(t.join(this._delimiter),s)),r});}_pipeListener(e,t){return t.forEach(s=>{e=g(s(e),e.name);}),e}on(){let e=arguments[0],t=c(arguments[1])?arguments[1]:(this._options.onMessage||this.onMessage).bind(this),s=Object.assign({count:0,flags:0,prepend:false},c(arguments[1])?arguments[2]:arguments[1]);if(e.length===0)throw new Error("event type cannot be empty");if(c(this._options.onAddListener)){let a=this._options.onAddListener(e,t,s);if(a===false)throw new x;if(B(a))return a}let i=e.split(this._delimiter);if(s.pipes&&s.pipes.length>0&&(t=this._pipeListener(t,s.pipes)),c(s.filter)||c(s.off)){let a=t;t=g(function(p,l){if(c(s.off)&&s.off.call(this,p,l)){f();return}if(c(s.filter)){if(s.filter.call(this,p,l))return a.call(this,p,l)}else return a.call(this,p,l)},t.name);}let[r,o]=this._addListener(i,t,s),f=u(()=>r&&this._removeListener(r,i,t),"off");return this._emitRetainMessage(e,r,o),{off:f,listener:t}}once(){return c(arguments[1])?this.on(arguments[0],arguments[1],Object.assign({},arguments[2],{count:1})):this.on(arguments[0],Object.assign({},arguments[2],{count:1}))}onAny(){return this.on("**",arguments[0],arguments[1])}onMessage(e,t){}off(){let e=arguments,t=c(e[0])?void 0:e[0],s=c(e[0])?e[0]:e[1],i=t?t.split(this._delimiter):[],r=t?t.includes("*"):false;if(t&&!r)this._traverseToPath(this.listeners,i,o=>{s?this._removeListener(o,i,s):t&&(o.__listeners=[]);});else {let o=r?[]:i;this._traverseListeners(this.listeners,o,(f,a)=>{(s!==void 0||r&&w(f,i))&&(s?this._removeListener(a,i,s):a.__listeners=[]);});}}offAll(e){if(e){let t=e.split(this._delimiter),s=0;this._traverseListeners(this.listeners,t,(i,r)=>{s+=r.__listeners.length,r.__listeners=[];}),this.listenerCount-=s,this._removeRetainedEvents(e);}else {let t=0;this._traverseListeners(this.listeners,[],(s,i)=>{t+=i.__listeners.length;}),this.listenerCount-=t,this.retainedMessages.clear(),this.listeners={__listeners:[]};}c(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,s){let i=[];if(e.includes("*")){let r=e.split(this._delimiter);this.retainedMessages.forEach((o,f)=>{let a=f.split(this._delimiter);w(a,r)&&i.push(o);});}else this.retainedMessages.has(e)&&i.push(this.retainedMessages.get(e));t&&i.forEach(r=>{this._executeListeners([t],r,{},o=>o[0]===t.__listeners[s][0]);});}_traverseToPath(e,t,s,i=0,r){if(i>=t.length){s(e);return}let o=t[i];if(r===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),o in e&&this._traverseToPath(e[o],t,s,i+1);}_traverseListeners(e,t,s){let i=e;t&&t.length>0&&this._traverseToPath(e,t,o=>{i=o;});let r=u((o,f,a)=>{f(a,o);for(let[p,l]of Object.entries(o))p.startsWith("__")||l&&r(l,f,[...a,p]);},"traverseNodes");r(i,s,[]);}_onListenerError(e,t,s,i){if(i instanceof Error&&(i._emitter=`${e.name||"anonymous"}:${t.type}`),c(this._options.onListenerError))try{this._options.onListenerError.call(this,i,e,t,s);}catch{}if(this._options.ignoreErrors)return i;throw i}_executeListener(e,t,s,i=false){try{if(s&&s.abortSignal&&s.abortSignal.aborted)return this._onListenerError(e,t,s,new _(e.name));let r=e.call(this.context,t,s);return i&&r&&r instanceof Promise&&(r=X(r,o=>this._onListenerError(e,t,s,o))),r}catch(r){return this._onListenerError(e,t,s,r)}}_getListenerExecutor(e){if(!e)return;let t=e.executor||this._options.executor;if(c(t))return t}_executeListeners(e,t,s,i){if(!e||e.length===0)return [];let r=e.reduce((f,a)=>f.concat(a.__listeners.filter(p=>c(i)?i(p,a):true).map((p,l)=>[p,l,a.__listeners])),[]);this._decListenerExecCount(r);let o=this._getListenerExecutor(s);if(o){let f=o(r.map(a=>a[0]),t,s,this._executeListener.bind(this));return Array.isArray(f)?f:[f]}else return r.map(f=>this._executeListener(f[0][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);return this._traverseToPath(this.listeners,s,i=>{t.push(i);}),t[0].__listeners}emit(){if(arguments.length===2&&typeof arguments[0]=="string"&&arguments[1]===y.clearRetain)return this.retainedMessages.delete(arguments[0]),[];let[e,t]=b(arguments,this.options.meta);c(t.parseArgs)&&t.parseArgs(e,t);let s=e.type.split(this._delimiter);t.retain&&this.retainedMessages.set(e.type,e);let i=[],r=[];if(this._traverseToPath(this.listeners,s,o=>{r.push(o);}),c(this._options.onBeforeExecuteListener)){let o=this._options.onBeforeExecuteListener.call(this,e,t);if(Array.isArray(o))return o;if(o===false)throw new _(e.type)}return i.push(...this._executeListeners(r,e,t)),c(this._options.onAfterExecuteListener)&&this._options.onAfterExecuteListener.call(this,e,i,r),this._options.expandEmitResults&&I(i),i}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((s,i)=>{let r,o,f=u(a=>{clearTimeout(r),o&&o.off(),s(a);},"listener");t&&t>0&&(r=setTimeout(()=>{o&&o.off(),i(new Error("wait for event<"+e+"> is timeout"));},t)),o=this.on(e,f);})}scope(){let[e,t,s]=L(arguments,this.options.meta,this.options.context),i;return t?i=t:i=new E,i.bind(this,e,s),i}};u(F,"FastEvent");var $=F;function Ie(n){return n?typeof n=="object"&&"type"in n:false}u(Ie,"isFastEventMessage");function $e(n){return n&&typeof n=="string"}u($e,"isString");function Ge(n){return typeof n=="function"&&(n.toString().startsWith("class ")||n.prototype?.constructor===n)}u(Ge,"isClass");function Ke(n){return n?typeof n=="object"&&"__FastEvent__"in n:false}u(Ke,"isFastEvent");exports.AbortError=_;exports.CancelError=x;exports.FastEvent=$;exports.FastEventDirectives=y;exports.FastEventError=m;exports.FastEventScope=E;exports.QueueOverflowError=C;exports.TimeoutError=R;exports.UnboundError=d;exports.__FastEventScope__=H;exports.__FastEvent__=G;exports.__expandable__=N;exports.expandable=ge;exports.isClass=Ge;exports.isExpandable=V;exports.isFastEvent=Ke;exports.isFastEventMessage=Ie;exports.isFastEventScope=W;exports.isFunction=c;exports.isPathMatched=w;exports.isString=$e;exports.isSubsctiber=B;//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|