1 |
|
2 | import WebSocket from 'ws';
|
3 | import type http from 'http';
|
4 | import type http2 from 'http2';
|
5 | interface Dependency {
|
6 | dependents: Set<string>;
|
7 | dependencies: Set<string>;
|
8 | isHmrEnabled: boolean;
|
9 | isHmrAccepted: boolean;
|
10 | needsReplacement: boolean;
|
11 | needsReplacementCount: number;
|
12 | }
|
13 | declare 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 | };
|
26 | interface EsmHmrEngineOptionsCommon {
|
27 | delay?: number;
|
28 | }
|
29 | declare type EsmHmrEngineOptions = ({
|
30 | server: http.Server | http2.Http2Server;
|
31 | port: number;
|
32 | } | {
|
33 | port?: number;
|
34 | server?: undefined;
|
35 | }) & EsmHmrEngineOptionsCommon;
|
36 | export 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 | }
|
64 | export {};
|