import type { WebSocket as WebSocketRawType } from 'ws'; import { WebSocketServer as WebSocketServerRaw } from 'ws'; import { NormalizedServerConfig } from '../index.js'; import { HmrEngine } from './hmr-engine.js'; import { Server } from './type.js'; import type { ILogger } from '../index.js'; export interface IWebSocketServer { clients: Set; listen(): void; send(payload: any): void; send(event: T, payload?: any): void; close(): Promise; on(event: string, listener: any): void; off(event: string, listener: any): void; } export type WebSocketCustomListener = (data: T, client: WebSocketClient) => void; export interface WebSocketClient { send(payload: any): void; send(event: string, payload?: any['data']): void; rawSend(str: string): void; socket: WebSocketRawType; } export default class WsServer implements IWebSocketServer { private httpServer; private config; private hmrEngine; wss: WebSocketServerRaw; customListeners: Map>>; clientsMap: WeakMap; bufferedError: any; logger: ILogger; private hmrOrigins; constructor(httpServer: Server, config: NormalizedServerConfig, hmrEngine: HmrEngine, logger?: ILogger); private generateHMROrigins; private createWebSocketServer; private upgradeWsServer; listen(): void; send(...args: any[]): void; private isHMRRequest; private handleHMRUpgrade; get clients(): Set; sendCustomEvent(event: T, payload?: any): void; on(event: string, listener: (...args: any[]) => void): void; off(event: string, listener: () => void): void; connection(): void; close(): Promise; private terminateAllClients; private closeWebSocketServer; private addCustomEventListener; private removeCustomEventListener; private getSocketClient; private sendMessage; private handleSocketError; }