Skip to content

Commit 1d12b41

Browse files
committed
feat: 3.0.0 with breaking change in exports
1 parent c329b94 commit 1d12b41

File tree

6 files changed

+68
-50
lines changed

6 files changed

+68
-50
lines changed

README.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import { applyMiddleware, createStore } from 'redux';
2929

3030
// Logger with default options
31-
import { logger } from 'redux-logger'
31+
import logger from 'redux-logger'
3232
const store = createStore(
3333
reducer,
3434
applyMiddleware(logger)
@@ -40,7 +40,7 @@ const store = createStore(
4040
Or you can create your own logger with custom [options](https://github.com/evgenyrodionov/redux-logger#options):
4141
```javascript
4242
import { applyMiddleware, createStore } from 'redux';
43-
import createLogger from 'redux-logger'
43+
import { createLogger } from 'redux-logger'
4444

4545
const logger = createLogger({
4646
// ...options
@@ -172,12 +172,14 @@ Filter states diff for certain cases.
172172
## Recipes
173173
### Log only in development
174174
```javascript
175-
import thunk from 'redux-thunk';
176-
177-
const middlewares = [thunk];
175+
const middlewares = [];
178176

179177
if (process.env.NODE_ENV === `development`) {
180-
const { logger } = require(`redux-logger`);
178+
const { createLogger } = require(`redux-logger`);
179+
const logger = createLogger({
180+
// ...options
181+
});
182+
181183
middlewares.push(logger);
182184
}
183185

example/src/components/example.jsx

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import React, { Component } from 'react';
22
import { connect } from 'react-redux';
3-
import { bindActionCreators } from 'redux';
4-
import * as AuthActions from 'actions/auth';
3+
import { setToken, removeToken, setInfo } from 'actions/auth';
54

65
import uuid from 'uuid';
76

@@ -10,15 +9,15 @@ const { Grid } = UI;
109

1110
class Example extends Component {
1211
updateToken() {
13-
this.props.actions.setToken(uuid.v4());
12+
this.props.dispatch(setToken(uuid.v4()));
1413
}
1514

1615
removeToken() {
17-
this.props.actions.removeToken();
16+
this.props.dispatch(removeToken());
1817
}
1918

2019
loadUser() {
21-
this.props.actions.setInfo(1, `theaqua`);
20+
this.props.dispatch(setInfo(1, `evgenyrodionov`));
2221
}
2322

2423
render() {
@@ -28,7 +27,7 @@ class Example extends Component {
2827

2928
<Grid.Row>
3029
<Grid.Col xs={12}>
31-
<h2>Auth actions</h2>
30+
<h2>Actions</h2>
3231

3332
<Grid.Row>
3433
<Grid.Col sm={3}>
@@ -41,18 +40,12 @@ class Example extends Component {
4140
<UI.Button kind="primary" block onClick={::this.loadUser}>Load user info</UI.Button>
4241
</Grid.Col>
4342
</Grid.Row>
44-
45-
<ul>
46-
<li><strong>Remove token</strong> produces an action of <code>AUTH_REMOVE_TOKEN</code> type that is not logged because <code>predicate</code> option ignores it.</li>
47-
<li><strong>Load user info</strong> shows the next state in green because logger uses custom <code>colors</code> option.</li>
48-
<li><strong>Update token</strong> is logged with states difference because <code>diff</code> option is turned on. Diff is limited to current action only because of <code>diffPredicate</code> option.</li>
49-
</ul>
5043
</Grid.Col>
5144
</Grid.Row>
5245

5346
<Grid.Row>
5447
<Grid.Col xs={12}>
55-
<h2>State info</h2>
48+
<h2>State</h2>
5649
<pre>{JSON.stringify(this.props.state, null, 2)}</pre>
5750
</Grid.Col>
5851
</Grid.Row>
@@ -62,6 +55,5 @@ class Example extends Component {
6255
}
6356

6457
const pickState = (state) => ({ state });
65-
const pickActions = (dispatch) => ({ actions: bindActionCreators(AuthActions, dispatch) });
6658

67-
export default connect(pickState, pickActions)(Example);
59+
export default connect(pickState)(Example);

example/src/index.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import 'styles/base';
33

44
import React from 'react';
55
import { render } from 'react-dom';
6-
import createLogger from 'redux-logger';
6+
import { createLogger } from '../../src';
77

88
import { createStore, combineReducers, applyMiddleware, compose } from 'redux';
99
import { Provider } from 'react-redux';
@@ -13,8 +13,7 @@ import reducers from 'reducers';
1313
import { AUTH_REMOVE_TOKEN, AUTH_SET_TOKEN } from 'constants/auth';
1414

1515
const logger = createLogger({
16-
predicate: (getState, action) => action.type !== AUTH_REMOVE_TOKEN, // log all actions except AUTH_REMOVE_TOKEN
17-
duration: true,
16+
collapsed: true,
1817
});
1918

2019
const reducer = combineReducers(reducers);

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "redux-logger",
3-
"version": "2.10.2",
3+
"version": "3.0.0",
44
"description": "Logger for Redux",
55
"main": "lib/index.js",
66
"scripts": {

spec/index.spec.js

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,59 @@
11
import { expect } from 'chai';
2-
3-
import { repeat } from 'helpers';
2+
import sinon from 'sinon';
43

54
import { applyMiddleware, createStore } from 'redux';
65

7-
import sinon from 'sinon';
8-
9-
import createLogger from '../src';
6+
import { repeat } from 'helpers';
7+
import logger, { createLogger } from '../src';
108

119
context(`Helpers`, () => {
12-
describe(`'repeat'`, () => {
10+
describe(`repeat`, () => {
1311
it(`should repeat a string the number of indicated times`, () => {
1412
expect(repeat(`teacher`, 3)).to.equal(`teacherteacherteacher`);
1513
});
1614
});
1715
});
1816

19-
context('createLogger', () => {
20-
describe('initialization', () => {
17+
context(`default logger`, () => {
18+
describe(`init`, () => {
2119
beforeEach(() => {
22-
sinon.spy(console, 'error');
20+
sinon.spy(console, `error`);
2321
});
2422

2523
afterEach(() => {
2624
console.error.restore();
2725
});
2826

29-
it('should log an error if the function is passed to applyMiddleware', () => {
27+
it(`should be ok`, () => {
28+
const store = createStore(() => ({}), applyMiddleware(logger));
29+
30+
store.dispatch({ type: `foo` });
31+
sinon.assert.notCalled(console.error);
32+
});
33+
});
34+
});
35+
36+
context(`createLogger`, () => {
37+
describe(`init`, () => {
38+
beforeEach(() => {
39+
sinon.spy(console, `error`);
40+
});
41+
42+
afterEach(() => {
43+
console.error.restore();
44+
});
45+
46+
it(`should throw error if passed direct to applyMiddleware`, () => {
3047
const store = createStore(() => ({}), applyMiddleware(createLogger));
31-
store.dispatch({ type: 'foo' });
48+
49+
store.dispatch({ type: `foo` });
3250
sinon.assert.calledOnce(console.error);
3351
});
3452

35-
it('should not log an error if the correct function is passed', () => {
53+
it(`should be ok`, () => {
3654
const store = createStore(() => ({}), applyMiddleware(createLogger()));
37-
store.dispatch({ type: 'foo' });
55+
56+
store.dispatch({ type: `foo` });
3857
sinon.assert.notCalled(console.error);
3958
});
4059
});

src/index.js

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ function createLogger(options = {}) {
2929

3030
const {
3131
logger,
32-
transformer,
3332
stateTransformer,
3433
errorTransformer,
3534
predicate,
@@ -42,30 +41,21 @@ function createLogger(options = {}) {
4241
return () => next => action => next(action);
4342
}
4443

45-
if (transformer) {
46-
console.error(`Option 'transformer' is deprecated, use 'stateTransformer' instead!`); // eslint-disable-line no-console
47-
}
48-
4944
// Detect if 'createLogger' was passed directly to 'applyMiddleware'.
5045
if (options.getState && options.dispatch) {
5146
// eslint-disable-next-line no-console
5247
console.error(`[redux-logger] redux-logger not installed. Make sure to pass logger instance as middleware:
53-
5448
// Logger with default options
5549
import { logger } from 'redux-logger'
5650
const store = createStore(
5751
reducer,
5852
applyMiddleware(logger)
5953
)
60-
61-
6254
// Or you can create your own logger with custom options http://bit.ly/redux-logger-options
6355
import createLogger from 'redux-logger'
64-
6556
const logger = createLogger({
6657
// ...options
6758
});
68-
6959
const store = createStore(
7060
reducer,
7161
applyMiddleware(logger)
@@ -84,6 +74,7 @@ const store = createStore(
8474
}
8575

8676
const logEntry = {};
77+
8778
logBuffer.push(logEntry);
8879

8980
logEntry.started = timer.now();
@@ -115,11 +106,26 @@ const store = createStore(
115106
};
116107
}
117108

118-
const defaultLogger = createLogger();
109+
const defaultLogger = ({ dispatch, getState } = {}) => {
110+
if (typeof dispatch === `function` || typeof getState === `function`) {
111+
return createLogger()({ dispatch, getState });
112+
} else {
113+
// eslint-disable-next-line no-console
114+
console.error(`
115+
[redux-logger v3] BREAKING CHANGE
116+
[redux-logger v3] Since 3.0.0 redux-logger exports by default logger with default settings.
117+
[redux-logger v3] Change
118+
[redux-logger v3] import createLogger from 'redux-logger'
119+
[redux-logger v3] to
120+
[redux-logger v3] import { createLogger } from 'redux-logger'
121+
`);
122+
}
123+
};
119124

120125
export {
121126
defaults,
127+
createLogger,
122128
defaultLogger as logger,
123129
};
124130

125-
export default createLogger;
131+
export default defaultLogger;

0 commit comments

Comments
 (0)