refactor(pwa): ♻️ remove outdated fetch strategies
This commit is contained in:
parent
3d38315e1b
commit
e0cc73b6a7
|
|
@ -5,34 +5,6 @@ export class FetchStrategy {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
static cacheFirst(
|
|
||||||
cache: Cache,
|
|
||||||
{ request, preloadResponse }: Pick<
|
|
||||||
FetchEvent,
|
|
||||||
'request' | 'preloadResponse'
|
|
||||||
>,
|
|
||||||
) {
|
|
||||||
const fetchRequest = async () => {
|
|
||||||
const response = await fetch(request)
|
|
||||||
if (response.ok) {
|
|
||||||
cache.put(request, response)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get navigator preload request
|
|
||||||
preloadResponse
|
|
||||||
.then((preload: Response | undefined) => {
|
|
||||||
if (preload?.ok) {
|
|
||||||
return cache.put(request, preload)
|
|
||||||
}
|
|
||||||
throw new Error()
|
|
||||||
})
|
|
||||||
// Else fetch request
|
|
||||||
.catch(fetchRequest)
|
|
||||||
|
|
||||||
return cache.match(request)
|
|
||||||
}
|
|
||||||
|
|
||||||
static fastestAndCacheRefresh(
|
static fastestAndCacheRefresh(
|
||||||
cache: Cache,
|
cache: Cache,
|
||||||
{ request, preloadResponse }: Pick<
|
{ request, preloadResponse }: Pick<
|
||||||
|
|
@ -66,38 +38,6 @@ export class FetchStrategy {
|
||||||
return Promise.race([cachedOrError, fetchedAndCached])
|
return Promise.race([cachedOrError, fetchedAndCached])
|
||||||
}
|
}
|
||||||
|
|
||||||
static async networkFirst(
|
|
||||||
cache: Cache,
|
|
||||||
{ request, preloadResponse }: Pick<
|
|
||||||
FetchEvent,
|
|
||||||
'request' | 'preloadResponse'
|
|
||||||
>,
|
|
||||||
{ fallbackUrl, timeout }: { fallbackUrl?: string; timeout?: number },
|
|
||||||
) {
|
|
||||||
const signal = timeout ? AbortSignal.timeout(timeout) : undefined
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Get navigator preload (see: https://developer.mozilla.org/en-US/docs/Web/API/Pick<FetchEvent, 'request' | 'preloadResponse'>/preloadResponse)
|
|
||||||
const preload = await getPreload(preloadResponse)
|
|
||||||
if (preload?.ok) {
|
|
||||||
cache.put(request, preload.clone())
|
|
||||||
return preload
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
try {
|
|
||||||
// Else fetch request
|
|
||||||
const response = await fetch(request, { signal })
|
|
||||||
if (response.ok) {
|
|
||||||
cache.put(request, response.clone())
|
|
||||||
return response
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
// Else return fallback or cached response
|
|
||||||
return cache.match(fallbackUrl ?? request)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static networkOnly(
|
static networkOnly(
|
||||||
{ request, preloadResponse }: Pick<
|
{ request, preloadResponse }: Pick<
|
||||||
FetchEvent,
|
FetchEvent,
|
||||||
|
|
@ -132,6 +72,7 @@ function getPreload(
|
||||||
preloadResponse: FetchEvent['preloadResponse'],
|
preloadResponse: FetchEvent['preloadResponse'],
|
||||||
ac?: { signal?: AbortSignal },
|
ac?: { signal?: AbortSignal },
|
||||||
): Promise<Response | undefined> {
|
): Promise<Response | undefined> {
|
||||||
|
// Get navigator preload (see: https://developer.mozilla.org/en-US/docs/Web/API/Pick<FetchEvent, 'request' | 'preloadResponse'>/preloadResponse)
|
||||||
const { promise, resolve, reject } = Promise.withResolvers<
|
const { promise, resolve, reject } = Promise.withResolvers<
|
||||||
Response | undefined
|
Response | undefined
|
||||||
>()
|
>()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue