@dwp/govuk-casa
Version:
A framework for building GOVUK Collect-And-Submit-Applications
54 lines • 2.38 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = nunjucksConfig;
const node_fs_1 = require("node:fs");
const node_path_1 = require("node:path");
const nunjucks_1 = require("nunjucks");
const dirname_cjs_1 = __importDefault(require("./dirname.cjs"));
const CasaTemplateLoader_js_1 = __importDefault(require("./CasaTemplateLoader.js"));
const nunjucks_filters_js_1 = require("./nunjucks-filters.js");
/**
* @typedef {object} NunjucksOptions
* @property {string[]} [views=[]] Template file directories (optional, default
* []). Default is `[]`
*/
/**
* Create a Nunjucks environment.
*
* @param {NunjucksOptions} options Nunjucks options
* @param {boolean} govukRebrand GovukRebrand flag
* @returns {Environment} Nunjucks Environment instance
* @access private
*/
function nunjucksConfig({ views = [], govukRebrand }) {
// Prepare a single Nunjucks environment for all responses to use. Note that
// we cannot prepare response-specific global functions/filters if we use a
// single environment, but the performance gains of doing so are significant.
const loader = new CasaTemplateLoader_js_1.default(views, {
watch: false,
noCache: false,
});
const env = new nunjucks_1.Environment(loader, {
autoescape: true,
throwOnUndefined: false,
trimBlocks: false,
lstripBlocks: false,
});
// Enhancement to expose loader functions
env.modifyBlock = loader.modifyBlock.bind(loader);
// Globals
// These can't be modified once set. But they can be overridden by res.locals.
env.addGlobal("casaVersion",
/* eslint-disable-next-line security/detect-non-literal-fs-filename */
JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.resolve)(dirname_cjs_1.default, "../../package.json"))).version);
env.addGlobal("govukRebrand", govukRebrand);
env.addGlobal("mergeObjects", nunjucks_filters_js_1.mergeObjects);
env.addGlobal("includes", nunjucks_filters_js_1.includes);
env.addGlobal("formatDateObject", nunjucks_filters_js_1.formatDateObject);
env.addGlobal("renderAsAttributes", nunjucks_filters_js_1.renderAsAttributes);
return env;
}
//# sourceMappingURL=nunjucks.js.map