import { Express, Router } from 'express';
import { ExpressiveTeaModuleProps } from '../libs/interfaces';
/**
 * @typedef {Object} ExpressiveTeaModuleProps
 * @property {Object[]} controllers Controllers Assigned to Module
 * @property {Object[]} providers Dependency Injection Providers
 * @property {string} mountpoint Endpoint part which Module it will use as root.
 */
/**
 * @module Decorators/Module
 */
/**
 * Module Decorator is a Class Decorator which is help to register a Module into Expressive Tea. A module is a
 * placeholder over a mountpoint. We can considerate a module like a container which provide isolation and modularity
 * for our project. This module can be mounted in different applications and will move all the controller routes too.
 * @decorator {ClassDecorator} Module - Module Class Register Decorator
 * @param {ExpressiveTeaModuleProps} options
 * @summary Module Decorator
 * @example
 * {REPLACE-AT}Module({
 *   controllers: [],
 *   providers: [],
 *   mountpoint: '/'
 * })
 * class Example {}
 */
export declare function Module(options: ExpressiveTeaModuleProps): <T extends new (...args: any[]) => {}>(Module: T) => {
    new (...args: any[]): {
        readonly settings: ExpressiveTeaModuleProps;
        readonly router: Router;
        readonly controllers: any[];
        __register(server: Express): void;
    };
} & T;
