@@ -766,3 +766,38 @@ export function asyncFindIndexOnceFn<T>(
766766) : ( iterator : AsyncIteratorLike < T > ) => Promise < number | null > {
767767 return async iterator => asyncFindIndexOnce ( iterator , predicate ) ;
768768}
769+
770+ export async function asyncFindOnce < T , U extends T > (
771+ iterator : AsyncIteratorLike < T > ,
772+ predicate : ( element : T , index : number ) => element is U
773+ ) : Promise < U | null > ;
774+ export async function asyncFindOnce < T > (
775+ iterator : AsyncIteratorLike < T > ,
776+ predicate : ( element : T , index : number ) => boolean | Promise < boolean >
777+ ) : Promise < T | null > ;
778+ export async function asyncFindOnce < T > (
779+ iterator : AsyncIteratorLike < T > ,
780+ predicate : ( element : T , index : number ) => boolean | Promise < boolean >
781+ ) : Promise < T | null > {
782+ const it = asyncIterator ( iterator ) ;
783+ let element = await it . next ( ) ;
784+ for ( let i = 0 ; element . done !== true ; ++ i ) {
785+ if ( await predicate ( element . value , i ) ) {
786+ return element . value ;
787+ }
788+ element = await it . next ( ) ;
789+ }
790+ return null ;
791+ }
792+
793+ export function asyncFindOnceFn < T , U extends T > (
794+ predicate : ( element : T , index : number ) => element is U
795+ ) : ( iterator : AsyncIteratorLike < T > ) => Promise < U | null > ;
796+ export function asyncFindOnceFn < T > (
797+ predicate : ( element : T , index : number ) => boolean | Promise < boolean >
798+ ) : ( iterator : AsyncIteratorLike < T > ) => Promise < T | null > ;
799+ export function asyncFindOnceFn < T > (
800+ predicate : ( element : T , index : number ) => boolean | Promise < boolean >
801+ ) : ( iterator : AsyncIteratorLike < T > ) => Promise < T | null > {
802+ return async iterator => asyncFindOnce ( iterator , predicate ) ;
803+ }
0 commit comments