fastevent 2.2.4 → 2.2.5
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 +79 -1
- package/dist/eventbus/index.d.ts +79 -1
- 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.js +1 -1
- package/dist/executors/index.mjs +1 -1
- package/dist/index.d.mts +79 -1
- package/dist/index.d.ts +79 -1
- 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/package.json +1 -1
package/dist/executors/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
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
|
@@ -888,4 +888,82 @@ declare const FastEventDirectives: {
|
|
|
888
888
|
clearRetain: symbol;
|
|
889
889
|
};
|
|
890
890
|
|
|
891
|
-
|
|
891
|
+
declare function isFastEventScope(target: any): target is FastEventScope;
|
|
892
|
+
|
|
893
|
+
declare function isFastEventMessage(msg: any): msg is TypedFastEventMessage;
|
|
894
|
+
|
|
895
|
+
declare function isFunction(fn: any): fn is Function;
|
|
896
|
+
|
|
897
|
+
declare function isString(str: any): str is string;
|
|
898
|
+
|
|
899
|
+
/**
|
|
900
|
+
*
|
|
901
|
+
*
|
|
902
|
+
* 用于包括输入值为可展开的对象
|
|
903
|
+
*
|
|
904
|
+
*
|
|
905
|
+
* 用在emit事件
|
|
906
|
+
*
|
|
907
|
+
* emitter1 = new FastEvent()
|
|
908
|
+
* emitter2 = new FastEvent()
|
|
909
|
+
*
|
|
910
|
+
* emitter1.on("xxx",(message)=>{
|
|
911
|
+
* return emitter2.emit(message)
|
|
912
|
+
* })
|
|
913
|
+
*
|
|
914
|
+
* emitter2.on("xxx",()=>1)
|
|
915
|
+
* emitter2.on("xxx",()=>2)
|
|
916
|
+
*
|
|
917
|
+
* const results = emitter1.emit("xxx")
|
|
918
|
+
* // results == [[1,2]] 而不 [1,2],因为emitter2.emit返回的是一个[]
|
|
919
|
+
*
|
|
920
|
+
* expandable的作用就是对emit结果进行包括,当isExpandable时,在emit内部进行展开
|
|
921
|
+
*
|
|
922
|
+
*
|
|
923
|
+
*
|
|
924
|
+
*
|
|
925
|
+
* emitter1.on("xxx",(message)=>{
|
|
926
|
+
* // 告诉emitter2.emit返回的是一个expandable对象
|
|
927
|
+
* // 然后在内部就展开此对象
|
|
928
|
+
* return emitter2.emit(message)
|
|
929
|
+
* })
|
|
930
|
+
*
|
|
931
|
+
* const results = emitter1.emit("xxx")
|
|
932
|
+
* // results == [1,2]
|
|
933
|
+
*
|
|
934
|
+
* 为了实现对结果数据的展开处理,在emit内部需要对监听器的执行结果进行依次检查
|
|
935
|
+
* 这多了一个迭代操作,为了不影响性能,可以关闭此特性
|
|
936
|
+
* options.expandEmitResults = false
|
|
937
|
+
*
|
|
938
|
+
*
|
|
939
|
+
*/
|
|
940
|
+
declare const __expandable__: unique symbol;
|
|
941
|
+
declare function expandable(value: any): any;
|
|
942
|
+
declare function isExpandable(value: any): any;
|
|
943
|
+
|
|
944
|
+
/**
|
|
945
|
+
*
|
|
946
|
+
* 判断path是否与pattern匹配
|
|
947
|
+
*
|
|
948
|
+
* isPathMatched("a.b.c","a.b.c") == true
|
|
949
|
+
* isPathMatched("a.b.c","a.b.*") == true
|
|
950
|
+
* isPathMatched("a.b.c","a.*.*") == true
|
|
951
|
+
* isPathMatched("a.b.c","*.*.*") == true
|
|
952
|
+
* isPathMatched("a.b.c",".b.*") == true
|
|
953
|
+
* isPathMatched("a.b.c.d","a.**") == true
|
|
954
|
+
*
|
|
955
|
+
* - '**' 匹配后续的
|
|
956
|
+
* - '*' 匹配任意数量的字符,包括零个字符
|
|
957
|
+
*
|
|
958
|
+
* @param path
|
|
959
|
+
* @param pattern
|
|
960
|
+
*/
|
|
961
|
+
declare function isPathMatched(path: string[], pattern: string[]): boolean;
|
|
962
|
+
|
|
963
|
+
declare function isSubsctiber(val: any): val is FastEventSubscriber;
|
|
964
|
+
|
|
965
|
+
declare function isClass(target: unknown): target is new (...args: any[]) => any;
|
|
966
|
+
|
|
967
|
+
declare function isFastEvent(target: any): target is FastEvent;
|
|
968
|
+
|
|
969
|
+
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
|
@@ -888,4 +888,82 @@ declare const FastEventDirectives: {
|
|
|
888
888
|
clearRetain: symbol;
|
|
889
889
|
};
|
|
890
890
|
|
|
891
|
-
|
|
891
|
+
declare function isFastEventScope(target: any): target is FastEventScope;
|
|
892
|
+
|
|
893
|
+
declare function isFastEventMessage(msg: any): msg is TypedFastEventMessage;
|
|
894
|
+
|
|
895
|
+
declare function isFunction(fn: any): fn is Function;
|
|
896
|
+
|
|
897
|
+
declare function isString(str: any): str is string;
|
|
898
|
+
|
|
899
|
+
/**
|
|
900
|
+
*
|
|
901
|
+
*
|
|
902
|
+
* 用于包括输入值为可展开的对象
|
|
903
|
+
*
|
|
904
|
+
*
|
|
905
|
+
* 用在emit事件
|
|
906
|
+
*
|
|
907
|
+
* emitter1 = new FastEvent()
|
|
908
|
+
* emitter2 = new FastEvent()
|
|
909
|
+
*
|
|
910
|
+
* emitter1.on("xxx",(message)=>{
|
|
911
|
+
* return emitter2.emit(message)
|
|
912
|
+
* })
|
|
913
|
+
*
|
|
914
|
+
* emitter2.on("xxx",()=>1)
|
|
915
|
+
* emitter2.on("xxx",()=>2)
|
|
916
|
+
*
|
|
917
|
+
* const results = emitter1.emit("xxx")
|
|
918
|
+
* // results == [[1,2]] 而不 [1,2],因为emitter2.emit返回的是一个[]
|
|
919
|
+
*
|
|
920
|
+
* expandable的作用就是对emit结果进行包括,当isExpandable时,在emit内部进行展开
|
|
921
|
+
*
|
|
922
|
+
*
|
|
923
|
+
*
|
|
924
|
+
*
|
|
925
|
+
* emitter1.on("xxx",(message)=>{
|
|
926
|
+
* // 告诉emitter2.emit返回的是一个expandable对象
|
|
927
|
+
* // 然后在内部就展开此对象
|
|
928
|
+
* return emitter2.emit(message)
|
|
929
|
+
* })
|
|
930
|
+
*
|
|
931
|
+
* const results = emitter1.emit("xxx")
|
|
932
|
+
* // results == [1,2]
|
|
933
|
+
*
|
|
934
|
+
* 为了实现对结果数据的展开处理,在emit内部需要对监听器的执行结果进行依次检查
|
|
935
|
+
* 这多了一个迭代操作,为了不影响性能,可以关闭此特性
|
|
936
|
+
* options.expandEmitResults = false
|
|
937
|
+
*
|
|
938
|
+
*
|
|
939
|
+
*/
|
|
940
|
+
declare const __expandable__: unique symbol;
|
|
941
|
+
declare function expandable(value: any): any;
|
|
942
|
+
declare function isExpandable(value: any): any;
|
|
943
|
+
|
|
944
|
+
/**
|
|
945
|
+
*
|
|
946
|
+
* 判断path是否与pattern匹配
|
|
947
|
+
*
|
|
948
|
+
* isPathMatched("a.b.c","a.b.c") == true
|
|
949
|
+
* isPathMatched("a.b.c","a.b.*") == true
|
|
950
|
+
* isPathMatched("a.b.c","a.*.*") == true
|
|
951
|
+
* isPathMatched("a.b.c","*.*.*") == true
|
|
952
|
+
* isPathMatched("a.b.c",".b.*") == true
|
|
953
|
+
* isPathMatched("a.b.c.d","a.**") == true
|
|
954
|
+
*
|
|
955
|
+
* - '**' 匹配后续的
|
|
956
|
+
* - '*' 匹配任意数量的字符,包括零个字符
|
|
957
|
+
*
|
|
958
|
+
* @param path
|
|
959
|
+
* @param pattern
|
|
960
|
+
*/
|
|
961
|
+
declare function isPathMatched(path: string[], pattern: string[]): boolean;
|
|
962
|
+
|
|
963
|
+
declare function isSubsctiber(val: any): val is FastEventSubscriber;
|
|
964
|
+
|
|
965
|
+
declare function isClass(target: unknown): target is new (...args: any[]) => any;
|
|
966
|
+
|
|
967
|
+
declare function isFastEvent(target: any): target is FastEvent;
|
|
968
|
+
|
|
969
|
+
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 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
|
|
2
2
|
//# sourceMappingURL=index.js.map
|