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.
		
		
		
		
		
			
		
			
				
					
					
						
							52 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							52 lines
						
					
					
						
							1.5 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
var inspect = require('object-inspect'); | 
						|
 | 
						|
var GetIntrinsic = require('get-intrinsic'); | 
						|
 | 
						|
var $TypeError = GetIntrinsic('%TypeError%'); | 
						|
 | 
						|
var Call = require('./Call'); | 
						|
var Get = require('./Get'); | 
						|
var GetIterator = require('./GetIterator'); | 
						|
var IsCallable = require('./IsCallable'); | 
						|
var IteratorClose = require('./IteratorClose'); | 
						|
var IteratorStep = require('./IteratorStep'); | 
						|
var IteratorValue = require('./IteratorValue'); | 
						|
var Type = require('./Type'); | 
						|
 | 
						|
// https://262.ecma-international.org/10.0//#sec-add-entries-from-iterable | 
						|
 | 
						|
module.exports = function AddEntriesFromIterable(target, iterable, adder) { | 
						|
	if (!IsCallable(adder)) { | 
						|
		throw new $TypeError('Assertion failed: `adder` is not callable'); | 
						|
	} | 
						|
	if (iterable == null) { | 
						|
		throw new $TypeError('Assertion failed: `iterable` is present, and not nullish'); | 
						|
	} | 
						|
	var iteratorRecord = GetIterator(iterable); | 
						|
	while (true) { // eslint-disable-line no-constant-condition | 
						|
		var next = IteratorStep(iteratorRecord); | 
						|
		if (!next) { | 
						|
			return target; | 
						|
		} | 
						|
		var nextItem = IteratorValue(next); | 
						|
		if (Type(nextItem) !== 'Object') { | 
						|
			var error = new $TypeError('iterator next must return an Object, got ' + inspect(nextItem)); | 
						|
			return IteratorClose( | 
						|
				iteratorRecord, | 
						|
				function () { throw error; } // eslint-disable-line no-loop-func | 
						|
			); | 
						|
		} | 
						|
		try { | 
						|
			var k = Get(nextItem, '0'); | 
						|
			var v = Get(nextItem, '1'); | 
						|
			Call(adder, target, [k, v]); | 
						|
		} catch (e) { | 
						|
			return IteratorClose( | 
						|
				iteratorRecord, | 
						|
				function () { throw e; } | 
						|
			); | 
						|
		} | 
						|
	} | 
						|
};
 | 
						|
 |