'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.logger = exports.defaults = undefined; var _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; }; var _core = require('./core'); var _helpers = require('./helpers'); var _defaults = require('./defaults'); var _defaults2 = _interopRequireDefault(_defaults); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Creates logger with following options * * @namespace * @param {object} options - options for logger * @param {string | function | object} options.level - console[level] * @param {boolean} options.duration - print duration of each action? * @param {boolean} options.timestamp - print timestamp with each action? * @param {object} options.colors - custom colors * @param {object} options.logger - implementation of the `console` API * @param {boolean} options.logErrors - should errors in action execution be caught, logged, and re-thrown? * @param {boolean} options.collapsed - is group collapsed? * @param {boolean} options.predicate - condition which resolves logger behavior * @param {function} options.stateTransformer - transform state before print * @param {function} options.actionTransformer - transform action before print * @param {function} options.errorTransformer - transform error before print * * @returns {function} logger middleware */ function createLogger() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var loggerOptions = _extends({}, _defaults2.default, options); var logger = loggerOptions.logger, transformer = loggerOptions.transformer, stateTransformer = loggerOptions.stateTransformer, errorTransformer = loggerOptions.errorTransformer, predicate = loggerOptions.predicate, logErrors = loggerOptions.logErrors, diffPredicate = loggerOptions.diffPredicate; // Return if 'console' object is not defined if (typeof logger === 'undefined') { return function () { return function (next) { return function (action) { return next(action); }; }; }; } if (transformer) { console.error('Option \'transformer\' is deprecated, use \'stateTransformer\' instead!'); // eslint-disable-line no-console } // Detect if 'createLogger' was passed directly to 'applyMiddleware'. if (options.getState && options.dispatch) { // eslint-disable-next-line no-console console.error('[redux-logger] redux-logger not installed. Make sure to pass logger instance as middleware:\n\n// Logger with default options\nimport { logger } from \'redux-logger\'\nconst store = createStore(\n reducer,\n applyMiddleware(logger)\n)\n\n\n// Or you can create your own logger with custom options http://bit.ly/redux-logger-options\nimport createLogger from \'redux-logger\'\n\nconst logger = createLogger({\n // ...options\n});\n\nconst store = createStore(\n reducer,\n applyMiddleware(logger)\n)\n'); return function () { return function (next) { return function (action) { return next(action); }; }; }; } var logBuffer = []; return function (_ref) { var getState = _ref.getState; return function (next) { return function (action) { // Exit early if predicate function returns 'false' if (typeof predicate === 'function' && !predicate(getState, action)) { return next(action); } var logEntry = {}; logBuffer.push(logEntry); logEntry.started = _helpers.timer.now(); logEntry.startedTime = new Date(); logEntry.prevState = stateTransformer(getState()); logEntry.action = action; var returnedValue = void 0; if (logErrors) { try { returnedValue = next(action); } catch (e) { logEntry.error = errorTransformer(e); } } else { returnedValue = next(action); } logEntry.took = _helpers.timer.now() - logEntry.started; logEntry.nextState = stateTransformer(getState()); var diff = loggerOptions.diff && typeof diffPredicate === 'function' ? diffPredicate(getState, action) : loggerOptions.diff; (0, _core.printBuffer)(logBuffer, _extends({}, loggerOptions, { diff: diff })); logBuffer.length = 0; if (logEntry.error) throw logEntry.error; return returnedValue; }; }; }; } var defaultLogger = createLogger(); exports.defaults = _defaults2.default; exports.logger = defaultLogger; exports.default = createLogger; module.exports = exports['default'];