@@ -84,7 +84,13 @@ export class RedisPubSub implements PubSubEngine {
84
84
}
85
85
86
86
public async publish < T > ( trigger : string , payload : T ) : Promise < void > {
87
- await this . redisPublisher . publish ( trigger , this . serializer ? this . serializer ( payload ) : JSON . stringify ( payload ) ) ;
87
+ if ( this . serializer ) {
88
+ await this . redisPublisher . publish ( trigger , this . serializer ( payload ) ) ;
89
+ } else if ( payload instanceof Buffer ) {
90
+ await this . redisPublisher . publish ( trigger , payload ) ;
91
+ } else {
92
+ await this . redisPublisher . publish ( trigger , JSON . stringify ( payload ) ) ;
93
+ }
88
94
}
89
95
90
96
public subscribe < T = any > (
@@ -169,17 +175,23 @@ export class RedisPubSub implements PubSubEngine {
169
175
private readonly subsRefsMap : Map < string , Set < number > > ;
170
176
private currentSubscriptionId : number ;
171
177
172
- private onMessage ( pattern : string , channel : string , message : string ) {
178
+ private onMessage ( pattern : string , channel : string | Buffer , message : string | Buffer ) {
179
+ if ( typeof channel === 'object' ) channel = channel . toString ( 'utf8' ) ;
180
+
173
181
const subscribers = this . subsRefsMap . get ( pattern || channel ) ;
174
182
175
183
// Don't work for nothing..
176
184
if ( ! subscribers ?. size ) return ;
177
185
178
186
let parsedMessage ;
179
187
try {
180
- parsedMessage = this . deserializer
181
- ? this . deserializer ( message , { pattern, channel } )
182
- : JSON . parse ( message , this . reviver ) ;
188
+ if ( this . deserializer ) {
189
+ parsedMessage = this . deserializer ( Buffer . from ( message ) , { pattern, channel } )
190
+ } else if ( typeof message === 'string' ) {
191
+ parsedMessage = JSON . parse ( message , this . reviver ) ;
192
+ } else {
193
+ parsedMessage = message ;
194
+ }
183
195
} catch ( e ) {
184
196
parsedMessage = message ;
185
197
}
0 commit comments