UNPKG

4.45 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _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; };
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 transformer = loggerOptions.transformer,
45 stateTransformer = loggerOptions.stateTransformer,
46 errorTransformer = loggerOptions.errorTransformer,
47 predicate = loggerOptions.predicate,
48 logErrors = loggerOptions.logErrors,
49 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 // Detect if 'createLogger' was passed directly to 'applyMiddleware'.
68 if (options.getState && options.dispatch) {
69 // eslint-disable-next-line no-console
70 console.error('redux-logger not installed. Make sure to pass logger instance as middleware:\n\nimport createLogger from \'redux-logger\';\n\nconst logger = createLogger();\nconst store = createStore(\n reducer,\n applyMiddleware(logger)\n);');
71
72 return function () {
73 return function (next) {
74 return function (action) {
75 return next(action);
76 };
77 };
78 };
79 }
80
81 var logBuffer = [];
82
83 return function (_ref) {
84 var getState = _ref.getState;
85 return function (next) {
86 return function (action) {
87 // Exit early if predicate function returns 'false'
88 if (typeof predicate === 'function' && !predicate(getState, action)) {
89 return next(action);
90 }
91
92 var logEntry = {};
93 logBuffer.push(logEntry);
94
95 logEntry.started = _helpers.timer.now();
96 logEntry.startedTime = new Date();
97 logEntry.prevState = stateTransformer(getState());
98 logEntry.action = action;
99
100 var returnedValue = void 0;
101 if (logErrors) {
102 try {
103 returnedValue = next(action);
104 } catch (e) {
105 logEntry.error = errorTransformer(e);
106 }
107 } else {
108 returnedValue = next(action);
109 }
110
111 logEntry.took = _helpers.timer.now() - logEntry.started;
112 logEntry.nextState = stateTransformer(getState());
113
114 var diff = loggerOptions.diff && typeof diffPredicate === 'function' ? diffPredicate(getState, action) : loggerOptions.diff;
115
116 (0, _core.printBuffer)(logBuffer, _extends({}, loggerOptions, { diff: diff }));
117 logBuffer.length = 0;
118
119 if (logEntry.error) throw logEntry.error;
120 return returnedValue;
121 };
122 };
123 };
124}
125
126exports.default = createLogger;
127module.exports = exports['default'];
\No newline at end of file