12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = mapAsyncIterator;
- var _iterall = require("iterall");
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
- /**
- * Given an AsyncIterable and a callback function, return an AsyncIterator
- * which produces values mapped via calling the callback function.
- */
- function mapAsyncIterator(iterable, callback, rejectCallback) {
- var iterator = (0, _iterall.getAsyncIterator)(iterable);
- var $return;
- var abruptClose; // $FlowFixMe(>=0.68.0)
- if (typeof iterator.return === 'function') {
- $return = iterator.return;
- abruptClose = function abruptClose(error) {
- var rethrow = function rethrow() {
- return Promise.reject(error);
- };
- return $return.call(iterator).then(rethrow, rethrow);
- };
- }
- function mapResult(result) {
- return result.done ? result : asyncMapValue(result.value, callback).then(iteratorResult, abruptClose);
- }
- var mapReject;
- if (rejectCallback) {
- // Capture rejectCallback to ensure it cannot be null.
- var reject = rejectCallback;
- mapReject = function mapReject(error) {
- return asyncMapValue(error, reject).then(iteratorResult, abruptClose);
- };
- }
- /* TODO: Flow doesn't support symbols as keys:
- https://github.com/facebook/flow/issues/3258 */
- return _defineProperty({
- next: function next() {
- return iterator.next().then(mapResult, mapReject);
- },
- return: function _return() {
- return $return ? $return.call(iterator).then(mapResult, mapReject) : Promise.resolve({
- value: undefined,
- done: true
- });
- },
- throw: function _throw(error) {
- // $FlowFixMe(>=0.68.0)
- if (typeof iterator.throw === 'function') {
- return iterator.throw(error).then(mapResult, mapReject);
- }
- return Promise.reject(error).catch(abruptClose);
- }
- }, _iterall.$$asyncIterator, function () {
- return this;
- });
- }
- function asyncMapValue(value, callback) {
- return new Promise(function (resolve) {
- return resolve(callback(value));
- });
- }
- function iteratorResult(value) {
- return {
- value: value,
- done: false
- };
- }
|