Skip to content

Commit ae2b649

Browse files
committed
feat: allow RedisClient#subscribe to accept different channel types
1 parent ae091c8 commit ae2b649

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

src/client.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import { TSchema } from "@sinclair/typebox";
21
import { castArrayIfExists } from "radashi";
32
import { RedisChannel, RedisChannelPattern } from "./channel";
43
import { Materialize, RedisCommand, RedisValue } from "./command";
5-
import { MessageEvent, Subscriber } from "./subscriber";
4+
import { ExtractMessageEvent, Subscriber } from "./subscriber";
65
import { ConnectionInstance, RedisClientOptions, RedisResponse } from "./type";
76
import { createParser } from "./utils/create-parser";
87
import { encodeCommand } from "./utils/encode-command";
@@ -245,10 +244,12 @@ export class RedisClient {
245244
* You may unsubscribe through the `ReadableStream#cancel` or
246245
* `MessageEvent#cancel` methods.
247246
*/
248-
subscribe<T extends TSchema>(
249-
pattern: MaybeArray<RedisChannel<T> | RedisChannelPattern<T>>,
247+
subscribe<TPattern extends MaybeArray<RedisChannel | RedisChannelPattern>>(
248+
pattern: TPattern,
250249
signal?: AbortSignal,
251-
): ReadableStream<MessageEvent<T>> {
250+
): ReadableStream<
251+
ExtractMessageEvent<TPattern extends any[] ? TPattern[number] : TPattern>
252+
> {
252253
const subscriber = (this.#subscriber ??= new Subscriber(this.options));
253254
return subscriber.subscribe(pattern, signal);
254255
}

src/subscriber.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,3 +195,10 @@ export class MessageEvent<T extends TSchema = TSchema> {
195195
this.#stream.readable.cancel(reason);
196196
}
197197
}
198+
199+
export type ExtractMessageEvent<T extends SubscriptionKey> =
200+
T extends SubscriptionKey<infer TSchema>
201+
? TSchema extends any
202+
? MessageEvent<TSchema>
203+
: never
204+
: never;

0 commit comments

Comments
 (0)