@@ -150,12 +150,13 @@ function evaluate(_node: jsep.Expression, context: object) {
150150 return node . value ;
151151
152152 case 'LogicalExpression' :
153- if ( node . operator === '||' ) {
154- return evaluate ( node . left , context ) || evaluate ( node . right , context ) ;
155- } else if ( node . operator === '&&' ) {
156- return evaluate ( node . left , context ) && evaluate ( node . right , context ) ;
153+ const leftValue = evaluate ( node . left , context ) ;
154+ if ( node . operator === '||' && leftValue ) {
155+ return leftValue ;
156+ } else if ( node . operator === '&&' && ! leftValue ) {
157+ return leftValue ;
157158 }
158- return binops [ node . operator ] ( evaluate ( node . left , context ) , evaluate ( node . right , context ) ) ;
159+ return binops [ node . operator ] ( leftValue , evaluate ( node . right , context ) ) ;
159160
160161 case 'MemberExpression' :
161162 return evaluateMember ( node , context ) [ 1 ] ;
@@ -222,15 +223,17 @@ async function evalAsync(_node: jsep.Expression, context: object) {
222223
223224 case 'LogicalExpression' : {
224225 if ( node . operator === '||' ) {
225- return (
226- ( await evalAsync ( node . left , context ) ) ||
227- ( await evalAsync ( node . right , context ) )
228- ) ;
226+ const left = await evalAsync ( node . left , context ) ;
227+ if ( left ) {
228+ return left ;
229+ }
230+ return await evalAsync ( node . right , context ) ;
229231 } else if ( node . operator === '&&' ) {
230- return (
231- ( await evalAsync ( node . left , context ) ) &&
232- ( await evalAsync ( node . right , context ) )
233- ) ;
232+ const left = await evalAsync ( node . left , context ) ;
233+ if ( ! left ) {
234+ return left ;
235+ }
236+ return await evalAsync ( node . right , context ) ;
234237 }
235238
236239 const [ left , right ] = await Promise . all ( [
0 commit comments