Correctly handle JS nullish values by removing forced fallback value of HBS helper

This commit is contained in:
Andrew Kingston 2021-10-12 15:40:01 +01:00
parent 4174b88057
commit d6a1e3d248
3 changed files with 11 additions and 9 deletions

View File

@ -1,14 +1,20 @@
class Helper {
constructor(name, fn) {
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) => {
const context = info?.data?.root
return this.fn(value, context || {}) || value
const context = info?.data?.root || {}
const result = this.fn(value, context)
if (result == null) {
return this.useValueFallback ? value : null
} else {
return result
}
})
}

View File

@ -19,7 +19,7 @@ const HELPERS = [
return new SafeString(JSON.stringify(value))
}),
// javascript helper
new Helper(HelperFunctionNames.JS, processJS),
new Helper(HelperFunctionNames.JS, processJS, false),
// this help is applied to all statements
new Helper(HelperFunctionNames.ALL, value => {
if (

View File

@ -36,11 +36,7 @@ module.exports.processJS = (handlebars, context) => {
// Create a sandbox with out context and run the JS
vm.createContext(sandboxContext)
const result = vm.runInNewContext(js, sandboxContext)
if (result == null || result === "") {
return " "
}
return result
return vm.runInNewContext(js, sandboxContext)
} catch (error) {
return "Error while executing JS"
}