@@ -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