133 lines
4.8 KiB
JavaScript
133 lines
4.8 KiB
JavaScript
'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'];
|