@ -3,12 +3,12 @@ const { registerAll } = require("./helpers/index")
const processors = require ( "./processors" )
const { atob , btoa } = require ( "./utilities" )
const manifest = require ( "../manifest.json" )
const { FIND_HBS_REGEX } = require ( "./utilities" )
const { FIND_HBS_REGEX , 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
@ -58,7 +58,11 @@ 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 .
<< << << < HEAD
* @ param { object | null } opts optional - specify some options for processing .
=== === =
* @ param { object | undefined } opts optional - specify some options for processing .
>>> >>> > e12767fd8 ... Fix for # 4308 - triple brace conversion was not working correctly , wrote this into the string templates instead - also fixing an issue with the RBAC for Rest .
* @ returns { Promise < string > } The enriched string , all templates should have been replaced if they can be .
* /
module . exports . processString = async ( string , context , opts ) => {
@ -72,7 +76,11 @@ 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 .
<< << << < HEAD
* @ param { object | null } opts optional - specify some options for processing .
=== === =
* @ param { object | undefined } opts optional - specify some options for processing .
>>> >>> > e12767fd8 ... Fix for # 4308 - triple brace conversion was not working correctly , wrote this into the string templates instead - also fixing an issue with the RBAC for Rest .
* @ returns { object | array } The structure input , as fully updated as possible .
* /
module . exports . processObjectSync = ( object , context , opts ) => {
@ -93,7 +101,11 @@ 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 .
<< << << < HEAD
* @ param { object | null } opts optional - specify some options for processing .
=== === =
* @ param { object | undefined } opts optional - specify some options for processing .
>>> >>> > e12767fd8 ... Fix for # 4308 - triple brace conversion was not working correctly , wrote this into the string templates instead - also fixing an issue with the RBAC for Rest .
* @ returns { string } The enriched string , all templates should have been replaced if they can be .
* /
module . exports . processStringSync = ( string , context , opts ) => {
@ -110,7 +122,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
@ -125,6 +139,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 .