Spaces:
Configuration error
Configuration error
; | |
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 ThrowCompletion = require('./ThrowCompletion'); | |
var Type = require('./Type'); | |
// https://262.ecma-international.org/14.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, 'sync'); | |
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 = ThrowCompletion(new $TypeError('iterator next must return an Object, got ' + inspect(nextItem))); | |
return IteratorClose(iteratorRecord, error); | |
} | |
try { | |
var k = Get(nextItem, '0'); | |
var v = Get(nextItem, '1'); | |
Call(adder, target, [k, v]); | |
} catch (e) { | |
return IteratorClose(iteratorRecord, ThrowCompletion(e)); | |
} | |
} | |
}; | |