diff options
Diffstat (limited to 'node_modules/object-copy')
| -rw-r--r-- | node_modules/object-copy/LICENSE | 21 | ||||
| -rw-r--r-- | node_modules/object-copy/index.js | 174 | ||||
| -rw-r--r-- | node_modules/object-copy/package.json | 47 | 
3 files changed, 242 insertions, 0 deletions
diff --git a/node_modules/object-copy/LICENSE b/node_modules/object-copy/LICENSE new file mode 100644 index 000000000..e28e60323 --- /dev/null +++ b/node_modules/object-copy/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/object-copy/index.js b/node_modules/object-copy/index.js new file mode 100644 index 000000000..f9faa2235 --- /dev/null +++ b/node_modules/object-copy/index.js @@ -0,0 +1,174 @@ +'use strict'; + +var typeOf = require('kind-of'); +var copyDescriptor = require('copy-descriptor'); +var define = require('define-property'); + +/** + * Copy static properties, prototype properties, and descriptors from one object to another. + * + * ```js + * function App() {} + * var proto = App.prototype; + * App.prototype.set = function() {}; + * App.prototype.get = function() {}; + * + * var obj = {}; + * copy(obj, proto); + * ``` + * @param {Object} `receiver` + * @param {Object} `provider` + * @param {String|Array} `omit` One or more properties to omit + * @return {Object} + * @api public + */ + +function copy(receiver, provider, omit) { +  if (!isObject(receiver)) { +    throw new TypeError('expected receiving object to be an object.'); +  } +  if (!isObject(provider)) { +    throw new TypeError('expected providing object to be an object.'); +  } + +  var props = nativeKeys(provider); +  var keys = Object.keys(provider); +  var len = props.length; +  omit = arrayify(omit); + +  while (len--) { +    var key = props[len]; + +    if (has(keys, key)) { +      define(receiver, key, provider[key]); +    } else if (!(key in receiver) && !has(omit, key)) { +      copyDescriptor(receiver, provider, key); +    } +  } +}; + +/** + * Return true if the given value is an object or function + */ + +function isObject(val) { +  return typeOf(val) === 'object' || typeof val === 'function'; +} + +/** + * Returns true if an array has any of the given elements, or an + * object has any of the give keys. + * + * ```js + * has(['a', 'b', 'c'], 'c'); + * //=> true + * + * has(['a', 'b', 'c'], ['c', 'z']); + * //=> true + * + * has({a: 'b', c: 'd'}, ['c', 'z']); + * //=> true + * ``` + * @param {Object} `obj` + * @param {String|Array} `val` + * @return {Boolean} + */ + +function has(obj, val) { +  val = arrayify(val); +  var len = val.length; + +  if (isObject(obj)) { +    for (var key in obj) { +      if (val.indexOf(key) > -1) { +        return true; +      } +    } + +    var keys = nativeKeys(obj); +    return has(keys, val); +  } + +  if (Array.isArray(obj)) { +    var arr = obj; +    while (len--) { +      if (arr.indexOf(val[len]) > -1) { +        return true; +      } +    } +    return false; +  } + +  throw new TypeError('expected an array or object.'); +} + +/** + * Cast the given value to an array. + * + * ```js + * arrayify('foo'); + * //=> ['foo'] + * + * arrayify(['foo']); + * //=> ['foo'] + * ``` + * + * @param {String|Array} `val` + * @return {Array} + */ + +function arrayify(val) { +  return val ? (Array.isArray(val) ? val : [val]) : []; +} + +/** + * Returns true if a value has a `contructor` + * + * ```js + * hasConstructor({}); + * //=> true + * + * hasConstructor(Object.create(null)); + * //=> false + * ``` + * @param  {Object} `value` + * @return {Boolean} + */ + +function hasConstructor(val) { +  return isObject(val) && typeof val.constructor !== 'undefined'; +} + +/** + * Get the native `ownPropertyNames` from the constructor of the + * given `object`. An empty array is returned if the object does + * not have a constructor. + * + * ```js + * nativeKeys({a: 'b', b: 'c', c: 'd'}) + * //=> ['a', 'b', 'c'] + * + * nativeKeys(function(){}) + * //=> ['length', 'caller'] + * ``` + * + * @param  {Object} `obj` Object that has a `constructor`. + * @return {Array} Array of keys. + */ + +function nativeKeys(val) { +  if (!hasConstructor(val)) return []; +  return Object.getOwnPropertyNames(val); +} + +/** + * Expose `copy` + */ + +module.exports = copy; + +/** + * Expose `copy.has` for tests + */ + +module.exports.has = has; diff --git a/node_modules/object-copy/package.json b/node_modules/object-copy/package.json new file mode 100644 index 000000000..f02a96cde --- /dev/null +++ b/node_modules/object-copy/package.json @@ -0,0 +1,47 @@ +{ +  "name": "object-copy", +  "description": "Copy static properties, prototype properties, and descriptors from one object to another.", +  "version": "0.1.0", +  "homepage": "https://github.com/jonschlinkert/object-copy", +  "author": "Jon Schlinkert (https://github.com/jonschlinkert)", +  "repository": "jonschlinkert/object-copy", +  "bugs": { +    "url": "https://github.com/jonschlinkert/object-copy/issues" +  }, +  "license": "MIT", +  "files": [ +    "index.js" +  ], +  "main": "index.js", +  "engines": { +    "node": ">=0.10.0" +  }, +  "scripts": { +    "test": "mocha" +  }, +  "dependencies": { +    "copy-descriptor": "^0.1.0", +    "define-property": "^0.2.5", +    "kind-of": "^3.0.3" +  }, +  "devDependencies": { +    "gulp-format-md": "*", +    "mocha": "*" +  }, +  "keywords": [ +    "copy", +    "object" +  ], +  "verb": { +    "layout": "default", +    "plugins": [ +      "gulp-format-md" +    ], +    "related": { +      "list": [] +    }, +    "reflinks": [ +      "verb" +    ] +  } +}  | 
