@@ -21,30 +21,29 @@ import defaults from './defaults';
2121 *
2222 * @returns {function } logger middleware
2323 */
24- function createLogger ( options = { } ) {
25- const loggerOptions = {
26- ...defaults ,
27- ...options ,
28- } ;
24+ function directlyApplied ( options ) {
25+ return options . getState && options . dispatch ;
26+ }
2927
30- const {
31- logger,
32- stateTransformer,
33- errorTransformer,
34- predicate,
35- logErrors,
36- diffPredicate,
37- } = loggerOptions ;
28+ function noLogger ( options ) {
29+ return typeof options . logger === 'undefined' ;
30+ }
3831
39- // Return if 'console' object is not defined
40- if ( typeof logger === 'undefined' ) {
41- return ( ) => next => action => next ( action ) ;
42- }
32+ function shouldNotLog ( { predicate } , getState , action ) {
33+ return typeof predicate === 'function' && ! predicate ( getState , action ) ;
34+ }
4335
44- // Detect if 'createLogger' was passed directly to 'applyMiddleware'.
45- if ( options . getState && options . dispatch ) {
46- // eslint-disable-next-line no-console
47- console . error ( `[redux-logger] redux-logger not installed. Make sure to pass logger instance as middleware:
36+ function shouldDiff ( { diff, diffPredicate } , getState , action ) {
37+ return diff && typeof diffPredicate === 'function' && diffPredicate ( getState , action ) ;
38+ }
39+
40+ function emptyLogger ( ) {
41+ return ( ) => next => action => next ( action ) ;
42+ }
43+
44+ function emptyLoggerWarning ( ) {
45+ // eslint-disable-next-line no-console
46+ console . error ( `[redux-logger] redux-logger not installed. Make sure to pass logger instance as middleware:
4847// Logger with default options
4948import { logger } from 'redux-logger'
5049const store = createStore(
@@ -61,49 +60,61 @@ const store = createStore(
6160 applyMiddleware(logger)
6261)
6362` ) ;
63+ }
6464
65- return ( ) => next => action => next ( action ) ;
65+ function createLogger ( options = { } ) {
66+ // Detect if 'createLogger' was passed directly to 'applyMiddleware'.
67+ if ( directlyApplied ( options ) ) {
68+ emptyLoggerWarning ( ) ;
69+ return emptyLogger ( ) ;
6670 }
6771
68- const logBuffer = [ ] ;
72+ // Return if 'console' object is not defined
73+ if ( noLogger ( options ) ) return emptyLogger ( ) ;
74+
75+ const loggerOptions = {
76+ ...defaults ,
77+ ...options ,
78+ } ;
6979
7080 return ( { getState } ) => next => ( action ) => {
7181 // Exit early if predicate function returns 'false'
72- if ( typeof predicate === 'function' && ! predicate ( getState , action ) ) {
73- return next ( action ) ;
74- }
75-
76- const logEntry = { } ;
77-
78- logBuffer . push ( logEntry ) ;
79-
80- logEntry . started = timer . now ( ) ;
81- logEntry . startedTime = new Date ( ) ;
82- logEntry . prevState = stateTransformer ( getState ( ) ) ;
83- logEntry . action = action ;
82+ if ( shouldNotLog ( getState , action ) ) return next ( action ) ;
8483
84+ const started = timer . now ( ) ;
85+ const startedTime = new Date ( ) ;
86+ const prevState = loggerOptions . stateTransformer ( getState ( ) ) ;
8587 let returnedValue ;
86- if ( logErrors ) {
87- try {
88- returnedValue = next ( action ) ;
89- } catch ( e ) {
90- logEntry . error = errorTransformer ( e ) ;
91- }
92- } else {
88+ let error ;
89+
90+ try {
9391 returnedValue = next ( action ) ;
92+ } catch ( e ) {
93+ if ( loggerOptions . logErrors ) {
94+ error = loggerOptions . errorTransformer ( e ) ;
95+ } else {
96+ throw e ;
97+ }
9498 }
9599
96- logEntry . took = timer . now ( ) - logEntry . started ;
97- logEntry . nextState = stateTransformer ( getState ( ) ) ;
100+ const took = timer . now ( ) - started ;
101+ const nextState = loggerOptions . stateTransformer ( getState ( ) ) ;
98102
99- const diff = loggerOptions . diff && typeof diffPredicate === 'function' ?
100- diffPredicate ( getState , action ) :
101- loggerOptions . diff ;
103+ loggerOptions . diff = shouldDiff ( loggerOptions , getState , action ) ;
102104
103- printBuffer ( logBuffer , { ...loggerOptions , diff } ) ;
104- logBuffer . length = 0 ;
105+ printBuffer (
106+ [ {
107+ started,
108+ startedTime,
109+ prevState,
110+ action,
111+ error,
112+ took,
113+ nextState,
114+ } ] ,
115+ loggerOptions ) ;
105116
106- if ( logEntry . error ) throw logEntry . error ;
117+ if ( error ) throw error ;
107118 return returnedValue ;
108119 } ;
109120}
0 commit comments