'use strict'; // https://tc39.github.io/proposal-setmap-offrom/ var bind = require('../internals/function-bind-context'); var anObject = require('../internals/an-object'); var toObject = require('../internals/to-object'); var iterate = require('../internals/iterate'); module.exports = function (C, adder, ENTRY) { return function from(source /* , mapFn, thisArg */) { var O = toObject(source); var length = arguments.length; var mapFn = length > 1 ? arguments[1] : undefined; var mapping = mapFn !== undefined; var boundFunction = mapping ? bind(mapFn, length > 2 ? arguments[2] : undefined) : undefined; var result = new C(); var n = 0; iterate(O, function (nextItem) { var entry = mapping ? boundFunction(nextItem, n++) : nextItem; if (ENTRY) adder(result, anObject(entry)[0], entry[1]); else adder(result, entry); }); return result; }; };