| /*! | 
|  * merge-descriptors | 
|  * Copyright(c) 2014 Jonathan Ong | 
|  * Copyright(c) 2015 Douglas Christopher Wilson | 
|  * MIT Licensed | 
|  */ | 
|   | 
| 'use strict' | 
|   | 
| /** | 
|  * Module exports. | 
|  * @public | 
|  */ | 
|   | 
| module.exports = merge | 
|   | 
| /** | 
|  * Module variables. | 
|  * @private | 
|  */ | 
|   | 
| var hasOwnProperty = Object.prototype.hasOwnProperty | 
|   | 
| /** | 
|  * Merge the property descriptors of `src` into `dest` | 
|  * | 
|  * @param {object} dest Object to add descriptors to | 
|  * @param {object} src Object to clone descriptors from | 
|  * @param {boolean} [redefine=true] Redefine `dest` properties with `src` properties | 
|  * @returns {object} Reference to dest | 
|  * @public | 
|  */ | 
|   | 
| function merge(dest, src, redefine) { | 
|   if (!dest) { | 
|     throw new TypeError('argument dest is required') | 
|   } | 
|   | 
|   if (!src) { | 
|     throw new TypeError('argument src is required') | 
|   } | 
|   | 
|   if (redefine === undefined) { | 
|     // Default to true | 
|     redefine = true | 
|   } | 
|   | 
|   Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName(name) { | 
|     if (!redefine && hasOwnProperty.call(dest, name)) { | 
|       // Skip desriptor | 
|       return | 
|     } | 
|   | 
|     // Copy descriptor | 
|     var descriptor = Object.getOwnPropertyDescriptor(src, name) | 
|     Object.defineProperty(dest, name, descriptor) | 
|   }) | 
|   | 
|   return dest | 
| } |