source: frontend/node_modules/core-js-pure/modules/esnext.async-iterator.flat-map.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 11 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 3.1 KB
Line 
1'use strict';
2var $ = require('../internals/export');
3var call = require('../internals/function-call');
4var aCallable = require('../internals/a-callable');
5var anObject = require('../internals/an-object');
6var isObject = require('../internals/is-object');
7var getIteratorDirect = require('../internals/get-iterator-direct');
8var createAsyncIteratorProxy = require('../internals/async-iterator-create-proxy');
9var createIterResultObject = require('../internals/create-iter-result-object');
10var getAsyncIteratorFlattenable = require('../internals/get-async-iterator-flattenable');
11var closeAsyncIteration = require('../internals/async-iterator-close');
12
13var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise) {
14 var state = this;
15 var iterator = state.iterator;
16 var mapper = state.mapper;
17
18 return new Promise(function (resolve, reject) {
19 var doneAndReject = function (error) {
20 state.done = true;
21 reject(error);
22 };
23
24 var ifAbruptCloseAsyncIterator = function (error) {
25 closeAsyncIteration(iterator, doneAndReject, error, doneAndReject);
26 };
27
28 var outerLoop = function () {
29 try {
30 Promise.resolve(anObject(call(state.next, iterator))).then(function (step) {
31 try {
32 if (anObject(step).done) {
33 state.done = true;
34 resolve(createIterResultObject(undefined, true));
35 } else {
36 var value = step.value;
37 try {
38 var result = mapper(value, state.counter++);
39
40 var handler = function (mapped) {
41 try {
42 state.inner = getAsyncIteratorFlattenable(mapped);
43 innerLoop();
44 } catch (error4) { ifAbruptCloseAsyncIterator(error4); }
45 };
46
47 if (isObject(result)) Promise.resolve(result).then(handler, ifAbruptCloseAsyncIterator);
48 else handler(result);
49 } catch (error3) { ifAbruptCloseAsyncIterator(error3); }
50 }
51 } catch (error2) { doneAndReject(error2); }
52 }, doneAndReject);
53 } catch (error) { doneAndReject(error); }
54 };
55
56 var innerLoop = function () {
57 var inner = state.inner;
58 if (inner) {
59 try {
60 Promise.resolve(anObject(call(inner.next, inner.iterator))).then(function (result) {
61 try {
62 if (anObject(result).done) {
63 state.inner = null;
64 outerLoop();
65 } else resolve(createIterResultObject(result.value, false));
66 } catch (error1) { ifAbruptCloseAsyncIterator(error1); }
67 }, ifAbruptCloseAsyncIterator);
68 } catch (error) { ifAbruptCloseAsyncIterator(error); }
69 } else outerLoop();
70 };
71
72 innerLoop();
73 });
74});
75
76// `AsyncIterator.prototype.flatMap` method
77// https://github.com/tc39/proposal-async-iterator-helpers
78$({ target: 'AsyncIterator', proto: true, real: true, forced: true }, {
79 flatMap: function flatMap(mapper) {
80 anObject(this);
81 aCallable(mapper);
82 return new AsyncIteratorProxy(getIteratorDirect(this), {
83 mapper: mapper,
84 inner: null
85 });
86 }
87});
Note: See TracBrowser for help on using the repository browser.