'use strict'; 
 | 
var $ = require('../internals/export'); 
 | 
var aCallable = require('../internals/a-callable'); 
 | 
var aMap = require('../internals/a-map'); 
 | 
var MapHelpers = require('../internals/map-helpers'); 
 | 
  
 | 
var $TypeError = TypeError; 
 | 
var get = MapHelpers.get; 
 | 
var has = MapHelpers.has; 
 | 
var set = MapHelpers.set; 
 | 
  
 | 
// `Map.prototype.update` method 
 | 
// https://github.com/tc39/proposal-collection-methods 
 | 
$({ target: 'Map', proto: true, real: true, forced: true }, { 
 | 
  update: function update(key, callback /* , thunk */) { 
 | 
    var map = aMap(this); 
 | 
    var length = arguments.length; 
 | 
    aCallable(callback); 
 | 
    var isPresentInMap = has(map, key); 
 | 
    if (!isPresentInMap && length < 3) { 
 | 
      throw new $TypeError('Updating absent value'); 
 | 
    } 
 | 
    var value = isPresentInMap ? get(map, key) : aCallable(length > 2 ? arguments[2] : undefined)(key, map); 
 | 
    set(map, key, callback(value, key, map)); 
 | 
    return map; 
 | 
  } 
 | 
}); 
 |