class Helper { constructor(name, fn, useValueFallback = true) { this.name = name this.fn = fn this.useValueFallback = useValueFallback } register(handlebars) { // wrap the function so that no helper can cause handlebars to break handlebars.registerHelper(this.name, (value, info) => { let context = {} if (info && info.data && info.data.root) { context = info.data.root } const result = this.fn(value, context) if (result == null) { return this.useValueFallback ? value : null } else { return result } }) } unregister(handlebars) { handlebars.unregisterHelper(this.name) } } module.exports = Helper