import { SymbolToken } from '@servicetitan/react-ioc'; import { JSON, Serializable } from './types'; export declare const EVENT_BUS_TOKEN: SymbolToken>; export declare function typedEventBusToken>(): SymbolToken>; export type EventHandler = (data: [T] extends [never] ? Event extends SymbolToken ? Serializable : Event extends keyof EventTypes ? EventTypes[Event] : T : Serializable) => void; type JobPayload = JSON | void; export type EventType = string | number | symbol; export type SymbolTokenEventType = U extends SymbolToken ? SymbolToken : U; export type JobEventHandler = (defer: { /** * Successfully complete a job. * @param result The value to return from the successfully completed job. */ resolve(...result: Event extends SymbolToken ? undefined extends ResultType ? [Serializable?] : [Serializable] : [JobPayload]): void; /** * Fail a job. * @param reason The error to return from the failed job. */ reject(reason?: string | Error): void; }) => void; export declare class EventBus = never> { job: { /** * Register a job event handler. Jobs event handlers return a result or an error. * @param event The job event to handle. * @param handler The handler to call when the event occurs. This handler is passed a `resolve` callback to return a successful result, and a `reject` callback to return an error. */ on: | keyof EventTypes>(event: Event, handler: JobEventHandler) => void; /** * Deregister a job event handler. * @param event The previously registered event. * @param handler The previously registered handler. */ off: | keyof EventTypes>(event: Event, handler: JobEventHandler) => void; /** * Send a job event. * @param event The event to send. * @returns a Promise that resolves or rejects depending on whether the job completes successfully. */ emit: | keyof EventTypes>(event: Event) => Promise ? Serializable : JobPayload>; }; private emitter; /** * Register an event handler. * @param event The event to handle. * @param handler The handler to call when the event occurs. */ on: = never, Event extends SymbolToken | keyof EventTypes = any>(event: SymbolTokenEventType, handler: EventHandler) => void; /** * Deregister an event handler. * @param event The previously registered event. * @param handler The previously registered handler. */ off: = never, Event extends SymbolToken | keyof EventTypes = any>(event: SymbolTokenEventType, handler: EventHandler) => void; /** * Send an event. * @param event The event to send. * @param data The data to pass to the event's handler. */ emit: , Event extends SymbolToken | keyof EventTypes = any>(event: SymbolTokenEventType, ...data: Event extends SymbolToken ? undefined extends T ? [T?] : [T] : [EventTypes] extends [never] ? [T?] : Event extends keyof EventTypes ? undefined extends EventTypes[Event] ? [EventTypes[Event]?] : [EventTypes[Event]] extends [never] ? [] : [EventTypes[Event]] : never) => void; private validateEvent; private getName; } export {}; //# sourceMappingURL=event-bus.d.ts.map