{"version":3,"sources":["../src/events/flexEvent.ts"],"names":["_FlexEvent","options","assignObject","pattern","event","params","callback","objectify","count","listenerId","eventListeners","key","isAbort","listener","matchedListeners","eventName","timeout","mode","resolve","reject","tmId","isTimeout","listenerIds","isResolve","isListened","results","events","eid","TimeoutError","doneCallback","ev","args","remove","listeners","message","e","retain","result","FlexEvent"],"mappings":"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","file":"chunk-I72UMTAC.mjs","sourcesContent":["/**\n * \n * 一个简单的事件触发器\n * \n */\n\nimport { assignObject } from \"../object\" \nimport { TimeoutError } from '../func/timeout';\nimport \"../string/replaceAll\"\nimport { remove } from \"../array/remove\" \n\nexport type FlexEventWatchType = \"on\" | \"once\" | \"off\" | \"offAll\"                                 \n                                | 'emit' | 'execute' \n                                | 'wait-begin' | 'wait-end'  | 'wait-timeout' \n\nexport type FlexEventWatchParams<Message=any> = {\n    type       : FlexEventWatchType\n    event      : string\n    listener?  : {id:string,fn?:string | Function,count?:number}\n    message?   : Message\n    retain?    : boolean\n    async?     : boolean\n}\n\n\nexport interface FlexEventOptions<Message=any>{\n    context?: any               // 可选的上下文对象，当指定时作为订阅者的this\n    ignoreError?: boolean       // 是否忽略订阅者的执行错误  \n    wildcard?: boolean          // 是否启用通配符订阅  \n    delimiter?:string           // 当启用通配符时的事件分割符 \n    onWatch?:(params:FlexEventWatchParams<Message>)=>void            // 监视订阅情况\n }\n\nexport interface SubscribeOptions{\n    id?:string\n    objectify?: boolean                 //  当调用时返回一个对象用来退订\n    count?:number                       // 触发几次\n}\n\nexport interface FlexEventListener<Message=any>{\n    (message:Message):void \n}\n\n\nexport type ForEachEventListenerCallback<Message,Events> = ({event,listenerId,listener,count,eventListeners}:{event:Events,listenerId:string,listener:FlexEventListener<Message>,count:number,eventListeners:FlexEventListenerRegistry<Message>})=>boolean | void\n\n\nexport interface FlexEventSubscriber{\n    off():void\n}\n\n\nexport type FlexEventListenerRegistry<M> = Map<string,[FlexEventListener<M>,number]>\nexport type FlexListenerRegistry<M,E> = Map<E,FlexEventListenerRegistry<M>>\n\n\n/**\n * Event: 指定一个通用事件类型\n * \n * \n */\nexport class FlexEvent<Message=any,Events extends string = string,Options extends Record<string,any>= Record<string,any>>{  \n    private _listeners:FlexListenerRegistry<Message,Events>= new Map() // {\"<事件名称>\":{<listenerId>:[Callback,<侦听次数>]}}\n    private _options:Required<FlexEventOptions & Options>    \n    private _lastMessage:Record<string,any> = {}     // 保留最后一次触发的消息,key=事件名称,value=消息    \n    static listenerSeqId:number = 0\n    constructor(options:FlexEventOptions<Message> = {ignoreError:true,context:null}){\n        this._options = assignObject({\n            ignoreError:true,\n            wildcard: true,\n            delimiter:\"/\",\n            context:null\n        },options) as Required<FlexEventOptions & Options> \n    }\n    get options(){return this._options}\n    get delimiter(){return this._options.delimiter}\n    get context(){ return this.options.context}\n    get listeners(){return this._listeners}\n    get retainedMessages(){return this._lastMessage}\n    /**\n     * 检测事件是否匹配\n     * \n     * isEventMatched(\"a/*\",\"x\")      false   \n     * isEventMatched(\"a/*\",\"a/b\")    true\n     * isEventMatched(\"a/**\",\"a/b\")   true\n     * isEventMatched(\"a/ * /*\",\"a/x/x\")   true\n     * isEventMatched(\"a/** /c\",\"a/b/x/x/c\")   true \n     * isEventMatched(\"a/** /c/** /d\",\"a/b/x/x/c/x/x/x/d\")   true\n     * \n     * 事件中的**代表所有层级\n     * *代表一个事件名称\n     * \n     * @param pattern \n     * @param event \n     */\n    private isEventMatched(pattern:string,event:string):boolean{\n        if(pattern == event) return true\n        if(this._options.wildcard && pattern.includes(\"*\")){\n            // 由于通配符**与*冲突，所以先将**替换成一个特殊的字符\n            const regex =new RegExp(\"^\"+pattern.replaceAll(\"**\",`__#####__`)\n                .replaceAll(\"$\",\"\\\\$\")\n                .replaceAll(\"^\",\"\\\\^\")\n                .replaceAll(\".\",\"\\\\.\")\n                .replaceAll(\"*\",`[^\\\\s${this.delimiter}]*`)  //`[^\\\\s\\\\*${this.delimiter}]*`\n                .replaceAll(\"__#####__\",`[^\\\\s\\\\*]*`)+\"$\")\n            return regex.test(event)\n        }else{\n            return pattern == event\n        }\n    }\n    /**\n     * \n     * 用来监视事件的订阅情况,用于调试时使用\n     * \n     * onWatch((type)=>{})\n     * \n     * type: on,emit,off,once\n     * \n     * @returns \n     */\n    private _onWatch(params:FlexEventWatchParams){\n        if(typeof(this.options.onWatch)!='function') return\n        this.options.onWatch(Object.assign({\n            event:\"\",\n            listenerId:\"\",\n            async:false,\n            retain:false,\n        },params))\n    }\n   \n\n    /**\n     * 订阅事件并返回一个事件订阅ID\n     * \n     * 如果options.objectify = true,则返回一个侦听器对象\n     * 可以在后续进行退订\n     * on(event,callback)\n     * on(\"a/*\",callback)     1个*代表匹配一个事件名称\n     * on(\"a/**\",callback)    2个*代表所有层级\n     * \n     * @param event \n     * @param callback \n     * @param options \n     * @returns \n     */\n    on(event:Events,callback:FlexEventListener<Message>,options?:SubscribeOptions):FlexEventSubscriber | string{\n        const { objectify = true,count=-1 } =Object.assign({},options) as Required<SubscribeOptions>        \n        if(!this._listeners.has(event)){\n            this._listeners.set(event,new Map())        \n        }\n        const listenerId = options?.id ||  String(++ FlexEvent.listenerSeqId)            \n        const eventListeners = this._listeners.get(event) as FlexEventListenerRegistry<Message>\n        eventListeners?.set(listenerId,[callback,count])        \n        this._onWatch({type:count==1 ? 'once' : \"on\",event,listener:{id:listenerId}})\n        // 如果启用了retain,则应该马上触发最后保存的事件\n        this.emitRetainEvent(event,listenerId,eventListeners)      \n        if(objectify){\n            return {\n                off:()=>{\n                    eventListeners?.delete(listenerId)\n                    if(eventListeners?.size==0){\n                        this._listeners.delete(event)\n                    }\n                    this._onWatch({type:\"off\",event,listener:{id:listenerId}})\n                }\n            }\n        }else{\n            return listenerId\n        }\n    } \n    /**\n     * 全部信息都监听 一般用于测试\n     * @param callback\n    */\n    onAny(callback: FlexEventListener<any>,options?:SubscribeOptions) {\n      return this.on(\"**\" as Events, callback,options);\n    }\n    /**\n     * 如果事件已经有最近触发时保留的数据，则立即触发事件将最近的数据传递给侦听器\n     * @param event \n     */\n    private emitRetainEvent(event:Events,listenerId:string,eventListeners:FlexEventListenerRegistry<Message>){\n        //setTimeout(()=>{\n            if(event in this._lastMessage){                \n                this.executeListener(listenerId,eventListeners,this._lastMessage[event])   \n            }else if(this.options.wildcard){      // 检查是否有通配符                                \n                for(const [key] of Object.entries(this._lastMessage)){                    \n                    if(this.isEventMatched(event,key) || this.isEventMatched(key,event) ){      \n                        this.executeListener(listenerId,eventListeners,this._lastMessage[key])\n                    }\n                }\n            }            \n        //},0)\n    }\n    /**\n     * 只订阅一次事件\n     * @param event \n     * @param callback \n     * @param options \n     * @returns \n     */\n    once(event:Events,callback:FlexEventListener<Message>,options?:SubscribeOptions){\n        return this.on(event,callback,Object.assign({},options,{count:1}))        \n    }  \n\n    /**\n     * 遍历所有侦听器\n     *   {\"<事件名称>\":{<listenerId>:[Callback,<侦听次数>]}}\n     * @param callback  ={}\n     */\n    private forEachListeners(callback:({event,listenerId,listener,count,eventListeners}:{event:Events,listenerId:string,listener:FlexEventListener<Message>,count:number,eventListeners:FlexEventListenerRegistry<Message>})=>boolean | void){\n        // {\"<事件名称>\":{<listenerId>:[Callback,<侦听次数>]}}\n        let isAbort = false\n        for(let [event,eventListeners] of this._listeners.entries()){\n            if(isAbort) break\n            for(let [listenerId,[listener,count]] of eventListeners.entries()){\n                if(isAbort) break\n                let r = callback({event,listenerId,listener,count,eventListeners})\n                // 显式返回false时中止遍历\n                isAbort = r === false\n            }\n        }         \n    }\n    /**\n     * 遍历符合event事件的侦听器\n     * \n     * forEachEventListeners(event,callback)\n     * \n     * @param event         事件名称\n     * @param callback \n     * @returns \n     */\n    private forEachEventListeners(event:Events,callback:ForEachEventListenerCallback<Message,Events>){\n        // {\"<事件名称>\":{<listenerId>:[Callback,<侦听次数>]}}        \n        let isAbort = false        \n        let matchedListeners = this.getMatchedListeners(event)           \n        for(let [eventName,eventListeners] of matchedListeners){\n            if(!eventListeners) continue\n            for(let [listenerId,[listener,count]] of eventListeners){\n                if(isAbort) break\n                let r = callback({event:eventName,listenerId,listener,count,eventListeners})            \n                isAbort = r === false// 显式返回false时中止遍历\n            }     \n        }\n    } \n    /**\n     * 当调用forEachListeners时，用来根据event名称从侦听器中匹配出对应的侦听器 \n     * \n     * @param event \n     */\n    private getMatchedListeners(event:Events):[Events,FlexEventListenerRegistry<Message> | undefined][] {\n        if(this.options.wildcard){ // 启用通配符\n            return [...this._listeners.entries()].filter(([eventName])=>(this.isEventMatched(eventName,event)) || this.isEventMatched(event,eventName))             \n        }else{\n            return [[event,this._listeners.get(event)]]   \n        }\n    }\n\n\n    /**\n     * 注销订阅\n     * \n     * - 通过listenerId进行退订\n     * - 直接指定一个callback并且callback严格相等\n     * - 具备同一样原型链的callback的均退订\n     * \n     *  let listenerId = emitter.on(event,callback)\n     * \n     *  emitter.off(listenerId)              // 精确退订指定的订阅，需要自行保存订阅Id\n     *  emitter.off(callback)                // 所有callback均会退订\n     *  emitter.off(event,callback)          // 退订指定事件的callback均会退订 \n     * \n     * @param event \n     * @param callback \n     * @returns \n     */ \n     off(listener:FlexEventListener<Message>):void;\n     off(listenerId:string):void;\n     off(event:Events,listener:FlexEventListener<Message>):void;\n     off(){\n        // {\"<事件名称>\":{<listenerId>:[Callback,<侦听次数>]}}\n       if(arguments.length==1){\n            if(typeof(arguments[0])=='string'){// off(listenerId) 根据订阅ID退订\n                this.forEachListeners(({listenerId,eventListeners,event})=>{\n                    if(listenerId == arguments[0]){\n                        eventListeners.delete(listenerId)\n                        if(this._listeners.get(event)?.size==0) this._listeners.delete(event)\n                        this._onWatch({type:\"off\",event,listener:{id:listenerId}})\n                        return false\n                    }   \n                })\n            }else if(typeof(arguments[0])=='function'){  // off(callback) \n                let callback = arguments[0]\n                this.forEachListeners(({listenerId,listener,eventListeners,event})=>{\n                    if(listener == callback){\n                        eventListeners.delete(listenerId) \n                        if(this._listeners.get(event)?.size==0) this._listeners.delete(event)\n                        this._onWatch({type:\"off\",event,listener:{id:listenerId}})\n                    }   \n                })\n            }\n       }else if(arguments.length==2){\n            if(typeof(arguments[0])=='string' && typeof(arguments[1])=='function'){// off(event,callback)\n                this.forEachEventListeners(arguments[0] as Events,({event,listenerId,listener,eventListeners})=>{\n                    if(event == arguments[0] && listener ==  arguments[1] ){\n                        eventListeners.delete(listenerId) \n                        if(this._listeners.get(event)?.size==0) this._listeners.delete(event)\n                        this._onWatch({type:\"off\",event,listener:{id:listenerId}})\n                    }\n                })\n            }\n       }  \n    }\n\n    /**\n     * 等待某个事件触发后返回\n     * \n     * 当等待多个事件时，\n     * \n     * 可以指定侦听模式\n     * \n     * - Or模式：默认即只要侦听到一个事件就返回\n     * - And模式：即需要同时侦听到所有事件才返回。当侦听的事件是由逗号分隔的多个事件时，即为And模式 \n     * \n     * @param event  一个或多个事件名称\n     */\n    waitFor(event:Events | Events[],timeout:number=0){        \n        let mode = 'or'\n        return new Promise<any[]>((resolve,reject)=>{\n            let tmId:any,isTimeout:boolean=false\n            let listenerIds:string[]=[]\n            let isResolve:boolean = false\n            let isListened:string[]\n            let results:any[]=[]\n            let events:Events[] = []\n\n            if(timeout>0){\n                tmId=setTimeout(()=>{\n                    isTimeout=true\n                    listenerIds.forEach(eid=>this.off(eid))\n                    this._onWatch({type:\"wait-timeout\",event:events.join(','),listener:{id:listenerIds.join(\",\")}})       \n                    reject(new TimeoutError())    \n                },timeout)\n            }     \n            if(Array.isArray(event)){\n                events = event\n            }else if(typeof(event)=='string'){\n                if(event.includes(',')){\n                    events = event.split(',')  as Events[]\n                    mode ='and'\n                }else{\n                    events = [event]\n                }\n            }\n            isListened = [...events]\n                   \n            const doneCallback = ()=>{\n                if(isResolve) return\n                clearTimeout(tmId)\n                isResolve=true\n                this._onWatch({type:\"wait-end\",event:events.join(','),listener:{id:listenerIds.join(\",\")}})       \n                resolve(results)\n            }\n\n            if(mode == 'and'){        \n                listenerIds = events.map(ev=>{\n                    return this.once(ev,(...args:any[])=>{        \n                        if(isTimeout) return\n                        let c = remove(isListened,ev)\n                        if(c>0) results.push(...args) // 重复触发只返回一次\n                        if(isListened.length==0){\n                            doneCallback()\n                        }\n                    }) as string                    \n                })            \n            }else{\n                listenerIds = events.map(ev=>{\n                    return this.once(ev,(...args:any[])=>{     \n                        if(isTimeout) return\n                        results.push(...args)\n                        doneCallback()\n                    }) as string\n                }) \n            }     \n            this._onWatch({type:\"wait-begin\",event:events.join(','),listener:{id:listenerIds.join(\",\")}})       \n        })\n    }\n    clear(){\n        this._lastMessage={}\n        this.offAll()        \n    }\n    offAll(event?:Events){\n        if(event){\n            this._listeners.delete(event)\n        }else{\n            this._listeners.clear()\n        }        \n        this._onWatch({type:\"offAll\",event:\"**\"})\n    }\n    /**\n     * 返回指定事件的的所有侦听器函数\n     * @param event \n     * @returns \n     */\n    getListeners(event:Events):[FlexEventListener<Message>,string,number][]{\n        let listeners:[FlexEventListener<Message>,string,number][]=[]\n        this.forEachEventListeners(event,({listener,listenerId,count})=>{\n            listeners.push([listener,listenerId,count])\n        })      \n        return listeners  \n    }\n    /**    \n     * 执行侦听器函数\n     * \n     * @param listenerId  侦听器ID\n     * @param listeners   事件侦听器列表  \n     * @param message \n     * @returns \n     */\n    private executeListener(listenerId:string,listeners:FlexEventListenerRegistry<Message>,message?:Message){\n        if(!listeners) return \n        const listener = listeners!.get(listenerId)\n        if(!listener) return \n        try{\n            if(this.context!==undefined){\n                return listener[0].apply(this.context, [message!])\n            }else{\n                return listener[0](message!)\n            }            \n        }catch(e){\n            if(this.options.ignoreError==false){\n                throw e\n            }\n        }finally{\n            if(listener[1]>-1){\n                listener[1] = listener[1]-1\n                if(listener[1]==0){\n                    listeners.delete(listenerId)\n                }\n            }            \n        }  \n    }   \n    private executeListeners(event:Events,message?:Message,callback?:(listenerId?:string)=>void){\n        let results:any[] = []\n        this.forEachEventListeners(event,({event:eventName,listenerId,count,eventListeners})=>{\n            results.push(this.executeListener(listenerId,eventListeners,message))\n            if(typeof(callback)=='function') callback(listenerId)\n            this._onWatch({type:\"execute\",event:eventName,listener:{id:listenerId,fn:callback,count}})\n            if(eventListeners.size==0){\n                this._listeners.delete(eventName)\n                this._onWatch({type:\"off\",event:eventName,listener:{id:listenerId,fn:callback}})\n            }\n        })   \n        return results\n    }\n    /**\n     * 触发事件\n     * \n     * emit(\"a/b/c\")\n     * \n     * @param event \n     * @param message \n     */\n    emit(event:Events,message?:Message,retain?:boolean){\n        if(retain){\n            this._lastMessage[event] = message\n        }\n        this._onWatch({type:\"emit\",event,retain,message,async:false})\n        return this.executeListeners(event,message)\n    }\n    /**\n     * 异步触发事件\n     * @param this \n     * @param event \n     * @param message \n     * @returns \n     */\n    async emitAsync(event:Events,message?:Message,retain?:boolean){\n        const listeners  = this.getListeners(event)        \n        if(retain){\n            this._lastMessage[event] = message\n        }\n        this._onWatch({type:\"emit\",event,retain,message,async:true})\n        let results = await Promise.allSettled(listeners.map(([listener,listenerId,count]:[Function,string,number]) =>{\n            this._onWatch({type:\"execute\",event,retain,message,async:true,listener:{id:listenerId,fn:listener,count}})\n            return listener.call(this,message)\n        })) \n        // 以下处理侦听器的计数,每次递减并且在=0时清除\n        this.forEachEventListeners(event,({event:eventName,listenerId,eventListeners})=>{\n            let listener = eventListeners.get(listenerId)\n            if(listener){\n                if(listener[1]>-1){\n                    listener[1]--\n                    if(listener[1]==0){\n                        eventListeners.delete(listenerId)\n                        this._onWatch({type:\"off\",event,listener:{id:listenerId}})\n                    }\n                }                \n            }\n            if(this._listeners.get(eventName)?.size==0){\n                this._listeners.delete(eventName)\n                \n            }           \n        })\n        return results.map(result=>result.status=='fulfilled' ? result.value : result.reason)\n    } \n}\n"]}