redux-logger
Advanced tools
Comparing version 2.5.0 to 2.5.1
@@ -165,2 +165,3 @@ (function webpackUniversalModuleDefinition(root, factory) { | ||
var started = logEntry.started; | ||
var startedTime = logEntry.startedTime; | ||
var action = logEntry.action; | ||
@@ -179,3 +180,2 @@ var prevState = logEntry.prevState; | ||
var formattedAction = actionTransformer(action); | ||
var time = new Date(started); | ||
var isCollapsed = typeof collapsed === "function" ? collapsed(function () { | ||
@@ -185,3 +185,3 @@ return nextState; | ||
var formattedTime = formatTime(time); | ||
var formattedTime = formatTime(startedTime); | ||
var titleCSS = colors.title ? "color: " + colors.title(formattedAction) + ";" : null; | ||
@@ -233,2 +233,3 @@ var title = "action " + formattedAction.type + (timestamp ? formattedTime : "") + (duration ? " in " + took.toFixed(2) + " ms" : ""); | ||
logEntry.started = timer.now(); | ||
logEntry.startedTime = new Date(); | ||
logEntry.prevState = stateTransformer(getState()); | ||
@@ -235,0 +236,0 @@ logEntry.action = action; |
@@ -1,1 +0,1 @@ | ||
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.reduxLogger=e():t.reduxLogger=e()}(this,function(){return function(t){function e(o){if(r[o])return r[o].exports;var n=r[o]={exports:{},id:o,loaded:!1};return t[o].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){r(1),t.exports=r(1)},function(t,e){"use strict";function r(){function t(){F.forEach(function(t,e){var r=t.started,n=t.action,u=t.prevState,a=t.error,f=t.took,d=t.nextState,p=F[e+1];p&&(d=p.prevState,f=p.started-r);var g=S(n),x=new Date(r),m="function"==typeof s?s(function(){return d},n):s,h=i(x),y=j.title?"color: "+j.title(g)+";":null,w="action "+g.type+(v?h:"")+(l?" in "+f.toFixed(2)+" ms":"");try{m?j.title?c.groupCollapsed("%c "+w,y):c.groupCollapsed(w):j.title?c.group("%c "+w,y):c.group(w)}catch(b){c.log(w)}j.prevState?c[o]("%c prev state","color: "+j.prevState(u)+"; font-weight: bold",u):c[o]("prev state",u),j.action?c[o]("%c action","color: "+j.action(g)+"; font-weight: bold",g):c[o]("action",g),a&&(j.error?c[o]("%c error","color: "+j.error(a,u)+"; font-weight: bold",a):c[o]("error",a)),j.nextState?c[o]("%c next state","color: "+j.nextState(d)+"; font-weight: bold",d):c[o]("next state",d);try{c.groupEnd()}catch(b){c.log("—— log end ——")}}),F.length=0}var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],r=e.level,o=void 0===r?"log":r,n=e.logger,c=void 0===n?console:n,a=e.logErrors,f=void 0===a?!0:a,s=e.collapsed,d=e.predicate,p=e.duration,l=void 0===p?!1:p,g=e.timestamp,v=void 0===g?!0:g,x=e.transformer,m=e.stateTransformer,h=void 0===m?function(t){return t}:m,y=e.actionTransformer,S=void 0===y?function(t){return t}:y,w=e.errorTransformer,b=void 0===w?function(t){return t}:w,E=e.colors,j=void 0===E?{title:function(){return"#000000"},prevState:function(){return"#9E9E9E"},action:function(){return"#03A9F4"},nextState:function(){return"#4CAF50"},error:function(){return"#F20404"}}:E;if("undefined"==typeof c)return function(){return function(t){return function(e){return t(e)}}};x&&console.error("Option 'transformer' is deprecated, use stateTransformer instead");var F=[];return function(e){var r=e.getState;return function(e){return function(o){if("function"==typeof d&&!d(r,o))return e(o);var n={};F.push(n),n.started=u.now(),n.prevState=h(r()),n.action=o;var i=void 0;if(f)try{i=e(o)}catch(c){n.error=b(c)}else i=e(o);if(n.took=u.now()-n.started,n.nextState=h(r()),t(),n.error)throw n.error;return i}}}}var o=function(t,e){return new Array(e+1).join(t)},n=function(t,e){return o("0",e-t.toString().length)+t},i=function(t){return" @ "+n(t.getHours(),2)+":"+n(t.getMinutes(),2)+":"+n(t.getSeconds(),2)+"."+n(t.getMilliseconds(),3)},u="undefined"!=typeof performance&&"function"==typeof performance.now?performance:Date;t.exports=r}])}); | ||
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.reduxLogger=e():t.reduxLogger=e()}(this,function(){return function(t){function e(o){if(r[o])return r[o].exports;var n=r[o]={exports:{},id:o,loaded:!1};return t[o].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){r(1),t.exports=r(1)},function(t,e){"use strict";function r(){function t(){j.forEach(function(t,e){var r=t.started,n=t.startedTime,u=t.action,a=t.prevState,f=t.error,d=t.took,p=t.nextState,g=j[e+1];g&&(p=g.prevState,d=g.started-r);var m=S(u),x="function"==typeof s?s(function(){return p},u):s,h=i(n),y=T.title?"color: "+T.title(m)+";":null,w="action "+m.type+(v?h:"")+(l?" in "+d.toFixed(2)+" ms":"");try{x?T.title?c.groupCollapsed("%c "+w,y):c.groupCollapsed(w):T.title?c.group("%c "+w,y):c.group(w)}catch(b){c.log(w)}T.prevState?c[o]("%c prev state","color: "+T.prevState(a)+"; font-weight: bold",a):c[o]("prev state",a),T.action?c[o]("%c action","color: "+T.action(m)+"; font-weight: bold",m):c[o]("action",m),f&&(T.error?c[o]("%c error","color: "+T.error(f,a)+"; font-weight: bold",f):c[o]("error",f)),T.nextState?c[o]("%c next state","color: "+T.nextState(p)+"; font-weight: bold",p):c[o]("next state",p);try{c.groupEnd()}catch(b){c.log("—— log end ——")}}),j.length=0}var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],r=e.level,o=void 0===r?"log":r,n=e.logger,c=void 0===n?console:n,a=e.logErrors,f=void 0===a?!0:a,s=e.collapsed,d=e.predicate,p=e.duration,l=void 0===p?!1:p,g=e.timestamp,v=void 0===g?!0:g,m=e.transformer,x=e.stateTransformer,h=void 0===x?function(t){return t}:x,y=e.actionTransformer,S=void 0===y?function(t){return t}:y,w=e.errorTransformer,b=void 0===w?function(t){return t}:w,E=e.colors,T=void 0===E?{title:function(){return"#000000"},prevState:function(){return"#9E9E9E"},action:function(){return"#03A9F4"},nextState:function(){return"#4CAF50"},error:function(){return"#F20404"}}:E;if("undefined"==typeof c)return function(){return function(t){return function(e){return t(e)}}};m&&console.error("Option 'transformer' is deprecated, use stateTransformer instead");var j=[];return function(e){var r=e.getState;return function(e){return function(o){if("function"==typeof d&&!d(r,o))return e(o);var n={};j.push(n),n.started=u.now(),n.startedTime=new Date,n.prevState=h(r()),n.action=o;var i=void 0;if(f)try{i=e(o)}catch(c){n.error=b(c)}else i=e(o);if(n.took=u.now()-n.started,n.nextState=h(r()),t(),n.error)throw n.error;return i}}}}var o=function(t,e){return new Array(e+1).join(t)},n=function(t,e){return o("0",e-t.toString().length)+t},i=function(t){return" @ "+n(t.getHours(),2)+":"+n(t.getMinutes(),2)+":"+n(t.getSeconds(),2)+"."+n(t.getMilliseconds(),3)},u="undefined"!=typeof performance&&"function"==typeof performance.now?performance:Date;t.exports=r}])}); |
@@ -101,2 +101,3 @@ "use strict"; | ||
var started = logEntry.started; | ||
var startedTime = logEntry.startedTime; | ||
var action = logEntry.action; | ||
@@ -115,3 +116,2 @@ var prevState = logEntry.prevState; | ||
var formattedAction = actionTransformer(action); | ||
var time = new Date(started); | ||
var isCollapsed = typeof collapsed === "function" ? collapsed(function () { | ||
@@ -121,3 +121,3 @@ return nextState; | ||
var formattedTime = formatTime(time); | ||
var formattedTime = formatTime(startedTime); | ||
var titleCSS = colors.title ? "color: " + colors.title(formattedAction) + ";" : null; | ||
@@ -169,2 +169,3 @@ var title = "action " + formattedAction.type + (timestamp ? formattedTime : "") + (duration ? " in " + took.toFixed(2) + " ms" : ""); | ||
logEntry.started = timer.now(); | ||
logEntry.startedTime = new Date(); | ||
logEntry.prevState = stateTransformer(getState()); | ||
@@ -171,0 +172,0 @@ logEntry.action = action; |
{ | ||
"name": "redux-logger", | ||
"version": "2.5.0", | ||
"version": "2.5.1", | ||
"description": "Logger for redux", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
@@ -17,4 +17,8 @@ # Logger for Redux | ||
const logger = createLogger(); | ||
const createStoreWithMiddleware = applyMiddleware(thunk, promise, logger)(createStore); | ||
const store = createStoreWithMiddleware(reducer); | ||
const store = createStore( | ||
reducer, | ||
applyMiddleware(thunk, promise, logger) | ||
); | ||
// Note passing middleware as the third argument requires redux@>=3.1.0 | ||
``` | ||
@@ -102,3 +106,3 @@ Logger **must be** last middleware in chain, otherwise it will log thunk and promise, not actual actions ([#20](https://github.com/fcomb/redux-logger/issues/20)). | ||
#### __actionTransformer = (action: Function) => action__ | ||
#### __actionTransformer = (action: Object) => action__ | ||
Transform action before print. Eg. convert Immutable object to plain JSON. | ||
@@ -116,18 +120,31 @@ | ||
```javascript | ||
createLogger({ | ||
predicate: (getState, action) => process.env.NODE_ENV === `development` | ||
}); | ||
import thunk from 'redux-thunk'; | ||
const middlewares = [thunk]; | ||
if (process.env.NODE_ENV === `development`) { | ||
const createLogger = require(`redux-logger`); | ||
const logger = createLogger(); | ||
middlewares.push(logger); | ||
} | ||
const store = compose(applyMiddleware(...middlewares))(createStore)(reducer); | ||
``` | ||
#### log everything except actions with type `AUTH_REMOVE_TOKEN` | ||
#### transform `Symbol()` action type to string | ||
```javascript | ||
createLogger({ | ||
predicate: (getState, action) => action.type !== AUTH_REMOVE_TOKEN | ||
import createLogger from 'redux-logger'; | ||
const logger = createLogger({ | ||
actionTransformer: (action) => ({ | ||
...action, | ||
type: String(action.type), | ||
}); | ||
}); | ||
``` | ||
#### collapse all actions | ||
#### log everything except actions with type `AUTH_REMOVE_TOKEN` | ||
```javascript | ||
createLogger({ | ||
collapsed: true | ||
predicate: (getState, action) => action.type !== AUTH_REMOVE_TOKEN | ||
}); | ||
@@ -145,16 +162,11 @@ ``` | ||
```javascript | ||
createLogger({ | ||
stateTransformer: (state) => { | ||
let newState = {}; | ||
import {Iterable} from 'immutable'; | ||
for (var i of Object.keys(state)) { | ||
if (Immutable.Iterable.isIterable(state[i])) { | ||
newState[i] = state[i].toJS(); | ||
} else { | ||
newState[i] = state[i]; | ||
} | ||
}; | ||
const stateTransformer = (state) => { | ||
if (Iterable.isIterable(state)) return state.toJS(); | ||
else return state; | ||
}; | ||
return newState; | ||
} | ||
const logger = createLogger({ | ||
stateTransformer, | ||
}); | ||
@@ -161,0 +173,0 @@ ``` |
@@ -60,3 +60,3 @@ const repeat = (str, times) => (new Array(times + 1)).join(str); | ||
logBuffer.forEach((logEntry, key) => { | ||
const { started, action, prevState, error } = logEntry; | ||
const { started, startedTime, action, prevState, error } = logEntry; | ||
let { took, nextState } = logEntry; | ||
@@ -70,6 +70,5 @@ const nextEntry = logBuffer[key + 1]; | ||
const formattedAction = actionTransformer(action); | ||
const time = new Date(started); | ||
const isCollapsed = (typeof collapsed === `function`) ? collapsed(() => nextState, action) : collapsed; | ||
const formattedTime = formatTime(time); | ||
const formattedTime = formatTime(startedTime); | ||
const titleCSS = colors.title ? `color: ${colors.title(formattedAction)};` : null; | ||
@@ -124,2 +123,3 @@ const title = `action ${formattedAction.type}${timestamp ? formattedTime : ``}${duration ? ` in ${took.toFixed(2)} ms` : ``}`; | ||
logEntry.started = timer.now(); | ||
logEntry.startedTime = new Date(); | ||
logEntry.prevState = stateTransformer(getState()); | ||
@@ -126,0 +126,0 @@ logEntry.action = action; |
33591
514
220