12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- 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; }
- import { SYMBOL_ASYNC_ITERATOR } from "../polyfills/symbols.mjs";
- /**
- * Given an AsyncIterable and a callback function, return an AsyncIterator
- * which produces values mapped via calling the callback function.
- */
- export default function mapAsyncIterator(iterable, callback, rejectCallback) {
- // $FlowFixMe[prop-missing]
- var iteratorMethod = iterable[SYMBOL_ASYNC_ITERATOR];
- var iterator = iteratorMethod.call(iterable);
- var $return;
- var abruptClose;
- 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) {
- if (typeof iterator.throw === 'function') {
- return iterator.throw(error).then(mapResult, mapReject);
- }
- return Promise.reject(error).catch(abruptClose);
- }
- }, SYMBOL_ASYNC_ITERATOR, function () {
- return this;
- });
- }
- function asyncMapValue(value, callback) {
- return new Promise(function (resolve) {
- return resolve(callback(value));
- });
- }
- function iteratorResult(value) {
- return {
- value: value,
- done: false
- };
- }
|