first commit

This commit is contained in:
2026-09-08 20:28:54 +08:00
commit 2ada8d3d5a
37380 changed files with 4886169 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
copy-to
=======
[![Build Status](https://travis-ci.org/node-modules/copy-to.svg?branch=master)](https://travis-ci.org/node-modules/copy-to)
copy an object's properties to another one, include propertiy, getter and setter.
## Install
```
npm install copy-to
```
## Usage
```js
copy(src).to(des);
copy(src).toCover(des);
copy(src).override(des);
copy(src).pick('proName1', 'proName2').to(des);
copy(src).pick('proName1', 'proName2').toCover(des);
copy(src).pick('proName1', 'proName2').override(des);
copy(src).and(other).to(des);
copy(src).and(other).toCover(des);
copy(src).and(second).and(third).to(des);
copy(src).and(other).pick('proName1', 'proName2').to(des);
copy(src).and(other).pick('proName1', 'proName2').toCover(des);
copy(src).and(second).and(third).pick('proName1', 'proName2').to(des);
```
It won't copy access(getter / setter) by default, if you want to copy them, please use:
```js
copy(src).withAccess().and(other).to(des);
```
## Example
```js
var copy = require('copy-to');
var src = {
_name: 'foo',
set name(val) {
this._name = val;
},
get name() {
return this._name;
},
show: function () {
console.log(this._name);
}
};
var des = {
_name: 'bar'
};
copy(src).to(des);
copy(src).toCover(des);
copy(src).pick('_name', 'name').to(des);
copy(src).pick('_name', 'name').toCover(des);
```
## License
MIT
+161
View File
@@ -0,0 +1,161 @@
/*!
* copy-to - index.js
* Copyright(c) 2014 dead_horse <dead_horse@qq.com>
* MIT Licensed
*/
'use strict';
/**
* slice() reference.
*/
var slice = Array.prototype.slice;
/**
* Expose copy
*
* ```
* copy({foo: 'nar', hello: 'copy'}).to({hello: 'world'});
* copy({foo: 'nar', hello: 'copy'}).toCover({hello: 'world'});
* ```
*
* @param {Object} src
* @return {Copy}
*/
module.exports = Copy;
/**
* Copy
* @param {Object} src
* @param {Boolean} withAccess
*/
function Copy(src, withAccess) {
if (!(this instanceof Copy)) return new Copy(src, withAccess);
this.src = src;
this._withAccess = withAccess;
}
/**
* copy properties include getter and setter
* @param {[type]} val [description]
* @return {[type]} [description]
*/
Copy.prototype.withAccess = function (w) {
this._withAccess = w !== false;
return this;
};
/**
* pick keys in src
*
* @api: public
*/
Copy.prototype.pick = function(keys) {
if (!Array.isArray(keys)) {
keys = slice.call(arguments);
}
if (keys.length) {
this.keys = keys;
}
return this;
};
/**
* copy src to target,
* do not cover any property target has
* @param {Object} to
*
* @api: public
*/
Copy.prototype.to = function(to) {
to = to || {};
if (!this.src) return to;
var keys = this.keys || Object.keys(this.src);
if (!this._withAccess) {
for (var i = 0; i < keys.length; i++) {
key = keys[i];
if (to[key] !== undefined) continue;
to[key] = this.src[key];
}
return to;
}
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
if (!notDefined(to, key)) continue;
var getter = this.src.__lookupGetter__(key);
var setter = this.src.__lookupSetter__(key);
if (getter) to.__defineGetter__(key, getter);
if (setter) to.__defineSetter__(key, setter);
if (!getter && !setter) {
to[key] = this.src[key];
}
}
return to;
};
/**
* copy src to target,
* override any property target has
* @param {Object} to
*
* @api: public
*/
Copy.prototype.toCover = function(to) {
var keys = this.keys || Object.keys(this.src);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
delete to[key];
var getter = this.src.__lookupGetter__(key);
var setter = this.src.__lookupSetter__(key);
if (getter) to.__defineGetter__(key, getter);
if (setter) to.__defineSetter__(key, setter);
if (!getter && !setter) {
to[key] = this.src[key];
}
}
};
Copy.prototype.override = Copy.prototype.toCover;
/**
* append another object to src
* @param {Obj} obj
* @return {Copy}
*/
Copy.prototype.and = function (obj) {
var src = {};
this.to(src);
this.src = obj;
this.to(src);
this.src = src;
return this;
};
/**
* check obj[key] if not defiend
* @param {Object} obj
* @param {String} key
* @return {Boolean}
*/
function notDefined(obj, key) {
return obj[key] === undefined
&& obj.__lookupGetter__(key) === undefined
&& obj.__lookupSetter__(key) === undefined;
}
+31
View File
@@ -0,0 +1,31 @@
{
"name": "copy-to",
"version": "2.0.1",
"description": "copy an object's properties to another object",
"main": "index.js",
"files": ["index.js"],
"scripts": {
"test": "make test"
},
"repository": {
"type": "git",
"url": "git://github.com/node-modules/copy-to.git"
},
"keywords": [
"copy",
"object",
"properties",
"setter",
"getter"
],
"author": "dead_horse <dead_horse@qq.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/node-modules/copy-to/issues"
},
"homepage": "https://github.com/node-modules/copy-to",
"devDependencies": {
"mocha": "*",
"should": "*"
}
}