11type EvalResult = {
2- result : unknown ,
3- error : boolean
2+ result : unknown ;
3+ error : boolean ;
44} ;
55
66type EvalInClosureFn = ( expr : string ) => EvalResult ;
@@ -12,31 +12,33 @@ function makeEvaluateExpression(evalInClosure: EvalInClosureFn) {
1212}
1313
1414function evaluateExpression ( ) : ( expr : string ) => EvalResult {
15- return makeEvaluateExpression ( ( expr : string ) : EvalResult => {
16- let newExpr = expr ;
17- let result = null ;
18- let error = false ;
19- try {
15+ return makeEvaluateExpression (
16+ ( expr : string ) : EvalResult => {
17+ let newExpr = expr ;
18+ let result = null ;
19+ let error = false ;
2020 try {
21- const wrapped = `(${ expr } )` ;
22- // eslint-disable-next-line no-new-func
23- const validate = new Function ( wrapped ) ;
24- newExpr = wrapped ;
21+ try {
22+ const wrapped = `(${ expr } )` ;
23+ // eslint-disable-next-line no-new-func
24+ const validate = new Function ( wrapped ) ;
25+ newExpr = wrapped ;
26+ } catch ( e ) {
27+ // We shouldn't wrap the expression
28+ }
29+ // eslint-disable-next-line no-eval
30+ result = ( 0 , eval ) ( newExpr ) ;
2531 } catch ( e ) {
26- // We shouldn't wrap the expression
32+ if ( e instanceof Error ) {
33+ result = `${ e . name } : ${ e . message } ` ;
34+ } else {
35+ result = String ( e ) ;
36+ }
37+ error = true ;
2738 }
28- // eslint-disable-next-line no-eval
29- result = ( 0 , eval ) ( newExpr ) ;
30- } catch ( e ) {
31- if ( e instanceof Error ) {
32- result = `${ e . name } : ${ e . message } ` ;
33- } else {
34- result = String ( e ) ;
35- }
36- error = true ;
39+ return { result, error } ;
3740 }
38- return { result, error } ;
39- } ) ;
41+ ) ;
4042}
4143
4244export default evaluateExpression ( ) ;
0 commit comments