diff --git a/packages/string-templates/src/index.js b/packages/string-templates/src/index.js index 480ed6825f..e7d9b9d7e7 100644 --- a/packages/string-templates/src/index.js +++ b/packages/string-templates/src/index.js @@ -2,7 +2,7 @@ const handlebars = require("handlebars") const { registerAll } = require("./helpers/index") const processors = require("./processors") const { cloneDeep } = require("lodash/fp") -const { removeNull, addConstants } = require("./utilities") +const { removeNull, addConstants, removeHandlebarsStatements } = require("./utilities") const manifest = require("../manifest.json") const hbsInstance = handlebars.create() @@ -86,18 +86,24 @@ module.exports.processStringSync = (string, context) => { if (!exports.isValid(string)) { return string } + // take a copy of input incase error + const input = string let clonedContext = removeNull(cloneDeep(context)) clonedContext = addConstants(clonedContext) // remove any null/undefined properties if (typeof string !== "string") { throw "Cannot process non-string types." } - string = processors.preprocess(string) - // this does not throw an error when template can't be fulfilled, have to try correct beforehand - const template = hbsInstance.compile(string, { - strict: false, - }) - return processors.postprocess(template(clonedContext)) + try { + string = processors.preprocess(string) + // this does not throw an error when template can't be fulfilled, have to try correct beforehand + const template = hbsInstance.compile(string, { + strict: false, + }) + return processors.postprocess(template(clonedContext)) + } catch (err) { + return removeHandlebarsStatements(input) + } } /** diff --git a/packages/string-templates/src/utilities.js b/packages/string-templates/src/utilities.js index da3aa6ee94..b33e8bfe1d 100644 --- a/packages/string-templates/src/utilities.js +++ b/packages/string-templates/src/utilities.js @@ -32,3 +32,16 @@ module.exports.addConstants = obj => { } return obj } + +module.exports.removeHandlebarsStatements = string => { + let regexp = new RegExp(exports.FIND_HBS_REGEX) + let matches = string.match(regexp) + if (matches == null) { + return string + } + for (let match of matches) { + const idx = string.indexOf(match) + string = exports.swapStrings(string, idx, match.length, "Invalid Binding") + } + return string +}