Add logging of statediff
This commit is contained in:
parent
1a47e3e8a6
commit
1d582740a8
6
package-lock.json
generated
6
package-lock.json
generated
@ -4420,6 +4420,12 @@
|
|||||||
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
|
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"deep-object-diff": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"deepmerge": {
|
"deepmerge": {
|
||||||
"version": "3.2.0",
|
"version": "3.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.2.0.tgz",
|
||||||
|
|||||||
@ -37,6 +37,7 @@
|
|||||||
"buildfile": "^1.2.22",
|
"buildfile": "^1.2.22",
|
||||||
"bulma": "^0.7.4",
|
"bulma": "^0.7.4",
|
||||||
"cookie-parser": "^1.4.4",
|
"cookie-parser": "^1.4.4",
|
||||||
|
"deep-object-diff": "^1.1.0",
|
||||||
"history": "^4.9.0",
|
"history": "^4.9.0",
|
||||||
"jest": "^24.5.0",
|
"jest": "^24.5.0",
|
||||||
"lerna": "^3.13.1",
|
"lerna": "^3.13.1",
|
||||||
|
|||||||
30
packages/client/src/middleware/ReduxLogger.ts
Normal file
30
packages/client/src/middleware/ReduxLogger.ts
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import {AnyAction, Middleware} from 'redux'
|
||||||
|
import {diff} from 'deep-object-diff'
|
||||||
|
|
||||||
|
export class ReduxLogger {
|
||||||
|
handle: Middleware = store => next => (action: AnyAction) => {
|
||||||
|
const prevState = store.getState()
|
||||||
|
const result = next(action)
|
||||||
|
const nextState = store.getState()
|
||||||
|
|
||||||
|
let type = action.type
|
||||||
|
if ('method' in action && typeof action.method === 'string') {
|
||||||
|
type += ':' + action.method
|
||||||
|
}
|
||||||
|
if ('status' in action && typeof action.status === 'string') {
|
||||||
|
type += ':' + action.status
|
||||||
|
}
|
||||||
|
|
||||||
|
const stateDiff = diff(prevState, nextState)
|
||||||
|
// tslint:disable-next-line
|
||||||
|
console.log(
|
||||||
|
'%s\n action: %O\n stateDiff: %O\n prevState: %O\n nextState: %O',
|
||||||
|
type,
|
||||||
|
action,
|
||||||
|
stateDiff,
|
||||||
|
prevState,
|
||||||
|
nextState,
|
||||||
|
)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1 +1,2 @@
|
|||||||
export * from './PromiseMiddleware'
|
export * from './PromiseMiddleware'
|
||||||
|
export * from './ReduxLogger'
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import {PromiseMiddleware} from '../middleware'
|
import {ReduxLogger, PromiseMiddleware} from '../middleware'
|
||||||
import {
|
import {
|
||||||
applyMiddleware,
|
applyMiddleware,
|
||||||
createStore as create,
|
createStore as create,
|
||||||
@ -20,7 +20,10 @@ export interface ICreateStoreParams<State, A extends Action> {
|
|||||||
export function createStore<State, A extends Action>(
|
export function createStore<State, A extends Action>(
|
||||||
params: ICreateStoreParams<State, A>,
|
params: ICreateStoreParams<State, A>,
|
||||||
) {
|
) {
|
||||||
const middleware = params.middleware || [new PromiseMiddleware().handle]
|
const middleware = params.middleware || [
|
||||||
|
new ReduxLogger().handle,
|
||||||
|
new PromiseMiddleware().handle,
|
||||||
|
]
|
||||||
return (state?: DeepPartial<State>) => create(
|
return (state?: DeepPartial<State>) => create(
|
||||||
params.reducer,
|
params.reducer,
|
||||||
state,
|
state,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user