'use strict'; 
 | 
var bind = require('../internals/function-bind-context'); 
 | 
var uncurryThis = require('../internals/function-uncurry-this'); 
 | 
var IndexedObject = require('../internals/indexed-object'); 
 | 
var toObject = require('../internals/to-object'); 
 | 
var lengthOfArrayLike = require('../internals/length-of-array-like'); 
 | 
var MapHelpers = require('../internals/map-helpers'); 
 | 
  
 | 
var Map = MapHelpers.Map; 
 | 
var mapGet = MapHelpers.get; 
 | 
var mapHas = MapHelpers.has; 
 | 
var mapSet = MapHelpers.set; 
 | 
var push = uncurryThis([].push); 
 | 
  
 | 
// `Array.prototype.groupToMap` method 
 | 
// https://github.com/tc39/proposal-array-grouping 
 | 
module.exports = function groupToMap(callbackfn /* , thisArg */) { 
 | 
  var O = toObject(this); 
 | 
  var self = IndexedObject(O); 
 | 
  var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined); 
 | 
  var map = new Map(); 
 | 
  var length = lengthOfArrayLike(self); 
 | 
  var index = 0; 
 | 
  var key, value; 
 | 
  for (;length > index; index++) { 
 | 
    value = self[index]; 
 | 
    key = boundFunction(value, index, O); 
 | 
    if (mapHas(map, key)) push(mapGet(map, key), value); 
 | 
    else mapSet(map, key, [value]); 
 | 
  } return map; 
 | 
}; 
 |