fastevent 2.2.4 → 2.2.6

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.
@@ -1,2 +1,2 @@
1
- 'use strict';var y=Object.defineProperty;var o=(r,n)=>y(r,"name",{value:n,configurable:true});var v=o(()=>(r,n,t,f)=>(r.forEach(e=>e[2]--),r[0][2]++,[f(r[0][0],n,t)]),"first");var k=o(()=>(r,n,t,f)=>(r.forEach(e=>e[2]--),r[r.length-1][2]++,[f(r[r.length-1][0],n,t)]),"last");var P=o(()=>(r,n,t,f)=>{let e,u;return (!t||t&&!t.abortSignal)&&(u=new AbortController,t||(t={}),t.abortSignal=u.signal),[Promise.race(r.map(c=>(c[2]--,Promise.resolve(f(c[0],n,t)).then(m=>(e||(e=c,c[2]++),u?.abort(),m)))))]},"race");var A=o(()=>(r,n,t,f)=>{let e=Math.floor(Math.random()*r.length);return r.forEach(u=>u[2]--),r[e][2]++,[f(r[e][0],n,t)]},"random");var q=o(()=>(r,n,t,f)=>{let e,u=0;return r.forEach((i,c)=>{i[2]--,(e===void 0||e>i[2])&&(e=i[2],u=c);}),r[u][2]++,[f(r[u][0],n,t)]},"balance");function a(r){return r&&typeof r=="function"}o(a,"isFunction");function d(r){return r&&typeof r=="string"}o(d,"isString");var _=o(r=>{let{reverse:n,onNext:t,onReturns:f,onError:e}=Object.assign({reverse:false,onError:o(()=>{},"onError"),onNext:o(()=>true,"onNext"),onReturns:o((u,i)=>i,"onReturns")},r);return async(u,i,c,m)=>{let l,p,E=0;u.forEach(x=>x[2]--);for(let x=0;x<u.length;x++){let b=u[n?u.length-1-x:x],g=b[0];try{if(a(t)&&t(++E,p,i,c,l)===!1)break;p=await m(g,i,c,!1),a(f)?l=f(l,p):l=p,b[2]++;}catch(s){try{let h=d(e)?e:a(e)&&e(s,i,c);if(h==="skip")continue;if(h==="error"){l=s;break}else if(h==="abort")break}catch{}}}return l}},"series");var lr=o(r=>_(Object.assign({},r,{onError:"abort",onNext:o((n,t,f)=>{f.payload=t;},"onNext")})),"waterfall");var ar=o(()=>(r,n,t,f)=>r.map(e=>f(e[0],n,t,true)),"parallel");exports.balance=q;exports.first=v;exports.last=k;exports.parallel=ar;exports.race=P;exports.random=A;exports.series=_;exports.waterfall=lr;//# sourceMappingURL=index.js.map
1
+ 'use strict';var S=Object.defineProperty;var o=(r,n)=>S(r,"name",{value:n,configurable:true});var F=o(()=>(r,n,t,f)=>(r.forEach(e=>e[2]--),r[0][2]++,[f(r[0][0],n,t)]),"first");var v=o(()=>(r,n,t,f)=>(r.forEach(e=>e[2]--),r[r.length-1][2]++,[f(r[r.length-1][0],n,t)]),"last");var P=o(()=>(r,n,t,f)=>{let e,i;return (!t||t&&!t.abortSignal)&&(i=new AbortController,t||(t={}),t.abortSignal=i.signal),[Promise.race(r.map(c=>(c[2]--,Promise.resolve(f(c[0],n,t)).then(s=>(e||(e=c,c[2]++),i?.abort(),s)))))]},"race");var R=o(()=>(r,n,t,f)=>{let e=Math.floor(Math.random()*r.length);return r.forEach(i=>i[2]--),r[e][2]++,[f(r[e][0],n,t)]},"random");var W=o(()=>(r,n,t,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,t)]},"balance");function a(r){return r&&typeof r=="function"}o(a,"isFunction");function d(r){return r&&typeof r=="string"}o(d,"isString");var _=o(r=>{let{reverse:n,onNext:t,onReturns:f,onError:e}=Object.assign({reverse:false,onError:o(()=>{},"onError"),onNext:o(()=>true,"onNext"),onReturns:o((i,u)=>u,"onReturns")},r);return async(i,u,c,s)=>{let p,l,y=0;i.forEach(x=>x[2]--);for(let x=0;x<i.length;x++){let h=i[n?i.length-1-x:x],E=h[0];try{if(a(t)&&t(++y,l,u,c,p)===!1)break;l=await s(E,u,c,!1),a(f)?p=f(p,l):p=l,h[2]++;}catch(b){try{let m=d(e)?e:a(e)&&e(b,u,c);if(m==="skip")continue;if(m==="error"){p=b;break}else if(m==="abort")break}catch{}}}return p}},"series");var _r=o(r=>_(Object.assign({},r,{onError:"abort",onNext:o((n,t,f)=>{f.payload=t;},"onNext")})),"waterfall");var Sr=o(()=>(r,n,t,f)=>r.map(e=>f(e[0],n,t,true)),"parallel");exports.balance=W;exports.first=F;exports.last=v;exports.parallel=Sr;exports.race=P;exports.random=R;exports.series=_;exports.waterfall=_r;//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- var y=Object.defineProperty;var o=(r,n)=>y(r,"name",{value:n,configurable:true});var v=o(()=>(r,n,t,f)=>(r.forEach(e=>e[2]--),r[0][2]++,[f(r[0][0],n,t)]),"first");var k=o(()=>(r,n,t,f)=>(r.forEach(e=>e[2]--),r[r.length-1][2]++,[f(r[r.length-1][0],n,t)]),"last");var P=o(()=>(r,n,t,f)=>{let e,u;return (!t||t&&!t.abortSignal)&&(u=new AbortController,t||(t={}),t.abortSignal=u.signal),[Promise.race(r.map(c=>(c[2]--,Promise.resolve(f(c[0],n,t)).then(m=>(e||(e=c,c[2]++),u?.abort(),m)))))]},"race");var A=o(()=>(r,n,t,f)=>{let e=Math.floor(Math.random()*r.length);return r.forEach(u=>u[2]--),r[e][2]++,[f(r[e][0],n,t)]},"random");var q=o(()=>(r,n,t,f)=>{let e,u=0;return r.forEach((i,c)=>{i[2]--,(e===void 0||e>i[2])&&(e=i[2],u=c);}),r[u][2]++,[f(r[u][0],n,t)]},"balance");function a(r){return r&&typeof r=="function"}o(a,"isFunction");function d(r){return r&&typeof r=="string"}o(d,"isString");var _=o(r=>{let{reverse:n,onNext:t,onReturns:f,onError:e}=Object.assign({reverse:false,onError:o(()=>{},"onError"),onNext:o(()=>true,"onNext"),onReturns:o((u,i)=>i,"onReturns")},r);return async(u,i,c,m)=>{let l,p,E=0;u.forEach(x=>x[2]--);for(let x=0;x<u.length;x++){let b=u[n?u.length-1-x:x],g=b[0];try{if(a(t)&&t(++E,p,i,c,l)===!1)break;p=await m(g,i,c,!1),a(f)?l=f(l,p):l=p,b[2]++;}catch(s){try{let h=d(e)?e:a(e)&&e(s,i,c);if(h==="skip")continue;if(h==="error"){l=s;break}else if(h==="abort")break}catch{}}}return l}},"series");var lr=o(r=>_(Object.assign({},r,{onError:"abort",onNext:o((n,t,f)=>{f.payload=t;},"onNext")})),"waterfall");var ar=o(()=>(r,n,t,f)=>r.map(e=>f(e[0],n,t,true)),"parallel");export{q as balance,v as first,k as last,ar as parallel,P as race,A as random,_ as series,lr as waterfall};//# sourceMappingURL=index.mjs.map
1
+ var S=Object.defineProperty;var o=(r,n)=>S(r,"name",{value:n,configurable:true});var F=o(()=>(r,n,t,f)=>(r.forEach(e=>e[2]--),r[0][2]++,[f(r[0][0],n,t)]),"first");var v=o(()=>(r,n,t,f)=>(r.forEach(e=>e[2]--),r[r.length-1][2]++,[f(r[r.length-1][0],n,t)]),"last");var P=o(()=>(r,n,t,f)=>{let e,i;return (!t||t&&!t.abortSignal)&&(i=new AbortController,t||(t={}),t.abortSignal=i.signal),[Promise.race(r.map(c=>(c[2]--,Promise.resolve(f(c[0],n,t)).then(s=>(e||(e=c,c[2]++),i?.abort(),s)))))]},"race");var R=o(()=>(r,n,t,f)=>{let e=Math.floor(Math.random()*r.length);return r.forEach(i=>i[2]--),r[e][2]++,[f(r[e][0],n,t)]},"random");var W=o(()=>(r,n,t,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,t)]},"balance");function a(r){return r&&typeof r=="function"}o(a,"isFunction");function d(r){return r&&typeof r=="string"}o(d,"isString");var _=o(r=>{let{reverse:n,onNext:t,onReturns:f,onError:e}=Object.assign({reverse:false,onError:o(()=>{},"onError"),onNext:o(()=>true,"onNext"),onReturns:o((i,u)=>u,"onReturns")},r);return async(i,u,c,s)=>{let p,l,y=0;i.forEach(x=>x[2]--);for(let x=0;x<i.length;x++){let h=i[n?i.length-1-x:x],E=h[0];try{if(a(t)&&t(++y,l,u,c,p)===!1)break;l=await s(E,u,c,!1),a(f)?p=f(p,l):p=l,h[2]++;}catch(b){try{let m=d(e)?e:a(e)&&e(b,u,c);if(m==="skip")continue;if(m==="error"){p=b;break}else if(m==="abort")break}catch{}}}return p}},"series");var _r=o(r=>_(Object.assign({},r,{onError:"abort",onNext:o((n,t,f)=>{f.payload=t;},"onNext")})),"waterfall");var Sr=o(()=>(r,n,t,f)=>r.map(e=>f(e[0],n,t,true)),"parallel");export{W as balance,F as first,v as last,Sr as parallel,P as race,R as random,_ as series,_r as waterfall};//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map
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
  };
@@ -670,6 +669,7 @@ declare class FastEvent<Events extends Record<string, any> = Record<string, any>
670
669
  * @param listeners
671
670
  */
672
671
  _decListenerExecCount(listeners: [FastListenerMeta, number, FastListenerMeta[]][]): void;
672
+ getListeners(type: keyof AllEvents): FastListenerMeta[];
673
673
  /**
674
674
  * 触发事件并执行对应的监听器
675
675
  *
@@ -742,7 +742,6 @@ declare class FastEvent<Events extends Record<string, any> = Record<string, any>
742
742
  [K in T]: K extends Types ? AllEvents[K] : any;
743
743
  }, Meta>, options?: FastEventListenerArgs<Meta>): R[];
744
744
  emit<R = any>(message: FastEventEmitMessage<AllEvents, Meta>, options?: FastEventListenerArgs<Meta>): R[];
745
- getListeners(type: keyof AllEvents): FastListenerMeta[];
746
745
  /**
747
746
  * 异步触发事件
748
747
  * @param type - 事件类型,可以是字符串或预定义的事件类型
@@ -816,6 +815,12 @@ declare class FastEvent<Events extends Record<string, any> = Record<string, any>
816
815
  * // 无限等待事件
817
816
  * const event = await emitter.waitFor('server/ready');
818
817
  * console.log('服务器就绪');
818
+ *
819
+ * // 等待指定的事件发生,并且如果该事件有其他订阅者,则同时等待该事件的所有订阅执行完成
820
+ * waitFor
821
+ *
822
+ *
823
+ *
819
824
  * ```
820
825
  */
821
826
  waitFor<T extends Types>(type: T, timeout?: number): Promise<TypedFastEventMessage<{
@@ -888,4 +893,82 @@ declare const FastEventDirectives: {
888
893
  clearRetain: symbol;
889
894
  };
890
895
 
891
- export { AbortError, CancelError, type ChangeFieldType, type DeepPartial, type Dict, type Expand, type Fallback, FastEvent, FastEventDirectives, type FastEventEmitMessage, FastEventError, type FastEventListenOptions, type FastEventListener, type FastEventListenerArgs, type FastEventListeners, type FastEventMessage, type FastEventMessageExtends, type FastEventMeta, type FastEventOptions, FastEventScope, type FastEventScopeMeta, type FastEventScopeOptions, type FastEventSubscriber, type FastEvents, type FastListenerMeta, type FastListenerNode, type FastListeners, type Merge, type ObjectKeys, type OptionalItems, type Overloads, type OverrideOptions, type PickScopeEvents, QueueOverflowError, type RequiredItems, type ScopeEvents, TimeoutError, type TypedFastEventAnyListener, type TypedFastEventListener, type TypedFastEventMessage, type TypedFastEventMessageOptional, UnboundError, type Unique, __FastEventScope__, __FastEvent__ };
896
+ declare function isFastEventScope(target: any): target is FastEventScope;
897
+
898
+ declare function isFastEventMessage(msg: any): msg is TypedFastEventMessage;
899
+
900
+ declare function isFunction(fn: any): fn is Function;
901
+
902
+ declare function isString(str: any): str is string;
903
+
904
+ /**
905
+ *
906
+ *
907
+ * 用于包括输入值为可展开的对象
908
+ *
909
+ *
910
+ * 用在emit事件
911
+ *
912
+ * emitter1 = new FastEvent()
913
+ * emitter2 = new FastEvent()
914
+ *
915
+ * emitter1.on("xxx",(message)=>{
916
+ * return emitter2.emit(message)
917
+ * })
918
+ *
919
+ * emitter2.on("xxx",()=>1)
920
+ * emitter2.on("xxx",()=>2)
921
+ *
922
+ * const results = emitter1.emit("xxx")
923
+ * // results == [[1,2]] 而不 [1,2],因为emitter2.emit返回的是一个[]
924
+ *
925
+ * expandable的作用就是对emit结果进行包括,当isExpandable时,在emit内部进行展开
926
+ *
927
+ *
928
+ *
929
+ *
930
+ * emitter1.on("xxx",(message)=>{
931
+ * // 告诉emitter2.emit返回的是一个expandable对象
932
+ * // 然后在内部就展开此对象
933
+ * return emitter2.emit(message)
934
+ * })
935
+ *
936
+ * const results = emitter1.emit("xxx")
937
+ * // results == [1,2]
938
+ *
939
+ * 为了实现对结果数据的展开处理,在emit内部需要对监听器的执行结果进行依次检查
940
+ * 这多了一个迭代操作,为了不影响性能,可以关闭此特性
941
+ * options.expandEmitResults = false
942
+ *
943
+ *
944
+ */
945
+ declare const __expandable__: unique symbol;
946
+ declare function expandable(value: any): any;
947
+ declare function isExpandable(value: any): any;
948
+
949
+ /**
950
+ *
951
+ * 判断path是否与pattern匹配
952
+ *
953
+ * isPathMatched("a.b.c","a.b.c") == true
954
+ * isPathMatched("a.b.c","a.b.*") == true
955
+ * isPathMatched("a.b.c","a.*.*") == true
956
+ * isPathMatched("a.b.c","*.*.*") == true
957
+ * isPathMatched("a.b.c",".b.*") == true
958
+ * isPathMatched("a.b.c.d","a.**") == true
959
+ *
960
+ * - '**' 匹配后续的
961
+ * - '*' 匹配任意数量的字符,包括零个字符
962
+ *
963
+ * @param path
964
+ * @param pattern
965
+ */
966
+ declare function isPathMatched(path: string[], pattern: string[]): boolean;
967
+
968
+ declare function isSubsctiber(val: any): val is FastEventSubscriber;
969
+
970
+ declare function isClass(target: unknown): target is new (...args: any[]) => any;
971
+
972
+ declare function isFastEvent(target: any): target is FastEvent;
973
+
974
+ export { AbortError, CancelError, type ChangeFieldType, type DeepPartial, type Dict, type Expand, type Fallback, FastEvent, FastEventDirectives, type FastEventEmitMessage, FastEventError, type FastEventListenOptions, type FastEventListener, type FastEventListenerArgs, type FastEventListeners, type FastEventMessage, type FastEventMessageExtends, type FastEventMeta, type FastEventOptions, FastEventScope, type FastEventScopeMeta, type FastEventScopeOptions, type FastEventSubscriber, type FastEvents, type FastListenerMeta, type FastListenerNode, type FastListeners, type Merge, type ObjectKeys, type OptionalItems, type Overloads, type OverrideOptions, type PickScopeEvents, QueueOverflowError, type RequiredItems, type ScopeEvents, TimeoutError, type TypedFastEventAnyListener, type TypedFastEventListener, type TypedFastEventMessage, type TypedFastEventMessageOptional, UnboundError, type Unique, __FastEventScope__, __FastEvent__, __expandable__, expandable, isClass, isExpandable, isFastEvent, isFastEventMessage, isFastEventScope, isFunction, isPathMatched, isString, isSubsctiber };
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
  };
@@ -670,6 +669,7 @@ declare class FastEvent<Events extends Record<string, any> = Record<string, any>
670
669
  * @param listeners
671
670
  */
672
671
  _decListenerExecCount(listeners: [FastListenerMeta, number, FastListenerMeta[]][]): void;
672
+ getListeners(type: keyof AllEvents): FastListenerMeta[];
673
673
  /**
674
674
  * 触发事件并执行对应的监听器
675
675
  *
@@ -742,7 +742,6 @@ declare class FastEvent<Events extends Record<string, any> = Record<string, any>
742
742
  [K in T]: K extends Types ? AllEvents[K] : any;
743
743
  }, Meta>, options?: FastEventListenerArgs<Meta>): R[];
744
744
  emit<R = any>(message: FastEventEmitMessage<AllEvents, Meta>, options?: FastEventListenerArgs<Meta>): R[];
745
- getListeners(type: keyof AllEvents): FastListenerMeta[];
746
745
  /**
747
746
  * 异步触发事件
748
747
  * @param type - 事件类型,可以是字符串或预定义的事件类型
@@ -816,6 +815,12 @@ declare class FastEvent<Events extends Record<string, any> = Record<string, any>
816
815
  * // 无限等待事件
817
816
  * const event = await emitter.waitFor('server/ready');
818
817
  * console.log('服务器就绪');
818
+ *
819
+ * // 等待指定的事件发生,并且如果该事件有其他订阅者,则同时等待该事件的所有订阅执行完成
820
+ * waitFor
821
+ *
822
+ *
823
+ *
819
824
  * ```
820
825
  */
821
826
  waitFor<T extends Types>(type: T, timeout?: number): Promise<TypedFastEventMessage<{
@@ -888,4 +893,82 @@ declare const FastEventDirectives: {
888
893
  clearRetain: symbol;
889
894
  };
890
895
 
891
- export { AbortError, CancelError, type ChangeFieldType, type DeepPartial, type Dict, type Expand, type Fallback, FastEvent, FastEventDirectives, type FastEventEmitMessage, FastEventError, type FastEventListenOptions, type FastEventListener, type FastEventListenerArgs, type FastEventListeners, type FastEventMessage, type FastEventMessageExtends, type FastEventMeta, type FastEventOptions, FastEventScope, type FastEventScopeMeta, type FastEventScopeOptions, type FastEventSubscriber, type FastEvents, type FastListenerMeta, type FastListenerNode, type FastListeners, type Merge, type ObjectKeys, type OptionalItems, type Overloads, type OverrideOptions, type PickScopeEvents, QueueOverflowError, type RequiredItems, type ScopeEvents, TimeoutError, type TypedFastEventAnyListener, type TypedFastEventListener, type TypedFastEventMessage, type TypedFastEventMessageOptional, UnboundError, type Unique, __FastEventScope__, __FastEvent__ };
896
+ declare function isFastEventScope(target: any): target is FastEventScope;
897
+
898
+ declare function isFastEventMessage(msg: any): msg is TypedFastEventMessage;
899
+
900
+ declare function isFunction(fn: any): fn is Function;
901
+
902
+ declare function isString(str: any): str is string;
903
+
904
+ /**
905
+ *
906
+ *
907
+ * 用于包括输入值为可展开的对象
908
+ *
909
+ *
910
+ * 用在emit事件
911
+ *
912
+ * emitter1 = new FastEvent()
913
+ * emitter2 = new FastEvent()
914
+ *
915
+ * emitter1.on("xxx",(message)=>{
916
+ * return emitter2.emit(message)
917
+ * })
918
+ *
919
+ * emitter2.on("xxx",()=>1)
920
+ * emitter2.on("xxx",()=>2)
921
+ *
922
+ * const results = emitter1.emit("xxx")
923
+ * // results == [[1,2]] 而不 [1,2],因为emitter2.emit返回的是一个[]
924
+ *
925
+ * expandable的作用就是对emit结果进行包括,当isExpandable时,在emit内部进行展开
926
+ *
927
+ *
928
+ *
929
+ *
930
+ * emitter1.on("xxx",(message)=>{
931
+ * // 告诉emitter2.emit返回的是一个expandable对象
932
+ * // 然后在内部就展开此对象
933
+ * return emitter2.emit(message)
934
+ * })
935
+ *
936
+ * const results = emitter1.emit("xxx")
937
+ * // results == [1,2]
938
+ *
939
+ * 为了实现对结果数据的展开处理,在emit内部需要对监听器的执行结果进行依次检查
940
+ * 这多了一个迭代操作,为了不影响性能,可以关闭此特性
941
+ * options.expandEmitResults = false
942
+ *
943
+ *
944
+ */
945
+ declare const __expandable__: unique symbol;
946
+ declare function expandable(value: any): any;
947
+ declare function isExpandable(value: any): any;
948
+
949
+ /**
950
+ *
951
+ * 判断path是否与pattern匹配
952
+ *
953
+ * isPathMatched("a.b.c","a.b.c") == true
954
+ * isPathMatched("a.b.c","a.b.*") == true
955
+ * isPathMatched("a.b.c","a.*.*") == true
956
+ * isPathMatched("a.b.c","*.*.*") == true
957
+ * isPathMatched("a.b.c",".b.*") == true
958
+ * isPathMatched("a.b.c.d","a.**") == true
959
+ *
960
+ * - '**' 匹配后续的
961
+ * - '*' 匹配任意数量的字符,包括零个字符
962
+ *
963
+ * @param path
964
+ * @param pattern
965
+ */
966
+ declare function isPathMatched(path: string[], pattern: string[]): boolean;
967
+
968
+ declare function isSubsctiber(val: any): val is FastEventSubscriber;
969
+
970
+ declare function isClass(target: unknown): target is new (...args: any[]) => any;
971
+
972
+ declare function isFastEvent(target: any): target is FastEvent;
973
+
974
+ export { AbortError, CancelError, type ChangeFieldType, type DeepPartial, type Dict, type Expand, type Fallback, FastEvent, FastEventDirectives, type FastEventEmitMessage, FastEventError, type FastEventListenOptions, type FastEventListener, type FastEventListenerArgs, type FastEventListeners, type FastEventMessage, type FastEventMessageExtends, type FastEventMeta, type FastEventOptions, FastEventScope, type FastEventScopeMeta, type FastEventScopeOptions, type FastEventSubscriber, type FastEvents, type FastListenerMeta, type FastListenerNode, type FastListeners, type Merge, type ObjectKeys, type OptionalItems, type Overloads, type OverrideOptions, type PickScopeEvents, QueueOverflowError, type RequiredItems, type ScopeEvents, TimeoutError, type TypedFastEventAnyListener, type TypedFastEventListener, type TypedFastEventMessage, type TypedFastEventMessageOptional, UnboundError, type Unique, __FastEventScope__, __FastEvent__, __expandable__, expandable, isClass, isExpandable, isFastEvent, isFastEventMessage, isFastEventScope, isFunction, isPathMatched, isString, isSubsctiber };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var R=Object.defineProperty;var $=(r,e,t)=>e in r?R(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var a=(r,e)=>R(r,"name",{value:e,configurable:true});var l=(r,e,t)=>$(r,typeof e!="symbol"?e+"":e,t);var G=Symbol.for("__FastEvent__"),H=Symbol.for("__FastEventScope__"),S=class S extends Error{constructor(e){super(e);}};a(S,"FastEventError");var m=S,A=class A extends m{};a(A,"TimeoutError");var F=A,T=class T extends m{};a(T,"UnboundError");var d=T,M=class M extends m{};a(M,"AbortError");var _=M,O=class O extends m{};a(O,"CancelError");var x=O,j=class j extends m{};a(j,"QueueOverflowError");var C=j,y={clearRetain:Symbol.for("ClearRetain")};function b(r,e,t,s){let i,n={},o={};return typeof r[0]=="object"?(Object.assign(o,r[0]),n=typeof r[1]=="boolean"?{retain:r[1]}:r[1]||{},i=r[0].meta):(o.type=r[0],o.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),o.meta=i,n.executor===void 0&&(n.executor=s),[o,n]}a(b,"parseEmitArgs");function D(r){return r?typeof r=="object"&&"__FastEventScope__"in r:false}a(D,"isFastEventScope");function L(r,e,t){let s=r[0],i=D(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]}a(L,"parseScopeArgs");function g(r,e){return Object.defineProperty(r,"name",{value:e||"anonymous",configurable:true}),r}a(g,"renameFn");var v=class v{constructor(e){l(this,"__FastEventScope__",true);l(this,"_options",{});l(this,"types",{events:void 0,meta:void 0,context:void 0,message:void 0,listeners:void 0,anyListener:void 0});l(this,"prefix","");l(this,"emitter");this._options=Object.assign({},this._initOptions(e));}get context(){return this.options.context||this}get options(){return this._options}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(n,o){if(n.type.startsWith(t))return e.call(s.context,Object.assign({},n,{type:n.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){}};a(v,"FastEventScope");var E=v;function w(r,e){if(r.length!==e.length&&r.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:r.length-e.length+1}).fill("*"));for(let s=0;s<r.length;s++)if(t[s]!=="*"&&t[s]!==r[s])return false;return true}a(w,"isPathMatched");function W(r,e){let t=[];for(;;){let s=r.findIndex(i=>e(i));if(s===-1){t.push(s);break}r.splice(s,1);}return t}a(W,"removeItem");function h(r){return r&&typeof r=="function"}a(h,"isFunction");var q=Symbol.for("__expandable__");function N(r){return r&&r[q]}a(N,"isExpandable");function V(r){for(let e=0;e<r.length;e++){let t=r[e];Array.isArray(t)&&N(t)&&(r.splice(e,1,...t),e+=t.length-1);}return r}a(V,"expandEmitResults");function I(r){return r&&typeof r=="object"&&"off"in r&&"listener"in r}a(I,"isSubsctiber");function B(r,e){return r.catch(t=>(e&&e(t),Promise.resolve(t)))}a(B,"tryReturnError");var P=class P{constructor(e){l(this,"__FastEvent__",true);l(this,"listeners",{__listeners:[]});l(this,"_options");l(this,"_delimiter","/");l(this,"_context");l(this,"retainedMessages",new Map);l(this,"listenerCount",0);l(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:n}=s,o=0;return [this._forEachNodes(e,u=>{let f=[t,i,0];s.tag&&f.push(s.tag),n?(u.__listeners.splice(0,0,f),o=0):(u.__listeners.push(f),o=u.__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 n=e[i];if(n in s||(s[n]={__listeners:[]}),i===e.length-1){let o=s[n];return t(o,s),o}else s=s[n];}}_removeListener(e,t,s){s&&W(e.__listeners,i=>{i=Array.isArray(i)?i[0]:i;let n=i===s;return n&&(this.listenerCount--,h(this._options.onRemoveListener)&&this._options.onRemoveListener(t.join(this._delimiter),s)),n});}_pipeListener(e,t){return t.forEach(s=>{e=g(s(e),e.name);}),e}on(){let e=arguments[0],t=h(arguments[1])?arguments[1]:(this._options.onMessage||this.onMessage).bind(this),s=Object.assign({count:0,prepend:false},h(arguments[1])?arguments[2]:arguments[1]);if(e.length===0)throw new Error("event type cannot be empty");if(h(this._options.onAddListener)){let u=this._options.onAddListener(e,t,s);if(u===false)throw new x;if(I(u))return u}let i=e.split(this._delimiter);if(s.pipes&&s.pipes.length>0&&(t=this._pipeListener(t,s.pipes)),h(s.filter)||h(s.off)){let u=t;t=g(function(f,p){if(h(s.off)&&s.off.call(this,f,p)){c();return}if(h(s.filter)){if(s.filter.call(this,f,p))return u.call(this,f,p)}else return u.call(this,f,p)},t.name);}let[n,o]=this._addListener(i,t,s),c=a(()=>n&&this._removeListener(n,i,t),"off");return this._emitRetainMessage(e,n,o),{off:c,listener:t}}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[0],arguments[1])}onMessage(e,t){}off(){let e=arguments,t=h(e[0])?void 0:e[0],s=h(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,o=>{s?this._removeListener(o,i,s):t&&(o.__listeners=[]);});else {let o=n?[]:i;this._traverseListeners(this.listeners,o,(c,u)=>{(s!==void 0||n&&w(c,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,n.__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:[]};}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,s){let i=[];if(e.includes("*")){let n=e.split(this._delimiter);this.retainedMessages.forEach((o,c)=>{let u=c.split(this._delimiter);w(u,n)&&i.push(o);});}else this.retainedMessages.has(e)&&i.push(this.retainedMessages.get(e));t&&i.forEach(n=>{this._executeListeners([t],n,{},o=>o[0]===t.__listeners[s][0]);});}_traverseToPath(e,t,s,i=0,n){if(i>=t.length){s(e);return}let o=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),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 n=a((o,c,u)=>{c(u,o);for(let[f,p]of Object.entries(o))f.startsWith("__")||p&&n(p,c,[...u,f]);},"traverseNodes");n(i,s,[]);}_onListenerError(e,t,s,i){if(i instanceof Error&&(i._emitter=`${e.name||"anonymous"}:${t.type}`),h(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 n=e.call(this.context,t,s);return i&&n&&n instanceof Promise&&(n=B(n,o=>this._onListenerError(e,t,s,o))),n}catch(n){return this._onListenerError(e,t,s,n)}}_getListenerExecutor(e){if(!e)return;let t=e.executor||this._options.executor;if(h(t))return t}_executeListeners(e,t,s,i){if(!e||e.length===0)return [];let n=e.reduce((c,u)=>c.concat(u.__listeners.filter(f=>h(i)?i(f,u):true).map((f,p)=>[f,p,u.__listeners])),[]);this._decListenerExecCount(n);let o=this._getListenerExecutor(s);if(o){let c=o(n.map(u=>u[0]),t,s,this._executeListener.bind(this));return Array.isArray(c)?c:[c]}else return n.map(c=>this._executeListener(c[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);h(t.parseArgs)&&t.parseArgs(e,t);let s=e.type.split(this._delimiter);t.retain&&this.retainedMessages.set(e.type,e);let i=[],n=[];if(this._traverseToPath(this.listeners,s,o=>{n.push(o);}),h(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(n,e,t)),h(this._options.onAfterExecuteListener)&&this._options.onAfterExecuteListener.call(this,e,i,n),this._options.expandEmitResults&&V(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 n,o,c=a(u=>{clearTimeout(n),o&&o.off(),s(u);},"listener");t&&t>0&&(n=setTimeout(()=>{o&&o.off(),i(new Error("wait for event<"+e+"> is timeout"));},t)),o=this.on(e,c);})}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}};a(P,"FastEvent");var X=P;exports.AbortError=_;exports.CancelError=x;exports.FastEvent=X;exports.FastEventDirectives=y;exports.FastEventError=m;exports.FastEventScope=E;exports.QueueOverflowError=C;exports.TimeoutError=F;exports.UnboundError=d;exports.__FastEventScope__=H;exports.__FastEvent__=G;//# 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