@@ -7,49 +7,83 @@ export default function createLogger ({
7
7
filter = ( mutation , stateBefore , stateAfter ) => true ,
8
8
transformer = state => state ,
9
9
mutationTransformer = mut => mut ,
10
+ actionFilter = ( action , state ) => true ,
11
+ actionTransformer = act => act ,
12
+ logActions = false ,
13
+ logMutations = true ,
10
14
logger = console
11
15
} = { } ) {
12
16
return store => {
13
17
let prevState = deepCopy ( store . state )
14
18
15
- store . subscribe ( ( mutation , state ) => {
16
- if ( typeof logger === 'undefined' ) {
17
- return
18
- }
19
- const nextState = deepCopy ( state )
20
-
21
- if ( filter ( mutation , prevState , nextState ) ) {
22
- const time = new Date ( )
23
- const formattedTime = ` @ ${ pad ( time . getHours ( ) , 2 ) } :${ pad ( time . getMinutes ( ) , 2 ) } :${ pad ( time . getSeconds ( ) , 2 ) } .${ pad ( time . getMilliseconds ( ) , 3 ) } `
24
- const formattedMutation = mutationTransformer ( mutation )
25
- const message = `mutation ${ mutation . type } ${ formattedTime } `
26
- const startMessage = collapsed
27
- ? logger . groupCollapsed
28
- : logger . group
29
-
30
- // render
31
- try {
32
- startMessage . call ( logger , message )
33
- } catch ( e ) {
34
- console . log ( message )
19
+ if ( typeof logger === 'undefined' ) {
20
+ return
21
+ }
22
+
23
+ if ( logMutations ) {
24
+ store . subscribe ( ( mutation , state ) => {
25
+ const nextState = deepCopy ( state )
26
+
27
+ if ( filter ( mutation , prevState , nextState ) ) {
28
+ const formattedTime = getFormattedTime ( )
29
+ const formattedMutation = mutationTransformer ( mutation )
30
+ const message = `mutation ${ mutation . type } ${ formattedTime } `
31
+
32
+ startMessage ( logger , message , collapsed )
33
+ logger . log ( '%c prev state' , 'color: #9E9E9E; font-weight: bold' , transformer ( prevState ) )
34
+ logger . log ( '%c mutation' , 'color: #03A9F4; font-weight: bold' , formattedMutation )
35
+ logger . log ( '%c next state' , 'color: #4CAF50; font-weight: bold' , transformer ( nextState ) )
36
+ endMessage ( logger )
35
37
}
36
38
37
- logger . log ( '%c prev state' , 'color: #9E9E9E; font-weight: bold' , transformer ( prevState ) )
38
- logger . log ( '%c mutation' , 'color: #03A9F4; font-weight: bold' , formattedMutation )
39
- logger . log ( '%c next state' , 'color: #4CAF50; font-weight: bold' , transformer ( nextState ) )
39
+ prevState = nextState
40
+ } )
41
+ }
42
+
43
+ if ( logActions ) {
44
+ store . subscribeAction ( ( action , state ) => {
45
+ const currentState = deepCopy ( state )
40
46
41
- try {
42
- logger . groupEnd ( )
43
- } catch ( e ) {
44
- logger . log ( '—— log end ——' )
47
+ if ( actionFilter ( action , currentState ) ) {
48
+ const formattedTime = getFormattedTime ( )
49
+ const formattedAction = actionTransformer ( action )
50
+ const message = `action ${ action . type } ${ formattedTime } `
51
+
52
+ startMessage ( logger , message , collapsed )
53
+ logger . log ( '%c action' , 'color: #03A9F4; font-weight: bold' , formattedAction )
54
+ endMessage ( logger )
45
55
}
46
- }
56
+ } )
57
+ }
58
+ }
59
+ }
47
60
48
- prevState = nextState
49
- } )
61
+ function startMessage ( logger , message , collapsed ) {
62
+ const startMessage = collapsed
63
+ ? logger . groupCollapsed
64
+ : logger . group
65
+
66
+ // render
67
+ try {
68
+ startMessage . call ( logger , message )
69
+ } catch ( e ) {
70
+ logger . log ( message )
71
+ }
72
+ }
73
+
74
+ function endMessage ( logger ) {
75
+ try {
76
+ logger . groupEnd ( )
77
+ } catch ( e ) {
78
+ logger . log ( '—— log end ——' )
50
79
}
51
80
}
52
81
82
+ function getFormattedTime ( ) {
83
+ const time = new Date ( )
84
+ return ` @ ${ pad ( time . getHours ( ) , 2 ) } :${ pad ( time . getMinutes ( ) , 2 ) } :${ pad ( time . getSeconds ( ) , 2 ) } .${ pad ( time . getMilliseconds ( ) , 3 ) } `
85
+ }
86
+
53
87
function repeat ( str , times ) {
54
88
return ( new Array ( times + 1 ) ) . join ( str )
55
89
}
0 commit comments