You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							45 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							45 lines
						
					
					
						
							1.5 KiB
						
					
					
				| '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://github.com/tc39/proposal-iterator-helpers | |
| $({ 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 | |
|     }); | |
|   } | |
| });
 |