| 'use strict'; | 
| var $ = require('../internals/export'); | 
| var call = require('../internals/function-call'); | 
| var aCallable = require('../internals/a-callable'); | 
| var anObject = require('../internals/an-object'); | 
| var getIteratorDirect = require('../internals/get-iterator-direct'); | 
| var getIteratorFlattenable = require('../internals/get-iterator-flattenable'); | 
| var createIteratorProxy = require('../internals/iterator-create-proxy'); | 
| var iteratorClose = require('../internals/iterator-close'); | 
| var IS_PURE = require('../internals/is-pure'); | 
|   | 
| var IteratorProxy = createIteratorProxy(function () { | 
|   var iterator = this.iterator; | 
|   var mapper = this.mapper; | 
|   var result, inner; | 
|   | 
|   while (true) { | 
|     if (inner = this.inner) try { | 
|       result = anObject(call(inner.next, inner.iterator)); | 
|       if (!result.done) return result.value; | 
|       this.inner = null; | 
|     } catch (error) { iteratorClose(iterator, 'throw', error); } | 
|   | 
|     result = anObject(call(this.next, iterator)); | 
|   | 
|     if (this.done = !!result.done) return; | 
|   | 
|     try { | 
|       this.inner = getIteratorFlattenable(mapper(result.value, this.counter++), false); | 
|     } catch (error) { iteratorClose(iterator, 'throw', error); } | 
|   } | 
| }); | 
|   | 
| // `Iterator.prototype.flatMap` method | 
| // https://tc39.es/ecma262/#sec-iterator.prototype.flatmap | 
| $({ target: 'Iterator', proto: true, real: true, forced: IS_PURE }, { | 
|   flatMap: function flatMap(mapper) { | 
|     anObject(this); | 
|     aCallable(mapper); | 
|     return new IteratorProxy(getIteratorDirect(this), { | 
|       mapper: mapper, | 
|       inner: null | 
|     }); | 
|   } | 
| }); |