source: frontend/node_modules/core-js/internals/async-iterator-create-proxy.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: 5.0 KB
Line 
1'use strict';
2var call = require('../internals/function-call');
3var perform = require('../internals/perform');
4var anObject = require('../internals/an-object');
5var create = require('../internals/object-create');
6var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
7var defineBuiltIns = require('../internals/define-built-ins');
8var wellKnownSymbol = require('../internals/well-known-symbol');
9var InternalStateModule = require('../internals/internal-state');
10var getBuiltIn = require('../internals/get-built-in');
11var getMethod = require('../internals/get-method');
12var AsyncIteratorPrototype = require('../internals/async-iterator-prototype');
13var createIterResultObject = require('../internals/create-iter-result-object');
14
15var Promise = getBuiltIn('Promise');
16
17var TO_STRING_TAG = wellKnownSymbol('toStringTag');
18var ASYNC_ITERATOR_HELPER = 'AsyncIteratorHelper';
19var WRAP_FOR_VALID_ASYNC_ITERATOR = 'WrapForValidAsyncIterator';
20var setInternalState = InternalStateModule.set;
21
22var createAsyncIteratorProxyPrototype = function (IS_ITERATOR) {
23 var IS_GENERATOR = !IS_ITERATOR;
24 var getInternalState = InternalStateModule.getterFor(IS_ITERATOR ? WRAP_FOR_VALID_ASYNC_ITERATOR : ASYNC_ITERATOR_HELPER);
25
26 var getStateOrEarlyExit = function (that) {
27 var stateCompletion = perform(function () {
28 return getInternalState(that);
29 });
30
31 var stateError = stateCompletion.error;
32 var state = stateCompletion.value;
33
34 if (stateError || (IS_GENERATOR && state.done)) {
35 return { exit: true, value: stateError ? Promise.reject(state) : Promise.resolve(createIterResultObject(undefined, true)) };
36 } return { exit: false, value: state };
37 };
38
39 return defineBuiltIns(create(AsyncIteratorPrototype), {
40 next: function next() {
41 var stateCompletion = getStateOrEarlyExit(this);
42 var state = stateCompletion.value;
43 if (stateCompletion.exit) return state;
44 var handlerCompletion = perform(function () {
45 return anObject(state.nextHandler(Promise));
46 });
47 var handlerError = handlerCompletion.error;
48 var value = handlerCompletion.value;
49 if (handlerError) state.done = true;
50 return handlerError ? Promise.reject(value) : Promise.resolve(value);
51 },
52 'return': function () {
53 var stateCompletion = getStateOrEarlyExit(this);
54 var state = stateCompletion.value;
55 if (stateCompletion.exit) return state;
56 state.done = true;
57 var iterator = state.iterator;
58 var inner = state.inner;
59 var returnMethod, result;
60 var closeOuterIterator = function () {
61 var completion = perform(function () {
62 return getMethod(iterator, 'return');
63 });
64 returnMethod = result = completion.value;
65 if (completion.error) return Promise.reject(result);
66 if (returnMethod === undefined) return Promise.resolve(createIterResultObject(undefined, true));
67 completion = perform(function () {
68 return call(returnMethod, iterator);
69 });
70 result = completion.value;
71 if (completion.error) return Promise.reject(result);
72 return IS_ITERATOR ? Promise.resolve(result) : Promise.resolve(result).then(function (resolved) {
73 anObject(resolved);
74 return createIterResultObject(undefined, true);
75 });
76 };
77
78 var closeAndReject = function (error) {
79 return closeOuterIterator().then(function () {
80 throw error;
81 }, function () {
82 throw error;
83 });
84 };
85
86 if (inner) {
87 var innerIterator = inner.iterator;
88 var innerReturn;
89 var completion = perform(function () {
90 innerReturn = getMethod(innerIterator, 'return');
91 if (innerReturn) return call(innerReturn, innerIterator);
92 });
93 if (completion.error) return closeAndReject(completion.value);
94 if (innerReturn) {
95 return Promise.resolve(completion.value).then(function (innerResult) {
96 try {
97 anObject(innerResult);
98 } catch (error) {
99 return closeAndReject(error);
100 }
101 return closeOuterIterator();
102 }, closeAndReject);
103 }
104 }
105
106 return closeOuterIterator();
107 }
108 });
109};
110
111var WrapForValidAsyncIteratorPrototype = createAsyncIteratorProxyPrototype(true);
112var AsyncIteratorHelperPrototype = createAsyncIteratorProxyPrototype(false);
113
114createNonEnumerableProperty(AsyncIteratorHelperPrototype, TO_STRING_TAG, 'Async Iterator Helper');
115
116module.exports = function (nextHandler, IS_ITERATOR) {
117 var AsyncIteratorProxy = function AsyncIterator(record, state) {
118 if (state) {
119 state.iterator = record.iterator;
120 state.next = record.next;
121 } else state = record;
122 state.type = IS_ITERATOR ? WRAP_FOR_VALID_ASYNC_ITERATOR : ASYNC_ITERATOR_HELPER;
123 state.nextHandler = nextHandler;
124 state.counter = 0;
125 state.done = false;
126 setInternalState(this, state);
127 };
128
129 AsyncIteratorProxy.prototype = IS_ITERATOR ? WrapForValidAsyncIteratorPrototype : AsyncIteratorHelperPrototype;
130
131 return AsyncIteratorProxy;
132};
Note: See TracBrowser for help on using the repository browser.