Fixing an issue with the new validity checking being too lenient.
This commit is contained in:
parent
32b0816ecb
commit
4f2fd656c5
|
@ -83,18 +83,25 @@ module.exports.processObjectSync = (object, context) => {
|
||||||
* @returns {string} The enriched string, all templates should have been replaced if they can be.
|
* @returns {string} The enriched string, all templates should have been replaced if they can be.
|
||||||
*/
|
*/
|
||||||
module.exports.processStringSync = (string, context) => {
|
module.exports.processStringSync = (string, context) => {
|
||||||
|
const input = cloneDeep(string)
|
||||||
let clonedContext = removeNull(cloneDeep(context))
|
let clonedContext = removeNull(cloneDeep(context))
|
||||||
clonedContext = addConstants(clonedContext)
|
clonedContext = addConstants(clonedContext)
|
||||||
// remove any null/undefined properties
|
// remove any null/undefined properties
|
||||||
if (typeof string !== "string") {
|
if (typeof string !== "string") {
|
||||||
throw "Cannot process non-string types."
|
throw "Cannot process non-string types."
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
string = processors.preprocess(string)
|
string = processors.preprocess(string)
|
||||||
// this does not throw an error when template can't be fulfilled, have to try correct beforehand
|
// this does not throw an error when template can't be fulfilled, have to try correct beforehand
|
||||||
const template = hbsInstance.compile(string, {
|
const template = hbsInstance.compile(string, {
|
||||||
strict: false,
|
strict: false,
|
||||||
})
|
})
|
||||||
return processors.postprocess(template(clonedContext))
|
return processors.postprocess(template(clonedContext))
|
||||||
|
} catch (err) {
|
||||||
|
// suggested that we should always return input if an error occurs, incase string wasn't supposed to
|
||||||
|
// contain any handlebars statements
|
||||||
|
return input
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -112,19 +119,27 @@ module.exports.makePropSafe = property => {
|
||||||
* @returns {boolean} Whether or not the input string is valid.
|
* @returns {boolean} Whether or not the input string is valid.
|
||||||
*/
|
*/
|
||||||
module.exports.isValid = string => {
|
module.exports.isValid = string => {
|
||||||
const specialCases = ["string", "number", "object", "array"]
|
const validCases = ["string", "number", "object", "array"]
|
||||||
|
// this is a portion of a specific string always output by handlebars in the case of a syntax error
|
||||||
|
const invalidCases = [`expecting 'id', 'string', 'number'`]
|
||||||
// don't really need a real context to check if its valid
|
// don't really need a real context to check if its valid
|
||||||
const context = {}
|
const context = {}
|
||||||
try {
|
try {
|
||||||
hbsInstance.compile(processors.preprocess(string, false))(context)
|
hbsInstance.compile(processors.preprocess(string, false))(context)
|
||||||
return true
|
return true
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
const msg = err ? err.message : ""
|
const msg = err && err.message ? err.message : err
|
||||||
const foundCase = specialCases.find(spCase =>
|
if (!msg) {
|
||||||
msg.toLowerCase().includes(spCase)
|
return false
|
||||||
|
}
|
||||||
|
const invalidCase = invalidCases.some(invalidCase =>
|
||||||
|
msg.toLowerCase().includes(invalidCase)
|
||||||
|
)
|
||||||
|
const validCase = validCases.some(validCase =>
|
||||||
|
msg.toLowerCase().includes(validCase)
|
||||||
)
|
)
|
||||||
// special case for maths functions - don't have inputs yet
|
// special case for maths functions - don't have inputs yet
|
||||||
return !!foundCase
|
return validCase && !invalidCase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -316,4 +316,15 @@ describe("Cover a few complex use cases", () => {
|
||||||
const validity = isValid("{{ subtract [c390c23a7f1b6441c98d2fe2a51248ef3].[total profit] [c390c23a7f1b6441c98d2fe2a51248ef3].[total revenue] }}")
|
const validity = isValid("{{ subtract [c390c23a7f1b6441c98d2fe2a51248ef3].[total profit] [c390c23a7f1b6441c98d2fe2a51248ef3].[total revenue] }}")
|
||||||
expect(validity).toBe(true)
|
expect(validity).toBe(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("should confirm an invalid string", () => {
|
||||||
|
const validity = isValid("{{ awdd () ")
|
||||||
|
expect(validity).toBe(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("input a garbage string, expect it to be returned", async () => {
|
||||||
|
const input = `{{{{{{ } {{ ]] ] ] }}} {{ ] {{ { } { dsa { dddddd }}}}}}} }DDD`
|
||||||
|
const output = await processString(input, {})
|
||||||
|
expect(output).toBe(input)
|
||||||
|
})
|
||||||
})
|
})
|
Loading…
Reference in New Issue