in fusion-plugin-service-worker/src/server.js [20:70]
export default ((__NODE__ &&
createPlugin({
deps: {
logger: LoggerToken,
templateFn: SWTemplateFunctionToken,
options: SWOptionsToken.optional,
},
middleware: ({
logger,
templateFn,
options: {
cacheBustingPatterns,
cacheableRoutePatterns,
cacheDuration,
} = {},
}) => {
return async (ctx, next) => {
if (__NODE__) {
if (ctx.method === 'GET' && ctx.url === '/sw.js') {
const chunkUrls = Array.from(ctx.chunkUrlMap).map(value =>
value[1].get('es5')
);
try {
ctx.type = 'text/javascript';
ctx.set('Cache-Control', 'max-age=0');
ctx.body = invokeTemplateFn(templateFn, {
// TODO(#24): also include images etc.
cacheableResourcePaths: chunkUrls,
// cannot precache from different domain
precachePaths: chunkUrls.filter(url =>
hasSameHostName(url, ctx.url)
),
cacheBustingPatternStrings: cacheBustingPatterns
? cacheBustingPatterns.map(regex => String(regex))
: [],
cacheableRoutePatternStrings: cacheableRoutePatterns
? cacheableRoutePatterns.map(regex => String(regex))
: [],
cacheDuration,
});
} catch (err) {
ctx.status = 500;
ctx.body = {error: err.message};
logger.error('Error in Service Worker endpoint:', err);
}
}
return next();
}
};
},
}): any): FusionPlugin<{}, void>);