@@ -12,16 +12,16 @@ import jsep from 'jsep';
12
12
* Copyright (c) 2013 Stephen Oney, http://jsep.from.so/
13
13
*/
14
14
15
- declare type Context = Record < string , unknown > ;
16
- declare type operand = any ;
17
- declare type unaryCallback = ( a : operand ) => operand ;
18
- declare type binaryCallback = ( a : operand , b : operand ) => operand ;
19
- declare type assignCallback = ( obj : Record < string , operand > , key : string , val : operand ) => operand ;
20
- declare type evaluatorCallback = ( node : AnyExpression , context : Context ) => unknown ;
15
+ export declare type Context = Record < string , unknown > ;
16
+ export declare type operand = any ;
17
+ export declare type unaryCallback = ( a : operand ) => operand ;
18
+ export declare type binaryCallback = ( a : operand , b : operand ) => operand ;
19
+ export declare type assignCallback = ( obj : Record < string , operand > , key : string , val : operand ) => operand ;
20
+ export declare type evaluatorCallback < T extends AnyExpression > = ( this : ExpressionEval , node : T , context ? : Context ) => unknown ;
21
21
22
- type AnyExpression = jsep . Expression ;
22
+ export type AnyExpression = jsep . Expression ;
23
23
24
- type JseEvalPlugin = Partial < jsep . IPlugin > & {
24
+ export type JseEvalPlugin = Partial < jsep . IPlugin > & {
25
25
initEval ?: ( this : typeof ExpressionEval , jseEval : typeof ExpressionEval ) => void ;
26
26
}
27
27
@@ -30,7 +30,7 @@ export default class ExpressionEval {
30
30
static parse = jsep ;
31
31
static evaluate = ExpressionEval . eval ;
32
32
33
- static evaluators : Record < string , evaluatorCallback > = {
33
+ static evaluators : Record < string , evaluatorCallback < AnyExpression > > = {
34
34
'ArrayExpression' : ExpressionEval . prototype . evalArrayExpression ,
35
35
'LogicalExpression' : ExpressionEval . prototype . evalBinaryExpression ,
36
36
'BinaryExpression' : ExpressionEval . prototype . evalBinaryExpression ,
@@ -157,7 +157,7 @@ export default class ExpressionEval {
157
157
}
158
158
159
159
// inject custom node evaluators (and override existing ones)
160
- static addEvaluator ( nodeType : string , evaluator : evaluatorCallback ) : void {
160
+ static addEvaluator < T extends AnyExpression > ( nodeType : string , evaluator : evaluatorCallback < T > ) : void {
161
161
ExpressionEval . evaluators [ nodeType ] = evaluator ;
162
162
}
163
163
@@ -197,8 +197,8 @@ export default class ExpressionEval {
197
197
}
198
198
199
199
200
- protected context ?: Context ;
201
- protected isAsync ?: boolean ;
200
+ context ?: Context ;
201
+ isAsync ?: boolean ;
202
202
203
203
constructor ( context ?: Context , isAsync ?: boolean ) {
204
204
this . context = context ;
@@ -211,7 +211,7 @@ export default class ExpressionEval {
211
211
if ( ! evaluator ) {
212
212
throw new Error ( `unknown node type: ${ JSON . stringify ( node , null , 2 ) } ` ) ;
213
213
}
214
- return this . evalSyncAsync ( evaluator . bind ( this ) ( node ) , ( v ) => {
214
+ return this . evalSyncAsync ( evaluator . bind ( this ) ( node , this . context ) , ( v ) => {
215
215
( node as any ) . _value = v ;
216
216
return cb ( v ) ;
217
217
} ) ;
@@ -233,7 +233,7 @@ export default class ExpressionEval {
233
233
* `promisesOrResults = expressions.map(v => this.eval(v))`
234
234
* could result in an array of results (sync) or promises (async)
235
235
*/
236
- private evalSyncAsync ( val : unknown , cb : ( unknown ) => void ) {
236
+ evalSyncAsync ( val : unknown , cb : ( unknown ) => unknown ) : Promise < unknown > | unknown {
237
237
if ( this . isAsync ) {
238
238
return Promise . resolve ( val ) . then ( cb ) ;
239
239
}
0 commit comments