@@ -7,49 +7,81 @@ export default function createLogger ({
77 filter = ( mutation , stateBefore , stateAfter ) => true ,
88 transformer = state => state ,
99 mutationTransformer = mut => mut ,
10+ actionFilter = ( action , state ) => true ,
11+ actionTransformer = act => act ,
12+ logActions = true ,
13+ logMutations = true ,
1014 logger = console
1115} = { } ) {
1216 return store => {
1317 let prevState = deepCopy ( store . state )
1418
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 )
3537 }
3638
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+ }
4042
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 )
4553 }
46- }
54+ } )
55+ }
56+ }
57+ }
4758
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 ——' )
5077 }
5178}
5279
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+
5385function repeat ( str , times ) {
5486 return ( new Array ( times + 1 ) ) . join ( str )
5587}
0 commit comments