import type { PromiseOrValue } from '../jsutils/PromiseOrValue' ; /**
 * Given an AsyncIterable and a callback function, return an AsyncIterator
 * which produces values mapped via calling the callback function.
 */ export function mapAsyncIterator < T , U , R = undefined > ( iterable , callback ) { const iterator = iterable [ Symbol . asyncIterator ] ( ) ; async function mapResult ( result ) { if ( result . done ) { return result ; } try { return { value : await callback ( result . value ) , done : false } ; } catch ( error ) { if ( typeof iterator . return === 'function' ) { try { await iterator . return ( ) ; } catch ( _e ) { } } throw error ; } } return { async next ( ) { return mapResult ( await iterator . next ( ) ) ; } , async return ( ) { return typeof iterator . return === 'function' ? mapResult ( await iterator . return ( ) ) : { value : undefined as any , done : true } ; } , async throw ( error ? ) { if ( typeof iterator . throw === 'function' ) { return mapResult ( await iterator . throw ( error ) ) ; } throw error ; } , [ Symbol . asyncIterator ] ( ) { return this ; } , } ; }