| 'use strict'; |
| var anObject = require('../internals/an-object'); |
| |
| // `Map.prototype.upsert` method |
| // https://github.com/thumbsupep/proposal-upsert |
| module.exports = function upsert(key, updateFn /* , insertFn */) { |
| var map = anObject(this); |
| var insertFn = arguments.length > 2 ? arguments[2] : undefined; |
| var value; |
| if (typeof updateFn != 'function' && typeof insertFn != 'function') { |
| throw TypeError('At least one callback required'); |
| } |
| if (map.has(key)) { |
| value = map.get(key); |
| if (typeof updateFn == 'function') { |
| value = updateFn(value); |
| map.set(key, value); |
| } |
| } else if (typeof insertFn == 'function') { |
| value = insertFn(); |
| map.set(key, value); |
| } return value; |
| }; |