import type { Json } from "atom.io/foundations/json" export type EventListener = (...args: Json.Serializable[]) => void export type EventsMap = { [event: string]: EventListener } export type ParticularEventListener = ( event: E, listener: ListenEvents[E], ) => void export type AllEventsListener = < E extends string & keyof ListenEvents, >( event: E, ...args: Parameters ) => void export type EventEmitter = < E extends string & keyof EmitEvents, >( event: E, ...args: Parameters ) => void export interface GuardedSocket extends Socket { id: string | undefined on: ( event: E, listener: ListenEvents[E], ) => void onAny: ( listener: ( event: E, ...args: Parameters ) => void, ) => void onAnyOutgoing: (listener: AllEventsListener) => void off: ( event: E, listener?: ListenEvents[E], ) => void offAny: ( listener?: ( event: E, ...args: Parameters ) => void, ) => void emit: EventEmitter } export type Socket = { id: string | undefined on: (event: string, listener: (...args: Json.Serializable[]) => void) => void onAny: ( listener: (event: string, ...args: Json.Serializable[]) => void, ) => void onAnyOutgoing: ( listener: (event: string, ...args: Json.Serializable[]) => void, ) => void off: (event: string, listener?: (...args: Json.Serializable[]) => void) => void offAny: ( listener?: (event: string, ...args: Json.Serializable[]) => void, ) => void emit: (event: string, ...args: Json.Serializable[]) => void }