node.extend
Advanced tools
Comparing version 1.1.6 to 1.1.7
@@ -160,10 +160,10 @@ { | ||
"requireSpaceBeforeObjectValues": true, | ||
"requireSpaceBeforeDestructuredValues": true, | ||
"requireSpaceBeforeObjectValues": true, | ||
"requireSpaceBeforeDestructuredValues": true, | ||
"disallowSpacesInsideTemplateStringPlaceholders": true, | ||
"disallowArrayDestructuringReturn": false, | ||
"disallowArrayDestructuringReturn": false, | ||
"requireNewlineBeforeSingleStatementsInIf": false, | ||
"requireNewlineBeforeSingleStatementsInIf": false, | ||
@@ -170,0 +170,0 @@ "disallowUnusedVariables": true, |
@@ -13,4 +13,38 @@ 'use strict'; | ||
var is = require('is'); | ||
var has = require('has'); | ||
var extend = function extend() { | ||
var defineProperty = Object.defineProperty; | ||
var gOPD = Object.getOwnPropertyDescriptor; | ||
// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target | ||
var setProperty = function setP(target, name, value) { | ||
if (defineProperty && name === '__proto__') { | ||
defineProperty(target, name, { | ||
enumerable: true, | ||
configurable: true, | ||
value: value, | ||
writable: true | ||
}); | ||
} else { | ||
target[name] = value; | ||
} | ||
}; | ||
// Return undefined instead of __proto__ if '__proto__' is not an own property | ||
var getProperty = function getP(obj, name) { | ||
if (name === '__proto__') { | ||
if (!has(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]; | ||
}; | ||
// eslint-disable-next-line func-style | ||
function extend() { | ||
var target = arguments[0] || {}; | ||
@@ -44,4 +78,4 @@ var i = 1; | ||
for (name in options) { | ||
src = target[name]; | ||
copy = options[name]; | ||
src = getProperty(target, name); | ||
copy = getProperty(options, name); | ||
@@ -63,7 +97,7 @@ // Prevent never-ending loop | ||
// Never move original objects, clone them | ||
target[name] = extend(deep, clone, copy); | ||
setProperty(target, name, extend(deep, clone, copy)); | ||
// Don't bring in undefined values | ||
} else if (typeof copy !== 'undefined') { | ||
target[name] = copy; | ||
setProperty(target, name, copy); | ||
} | ||
@@ -76,3 +110,3 @@ } | ||
return target; | ||
}; | ||
} | ||
@@ -82,3 +116,3 @@ /** | ||
*/ | ||
extend.version = '1.1.3'; | ||
extend.version = '1.1.7'; | ||
@@ -85,0 +119,0 @@ /** |
{ | ||
"name": "node.extend", | ||
"version": "1.1.6", | ||
"version": "1.1.7", | ||
"description": "A port of jQuery.extend that actually works on node.js", | ||
@@ -15,10 +15,12 @@ "keywords": [ | ||
"dependencies": { | ||
"is": "^3.1.0" | ||
"has": "^1.0.3", | ||
"is": "^3.2.1" | ||
}, | ||
"devDependencies": { | ||
"tape": "^4.6.0", | ||
"@ljharb/eslint-config": "^13.0.0", | ||
"covert": "^1.1.0", | ||
"eslint": "^5.8.0", | ||
"jscs": "^3.0.7", | ||
"eslint": "^3.4.0", | ||
"@ljharb/eslint-config": "^8.0.0" | ||
"safe-publish-latest": "^1.1.2", | ||
"tape": "^4.9.1" | ||
}, | ||
@@ -37,2 +39,3 @@ "repository": { | ||
"scripts": { | ||
"prepublish": "safe-publish-latest", | ||
"pretest": "npm run lint", | ||
@@ -44,5 +47,5 @@ "test": "npm run --silent tests-only", | ||
"coverage-quiet": "covert test/index.js --quiet", | ||
"lint": "npm run jscs && npm run eslint", | ||
"lint": "npm run jscs && npm run eslint .", | ||
"jscs": "jscs *.js */*.js", | ||
"eslint": "eslint *.js */*.js" | ||
"eslint": "eslint" | ||
}, | ||
@@ -49,0 +52,0 @@ "engines": { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
19469
216
2
6
+ Addedhas@^1.0.3
+ Addedhas@1.0.4(transitive)
Updatedis@^3.2.1