* emit custom event
(event: string, ...data: unknown[])
| 117 | * emit custom event |
| 118 | */ |
| 119 | emit(event: string, ...data: unknown[]) { |
| 120 | const eventListener = this.listeners[event]; |
| 121 | |
| 122 | if (eventListener && Array.isArray(eventListener)) { |
| 123 | // Snapshot before iterating: a once-listener removes itself via |
| 124 | // off() during emit, which mutates the same array and causes |
| 125 | // forEach to skip the adjacent element. Iterate a copy instead. |
| 126 | eventListener.slice().forEach(({ listener, once }) => { |
| 127 | listener(...data); |
| 128 | if (once) |
| 129 | this.off(event, listener); |
| 130 | }); |
| 131 | } |
| 132 | } |
| 133 | |
| 134 | /** |
| 135 | * Remove all pub/sub subscriptions. Called from muya.destroy() to |
no test coverage detected