@@ -393,6 +393,33 @@ const defaultMethods = {
393
393
return res
394
394
} ,
395
395
keys : ( obj ) => typeof obj === 'object' ? Object . keys ( obj ) : [ ] ,
396
+ pipe : {
397
+ traverse : false ,
398
+ [ Sync ] : ( data , buildState ) => isSyncDeep ( data , buildState . engine , buildState ) ,
399
+ method : ( args , context , above , engine ) => {
400
+ if ( ! Array . isArray ( args ) ) throw new Error ( 'Data for pipe must be an array' )
401
+ let answer = ( engine . fallback || engine ) . run ( args [ 0 ] , context , { above : [ args , context , ...above ] } )
402
+ for ( let i = 1 ; i < args . length ; i ++ ) answer = ( engine . fallback || engine ) . run ( args [ i ] , answer , { above : [ args , context , ...above ] } )
403
+ return answer
404
+ } ,
405
+ asyncMethod : async ( args , context , above , engine ) => {
406
+ if ( ! Array . isArray ( args ) ) throw new Error ( 'Data for pipe must be an array' )
407
+ let answer = await engine . run ( args [ 0 ] , context , { above : [ args , context , ...above ] } )
408
+ for ( let i = 1 ; i < args . length ; i ++ ) answer = await engine . run ( args [ i ] , answer , { above : [ args , context , ...above ] } )
409
+ return answer
410
+ } ,
411
+ compile : ( args , buildState ) => {
412
+ let res = buildState . compile `${ args [ 0 ] } `
413
+ for ( let i = 1 ; i < args . length ; i ++ ) res = buildState . compile `${ build ( args [ i ] , { ...buildState , extraArguments : 'above' } ) } (${ res } , [null, context, ...above])`
414
+ return res
415
+ } ,
416
+ deterministic : ( data , buildState ) => {
417
+ if ( ! Array . isArray ( data ) ) return false
418
+ data = [ ...data ]
419
+ const first = data . shift ( )
420
+ return isDeterministic ( first , buildState . engine , buildState ) && isDeterministic ( data , buildState . engine , { ...buildState , insideIterator : true } )
421
+ }
422
+ } ,
396
423
eachKey : {
397
424
traverse : false ,
398
425
[ Sync ] : ( data , buildState ) => isSyncDeep ( Object . values ( data [ Object . keys ( data ) [ 0 ] ] ) , buildState . engine , buildState ) ,
@@ -506,7 +533,7 @@ function createArrayIterativeMethod (name, useTruthy = false) {
506
533
if ( async ) {
507
534
if ( ! isSyncDeep ( mapper , buildState . engine , buildState ) ) {
508
535
buildState . detectAsync = true
509
- return buildState . compile `await asyncIterators[${ name } ](${ selector } || [], (i, x) => ${ build ( mapper , mapState ) } (i, x, [{ item: null }, context, ...above]))`
536
+ return buildState . compile `await asyncIterators[${ name } ](${ selector } || [], async (i, x) => ${ build ( mapper , mapState ) } (i, x, [{ item: null }, context, ...above]))`
510
537
}
511
538
}
512
539
0 commit comments