declare const _subscriptions: unique symbol; declare const _oneTimeEvents: unique symbol; /** * Tipo para o callback de uma inscrição de evento. */ export type SubscriptionCallback = any[]> = ((...arg: T) => void) & {}; /** * Interface para o manipulador de eventos retornado pelo método `on`. */ export interface EventHandler { /** Interrompe e remove o ouvinte de evento. */ stop: () => void; remove: () => void; } /** * Tipo para os parâmetros dos listeners de eventos. */ export type EventsListenersParameters void> = Record void>> = { [key in keyof T]: Parameters; } & {}; /** * Tipo para os listeners de eventos. */ export type EventsListeners = Record> = { [key in keyof T]: T[key]; } & {}; /** * Classe EventEmitter para gerenciar e emitir eventos personalizados. */ export declare class EventEmitter { private [_subscriptions]; private [_oneTimeEvents]; private _ready; /** * Cria uma nova instância de EventEmitter. */ constructor(); /** * Aguarda o emissor estar pronto para então executar um callback. * @param {() => R | Promise} [callback] - Função a ser executada quando o emissor estiver pronto. * @returns {Promise} Uma Promise que resolve com o resultado do callback. * * @example * const emitter = new EventEmitter(); * * emitter.ready(() => { * console.log("O emissor está pronto!"); * }); * * emitter.prepared = true; * // Saída: O emissor está pronto! */ ready(callback?: () => R | Promise): Promise; /** * Verifica se o emissor está preparado. * @returns {boolean} `true` se o emissor estiver pronto, caso contrário `false`. * * @example * const emitter = new EventEmitter(); * * emitter.ready(() => { * console.log("O emissor está pronto!"); * }); * * console.log(emitter.prepared); * // Saída: false * * emitter.prepared = true; * console.log(emitter.prepared); * // Saída: true */ get prepared(): boolean; /** * Property to set the emitter as prepared * @param {boolean} value - Define o estado de preparação do emissor. * * @example * const emitter = new EventEmitter(); * * emitter.ready(() => { * console.log("O emissor está pronto!"); * }); * * emitter.prepared = true; * // Saída: O emissor está pronto! */ set prepared(value: boolean); /** * Define o emissor como preparado. * @param {boolean} [value=true] - O estado de preparação a ser definido. * @returns {void} * * @example * const emitter = new EventEmitter(); * * emitter.ready(() => { * console.log("O emissor está pronto!"); * }); * * emitter.prepare(); * // Saída: O emissor está pronto! */ prepare(value?: boolean): void; /** * Limpa todos os ouvintes de eventos. * @returns {void} * @example * const emitter = new EventEmitter(); * emitter.clearEvents(); * // Todos os eventos foram removidos. */ clearEvents(): void; /** * Adiciona um ouvinte para um evento específico. * @param {K} event - O nome do evento para o qual se inscrever. * @param {SubscriptionCallback} callback - A função a ser executada quando o evento for emitido. * @returns {EventHandler} Um objeto com um método `remove()` para cancelar a inscrição. * @example * const emitter = new EventEmitter<{ * saudacao: [nome: string]; * despedida: [nome: string]; * }>(); * * emitter.on("saudacao", (nome) => { * console.log(`Olá, ${nome}!`); * }); * * emitter.emit("saudacao", "Alice"); * // Saída: Olá, Alice! */ on(event: K, callback: SubscriptionCallback): EventHandler; /** * Remove um ouvinte de um evento específico. * @param {K} event - O nome do evento. * @param {SubscriptionCallback} [callback] - O callback específico a ser removido. Se omitido, remove todos os ouvintes para o evento. * @returns {EventEmitter} A própria instância do EventEmitter. * * @example * const emitter = new EventEmitter<{ * saudacao: [nome: string]; * }>(); * * const ouvinte = (nome) => { * console.log(`Olá, ${nome}!`); * } * * emitter.on("saudacao", ouvinte); * emitter.off("saudacao", ouvinte); * * emitter.emit("saudacao", "Alice"); * // Nenhuma saída */ off(event: K, callback?: SubscriptionCallback): EventEmitter; /** * Adiciona um ouvinte que será executado apenas uma vez e depois removido. * @param {K} event - O nome do evento. * @param {(...args: T[K]) => R} [callback] - A função a ser executada. * @returns {Promise} Uma Promise que resolve com o valor de retorno do callback quando o evento é emitido. * @example * const emitter = new EventEmitter<{ * greet: [name: string]; * farewell: [name: string]; * }>(); * * emitter.once("greet", (name) => { * console.log(`Hello, ${name}!`); * }); * * emitter.emit("greet", "Alice"); * // Saída: Hello, Alice! */ once(event: K, callback?: (...args: T[K]) => R): Promise; /** * Remove um ouvinte de uso único (`once`). * @param {K} event - O nome do evento. * @param {(...args: T[K]) => any} [callback] - O callback específico a ser removido. * @returns {EventEmitter} A própria instância do EventEmitter. * * @example * const emitter = new EventEmitter<{ * greet: [name: string]; * farewell: [name: string]; * }>(); * * const ouvinte = (nome) => { * console.log(`Olá, ${nome}!`); * } * * emitter.once("greet", ouvinte); * emitter.offOnce("greet", ouvinte); */ offOnce(event: K, callback?: (...args: T[K]) => any): EventEmitter; /** * Emite um evento, acionando todos os seus ouvintes. * @param {K} event - O nome do evento a ser emitido. * @param {T[K]} arg - Argumentos para passar aos ouvintes do evento. * @returns {EventEmitter} A própria instância do EventEmitter. * @example * const emitter = new EventEmitter<{ * saudacao: [nome: string]; * }>(); * * emitter.on("saudacao", (nome) => { * console.log(`Olá, ${nome}!`); * }); * * emitter.emit("saudacao", "Alice"); * // Saída: Olá, Alice! */ emit(event: K, ...arg: T[K]): EventEmitter; /** * Emite um evento que só pode ser disparado uma única vez. * Qualquer ouvinte adicionado posteriormente para este evento será executado imediatamente. * @param {K} event - O nome do evento a ser emitido. * @param {T[K]} arg - Argumentos para passar aos ouvintes. * @returns {EventEmitter} A própria instância do EventEmitter. * @example * const emitter = new EventEmitter<{ * configuracao: [config: object]; * }>(); * * emitter.emitOnce("configuracao", { tema: "dark" }); * * // Este ouvinte será chamado imediatamente porque 'configuracao' já foi emitido. * emitter.on("configuracao", (config) => { * console.log(`Configuração recebida:`, config); * }); * // Saída: Configuração recebida: { tema: 'dark' } */ emitOnce(event: K, ...arg: T[K]): EventEmitter; /** * Redireciona eventos de um emissor para outro. * @param {K} event - O evento a ser redirecionado. * @param {EventEmitter} eventEmitter - O emissor de destino. * @returns {EventHandler} Um objeto com um método `remove()` para parar o redirecionamento. * @example * const emitter = new EventEmitter<{ * mensagem: [texto: string]; * }>(); * * const anotherEmitter = new EventEmitter<{ * mensagem: [texto: string]; * }>(); * * emitter.pipe("mensagem", anotherEmitter); * * anotherEmitter.on("mensagem", (texto) => { * console.log(`Outro emissor recebeu: ${texto}`); * }); * * emitter.emit("mensagem", "Olá mundo!"); * // Saída: Outro emissor recebeu: Olá mundo! */ pipe(event: K, eventEmitter: EventEmitter): EventHandler; /** * Redireciona um evento de um emissor para outro, apenas uma vez. * @param {K} event - O evento a ser redirecionado. * @param {EventEmitter} eventEmitter - O emissor de destino. * @returns {Promise} Uma Promise que resolve quando o evento é redirecionado. * @example * const emitter = new EventEmitter<{ * login: [usuario: string]; * }>(); * * const anotherEmitter = new EventEmitter<{ * login: [usuario: string]; * }>(); * * emitter.pipeOnce("login", anotherEmitter); * * anotherEmitter.on("login", (usuario) => { * console.log(`${usuario} logado no outro emissor.`); * }); * * emitter.emit("login", "Alice"); * // Saída: Alice logado no outro emissor. */ pipeOnce(event: K, eventEmitter: EventEmitter): Promise; } export {}; //# sourceMappingURL=index.d.ts.map