From 8dbcea4fd7a38478bec5dbb87009d2b4a7ab6adf Mon Sep 17 00:00:00 2001 From: midzelis Date: Sat, 24 Jan 2026 01:36:43 +0000 Subject: [PATCH] review comments --- web/src/lib/utils/sw-messaging.ts | 11 ++++------- web/src/lib/utils/sw-messenger.ts | 19 +++++++------------ web/src/service-worker/messaging.ts | 24 ++---------------------- web/src/service-worker/request.ts | 1 + 4 files changed, 14 insertions(+), 41 deletions(-) diff --git a/web/src/lib/utils/sw-messaging.ts b/web/src/lib/utils/sw-messaging.ts index 789341d84a..3c32bf7de1 100644 --- a/web/src/lib/utils/sw-messaging.ts +++ b/web/src/lib/utils/sw-messaging.ts @@ -1,15 +1,12 @@ import { ServiceWorkerMessenger } from './sw-messenger'; -const messenger = new ServiceWorkerMessenger(); const hasServiceWorker = globalThis.isSecureContext && 'serviceWorker' in navigator; - -const isValidSwContext = (url: string | undefined | null): url is string => { - return hasServiceWorker && !!url; -}; +// eslint-disable-next-line compat/compat +const messenger = hasServiceWorker ? new ServiceWorkerMessenger(navigator.serviceWorker) : undefined; export function cancelImageUrl(url: string | undefined | null) { - if (!isValidSwContext(url)) { + if (!url || !messenger) { return; } - void messenger.send('cancel', { url }); + messenger.send('cancel', { url }); } diff --git a/web/src/lib/utils/sw-messenger.ts b/web/src/lib/utils/sw-messenger.ts index c9b2ce9eb2..b656f3fc2c 100644 --- a/web/src/lib/utils/sw-messenger.ts +++ b/web/src/lib/utils/sw-messenger.ts @@ -1,22 +1,17 @@ export class ServiceWorkerMessenger { - constructor() {} + readonly #serviceWorker: ServiceWorkerContainer; - #sendInternal(type: string, data: Record) { - if (!('serviceWorker' in navigator)) { - throw new Error('Service Worker not enabled in this environment '); - } - - // eslint-disable-next-line compat/compat - navigator.serviceWorker.controller?.postMessage({ - type, - ...data, - }); + constructor(serviceWorker: ServiceWorkerContainer) { + this.#serviceWorker = serviceWorker; } /** * Send a one-way message to the service worker. */ send(type: string, data: Record) { - return this.#sendInternal(type, data); + this.#serviceWorker.controller?.postMessage({ + type, + ...data, + }); } } diff --git a/web/src/service-worker/messaging.ts b/web/src/service-worker/messaging.ts index 2dd2d51f72..b60ff055a2 100644 --- a/web/src/service-worker/messaging.ts +++ b/web/src/service-worker/messaging.ts @@ -7,32 +7,12 @@ import { handleCancel } from './request'; const sw = globalThis as unknown as ServiceWorkerGlobalScope; -/** - * Send acknowledgment for a request - */ -function sendAck(client: Client, requestId: string) { - client.postMessage({ - type: 'ack', - requestId, - }); -} - -/** - * Handle 'cancel' request: cancel a pending request - */ -const handleCancelRequest = (client: Client, url: URL, requestId: string) => { - sendAck(client, requestId); - handleCancel(url); -}; - export const installMessageListener = () => { sw.addEventListener('message', (event) => { - if (!event.data?.requestId || !event.data?.type) { + if (!event.data?.type) { return; } - const requestId = event.data.requestId; - switch (event.data.type) { case 'cancel': { const url = event.data.url ? new URL(event.data.url, self.location.origin) : undefined; @@ -45,7 +25,7 @@ export const installMessageListener = () => { return; } - handleCancelRequest(client, url, requestId); + handleCancel(url); break; } } diff --git a/web/src/service-worker/request.ts b/web/src/service-worker/request.ts index 1060cd4b6c..5fdf7f82c1 100644 --- a/web/src/service-worker/request.ts +++ b/web/src/service-worker/request.ts @@ -29,6 +29,7 @@ export const handleFetch = (request: URL | Request): Promise => { const pendingRequest: PendingRequest = { controller: new AbortController(), promise: undefined as unknown as Promise, + cleanupTimeout: undefined, }; pendingRequests.set(requestKey, pendingRequest);