import { BindingWatcherEvent } from '../../binding';
import { MaybePromise } from '../../types/utils';
export type WatcherEvent = 'close' | 'event' | 'restart' | 'change';
export type ChangeEvent = 'create' | 'update' | 'delete';
export type RollupWatcherEvent = {
    code: 'START';
} | {
    code: 'BUNDLE_START';
} | {
    code: 'BUNDLE_END';
    duration: number;
    output: readonly string[];
} | {
    code: 'END';
} | {
    code: 'ERROR';
    error: Error;
};
export declare class WatcherEmitter {
    listeners: Map<WatcherEvent, Array<(...parameters: any[]) => MaybePromise<void>>>;
    timer: any;
    constructor();
    on(event: 'change', listener: (id: string, change: {
        event: ChangeEvent;
    }) => MaybePromise<void>): this;
    on(event: 'event', listener: (data: RollupWatcherEvent) => MaybePromise<void>): this;
    on(event: 'restart' | 'close', listener: () => MaybePromise<void>): this;
    onEvent(event: BindingWatcherEvent): Promise<void>;
    close(): Promise<void>;
}
export type RolldownWatcher = WatcherEmitter;
