import { NapiMethod } from "./enums";
import { NapiConfiguration, NapiConfigurationRegister } from "./configuration";
import { NapiClass, NapiOptionAsync, NapiRouteHandler } from "./types";
export interface NapiApplicationOptions {
    configs?: Record<string, NapiConfigurationRegister>;
    prefix?: NapiOptionAsync<string, NapiConfiguration>;
    controllers?: NapiClass[];
}
export type NapiApplicationHandlers<Params = unknown> = Record<Uppercase<NapiMethod>, NapiRouteHandler<Params>>;
export interface NapiControllerInjected<Instance = unknown> {
    class: NapiClass;
    instance: Instance;
}
export declare class NapiApplication {
    private readonly options;
    private static controllers;
    private configuration;
    private req;
    private res;
    private payload;
    private prefix;
    private router;
    private route;
    private context;
    private controller;
    private controllerMethod;
    private params;
    private constructor();
    private getRequest;
    private getRouter;
    private getPayload;
    private getController;
    private getConfig;
    private getResponse;
    private get method();
    private createExcutionContext;
    private initializeConfiguration;
    private extractPrefix;
    private extractRoute;
    private initRouter;
    private loadController;
    private loadMethods;
    private loadParameters;
    private initResponse;
    private execute;
    private dispatch;
    static register(options: NapiApplicationOptions): NapiApplicationHandlers<unknown>;
}
