Changing up how processors work to make it a bit easier to add to them.

This commit is contained in:
mike12345567 2021-01-21 17:56:00 +00:00
parent 1a87b2caaf
commit 5076c2f064
5 changed files with 38 additions and 31 deletions

View File

@ -1,6 +1,6 @@
const handlebars = require("handlebars")
const { registerAll } = require("./helpers/index")
const { preprocess } = require("./custom/preprocessor")
const processors = require("./processors")
const { cloneDeep } = require("lodash/fp")
const { removeNull } = require("./utilities")
@ -88,10 +88,10 @@ module.exports.processStringSync = (string, context) => {
throw "Cannot process non-string types."
}
let template
string = preprocess(string)
string = processors.preprocess(string)
// this does not throw an error when template can't be fulfilled, have to try correct beforehand
template = hbsInstance.compile(string)
return template(clonedContext)
return processors.postprocess(template(clonedContext))
}
/**

View File

@ -0,0 +1,26 @@
const { FIND_HBS_REGEX } = require("../utilities")
const preprocessor = require("./preprocessor")
const postprocessor = require("./postprocessor")
function process(string, processors) {
for (let processor of processors) {
// re-run search each time incase previous processor updated/removed a match
let regex = new RegExp(FIND_HBS_REGEX)
let matches = string.match(regex)
if (matches == null) {
continue
}
for (let match of matches) {
string = processor.process(string, match)
}
}
return string
}
module.exports.preprocess = string => {
return process(string, preprocessor.processors)
}
module.exports.postprocess = string => {
return process(string, postprocessor.processors)
}

View File

@ -1,6 +1,10 @@
const { FIND_HBS_REGEX } = require("../utilities")
class Postprocessor {
constructor(name, fn) {
this.name = name
this.fn = fn
}
}
module.exports.processors = []

View File

@ -3,7 +3,6 @@ const {
swapStrings,
isAlphaNumeric,
FIND_HBS_REGEX,
includesAny,
} = require("../utilities")
const PreprocessorNames = {
@ -25,7 +24,7 @@ class Preprocessor {
}
}
const PROCESSORS = [
module.exports.processors = [
new Preprocessor(PreprocessorNames.SWAP_TO_DOT, statement => {
let startBraceIdx = statement.indexOf("[")
let lastIdx = 0
@ -90,29 +89,3 @@ const PROCESSORS = [
return `{{ all ${insideStatement} }}`
}),
]
/**
* When running handlebars statements to execute on the context of the automation it possible user's may input handlebars
* in a few different forms, some of which are invalid but are logically valid. An example of this would be the handlebars
* statement "{{steps[0].revision}}" here it is obvious the user is attempting to access an array or object using array
* like operators. These are not supported by handlebars and therefore the statement will fail. This function pre-processes will
* the handlebars statement so it instead reads as "{{steps.0.revision}}" which is valid and will work. It may also be expanded
* to include any other handlebars statement pre-process that has been deemed necessary for the system.
*
* @param {string} string The string which *may* contain handlebars statements, it is OK if it does not contain any.
* @returns {string} The string that was input with processed up handlebars statements as required.
*/
module.exports.preprocess = string => {
for (let processor of PROCESSORS) {
// re-run search each time incase previous processor updated/removed a match
let regex = new RegExp(FIND_HBS_REGEX)
let matches = string.match(regex)
if (matches == null) {
continue
}
for (let match of matches) {
string = processor.process(string, match)
}
}
return string
}

View File

@ -21,3 +21,7 @@ module.exports.removeNull = obj => {
])
)
}
module.exports.findHbsStatements = string => {
}