UNPKG

2.04 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 var path = diff.path;
43 var lhs = diff.lhs;
44 var rhs = diff.rhs;
45 var index = diff.index;
46 var item = diff.item;
47
48 switch (kind) {
49 case 'E':
50 return [path.join('.'), lhs, '→', rhs];
51 case 'N':
52 return [path.join('.'), rhs];
53 case 'D':
54 return [path.join('.')];
55 case 'A':
56 return [path.join('.') + '[' + index + ']', item];
57 default:
58 return [];
59 }
60}
61
62function diffLogger(prevState, newState, logger, isCollapsed) {
63 var diff = (0, _deepDiff2.default)(prevState, newState);
64
65 try {
66 if (isCollapsed) {
67 logger.groupCollapsed('diff');
68 } else {
69 logger.group('diff');
70 }
71 } catch (e) {
72 logger.log('diff');
73 }
74
75 if (diff) {
76 diff.forEach(function (elem) {
77 var kind = elem.kind;
78
79 var output = render(elem);
80
81 logger.log.apply(logger, ['%c ' + dictionary[kind].text, style(kind)].concat(_toConsumableArray(output)));
82 });
83 } else {
84 logger.log('—— no diff ——');
85 }
86
87 try {
88 logger.groupEnd();
89 } catch (e) {
90 logger.log('—— diff end —— ');
91 }
92}
93module.exports = exports['default'];
\No newline at end of file