Skip to content

Commit e1f9d4d

Browse files
committed
new devtools ui
1 parent b1e1ff1 commit e1f9d4d

File tree

12 files changed

+86
-41
lines changed

12 files changed

+86
-41
lines changed

packages/devtools-plugin/src/devtools.event.handler.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export class DevtoolsEventHandler {
1515

1616
constructor(
1717
client: ClientInstance,
18-
{ socketAddress = "ws://localhost", socketPort = 1234, appName }: DevtoolsPluginOptions,
18+
{ socketAddress = "ws://localhost", socketPort = 1234, appName, debug = false }: DevtoolsPluginOptions,
1919
) {
2020
this.isConnected = false;
2121
this.eventQueue = [];
@@ -25,6 +25,8 @@ export class DevtoolsEventHandler {
2525
this.socket = new Socket({
2626
url: `${socketAddress}:${socketPort}`,
2727
adapterOptions: { autoConnect: false },
28+
reconnect: 100,
29+
reconnectTime: 3000,
2830
}).setQueryParams({
2931
connectionName: this.connectionName,
3032
});
@@ -33,12 +35,21 @@ export class DevtoolsEventHandler {
3335
this.socketListener = this.socket.createListener<any>()({ topic: "DEVTOOLS_PLUGIN_LISTENER" });
3436
this.socket.connect();
3537
this.socket.onDisconnected(() => {
36-
// TODO handle reconnection?
38+
if (debug) {
39+
// eslint-disable-next-line no-console
40+
console.log("[HyperFetch Devtools] disconnected");
41+
}
3742
});
38-
this.socket.onError(() => {
39-
// TODO handle err?
43+
this.socket.onError(({ error }) => {
44+
if (debug) {
45+
console.error("[HyperFetch Devtools] error:", error);
46+
}
4047
});
4148
this.socket.onConnected(() => {
49+
if (debug) {
50+
// eslint-disable-next-line no-console
51+
console.log("[HyperFetch Devtools] connected");
52+
}
4253
this.isConnected = true;
4354
while (this.eventQueue.length > 0) {
4455
const nextEvent = this.eventQueue.shift();

packages/devtools-plugin/src/devtools.types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ export enum EmitableCustomEvents {
1616
REQUEST_CREATED = "REQUEST_CREATED",
1717
}
1818

19-
export type DevtoolsPluginOptions = { appName: string; socketAddress?: string; socketPort?: number };
19+
export type DevtoolsPluginOptions = { appName: string; socketAddress?: string; socketPort?: number; debug?: boolean };

packages/devtools/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@
7373
"@radix-ui/react-tooltip": "^1.1.8",
7474
"@reins/hooks": "^0.17.0",
7575
"@reins/router": "^0.17.0",
76-
"@reins/types": "^0.17.0",
77-
"@reins/utils": "^0.17.0",
76+
"@reins/types": "^0.23.0",
77+
"@reins/utils": "^0.19.0",
7878
"@tailwindcss/typography": "^0.5.16",
7979
"@tailwindcss/vite": "^4.0.9",
8080
"class-variance-authority": "^0.7.1",

packages/devtools/src/frontend/context/projects/bridge/bridge.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ export const Bridge = memo(({ port, address = "localhost" }: { port: number; add
7878
...prev,
7979
[connectionName]: {
8080
name: connectionName,
81+
// TODO - Kacper add the adapter name to event and pick adapter here
8182
client: new Client({ url: "http://localhost.dummyhost:5000" }),
8283
connected: true,
8384
eventListener,

packages/devtools/src/main/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

packages/devtools/src/main/window-controls.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

packages/sockets/src/adapter-sse/sse-adapter.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,10 @@ export const ServerSentEventsAdapter = (): ServerSentEventsAdapterType =>
5353
}) => {
5454
let sse: ReturnType<typeof getServerSentEventsAdapter> | undefined;
5555

56-
const autoConnect = adapter.adapterOptions?.autoConnect ?? true;
56+
const autoConnect =
57+
typeof socket.adapter.adapterOptions?.autoConnect === "boolean"
58+
? socket.adapter.adapterOptions?.autoConnect
59+
: true;
5760

5861
const connect = () => {
5962
const url = getSocketUrl(socket.url, getQueryParams());

packages/sockets/src/adapter-sse/sse-adapter.utils.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,31 +41,31 @@ export const getServerSentEventsAdapter = (url: string, adapterOptions: SSEAdapt
4141
});
4242
};
4343

44-
addEventListener<K extends keyof EventSourceEventMap>(
44+
addEventListener = <K extends keyof EventSourceEventMap>(
4545
type: K,
4646
listener: (this: EventSource, ev: EventSourceEventMap[K]) => any,
4747
options?: boolean | (AddEventListenerOptions & { disableCleanup?: boolean }),
48-
): void {
48+
): void => {
4949
super.addEventListener(type, listener, options);
5050
this.listeners.set(listener, { type, listener, options });
51-
}
51+
};
5252

53-
removeEventListener<K extends keyof EventSourceEventMap>(
53+
removeEventListener = <K extends keyof EventSourceEventMap>(
5454
type: K,
5555
listener: (this: EventSource, ev: EventSourceEventMap[K]) => any,
5656
options?: boolean | EventListenerOptions,
57-
): void {
57+
): void => {
5858
super.removeEventListener(type, listener, options);
5959
this.listeners.delete(listener);
60-
}
60+
};
6161

62-
clearListeners() {
62+
clearListeners = () => {
6363
this.listeners.forEach(({ type, listener, options }) => {
6464
if (!options?.disableCleanup) {
6565
this.removeEventListener(type, listener, options);
6666
}
6767
});
68-
}
68+
};
6969
}
7070

7171
return new HyperFetchEventSource(url, adapterOptions?.eventSourceInit);

packages/sockets/src/adapter-websockets/websocket-adapter.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,16 @@ export const WebsocketAdapter = (): WebsocketAdapterType =>
5353
onError,
5454
onEvent,
5555
}) => {
56-
const autoConnect = socket.adapter.adapterOptions?.autoConnect ?? true;
56+
const autoConnect =
57+
typeof socket.adapter.adapterOptions?.autoConnect === "boolean"
58+
? socket.adapter.adapterOptions?.autoConnect
59+
: true;
5760

5861
let websocket: ReturnType<typeof getWebsocketAdapter> | undefined;
5962

6063
let pingTimer: ReturnType<typeof setTimeout> | undefined;
6164
let pongTimer: ReturnType<typeof setTimeout> | undefined;
65+
let timeout: ReturnType<typeof setTimeout> | undefined;
6266

6367
const connect = async (): Promise<boolean> => {
6468
const url = getSocketUrl(socket.url, getQueryParams());
@@ -67,6 +71,7 @@ export const WebsocketAdapter = (): WebsocketAdapterType =>
6771
return Promise.resolve(false);
6872
}
6973

74+
clearTimeout(timeout);
7075
websocket?.clearListeners();
7176
websocket?.close();
7277

@@ -89,7 +94,7 @@ export const WebsocketAdapter = (): WebsocketAdapterType =>
8994
newWebsocket.clearListeners();
9095

9196
// Reconnection timeout
92-
const timeout = setTimeout(() => {
97+
timeout = setTimeout(() => {
9398
reconnect();
9499
}, socket.reconnectTime);
95100

@@ -104,11 +109,18 @@ export const WebsocketAdapter = (): WebsocketAdapterType =>
104109
});
105110

106111
newWebsocket.addEventListener("close", (event) => {
107-
const error = getSocketError(event);
108-
109-
onError({ error: new Error(error) });
112+
clearTimeout(timeout);
110113
onDisconnected();
111114
clearTimers();
115+
const error = getSocketError(event);
116+
onError({ error: new Error(error) });
117+
118+
// If close was not by calling disconnect method, reconnect
119+
if (event.code !== 1000) {
120+
timeout = setTimeout(() => {
121+
reconnect();
122+
}, socket.reconnectTime);
123+
}
112124
});
113125

114126
newWebsocket.addEventListener("message", (newEvent: MessageEvent<SocketData>) => {
@@ -169,7 +181,7 @@ export const WebsocketAdapter = (): WebsocketAdapterType =>
169181
});
170182

171183
onDisconnect();
172-
currentWebsocket.close();
184+
currentWebsocket.close(1000);
173185
clearTimers();
174186

175187
return promise;
@@ -224,10 +236,10 @@ export const WebsocketAdapter = (): WebsocketAdapterType =>
224236
};
225237

226238
// Initialize
227-
228239
if (autoConnect) {
229240
connect();
230241
}
242+
231243
socket.appManager.events.onOnline(() => {
232244
if (autoConnect && !socket.adapter.connected) {
233245
connect();

packages/sockets/src/adapter-websockets/websocket-adapter.utils.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,31 +17,31 @@ export const getWebsocketAdapter = (url: string, adapterOptions: WebsocketAdapte
1717
super(socketUrl, protocols);
1818
}
1919

20-
addEventListener<K extends keyof WebSocketEventMap>(
20+
addEventListener = <K extends keyof WebSocketEventMap>(
2121
type: K,
2222
listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any,
2323
options?: boolean | (AddEventListenerOptions & { disableCleanup?: boolean }),
24-
): void {
24+
) => {
2525
super.addEventListener(type, listener, options);
2626
this.listeners.set(listener, { type, listener, options });
27-
}
27+
};
2828

29-
removeEventListener<K extends keyof WebSocketEventMap>(
29+
removeEventListener = <K extends keyof WebSocketEventMap>(
3030
type: K,
3131
listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any,
3232
options?: boolean | EventListenerOptions,
33-
): void {
33+
) => {
3434
super.removeEventListener(type, listener, options);
3535
this.listeners.delete(listener);
36-
}
36+
};
3737

38-
clearListeners() {
38+
clearListeners = () => {
3939
this.listeners.forEach(({ type, listener, options }) => {
4040
if (!options?.disableCleanup) {
4141
this.removeEventListener(type, listener, options);
4242
}
4343
});
44-
}
44+
};
4545
}
4646

4747
return new HyperFetchWebsocket(url, adapterOptions?.protocols);

0 commit comments

Comments
 (0)