@@ -150,12 +150,13 @@ function evaluate(_node: jsep.Expression, context: object) {
150
150
return node . value ;
151
151
152
152
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 ;
157
158
}
158
- return binops [ node . operator ] ( evaluate ( node . left , context ) , evaluate ( node . right , context ) ) ;
159
+ return binops [ node . operator ] ( leftValue , evaluate ( node . right , context ) ) ;
159
160
160
161
case 'MemberExpression' :
161
162
return evaluateMember ( node , context ) [ 1 ] ;
@@ -222,15 +223,17 @@ async function evalAsync(_node: jsep.Expression, context: object) {
222
223
223
224
case 'LogicalExpression' : {
224
225
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 ) ;
229
231
} 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 ) ;
234
237
}
235
238
236
239
const [ left , right ] = await Promise . all ( [
0 commit comments