@kubb/core
Version:
Core functionality for Kubb's plugin-based code generation system, providing the foundation for transforming OpenAPI specifications.
24 lines (19 loc) • 841 B
text/typescript
import { EventEmitter as NodeEventEmitter } from 'node:events'
export class EventEmitter<TEvents extends Record<string, any>> {
constructor() {
this.#emitter.setMaxListeners(100)
}
#emitter = new NodeEventEmitter()
emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArg: TEvents[TEventName]): void {
this.#emitter.emit(eventName, ...(eventArg as any))
}
on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {
this.#emitter.on(eventName, handler as any)
}
off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {
this.#emitter.off(eventName, handler as any)
}
removeAll(): void {
this.#emitter.removeAllListeners()
}
}