| 'use strict'; | |
| 
 | |
| var isObject = require('is-extendable'); | |
| 
 | |
| module.exports = function extend(o/*, objects*/) { | |
|   if (!isObject(o)) { o = {}; } | |
| 
 | |
|   var len = arguments.length; | |
|   for (var i = 1; i < len; i++) { | |
|     var obj = arguments[i]; | |
| 
 | |
|     if (isObject(obj)) { | |
|       assign(o, obj); | |
|     } | |
|   } | |
|   return o; | |
| }; | |
| 
 | |
| function assign(a, b) { | |
|   for (var key in b) { | |
|     if (hasOwn(b, key)) { | |
|       a[key] = b[key]; | |
|     } | |
|   } | |
| } | |
| 
 | |
| /** | |
|  * Returns true if the given `key` is an own property of `obj`. | |
|  */ | |
| 
 | |
| function hasOwn(obj, key) { | |
|   return Object.prototype.hasOwnProperty.call(obj, key); | |
| }
 |