@work-bee/fallback
Version:
save-data workbee service worker middleware
40 lines (38 loc) • 915 B
JavaScript
/* eslint-env: serviceworker */
import {
fetchInlineStrategy,
strategyCacheFirst,
newRequest,
isResponse
} from '@work-bee/core'
const fallbackMiddleware = ({
pathPattern,
path,
statusCodes,
fallbackStrategy
} = {}) => {
const after = async (request, response, event, config) => {
if (response?.ok) {
return response
}
const typeResponse = isResponse(response)
if (typeResponse && !statusCodes?.includes(response.status)) {
return response
}
config.strategy = fallbackStrategy ?? strategyCacheFirst
let url = path
if (pathPattern) {
url = request.url.replace(pathPattern, path)
}
if (typeResponse) {
url = url.replace('{status}', response.status)
}
return fetchInlineStrategy(
newRequest({ ...request, url }, request.headers),
event,
config
)
}
return { after }
}
export default fallbackMiddleware