import Koa from 'koa';
import { Compiler } from '../compiler/index.js';
import { DevServerMiddleware, NormalizedServerConfig, UserPreviewServerConfig, UserServerConfig } from '../config/index.js';
import { Logger } from '../utils/index.js';
import { FileWatcher } from '../watcher/index.js';
import { HmrEngine } from './hmr-engine.js';
import { Server as httpServer } from './type.js';
import WsServer from './ws.js';
/**
 * Farm Dev Server, responsible for:
 * * parse and normalize dev server options
 * * launch http server based on options
 * * compile the project in dev mode and serve the production
 * * HMR middleware and websocket supported
 */
interface ServerUrls {
    local: string[];
    network: string[];
}
interface ImplDevServer {
    createServer(options: UserServerConfig): void;
    createDevServer(options: UserServerConfig): void;
    createPreviewServer(options: UserServerConfig): void;
    listen(): Promise<void>;
    close(): Promise<void>;
    getCompiler(): Compiler;
}
export declare class Server implements ImplDevServer {
    private _app;
    private restart_promise;
    private compiler;
    logger: Logger;
    ws: WsServer;
    config: NormalizedServerConfig & UserPreviewServerConfig;
    hmrEngine?: HmrEngine;
    server?: httpServer;
    publicDir?: string;
    publicPath?: string;
    resolvedUrls?: ServerUrls;
    watcher: FileWatcher;
    constructor({ compiler, logger }: {
        compiler?: Compiler | null;
        logger: Logger;
    });
    getCompiler(): Compiler;
    app(): Koa;
    listen(): Promise<void>;
    private compile;
    startServer(serverOptions: UserServerConfig): Promise<void>;
    handleServerError(error: Error & {
        code?: string;
    }, port: number, host: string | undefined): void;
    close(): Promise<void>;
    restart(promise: () => Promise<void>): Promise<void>;
    private initializeKoaServer;
    createServer(options: NormalizedServerConfig & UserPreviewServerConfig): Promise<void>;
    createWebSocket(): void;
    private invalidateVite;
    createPreviewServer(options: UserPreviewServerConfig): Promise<void>;
    createDevServer(options: NormalizedServerConfig): Promise<void>;
    static resolvePortConflict(normalizedDevConfig: NormalizedServerConfig, logger: Logger): Promise<void>;
    /**
     * Add listening files for root manually
     *
     * > listening file with root must as file.
     *
     * @param root
     * @param deps
     */
    addWatchFile(root: string, deps: string[]): void;
    applyMiddlewares(internalMiddlewares?: DevServerMiddleware[]): void;
    setCompiler(compiler: Compiler): void;
    private applyPreviewServerMiddlewares;
    private applyServerMiddlewares;
    private displayServerUrls;
}
export {};
