import { EventBusCore, type Listener } from "./eventBus.js"; export declare class EmitterCore> extends Map> { on(event: K, listener: Listener): void; off(event: K, listener: Listener): void; emit(event: K, ..._: void extends M[K] ? [payload?: M[K]] : [payload: M[K]]): void; } export type EmitterOn> = (event: K, listener: Listener) => VoidFunction; export type EmitterEmit> = EmitterCore["emit"]; export type Emitter> = { readonly on: EmitterOn; readonly emit: EmitterEmit; readonly clear: VoidFunction; }; /** * Creates an emitter with which you can listen to and emit various events. * * @returns emitter mathods: `{on, emit, clear}` * * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/event-bus#createEmitter * * @example * const emitter = createEmitter<{ * foo: number; * bar: string; * }>(); * // can be destructured * const { on, emit, clear } = emitter; * * emitter.on("foo", e => {}); * emitter.on("bar", e => {}); * * emitter.emit("foo", 0); * emitter.emit("bar", "hello"); */ export declare function createEmitter>(): Emitter; export type EmitterPayload> = { [K in keyof M]: { readonly name: K; readonly details: M[K]; }; }[keyof M]; export type EmitterListener> = (payload: EmitterPayload) => void; export type EmitterListen> = (listener: EmitterListener) => VoidFunction; export type GlobalEmitter> = { readonly on: EmitterOn; readonly listen: EmitterListen; readonly emit: EmitterEmit; readonly clear: VoidFunction; }; /** * Creates an emitter with which you can listen to and emit various events. With this emitter you can also listen to all events. * * @returns emitter mathods: `{on, listen, emit, clear}` * * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/event-bus#createGlobalEmitter * * @example * const emitter = createGlobalEmitter<{ * foo: number; * bar: string; * }>(); * // can be destructured * const { on, emit, clear, listen } = emitter; * * emitter.on("foo", e => {}); * emitter.on("bar", e => {}); * * emitter.emit("foo", 0); * emitter.emit("bar", "hello"); * * emitter.listen(e => { * switch (e.name) { * case "foo": { * e.details; * break; * } * case "bar": { * e.details; * break; * } * } * }) */ export declare function createGlobalEmitter>(): GlobalEmitter;