chore(lint): clear desktop warnings to zero

Convert polling loops to recursive helpers to avoid no-await-in-loop,
and switch the ws import to the named export so the WebSocket type is
referenced directly.
This commit is contained in:
Mohamed Boudra
2026-04-24 01:53:32 +07:00
parent f9a6287423
commit 935f286377
3 changed files with 22 additions and 9 deletions

View File

@@ -351,7 +351,7 @@ async function inspectFullscreenResizer(page) {
}
async function findAppPage(browser) {
for (let attempt = 0; attempt < 30; attempt += 1) {
function findMatchingPage() {
for (const context of browser.contexts()) {
for (const page of context.pages()) {
if (page.url().includes(APP_URL_FRAGMENT) && !page.url().startsWith("devtools://")) {
@@ -359,9 +359,18 @@ async function findAppPage(browser) {
}
}
}
await new Promise((resolve) => setTimeout(resolve, 500));
return null;
}
throw new Error(`Unable to find Electron app page for ${APP_URL_FRAGMENT}`);
async function poll(attempt) {
const page = findMatchingPage();
if (page) return page;
if (attempt >= 29) {
throw new Error(`Unable to find Electron app page for ${APP_URL_FRAGMENT}`);
}
await new Promise((resolve) => setTimeout(resolve, 500));
return poll(attempt + 1);
}
return poll(0);
}
function attachConsoleCollector(page, consoleMessages) {

View File

@@ -134,11 +134,13 @@ function sleep(ms: number): Promise<void> {
async function waitForPidExit(pid: number, timeoutMs: number): Promise<boolean> {
const deadline = Date.now() + timeoutMs;
while (Date.now() < deadline) {
async function poll(): Promise<boolean> {
if (!isProcessRunning(pid)) return true;
if (Date.now() >= deadline) return !isProcessRunning(pid);
await sleep(PID_POLL_INTERVAL_MS);
return poll();
}
return !isProcessRunning(pid);
return poll();
}
function tailFile(filePath: string, lines = 50): string {
@@ -262,7 +264,8 @@ function buildStartupFailureError(
}
async function pollForRunningDaemon(): Promise<DesktopDaemonStatus> {
for (let attempt = 0; attempt < STARTUP_POLL_MAX_ATTEMPTS; attempt++) {
async function poll(attempt: number): Promise<DesktopDaemonStatus> {
if (attempt >= STARTUP_POLL_MAX_ATTEMPTS) return resolveStatus();
const status = await resolveStatus();
if (attempt === 0 || attempt === STARTUP_POLL_MAX_ATTEMPTS - 1 || attempt % 10 === 9) {
logDesktopDaemonLifecycle("polling daemon status after detached start", {
@@ -275,8 +278,9 @@ async function pollForRunningDaemon(): Promise<DesktopDaemonStatus> {
}
if (status.status === "running" && status.serverId && status.listen) return status;
await sleep(STARTUP_POLL_INTERVAL_MS);
return poll(attempt + 1);
}
return resolveStatus();
return poll(0);
}
async function startDaemon(): Promise<DesktopDaemonStatus> {

View File

@@ -1,5 +1,5 @@
import { BrowserWindow } from "electron";
import WebSocket from "ws";
import { WebSocket, type RawData } from "ws";
interface TransportTarget {
transportType: "socket" | "pipe";
@@ -97,7 +97,7 @@ export function openLocalTransportSession(target: TransportTarget): Promise<stri
emitTransportEvent({ sessionId, kind: "open" });
});
ws.on("message", (data: WebSocket.RawData, isBinary: boolean) => {
ws.on("message", (data: RawData, isBinary: boolean) => {
if (isBinary || data instanceof Buffer) {
const buf = Buffer.isBuffer(data) ? data : Buffer.from(data as ArrayBuffer);
emitTransportEvent({