| 11 | const eventBusSymbol = Symbol('eventBus'); |
| 12 | |
| 13 | export class Event implements IPublicApiEvent { |
| 14 | private readonly [eventBusSymbol]: IEventBus; |
| 15 | private readonly options: EventOptions; |
| 16 | |
| 17 | constructor(eventBus: IEventBus, options: EventOptions, public workspaceMode = false) { |
| 18 | this[eventBusSymbol] = eventBus; |
| 19 | this.options = options; |
| 20 | if (!this.options.prefix) { |
| 21 | logger.warn('prefix is required while initializing Event'); |
| 22 | } |
| 23 | } |
| 24 | |
| 25 | /** |
| 26 | * 监听事件 |
| 27 | * @param event 事件名称 |
| 28 | * @param listener 事件回调 |
| 29 | */ |
| 30 | on(event: string, listener: (...args: any[]) => void): IPublicTypeDisposable { |
| 31 | if (isPluginEventName(event)) { |
| 32 | return this[eventBusSymbol].on(event, listener); |
| 33 | } else { |
| 34 | logger.warn(`fail to monitor on event ${event}, event should have a prefix like 'somePrefix:eventName'`); |
| 35 | return () => {}; |
| 36 | } |
| 37 | } |
| 38 | |
| 39 | /** |
| 40 | * 监听事件,会在其他回调函数之前执行 |
| 41 | * @param event 事件名称 |
| 42 | * @param listener 事件回调 |
| 43 | */ |
| 44 | prependListener(event: string, listener: (...args: any[]) => void): IPublicTypeDisposable { |
| 45 | if (isPluginEventName(event)) { |
| 46 | return this[eventBusSymbol].prependListener(event, listener); |
| 47 | } else { |
| 48 | logger.warn(`fail to prependListener event ${event}, event should have a prefix like 'somePrefix:eventName'`); |
| 49 | return () => {}; |
| 50 | } |
| 51 | } |
| 52 | |
| 53 | /** |
| 54 | * 取消监听事件 |
| 55 | * @param event 事件名称 |
| 56 | * @param listener 事件回调 |
| 57 | */ |
| 58 | off(event: string, listener: (...args: any[]) => void) { |
| 59 | this[eventBusSymbol].off(event, listener); |
| 60 | } |
| 61 | |
| 62 | /** |
| 63 | * 触发事件 |
| 64 | * @param event 事件名称 |
| 65 | * @param args 事件参数 |
| 66 | * @returns |
| 67 | */ |
| 68 | emit(event: string, ...args: any[]) { |
| 69 | if (!this.options.prefix) { |
| 70 | logger.warn('Event#emit has been forbidden while prefix is not specified'); |
nothing calls this directly
no outgoing calls
no test coverage detected
searching dependent graphs…