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