fix: require parent template after when condition evaluated as truthy (#4330)

fixes #4291
This commit is contained in:
Haoqun Jiang
2019-07-22 20:58:06 +08:00
committed by GitHub
parent 6207dd97c3
commit a1c88edce7
+16 -7
View File
@@ -417,6 +417,22 @@ function renderFile (name, data, ejsOptions) {
const parsed = yaml.loadFront(template)
const content = parsed.__content
let finalTemplate = content.trim() + `\n`
if (parsed.when) {
finalTemplate = (
`<%_ if (${parsed.when}) { _%>` +
finalTemplate +
`<%_ } _%>`
)
// use ejs.render to test the conditional expression
// if evaluated to falsy vaule, return early to avoid extra cost for extend expression
const result = ejs.render(finalTemplate, data, ejsOptions)
if (!result) {
return
}
}
if (parsed.extend) {
const extendPath = path.isAbsolute(parsed.extend)
? parsed.extend
@@ -437,13 +453,6 @@ function renderFile (name, data, ejsOptions) {
finalTemplate = finalTemplate.replace(parsed.replace, content.trim())
}
}
if (parsed.when) {
finalTemplate = (
`<%_ if (${parsed.when}) { _%>` +
finalTemplate +
`<%_ } _%>`
)
}
}
return ejs.render(finalTemplate, data, ejsOptions)