Comparing version 2.0.1 to 2.0.2
115
.jscs.json
{ | ||
"es3": true, | ||
"additionalRules": [], | ||
"requireCurlyBraces": ["if", "else", "for", "while", "do", "try", "catch"], | ||
"requireSemicolons": true, | ||
"disallowMultipleSpaces": true, | ||
"disallowIdentifierNames": [], | ||
"requireCurlyBraces": { | ||
"allExcept": [], | ||
"keywords": ["if", "else", "for", "while", "do", "try", "catch"] | ||
}, | ||
"requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"], | ||
@@ -10,2 +21,16 @@ | ||
"disallowSpaceBeforeComma": true, | ||
"disallowSpaceAfterComma": false, | ||
"disallowSpaceBeforeSemicolon": true, | ||
"disallowNodeTypes": [ | ||
"DebuggerStatement", | ||
"LabeledStatement", | ||
"SwitchCase", | ||
"SwitchStatement", | ||
"WithStatement" | ||
], | ||
"requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] }, | ||
"requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true }, | ||
@@ -23,3 +48,3 @@ "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, | ||
"disallowQuotedKeysInObjects": "allButReserved", | ||
"disallowQuotedKeysInObjects": { "allExcept": ["reserved"] }, | ||
@@ -59,3 +84,3 @@ "disallowSpaceAfterObjectKeys": true, | ||
"requireDotNotation": true, | ||
"requireDotNotation": { "allExcept": ["keywords"] }, | ||
@@ -69,4 +94,86 @@ "requireParenthesesAroundIIFE": true, | ||
"mark": "'" | ||
} | ||
}, | ||
"disallowOperatorBeforeLineBreak": [], | ||
"requireSpaceBeforeKeywords": [ | ||
"do", | ||
"for", | ||
"if", | ||
"else", | ||
"switch", | ||
"case", | ||
"try", | ||
"catch", | ||
"finally", | ||
"while", | ||
"with", | ||
"return" | ||
], | ||
"validateAlignedFunctionParameters": { | ||
"lineBreakAfterOpeningBraces": true, | ||
"lineBreakBeforeClosingBraces": true | ||
}, | ||
"requirePaddingNewLinesBeforeExport": true, | ||
"validateNewlineAfterArrayElements": { | ||
"maximum": 6 | ||
}, | ||
"requirePaddingNewLinesAfterUseStrict": true, | ||
"disallowArrowFunctions": true, | ||
"disallowMultiLineTernary": true, | ||
"validateOrderInObjectKeys": false, | ||
"disallowIdenticalDestructuringNames": true, | ||
"disallowNestedTernaries": { "maxLevel": 1 }, | ||
"requireSpaceAfterComma": { "allExcept": ["trailing"] }, | ||
"requireAlignedMultilineParams": false, | ||
"requireSpacesInGenerator": { | ||
"afterStar": true | ||
}, | ||
"disallowSpacesInGenerator": { | ||
"beforeStar": true | ||
}, | ||
"disallowVar": false, | ||
"requireArrayDestructuring": false, | ||
"requireEnhancedObjectLiterals": false, | ||
"requireObjectDestructuring": false, | ||
"requireEarlyReturn": false, | ||
"requireCapitalizedConstructorsNew": { | ||
"allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"] | ||
}, | ||
"requireImportAlphabetized": false, | ||
"requireSpaceBeforeObjectValues": true, | ||
"requireSpaceBeforeDestructuredValues": true, | ||
"disallowSpacesInsideTemplateStringPlaceholders": true, | ||
"disallowArrayDestructuringReturn": false, | ||
"requireNewlineBeforeSingleStatementsInIf": false, | ||
"disallowUnusedVariables": true, | ||
"requireSpacesInsideImportedObjectBraces": true, | ||
"requireUseStrict": false | ||
} | ||
@@ -0,1 +1,34 @@ | ||
3.0.2 / 2018-07-19 | ||
================== | ||
* [Fix] Prevent merging `__proto__` property (#48) | ||
* [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` | ||
* [Tests] up to `node` `v10.7`, `v9.11`, `v8.11`, `v7.10`, `v6.14`, `v4.9`; use `nvm install-latest-npm` | ||
3.0.1 / 2017-04-27 | ||
================== | ||
* [Fix] deep extending should work with a non-object (#46) | ||
* [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config` | ||
* [Tests] up to `node` `v7.9`, `v6.10`, `v4.8`; improve matrix | ||
* [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. | ||
* [Docs] Add example to readme (#34) | ||
3.0.0 / 2015-07-01 | ||
================== | ||
* [Possible breaking change] Use global "strict" directive (#32) | ||
* [Tests] `int` is an ES3 reserved word | ||
* [Tests] Test up to `io.js` `v2.3` | ||
* [Tests] Add `npm run eslint` | ||
* [Dev Deps] Update `covert`, `jscs` | ||
2.0.2 / 2018-07-19 | ||
================== | ||
* [Fix] Prevent merging `__proto__` property (#48) | ||
* [Fix] deep extending should work with a non-object (#46) | ||
* [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. | ||
* [Docs] Add example to readme (#34) | ||
* [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`, `covert`, `jscs` | ||
* [Tests] up to `node` `v10.7`, `v9.11`, `v8.11`, `v7.10`, `v6.14`, `v4.9`; `io.js` `v2.3`; use `nvm install-latest-npm` | ||
* [Tests] Add `npm run eslint` | ||
* [Tests] `int` is an ES3 reserved word | ||
2.0.1 / 2015-04-25 | ||
@@ -2,0 +35,0 @@ ================== |
{ | ||
"name": "extend", | ||
"author": "Stefan Thomas <justmoon@members.fsf.org> (http://www.justmoon.net)", | ||
"version": "2.0.1", | ||
"version": "3.0.0", | ||
"description": "Port of jQuery.extend for node.js and the browser.", | ||
@@ -6,0 +6,0 @@ "scripts": [ |
94
index.js
var hasOwn = Object.prototype.hasOwnProperty; | ||
var toStr = Object.prototype.toString; | ||
var undefined; | ||
var defineProperty = Object.defineProperty; | ||
var gOPD = Object.getOwnPropertyDescriptor; | ||
@@ -15,2 +16,3 @@ var isArray = function isArray(arr) { | ||
'use strict'; | ||
if (!obj || toStr.call(obj) !== '[object Object]') { | ||
@@ -20,6 +22,6 @@ return false; | ||
var has_own_constructor = hasOwn.call(obj, 'constructor'); | ||
var has_is_property_of_method = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); | ||
var hasOwnConstructor = hasOwn.call(obj, 'constructor'); | ||
var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); | ||
// Not own constructor property must be Object | ||
if (obj.constructor && !has_own_constructor && !has_is_property_of_method) { | ||
if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { | ||
return false; | ||
@@ -31,15 +33,45 @@ } | ||
var key; | ||
for (key in obj) {} | ||
for (key in obj) { /**/ } | ||
return key === undefined || hasOwn.call(obj, key); | ||
return typeof key === 'undefined' || hasOwn.call(obj, key); | ||
}; | ||
// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target | ||
var setProperty = function setProperty(target, options) { | ||
if (defineProperty && options.name === '__proto__') { | ||
defineProperty(target, options.name, { | ||
enumerable: true, | ||
configurable: true, | ||
value: options.newValue, | ||
writable: true | ||
}); | ||
} else { | ||
target[options.name] = options.newValue; | ||
} | ||
}; | ||
// Return undefined instead of __proto__ if '__proto__' is not an own property | ||
var getProperty = function getProperty(obj, name) { | ||
if (name === '__proto__') { | ||
if (!hasOwn.call(obj, name)) { | ||
return void 0; | ||
} else if (gOPD) { | ||
// In early versions of node, obj['__proto__'] is buggy when obj has | ||
// __proto__ as an own property. Object.getOwnPropertyDescriptor() works. | ||
return gOPD(obj, name).value; | ||
} | ||
} | ||
return obj[name]; | ||
}; | ||
module.exports = function extend() { | ||
'use strict'; | ||
var options, name, src, copy, copyIsArray, clone, | ||
target = arguments[0], | ||
i = 1, | ||
length = arguments.length, | ||
deep = false; | ||
var options, name, src, copy, copyIsArray, clone; | ||
var target = arguments[0]; | ||
var i = 1; | ||
var length = arguments.length; | ||
var deep = false; | ||
// Handle a deep copy situation | ||
@@ -51,3 +83,4 @@ if (typeof target === 'boolean') { | ||
i = 2; | ||
} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) { | ||
} | ||
if (target == null || (typeof target !== 'object' && typeof target !== 'function')) { | ||
target = {}; | ||
@@ -62,25 +95,23 @@ } | ||
for (name in options) { | ||
src = target[name]; | ||
copy = options[name]; | ||
src = getProperty(target, name); | ||
copy = getProperty(options, name); | ||
// Prevent never-ending loop | ||
if (target === copy) { | ||
continue; | ||
} | ||
if (target !== copy) { | ||
// Recurse if we're merging plain objects or arrays | ||
if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { | ||
if (copyIsArray) { | ||
copyIsArray = false; | ||
clone = src && isArray(src) ? src : []; | ||
} else { | ||
clone = src && isPlainObject(src) ? src : {}; | ||
} | ||
// Recurse if we're merging plain objects or arrays | ||
if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { | ||
if (copyIsArray) { | ||
copyIsArray = false; | ||
clone = src && isArray(src) ? src : []; | ||
} else { | ||
clone = src && isPlainObject(src) ? src : {}; | ||
// Never move original objects, clone them | ||
setProperty(target, { name: name, newValue: extend(deep, clone, copy) }); | ||
// Don't bring in undefined values | ||
} else if (typeof copy !== 'undefined') { | ||
setProperty(target, { name: name, newValue: copy }); | ||
} | ||
// Never move original objects, clone them | ||
target[name] = extend(deep, clone, copy); | ||
// Don't bring in undefined values | ||
} else if (copy !== undefined) { | ||
target[name] = copy; | ||
} | ||
@@ -94,2 +125,1 @@ } | ||
}; | ||
{ | ||
"name": "extend", | ||
"author": "Stefan Thomas <justmoon@members.fsf.org> (http://www.justmoon.net)", | ||
"version": "2.0.1", | ||
"version": "2.0.2", | ||
"description": "Port of jQuery.extend for node.js and the browser", | ||
"main": "index", | ||
"scripts": { | ||
"test": "npm run lint && node test/index.js && npm run coverage-quiet", | ||
"prepublish": "safe-publish-latest", | ||
"pretest": "npm run lint", | ||
"test": "npm run tests-only", | ||
"posttest": "npm run coverage-quiet", | ||
"tests-only": "node test", | ||
"coverage": "covert test/index.js", | ||
"coverage-quiet": "covert test/index.js --quiet", | ||
"lint": "jscs *.js */*.js" | ||
"lint": "npm run jscs && npm run eslint", | ||
"jscs": "jscs *.js */*.js", | ||
"eslint": "eslint *.js */*.js" | ||
}, | ||
@@ -30,8 +36,10 @@ "contributors": [ | ||
"devDependencies": { | ||
"tape": "^4.0.0", | ||
"covert": "^1.0.1", | ||
"jscs": "^1.11.3" | ||
"@ljharb/eslint-config": "^12.2.1", | ||
"covert": "^1.1.0", | ||
"eslint": "^4.19.1", | ||
"jscs": "^3.0.7", | ||
"safe-publish-latest": "^1.1.1", | ||
"tape": "^4.9.1" | ||
}, | ||
"license": "MIT" | ||
} | ||
@@ -9,2 +9,14 @@ [![Build Status][travis-svg]][travis-url] | ||
Notes: | ||
* Since Node.js >= 4, | ||
[`Object.assign`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) | ||
now offers the same functionality natively (but without the "deep copy" option). | ||
See [ECMAScript 2015 (ES6) in Node.js](https://nodejs.org/en/docs/es6). | ||
* Some native implementations of `Object.assign` in both Node.js and many | ||
browsers (since NPM modules are for the browser too) may not be fully | ||
spec-compliant. | ||
Check [`object.assign`](https://www.npmjs.com/package/object.assign) module for | ||
a compliant candidate. | ||
## Installation | ||
@@ -24,2 +36,9 @@ | ||
**Example:** | ||
``` js | ||
var extend = require('extend'); | ||
extend(targetObject, object1, object2); | ||
``` | ||
Keep in mind that the target object will be modified, and will be returned from extend(). | ||
@@ -59,3 +78,3 @@ | ||
[github-ljharb]: https://github.com/ljharb | ||
[npm-version-png]: http://vb.teelaun.ch/justmoon/node-extend.svg | ||
[npm-version-png]: http://versionbadg.es/justmoon/node-extend.svg | ||
[deps-svg]: https://david-dm.org/justmoon/node-extend.svg | ||
@@ -62,0 +81,0 @@ [deps-url]: https://david-dm.org/justmoon/node-extend |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
24128
10
245
82
6