UNPKG

2.04 kBTypeScriptView Raw
1/// <reference types="node" />
2import WebSocket from 'ws';
3import type http from 'http';
4import type http2 from 'http2';
5interface Dependency {
6 dependents: Set<string>;
7 dependencies: Set<string>;
8 isHmrEnabled: boolean;
9 isHmrAccepted: boolean;
10 needsReplacement: boolean;
11 needsReplacementCount: number;
12}
13declare type HMRMessage = {
14 type: 'reload';
15} | {
16 type: 'update';
17 url: string;
18 bubbled: boolean;
19} | {
20 type: 'error';
21 title: string;
22 errorMessage: string;
23 fileLoc?: string;
24 errorStackTrace?: string;
25};
26interface EsmHmrEngineOptionsCommon {
27 delay?: number;
28}
29declare type EsmHmrEngineOptions = ({
30 server: http.Server | http2.Http2Server;
31 port: number;
32} | {
33 port?: number;
34 server?: undefined;
35}) & EsmHmrEngineOptionsCommon;
36export declare class EsmHmrEngine {
37 clients: Set<WebSocket>;
38 dependencyTree: Map<string, Dependency>;
39 private delay;
40 private currentBatch;
41 private currentBatchTimeout;
42 private cachedConnectErrors;
43 readonly port: number;
44 constructor(options: EsmHmrEngineOptions);
45 registerListener(client: WebSocket): void;
46 createEntry(sourceUrl: string): Dependency;
47 getEntry(sourceUrl: string, createIfNotFound?: boolean): Dependency | null;
48 setEntry(sourceUrl: string, imports: string[], isHmrEnabled?: boolean): void;
49 removeRelationship(sourceUrl: string, importUrl: string): void;
50 addRelationship(sourceUrl: string, importUrl: string): void;
51 markEntryForReplacement(entry: Dependency, state: boolean): void;
52 broadcastMessage(data: HMRMessage): void;
53 dispatchBatch(): void;
54 /**
55 * This is shared logic to dispatch messages to the clients. The public methods
56 * `broadcastMessage` and `dispatchBatch` manage the delay then use this,
57 * internally when it's time to actually send the data.
58 */
59 private dispatchMessage;
60 connectClient(client: WebSocket): void;
61 disconnectClient(client: WebSocket): void;
62 disconnectAllClients(): void;
63}
64export {};