Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Oct 17, 2021. It is now read-only.

Commit 696052b

Browse files
authored
Merge pull request #2 from awcjack/real-fix
preserve array and delete fix
2 parents 8ad10fc + a251375 commit 696052b

File tree

12 files changed

+1608
-2078
lines changed

12 files changed

+1608
-2078
lines changed

‎README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
A small library that can deep diff two JavaScript Objects, including nested structures of arrays and objects.
1919

2020
## Installation
21-
`yarn add https://github.com/sanukerinc/deep-object-diff.git`
21+
`yarn add awcjack/deep-object-diff#real-fix`
2222

2323
## Functions available:
2424
- [`diff(originalObj, updatedObj)`](#diff)

‎dist/added/index.js

Lines changed: 56 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,36 @@
11
(function (global, factory) {
22
if (typeof define === "function" && define.amd) {
3-
define(['module','exports','../utils'], factory);
3+
define(["module","exports","lodash","../utils"], factory);
44
} else if (typeof exports !== "undefined") {
5-
factory(module, exports, require('../utils'));
5+
factory(module, exports, require("lodash"),require("../utils"));
66
} else {
77
var mod = {
88
exports: {}
99
};
10-
factory(mod, mod.exports, global.utils);
10+
factory(mod, mod.exports, global.lodash,global.utils);
1111
global.index = mod.exports;
1212
}
13-
})(this, function (module, exports, _utils) {
14-
'use strict';
13+
})(this, function (module, exports, _lodash,_utils) {
14+
"use strict";
1515

1616
Object.defineProperty(exports, "__esModule", {
1717
value: true
1818
});
1919

20+
var _lodash2 = _interopRequireDefault(_lodash);
21+
22+
function _interopRequireDefault(obj) {
23+
return obj && obj.__esModule ? obj : {
24+
default: obj
25+
};
26+
}
27+
28+
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
29+
return typeof obj;
30+
} : function (obj) {
31+
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
32+
};
33+
2034
function _defineProperty(obj, key, value) {
2135
if (key in obj) {
2236
Object.defineProperty(obj, key, {
@@ -55,17 +69,53 @@
5569

5670
return Object.keys(r).reduce(function (acc, key) {
5771
if (l.hasOwnProperty(key)) {
72+
if (Array.isArray(l[key]) && Array.isArray(r[key])) {
73+
//const allKeys = _.merge(l[key], r[key]) ?? []
74+
var newFields = _lodash2.default.uniq(_lodash2.default.difference(r[key], l[key]));
75+
if (newFields.length === 0) {
76+
return acc;
77+
}
78+
var newFieldsIndex = _lodash2.default.map(newFields, function (o) {
79+
return {
80+
content: o,
81+
index: []
82+
};
83+
});
84+
85+
var _loop = function _loop(i) {
86+
var index = _lodash2.default.findIndex(newFields, function (o) {
87+
return _lodash2.default.isEqual(o, r[key][i]);
88+
});
89+
if (index !== -1) {
90+
newFieldsIndex[index].index.push(i);
91+
}
92+
};
93+
94+
for (var i = 0; i < r[key].length; i++) {
95+
_loop(i);
96+
}
97+
return _extends({}, acc, _defineProperty({}, key, { after: newFieldsIndex }));
98+
}
5899
var difference = addedDiff(l[key], r[key]);
59100

60101
if ((0, _utils.isObject)(difference) && (0, _utils.isEmpty)(difference)) return acc;
61102

62103
return _extends({}, acc, _defineProperty({}, key, difference));
63104
}
105+
if (_typeof(r[key]) === "object" && l[key] === undefined) {
106+
if (Array.isArray(r[key])) {
107+
return _extends({}, acc, _defineProperty({}, key, { after: r[key] }));
108+
}
109+
var _difference = addedDiff({}, r[key]);
110+
if ((0, _utils.isObject)(_difference) && (0, _utils.isEmpty)(_difference)) return acc;
111+
112+
return _extends({}, acc, _defineProperty({}, key, _difference));
113+
}
64114

65115
return _extends({}, acc, _defineProperty({}, key, { after: r[key] }));
66116
}, {});
67117
};
68118

69119
exports.default = addedDiff;
70-
module.exports = exports['default'];
120+
module.exports = exports["default"];
71121
});

‎dist/deleted/index.js

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,36 @@
11
(function (global, factory) {
22
if (typeof define === "function" && define.amd) {
3-
define(['module','exports','../utils'], factory);
3+
define(["module","exports","lodash","../utils"], factory);
44
} else if (typeof exports !== "undefined") {
5-
factory(module, exports, require('../utils'));
5+
factory(module, exports, require("lodash"),require("../utils"));
66
} else {
77
var mod = {
88
exports: {}
99
};
10-
factory(mod, mod.exports, global.utils);
10+
factory(mod, mod.exports, global.lodash,global.utils);
1111
global.index = mod.exports;
1212
}
13-
})(this, function (module, exports, _utils) {
14-
'use strict';
13+
})(this, function (module, exports, _lodash,_utils) {
14+
"use strict";
1515

1616
Object.defineProperty(exports, "__esModule", {
1717
value: true
1818
});
1919

20+
var _lodash2 = _interopRequireDefault(_lodash);
21+
22+
function _interopRequireDefault(obj) {
23+
return obj && obj.__esModule ? obj : {
24+
default: obj
25+
};
26+
}
27+
28+
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
29+
return typeof obj;
30+
} : function (obj) {
31+
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
32+
};
33+
2034
function _defineProperty(obj, key, value) {
2135
if (key in obj) {
2236
Object.defineProperty(obj, key, {
@@ -54,17 +68,52 @@
5468

5569
return Object.keys(l).reduce(function (acc, key) {
5670
if (r.hasOwnProperty(key)) {
71+
if (Array.isArray(l[key]) && Array.isArray(r[key])) {
72+
var oldFields = _lodash2.default.uniq(_lodash2.default.difference(l[key], r[key]));
73+
if (oldFields.length === 0) {
74+
return acc;
75+
}
76+
var oldFieldsIndex = _lodash2.default.map(oldFields, function (o) {
77+
return {
78+
content: o,
79+
index: []
80+
};
81+
});
82+
83+
var _loop = function _loop(i) {
84+
var index = _lodash2.default.findIndex(oldFields, function (o) {
85+
return _lodash2.default.isEqual(o, l[key][i]);
86+
});
87+
if (index !== -1) {
88+
oldFieldsIndex[index].index.push(i);
89+
}
90+
};
91+
92+
for (var i = 0; i < l[key].length; i++) {
93+
_loop(i);
94+
}
95+
return _extends({}, acc, _defineProperty({}, key, { before: oldFieldsIndex }));
96+
}
5797
var difference = deletedDiff(l[key], r[key]);
5898

5999
if ((0, _utils.isObject)(difference) && (0, _utils.isEmpty)(difference)) return acc;
60100

61101
return _extends({}, acc, _defineProperty({}, key, difference));
62102
}
103+
if (_typeof(l[key]) === "object" && r[key] === undefined) {
104+
if (Array.isArray(l[key])) {
105+
return _extends({}, acc, _defineProperty({}, key, { before: l[key] }));
106+
}
107+
var _difference = deletedDiff(l[key], {});
108+
if ((0, _utils.isObject)(_difference) && (0, _utils.isEmpty)(_difference)) return acc;
109+
110+
return _extends({}, acc, _defineProperty({}, key, _difference));
111+
}
63112

64113
return _extends({}, acc, _defineProperty({}, key, { before: l[key], after: undefined }));
65114
}, {});
66115
};
67116

68117
exports.default = deletedDiff;
69-
module.exports = exports['default'];
118+
module.exports = exports["default"];
70119
});

‎dist/index.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
(function (global, factory) {
22
if (typeof define === "function" && define.amd) {
3-
define(['exports', './diff', './added', './deleted', './updated', './detailed'], factory);
3+
define(['exports', './diff', './added', './deleted', './updated', './detailed','./preserveArray'], factory);
44
} else if (typeof exports !== "undefined") {
5-
factory(exports, require('./diff'), require('./added'), require('./deleted'), require('./updated'), require('./detailed'));
5+
factory(exports, require('./diff'), require('./added'), require('./deleted'), require('./updated'), require('./detailed'),require('./preserveArray'));
66
} else {
77
var mod = {
88
exports: {}
99
};
10-
factory(mod.exports, global.diff, global.added, global.deleted, global.updated, global.detailed);
10+
factory(mod.exports, global.diff, global.added, global.deleted, global.updated, global.detailed,global.preserveArray);
1111
global.index = mod.exports;
1212
}
13-
})(this, function (exports, _diff, _added, _deleted, _updated, _detailed) {
13+
})(this, function (exports, _diff, _added, _deleted, _updated, _detailed,_preserveArray) {
1414
'use strict';
1515

1616
Object.defineProperty(exports, "__esModule", {
1717
value: true
1818
});
19-
exports.detailedDiff = exports.updatedDiff = exports.deletedDiff = exports.diff = exports.addedDiff = undefined;
19+
exports.preserveArray=exports.detailedDiff = exports.updatedDiff = exports.deletedDiff = exports.diff = exports.addedDiff = undefined;
2020

2121
var _diff2 = _interopRequireDefault(_diff);
2222

@@ -28,6 +28,8 @@
2828

2929
var _detailed2 = _interopRequireDefault(_detailed);
3030

31+
var _preserveArray2 = _interopRequireDefault(_preserveArray);
32+
3133
function _interopRequireDefault(obj) {
3234
return obj && obj.__esModule ? obj : {
3335
default: obj
@@ -39,4 +41,5 @@
3941
exports.deletedDiff = _deleted2.default;
4042
exports.updatedDiff = _updated2.default;
4143
exports.detailedDiff = _detailed2.default;
44+
exports.preserveArray = _preserveArray2.default;
4245
});

‎dist/updated/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@
6363
return Object.keys(r).reduce(function (acc, key) {
6464

6565
if (l.hasOwnProperty(key)) {
66+
if (Array.isArray(l[key], r[key])) {
67+
return acc;
68+
}
6669
var difference = updatedDiff(l[key], r[key]);
6770

6871
if ((0, _utils.isObject)(difference) && (0, _utils.isEmpty)(difference) && !(0, _utils.isDate)(difference)) return acc;

‎package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
"babel-preset-es2015": "^6.18.0",
3131
"babel-preset-stage-0": "^6.16.0",
3232
"coveralls": "^3.0.0",
33-
"jest": "^26.4.2"
33+
"jest": "^23.6.0",
34+
"lodash": "^4.17.21"
3435
},
3536
"babel": {
3637
"presets": [

‎src/added/index.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import _ from "lodash"
12
import { isEmpty, isObject, properObject } from '../utils';
23

34
const addedDiff = (lhs, rhs) => {
@@ -9,12 +10,39 @@ const addedDiff = (lhs, rhs) => {
910

1011
return Object.keys(r).reduce((acc, key) => {
1112
if (l.hasOwnProperty(key)) {
13+
if (Array.isArray(l[key]) && Array.isArray(r[key])) {
14+
//const allKeys = _.merge(l[key], r[key]) ?? []
15+
const newFields = _.uniq(_.difference(r[key], l[key]))
16+
if (newFields.length === 0) {
17+
return acc
18+
}
19+
const newFieldsIndex = _.map(newFields, o => ({
20+
content: o,
21+
index: []
22+
}))
23+
for (let i = 0; i < r[key].length; i++) {
24+
const index = _.findIndex(newFields, o => _.isEqual(o, r[key][i]))
25+
if (index !== -1) {
26+
newFieldsIndex[index].index.push(i)
27+
}
28+
}
29+
return { ...acc, [key]: { after: newFieldsIndex } }
30+
}
1231
const difference = addedDiff(l[key], r[key]);
1332

1433
if (isObject(difference) && isEmpty(difference)) return acc;
1534

1635
return { ...acc, [key]: difference };
1736
}
37+
if (typeof r[key] === "object" && l[key] === undefined) {
38+
if (Array.isArray(r[key])) {
39+
return { ...acc, [key]: { after: r[key] } };
40+
}
41+
const difference = addedDiff({}, r[key]);
42+
if (isObject(difference) && isEmpty(difference)) return acc;
43+
44+
return { ...acc, [key]: difference };
45+
}
1846

1947
return { ...acc, [key]: { after: r[key] } };
2048
}, {});

‎src/deleted/index.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import _ from "lodash"
12
import { isEmpty, isObject, properObject } from '../utils';
23

34
const deletedDiff = (lhs, rhs) => {
@@ -8,12 +9,38 @@ const deletedDiff = (lhs, rhs) => {
89

910
return Object.keys(l).reduce((acc, key) => {
1011
if (r.hasOwnProperty(key)) {
12+
if (Array.isArray(l[key]) && Array.isArray(r[key])) {
13+
const oldFields = _.uniq(_.difference(l[key], r[key]))
14+
if (oldFields.length === 0) {
15+
return acc
16+
}
17+
const oldFieldsIndex = _.map(oldFields, o => ({
18+
content: o,
19+
index: []
20+
}))
21+
for (let i = 0; i < l[key].length; i++) {
22+
const index = _.findIndex(oldFields, o => _.isEqual(o, l[key][i]))
23+
if (index !== -1) {
24+
oldFieldsIndex[index].index.push(i)
25+
}
26+
}
27+
return { ...acc, [key]: { before: oldFieldsIndex } }
28+
}
1129
const difference = deletedDiff(l[key], r[key]);
1230

1331
if (isObject(difference) && isEmpty(difference)) return acc;
1432

1533
return { ...acc, [key]: difference };
1634
}
35+
if (typeof l[key] === "object" && r[key] === undefined) {
36+
if (Array.isArray(l[key])) {
37+
return { ...acc, [key]: { before: l[key] } };
38+
}
39+
const difference = deletedDiff(l[key], {});
40+
if (isObject(difference) && isEmpty(difference)) return acc;
41+
42+
return { ...acc, [key]: difference };
43+
}
1744

1845
return { ...acc, [key]: { before: l[key] ,after: undefined } };
1946
}, {});

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /