@@ -1101,3 +1101,41 @@ export function asyncScanOnceFn<T, U>(
11011101) : ( iterator : AsyncIteratorLike < T > ) => AsyncIterator < U > {
11021102 return iterator => asyncScanOnce ( iterator , f , initial ) ;
11031103}
1104+
1105+ export function asyncScan1Once < T > (
1106+ iterator : AsyncIteratorLike < T > ,
1107+ f : ( accumulator : T , element : T , index : number ) => T | Promise < T >
1108+ ) : AsyncIterator < T > {
1109+ const it = asyncIterator ( iterator ) ;
1110+ let i = 1 ;
1111+ const first = async ( ) : Promise < IteratorResult < T > > => {
1112+ const element = await it . next ( ) ;
1113+ if ( element . done === true ) {
1114+ next = after ;
1115+ return after ( ) ;
1116+ } else {
1117+ next = during ( element . value ) ;
1118+ return { value : element . value } ;
1119+ }
1120+ } ;
1121+ const during = ( accumulator : T ) => async ( ) : Promise < IteratorResult < T > > => {
1122+ const element = await it . next ( ) ;
1123+ if ( element . done === true ) {
1124+ next = after ;
1125+ return after ( ) ;
1126+ } else {
1127+ const value = await f ( accumulator , element . value , i ++ ) ;
1128+ next = during ( value ) ;
1129+ return { value} ;
1130+ }
1131+ } ;
1132+ const after = async ( ) : Promise < IteratorResult < T > > => ( { done : true , value : undefined } ) ;
1133+ let next = first ;
1134+ return { next : async ( ) => next ( ) } ;
1135+ }
1136+
1137+ export function asyncScan1OnceFn < T > (
1138+ f : ( accumulator : T , element : T , index : number ) => T | Promise < T >
1139+ ) : ( iterator : AsyncIteratorLike < T > ) => AsyncIterator < T > {
1140+ return iterator => asyncScan1Once ( iterator , f ) ;
1141+ }
0 commit comments