UNPKG

@sdc-monitor/demo

Version:

<div align="center"> <a href="#" target="_blank"> <img src="https://i.loli.net/2021/07/28/EvPwd4NjVH3tBfO.jpg" alt="mito-logo" height="90"> </a> <p>A Lightweight SDK For Monitor Web</p>

39 lines (37 loc) 1.21 kB
import { WxPerformanceItemType, Listener } from '../types/index' class Event { events: Map<WxPerformanceItemType | string, Array<Listener>> constructor() { this.events = new Map() } on(event: WxPerformanceItemType | string, listener: (...args: any[]) => void): this { const ls = this.events.get(event) || [] ls.push(listener) this.events.set(event, ls) return this } emit(event: WxPerformanceItemType | string, ...args: any[]): boolean { if (!this.events.has(event)) return false const ls = this.events.get(event) || [] ls.forEach((fn) => fn.apply(this, args)) return true } remove(event: WxPerformanceItemType | string, listener: (...args: any[]) => void): this { const ls = this.events.get(event) || [] const es = ls.filter((f) => f !== listener) this.events.set(event, es) return this } removeAll(event: WxPerformanceItemType): this { this.events.delete(event) return this } once(event: WxPerformanceItemType | string, listener: (...args: any[]) => void): this { const fn = (...arg: any[]) => { listener.apply(this, arg) this.remove(event, fn) } return this.on(event, fn) } } export default Event