UNPKG

1.86 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.mapAsyncIterator = void 0;
4/**
5 * Given an AsyncIterable and a callback function, return an AsyncIterator
6 * which produces values mapped via calling the callback function.
7 */
8function mapAsyncIterator(iterator, callback, rejectCallback) {
9 let $return;
10 let abruptClose;
11 if (typeof iterator.return === 'function') {
12 $return = iterator.return;
13 abruptClose = (error) => {
14 const rethrow = () => Promise.reject(error);
15 return $return.call(iterator).then(rethrow, rethrow);
16 };
17 }
18 function mapResult(result) {
19 return result.done ? result : asyncMapValue(result.value, callback).then(iteratorResult, abruptClose);
20 }
21 let mapReject;
22 if (rejectCallback) {
23 // Capture rejectCallback to ensure it cannot be null.
24 const reject = rejectCallback;
25 mapReject = (error) => asyncMapValue(error, reject).then(iteratorResult, abruptClose);
26 }
27 return {
28 next() {
29 return iterator.next().then(mapResult, mapReject);
30 },
31 return() {
32 return $return
33 ? $return.call(iterator).then(mapResult, mapReject)
34 : Promise.resolve({ value: undefined, done: true });
35 },
36 throw(error) {
37 if (typeof iterator.throw === 'function') {
38 return iterator.throw(error).then(mapResult, mapReject);
39 }
40 return Promise.reject(error).catch(abruptClose);
41 },
42 [Symbol.asyncIterator]() {
43 return this;
44 },
45 };
46}
47exports.mapAsyncIterator = mapAsyncIterator;
48function asyncMapValue(value, callback) {
49 return new Promise(resolve => resolve(callback(value)));
50}
51function iteratorResult(value) {
52 return { value, done: false };
53}