@@ -7,49 +7,81 @@ 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 = true ,
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
+ }
40
42
41
- try {
42
- logger . groupEnd ( )
43
- } catch ( e ) {
44
- logger . log ( '—— log end ——' )
43
+ if ( logActions ) {
44
+ store . subscribeAction ( ( action , state ) => {
45
+ if ( actionFilter ( action , state ) ) {
46
+ const formattedTime = getFormattedTime ( )
47
+ const formattedAction = actionTransformer ( action )
48
+ const message = `action ${ action . type } ${ formattedTime } `
49
+
50
+ startMessage ( logger , message , collapsed )
51
+ logger . log ( '%c action' , 'color: #03A9F4; font-weight: bold' , formattedAction )
52
+ endMessage ( logger )
45
53
}
46
- }
54
+ } )
55
+ }
56
+ }
57
+ }
47
58
48
- prevState = nextState
49
- } )
59
+ function startMessage ( logger , message , collapsed ) {
60
+ const startMessage = collapsed
61
+ ? logger . groupCollapsed
62
+ : logger . group
63
+
64
+ // render
65
+ try {
66
+ startMessage . call ( logger , message )
67
+ } catch ( e ) {
68
+ logger . log ( message )
69
+ }
70
+ }
71
+
72
+ function endMessage ( logger ) {
73
+ try {
74
+ logger . groupEnd ( )
75
+ } catch ( e ) {
76
+ logger . log ( '—— log end ——' )
50
77
}
51
78
}
52
79
80
+ function getFormattedTime ( ) {
81
+ const time = new Date ( )
82
+ return ` @ ${ pad ( time . getHours ( ) , 2 ) } :${ pad ( time . getMinutes ( ) , 2 ) } :${ pad ( time . getSeconds ( ) , 2 ) } .${ pad ( time . getMilliseconds ( ) , 3 ) } `
83
+ }
84
+
53
85
function repeat ( str , times ) {
54
86
return ( new Array ( times + 1 ) ) . join ( str )
55
87
}
0 commit comments