Socket
Socket
Sign inDemoInstall

mol-proto

Package Overview
Dependencies
0
Maintainers
1
Versions
20
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.1.12 to 0.1.13

2

bower.json
{
"name": "proto",
"version": "0.1.12",
"version": "0.1.13",
"homepage": "https://github.com/milojs/proto",

@@ -5,0 +5,0 @@ "authors": [

@@ -247,10 +247,11 @@ 'use strict';

* @param {Boolean} onlyEnumerable Optional `true` to use only enumerable properties
* @param {Boolean} preserveStructure if true will throw at the attempt to overwrite object with scalar value (including Date and Regex) and vice versa
* @return {Object}
*/
function deepExtend(obj, onlyEnumerable) {
return _extendTree(this, obj, onlyEnumerable, []);
function deepExtend(obj, onlyEnumerable, preserveStructure) {
return _extendTree(this, obj, onlyEnumerable, preserveStructure, []);
}
function _extendTree(selfNode, objNode, onlyEnumerable, objTraversed) {
function _extendTree(selfNode, objNode, onlyEnumerable, preserveStructure, objTraversed) {
if (objTraversed.indexOf(objNode) >= 0) return; // node already traversed, obj has recursion

@@ -264,11 +265,18 @@

loop.call(objNode, function(value, prop) {
var descriptor = Object.getOwnPropertyDescriptor(objNode, prop);
if (typeof value == 'object' && value != null
&& ! (value instanceof RegExp) && ! (value instanceof Date)) {
if (! (selfNode.hasOwnProperty(prop)
&& typeof selfNode[prop] == 'object' && selfNode[prop] != null))
var hasProp = selfNode.hasOwnProperty(prop)
, isSelfObj = isNormalObject(selfNode[prop])
, isValueObj = isNormalObject(value);
if (preserveStructure && hasProp && isSelfObj != isValueObj)
throw new Error('deepExtend');
if (isValueObj) {
if (!hasProp || !isSelfObj)
selfNode[prop] = (Array.isArray(value)) ? [] : {};
_extendTree(selfNode[prop], value, onlyEnumerable, objTraversed);
} else
_extendTree(selfNode[prop], value, onlyEnumerable, preserveStructure, objTraversed);
} else {
var descriptor = Object.getOwnPropertyDescriptor(objNode, prop);
Object.defineProperty(selfNode, prop, descriptor);
}
}, this, onlyEnumerable);

@@ -280,2 +288,8 @@

function isNormalObject(value) {
return typeof value == 'object' && value != null
&& !(value instanceof RegExp) && !(value instanceof Date)
}
/**

@@ -282,0 +296,0 @@ * Clones all object tree. Class of original object is not preserved. Returns `self`

{
"name": "mol-proto",
"version": "0.1.12",
"version": "0.1.13",
"description": "ES5 object manipulation library for node and modern browsers",

@@ -5,0 +5,0 @@ "main": "lib/proto.js",

@@ -185,2 +185,45 @@ 'use strict';

it('should allow deepExtend with preserving structure', function() {
var obj = {
attr: {
bind: 'ml-bind',
load: 'ml-load'
}
};
assert.doesNotThrow(function() {
_.deepExtend(obj, {
attr: {
load: 'cc-load',
ctrl: 'cc-ctrl'
}
}, false, true);
});
obj = {
wasScalar: 'overwrite'
};
assert.throws(function() {
_.deepExtend(obj, {
wasScalar: {
inside: 'overwritten scalar'
}
}, false, true);
});
obj = {
wasObject: {
inside: 'overwrite too'
}
};
assert.throws(function() {
_.deepExtend(obj, {
wasObject: 'overwritten object'
}, false, true);
});
});
it('should define deepClone function', function() {

@@ -187,0 +230,0 @@ var cloned = _.deepClone({ a: 1, b: { c: 2, d: { e: 3 } } });

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc