@farmfe/core
Version:
Farm is a extremely fast web build tool written in Rust. Farm can start a project in milliseconds and perform HMR within 10ms, making it much faster than similar tools like webpack and vite.
53 lines (52 loc) • 1.98 kB
TypeScript
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<WebSocketClient>;
listen(): void;
send(payload: any): void;
send<T extends string>(event: T, payload?: any): void;
close(): Promise<void>;
on(event: string, listener: any): void;
off(event: string, listener: any): void;
}
export type WebSocketCustomListener<T> = (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<string, Set<WebSocketCustomListener<any>>>;
clientsMap: WeakMap<WebSocketRawType, WebSocketClient>;
bufferedError: any;
logger: ILogger;
constructor(httpServer: Server, config: NormalizedServerConfig, hmrEngine: HmrEngine, logger?: ILogger);
private createWebSocketServer;
private upgradeWsServer;
listen(): void;
send(...args: any[]): void;
private isHMRRequest;
private handleHMRUpgrade;
get clients(): Set<WebSocketClient>;
sendCustomEvent<T extends string>(event: T, payload?: any): void;
on(event: string, listener: (...args: any[]) => void): void;
off(event: string, listener: () => void): void;
connection(): void;
close(): Promise<void>;
private terminateAllClients;
private closeWebSocketServer;
private addCustomEventListener;
private removeCustomEventListener;
private getSocketClient;
private sendMessage;
private handleSocketError;
}