Spaces:
Running
Running
; | |
Object.defineProperty(exports, '__esModule', { | |
value: true, | |
}); | |
exports.mapAsyncIterator = mapAsyncIterator; | |
/** | |
* Given an AsyncIterable and a callback function, return an AsyncIterator | |
* which produces values mapped via calling the callback function. | |
*/ | |
function mapAsyncIterator(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) { | |
/* c8 ignore start */ | |
// FIXME: add test case | |
if (typeof iterator.return === 'function') { | |
try { | |
await iterator.return(); | |
} catch (_e) { | |
/* ignore error */ | |
} | |
} | |
throw error; | |
/* c8 ignore stop */ | |
} | |
} | |
return { | |
async next() { | |
return mapResult(await iterator.next()); | |
}, | |
async return() { | |
// If iterator.return() does not exist, then type R must be undefined. | |
return typeof iterator.return === 'function' | |
? mapResult(await iterator.return()) | |
: { | |
value: undefined, | |
done: true, | |
}; | |
}, | |
async throw(error) { | |
if (typeof iterator.throw === 'function') { | |
return mapResult(await iterator.throw(error)); | |
} | |
throw error; | |
}, | |
[Symbol.asyncIterator]() { | |
return this; | |
}, | |
}; | |
} | |