UNPKG

4.75 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.printBuffer = printBuffer;
7
8var _helpers = require('./helpers');
9
10var _diff = require('./diff');
11
12var _diff2 = _interopRequireDefault(_diff);
13
14function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
16function _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); } }
17
18function _typeof(obj) { return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; }
19
20/**
21 * Get log level string based on supplied params
22 *
23 * @param {string | function | object} level - console[level]
24 * @param {object} action - selected action
25 * @param {array} payload - selected payload
26 * @param {string} type - log entry type
27 *
28 * @returns {string} level
29 */
30function getLogLevel(level, action, payload, type) {
31 switch (typeof level === 'undefined' ? 'undefined' : _typeof(level)) {
32 case 'object':
33 return typeof level[type] === 'function' ? level[type].apply(level, _toConsumableArray(payload)) : level[type];
34 case 'function':
35 return level(action);
36 default:
37 return level;
38 }
39}
40
41function defaultTitleFormatter(options) {
42 var timestamp = options.timestamp;
43 var duration = options.duration;
44
45 return function (action, time, took) {
46 var parts = ['action'];
47 if (timestamp) {
48 parts.push('@ ' + time);
49 }
50 parts.push(action.type);
51 if (duration) {
52 parts.push('(in ' + took.toFixed(2) + ' ms)');
53 }
54 return parts.join(' ');
55 };
56}
57
58function printBuffer(buffer, options) {
59 var logger = options.logger;
60 var actionTransformer = options.actionTransformer;
61 var _options$titleFormatt = options.titleFormatter;
62 var titleFormatter = _options$titleFormatt === undefined ? defaultTitleFormatter(options) : _options$titleFormatt;
63 var collapsed = options.collapsed;
64 var colors = options.colors;
65 var level = options.level;
66 var diff = options.diff;
67
68 buffer.forEach(function (logEntry, key) {
69 var started = logEntry.started;
70 var startedTime = logEntry.startedTime;
71 var action = logEntry.action;
72 var prevState = logEntry.prevState;
73 var error = logEntry.error;
74 var took = logEntry.took;
75 var nextState = logEntry.nextState;
76
77 var nextEntry = buffer[key + 1];
78
79 if (nextEntry) {
80 nextState = nextEntry.prevState;
81 took = nextEntry.started - started;
82 }
83
84 // Message
85 var formattedAction = actionTransformer(action);
86 var isCollapsed = typeof collapsed === 'function' ? collapsed(function () {
87 return nextState;
88 }, action, logEntry) : collapsed;
89
90 var formattedTime = (0, _helpers.formatTime)(startedTime);
91 var titleCSS = colors.title ? 'color: ' + colors.title(formattedAction) + ';' : null;
92 var title = titleFormatter(formattedAction, formattedTime, took);
93
94 // Render
95 try {
96 if (isCollapsed) {
97 if (colors.title) logger.groupCollapsed('%c ' + title, titleCSS);else logger.groupCollapsed(title);
98 } else {
99 if (colors.title) logger.group('%c ' + title, titleCSS);else logger.group(title);
100 }
101 } catch (e) {
102 logger.log(title);
103 }
104
105 var prevStateLevel = getLogLevel(level, formattedAction, [prevState], 'prevState');
106 var actionLevel = getLogLevel(level, formattedAction, [formattedAction], 'action');
107 var errorLevel = getLogLevel(level, formattedAction, [error, prevState], 'error');
108 var nextStateLevel = getLogLevel(level, formattedAction, [nextState], 'nextState');
109
110 if (prevStateLevel) {
111 if (colors.prevState) logger[prevStateLevel]('%c prev state', 'color: ' + colors.prevState(prevState) + '; font-weight: bold', prevState);else logger[prevStateLevel]('prev state', prevState);
112 }
113
114 if (actionLevel) {
115 if (colors.action) logger[actionLevel]('%c action', 'color: ' + colors.action(formattedAction) + '; font-weight: bold', formattedAction);else logger[actionLevel]('action', formattedAction);
116 }
117
118 if (error && errorLevel) {
119 if (colors.error) logger[errorLevel]('%c error', 'color: ' + colors.error(error, prevState) + '; font-weight: bold', error);else logger[errorLevel]('error', error);
120 }
121
122 if (nextStateLevel) {
123 if (colors.nextState) logger[nextStateLevel]('%c next state', 'color: ' + colors.nextState(nextState) + '; font-weight: bold', nextState);else logger[nextStateLevel]('next state', nextState);
124 }
125
126 if (diff) {
127 (0, _diff2.default)(prevState, nextState, logger, isCollapsed);
128 }
129
130 try {
131 logger.groupEnd();
132 } catch (e) {
133 logger.log('—— log end ——');
134 }
135 });
136}
\No newline at end of file