UNPKG

@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.

55 lines (54 loc) 2.04 kB
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; 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<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; }