diff options
Diffstat (limited to 'node_modules/core-js/modules/esnext.iterator.flat-map.js')
| -rw-r--r-- | node_modules/core-js/modules/esnext.iterator.flat-map.js | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/node_modules/core-js/modules/esnext.iterator.flat-map.js b/node_modules/core-js/modules/esnext.iterator.flat-map.js new file mode 100644 index 0000000..38ffb3f --- /dev/null +++ b/node_modules/core-js/modules/esnext.iterator.flat-map.js @@ -0,0 +1,52 @@ +'use strict'; +// https://github.com/tc39/proposal-iterator-helpers +var $ = require('../internals/export'); +var aFunction = require('../internals/a-function'); +var anObject = require('../internals/an-object'); +var getIteratorMethod = require('../internals/get-iterator-method'); +var createIteratorProxy = require('../internals/iterator-create-proxy'); +var iteratorClose = require('../internals/iterator-close'); + +var IteratorProxy = createIteratorProxy(function (arg) { + var iterator = this.iterator; + var mapper = this.mapper; + var result, mapped, iteratorMethod, innerIterator; + + while (true) { + try { + if (innerIterator = this.innerIterator) { + result = anObject(this.innerNext.call(innerIterator)); + if (!result.done) return result.value; + this.innerIterator = this.innerNext = null; + } + + result = anObject(this.next.call(iterator, arg)); + + if (this.done = !!result.done) return; + + mapped = mapper(result.value); + iteratorMethod = getIteratorMethod(mapped); + + if (iteratorMethod === undefined) { + throw TypeError('.flatMap callback should return an iterable object'); + } + + this.innerIterator = innerIterator = anObject(iteratorMethod.call(mapped)); + this.innerNext = aFunction(innerIterator.next); + } catch (error) { + iteratorClose(iterator); + throw error; + } + } +}); + +$({ target: 'Iterator', proto: true, real: true }, { + flatMap: function flatMap(mapper) { + return new IteratorProxy({ + iterator: anObject(this), + mapper: aFunction(mapper), + innerIterator: null, + innerNext: null + }); + } +}); |
