import { type ANY_EVENT, type ERROR_EVENT } from "./constants"; export type AllRemitterEventNames = | ANY_EVENT | ERROR_EVENT | keyof TConfig; export type AnyEventData< TConfig, TEventName extends keyof TConfig = keyof TConfig, > = TEventName extends any ? { data: TConfig[TEventName]; event: TEventName } : never; export type AnyRemitterListener = ( data: AnyEventData ) => void; export type ErrorRemitterListener = (error: unknown) => void; export type Fn = (...args: any[]) => any; export type RemitterDatalessEventName = { [EventName in keyof TConfig]: TConfig[EventName] extends | never | undefined | void ? EventName : never; }[keyof TConfig]; export type RemitterDisposer = () => void; export type RemitterEventNames = keyof TConfig; export type RemitterListener< TConfig, TEventName extends RemitterEventNames = RemitterEventNames, > = (eventData: TConfig[TEventName]) => void; export type RemitterConfigInternal = TConfig & { [name in ANY_EVENT]: AnyEventData; }; export type RemitterListenerInternal< TConfig, TEventName extends RemitterEventNames< RemitterConfigInternal > = RemitterEventNames>, > = (eventData: RemitterConfigInternal[TEventName]) => void;