240 | function applyInlineIf( |
241 | element: IRElement, |
242 | babelNode: t.Expression, |
243 | testExpression?: t.Expression, |
244 | falseValue: t.Expression = t.nullLiteral() |
245 | ): t.Expression { |
246 | if (!element.if) { |
247 | return babelNode; |
248 | } |
249 | |
250 | if (!testExpression) { |
251 | testExpression = bindExpression(element.if!, element).expression; |
252 | } |
253 | |
254 | let leftExpression: t.Expression; |
255 | const modifier = element.ifModifier!; |
256 | if (modifier === 'true') { |
257 | leftExpression = testExpression; |
258 | } else if (modifier === 'false') { |
259 | leftExpression = t.unaryExpression('!', testExpression); |
260 | } else if (modifier === 'strict-true') { |
261 | leftExpression = t.binaryExpression('===', testExpression, t.booleanLiteral(true)); |
262 | } else { |
263 | throw generateCompilerError(TemplateErrors.UNKNOWN_IF_MODIFIER, { |
264 | messageArgs: [modifier], |
265 | }); |
266 | } |
267 | |
268 | return t.conditionalExpression(leftExpression, babelNode, falseValue); |
269 | } |