Skip to content

Commit d0fb80e

Browse files
committed
Refactor index.js
1 parent 385f41c commit d0fb80e

File tree

1 file changed

+61
-50
lines changed

1 file changed

+61
-50
lines changed

src/index.js

Lines changed: 61 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -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
4948
import { logger } from 'redux-logger'
5049
const 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

Comments
 (0)