import { Express } from 'express';
import { DataSource } from 'typeorm';
import { ActionMetadata } from './metadata/ActionMetadata.js';
import { MiddlewareMetadata } from './metadata/MiddlewareMetadata.js';
import { ParamMetadata } from './metadata/ParamMetadata.js';
import { UseMetadata } from './metadata/UseMetadata.js';
import { TypeNexusOptions } from './DriverOptions.js';
import { Action } from './Action.js';
export declare abstract class Driver {
    options: TypeNexusOptions;
    /**
     * Global application prefix.
     */
    routePrefix: string;
    /**
     * DataSource is a pre-defined connection configuration to a specific database.
     * You can have multiple data sources connected (with multiple connections in it), connected to multiple databases in your application.
     */
    dataSource: DataSource;
    app: Express;
    express: Express;
    /**
     * Special function used to check user authorization roles per request.
     * Must return true or promise with boolean true resolved for authorization to succeed.
     */
    authorizationChecker?: TypeNexusOptions['authorizationChecker'];
    /**
     * Special function used to get currently authorized user.
     */
    currentUserChecker?: TypeNexusOptions['currentUserChecker'];
    constructor(portOrOptions?: number | TypeNexusOptions, options?: TypeNexusOptions);
    registerSession(): Promise<void>;
    registerAction(actionMetadata: ActionMetadata, executeCallback: (options: Action) => any): void;
    /**
     * Handles result of successfully executed controller action.
     */
    handleSuccess(result: any, action: ActionMetadata, options: Action): void;
    /**
     * Handles result of failed executed controller action.
     */
    handleError(error: any, action: ActionMetadata | undefined, options: Action): any;
    /**
     * Gets param from the request.
     */
    getParamFromRequest(action: Action, param: ParamMetadata): any;
    /**
     * Creates middlewares from the given "use"-s.
     */
    protected prepareMiddlewares(uses: UseMetadata[]): Function[];
    /**
     * Registers middleware that run before controller actions.
     */
    registerMiddleware(middleware: MiddlewareMetadata, options: TypeNexusOptions): void;
    protected processJsonError(error: any): any;
    protected processTextError(error: any): any;
    protected merge(obj1: any, obj2: any): any;
}
