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

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

Fix frontend appearance

  • Property mode set to 100644
File size: 2.8 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 getIteratorDirect = require('../internals/get-iterator-direct');
7var getIteratorFlattenable = require('../internals/get-iterator-flattenable');
8var createIteratorProxy = require('../internals/iterator-create-proxy');
9var iteratorClose = require('../internals/iterator-close');
10var IS_PURE = require('../internals/is-pure');
11var iteratorHelperThrowsOnInvalidIterator = require('../internals/iterator-helper-throws-on-invalid-iterator');
12var iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');
13
14// Should not throw an error for an iterator without `return` method. Fixed in Safari 26.2
15// https://bugs.webkit.org/show_bug.cgi?id=297532
16function throwsOnIteratorWithoutReturn() {
17 try {
18 // eslint-disable-next-line es/no-map, es/no-iterator, es/no-iterator-prototype-flatmap -- required for testing
19 var it = Iterator.prototype.flatMap.call(new Map([[4, 5]]).entries(), function (v) { return v; });
20 it.next();
21 it['return']();
22 } catch (error) {
23 return true;
24 }
25}
26
27var FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE
28 && !iteratorHelperThrowsOnInvalidIterator('flatMap', function () { /* empty */ });
29var flatMapWithoutClosingOnEarlyError = !IS_PURE && !FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR
30 && iteratorHelperWithoutClosingOnEarlyError('flatMap', TypeError);
31
32var FORCED = IS_PURE || FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR || flatMapWithoutClosingOnEarlyError
33 || throwsOnIteratorWithoutReturn();
34
35var IteratorProxy = createIteratorProxy(function () {
36 var iterator = this.iterator;
37 var mapper = this.mapper;
38 var result, inner;
39
40 while (true) {
41 if (inner = this.inner) try {
42 result = anObject(call(inner.next, inner.iterator));
43 if (!result.done) return result.value;
44 this.inner = null;
45 } catch (error) { iteratorClose(iterator, 'throw', error); }
46
47 result = anObject(call(this.next, iterator));
48
49 if (this.done = !!result.done) return;
50
51 try {
52 this.inner = getIteratorFlattenable(mapper(result.value, this.counter++), false);
53 } catch (error) { iteratorClose(iterator, 'throw', error); }
54 }
55});
56
57// `Iterator.prototype.flatMap` method
58// https://tc39.es/ecma262/#sec-iterator.prototype.flatmap
59$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {
60 flatMap: function flatMap(mapper) {
61 anObject(this);
62 try {
63 aCallable(mapper);
64 } catch (error) {
65 iteratorClose(this, 'throw', error);
66 }
67
68 if (flatMapWithoutClosingOnEarlyError) return call(flatMapWithoutClosingOnEarlyError, this, mapper);
69
70 return new IteratorProxy(getIteratorDirect(this), {
71 mapper: mapper,
72 inner: null
73 });
74 }
75});
Note: See TracBrowser for help on using the repository browser.