MCPcopy
hub / github.com/rollup/rollup / WatchEmitter

Class WatchEmitter

src/watch/WatchEmitter.ts:3–72  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1import type { AwaitedEventListener, AwaitingEventEmitter } from '../rollup/types';
2
3export class WatchEmitter<
4 T extends Record<string, (...parameters: any) => any>
5> implements AwaitingEventEmitter<T> {
6 private currentHandlers: {
7 [K in keyof T]?: AwaitedEventListener<T, K>[];
8 } = Object.create(null);
9 private persistentHandlers: {
10 [K in keyof T]?: AwaitedEventListener<T, K>[];
11 } = Object.create(null);
12
13 // Will be overwritten by Rollup
14 async close(): Promise<void> {}
15
16 emit<K extends keyof T>(event: K, ...parameters: Parameters<T[K]>): Promise<unknown> {
17 return Promise.all(
18 [...this.getCurrentHandlers(event), ...this.getPersistentHandlers(event)].map(handler =>
19 handler(...parameters)
20 )
21 );
22 }
23
24 off<K extends keyof T>(event: K, listener: AwaitedEventListener<T, K>): this {
25 const listeners = this.persistentHandlers[event];
26 if (listeners) {
27 // A hack stolen from "mitt": ">>> 0" does not change numbers >= 0, but -1
28 // (which would remove the last array element if used unchanged) is turned
29 // into max_int, which is outside the array and does not change anything.
30 listeners.splice(listeners.indexOf(listener) >>> 0, 1);
31 }
32 return this;
33 }
34
35 on<K extends keyof T>(event: K, listener: AwaitedEventListener<T, K>): this {
36 this.getPersistentHandlers(event).push(listener);
37 return this;
38 }
39
40 onCurrentRun<K extends keyof T>(event: K, listener: AwaitedEventListener<T, K>): this {
41 this.getCurrentHandlers(event).push(listener);
42 return this;
43 }
44
45 once<K extends keyof T>(event: K, listener: AwaitedEventListener<T, K>): this {
46 const selfRemovingListener: AwaitedEventListener<T, K> = (...parameters) => {
47 this.off(event, selfRemovingListener);
48 return listener(...parameters);
49 };
50 this.on(event, selfRemovingListener);
51 return this;
52 }
53
54 removeAllListeners(): this {
55 this.removeListenersForCurrentRun();
56 this.persistentHandlers = Object.create(null);
57 return this;
58 }
59
60 removeListenersForCurrentRun(): this {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…