const Helper = require("./Helper") const { SafeString } = require("handlebars") const HTML_SWAPS = { "<": "<", ">": ">", } const HelperFunctionBuiltin = [ "#if", "#unless", "#each", "#with", "lookup", "log", ] const HelperFunctionNames = { OBJECT: "object", ALL: "all", } const HELPERS = [ // external helpers new Helper(HelperFunctionNames.OBJECT, value => { return new SafeString(JSON.stringify(value)) }), // this help is applied to all statements new Helper(HelperFunctionNames.ALL, value => { // null/undefined values produce bad results if (value == null) { return "" } let text = new SafeString(unescape(value).replace(/&/g, "&")) if (text == null || typeof text !== "string") { return text } return text.replace(/[<>]/g, tag => { return HTML_SWAPS[tag] || tag }) }), ] module.exports.HelperFunctions = Object.values(HelperFunctionNames).concat( HelperFunctionBuiltin ) module.exports.registerAll = handlebars => { for (let helper of HELPERS) { helper.register(handlebars) } } module.exports.unregisterAll = handlebars => { for (let helper of HELPERS) { helper.unregister(handlebars) } }