| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | /*! * copy-descriptor <https://github.com/jonschlinkert/copy-descriptor> * * Copyright (c) 2015, Jon Schlinkert. * Licensed under the MIT License. */'use strict';/** * Copy a descriptor from one object to another. * * ```js * function App() { *   this.cache = {}; * } * App.prototype.set = function(key, val) { *   this.cache[key] = val; *   return this; * }; * Object.defineProperty(App.prototype, 'count', { *   get: function() { *     return Object.keys(this.cache).length; *   } * }); * * copy(App.prototype, 'count', 'len'); * * // create an instance * var app = new App(); * * app.set('a', true); * app.set('b', true); * app.set('c', true); * * console.log(app.count); * //=> 3 * console.log(app.len); * //=> 3 * ``` * @name copy * @param {Object} `receiver` The target object * @param {Object} `provider` The provider object * @param {String} `from` The key to copy on provider. * @param {String} `to` Optionally specify a new key name to use. * @return {Object} * @api public */module.exports = function copyDescriptor(receiver, provider, from, to) {  if (!isObject(provider) && typeof provider !== 'function') {    to = from;    from = provider;    provider = receiver;  }  if (!isObject(receiver) && typeof receiver !== 'function') {    throw new TypeError('expected the first argument to be an object');  }  if (!isObject(provider) && typeof provider !== 'function') {    throw new TypeError('expected provider to be an object');  }  if (typeof to !== 'string') {    to = from;  }  if (typeof from !== 'string') {    throw new TypeError('expected key to be a string');  }  if (!(from in provider)) {    throw new Error('property "' + from + '" does not exist');  }  var val = Object.getOwnPropertyDescriptor(provider, from);  if (val) Object.defineProperty(receiver, to, val);};function isObject(val) {  return {}.toString.call(val) === '[object Object]';}
 |