@@ -125,7 +125,7 @@ extension LoggerMiddleware {
125125    public  enum  StateDiffTransform  { 
126126        case  diff( linesOfContext:  Int  =  2 ,  prefixLines:  String  =  " π  " ) 
127127        case  newStateOnly
128-         case  recursive( prefixLines:  String  =  " π  " ,  stateName:  String ) 
128+         case  recursive( prefixLines:  String  =  " π  " ,  stateName:  String ,  filters :   [ String ] ?   =   nil ) 
129129        case  custom( ( StateType ? ,  StateType )  ->  String ? ) 
130130
131131        func  transform( oldState:  StateType ? ,  newState:  StateType )  ->  String ?   { 
@@ -137,20 +137,20 @@ extension LoggerMiddleware {
137137                ??  " \( prefixLines)  No state mutation " 
138138            case  . newStateOnly: 
139139                return  dumpToString ( newState) 
140-             case  let  . recursive( prefixLines,  stateName) : 
141-                 return  recursiveDiff ( prefixLines:  prefixLines,  stateName:  stateName,  before:  oldState,  after:  newState) 
140+             case  let  . recursive( prefixLines,  stateName,  filters ) : 
141+                 return  recursiveDiff ( prefixLines:  prefixLines,  stateName:  stateName,  filters :  filters ,   before:  oldState,  after:  newState) 
142142            case  let  . custom( closure) : 
143143                return  closure ( oldState,  newState) 
144144            } 
145145        } 
146146    } 
147147
148-     public  static  func  recursiveDiff( prefixLines:  String ,  stateName:  String ,  before:  StateType ? ,  after:  StateType )  ->  String ?   { 
148+     public  static  func  recursiveDiff( prefixLines:  String ,  stateName:  String ,  filters :   [ String ] ?   =   nil ,   before:  StateType ? ,  after:  StateType )  ->  String ?   { 
149149        // cuts the redundant newline character from the output
150-         diff ( prefix:  prefixLines,  name:  stateName,  lhs:  before,  rhs:  after) ? . trimmingCharacters ( in:  . whitespacesAndNewlines) 
150+         diff ( prefix:  prefixLines,  name:  stateName,  filters :  filters ,   lhs:  before,  rhs:  after) ? . trimmingCharacters ( in:  . whitespacesAndNewlines) 
151151    } 
152152
153-     private  static  func  diff< A> ( prefix:  String ,  name:  String ,  level:  Int  =  0 ,  lhs:  A ? ,  rhs:  A ? )  ->  String ?   { 
153+     private  static  func  diff< A> ( prefix:  String ,  name:  String ,  level:  Int  =  0 ,  filters :   [ String ] ?   =   nil ,   lhs:  A ? ,  rhs:  A ? )  ->  String ?   { 
154154
155155        guard  let  rightHandSide =  rhs,  let  leftHandSide =  lhs else  { 
156156            if  let  rightHandSide =  rhs { 
@@ -215,9 +215,17 @@ extension LoggerMiddleware {
215215            return  Self . diff ( prefix:  " \( prefix) \( toDotOrNotToDot) \( name) " , 
216216                             name:  leftChild. label ??  " # " ,  // label might be missing for items in collections, # represents a collection element
217217                             level:  level +  1 , 
218+                              filters:  filters, 
218219                             lhs:  leftChild. value, 
219220                             rhs:  rightMirror. children. first ( where:  {  $0. label ==  leftChild. label } ) ? . value) 
220-         } ) . compactMap  {  $0 } 
221+         } ) 
222+         . compactMap  {  $0 } 
223+         . filter  {  ( diffLine:  String )  ->  Bool  in 
224+             // filter diffLine if it contains a filterString
225+             false  ==  ( filters ??  [ ] ) . contains ( where:  {  filterString in 
226+                 diffLine. contains ( filterString) 
227+             } ) 
228+         } 
221229
222230        if  strings. count >  0  { 
223231            return  strings. joined ( separator:  " \n " ) 
0 commit comments