UNPKG

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