New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

seamless-immutable

Package Overview
Dependencies
Maintainers
1
Versions
53
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

seamless-immutable - npm Package Compare versions

Comparing version 2.0.2 to 2.1.0

2

bower.json
{
"name": "seamless-immutable",
"main": "seamless-immutable.js",
"version": "2.0.2",
"version": "2.1.0",
"homepage": "https://github.com/rtfeldman/seamless-immutable",

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

{
"name": "seamless-immutable",
"version": "2.0.2",
"version": "2.1.0",
"description": "Immutable data structures for JavaScript which are backwards-compatible with normal JS Arrays and Objects.",

@@ -5,0 +5,0 @@ "main": "seamless-immutable.js",

@@ -196,2 +196,6 @@ seamless-immutable

#### 2.1.0
Adds optional `merger` function to `#merge`.
#### 2.0.2

@@ -198,0 +202,0 @@

@@ -223,3 +223,4 @@ (function(){

* @param {object} other - The other object to merge. Multiple objects can be passed as an array. In such a case, the later an object appears in that list, the higher its priority.
* @param {object} config - Optional config object that contains settings. Right now only {deep: true} is supported for a merge deep.
* @param {object} config - Optional config object that contains settings. Supported settings are: {deep: true} for deep merge and {merger: mergerFunc} where mergerFunc is a function
* that takes a property from both objects. If anything is returned it overrides the normal merge behaviour.
*/

@@ -240,2 +241,3 @@ function merge(other, config) {

deep = config && config.deep,
merger = config && config.merger,
key;

@@ -248,4 +250,6 @@

var immutableValue = Immutable(otherObj[key]);
var mergerResult = merger && merger(currentObj[key], immutableValue);
anyChanges = anyChanges ||
mergerResult !== undefined ||
(!currentObj.hasOwnProperty(key) ||

@@ -256,3 +260,5 @@ ((immutableValue !== currentObj[key]) &&

if (deep && isObject(currentObj[key]) && isObject(immutableValue)) {
if (mergerResult) {
result[key] = mergerResult;
} else if (deep && isObject(currentObj[key]) && isObject(immutableValue)) {
result[key] = currentObj[key].merge(immutableValue, config);

@@ -259,0 +265,0 @@ } else {

@@ -205,2 +205,25 @@ var Immutable = require("../../seamless-immutable.js");

function arrayMerger(thisValue, providedValue) {
if (thisValue instanceof Array && providedValue instanceof Array) {
return thisValue.concat(providedValue);
}
}
it("merges with a custom merger when the config tells it to", function() {
var expected = Immutable({all: "your base", are: {belong: "to us"}, you: ['have', 'no', 'chance', 'to', 'survive']});
var actual = Immutable({all: "your base", are: {belong: "to us"}, you: ['have', 'no']}).merge({you: ['chance', 'to', 'survive']}, {merger: arrayMerger});
assert.deepEqual(actual, expected);
});
it("merges deep with a custom merger when the config tells it to", function() {
var original = Immutable({id: 3, name: "three", valid: true, a: {id: 2}, b: [50], x: [1, 2], sub: {z: [100]}});
var toMerge = {id: 3, name: "three", valid: false, a: [1000], b: {id: 4}, x: [3, 4], sub: {y: [10, 11], z: [101, 102]}};
var expected = Immutable({id: 3, name: "three", valid: false, a: [1000], b: {id: 4}, x: [1, 2, 3, 4], sub: {z: [100, 101, 102], y: [10, 11]}});
var actual = original.merge(toMerge, {deep: true, merger: arrayMerger});
assert.deepEqual(actual, expected);
});
describe("when passed a single object", function() {

@@ -214,2 +237,6 @@ generateMergeTestsFor([TestUtils.ComplexObjectSpecifier()]);

describe("when passed a single object with a custom merger", function() {
generateMergeTestsFor([TestUtils.ComplexObjectSpecifier()], {merger: arrayMerger()});
});
describe("when passed an array of objects", function() {

@@ -222,3 +249,7 @@ generateMergeTestsFor([generateArrayOfObjects]);

});
describe("when passed an array of objects with a custom merger", function() {
generateMergeTestsFor([generateArrayOfObjects], {merger: arrayMerger()});
});
});
};
SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc