@@ -109,10 +109,46 @@ export class Utils {
109109 return Math . floor ( Math . random ( ) * 9007199254740992 ) ;
110110 }
111111
112- public static stringify ( data :any ) : string {
113- function stringifyImpl ( data :any ) : string {
112+ public static stringify ( data :any , exclusions ?:string [ ] ) : string {
113+ function checkForMatch ( pattern :string , value :string ) : boolean {
114+ if ( ! pattern || ! value || typeof value !== 'string' ) {
115+ return false ;
116+ }
117+
118+ var startsWithWildcard :boolean = pattern [ 0 ] === '*' ;
119+ if ( startsWithWildcard ) {
120+ pattern = pattern . slice ( 1 ) ;
121+ }
122+
123+ var endsWithWildcard :boolean = pattern [ pattern . length - 1 ] === '*' ;
124+ if ( endsWithWildcard ) {
125+ pattern = pattern . substring ( 0 , pattern . length - 1 ) ;
126+ }
127+
128+ pattern = pattern . toLowerCase ( ) ;
129+ value = value . toLowerCase ( ) ;
130+
131+ if ( startsWithWildcard && endsWithWildcard )
132+ return value . indexOf ( pattern ) !== - 1 ;
133+
134+ if ( startsWithWildcard )
135+ return value . lastIndexOf ( pattern , 0 ) !== - 1 ;
136+
137+ if ( endsWithWildcard )
138+ return value . lastIndexOf ( pattern ) === ( value . length - pattern . length ) ;
139+
140+ return value === pattern ;
141+ }
142+
143+ function stringifyImpl ( data :any , exclusions :string [ ] ) : string {
114144 var cache :string [ ] = [ ] ;
115145 return JSON . stringify ( data , function ( key :string , value :any ) {
146+ for ( var index = 0 ; index < ( exclusions || [ ] ) . length ; index ++ ) {
147+ if ( checkForMatch ( exclusions [ index ] , key ) ) {
148+ return ;
149+ }
150+ }
151+
116152 if ( typeof value === 'object' && ! ! value ) {
117153 if ( cache . indexOf ( value ) !== - 1 ) {
118154 // Circular reference found, discard key
@@ -129,12 +165,12 @@ export class Utils {
129165 if ( toString . call ( data ) === '[object Array]' ) {
130166 var result = [ ] ;
131167 for ( var index = 0 ; index < data . length ; index ++ ) {
132- result [ index ] = JSON . parse ( stringifyImpl ( data [ index ] ) ) ;
168+ result [ index ] = JSON . parse ( stringifyImpl ( data [ index ] , exclusions || [ ] ) ) ;
133169 }
134170
135171 return JSON . stringify ( result ) ;
136172 }
137173
138- return stringifyImpl ( data ) ;
174+ return stringifyImpl ( data , exclusions || [ ] ) ;
139175 }
140176}
0 commit comments