|
|
|
@ -3,11 +3,12 @@ const { registerAll } = require("./helpers/index") |
|
|
|
const processors = require("./processors") |
|
|
|
const { atob, btoa } = require("./utilities") |
|
|
|
const manifest = require("../manifest.json") |
|
|
|
const { FIND_DOUBLE_HBS_REGEX } = require("./utilities") |
|
|
|
|
|
|
|
const hbsInstance = handlebars.create() |
|
|
|
registerAll(hbsInstance) |
|
|
|
const hbsInstanceNoHelpers = handlebars.create() |
|
|
|
const defaultOpts = { noHelpers: false } |
|
|
|
const defaultOpts = { noHelpers: false, noEscaping: false } |
|
|
|
|
|
|
|
/** |
|
|
|
* utility function to check if the object is valid |
|
|
|
@ -57,7 +58,7 @@ module.exports.processObject = async (object, context, opts) => { |
|
|
|
* then nothing will occur. |
|
|
|
* @param {string} string The template string which is the filled from the context object. |
|
|
|
* @param {object} context An object of information which will be used to enrich the string. |
|
|
|
* @param {object} opts optional - specify some options for processing. |
|
|
|
* @param {object|undefined} opts optional - specify some options for processing. |
|
|
|
* @returns {Promise<string>} The enriched string, all templates should have been replaced if they can be. |
|
|
|
*/ |
|
|
|
module.exports.processString = async (string, context, opts) => { |
|
|
|
@ -71,7 +72,7 @@ module.exports.processString = async (string, context, opts) => { |
|
|
|
* @param {object|array} object The input structure which is to be recursed, it is important to note that |
|
|
|
* if the structure contains any cycles then this will fail. |
|
|
|
* @param {object} context The context that handlebars should fill data from. |
|
|
|
* @param {object} opts optional - specify some options for processing. |
|
|
|
* @param {object|undefined} opts optional - specify some options for processing. |
|
|
|
* @returns {object|array} The structure input, as fully updated as possible. |
|
|
|
*/ |
|
|
|
module.exports.processObjectSync = (object, context, opts) => { |
|
|
|
@ -92,7 +93,7 @@ module.exports.processObjectSync = (object, context, opts) => { |
|
|
|
* then nothing will occur. This is a pure sync call and therefore does not have the full functionality of the async call. |
|
|
|
* @param {string} string The template string which is the filled from the context object. |
|
|
|
* @param {object} context An object of information which will be used to enrich the string. |
|
|
|
* @param {object} opts optional - specify some options for processing. |
|
|
|
* @param {object|undefined} opts optional - specify some options for processing. |
|
|
|
* @returns {string} The enriched string, all templates should have been replaced if they can be. |
|
|
|
*/ |
|
|
|
module.exports.processStringSync = (string, context, opts) => { |
|
|
|
@ -109,7 +110,9 @@ module.exports.processStringSync = (string, context, opts) => { |
|
|
|
string = processors.preprocess(string, shouldFinalise) |
|
|
|
// this does not throw an error when template can't be fulfilled, have to try correct beforehand
|
|
|
|
const instance = opts.noHelpers ? hbsInstanceNoHelpers : hbsInstance |
|
|
|
const template = instance.compile(string, { |
|
|
|
const templateString = |
|
|
|
opts && opts.noEscaping ? exports.disableEscaping(string) : string |
|
|
|
const template = instance.compile(templateString, { |
|
|
|
strict: false, |
|
|
|
}) |
|
|
|
const now = Math.floor(Date.now() / 1000) * 1000 |
|
|
|
@ -124,6 +127,24 @@ module.exports.processStringSync = (string, context, opts) => { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* By default with expressions like {{ name }} handlebars will escape various |
|
|
|
* characters, which can be problematic. To fix this we use the syntax {{{ name }}}, |
|
|
|
* this function will find any double braces and switch to triple. |
|
|
|
* @param string the string to have double HBS statements converted to triple. |
|
|
|
*/ |
|
|
|
module.exports.disableEscaping = string => { |
|
|
|
let regexp = new RegExp(FIND_DOUBLE_HBS_REGEX) |
|
|
|
const matches = string.match(regexp) |
|
|
|
if (matches == null) { |
|
|
|
return string |
|
|
|
} |
|
|
|
for (let match of matches) { |
|
|
|
string = string.replace(match, `{${match}}`) |
|
|
|
} |
|
|
|
return string |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Simple utility function which makes sure that a templating property has been wrapped in literal specifiers correctly. |
|
|
|
* @param {string} property The property which is to be wrapped. |
|
|
|
|