diff --git a/src/serviceworker/src/strategy.ts b/src/serviceworker/src/strategy.ts index 3500bc6..df622fb 100644 --- a/src/serviceworker/src/strategy.ts +++ b/src/serviceworker/src/strategy.ts @@ -54,6 +54,32 @@ export class Strategy { } } } + + networkOnly( + { request, preloadResponse }: Pick, + ac: AbortController = new AbortController() + ): Promise { + // Browser preload + const preload = getPreload(preloadResponse, ac) + .then(response => { + if (response === undefined) { + throw new Error(`no preload response for ${request.url}`) + } + // Cancel fetch event + ac.abort() + return response + }) + + // Client fetch + const fetched = fetch(request, { signal: ac.signal }) + .then(response => { + // Cancel preload event + ac.abort() + return response + }) + + return Promise.race([preload, fetched]) + } } function getPreload(