{"version":3,"file":"EventEmitter-DHdSnYCD.cjs","names":[],"sources":["../src/util/EventEmitter.ts"],"sourcesContent":["// from https://raw.githubusercontent.com/ueberdosis/tiptap/develop/packages/core/src/EventEmitter.ts (MIT)\n\ntype StringKeyOf<T> = Extract<keyof T, string>;\ntype CallbackType<\n  T extends Record<string, any>,\n  EventName extends StringKeyOf<T>,\n> = T[EventName] extends any[] ? T[EventName] : [T[EventName]];\ntype CallbackFunction<\n  T extends Record<string, any>,\n  EventName extends StringKeyOf<T>,\n> = (...props: CallbackType<T, EventName>) => any;\n\nexport class EventEmitter<T extends Record<string, any>> {\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  private callbacks: { [key: string]: Function[] } = {};\n\n  public on<EventName extends StringKeyOf<T>>(\n    event: EventName,\n    fn: CallbackFunction<T, EventName>,\n  ) {\n    if (!this.callbacks[event]) {\n      this.callbacks[event] = [];\n    }\n\n    this.callbacks[event].push(fn);\n\n    return () => this.off(event, fn);\n  }\n\n  protected emit<EventName extends StringKeyOf<T>>(\n    event: EventName,\n    ...args: CallbackType<T, EventName>\n  ) {\n    const callbacks = this.callbacks[event];\n\n    if (callbacks) {\n      callbacks.forEach((callback) => callback.apply(this, args));\n    }\n  }\n\n  public off<EventName extends StringKeyOf<T>>(\n    event: EventName,\n    fn?: CallbackFunction<T, EventName>,\n  ) {\n    const callbacks = this.callbacks[event];\n\n    if (callbacks) {\n      if (fn) {\n        this.callbacks[event] = callbacks.filter((callback) => callback !== fn);\n      } else {\n        delete this.callbacks[event];\n      }\n    }\n  }\n\n  protected removeAllListeners(): void {\n    this.callbacks = {};\n  }\n}\n"],"mappings":"AAYA,IAAa,EAAb,KAAyD,CAEvD,UAAmD,EAAE,CAErD,GACE,EACA,EACA,CAOA,OANK,KAAK,UAAU,KAClB,KAAK,UAAU,GAAS,EAAE,EAG5B,KAAK,UAAU,GAAO,KAAK,EAAG,KAEjB,KAAK,IAAI,EAAO,EAAG,CAGlC,KACE,EACA,GAAG,EACH,CACA,IAAM,EAAY,KAAK,UAAU,GAE7B,GACF,EAAU,QAAS,GAAa,EAAS,MAAM,KAAM,EAAK,CAAC,CAI/D,IACE,EACA,EACA,CACA,IAAM,EAAY,KAAK,UAAU,GAE7B,IACE,EACF,KAAK,UAAU,GAAS,EAAU,OAAQ,GAAa,IAAa,EAAG,CAEvE,OAAO,KAAK,UAAU,IAK5B,oBAAqC,CACnC,KAAK,UAAY,EAAE"}