MCPcopy Create free account
hub / github.com/editablejs/editable / Emitter

Class Emitter

packages/editor/src/plugin/emitter.ts:3–133  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1export type Listener = (...args: any[]) => void
2
3export class Emitter {
4 static listenerCount(emitter: Emitter, type: string | number): number {
5 return emitter.listenerCount(type)
6 }
7
8 static defaultMaxListeners: number = 10
9
10 events: Record<string | number, Listener | Listener[]> = {}
11
12 maxListeners: number | undefined = undefined
13
14 eventsCount = 0
15
16 listenerCount(type: string | number): number {
17 const evlistener = this.events[type]
18
19 if (typeof evlistener === 'function') {
20 return 1
21 } else if (evlistener !== undefined) {
22 return evlistener.length
23 }
24
25 return 0
26 }
27
28 eventNames(): Array<string | number> {
29 return Object.keys(this.events)
30 }
31
32 setMaxListeners(count: number): this {
33 this.maxListeners = count
34 return this
35 }
36
37 getMaxListeners(): number {
38 return this.maxListeners ?? Emitter.defaultMaxListeners
39 }
40
41 emit(type: string | number, ...args: any[]): boolean {
42 const handler = this.events[type]
43
44 if (handler === undefined) return false
45
46 if (typeof handler === 'function') {
47 handler(...args)
48 } else {
49 const len = handler.length
50 for (let i = 0; i < len; ++i) handler[i](...args)
51 }
52
53 return true
54 }
55
56 on(type: string | number, listener: Listener, prepend = false): this {
57 let existing = this.events[type]
58 if (existing === undefined) {
59 // Optimize the case of one listener. Don't need the extra array object.
60 this.events[type] = listener

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…