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

json-merge-patch

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

json-merge-patch - npm Package Compare versions

Comparing version 0.2.3 to 1.0.0

.eslintrc

41

lib/apply.js
'use strict';
var serialize = require('./utils').serialize;
module.exports = function apply(target, patch) {
if(patch === null || typeof patch !== 'object' || Array.isArray(patch)) {
return patch;
}
if(target === null || typeof target !== 'object' || Array.isArray(target)) {
target = {};
}
var keys = Object.keys(patch);
for(var i=0; i<keys.length; i++) {
var key = keys[i];
if(patch[key] === null) {
if(target.hasOwnProperty(key)) {
delete target[key];
}
} else {
target[key] = apply(target[key], patch[key]);
}
}
return target;
patch = serialize(patch);
if (patch === null || typeof patch !== 'object' || Array.isArray(patch)) {
return patch;
}
target = serialize(target);
if (target === null || typeof target !== 'object' || Array.isArray(target)) {
target = {};
}
var keys = Object.keys(patch);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
if (patch[key] === null) {
if (target.hasOwnProperty(key)) {
delete target[key];
}
} else {
target[key] = apply(target[key], patch[key]);
}
}
return target;
};
'use strict';
var equal = require('deep-equal');
var serialize = require('./utils').serialize;
function arrayEquals(before, after) {
if(before.length !== after.length) {
if (before.length !== after.length) {
return false;
}
for(var i=0; i<before.length; i++) {
if(!equal(after[i], before[i])) {
for (var i = 0; i < before.length; i++) {
if (!equal(after[i], before[i])) {
return false;

@@ -18,3 +19,6 @@ }

module.exports = function generate(before, after) {
if(before === null || after === null ||
before = serialize(before);
after = serialize(after);
if (before === null || after === null ||
typeof before !== 'object' || typeof after !== 'object' ||

@@ -25,4 +29,4 @@ Array.isArray(before) !== Array.isArray(after)) {

if(Array.isArray(before)) {
if(!arrayEquals(before, after)) {
if (Array.isArray(before)) {
if (!arrayEquals(before, after)) {
return after;

@@ -41,7 +45,7 @@ }

var newKeys = {};
for(i=0; i < afterKeys.length; i++) {
for (i = 0; i < afterKeys.length; i++) {
key = afterKeys[i];
if(beforeKeys.indexOf(key) === -1) {
if (beforeKeys.indexOf(key) === -1) {
newKeys[key] = true;
patch[key] = after[key];
patch[key] = serialize(after[key]);
}

@@ -52,15 +56,15 @@ }

var removedKeys = {};
for(i=0; i < beforeKeys.length; i++) {
for (i = 0; i < beforeKeys.length; i++) {
key = beforeKeys[i];
if(afterKeys.indexOf(key) === -1) {
if (afterKeys.indexOf(key) === -1) {
removedKeys[key] = true;
patch[key] = null;
} else {
if(before[key] !== null && typeof before[key] === 'object') {
if (before[key] !== null && typeof before[key] === 'object') {
var subPatch = generate(before[key], after[key]);
if(subPatch !== undefined) {
if (subPatch !== undefined) {
patch[key] = subPatch;
}
} else if(before[key] !== after[key]) {
patch[key] = after[key];
} else if (before[key] !== after[key]) {
patch[key] = serialize(after[key]);
}

@@ -67,0 +71,0 @@ }

'use strict';
module.exports = function merge(patch1, patch2) {
if(patch1 === null || patch2 === null ||
if (patch1 === null || patch2 === null ||
typeof patch1 !== 'object' || typeof patch2 !== 'object' ||

@@ -11,11 +11,11 @@ Array.isArray(patch1) !== Array.isArray(patch2)) {

Object.keys(patch2)
.forEach(function(key) {
if(patch1[key] !== undefined) {
patch[key] = merge(patch1[key], patch2[key]);
} else {
patch[key] = patch2[key];
}
});
return patch;
Object.keys(patch2)
.forEach(function(key) {
if (patch1[key] !== undefined) {
patch[key] = merge(patch1[key], patch2[key]);
} else {
patch[key] = patch2[key];
}
});
return patch;
};
{
"name": "json-merge-patch",
"version": "0.2.3",
"version": "1.0.0",
"description": "Implementation of JSON Merge Patch (RFC 7396)",

@@ -10,9 +10,13 @@ "main": "index.js",

"devDependencies": {
"chai": "^2.2.0",
"coveralls": "^2.11.2",
"istanbul": "^0.3.11",
"mocha": "^2.2.1"
"chai": "^4.2.0",
"coveralls": "^3.1.0",
"eslint": "^7.0.0",
"istanbul": "^0.4.5",
"mocha": "^7.1.2"
},
"scripts": {
"test": "make test"
"test": "NODE_ENV=test mocha -b --reporter spec --recursive test",
"lint": "eslint ./lib ./index.js",
"coverage": "istanbul cover _mocha -- -R spec --recursive test",
"coveralls": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- -R spec --recursive test && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage"
},

@@ -37,4 +41,4 @@ "repository": {

"dependencies": {
"deep-equal": "^1.0.0"
"deep-equal": "^2.0.3"
}
}

@@ -6,2 +6,4 @@ JSON Merge Patch

[![Test coverage][coveralls-image]][coveralls-url]
[![Dependency Status][dep-image]][dep-url]
[![devDependency Status][devDep-image]][devDep-url]

@@ -28,4 +30,10 @@ An implementation of the JSON Merge Patch [RFC 7396](http://tools.ietf.org/html/rfc7396)

Applying patches:
### Applying patches:
```js
jsonmergepatch.apply(obj: Object, patch: Object) : Object
```
Applies `patch` onto source `obj`.
### Example:
```js
var source = {

@@ -56,4 +64,10 @@ "title": "Goodbye!",

Generating patches:
### Generating patches:
```js
jsonmergepatch.generate(source: Object, target: Object) : Object
```
Compares `source` and `target` object and generates a `patch` of the changes necessary to convert `source` into `target`.
### Example:
```js
var source = {

@@ -76,21 +90,46 @@ "title": "Goodbye!",

## API
### Merging patches
#### jsonmergepatch.apply (`obj` Object, `patch` Object) : Object
This function is **outside the scope of the RFC**, its purpose is to combine/squash successive patches of the same entity into one patch.
Use it at your own risks.
Applies `patch` on `obj`.
#### jsonmergepatch.generate (`source` Object, `target` Object) : `patch` Object
### Usage with Javascript objects
Generates a `patch` Object from source and target Object.
This library is primarily designed to work with JSON.
Nonetheless, it is possible to use Javascript objects if the method `toJSON()` is implemented, the library will then serialize your object using it.
```js
var patch = jsonmergepatch.generate(
{
"title": "Goodbye!"
},
{
toJSON: () {
return {
"title": "I am serialized"
}
},
}
);
// patch = {
// "title": "I am serialized",
// }
```
```js
var patch = jsonmergepatch.generate(
{},
{
date: new Date("2020-05-09T00:00:00.000")
}
);
// patch = {
// date: "2020-05-09T00:00:00.000"
// }
```
#### jsonmergepatch.merge (`patch1` Object, `patch2` Object) : `patch` Object
Generates a `patch` Object by merging patch1 and patch2.
## Running tests
```sh
make test
npm test
```

@@ -106,1 +145,5 @@

[coveralls-url]: https://coveralls.io/r/pierreinglebert/json-merge-patch?branch=master
[dep-image]: https://img.shields.io/david/pierreinglebert/json-merge-patch.svg
[dep-url]: https://david-dm.org/pierreinglebert/json-merge-patch
[devDep-image]: https://img.shields.io/david/dev/pierreinglebert/json-merge-patch.svg
[devDep-url]: https://david-dm.org/pierreinglebert/json-merge-patch#info=devDependencies

Sorry, the diff of this file is not supported yet

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