|
|
- /*!
- * 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
- }
|