import nunjucks from "nunjucks"; import config from "config"; import {Express, Router} from "express"; import ApplicationComponent from "../ApplicationComponent"; import Controller from "../Controller"; import {ServerError} from "../HttpError"; export default class NunjucksComponent extends ApplicationComponent { public async start(app: Express, router: Router): Promise { const env = nunjucks.configure('views', { autoescape: true, express: app, noCache: !config.get('view.cache'), throwOnUndefined: true, }) .addGlobal('route', (route: string, params: { [p: string]: string } | [] = [], absolute: boolean = false) => { const path = Controller.route(route, params, absolute); if (path === null) throw new ServerError(`Route ${route} not found.`); return path; }) .addGlobal('app_version', this.app!.getVersion()) .addGlobal('core_version', require('../package.json').version) .addFilter('hex', (v: number) => { return v.toString(16); }); app.set('view engine', 'njk'); router.use((req, res, next) => { req.env = env; res.locals.url = req.url; res.locals.params = () => req.params; res.locals.app = config.get('app'); next(); }); } public async stop(): Promise { } }