1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
4 | Object.defineProperty(exports, "__esModule", {
|
5 | value: true
|
6 | });
|
7 | exports.default = diff;
|
8 | var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
9 | var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
10 | var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
11 |
|
12 |
|
13 | function createArray() {
|
14 | var arr = [];
|
15 | arr.__proto__ = new Array();
|
16 | arr.__proto__.format = function toString() {
|
17 | return this.map(function (obj) {
|
18 | return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, obj), {}, {
|
19 | path: obj.path.join(' > ')
|
20 | });
|
21 | });
|
22 | };
|
23 | arr.__proto__.toString = function toString() {
|
24 | return JSON.stringify(this.format(), null, 2);
|
25 | };
|
26 | return arr;
|
27 | }
|
28 | function diff(obj1, obj2) {
|
29 | var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;
|
30 | var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
31 | var diffList = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : createArray();
|
32 | if (depth <= 0) return diffList;
|
33 | var keys = new Set([].concat((0, _toConsumableArray2.default)(Object.keys(obj1)), (0, _toConsumableArray2.default)(Object.keys(obj2))));
|
34 | keys.forEach(function (key) {
|
35 | var value1 = obj1[key];
|
36 | var value2 = obj2[key];
|
37 |
|
38 |
|
39 | if (value1 === value2) return;
|
40 | var type1 = (0, _typeof2.default)(value1);
|
41 | var type2 = (0, _typeof2.default)(value2);
|
42 |
|
43 |
|
44 | if (type1 !== type2) {
|
45 | diffList.push({
|
46 | path: path.concat(key),
|
47 | value1: value1,
|
48 | value2: value2
|
49 | });
|
50 | return;
|
51 | }
|
52 |
|
53 |
|
54 | if (Number.isNaN(value1) && Number.isNaN(value2)) {
|
55 | return;
|
56 | }
|
57 |
|
58 |
|
59 | if (type1 === 'object' && value1 !== null && value2 !== null) {
|
60 | diff(value1, value2, depth - 1, path.concat(key), diffList);
|
61 | return;
|
62 | }
|
63 |
|
64 |
|
65 | diffList.push({
|
66 | path: path.concat(key),
|
67 | value1: value1,
|
68 | value2: value2
|
69 | });
|
70 | });
|
71 | return diffList;
|
72 | } |
\ | No newline at end of file |