UNPKG

@work-bee/fallback

Version:

save-data workbee service worker middleware

40 lines (38 loc) 915 B
/* 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