@resolveio/client-lib-core 15.0.4 → 15.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -74,54 +74,34 @@ export function deepDiffDetails(obj1, obj2) {
74
74
  }
75
75
  return typeof value === 'string' ? `"${value}"` : String(value);
76
76
  };
77
- const formatArrayDiff = (arr1, arr2) => {
78
- let maxLength = Math.max(arr1.length, arr2.length);
79
- let arrayDiff = [];
80
- for (let i = 0; i < maxLength; i++) {
81
- if (i >= arr1.length) {
82
- arrayDiff.push(`added: ${formatValue(arr2[i])}`);
83
- continue;
84
- }
85
- if (i >= arr2.length) {
86
- arrayDiff.push(`removed: ${formatValue(arr1[i])}`);
87
- continue;
88
- }
89
- if (arr1[i] !== arr2[i]) {
90
- arrayDiff.push(`from: ${formatValue(arr1[i])} to: ${formatValue(arr2[i])}`);
91
- }
92
- }
93
- return `[${arrayDiff.join(', ')}]`;
94
- };
95
77
  const formatObjectDiff = (obj1, obj2) => {
96
78
  if (obj1 === null || obj2 === null || typeof obj1 !== 'object' || typeof obj2 !== 'object') {
97
79
  return `from: ${formatValue(obj1)} to: ${formatValue(obj2)}`;
98
80
  }
99
- if (Array.isArray(obj1) && Array.isArray(obj2)) {
100
- return formatArrayDiff(obj1, obj2);
101
- }
102
- return Object.keys(obj1).map(key => {
103
- if (typeof obj1[key] === 'object' && obj1[key] !== null && obj2[key] !== null) {
104
- return `${toTitleCase(key)}: {${formatObjectDiff(obj1[key], obj2[key])}}`;
81
+ if (Array.isArray(obj1) || Array.isArray(obj2)) {
82
+ const arr1 = Array.isArray(obj1) ? obj1 : [];
83
+ const arr2 = Array.isArray(obj2) ? obj2 : [];
84
+ const maxLength = Math.max(arr1.length, arr2.length);
85
+ const arrayDiff = [];
86
+ for (let i = 0; i < maxLength; i++) {
87
+ arrayDiff.push(formatObjectDiff(arr1[i], arr2[i]));
105
88
  }
106
- return `${toTitleCase(key)}: from: ${formatValue(obj1[key])} to: ${formatValue(obj2[key])}`;
107
- }).join(', ');
108
- };
109
- const handleDiffType = (diffObj, obj, key) => {
110
- if (Array.isArray(diffObj[key])) {
111
- return `${toTitleCase(key)}: ${formatArrayDiff(obj1[key] || [], obj2[key] || [])}`;
112
- }
113
- else if (typeof diffObj[key] === 'object') {
114
- return `${toTitleCase(key)}: {${formatObjectDiff(obj1[key], obj2[key])}}`;
115
- }
116
- else {
117
- return `${toTitleCase(key)}: from: ${formatValue(obj1[key])} to: ${formatValue(obj2[key])}`;
89
+ return `[${arrayDiff.join(', ')}]`;
118
90
  }
91
+ return Object.keys({ ...obj1, ...obj2 }).map(key => {
92
+ const obj1Val = obj1 ? obj1[key] : undefined;
93
+ const obj2Val = obj2 ? obj2[key] : undefined;
94
+ return `${toTitleCase(key)}: ${formatObjectDiff(obj1Val, obj2Val)}`;
95
+ }).join(', ');
119
96
  };
120
97
  ['added', 'deleted', 'updated'].forEach(diffType => {
121
98
  if (Object.keys(diff[diffType]).length > 0) {
122
99
  diffString += `${toTitleCase(diffType)}:\n`;
123
100
  const updates = Object.keys(diff[diffType])
124
- .map(key => handleDiffType(diff[diffType], diffType === 'deleted' ? obj1 : obj2, key))
101
+ .map(key => {
102
+ const currentValue = diffType === 'deleted' ? obj1[key] : obj2[key];
103
+ return `${toTitleCase(key)}: ${formatObjectDiff(diff[diffType][key], currentValue)}`;
104
+ })
125
105
  .join(',\n');
126
106
  diffString += updates ? `${updates}\n` : '';
127
107
  }
@@ -160,4 +140,4 @@ export function mergeDeep(target, ...sources) {
160
140
  }
161
141
  return mergeDeep(target, ...sources);
162
142
  }
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi91dGlsL2NvbW1vbi5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFO0lBQzNCLE9BQU8sTUFBTSxZQUFZLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7QUFDekUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFHO0lBQzlCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLElBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFHO0lBQzlCLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUk7SUFDNUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNqQixPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFO1FBQ3ZCLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0tBQ1o7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNWLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQUc7SUFDM0Is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Q0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ2pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2lCQUNyQztnQkFDRCxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3BDO2lCQUNJO2dCQUNKLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzlDO1NBQ0Q7S0FDRDtJQUVELE9BQU8sU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXRhaWxlZERpZmYgfSBmcm9tICdkZWVwLW9iamVjdC1kaWZmJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuY29uc3QgaXNPYmplY3QgPSAob2JqZWN0KSA9PiB7XG5cdHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBPYmplY3QgJiYgb2JqZWN0LmNvbnN0cnVjdG9yLm5hbWUgPT09ICdPYmplY3QnO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRvVGl0bGVDYXNlKHN0cikge1xuXHRyZXR1cm4gc3RyLnJlcGxhY2UoL1xcd1xcUyovZywgZnVuY3Rpb24odHh0KXtyZXR1cm4gdHh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpOyB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVXBwZXJDYXNlKHN0cikge1xuXHRyZXR1cm4gKC9eW0EtWl0qJC8pLnRlc3Qoc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhZChudW0sIHNpemUpIHtcblx0bGV0IHMgPSBudW0gKyAnJztcblx0d2hpbGUgKHMubGVuZ3RoIDwgc2l6ZSkge1xuXHRcdHMgPSAnMCcgKyBzO1xuXHR9XG5cdHJldHVybiBzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcENvcHkob2JqKSB7XG5cdHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaiksIGRhdGVSZXZpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVSZXZpdmVyKGtleSwgdmFsdWUpIHtcblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRsZXQgYSA9IC9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlUKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSg/OlxcLlxcZCopPylaJC8uZXhlYyh2YWx1ZSk7XG5cdFx0aWYgKGEpIHtcblx0XHRcdHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQygrYVsxXSwgK2FbMl0gLSAxLCArYVszXSwgK2FbNF0sICthWzVdLCArYVs2XS5zcGxpdCgnLicpWzBdLCArYVs2XS5zcGxpdCgnLicpWzFdKSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGI2NHRvQmxvYlVSTChiNjREYXRhLCBjb250ZW50VHlwZSwgc2xpY2VTaXplPykge1xuXHRiNjREYXRhID0gYjY0RGF0YS5yZXBsYWNlKCdkYXRhOmFwcGxpY2F0aW9uL3BkZjtiYXNlNjQsJywgJycpO1xuXHRjb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlIHx8ICcnO1xuXHRzbGljZVNpemUgPSBzbGljZVNpemUgfHwgNTEyO1xuXG5cdGxldCBieXRlQ2hhcmFjdGVycyA9IGF0b2IoYjY0RGF0YSk7XG5cdGxldCBieXRlQXJyYXlzID0gW107XG5cblx0Zm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBvZmZzZXQgKz0gc2xpY2VTaXplKSB7XG5cdFx0bGV0IHNsaWNlID0gYnl0ZUNoYXJhY3RlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzbGljZVNpemUpO1xuXG5cdFx0bGV0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KHNsaWNlLmxlbmd0aCk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzbGljZS5sZW5ndGg7IGkrKykge1xuXHRcdGJ5dGVOdW1iZXJzW2ldID0gc2xpY2UuY2hhckNvZGVBdChpKTtcblx0XHR9XG5cblx0XHRsZXQgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuXG5cdFx0Ynl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XG5cdH1cblxuXHRsZXQgYmxvYiA9IG5ldyBCbG9iKGJ5dGVBcnJheXMsIHt0eXBlOiBjb250ZW50VHlwZX0pO1xuXHRyZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJsb2JUb0ZpbGUodGhlQmxvYiwgZmlsZU5hbWUpIDogRmlsZSB7XG4gICAgLy9BIEJsb2IoKSBpcyBhbG1vc3QgYSBGaWxlKCkgLSBpdCdzIGp1c3QgbWlzc2luZyB0aGUgdHdvIHByb3BlcnRpZXMgYmVsb3cgd2hpY2ggd2Ugd2lsbCBhZGRcbiAgICB0aGVCbG9iLmxhc3RNb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIHRoZUJsb2IubmFtZSA9IGZpbGVOYW1lO1xuICAgIHJldHVybiAoPEZpbGU+dGhlQmxvYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0RhdGFVUkwodXJsLCBjYWxsYmFjaykge1xuXHRsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblx0XHRyZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRjYWxsYmFjayhyZWFkZXIucmVzdWx0KTtcblx0XHR9O1xuXHRcdHJlYWRlci5yZWFkQXNEYXRhVVJMKHhoci5yZXNwb25zZSk7XG5cdH07XG5cdHhoci5vcGVuKCdHRVQnLCB1cmwpO1xuXHR4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xuXHR4aHIuc2VuZCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcERpZmZEZXRhaWxzKG9iajE6IGFueSwgb2JqMjogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgZGlmZiA9IGRldGFpbGVkRGlmZihvYmoyLCBvYmoxKTtcbiAgICBsZXQgZGlmZlN0cmluZyA9ICcnO1xuXG4gICAgY29uc3QgZm9ybWF0VmFsdWUgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XG4gICAgICAgIGlmIChtb21lbnQuaXNEYXRlKHZhbHVlKSB8fCBtb21lbnQodmFsdWUsIG1vbWVudC5JU09fODYwMSwgdHJ1ZSkuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ2xsbGwnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IGBcIiR7dmFsdWV9XCJgIDogU3RyaW5nKHZhbHVlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9ybWF0QXJyYXlEaWZmID0gKGFycjE6IGFueVtdLCBhcnIyOiBhbnlbXSk6IHN0cmluZyA9PiB7XG4gICAgICAgIGxldCBtYXhMZW5ndGggPSBNYXRoLm1heChhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBsZXQgYXJyYXlEaWZmID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPj0gYXJyMS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBhcnJheURpZmYucHVzaChgYWRkZWQ6ICR7Zm9ybWF0VmFsdWUoYXJyMltpXSl9YCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSA+PSBhcnIyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGFycmF5RGlmZi5wdXNoKGByZW1vdmVkOiAke2Zvcm1hdFZhbHVlKGFycjFbaV0pfWApO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFycjFbaV0gIT09IGFycjJbaV0pIHtcbiAgICAgICAgICAgICAgICBhcnJheURpZmYucHVzaChgZnJvbTogJHtmb3JtYXRWYWx1ZShhcnIxW2ldKX0gdG86ICR7Zm9ybWF0VmFsdWUoYXJyMltpXSl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYFske2FycmF5RGlmZi5qb2luKCcsICcpfV1gO1xuICAgIH07XG5cbiAgICBjb25zdCBmb3JtYXRPYmplY3REaWZmID0gKG9iajE6IGFueSwgb2JqMjogYW55KTogc3RyaW5nID0+IHtcbiAgICAgICAgaWYgKG9iajEgPT09IG51bGwgfHwgb2JqMiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqMSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iajIgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gYGZyb206ICR7Zm9ybWF0VmFsdWUob2JqMSl9IHRvOiAke2Zvcm1hdFZhbHVlKG9iajIpfWA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmoxKSAmJiBBcnJheS5pc0FycmF5KG9iajIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0QXJyYXlEaWZmKG9iajEsIG9iajIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iajEpLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmoxW2tleV0gPT09ICdvYmplY3QnICYmIG9iajFba2V5XSAhPT0gbnVsbCAmJiBvYmoyW2tleV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7dG9UaXRsZUNhc2Uoa2V5KX06IHske2Zvcm1hdE9iamVjdERpZmYob2JqMVtrZXldLCBvYmoyW2tleV0pfX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAke3RvVGl0bGVDYXNlKGtleSl9OiBmcm9tOiAke2Zvcm1hdFZhbHVlKG9iajFba2V5XSl9IHRvOiAke2Zvcm1hdFZhbHVlKG9iajJba2V5XSl9YDtcbiAgICAgICAgfSkuam9pbignLCAnKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlRGlmZlR5cGUgPSAoZGlmZk9iajogYW55LCBvYmo6IGFueSwga2V5OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkaWZmT2JqW2tleV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dG9UaXRsZUNhc2Uoa2V5KX06ICR7Zm9ybWF0QXJyYXlEaWZmKG9iajFba2V5XSB8fCBbXSwgb2JqMltrZXldIHx8IFtdKX1gO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkaWZmT2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dG9UaXRsZUNhc2Uoa2V5KX06IHske2Zvcm1hdE9iamVjdERpZmYob2JqMVtrZXldLCBvYmoyW2tleV0pfX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGAke3RvVGl0bGVDYXNlKGtleSl9OiBmcm9tOiAke2Zvcm1hdFZhbHVlKG9iajFba2V5XSl9IHRvOiAke2Zvcm1hdFZhbHVlKG9iajJba2V5XSl9YDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBbJ2FkZGVkJywgJ2RlbGV0ZWQnLCAndXBkYXRlZCddLmZvckVhY2goZGlmZlR5cGUgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZGlmZltkaWZmVHlwZV0pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRpZmZTdHJpbmcgKz0gYCR7dG9UaXRsZUNhc2UoZGlmZlR5cGUpfTpcXG5gO1xuXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVzID0gT2JqZWN0LmtleXMoZGlmZltkaWZmVHlwZV0pXG4gICAgICAgICAgICAgICAgLm1hcChrZXkgPT4gaGFuZGxlRGlmZlR5cGUoZGlmZltkaWZmVHlwZV0sIGRpZmZUeXBlID09PSAnZGVsZXRlZCcgPyBvYmoxIDogb2JqMiwga2V5KSlcbiAgICAgICAgICAgICAgICAuam9pbignLFxcbicpO1xuXG4gICAgICAgICAgICBkaWZmU3RyaW5nICs9IHVwZGF0ZXMgPyBgJHt1cGRhdGVzfVxcbmAgOiAnJztcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRpZmZTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNyb25TdHJpbmdGcm9tRGF0ZShkYXRlOiBEYXRlKSB7XG5cdHJldHVybiBkYXRlLmdldFNlY29uZHMoKSArICcgJyArIGRhdGUuZ2V0TWludXRlcygpICsgJyAnICsgZGF0ZS5nZXRIb3VycygpICsgJyAnICsgZGF0ZS5nZXREYXRlKCkgKyAnICcgKyAoZGF0ZS5nZXRNb250aCgpICsgMSkgKyAnICcgKyBkYXRlLmdldERheSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gczJhYihzKSB7XG5cdGxldCBidWYgPSBuZXcgQXJyYXlCdWZmZXIocy5sZW5ndGgpO1xuXHRsZXQgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG5cdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG5cdGZvciAobGV0IGkgPSAwOyBpICE9PSBzLmxlbmd0aDsgKytpKSB7IHZpZXdbaV0gPSBzLmNoYXJDb2RlQXQoaSkgJiAweEZGOyB9XG5cdHJldHVybiBidWY7IFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEZWVwKHRhcmdldCwgLi4uc291cmNlcykge1xuXHRpZiAoIXNvdXJjZXMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIHRhcmdldDtcblx0fVxuXHRjb25zdCBzb3VyY2UgPSBzb3VyY2VzLnNoaWZ0KCk7XG5cblx0aWYgKGlzT2JqZWN0KHRhcmdldCkgJiYgaXNPYmplY3Qoc291cmNlKSkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIHNvdXJjZSkge1xuXHRcdFx0aWYgKGlzT2JqZWN0KHNvdXJjZVtrZXldKSkge1xuXHRcdFx0XHRpZiAoIXRhcmdldFtrZXldKSB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbih0YXJnZXQsIHsgW2tleV06IHt9IH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1lcmdlRGVlcCh0YXJnZXRba2V5XSwgc291cmNlW2tleV0pO1xuXHRcdFx0fSBcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKHRhcmdldCwgeyBba2V5XTogc291cmNlW2tleV0gfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1lcmdlRGVlcCh0YXJnZXQsIC4uLnNvdXJjZXMpO1xufSJdfQ==
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi91dGlsL2NvbW1vbi5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFO0lBQzNCLE9BQU8sTUFBTSxZQUFZLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7QUFDekUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFHO0lBQzlCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLElBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFHO0lBQzlCLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUk7SUFDNUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNqQixPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFO1FBQ3ZCLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0tBQ1o7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNWLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQUc7SUFDM0Is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LElBQUksTUFBTSxFQUFFO1lBQ3pCLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNqQixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDckM7Z0JBQ0QsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNwQztpQkFDSTtnQkFDSixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUM5QztTQUNEO0tBQ0Q7SUFFRCxPQUFPLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGV0YWlsZWREaWZmIH0gZnJvbSAnZGVlcC1vYmplY3QtZGlmZic7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmNvbnN0IGlzT2JqZWN0ID0gKG9iamVjdCkgPT4ge1xuXHRyZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgT2JqZWN0ICYmIG9iamVjdC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnT2JqZWN0Jztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1RpdGxlQ2FzZShzdHIpIHtcblx0cmV0dXJuIHN0ci5yZXBsYWNlKC9cXHdcXFMqL2csIGZ1bmN0aW9uKHR4dCl7cmV0dXJuIHR4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHR4dC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKTsgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VwcGVyQ2FzZShzdHIpIHtcblx0cmV0dXJuICgvXltBLVpdKiQvKS50ZXN0KHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWQobnVtLCBzaXplKSB7XG5cdGxldCBzID0gbnVtICsgJyc7XG5cdHdoaWxlIChzLmxlbmd0aCA8IHNpemUpIHtcblx0XHRzID0gJzAnICsgcztcblx0fVxuXHRyZXR1cm4gcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBDb3B5KG9iaikge1xuXHRyZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopLCBkYXRlUmV2aXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRlUmV2aXZlcihrZXksIHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0bGV0IGEgPSAvXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0oPzpcXC5cXGQqKT8pWiQvLmV4ZWModmFsdWUpO1xuXHRcdGlmIChhKSB7XG5cdFx0XHRyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoK2FbMV0sICthWzJdIC0gMSwgK2FbM10sICthWzRdLCArYVs1XSwgK2FbNl0uc3BsaXQoJy4nKVswXSwgK2FbNl0uc3BsaXQoJy4nKVsxXSkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiNjR0b0Jsb2JVUkwoYjY0RGF0YSwgY29udGVudFR5cGUsIHNsaWNlU2l6ZT8pIHtcblx0YjY0RGF0YSA9IGI2NERhdGEucmVwbGFjZSgnZGF0YTphcHBsaWNhdGlvbi9wZGY7YmFzZTY0LCcsICcnKTtcblx0Y29udGVudFR5cGUgPSBjb250ZW50VHlwZSB8fCAnJztcblx0c2xpY2VTaXplID0gc2xpY2VTaXplIHx8IDUxMjtcblxuXHRsZXQgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGI2NERhdGEpO1xuXHRsZXQgYnl0ZUFycmF5cyA9IFtdO1xuXG5cdGZvciAobGV0IG9mZnNldCA9IDA7IG9mZnNldCA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgb2Zmc2V0ICs9IHNsaWNlU2l6ZSkge1xuXHRcdGxldCBzbGljZSA9IGJ5dGVDaGFyYWN0ZXJzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2xpY2VTaXplKTtcblxuXHRcdGxldCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShzbGljZS5sZW5ndGgpO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2xpY2UubGVuZ3RoOyBpKyspIHtcblx0XHRieXRlTnVtYmVyc1tpXSA9IHNsaWNlLmNoYXJDb2RlQXQoaSk7XG5cdFx0fVxuXG5cdFx0bGV0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVOdW1iZXJzKTtcblxuXHRcdGJ5dGVBcnJheXMucHVzaChieXRlQXJyYXkpO1xuXHR9XG5cblx0bGV0IGJsb2IgPSBuZXcgQmxvYihieXRlQXJyYXlzLCB7dHlwZTogY29udGVudFR5cGV9KTtcblx0cmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBibG9iVG9GaWxlKHRoZUJsb2IsIGZpbGVOYW1lKSA6IEZpbGUge1xuICAgIC8vQSBCbG9iKCkgaXMgYWxtb3N0IGEgRmlsZSgpIC0gaXQncyBqdXN0IG1pc3NpbmcgdGhlIHR3byBwcm9wZXJ0aWVzIGJlbG93IHdoaWNoIHdlIHdpbGwgYWRkXG4gICAgdGhlQmxvYi5sYXN0TW9kaWZpZWREYXRlID0gbmV3IERhdGUoKTtcbiAgICB0aGVCbG9iLm5hbWUgPSBmaWxlTmFtZTtcbiAgICByZXR1cm4gKDxGaWxlPnRoZUJsb2IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9EYXRhVVJMKHVybCwgY2FsbGJhY2spIHtcblx0bGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHR4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cdFx0bGV0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cdFx0cmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y2FsbGJhY2socmVhZGVyLnJlc3VsdCk7XG5cdFx0fTtcblx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTCh4aHIucmVzcG9uc2UpO1xuXHR9O1xuXHR4aHIub3BlbignR0VUJywgdXJsKTtcblx0eGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJztcblx0eGhyLnNlbmQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBEaWZmRGV0YWlscyhvYmoxOiBhbnksIG9iajI6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IGRpZmYgPSBkZXRhaWxlZERpZmYob2JqMiwgb2JqMSk7XG4gICAgbGV0IGRpZmZTdHJpbmcgPSAnJztcblxuICAgIGNvbnN0IGZvcm1hdFZhbHVlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgICAgICBpZiAobW9tZW50LmlzRGF0ZSh2YWx1ZSkgfHwgbW9tZW50KHZhbHVlLCBtb21lbnQuSVNPXzg2MDEsIHRydWUpLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdsbGxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBgXCIke3ZhbHVlfVwiYCA6IFN0cmluZyh2YWx1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZvcm1hdE9iamVjdERpZmYgPSAob2JqMTogYW55LCBvYmoyOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgICAgICBpZiAob2JqMSA9PT0gbnVsbCB8fCBvYmoyID09PSBudWxsIHx8IHR5cGVvZiBvYmoxICE9PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqMiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBgZnJvbTogJHtmb3JtYXRWYWx1ZShvYmoxKX0gdG86ICR7Zm9ybWF0VmFsdWUob2JqMil9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iajEpIHx8IEFycmF5LmlzQXJyYXkob2JqMikpIHtcbiAgICAgICAgICAgIGNvbnN0IGFycjEgPSBBcnJheS5pc0FycmF5KG9iajEpID8gb2JqMSA6IFtdO1xuICAgICAgICAgICAgY29uc3QgYXJyMiA9IEFycmF5LmlzQXJyYXkob2JqMikgPyBvYmoyIDogW107XG4gICAgICAgICAgICBjb25zdCBtYXhMZW5ndGggPSBNYXRoLm1heChhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgYXJyYXlEaWZmID0gW107XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBhcnJheURpZmYucHVzaChmb3JtYXRPYmplY3REaWZmKGFycjFbaV0sIGFycjJbaV0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGBbJHthcnJheURpZmYuam9pbignLCAnKX1dYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh7Li4ub2JqMSwgLi4ub2JqMn0pLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2JqMVZhbCA9IG9iajEgPyBvYmoxW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBvYmoyVmFsID0gb2JqMiA/IG9iajJba2V5XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBgJHt0b1RpdGxlQ2FzZShrZXkpfTogJHtmb3JtYXRPYmplY3REaWZmKG9iajFWYWwsIG9iajJWYWwpfWA7XG4gICAgICAgIH0pLmpvaW4oJywgJyk7XG4gICAgfTtcblxuICAgIFsnYWRkZWQnLCAnZGVsZXRlZCcsICd1cGRhdGVkJ10uZm9yRWFjaChkaWZmVHlwZSA9PiB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhkaWZmW2RpZmZUeXBlXSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGlmZlN0cmluZyArPSBgJHt0b1RpdGxlQ2FzZShkaWZmVHlwZSl9OlxcbmA7XG5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZXMgPSBPYmplY3Qua2V5cyhkaWZmW2RpZmZUeXBlXSlcbiAgICAgICAgICAgICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGRpZmZUeXBlID09PSAnZGVsZXRlZCcgPyBvYmoxW2tleV0gOiBvYmoyW2tleV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHt0b1RpdGxlQ2FzZShrZXkpfTogJHtmb3JtYXRPYmplY3REaWZmKGRpZmZbZGlmZlR5cGVdW2tleV0sIGN1cnJlbnRWYWx1ZSl9YDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKCcsXFxuJyk7XG5cbiAgICAgICAgICAgIGRpZmZTdHJpbmcgKz0gdXBkYXRlcyA/IGAke3VwZGF0ZXN9XFxuYCA6ICcnO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGlmZlN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ3JvblN0cmluZ0Zyb21EYXRlKGRhdGU6IERhdGUpIHtcblx0cmV0dXJuIGRhdGUuZ2V0U2Vjb25kcygpICsgJyAnICsgZGF0ZS5nZXRNaW51dGVzKCkgKyAnICcgKyBkYXRlLmdldEhvdXJzKCkgKyAnICcgKyBkYXRlLmdldERhdGUoKSArICcgJyArIChkYXRlLmdldE1vbnRoKCkgKyAxKSArICcgJyArIGRhdGUuZ2V0RGF5KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzMmFiKHMpIHtcblx0bGV0IGJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihzLmxlbmd0aCk7XG5cdGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKTtcblx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2Vcblx0Zm9yIChsZXQgaSA9IDA7IGkgIT09IHMubGVuZ3RoOyArK2kpIHsgdmlld1tpXSA9IHMuY2hhckNvZGVBdChpKSAmIDB4RkY7IH1cblx0cmV0dXJuIGJ1ZjsgXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURlZXAodGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG5cdGlmICghc291cmNlcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gdGFyZ2V0O1xuXHR9XG5cdGNvbnN0IHNvdXJjZSA9IHNvdXJjZXMuc2hpZnQoKTtcblxuXHRpZiAoaXNPYmplY3QodGFyZ2V0KSAmJiBpc09iamVjdChzb3VyY2UpKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gc291cmNlKSB7XG5cdFx0XHRpZiAoaXNPYmplY3Qoc291cmNlW2tleV0pKSB7XG5cdFx0XHRcdGlmICghdGFyZ2V0W2tleV0pIHtcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKHRhcmdldCwgeyBba2V5XToge30gfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bWVyZ2VEZWVwKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSk7XG5cdFx0XHR9IFxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24odGFyZ2V0LCB7IFtrZXldOiBzb3VyY2Vba2V5XSB9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWVyZ2VEZWVwKHRhcmdldCwgLi4uc291cmNlcyk7XG59Il19
@@ -191,54 +191,34 @@ function deepDiffDetails(obj1, obj2) {
191
191
  }
192
192
  return typeof value === 'string' ? `"${value}"` : String(value);
193
193
  };
194
- const formatArrayDiff = (arr1, arr2) => {
195
- let maxLength = Math.max(arr1.length, arr2.length);
196
- let arrayDiff = [];
197
- for (let i = 0; i < maxLength; i++) {
198
- if (i >= arr1.length) {
199
- arrayDiff.push(`added: ${formatValue(arr2[i])}`);
200
- continue;
201
- }
202
- if (i >= arr2.length) {
203
- arrayDiff.push(`removed: ${formatValue(arr1[i])}`);
204
- continue;
205
- }
206
- if (arr1[i] !== arr2[i]) {
207
- arrayDiff.push(`from: ${formatValue(arr1[i])} to: ${formatValue(arr2[i])}`);
208
- }
209
- }
210
- return `[${arrayDiff.join(', ')}]`;
211
- };
212
194
  const formatObjectDiff = (obj1, obj2) => {
213
195
  if (obj1 === null || obj2 === null || typeof obj1 !== 'object' || typeof obj2 !== 'object') {
214
196
  return `from: ${formatValue(obj1)} to: ${formatValue(obj2)}`;
215
197
  }
216
- if (Array.isArray(obj1) && Array.isArray(obj2)) {
217
- return formatArrayDiff(obj1, obj2);
218
- }
219
- return Object.keys(obj1).map(key => {
220
- if (typeof obj1[key] === 'object' && obj1[key] !== null && obj2[key] !== null) {
221
- return `${toTitleCase(key)}: {${formatObjectDiff(obj1[key], obj2[key])}}`;
198
+ if (Array.isArray(obj1) || Array.isArray(obj2)) {
199
+ const arr1 = Array.isArray(obj1) ? obj1 : [];
200
+ const arr2 = Array.isArray(obj2) ? obj2 : [];
201
+ const maxLength = Math.max(arr1.length, arr2.length);
202
+ const arrayDiff = [];
203
+ for (let i = 0; i < maxLength; i++) {
204
+ arrayDiff.push(formatObjectDiff(arr1[i], arr2[i]));
222
205
  }
223
- return `${toTitleCase(key)}: from: ${formatValue(obj1[key])} to: ${formatValue(obj2[key])}`;
224
- }).join(', ');
225
- };
226
- const handleDiffType = (diffObj, obj, key) => {
227
- if (Array.isArray(diffObj[key])) {
228
- return `${toTitleCase(key)}: ${formatArrayDiff(obj1[key] || [], obj2[key] || [])}`;
229
- }
230
- else if (typeof diffObj[key] === 'object') {
231
- return `${toTitleCase(key)}: {${formatObjectDiff(obj1[key], obj2[key])}}`;
232
- }
233
- else {
234
- return `${toTitleCase(key)}: from: ${formatValue(obj1[key])} to: ${formatValue(obj2[key])}`;
206
+ return `[${arrayDiff.join(', ')}]`;
235
207
  }
208
+ return Object.keys(Object.assign(Object.assign({}, obj1), obj2)).map(key => {
209
+ const obj1Val = obj1 ? obj1[key] : undefined;
210
+ const obj2Val = obj2 ? obj2[key] : undefined;
211
+ return `${toTitleCase(key)}: ${formatObjectDiff(obj1Val, obj2Val)}`;
212
+ }).join(', ');
236
213
  };
237
214
  ['added', 'deleted', 'updated'].forEach(diffType => {
238
215
  if (Object.keys(diff[diffType]).length > 0) {
239
216
  diffString += `${toTitleCase(diffType)}:\n`;
240
217
  const updates = Object.keys(diff[diffType])
241
- .map(key => handleDiffType(diff[diffType], diffType === 'deleted' ? obj1 : obj2, key))
218
+ .map(key => {
219
+ const currentValue = diffType === 'deleted' ? obj1[key] : obj2[key];
220
+ return `${toTitleCase(key)}: ${formatObjectDiff(diff[diffType][key], currentValue)}`;
221
+ })
242
222
  .join(',\n');
243
223
  diffString += updates ? `${updates}\n` : '';
244
224
  }