import { markdownToHtml } from '@defra/forms-model' import { type Environment } from 'nunjucks' import { engine } from '~/src/server/plugins/engine/helpers.js' import { plugin } from '~/src/server/plugins/engine/plugin.js' import { type PluginOptions } from '~/src/server/plugins/engine/types.js' import { checkComponentTemplates, checkErrorTemplates, evaluate, govukRebrand } from '~/src/server/plugins/nunjucks/environment.js' import * as filters from '~/src/server/plugins/nunjucks/filters/index.js' export { getPageHref } from '~/src/server/plugins/engine/helpers.js' export { context } from '~/src/server/plugins/nunjucks/context.js' export { getFirstJourneyPage, getFormContext, getFormModel, resolveFormModel } from '~/src/server/plugins/engine/beta/form-context.js' const globals = { checkComponentTemplates, checkErrorTemplates, evaluate, govukRebrand } export const VIEW_PATH = 'src/server/plugins/engine/views' export const PLUGIN_PATH = 'node_modules/@defra/forms-engine-plugin' export const STATE_NOT_YET_VALIDATED = '__stateNotYetValidated' export const CURRENT_PAGE_PATH_KEY = '__currentPagePath' export const MAGIC_LINK_GROUP_ID = '__magicLinkGroupId' export const prepareNunjucksEnvironment = function ( env: Environment, pluginOptions: PluginOptions ) { for (const [name, nunjucksFilter] of Object.entries(filters)) { env.addFilter(name, nunjucksFilter) } env.addFilter('markdown', (text: string, startingHeaderLevel?: number) => markdownToHtml(text, { baseUrl: pluginOptions.baseUrl, startingHeaderLevel }) ) for (const [name, nunjucksGlobal] of Object.entries(globals)) { env.addGlobal(name, nunjucksGlobal) } // Apply any additional filters to both the liquid and nunjucks engines if (pluginOptions.filters) { for (const [name, filter] of Object.entries(pluginOptions.filters)) { env.addFilter(name, filter) engine.registerFilter(name, filter) } } // Apply any additional globals to nunjucks engines if (pluginOptions.globals) { Object.entries(pluginOptions.globals).forEach(([name, fn]) => { env.addGlobal(name, fn) }) } } export default plugin