@@ -36,6 +36,12 @@ export interface Packet {
36
36
*/
37
37
38
38
export class Encoder {
39
+ /**
40
+ * Encoder constructor
41
+ *
42
+ * @param {function } replacer - custom replacer to pass down to JSON.parse
43
+ */
44
+ constructor ( private replacer ?: ( this : any , key : string , value : any ) => any ) { }
39
45
/**
40
46
* Encode a packet as a single string if non-binary, or as a
41
47
* buffer sequence, depending on packet type.
@@ -86,7 +92,7 @@ export class Encoder {
86
92
87
93
// json data
88
94
if ( null != obj . data ) {
89
- str += JSON . stringify ( obj . data ) ;
95
+ str += JSON . stringify ( obj . data , this . replacer ) ;
90
96
}
91
97
92
98
debug ( "encoded %j as %s" , obj , str ) ;
@@ -121,7 +127,12 @@ interface DecoderReservedEvents {
121
127
export class Decoder extends Emitter < { } , { } , DecoderReservedEvents > {
122
128
private reconstructor : BinaryReconstructor ;
123
129
124
- constructor ( ) {
130
+ /**
131
+ * Decoder constructor
132
+ *
133
+ * @param {function } reviver - custom reviver to pass down to JSON.stringify
134
+ */
135
+ constructor ( private reviver ?: ( this : any , key : string , value : any ) => any ) {
125
136
super ( ) ;
126
137
}
127
138
@@ -228,7 +239,7 @@ export class Decoder extends Emitter<{}, {}, DecoderReservedEvents> {
228
239
229
240
// look up json data
230
241
if ( str . charAt ( ++ i ) ) {
231
- const payload = tryParse ( str . substr ( i ) ) ;
242
+ const payload = this . tryParse ( str . substr ( i ) ) ;
232
243
if ( Decoder . isPayloadValid ( p . type , payload ) ) {
233
244
p . data = payload ;
234
245
} else {
@@ -240,6 +251,14 @@ export class Decoder extends Emitter<{}, {}, DecoderReservedEvents> {
240
251
return p ;
241
252
}
242
253
254
+ private tryParse ( str ) {
255
+ try {
256
+ return JSON . parse ( str , this . reviver ) ;
257
+ } catch ( e ) {
258
+ return false ;
259
+ }
260
+ }
261
+
243
262
private static isPayloadValid ( type : PacketType , payload : any ) : boolean {
244
263
switch ( type ) {
245
264
case PacketType . CONNECT :
@@ -267,14 +286,6 @@ export class Decoder extends Emitter<{}, {}, DecoderReservedEvents> {
267
286
}
268
287
}
269
288
270
- function tryParse ( str ) {
271
- try {
272
- return JSON . parse ( str ) ;
273
- } catch ( e ) {
274
- return false ;
275
- }
276
- }
277
-
278
289
/**
279
290
* A manager of a binary event's 'buffer sequence'. Should
280
291
* be constructed whenever a packet of type BINARY_EVENT is
0 commit comments