Skip to content

Commit

Permalink
feat: allow the usage of custom replacer and reviver (#112)
Browse files Browse the repository at this point in the history
Co-authored-by: Mocanu Cristian <mocanu.cristian93@gmail.com>
  • Loading branch information
bytenik and cmocanu authored Apr 17, 2022
1 parent aed252c commit b08bc1a
Showing 1 changed file with 22 additions and 11 deletions.
33 changes: 22 additions & 11 deletions lib/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@ export interface Packet {
*/

export class Encoder {
/**
* Encoder constructor
*
* @param {function} replacer - custom replacer to pass down to JSON.parse
*/
constructor(private replacer?: (this: any, key: string, value: any) => any) {}
/**
* Encode a packet as a single string if non-binary, or as a
* buffer sequence, depending on packet type.
Expand Down Expand Up @@ -86,7 +92,7 @@ export class Encoder {

// json data
if (null != obj.data) {
str += JSON.stringify(obj.data);
str += JSON.stringify(obj.data, this.replacer);
}

debug("encoded %j as %s", obj, str);
Expand Down Expand Up @@ -121,7 +127,12 @@ interface DecoderReservedEvents {
export class Decoder extends Emitter<{}, {}, DecoderReservedEvents> {
private reconstructor: BinaryReconstructor;

constructor() {
/**
* Decoder constructor
*
* @param {function} reviver - custom reviver to pass down to JSON.stringify
*/
constructor(private reviver?: (this: any, key: string, value: any) => any) {
super();
}

Expand Down Expand Up @@ -228,7 +239,7 @@ export class Decoder extends Emitter<{}, {}, DecoderReservedEvents> {

// look up json data
if (str.charAt(++i)) {
const payload = tryParse(str.substr(i));
const payload = this.tryParse(str.substr(i));
if (Decoder.isPayloadValid(p.type, payload)) {
p.data = payload;
} else {
Expand All @@ -240,6 +251,14 @@ export class Decoder extends Emitter<{}, {}, DecoderReservedEvents> {
return p;
}

private tryParse(str) {
try {
return JSON.parse(str, this.reviver);
} catch (e) {
return false;
}
}

private static isPayloadValid(type: PacketType, payload: any): boolean {
switch (type) {
case PacketType.CONNECT:
Expand Down Expand Up @@ -267,14 +286,6 @@ export class Decoder extends Emitter<{}, {}, DecoderReservedEvents> {
}
}

function tryParse(str) {
try {
return JSON.parse(str);
} catch (e) {
return false;
}
}

/**
* A manager of a binary event's 'buffer sequence'. Should
* be constructed whenever a packet of type BINARY_EVENT is
Expand Down

0 comments on commit b08bc1a

Please sign in to comment.