2
0

fix(webhook): 🐛 Properly escape backslash and quotes

This commit is contained in:
Baptiste Arnaud
2022-06-18 12:14:05 +02:00
parent 18c5ea5207
commit 20dbfe64c9
4 changed files with 17 additions and 6 deletions

View File

@ -7,9 +7,9 @@ export const stringContainsVariable = (str: string): boolean =>
export const parseVariables =
(
variables: Variable[],
options: { fieldToParse?: 'value' | 'id'; escapeLineBreaks?: boolean } = {
options: { fieldToParse?: 'value' | 'id'; escapeForJson?: boolean } = {
fieldToParse: 'value',
escapeLineBreaks: false,
escapeForJson: false,
}
) =>
(text: string | undefined): string => {
@ -23,12 +23,17 @@ export const parseVariables =
if (options.fieldToParse === 'id') return variable.id
const { value } = variable
if (isNotDefined(value)) return ''
if (options.escapeLineBreaks)
return value.toString().replace(/\n/g, '\\n')
if (options.escapeForJson) return jsonParse(value.toString())
return value.toString()
})
}
const jsonParse = (str: string) =>
str
.replace(/\n/g, `\\n`)
.replace(/"/g, `\\"`)
.replace(/\\[^n"]/g, `\\\\ `)
export const evaluateExpression = (variables: Variable[]) => (str: string) => {
const evaluating = parseVariables(variables, { fieldToParse: 'id' })(
str.includes('return ') ? str : `return ${str}`