import EventEmitter from 'node:events'; import type { Config } from '../config.abstract'; import type { PropertyException } from '../exceptions'; import type { ConfigSource, ConfigSourceException } from '../sources'; import type { Changes, RawValues } from '../types'; // eslint-disable-next-line unicorn/prefer-event-target,@typescript-eslint/no-unsafe-declaration-merging export class ReloadEvents extends EventEmitter {} // eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging export declare interface ReloadEvents { on(e: 'reload', fn: (source: ConfigSource, values: RawValues) => void): this; on( e: 'reload_failure', fn: (source: ConfigSource, err: ConfigSourceException) => void, ): this; on(e: 'merge', fn: (source: ConfigSource, changes: Changes) => void): this; on(e: 'update', fn: (section: Config, keys: string[]) => void): this; on( e: 'update_failure', fn: (section: Config, err: PropertyException) => void, ): this; emit(e: 'reload', source: ConfigSource, values: RawValues): boolean; emit( e: 'reload_failure', source: ConfigSource, err: ConfigSourceException, ): boolean; emit(e: 'merge', source: ConfigSource, changes: Changes): boolean; emit(e: 'update', section: Config, keys: string[]): boolean; emit(e: 'update_failure', section: Config, err: PropertyException): boolean; }