text: 'use strict';
  
  /**
   * Module dependencies
   */
  
  // Public node modules.
  const path = require('path');
  const _ = require('lodash');
  const swaggerUi = require('swagger-ui-dist');
  const koaStatic = require('koa-static');
  
  // Variables.
  const initialRoutes = [];
  
  module.exports = strapi => {
    return {
      beforeInitialize() {
        strapi.config.middleware.load.before.push('documentation');
  
        initialRoutes.push(..._.cloneDeep(strapi.plugins.documentation.config.routes));
      },
  
      initialize() {
        // Find the plugins routes.
        strapi.plugins.documentation.config.routes = strapi.plugins.documentation.config.routes.map(
          (route, index) => {
            if (route.handler === 'Documentation.getInfos') {
              return route;
            }
  
            if (route.handler === 'Documentation.index' || route.path === '/login') {
              route.config.policies = initialRoutes[index].config.policies;
            }
  
            // Set prefix to empty to be able to customise it.
            if (_.get(strapi.plugins, ['documentation', 'config', 'x-strapi-config', 'path'])) {
              route.config.prefix = '';
              route.path = `/${strapi.plugins.documentation.config['x-strapi-config'].path}${route.path}`.replace(
                '//',
                '/'
              );
            }
  
            return route;
          }
        );
  
        strapi.router.get('/plugins/documentation/*', async (ctx, next) => {
          ctx.url = path.basename(ctx.url);
  
          return await koaStatic(swaggerUi.getAbsoluteFSPath(), {
            maxage: strapi.config.middleware.settings.public.maxAge,
            defer: true,
          })(ctx, next);
        });
      },
    };
  };
  