///
import WebSocket from 'ws';
import type http from 'http';
import type http2 from 'http2';
interface Dependency {
dependents: Set;
dependencies: Set;
isHmrEnabled: boolean;
isHmrAccepted: boolean;
needsReplacement: boolean;
needsReplacementCount: number;
}
declare type HMRMessage = {
type: 'reload';
} | {
type: 'update';
url: string;
bubbled: boolean;
} | {
type: 'error';
title: string;
errorMessage: string;
fileLoc?: string;
errorStackTrace?: string;
};
interface EsmHmrEngineOptionsCommon {
delay?: number;
}
declare type EsmHmrEngineOptions = ({
server: http.Server | http2.Http2Server;
port: number;
} | {
port?: number;
server?: undefined;
}) & EsmHmrEngineOptionsCommon;
export declare class EsmHmrEngine {
clients: Set;
dependencyTree: Map;
private delay;
private currentBatch;
private currentBatchTimeout;
private cachedConnectErrors;
readonly port: number;
constructor(options: EsmHmrEngineOptions);
registerListener(client: WebSocket): void;
createEntry(sourceUrl: string): Dependency;
getEntry(sourceUrl: string, createIfNotFound?: boolean): Dependency | null;
setEntry(sourceUrl: string, imports: string[], isHmrEnabled?: boolean): void;
removeRelationship(sourceUrl: string, importUrl: string): void;
addRelationship(sourceUrl: string, importUrl: string): void;
markEntryForReplacement(entry: Dependency, state: boolean): void;
broadcastMessage(data: HMRMessage): void;
dispatchBatch(): void;
/**
* This is shared logic to dispatch messages to the clients. The public methods
* `broadcastMessage` and `dispatchBatch` manage the delay then use this,
* internally when it's time to actually send the data.
*/
private dispatchMessage;
connectClient(client: WebSocket): void;
disconnectClient(client: WebSocket): void;
disconnectAllClients(): void;
}
export {};