mirror of https://github.com/Budibase/budibase.git
3 changed files with 53 additions and 5 deletions
@ -0,0 +1,32 @@ |
|||||
|
import mustache from "mustache" |
||||
|
|
||||
|
// this is a much more liberal version of mustache's escape function
|
||||
|
// ...just ignoring < and > to prevent tags from user input
|
||||
|
// original version here https://github.com/janl/mustache.js/blob/4b7908f5c9fec469a11cfaed2f2bed23c84e1c5c/mustache.js#L78
|
||||
|
const entityMap = { |
||||
|
"<": "<", |
||||
|
">": ">", |
||||
|
} |
||||
|
mustache.escape = text => { |
||||
|
return text.replace(/[<>]/g, function fromEntityMap(s) { |
||||
|
return entityMap[s] || s |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// Regex to test inputs with to see if they are likely candidates for mustache
|
||||
|
const looksLikeMustache = /{{.*}}/ |
||||
|
|
||||
|
/** |
||||
|
* Enriches a given input with a row from the database. |
||||
|
*/ |
||||
|
export default (input, context) => { |
||||
|
// Only accept string inputs
|
||||
|
if (!input || typeof input !== "string") { |
||||
|
return input |
||||
|
} |
||||
|
// Do a fast regex check if this looks like a mustache string
|
||||
|
if (!looksLikeMustache.test(input)) { |
||||
|
return input |
||||
|
} |
||||
|
return mustache.render(input, context) |
||||
|
} |
||||
Loading…
Reference in new issue