UNPKG

3.89 kBJavaScriptView Raw
1'use strict';
2
3var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8
9var _core = require('./core');
10
11var _helpers = require('./helpers');
12
13var _defaults = require('./defaults');
14
15var _defaults2 = _interopRequireDefault(_defaults);
16
17function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
19/**
20 * Creates logger with following options
21 *
22 * @namespace
23 * @param {object} options - options for logger
24 * @param {string | function | object} options.level - console[level]
25 * @param {boolean} options.duration - print duration of each action?
26 * @param {boolean} options.timestamp - print timestamp with each action?
27 * @param {object} options.colors - custom colors
28 * @param {object} options.logger - implementation of the `console` API
29 * @param {boolean} options.logErrors - should errors in action execution be caught, logged, and re-thrown?
30 * @param {boolean} options.collapsed - is group collapsed?
31 * @param {boolean} options.predicate - condition which resolves logger behavior
32 * @param {function} options.stateTransformer - transform state before print
33 * @param {function} options.actionTransformer - transform action before print
34 * @param {function} options.errorTransformer - transform error before print
35 *
36 * @returns {function} logger middleware
37 */
38function createLogger() {
39 var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
40
41 var loggerOptions = _extends({}, _defaults2.default, options);
42
43 var logger = loggerOptions.logger;
44 var transformer = loggerOptions.transformer;
45 var stateTransformer = loggerOptions.stateTransformer;
46 var errorTransformer = loggerOptions.errorTransformer;
47 var predicate = loggerOptions.predicate;
48 var logErrors = loggerOptions.logErrors;
49 var diffPredicate = loggerOptions.diffPredicate;
50
51 // Return if 'console' object is not defined
52
53 if (typeof logger === 'undefined') {
54 return function () {
55 return function (next) {
56 return function (action) {
57 return next(action);
58 };
59 };
60 };
61 }
62
63 if (transformer) {
64 console.error('Option \'transformer\' is deprecated, use \'stateTransformer\' instead!'); // eslint-disable-line no-console
65 }
66
67 var logBuffer = [];
68
69 return function (_ref) {
70 var getState = _ref.getState;
71 return function (next) {
72 return function (action) {
73 // Exit early if predicate function returns 'false'
74 if (typeof predicate === 'function' && !predicate(getState, action)) {
75 return next(action);
76 }
77
78 var logEntry = {};
79 logBuffer.push(logEntry);
80
81 logEntry.started = _helpers.timer.now();
82 logEntry.startedTime = new Date();
83 logEntry.prevState = stateTransformer(getState());
84 logEntry.action = action;
85
86 var returnedValue = undefined;
87 if (logErrors) {
88 try {
89 returnedValue = next(action);
90 } catch (e) {
91 logEntry.error = errorTransformer(e);
92 }
93 } else {
94 returnedValue = next(action);
95 }
96
97 logEntry.took = _helpers.timer.now() - logEntry.started;
98 logEntry.nextState = stateTransformer(getState());
99
100 var diff = loggerOptions.diff && typeof diffPredicate === 'function' ? diffPredicate(getState, action) : loggerOptions.diff;
101
102 (0, _core.printBuffer)(logBuffer, _extends({}, loggerOptions, { diff: diff }));
103 logBuffer.length = 0;
104
105 if (logEntry.error) throw logEntry.error;
106 return returnedValue;
107 };
108 };
109 };
110}
111
112exports.default = createLogger;
113module.exports = exports['default'];
\No newline at end of file