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.
		
		
		
		
			
				
					53 lines
				
				1.5 KiB
			
		
		
			
		
	
	
					53 lines
				
				1.5 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								'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; }
							 | 
						||
| 
								 | 
							
											);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								};
							 |