import type { KobpServiceContext, KobpServiceState } from '../context';
import type { Context, Middleware } from 'koa';
import Router from 'koa-router';
export declare type HttpMethod = 'post' | 'get' | 'delete' | 'put' | 'patch';
export interface RouteMapMeta {
    method: HttpMethod | HttpMethod[];
    path?: string;
    middlewares?: Middleware[];
}
export interface RouteMap {
    [key: string]: RouteMapMeta;
}
export declare class KobpRouter extends Router<KobpServiceState, KobpServiceContext> {
}
export declare class BaseRoutedController {
    protected allRoutesMiddlewares: Middleware[];
    constructor(allRoutesMiddlewares?: Middleware[]);
    getRouteMaps(): RouteMap;
    handleSuccess(ctx: KobpServiceContext, data: any): Promise<void>;
    /**
     * Counter path of getRouter(). Use this method to register the controller to given router.
     *
     * @param path
     * @param koaRouter
     */
    register(path: string, koaRouter: KobpRouter, ...middlewares: Router.IMiddleware<KobpServiceState, KobpServiceContext>[]): void;
    getRouter(): KobpRouter;
    /**
     * Tell the context to disable default JSON output handler
     *
     * @example
     * ```
     * class SomeController {
     *  @Route('/')
     *  async call(context: KobpServiceContext): Promise<void> {
     *    this.setDoNotHandleSuccess(context)
     *    context.redirect('/login')
     *  }
     * }
     * ```
     */
    protected setDoNotHandleSuccess(context: KobpServiceContext | Context): void;
    getMiddlewares(): Router.IMiddleware<KobpServiceState, KobpServiceContext>[];
}
