import { GlobalContext } from "../types/context";
import { Options } from "../functions/parseOptions";
import RouteList from "./router";
import { OpenAPIObject } from "../types/openAPI3";
import { MiddlewareInitted } from "../types/internal";
import RouteFile from "./router/file";
import uWebsocket from "@rjweb/uws";
/**
 * A Server Instance containing a built in router and http modules
 * @example
 * ```
 * const server = new Server(...)
 * ```
 * @since 3.0.0
*/ export default class Server<GlobContext extends Record<any, any> = {}, Middlewares extends MiddlewareInitted[] = []> extends RouteList<GlobContext, Middlewares> {
    protected globalContext: GlobalContext;
    protected server: uWebsocket.TemplatedApp;
    protected socket: uWebsocket.us_listen_socket;
    /**
     * Initialize a new Server
     * @example
     * ```
     * const controller = new Server({
     *   port: 8000
     * })
     *
     * module.exports.server = controller
     * ```
     * @since 3.0.0
    */ constructor(
    /** The Server Options */ options?: Options, 
    /** The Middlewares */ middlewares?: Middlewares, 
    /** The Default GlobalContext Values */ globContext?: GlobContext);
    /**
     * Override the set Server Options
     * @example
     * ```
     * const controller = new Server({ })
     *
     * controller.setOptions({
     *   port: 6900
     * })
     * ```
     * @since 3.0.0
    */ setOptions(
    /** The Options */ options: Options): this;
    /**
     * Get OpenAPI 3.1 Defininitions for this Server (make sure to let all routes load before calling)
     * @example
     * ```
     * const controller = new Server({ port: 4200 })
     *
     * controller.path('/', (path) => path
     *   .http('GET', '/openapi', (http) => http
     *     .onRequest((ctr) => {
     *       ctr.print(ctr.controller.getOpenApi3Def('http://localhost:4200'))
     *     })
     *   )
     * )
     * ```
     * @since 7.6.0
    */ getOpenAPI3Def(serverUrl?: string): OpenAPIObject;
    /**
     * Route File Builder
     * @example
     * ```
     * const { server } = require('../index.js')
     *
     * module.exports = new server.routeFile((file) => file
     *   .http(...)
     * )
     * ```
     * @since 7.0.0
    */ routeFile: new (...args: ConstructorParameters<typeof RouteFile<GlobContext, Middlewares>>) => RouteFile<GlobContext, Middlewares>;
    /**
     * Start the Server
     * @example
     * ```
     * const controller = new Server({ })
     *
     * controller.start()
     *   .then((port) => {
     *     console.log(`Server started on port ${port}`)
     *   })
     *   .catch((err) => {
     *     console.error(err)
     *   })
     * ```
     * @since 3.0.0
    */ start(): Promise<number>;
    /**
     * Reload the Server
     * @example
     * ```
     * const controller = new Server({ })
     *
     * controller.reload()
     *   .then((port) => {
     *     console.log(`Server reloaded and started on port ${port}`)
     *   })
     *   .catch((err) => {
     *     console.error(err)
     *   })
     * ```
     * @since 3.0.0
    */ reload(): Promise<number>;
    /**
     * Stop the Server
     * @example
     * ```
     * const controller = new Server({ })
     *
     * controller.stop()
     *   .then(() => {
     *     console.log('Server stopped')
     *   })
     *   .catch((err) => {
     *     console.error(err)
     *   })
     * ```
     * @since 3.0.0
    */ stop(): Promise<void>;
    /**
     * Load all External Paths
    */ private loadExternalPaths;
}
