export default()

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>);