pax_global_header00006660000000000000000000000064127263330450014517gustar00rootroot0000000000000052 comment=de88234d5eed3ab05ddc89a257bf2a9fdd348e58 copy-descriptor-de88234d5eed3ab05ddc89a257bf2a9fdd348e58/000077500000000000000000000000001272633304500221705ustar00rootroot00000000000000copy-descriptor-de88234d5eed3ab05ddc89a257bf2a9fdd348e58/.editorconfig000066400000000000000000000006121272633304500246440ustar00rootroot00000000000000# http://editorconfig.org root = true [*] indent_style = space end_of_line = lf charset = utf-8 indent_size = 2 trim_trailing_whitespace = true insert_final_newline = true [*.md] trim_trailing_whitespace = false insert_final_newline = false [test/**] trim_trailing_whitespace = false insert_final_newline = false [templates/**] trim_trailing_whitespace = false insert_final_newline = false copy-descriptor-de88234d5eed3ab05ddc89a257bf2a9fdd348e58/.eslintrc.json000066400000000000000000000071251272633304500247710ustar00rootroot00000000000000{ "ecmaFeatures": { "modules": true, "experimentalObjectRestSpread": true }, "env": { "browser": false, "es6": true, "node": true, "mocha": true }, "globals": { "document": false, "navigator": false, "window": false }, "rules": { "accessor-pairs": 2, "arrow-spacing": [2, { "before": true, "after": true }], "block-spacing": [2, "always"], "brace-style": [2, "1tbs", { "allowSingleLine": true }], "comma-dangle": [2, "never"], "comma-spacing": [2, { "before": false, "after": true }], "comma-style": [2, "last"], "constructor-super": 2, "curly": [2, "multi-line"], "dot-location": [2, "property"], "eol-last": 2, "eqeqeq": [2, "allow-null"], "generator-star-spacing": [2, { "before": true, "after": true }], "handle-callback-err": [2, "^(err|error)$" ], "indent": [2, 2, { "SwitchCase": 1 }], "key-spacing": [2, { "beforeColon": false, "afterColon": true }], "keyword-spacing": [2, { "before": true, "after": true }], "new-cap": [2, { "newIsCap": true, "capIsNew": false }], "new-parens": 2, "no-array-constructor": 2, "no-caller": 2, "no-class-assign": 2, "no-cond-assign": 2, "no-const-assign": 2, "no-control-regex": 2, "no-debugger": 2, "no-delete-var": 2, "no-dupe-args": 2, "no-dupe-class-members": 2, "no-dupe-keys": 2, "no-duplicate-case": 2, "no-empty-character-class": 2, "no-eval": 2, "no-ex-assign": 2, "no-extend-native": 2, "no-extra-bind": 2, "no-extra-boolean-cast": 2, "no-extra-parens": [2, "functions"], "no-fallthrough": 2, "no-floating-decimal": 2, "no-func-assign": 2, "no-implied-eval": 2, "no-inner-declarations": [2, "functions"], "no-invalid-regexp": 2, "no-irregular-whitespace": 2, "no-iterator": 2, "no-label-var": 2, "no-labels": 2, "no-lone-blocks": 2, "no-mixed-spaces-and-tabs": 2, "no-multi-spaces": 2, "no-multi-str": 2, "no-multiple-empty-lines": [2, { "max": 1 }], "no-native-reassign": 0, "no-negated-in-lhs": 2, "no-new": 2, "no-new-func": 2, "no-new-object": 2, "no-new-require": 2, "no-new-wrappers": 2, "no-obj-calls": 2, "no-octal": 2, "no-octal-escape": 2, "no-proto": 0, "no-redeclare": 2, "no-regex-spaces": 2, "no-return-assign": 2, "no-self-compare": 2, "no-sequences": 2, "no-shadow-restricted-names": 2, "no-spaced-func": 2, "no-sparse-arrays": 2, "no-this-before-super": 2, "no-throw-literal": 2, "no-trailing-spaces": 0, "no-undef": 2, "no-undef-init": 2, "no-unexpected-multiline": 2, "no-unneeded-ternary": [2, { "defaultAssignment": false }], "no-unreachable": 2, "no-unused-vars": [2, { "vars": "all", "args": "none" }], "no-useless-call": 0, "no-with": 2, "one-var": [0, { "initialized": "never" }], "operator-linebreak": [0, "after", { "overrides": { "?": "before", ":": "before" } }], "padded-blocks": [0, "never"], "quotes": [2, "single", "avoid-escape"], "radix": 2, "semi": [2, "always"], "semi-spacing": [2, { "before": false, "after": true }], "space-before-blocks": [2, "always"], "space-before-function-paren": [2, "never"], "space-in-parens": [2, "never"], "space-infix-ops": 2, "space-unary-ops": [2, { "words": true, "nonwords": false }], "spaced-comment": [0, "always", { "markers": ["global", "globals", "eslint", "eslint-disable", "*package", "!", ","] }], "use-isnan": 2, "valid-typeof": 2, "wrap-iife": [2, "any"], "yoda": [2, "never"] } } copy-descriptor-de88234d5eed3ab05ddc89a257bf2a9fdd348e58/.gitattributes000066400000000000000000000002001272633304500250530ustar00rootroot00000000000000# Enforce Unix newlines * text eol=lf # binaries *.ai binary *.psd binary *.jpg binary *.gif binary *.png binary *.jpeg binary copy-descriptor-de88234d5eed3ab05ddc89a257bf2a9fdd348e58/.gitignore000066400000000000000000000002211272633304500241530ustar00rootroot00000000000000*.DS_Store *.sublime-* _gh_pages bower_components node_modules npm-debug.log actual test/actual temp tmp TODO.md vendor .idea benchmark coverage copy-descriptor-de88234d5eed3ab05ddc89a257bf2a9fdd348e58/.travis.yml000066400000000000000000000002261272633304500243010ustar00rootroot00000000000000sudo: false language: node_js node_js: - "stable" - "4" - "0.12" - "0.10" matrix: fast_finish: true allow_failures: - node_js: "0.10" copy-descriptor-de88234d5eed3ab05ddc89a257bf2a9fdd348e58/.verb.md000066400000000000000000000001321272633304500235220ustar00rootroot00000000000000## Usage ```js var copy = require('{%= name %}'); ``` ## API {%= apidocs("index.js") %} copy-descriptor-de88234d5eed3ab05ddc89a257bf2a9fdd348e58/LICENSE000066400000000000000000000020771272633304500232030ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2015-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. copy-descriptor-de88234d5eed3ab05ddc89a257bf2a9fdd348e58/examples/000077500000000000000000000000001272633304500240065ustar00rootroot00000000000000copy-descriptor-de88234d5eed3ab05ddc89a257bf2a9fdd348e58/examples/proto.js000066400000000000000000000007221272633304500255100ustar00rootroot00000000000000'use strict'; var copy = require('..'); 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'); 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 copy-descriptor-de88234d5eed3ab05ddc89a257bf2a9fdd348e58/index.js000066400000000000000000000036341272633304500236430ustar00rootroot00000000000000/*! * 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]'; } copy-descriptor-de88234d5eed3ab05ddc89a257bf2a9fdd348e58/package.json000066400000000000000000000021311272633304500244530ustar00rootroot00000000000000{ "name": "copy-descriptor", "description": "Copy a descriptor from object A to object B", "version": "0.1.1", "homepage": "https://github.com/jonschlinkert/copy-descriptor", "author": "Jon Schlinkert (https://github.com/jonschlinkert)", "repository": "jonschlinkert/copy-descriptor", "bugs": { "url": "https://github.com/jonschlinkert/copy-descriptor/issues" }, "license": "MIT", "files": [ "index.js" ], "main": "index.js", "engines": { "node": ">=0.10.0" }, "scripts": { "test": "mocha" }, "devDependencies": { "gulp-format-md": "^0.1.9", "mocha": "^2.5.3" }, "keywords": [ "copy", "descriptor" ], "verb": { "toc": false, "layout": "default", "tasks": [ "readme" ], "plugins": [ "gulp-format-md" ], "related": { "list": [ "is-accessor-descriptor", "is-data-descriptor", "is-descriptor", "is-plain-object", "isobject" ] }, "lint": { "reflinks": true }, "reflinks": [ "verb-readme-generator", "verb" ] } } copy-descriptor-de88234d5eed3ab05ddc89a257bf2a9fdd348e58/readme.md000066400000000000000000000103731272633304500237530ustar00rootroot00000000000000# copy-descriptor [![NPM version](https://img.shields.io/npm/v/copy-descriptor.svg?style=flat)](https://www.npmjs.com/package/copy-descriptor) [![NPM downloads](https://img.shields.io/npm/dm/copy-descriptor.svg?style=flat)](https://npmjs.org/package/copy-descriptor) [![Build Status](https://img.shields.io/travis/jonschlinkert/copy-descriptor.svg?style=flat)](https://travis-ci.org/jonschlinkert/copy-descriptor) Copy a descriptor from object A to object B ## Install Install with [npm](https://www.npmjs.com/): ```sh $ npm install copy-descriptor --save ``` ## Usage ```js var copy = require('copy-descriptor'); ``` ## API ### [copy](index.js#L50) Copy a descriptor from one object to another. **Params** * `receiver` **{Object}**: The target object * `provider` **{Object}**: The provider object * `from` **{String}**: The key to copy on provider. * `to` **{String}**: Optionally specify a new key name to use. * `returns` **{Object}** **Example** ```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 ``` ## Related projects You might also be interested in these projects: * [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor "Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.") * [is-data-descriptor](https://www.npmjs.com/package/is-data-descriptor): Returns true if a value has the characteristics of a valid JavaScript data descriptor. | [homepage](https://github.com/jonschlinkert/is-data-descriptor "Returns true if a value has the characteristics of a valid JavaScript data descriptor.") * [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://github.com/jonschlinkert/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor "Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.") * [is-plain-object](https://www.npmjs.com/package/is-plain-object): Returns true if an object was created by the `Object` constructor. | [homepage](https://github.com/jonschlinkert/is-plain-object "Returns true if an object was created by the `Object` constructor.") * [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject "Returns true if the value is an object and not an array or null.") ## Contributing This document was generated by [verb-readme-generator](https://github.com/verbose/verb-readme-generator) (a [verb](https://github.com/verbose/verb) generator), please don't edit directly. Any changes to the readme must be made in [.verb.md](.verb.md). See [Building Docs](#building-docs). Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). Or visit the [verb-readme-generator](https://github.com/verbose/verb-readme-generator) project to submit bug reports or pull requests for the readme layout template. ## Building docs Generate readme and API documentation with [verb](https://github.com/verbose/verb): ```sh $ npm install -g verb verb-readme-generator && verb ``` ## Running tests Install dev dependencies: ```sh $ npm install -d && npm test ``` ## Author **Jon Schlinkert** * [github/jonschlinkert](https://github.com/jonschlinkert) * [twitter/jonschlinkert](http://twitter.com/jonschlinkert) ## License Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). Released under the [MIT license](https://github.com/jonschlinkert/copy-descriptor/blob/master/LICENSE). *** _This file was generated by [verb](https://github.com/verbose/verb), v0.9.0, on June 09, 2016._copy-descriptor-de88234d5eed3ab05ddc89a257bf2a9fdd348e58/test.js000066400000000000000000000034301272633304500235050ustar00rootroot00000000000000'use strict'; require('mocha'); var assert = require('assert'); var copy = require('./'); var a, b; describe('copy', function() { beforeEach(function() { a = {qux: 'fez'}; b = {}; Object.defineProperty(a, 'foo', { enumerable: true, get: function() { return 'bar'; } }); }); it('should copy a descriptor from one object to another', function() { copy(b, a, 'foo'); assert('foo' in b); assert(b.foo === 'bar'); }); it('should copy a property from one object to another', function() { copy(b, a, 'qux'); assert('qux' in b); assert(b.qux === 'fez'); }); it('should copy a descriptor and rename it', function() { copy(b, a, 'foo', 'baz'); assert(!('foo' in b)); assert('baz' in b); assert(b.baz === 'bar'); }); it('should copy a descriptor to the same object and rename it', function() { copy(a, 'foo', 'baz'); assert('foo' in a); assert('baz' in a); assert(a.foo === 'bar'); assert(a.baz === 'bar'); }); it('should throw an error when property does not exist', function(cb) { try { copy({}, {}, 'foo'); cb(new Error('expected an error')); } catch (err) { assert.equal(err.message, 'property "foo" does not exist'); cb(); } }); it('should throw an error when the first arg is not an object', function(cb) { try { copy(); cb(new Error('expected an error')); } catch (err) { assert.equal(err.message, 'expected the first argument to be an object'); cb(); } }); it('should throw an error when key is not a string', function(cb) { try { copy({}); cb(new Error('expected an error')); } catch (err) { assert.equal(err.message, 'expected key to be a string'); cb(); } }); });