@@ -27,6 +27,19 @@ function getMethod (logic, engine, methodName, above) {
27
27
if ( Array . isArray ( args ) ) {
28
28
const optimizedArgs = args . map ( l => optimize ( l , engine , above ) )
29
29
if ( optimizedArgs . every ( l => typeof l !== 'function' ) ) return ( data , abv ) => called ( optimizedArgs , data , abv || above , engine )
30
+
31
+ if ( optimizedArgs . length === 1 ) {
32
+ const first = optimizedArgs [ 0 ]
33
+ return ( data , abv ) => called ( [ first ( data , abv ) ] , data , abv || above , engine )
34
+ }
35
+
36
+ if ( optimizedArgs . length === 2 ) {
37
+ const [ first , second ] = optimizedArgs
38
+ if ( typeof first === 'function' && typeof second === 'function' ) return ( data , abv ) => called ( [ first ( data , abv ) , second ( data , abv ) ] , data , abv || above , engine )
39
+ if ( typeof first === 'function' ) return ( data , abv ) => called ( [ first ( data , abv ) , second ] , data , abv || above , engine )
40
+ return ( data , abv ) => called ( [ first , second ( data , abv ) ] , data , abv || above , engine )
41
+ }
42
+
30
43
return ( data , abv ) => {
31
44
const evaluatedArgs = optimizedArgs . map ( l => typeof l === 'function' ? l ( data , abv ) : l )
32
45
return called ( evaluatedArgs , data , abv || above , engine )
@@ -41,6 +54,7 @@ function getMethod (logic, engine, methodName, above) {
41
54
}
42
55
return ( data , abv ) => called ( optimizedArgs , data , abv || above , engine )
43
56
}
57
+
44
58
if ( typeof optimizedArgs === 'function' ) return ( data , abv ) => called ( coerceArray ( optimizedArgs ( data , abv ) ) , data , abv || above , engine )
45
59
return ( data , abv ) => called ( coerceArray ( optimizedArgs ) , data , abv || above , engine )
46
60
}
@@ -56,6 +70,7 @@ function getMethod (logic, engine, methodName, above) {
56
70
export function optimize ( logic , engine , above = [ ] ) {
57
71
if ( Array . isArray ( logic ) ) {
58
72
const arr = logic . map ( l => optimize ( l , engine , above ) )
73
+ if ( arr . every ( l => typeof l !== 'function' ) ) return arr
59
74
return ( data , abv ) => arr . map ( l => typeof l === 'function' ? l ( data , abv ) : l )
60
75
} ;
61
76
0 commit comments