@@ -109,10 +109,46 @@ export class Utils {
109
109
return Math . floor ( Math . random ( ) * 9007199254740992 ) ;
110
110
}
111
111
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 {
114
144
var cache :string [ ] = [ ] ;
115
145
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
+
116
152
if ( typeof value === 'object' && ! ! value ) {
117
153
if ( cache . indexOf ( value ) !== - 1 ) {
118
154
// Circular reference found, discard key
@@ -129,12 +165,12 @@ export class Utils {
129
165
if ( toString . call ( data ) === '[object Array]' ) {
130
166
var result = [ ] ;
131
167
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 || [ ] ) ) ;
133
169
}
134
170
135
171
return JSON . stringify ( result ) ;
136
172
}
137
173
138
- return stringifyImpl ( data ) ;
174
+ return stringifyImpl ( data , exclusions || [ ] ) ;
139
175
}
140
176
}
0 commit comments