import { EventEmitter } from "eventemitter3";

//#region src/factories/createEmitter.d.ts
type EventMap = Record<string, object | never>;
type EventKey<eventMap extends EventMap> = string & keyof eventMap;
type EventFn<parameters extends unknown[] = any[]> = (...parameters: parameters) => void;
type EventData<eventMap extends EventMap, eventName extends keyof eventMap> = (eventMap[eventName] extends [never] ? unknown : eventMap[eventName]) & {
  uid: string;
};
declare class Emitter<eventMap extends EventMap> {
  uid: string;
  _emitter: EventEmitter;
  constructor(uid: string);
  on<key extends EventKey<eventMap>>(eventName: key, fn: EventFn<eventMap[key] extends [never] ? [{
    uid: string;
  }] : [data: eventMap[key] & {
    uid: string;
  }]>): void;
  once<key extends EventKey<eventMap>>(eventName: key, fn: EventFn<eventMap[key] extends [never] ? [{
    uid: string;
  }] : [data: eventMap[key] & {
    uid: string;
  }]>): void;
  off<key extends EventKey<eventMap>>(eventName: key, fn: EventFn<eventMap[key] extends [never] ? [{
    uid: string;
  }] : [data: eventMap[key] & {
    uid: string;
  }]>): void;
  emit<key extends EventKey<eventMap>>(eventName: key, ...params: eventMap[key] extends [never] ? [] : [data: eventMap[key]]): void;
  listenerCount<key extends EventKey<eventMap>>(eventName: key): number;
}
declare function createEmitter<eventMap extends EventMap>(uid: string): Emitter<eventMap>;
//#endregion
export { Emitter, EventData, createEmitter };
//# sourceMappingURL=createEmitter.d.ts.map