UNPKG

@dwp/govuk-casa

Version:

A framework for building GOVUK Collect-And-Submit-Applications

94 lines 4.05 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const express_1 = require("express"); const path_to_regexp_1 = require("path-to-regexp"); const strip_proxy_path_js_1 = __importDefault(require("../middleware/strip-proxy-path.js")); const serve_first_waypoint_js_1 = __importDefault(require("../middleware/serve-first-waypoint.js")); /** * @typedef {import("nunjucks").Environment} NunjucksEnvironment * @access private */ /** * @typedef {import("express").RequestHandler} ExpressRequestHandler * @access private */ /** * @typedef {import("../casa").Mounter} Mounter * @access private */ /** * @typedef {import("../casa").Plan} Plan * @access private */ /** * @typedef {import("../casa").MutableRouter} MutableRouter * @access private */ /** * Mounting function factory. * * @param {object} args Arguments * @param {NunjucksEnvironment} args.nunjucksEnv Pre-configured Nunjucks * environment * @param {string} [args.mountUrl] Mount URL * @param {Plan} [args.plan] CASA Plan * @param {MutableRouter} args.staticRouter Router for all static assets * @param {MutableRouter} args.ancillaryRouter Router for all ancillary routes * @param {MutableRouter} args.journeyRouter Router for all waypoints * @param {ExpressRequestHandler[]} args.preMiddleware Middleware * @param {ExpressRequestHandler[]} args.sessionMiddleware Middleware * @param {ExpressRequestHandler[]} args.i18nMiddleware Middleware * @param {ExpressRequestHandler[]} args.bodyParserMiddleware Middleware * @param {ExpressRequestHandler[]} args.dataMiddleware Middleware * @param {ExpressRequestHandler[]} args.postMiddleware Middleware * @returns {Mounter} Mount */ exports.default = ({ nunjucksEnv, mountUrl, plan, staticRouter, ancillaryRouter, journeyRouter, preMiddleware, sessionMiddleware, i18nMiddleware, bodyParserMiddleware, dataMiddleware, postMiddleware, }) => (app, { route = "/", serveFirstWaypoint = false } = {}) => { nunjucksEnv.express(app); app.set("view engine", "njk"); // If a `mountUrl` has been defined, then we're potentially in "proxy mode", // in which we strip the proxy path prefix from the incoming request URLs. if (mountUrl) { app.use((0, strip_proxy_path_js_1.default)({ mountUrl })); } // Attach a handler to redirect requests for `/` to the first waypoint in // the plan if (serveFirstWaypoint && plan) { const re = (0, path_to_regexp_1.pathToRegexp)(`${route}`.replace(/\/+/g, "/")); app.use(re.regexp, (0, serve_first_waypoint_js_1.default)({ plan })); } // Capture the mount path of this CASA app, before any parameterised path // segments exert influence over `req.baseUrl` in the `router` further below. // This can later be used by middleware that wants to use the // "unparameterised" version of the request's `baseUrl`, such as the static // router's middleware. app.use((req, res, next) => { req.unparameterisedBaseUrl = req.baseUrl; next(); }); // Serve static assets from the `app` rather than the `router`. The router // may contain parameterised path segments which would mean serving static // assets over a dynamic URL each time, thus causing lots of cache misses on // the browser. const sealedStaticRouter = staticRouter.seal(); app.use(preMiddleware); app.use(sealedStaticRouter); const router = (0, express_1.Router)({ // Required so that any parameters in the URL are propagated to middleware mergeParams: true, }); router.use(preMiddleware); router.use(sessionMiddleware); router.use(i18nMiddleware); router.use(bodyParserMiddleware); router.use(dataMiddleware); router.use(ancillaryRouter.seal()); router.use(journeyRouter.seal()); router.use(postMiddleware); app.use(route, router); return app; }; //# sourceMappingURL=mount.js.map