code: async function resolvePageContext(request) {
      const routeSettings = request && request.route && request.route.settings;
      const app = routeSettings && routeSettings.app;
  
      // initialize page context as a copy of the route context.
      const pageContext = clonedeep(app.context);
  
      // request.pre contains the response values for each prerequisite defined
      // for the route in processRoutes.js
      const preHandlerResults = Object.values(request.pre);
      preHandlerResults.reduce(merge, pageContext);
  
      // run each page adapter to get an array of promises.
      // note each adapter could perform side effects that mutate page context.
      const pageAdapters = app.adapters;
      const promises = pageAdapters.map(a => a(pageContext, request));
      const adapterResults = await Promise.all(promises);
  
      // merge the page adapter results into the page context.
      return adapterResults.reduce(merge, pageContext);
  }
docs: @async
  Builds a Windshield page context object for a request, based upon
  Windshield's context, prehandlers, and adapters that are configured in
  the route.
  
  Runs a series of Windshield adapters and merges the results to the Windshield context
  
  @param {Request} request
  
  @returns {Promise<module:processRoutes.Context>} A page context object