import { Context } from './context';
import { DipoEvent } from './event';
import { Handler, HandlerReturn } from './handler';
export declare class Dipo<E extends {
    [key: string]: Context;
}, D extends Context> {
    private events;
    private handlers;
    constructor(events: {
        [P in keyof E]: DipoEvent<E[P], D>;
    });
    addEvent<T extends keyof E>(event: T, handler: DipoEvent<E[T], D>): void;
    middleware<T extends Context = Context>(handler: Handler<Partial<T> & D>): Dipo<{
        [P in keyof E]: T & E[P];
    }, T & D>;
    on<T extends keyof E>(event: T, handler: Handler<E[T]>): Dipo<E, D>;
    use(handler: Handler<D>): Dipo<E, D>;
    handle(context: D): HandlerReturn;
    private next;
}
