UNPKG

2.07 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = diffLogger;
7
8var _deepDiff = require('deep-diff');
9
10var _deepDiff2 = _interopRequireDefault(_deepDiff);
11
12function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
14function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
15
16// https://github.com/flitbit/diff#differences
17var dictionary = {
18 'E': {
19 color: '#2196F3',
20 text: 'CHANGED:'
21 },
22 'N': {
23 color: '#4CAF50',
24 text: 'ADDED:'
25 },
26 'D': {
27 color: '#F44336',
28 text: 'DELETED:'
29 },
30 'A': {
31 color: '#2196F3',
32 text: 'ARRAY:'
33 }
34};
35
36function style(kind) {
37 return 'color: ' + dictionary[kind].color + '; font-weight: bold';
38}
39
40function render(diff) {
41 var kind = diff.kind,
42 path = diff.path,
43 lhs = diff.lhs,
44 rhs = diff.rhs,
45 index = diff.index,
46 item = diff.item;
47
48
49 switch (kind) {
50 case 'E':
51 return [path.join('.'), lhs, '\u2192', rhs];
52 case 'N':
53 return [path.join('.'), rhs];
54 case 'D':
55 return [path.join('.')];
56 case 'A':
57 return [path.join('.') + '[' + index + ']', item];
58 default:
59 return [];
60 }
61}
62
63function diffLogger(prevState, newState, logger, isCollapsed) {
64 var diff = (0, _deepDiff2.default)(prevState, newState);
65
66 try {
67 if (isCollapsed) {
68 logger.groupCollapsed('diff');
69 } else {
70 logger.group('diff');
71 }
72 } catch (e) {
73 logger.log('diff');
74 }
75
76 if (diff) {
77 diff.forEach(function (elem) {
78 var kind = elem.kind;
79
80 var output = render(elem);
81
82 logger.log.apply(logger, ['%c ' + dictionary[kind].text, style(kind)].concat(_toConsumableArray(output)));
83 });
84 } else {
85 logger.log('\u2014\u2014 no diff \u2014\u2014');
86 }
87
88 try {
89 logger.groupEnd();
90 } catch (e) {
91 logger.log('\u2014\u2014 diff end \u2014\u2014 ');
92 }
93}
94module.exports = exports['default'];
\No newline at end of file