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; close(): Promise; 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; private compile; startServer(serverOptions: UserServerConfig): Promise; handleServerError(error: Error & { code?: string; }, port: number, host: string | undefined): void; close(): Promise; restart(promise: () => Promise): Promise; private initializeKoaServer; createServer(options: NormalizedServerConfig & UserPreviewServerConfig): void; createWebSocket(): void; private invalidateVite; createPreviewServer(options: UserPreviewServerConfig): Promise; createDevServer(options: NormalizedServerConfig): Promise; static resolvePortConflict(normalizedDevConfig: NormalizedServerConfig, logger: Logger): Promise; /** * 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 {};